/lib/FORM_DynTable.inc
PHP | 2707 lines | 2214 code | 382 blank | 111 comment | 415 complexity | 1a185d6c9d288c8367261bdb43aab11d MD5 | raw file
Large files files are truncated, but you can click here to view the full file
- <?php
- require_once('LANG_Label.inc');
- require_once('FORM_Object.inc');
- require_once('AV_ModObject.inc');
- require_once('LIB_Document.inc');
- require_once('AV_Exception.inc');
- require_once('FORM_LexAnalyzer.inc');
- require_once('AV_ArrayObject.inc');
- require_once('AV_FaultTolerantFS.inc');
- //--Class: FORM_DynTable
- //--Desc: Manages dynamic tables. Dynamic table have property tables
- //--Desc: associated.
- class FORM_DynTable
- {
- protected $table; //--Desc: Table's name
- protected $dbDriver; //--Desc: Database driver handler
- protected $module; //--Desc: Module's handler
- protected $pageBuilder;
- protected $fieldsDef; //--Desc: Keeps dynamic table fields
- //--Desc: definition
- protected $keyFields;
- protected $oldValues; //--Desc: Array of old values kept
- //--Desc: after an update
- protected $formulaFieldsDef;
- protected $formulas;
- protected $formulaType;
- protected $lang;
- private $lockedField;
-
-
- //
- //--Public
- //
- function __construct($table, &$module)
- {
- $this->table = $table;
- $this->module = & $module;
- $this->lang = $module->pageBuilder->lang;
- $this->pageBuilder = & $this->module->pageBuilder;
- $this->dbDriver = & $module->dbDriver;
- $this->lockedField = NULL;
- $this->fieldsDef = NULL;
- $this->formulaFieldsDef = NULL;
- $this->keyFields = array();
- }
- function GetReadableFields()
- {
- // Find readble fields
- $SQL = 'SELECT fieldName FROM FORM_Field ';
- $SQL .= "WHERE (accessMode = 'r' OR accessMode = 'rw') ";
- $SQL .= "AND tableName ='". $this->table ."' AND ";
- $SQL .= "type <> 'selectMult' ";
-
- return $this->dbDriver->GetCol($SQL);
- }
- function LoadFieldsDef($disableFileRequired = false,$disableRequired = false)
- {
- // prevents fieldsdef reload
- if($this->fieldsDef != NULL)
- return $this->fieldsDef;
- // load fieldsdef from database
- $fieldsDef = $this->GetFieldsDef();
- // prepare fieldsDef
- foreach($fieldsDef as & $fieldDef)
- $this->ParseFieldDef($fieldDef,$disableFileRequired,$disableRequired);
- return $this->fieldsDef;
- }
- function Duplicate($sourceKey, $fields, $extraFields = array())
- {
- // do insertion
- $SQL = "INSERT INTO " . $this->table . " (";
- $first = true;
- foreach($this->fieldsDef as $field)
- {
- if ($field['keyField'] != 1)
- {
- if (strpos($field['accessMode'],'w')!==false &&
- ((isset($field['list']) && !$field['list']) ||
- !isset($field['list'])) &&
- $field['type'] != 'selectMult' &&
- $field['type'] != 'descr')
- {
- if(!$first)
- {
- $SQL .= ', ';
- $VALS .= ', ';
- }
- $first = false;
- if($field['type'] == 'file')
- {
- $SQL .= $field['fieldName'].'FileName, ';
- $SQL .= $field['fieldName'].'Type, ';
- $VALS .= $field['fieldName'].'FileName, ';
- $VALS .= $field['fieldName'].'Type, ';
- }
- $SQL .= $field['fieldName'];
- if(isset($fields[$field['fieldName']]))
- $VALS .= "'".$fields[$field['fieldName']]."'";
- else
- $VALS .= $field['fieldName'];
- }
- }
- else
- {
- if(isset($fields[$field['fieldName']]))
- {
- if(!$first)
- {
- $SQL .= ', ';
- $VALS .= ', ';
- }
- $first = false;
- $SQL .= $field['fieldName'];
- $VALS .= "'".$fields[$field['fieldName']]."'";
- }
- }
- }
- foreach($extraFields as $key => $field)
- {
- if(!$first)
- {
- $SQL .= ', ';
- $VALS .= ', ';
- }
- $first = false;
- $SQL .= $key;
- $VALS .= "$field";
- }
-
- $SQL .= ") SELECT " . $VALS;
- $SQL .= " FROM " . $this->table;
- $SQL .= " WHERE ".$sourceKey['fieldName']."='".$sourceKey['fieldValue']."'";
- $this->dbDriver->ExecSQL($SQL);
-
- foreach($this->fieldsDef as $field)
- {
- switch($field['type'])
- {
- case "selectMult":
- case "selectMultiple":
- $this->DuplicateOptions($sourceKey,$field);
- break;
- case "fileList":
- $this->DuplicateFileList($sourceKey,$field);
- break;
- case "emailList":
- $this->DuplicateEmailList($sourceKey,$field);
- break;
- case "langLabel":
- case "langTextArea":
- case "langHtmlArea":
- $this->DuplicateLabel($sourceKey,$field);
- break;
- }
- }
- }
- function Insert(& $fields, $extraFields = array())
- {
- // checks for violated fields
- $this->CheckIndexes($fields);
- // prevents locale problems inserting float fields
- setlocale(LC_ALL, 'en_US');
- // do insertion
- $SQL = "INSERT INTO " . $this->table . " (";
- $first = true;
- $fileFields = array();
- foreach($this->fieldsDef as $field)
- {
- if ($field['keyField'] != 1)
- {
- if($field['type'] == 'file' &&
- $fields[$field['fieldName']]['error']==UPLOAD_ERR_OK &&
- $fields[$field['fieldName']]['tmp_name'] != NULL)
- {
- $this->SetFile($field,$fields[$field['fieldName']],$extraFields);
- if($this->dbDriver->type=='oracle')
- $fileFields[] = $field['fieldName'];
- }
- if (strpos($field['accessMode'],'w')!==false &&
- ((isset($field['list']) && !$field['list']) ||
- !isset($field['list'])) &&
- $field['type'] != 'selectMult' &&
- $field['type'] != 'descr' &&
- $fields[$field['fieldName']] !== NULL &&
- $fields[$field['fieldName']] !== '')
- {
- if(!$first)
- {
- $SQL .= ', ';
- $VALS .= ', ';
- }
- $first = false;
- $SQL .= $field['fieldName'];
- if(($field['type'] == 'select' ||
- $field['type'] == 'readOnlySelect')
- && (! isset($fields[$field['fieldName']]) ||
- $fields[$field['fieldName']] === 0 ||
- $fields[$field['fieldName']] === NULL))
- $VALS .= 'NULL';
- else
- {
- if($field['maxValue']!=NULL && $fields[$field['fieldName']] > $field['maxValue'])
- $VALS .= "'" .$field['maxValue']. "'";
- elseif($field['minValue']!=NULL && $fields[$field['fieldName']] < $field['minValue'])
- $VALS .= "'" .$field['minValue']. "'";
- else
- $VALS .= "'" . $fields[$field['fieldName']]. "'";
- }
- }
- }
- else
- {
- $fieldKey = $field['fieldName'];
- }
- }
- foreach($extraFields as $key => $field)
- {
- if(!$first)
- {
- $SQL .= ', ';
- $VALS .= ', ';
- }
- $first = false;
- $SQL .= $key;
- $VALS .= "$field";
- }
-
- // reverts default locale
- setlocale(LC_ALL, $this->lang.'.utf8');
-
- $SQL .= ") VALUES (" . $VALS . ")";
- if($this->dbDriver->type=='oracle' && count($fileFields)>0)
- {
- foreach($fileFields as $key=>$file)
- {
- if($key>0)
- {
- $FIELDS .= ',';
- $VARS .= ',';
- }
- $FIELDS .= $file;
- $VARS .= ':'.$file;
- $this->dbDriver->BindBlob($file,$fields[$file]['content']);
- }
- $SQL .= 'RETURNING '.$FIELDS;
- $SQL .= ' INTO '.$VARS;
- }
-
- $this->dbDriver->ExecSQL($SQL);
-
- // determine key value
- if($fields[$fieldKey]!=NULL)
- $keyValue = $fields[$fieldKey];
- elseif($extraFields[$fieldKey]!=NULL)
- $keyValue = $extraFields[$fieldKey];
- else
- $keyValue = 'LAST_INSERT_ID()';
- foreach($this->fieldsDef as $field)
- {
- switch($field['type'])
- {
- case "selectMult":
- $this->SetOptions($fields[$field['fieldName']], $field,
- $keyValue,$fieldKey);
- break;
- case "selectMultiple":
- $this->SetSelectMultiple($fields[$field['fieldName']], $field,
- $keyValue,$fieldKey);
- break;
- case "fileList":
- $this->SetFileList($fields[$field['fieldName']],$field,
- $keyValue);
- break;
- case "objectList":
- $this->SetObjectList($fields[$field['fieldName']],$field,
- $keyValue,$fieldKey,true);
- break;
- case "emailList":
- $this->SetEmailList($fields[$field['fieldName']],$field,
- $keyValue);
- break;
- case 'schedule':
- $this->SetSchedule($fields[$field['fieldName']], $field,
- $keyValue,$fieldKey);
- break;
- case "langLabel":
- case "langTextArea":
- case "langHtmlArea":
- $this->SetLabel($field, $fields[$field['fieldName']], $keyValue,
- $fieldKey);
- break;
- }
- }
- }
-
- function Set($fields, $extraFields = array())
- {
- // checks for violated fields
- $this->CheckIndexes($fields);
- // prevents locale problems inserting float fields
- setlocale(LC_ALL, 'en_US');
- $blobToFS = $this->pageBuilder->siteConfig->getVar('admin','blobToFS');
- // do update operation
- $SQL = "UPDATE " . $this->table . " SET ";
- $WHERE .= ' WHERE ';
- $first = true;
- $firstWhere = true;
- $fileFields = array();
- foreach($this->fieldsDef as $field)
- {
- if($field['type'] == 'file' &&
- $fields[$field['fieldName']]['error']==UPLOAD_ERR_OK &&
- $fields[$field['fieldName']]['tmp_name'] != NULL)
- {
- $this->SetFile($field,$fields[$field['fieldName']],$extraFields);
- if($this->dbDriver->type=='oracle' || $blobToFS)
- $fileFields[] = $field['fieldName'];
- }
- if($field['keyField'] == '0')
- {
- if (strpos($field['accessMode'],'w')!==false &&
- ((isset($field['list']) && !$field['list']) ||
- !isset($field['list'])) &&
- $field['type'] != 'selectMult' &&
- $field['type'] != 'descr')
- {
- if($fields[$field['fieldName']] !== NULL)
- {
- if(!$first)
- $SQL .= ', ';
- else
- $first = false;
- $SQL .= $field['fieldName'] . " = ";
- if($fields[$field['fieldName']] === '')
- $SQL .= 'NULL';
- else
- {
- if($field['maxValue']!=NULL && $fields[$field['fieldName']] > $field['maxValue'])
- $SQL .= "'" .$field['maxValue']. "'";
- elseif($field['minValue']!=NULL && $fields[$field['fieldName']] < $field['minValue'])
- $SQL .= "'" .$field['minValue']. "'";
- else
- $SQL .= "'" . $fields[$field['fieldName']] . "'";
- }
- }
- }
- }
- else
- {
- $fieldKey = $field['fieldName'];
- $fieldName = $field['fieldName'];
- if(!$firstWhere)
- $WHERE .= ' AND ';
- else
- $firstWhere = false;
- $WHERE .= $fieldName . " = '" . $fields[$fieldName] . "'";
- $fieldKeyValue = $fields[$fieldName];
- } // if($field['keyField'] == 0)
- } // foreach($this->fieldsDef as $field)
-
- foreach($extraFields as $field => $value)
- {
- if(!$first)
- $SQL .= ', ';
- else
- $first = false;
- $SQL .= "$field = $value";
- }
- // reverts default locale
- setlocale(LC_ALL, $this->lang.'.utf8');
- // lock rows
- $LOCK = 'SELECT * FROM ' . $this->table . $WHERE . ' FOR UPDATE';
- $this->oldValues = $this->dbDriver->GetRow($LOCK);
- if(count($this->oldValues) == 0)
- throw new AV_Exception(NOT_FOUND, $this->lang);
- // do update
- if(!$first)
- {
- $SQL .= $WHERE;
- if($this->dbDriver->type=='oracle' && count($fileFields)>0 && !$blobToFS)
- {
- foreach($fileFields as $key=>$file)
- {
- if($key>0)
- {
- $FIELDS .= ',';
- $VARS .= ',';
- }
- $FIELDS .= $file;
- $VARS .= ':'.$file;
- $this->dbDriver->BindBlob($file,$fields[$file]['content']);
- }
- $SQL .= 'RETURNING '.$FIELDS;
- $SQL .= ' INTO '.$VARS;
- }
-
- $this->dbDriver->ExecSQL($SQL);
- }
- // mark old blob filesystem files to be deleted if they were updated
- if($blobToFS && count($fileFields)>0)
- {
- $SQL = "UPDATE LIB_BlobFS SET deleted='1' ";
- $SQL .= 'WHERE id IN (';
- $firstBlob = true;
- foreach($fileFields as $key=>$file)
- {
- if($firstBlob)
- $firstBlob = false;
- else
- $SQL .= ',';
- $SQL .= "'".$this->oldValues[$file]."'";
- }
- $SQL .= ')';
- $this->dbDriver->ExecSQL($SQL);
- }
- foreach($this->fieldsDef as $field)
- {
- switch($field['type']){
- case "selectMult":
- $this->SetOptions($fields[$field['fieldName']], $field,
- $fieldKeyValue, $fieldKey);
- break;
- case "selectMultiple":
- $this->SetSelectMultiple($fields[$field['fieldName']], $field,
- $fieldKeyValue, $fieldKey);
- break;
- case "fileList":
- $this->oldValues[$field['fieldName']] =
- $this->SetFileList($fields[$field['fieldName']],$field,
- $fieldKeyValue);
- break;
- case "objectList":
- $this->oldValues[$field['fieldName']] =
- $this->SetObjectList($fields[$field['fieldName']],$field,
- $fieldKeyValue,$fieldKey,false);
- break;
- case "emailList":
- $this->oldValues[$field['fieldName']] =
- $this->SetEmailList($fields[$field['fieldName']],$field,
- $fieldKeyValue);
- break;
- case 'schedule':
- $this->SetSchedule($fields[$field['fieldName']], $field,
- $fieldKeyValue,$fieldKey);
- break;
- case "langLabel":
- case "langTextArea":
- case "langHtmlArea":
- $this->SetLabel($field, $fields[$field['fieldName']],
- $fieldKeyValue, $fieldKey);
- break;
- }
- }
-
- return $this->oldValues;
- }
- function Del($fields)
- {
- // do update operation
- $SQL = "DELETE FROM " . $this->table . " WHERE ";
- $first = true;
- foreach($this->fieldsDef as $field)
- {
- if($field['keyField'] != '0')
- {
- $fieldName = $field['fieldName'];
- if(!$first)
- $SQL .= 'AND ';
- else
- $first = false;
- $SQL .= $fieldName . " = '" . $fields[$fieldName] . "' ";
- }
- }
-
- if($first)
- throw new AV_Exception(FAILED, $this->lang);
- // does delete operation
- $this->dbDriver->ExecSQL($SQL);
- }
- function GetForm($keyFields, $fieldName, $sourceId, & $templates,
- & $formObject, $defValues = array(),$dateFormat = NULL,
- $numberFormat = true, $short = false)
- {
- // load formula defs
- $this->LoadFormulaDefs();
- foreach($this->formulaFieldsDef as $value)
- {
- $fields[$value['fieldName']] = $this->ConvertIf($value['expression']);
- $this->formulaType[$value['fieldName']] = $value['formulaType'];
- }
- $parms['locale'] = localeconv();
- foreach($fields as $field => $expression)
- $this->formulas[$field] = $this->Decompose($this->formulas, $expression,
- $fields,$parms);
- $this->LoadFieldsDef();
- if($keyFields != NULL)
- $values = $this->Get($keyFields);
- else
- $values = $this->GetDefValues();
- $values = ArrayObjectMerge($defValues, $values);
- $langLabel = new LANG_Label($this->module);
- foreach ($this->fieldsDef as $key=>$value)
- {
- if($fieldName == '' || $fieldName == $value['fieldName'] || strstr($fieldName,'.',true)==$value['fieldName'])
- {
- // desabilita template da base em caso de carregamento de campo único
- if($fieldName == $value['fieldName'])
- unset($this->fieldsDef[$key]['template']);
- // ajusta label para todos os campos
- if($value['labelId']!=NULL)
- $this->fieldsDef[$key]['label'] =
- $langLabel->GetLabel($value['labelId'],
- $this->lang);
- // ajusta outros labels do campo
- $this->SetFieldLabels($this->fieldsDef[$key]);
- // ajusta xhtmlRequired para todos os campos
- if($value['required'])
- {
- $this->fieldsDef[$key]['xhtmlRequired'] = "class='required'";
- $this->fieldsDef[$key]['required'] = "required";
- }
- else
- unset($this->fieldsDef[$key]['required']);
- // desabilita campo caso não seja para escrita
- if(strpos($value['accessMode'],'w')==false)
- $this->fieldsDef[$key]['xhtmlDisabled'] = "disabled='disabled'";
- // ajusta versão do avalanche para uso nos campos
- $this->fieldsDef[$key]['avVersion'] = $this->pageBuilder->avVersion;
- $child = & $this->GetField($this->fieldsDef[$key],$values,$keyFields,
- $templates,$sourceId,$dateFormat,
- $numberFormat,$fieldName,$short);
- if($child != NULL)
- {
- $formObject->children[$value['orderby']] = & $child;
- $formObject->attrs[$value['fieldName']] = $child->attrs['value'];
- if($short)
- unset($child->attrs['value']);
- }
- else if(isset($values[$value['fieldName']]))
- {
- $formObject->attrs[$value['fieldName']] = $values[$value['fieldName']];
- }
-
- }
- }
- return $formObject;
- }
- function Get($keyFields)
- {
- $where = NULL;
- $select = NULL;
- foreach($this->fieldsDef as $key => $value)
- {
- if($value['type'] != 'selectMult' &&
- $value['type'] != 'descr' &&
- strpos($value['accessMode'],'r')!==false)
- {
- if($select != NULL)
- $select .= ',';
- $select .= $value['fieldName'];
- }
- if($value['keyField'] == 1)
- {
- if (!isset($keyFields[$value['fieldName']]))
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- Array('fieldName'=>$value['fieldName'],
- 'table'=>$this->table,
- 'addMsg'=>' ('.$value['fieldName']. ')'));
- if($where != NULL)
- $where .= ' AND ';
- $where .= $value['fieldName']. " = '";
- $where .= $keyFields[$value['fieldName']]. "'";
- }
- }
- $from = $this->table;
- // no fields to be returned
- if($select == NULL)
- return NULL;
- if($where == NULL)
- {
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- Array('fieldName'=>'keyFields',
- 'table'=>$this->table,
- 'addMsg'=>' (keyFields)'));
- }
- $SQL = ' SELECT ' .$select. ' FROM ' .$from. ' WHERE ' ;
- $SQL .= $where. ' LOCK IN SHARE MODE';
-
- // Executes SQL statement
- $values = $this->dbDriver->GetRow($SQL);
- if($values==NULL)
- {
- throw new AV_Exception(NOT_FOUND, $this->lang,
- Array('table'=>$this->table));
- }
- return $values;
- }
- function GetDefValues()
- {
- try
- {
- $desc = $this->dbDriver->GetAll('DESC '.$this->table);
- $values = array();
- foreach($desc as $field)
- {
- if($field['Default']!==NULL && $field['Default']!=='' &&
- !in_array($field['Field'],$this->keyFields))
- $values[$field['Field']] = $field['Default'];
- }
- return $values;
- }
- catch(Exception $e)
- {
- // table may not exist (search fields form)
- return array();
- }
- }
-
- function GetAll($orderBy = NULL)
- {
- $returnFields = $this->GetReadableFields();
- if(count($returnFields)==0)
- throw new AV_Exception(FAILED, $this->lang);
- $returnFields = implode(',', $returnFields);
- $SQL = "SELECT $returnFields FROM ".$this->table.' ';
- if($orderBy != NULL)
- $SQL .= "ORDER BY $orderBy ";
- $SQL .= 'LOCK IN SHARE MODE';
-
- return $this->dbDriver->GetAll($SQL);
- }
- function AddField($fieldName, $dbType, $labels, $type, $size, $prevField,
- $consistType, $required, $allowNull,$accessMode)
- {
- if($prevField != '')
- {
- $SQL = 'SELECT orderby FROM FORM_Field WHERE ';
- $SQL .= "tableName='".$this->table."' AND fieldName = '$prevField' ";
- $SQL .= 'LOCK IN SHARE MODE ';
- $order = $this->dbDriver->GetOne($SQL);
- if($order == NULL)
- throw new AV_Exception(INVALID_FIELD, $this->lang);
- $SQL = 'SELECT orderby from FORM_Field WHERE ';
- $SQL .= "tableName='".$this->table."' AND orderby > $order ";
- $SQL .= 'FOR UPDATE ';
- $this->dbDriver->GetCol($SQL);
-
- $SQL = 'UPDATE FORM_Field SET orderby=orderby+1 WHERE ';
- $SQL .= "tableName='".$this->table."' AND orderby > $order";
- $this->dbDriver->ExecSQL($SQL);
- $order++;
- }
- else
- $order = 1;
- $labelMan = new LANG_Label($this->module);
- $labelId = $this->table . '_' . $fieldName;
- $labelMan->SetLabel($labelId, $labels);
-
- $SQL = 'INSERT INTO FORM_Field ';
- $SQL .= '(tableName,fieldName,labelId,type,size,orderby,';
- $SQL .= 'consistType,required,allowNull,trimField,';
- $SQL .= 'uniq,keyField,accessMode,staticProp) VALUES ';
- $SQL .= "('".$this->table."','$fieldName','$labelId','$type',$size,";
- $SQL .= "$order,'$consistType','$required','$allowNull','1',";
- $SQL .= "'0','0','$accessMode','0')";
- $this->dbDriver->ExecSQL($SQL);
- // clears fieldsDef to force new load
- $this->fieldsDef = NULL;
- $SQL = 'ALTER TABLE ' . $this->table;
- $SQL .= " ADD $fieldName $dbType;";
- return $SQL;
- }
- function ChangeField($newName, $dbType, $labels, $type, $size,
- $consistType, $required, $allowNull,$accessMode)
- {
- if($this->lockedField==NULL)
- throw new AV_Exception(FAILED, $this->lang);
- if($this->lockedField['staticProp']=='1')
- throw new AV_Exception(PERMISSION_DENIED, $this->lang);
- $SQL = NULL;
- if($labels != NULL)
- {
- $labelMan = new LANG_Label($this->module);
- $labelId = $this->table . '_' . $this->lockedField['fieldName'];
- $labelMan->SetLabel($labelId, $labels);
- $SQL = "labelId='$labelId'";
- }
- if($type != NULL)
- {
- if($SQL != NULL)
- $SQL .= ',';
- $SQL .= "type='$type'";
- }
- if($size != NULL)
- {
- if($SQL != NULL)
- $SQL .= ',';
- $SQL .= "size=$size";
- }
- if($consistType != NULL)
- {
- if($SQL != NULL)
- $SQL .= ',';
- $SQL .= "consistType='$consistType'";
- }
- if($required != NULL)
- {
- if($SQL != NULL)
- $SQL .= ',';
- $SQL .= "required='$required'";
- }
- if($allowNull != NULL)
- {
- if($SQL != NULL)
- $SQL .= ',';
- $SQL .= "allowNull='$allowNull'";
- }
- if($accessMode != NULL)
- {
- if($SQL != NULL)
- $SQL .= ',';
- $SQL .= "accessMode='$accessMode'";
- }
- if($SQL != NULL)
- {
- $SQL = "UPDATE FORM_Field SET $SQL WHERE ";
- $SQL .= "tableName='".$this->table."' AND ";
- $SQL .= "fieldName='".$this->lockedField['fieldName']."' ";
- $this->dbDriver->ExecSQL($SQL);
- // clears fieldsDef to force new load
- $this->fieldsDef = NULL;
- }
- if($newName != NULL && $dbType != NULL)
- {
- $SQL = 'ALTER TABLE ' . $this->table;
- $SQL .= " CHANGE ".$this->lockedField['fieldName']." $newName $dbType;";
- $this->lockedField = NULL;
- return $SQL;
- }
- else if($newName != NULL || $dbType != NULL)
- throw new AV_Exception(INVALID_FIELD, $this->lang);
- $this->lockedField = NULL;
- return NULL;
- }
- function DropField($fieldName)
- {
- $SQL = 'DELETE FROM FORM_Field WHERE ';
- $SQL .= "tableName='".$this->table."' AND fieldName='$fieldName' ";
- $this->dbDriver->ExecSQL($SQL);
-
- // clears fieldsDef to force new load
- $this->fieldsDef = NULL;
- $SQL = 'ALTER TABLE ' . $this->table;
- $SQL .= " DROP $fieldName";
- return $SQL;
- }
- function SetOrder($fieldName, $up)
- {
-
- $SQL = 'SELECT MAX(orderby) FROM FORM_Field WHERE ';
- $SQL .= "tableName = '" . $this->table . "' ";
- $SQL .= "LOCK IN SHARE MODE";
- $last = $this->dbDriver->GetOne($SQL);
- if($last == NULL)
- throw new AV_Exception(FAILED, $this->lang);
- $SQL = 'SELECT orderby FROM FORM_Field WHERE ';
- $SQL .= "tableName = '" . $this->table . "' AND fieldName = '$fieldName' ";
- $SQL .= "FOR UPDATE";
- $order = $this->dbDriver->GetOne($SQL);
- if($order == NULL)
- return;
- //up ou down
- if($up)
- {
- if($order == 1)
- return;
- $nextOrder = $order-1;
- }
- else
- {
- if($last == $order)
- return;
- $nextOrder = $order+1;
- }
-
- $SQL = 'SELECT orderby FROM FORM_Field WHERE ';
- $SQL .= "tableName = '" . $this->table . "' AND orderby = $nextOrder ";
- $SQL .= "FOR UPDATE";
- $nextOrder = $this->dbDriver->GetOne($SQL);
- if($nextOrder == NULL)
- throw new AV_Exception(FAILED, $this->lang);
- $SQL = "UPDATE FORM_Field SET orderby=$order WHERE ";
- $SQL .= "tableName = '" . $this->table . "' AND orderby = $nextOrder ";
- $this->dbDriver->ExecSQL($SQL);
-
- $SQL = "UPDATE FORM_Field SET orderby=$nextOrder WHERE ";
- $SQL .= "tableName = '" . $this->table . "' AND fieldName = '$fieldName' ";
- $this->dbDriver->ExecSQL($SQL);
-
- // clears fieldsDef to force new load
- $this->fieldsDef = NULL;
- }
- function GetFieldInfo($fieldName)
- {
- $SQL = 'SELECT labelId,type,template,langTemplate,size,orderby,';
- $SQL .= 'consistType,required,allowNull ';
- $SQL .= 'FROM FORM_Field WHERE ';
- $SQL .= "tableName = '" . $this->table . "' AND fieldName = '$fieldName' ";
- $SQL .= 'LOCK IN SHARE MODE ';
- $field = $this->dbDriver->GetRow($SQL);
- if(count($field) == 0)
- throw new AV_Exception(NOT_FOUND, $this->lang);
- $labelMan = new LANG_Label($this->module);
- $labelList = $labelMan->GetLabelList($field['labelId']);
- foreach($labelList as $label)
- $field['descr_'.$label['lang']] = $label['value'];
- return $field;
- }
- function GetNextFieldValue($fieldName, $prefix)
- {
- $offset = mb_strlen($prefix) + 1;
- $SQL = "SELECT MAX(SUBSTR($fieldName,$offset)+0) ";
- $SQL .= 'FROM '. $this->table .' WHERE ';
- $SQL .= "$fieldName like '$prefix%' ";
- $SQL .= 'LOCK IN SHARE MODE';
- $num = $this->dbDriver->GetOne($SQL);
- if($num == NULL)
- return $prefix.'1';
- return $prefix . ++$num;
- }
- function GetSelectFieldInfo($fieldName)
- {
- $SQL = 'SELECT * FROM FORM_SelectField WHERE ';
- $SQL .= "tableName = '".$this->table."' AND fieldName = '$fieldName' ";
- $SQL .= 'LOCK IN SHARE MODE ';
- return $this->dbDriver->GetRow($SQL);
- }
- //
- //--Protected
- //
- protected function ParseFieldDef(& $fieldDef,$disableFileRequired,$disableRequired)
- {
- $key = $fieldDef['orderby'];
- $this->fieldsDef[$key] = & $fieldDef;
- // sets default stripSlashes to false
- $this->fieldsDef[$key]['stripSlashes'] = false;
- if($disableRequired)
- $fieldDef['required'] = '0';
- if($fieldDef['keyField']=='1')
- $this->keyFields[] = $fieldDef['fieldName'];
- if($fieldDef['attributes'] != NULL)
- $fieldDef['attributes'] = json_decode($fieldDef['attributes'],true);
- switch($fieldDef['type'])
- {
- // sets langLabel field as list
- case 'langLabel':
- case "langTextArea":
- case "langHtmlArea":
- $this->fieldsDef[$key]['list'] = true;
- $this->fieldsDef[$key]['sizeVarName'] = $fieldDef['fieldName'].
- '_numOfOptions';
- $subfieldDef = array();
- $subfieldDef[0]['fieldName'] = 'lang';
- $subfieldDef[0]['required'] = $fieldDef['required'];
- $subfieldDef[0]['allowNull'] = $fieldDef['allowNull'];
- $subfieldDef[0]['stripSlashes'] = false;
- $subfieldDef[1]['fieldName'] = 'value';
- $subfieldDef[1]['required'] = $fieldDef['required'];
- $subfieldDef[1]['allowNull'] = $fieldDef['allowNull'];
- $subfieldDef[1]['stripSlashes'] = false;
- $subfieldDef[1]['consistType'] = $fieldDef['consistType'];
- $this->fieldsDef[$key]['fieldsDef'] = $subfieldDef;
- break;
- case 'schedule':
- $this->fieldsDef[$key]['list'] = true;
- $this->fieldsDef[$key]['required'] = $fieldDef['required'];
- $this->fieldsDef[$key]['sizeVarName'] = $fieldDef['fieldName'].
- '_numOfOptions';
- $subfieldDef = array();
- $subfieldDef[0]['fieldName'] = 'start';
- $subfieldDef[0]['required'] = false;
- $subfieldDef[0]['allowNull'] = true;
- $subfieldDef[0]['consistType'] = 'datetime';
- $subfieldDef[1]['fieldName'] = 'numOfHours';
- $subfieldDef[1]['required'] = false;
- $subfieldDef[1]['allowNull'] = true;
- $subfieldDef[1]['consistType'] = 'integer';
- $this->fieldsDef[$key]['fieldsDef'] = $subfieldDef;
- break;
- case 'selectMult':
- $this->fieldsDef[$key]['list'] = true;
- $this->fieldsDef[$key]['sizeVarName'] = $fieldDef['fieldName'].
- '_numOfOptions';
- $subfieldDef = array();
- $subfieldDef[0]['fieldName'] = 'value';
- $subfieldDef[0]['required'] = false;
- $subfieldDef[0]['allowNull'] = true;
- $subfieldDef[0]['consistType'] = 'integer';
- $this->fieldsDef[$key]['fieldsDef'] = $subfieldDef;
- break;
- case 'selectMultiple':
- // gambiarra pra evitar addslashes
- $this->fieldsDef[$key]['stripSlashes'] = true;
- break;
- case 'fileList':
- $subfieldDef = array();
- $subfieldDef[0]['fieldName'] = 'docId';
- $subfieldDef[0]['required'] = true;
- $subfieldDef[0]['allowNull'] = false;
- $subfieldDef[0]['consistType'] = 'integer';
- $this->fieldsDef[$key]['fieldsDef'] = $subfieldDef;
- // gambiarra pra evitar addslashes
- $this->fieldsDef[$key]['stripSlashes'] = true;
- break;
- case 'objectList':
- $subfields = $this->LoadObjectListDefs($fieldDef);
- $this->fieldsDef[$key]['fieldsDef'] = $subfields;
- // gambiarra pra evitar addslashes
- $this->fieldsDef[$key]['stripSlashes'] = true;
-
- break;
-
- case 'file':
- // gambiarra pra evitar addslashes
- $this->fieldsDef[$key]['stripSlashes'] = true;
-
- if($disableFileRequired)
- $this->fieldsDef[$key]['required'] = '0';
- $this->fieldsDef[$key]['allowNull'] = '1';
- break;
-
- case 'emailList':
- // gambiarra pra evitar addslashes
- $this->fieldsDef[$key]['stripSlashes'] = true;
- }
- }
-
- protected function LoadObjectListDefs($fieldDef)
- {
- $data = $this->GetObjectListInfo($fieldDef);
- $libDoc = new LIB_Document($this->module);
- $fieldsDef = $libDoc->LoadFieldsDef(NULL, $data['path']);
- $excludeFields = array('userId','groupId','userRight','groupRight',
- 'otherRight','creationDate','lastChanged',
- 'lastChangedUserId','keywords');
- foreach($fieldsDef as $key => &$field)
- if(in_array($field['fieldName'],$excludeFields))
- unset($fieldsDef[$key]);
- return $fieldsDef;
- }
- protected function GetObjectListInfo($fieldDef)
- {
- $SQL = 'SELECT path, ol.folderId, parentIdField ';
- $SQL .= 'FROM FORM_ObjectListField ol, LIB_Folder f ';
- $SQL .= "WHERE tableName='".$this->table."' ";
- $SQL .= "AND fieldName='".$fieldDef['fieldName']."' ";
- $SQL .= 'AND ol.folderId=f.folderId ';
- $data = $this->dbDriver->GetRow($SQL);
- if(count($data) == NULL)
- throw new AV_Exception(NOT_FOUND, $this->lang);
- return $data;
- }
- protected function GetFieldsDef()
- {
- $SQL = 'SELECT labelId,fieldName,type,template,langTemplate,outputFuncRef,';
- $SQL .= 'size,attributes,consistType,`maxValue`,minValue,allowNull,trimField,required,uniq,';
- $SQL .= 'staticProp,accessMode, keyField, orderby ';
- $SQL .= 'FROM FORM_Field ';
- $SQL .= "WHERE tableName ='". $this->table;
- $SQL .= "' ORDER BY orderby";
- $SQL .= ' LOCK IN SHARE MODE ';
- // Executes SQL statement
- return $this->dbDriver->GetAll($SQL);
- }
- protected function GetTemplate($templates, $fieldName)
- {
- if(is_array($templates[$fieldName]))
- return $templates[$fieldName]['fileName'];
- else
- return $templates[$fieldName];
- }
- protected function &GetField(& $fieldDef, & $values, $keyFields,
- & $templates, $sourceId, $dateFormat = NULL,
- $numberFormat = true, $fieldName = NULL,
- $short = false)
- {
- switch ($fieldDef['type'])
- {
- case "langLabel":
- case "langTextArea":
- case "langHtmlArea":
- return $this->GetLangField($fieldDef, $values, $templates);
- case 'descr':
- case "password":
- case 'textArea':
- case "text":
- case 'hidden':
- case 'integer':
- case 'dateFilter':
- case 'currencyFilter':
- case 'integerFilter':
- return $this->GetTextField($fieldDef, $values);
- case 'authSecret':
- return $this->GetAuthSecretField($fieldDef, $values);
- case 'htmlArea':
- if($short)
- return $this->GetTextField($fieldDef, $values);
- return $this->GetHtmlField($fieldDef, $values);
- case 'boolean':
- return $this->GetBooleanField($fieldDef, $values);
- case "accessRight":
- return $this->GetAccessRightField($fieldDef, $values);
- case "date":
- case "datetime":
- return $this->GetDateField($fieldDef, $values, $dateFormat);
- case "cpf":
- return $this->GetCpfField($fieldDef, $values);
-
- case "cnpj":
- return $this->GetCnpjField($fieldDef, $values);
-
- case "cep":
- return $this->GetCepField($fieldDef, $values);
- case 'schedule':
- return $this->GetScheduleField($fieldDef, $values, $keyFields);
- case "select":
- case "radio":
- return $this->GetSelectField($fieldDef, $values, $keyFields,
- $templates, $sourceId);
- case 'readOnlySelect':
- return $this->GetReadOnlySelectField($fieldDef, $values);
- case "selectMult":
- case "selectMultiple":
- return $this->GetSelectMultField($fieldDef, $values, $keyFields,
- $templates, $sourceId);
- case 'float':
- case 'currency':
- return $this->GetFloatField($fieldDef, $values, $numberFormat);
- case 'percent':
- return $this->GetPercentField($fieldDef, $values, $numberFormat);
- case 'file':
- return $this->GetFileField($fieldDef, $values);
- case 'usageTerms':
- return $this->GetUsageTermsField($fieldDef, $values);
- case 'legalEntityRef':
- return $this->GetLEOrNPEntityRef($fieldDef, $values,
- 'legalEntity');
- case 'naturalPersonRef':
- return $this->GetLEOrNPEntityRef($fieldDef, $values,
- 'naturalPerson');
- case 'leOrNpEntityRef':
- return $this->GetLEOrNPEntityRef($fieldDef, $values, NULL);
- case 'fileList':
- return $this->GetFileListField($fieldDef,$keyFields,$templates);
- case 'objectList':
- return $this->GetObjectListField($fieldDef,$keyFields,$dateFormat,
- $numberFormat,$fieldName,$short);
- case 'emailList':
- return $this->GetEmailListField($fieldDef,$keyFields,$templates);
- case 'folder':
- return $this->GetFolderField($fieldDef, $values);
- case 'formula':
- return $this->GetFormulaField($fieldDef, $values);
- default:
- return NULL;
- }
- }
- //--Method: GetLangLabel
- protected function GetLangField(& $fieldDef, & $values, & $templates)
- {
- // retrieves all registered languages
- $langLabel = new LANG_Label($this->module);
- $langList = $langLabel->GetLangList();
- // creates lang field
- $langField = new FORM_Object('field', $this->pageBuilder,
- $templates, 'nextLangField');
- $langField->attrs['fieldName'] = $fieldDef['fieldName'];
- $langField->attrs['numOfOptions'] = count($langList);
- $langField->attrs['type'] = 'langField';
- // creates lang subfields
- foreach($langList as $key => $lang)
- {
- $field = new AV_ModObject('field', $this->pageBuilder);
- // fieldDef pode ser AV_OCIArray no caso de conexão oracle
- if(gettype($fieldDef)=='object')
- $field->attrs = clone $fieldDef;
- else
- $field->attrs = $fieldDef;
- $field->attrs['lang'] = $lang['lang'];
- $field->attrs['langLabel'] = mb_substr($lang['lang'],0,2);
- $field->attrs['fieldIndex'] = $key+1;
- $keys[$lang['lang']] = $key;
- $langField->children[$key] = $field;
- // initiate new html to have at least a <p> </p>
- if($fieldDef['type'] == 'langHtmlArea')
- $field->attrs['value'] = "<p> </p>";
- }
- // set's lang subfields values
- $list = $langLabel->GetLabelList($values[$fieldDef['fieldName']],
- $fieldDef['type']!='langLabel');
- foreach($list as $key=>$value)
- {
- $langField->children[$keys[$value['lang']]]->attrs['value'] =
- $value['value'];
- if($value['lang'] == $this->lang)
- $langField->attrs['value'] = $value['value'];
- }
- return $langField;
- }
-
- //--Method: GetTextField
- protected function &GetTextField(& $fieldDef, $values)
- {
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- $modobj = new AV_ModObject('field', $this->pageBuilder);
- $modobj->attrs = $fieldDef;
- return $modobj;
- }
- protected function &GetAuthSecretField(& $fieldDef, $values)
- {
- global $SM_siteID;
- $ga = new PHPGangsta_GoogleAuthenticator();
- if($values[$fieldDef['fieldName']]==NULL)
- $fieldDef['value'] = $ga->createSecret();
- else
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- $name = $SM_siteID;
- $fieldDef['qrCodeUrl'] = $ga->getQRCodeGoogleUrl($SM_siteID.'-'.$values['login'],
- $fieldDef['value']);
- $modobj = new AV_ModObject('field', $this->pageBuilder);
- $modobj->attrs = $fieldDef;
- return $modobj;
- }
-
- //--Method: GetTextField
- protected function GetHtmlField(& $fieldDef, $values)
- {
- // initiate new html to have at least a <p> </p>
- if($values[$fieldDef['fieldName']] == NULL)
- $values[$fieldDef['fieldName']] = "<p> </p>";
- return $this->GetTextField($fieldDef,$values);
- }
- //--Method: GetTextField
- protected function &GetBooleanField(& $fieldDef, $values)
- {
- if($values[$fieldDef['fieldName']])
- $fieldDef['xhtmlCheckedAttr'] = "checked='checked'";
- return $this->GetTextField($fieldDef, $values);
- }
- //--Method: GetTextField
- protected function &GetPercentField(& $fieldDef, $values, $numberFormat)
- {
- if($numberFormat)
- $values[$fieldDef['fieldName']] *= 100;
- return $this->GetFloatField($fieldDef, $values,$numberFormat);
- }
- //--Method: GetTextField
- protected function &GetFloatField(& $fieldDef, $values, $numberFormat)
- {
- if($numberFormat)
- {
- $locale = localeconv();
-
- if(isset($values[$fieldDef['fieldName']]))
- {
- $fieldDef['value'] = number_format($values[$fieldDef['fieldName']],
- $locale['frac_digits'],
- $locale['mon_decimal_point'],
- $locale['mon_thousands_sep']);
- }
- }
- else
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- $modobj = new AV_ModObject('field', $this->pageBuilder);
- $modobj->attrs = $fieldDef;
- return $modobj;
- }
-
- protected function GetAccessRightField(& $fieldDef, $values)
- {
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- $fieldDef['read'] = (strpos($fieldDef['value'],'r')===false)?'0':'1';
- $fieldDef['write'] = (strpos($fieldDef['value'],'w')===false)?'0':'1';
- $modobj = new AV_ModObject('field', $this->pageBuilder);
- $modobj->attrs = $fieldDef;
- return $modobj;
- }
-
- protected function &GetDateField(& $fieldDef, $values, $dateFormat)
- {
- if($values[$fieldDef['fieldName']] != 0)
- {
- $timestamp = strtotime($values[$fieldDef['fieldName']]);
- if($dateFormat != NULL)
- {
- $fieldDef['value'] = strftime($dateFormat,$timestamp);
- $fieldDef['valueUTS'] = $values[$fieldDef['fieldName']];
- }
- else
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- $fieldDef['year'] = date('Y',$timestamp);
- $fieldDef['month'] = date('m',$timestamp);
- $fieldDef['day'] = date('d',$timestamp);
-
- $fieldDef['hour'] = date('H',$timestamp);
- $fieldDef['minute'] = date('i',$timestamp);
- $fieldDef['second'] = date('s',$timestamp);
- }
- $modobj = new AV_ModObject('field', $this->pageBuilder);
- $modobj->attrs = $fieldDef;
- return $modobj;
- }
-
- //--Method: GetCpfField
- protected function &GetCpfField(& $fieldDef, $values)
- {
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- $fieldDef['cpf_1'] = mb_substr($values[$fieldDef['fieldName']],0,-2);
- $fieldDef['cpf_2'] = mb_substr($values[$fieldDef['fieldName']],-2);
- $modobj = new AV_ModObject('field', $this->pageBuilder);
- $modobj->attrs = $fieldDef;
- return $modobj;
- }
-
- //--Method: GetCnpjField
- protected function &GetCnpjField(& $fieldDef, $values)
- {
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- $fieldDef['cnpj_1'] = mb_substr($values[$fieldDef['fieldName']],0,-6);
- $fieldDef['cnpj_2'] = mb_substr($values[$fieldDef['fieldName']],-6, 4);
- $fieldDef['cnpj_3'] = mb_substr($values[$fieldDef['fieldName']],-2);
- $modobj = new AV_ModObject('field', $this->pageBuilder);
- $modobj->attrs = $fieldDef;
- return $modobj;
- }
- //--Method: GetCepField
- protected function &GetCepField(& $fieldDef, $values)
- {
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- $fieldDef['cep_1'] = mb_substr($values[$fieldDef['fieldName']],0,-3);
- $fieldDef['cep_2'] = mb_substr($values[$fieldDef['fieldName']],-3);
- $modobj = new AV_ModObject('field', $this->pageBuilder);
- $modobj->attrs = $fieldDef;
- return $modobj;
- }
- //--Method: GetSchedule
- protected function &GetScheduleField(& $fieldDef, $values, $keyFields)
- {
- $SQL = "SELECT LPAD(DAY(start),2,'0') as startDay, ";
- $SQL .= "LPAD(MONTH(start),2,'0') as startMonth, ";
- $SQL .= "LPAD(YEAR(start),4,'0') as startYear, ";
- $SQL .= "LPAD(HOUR(start),2,'0') as startHour, ";
- $SQL .= "LPAD(MINUTE(start),2,'0') as startMinute, numOfHours ";
- $SQL .= 'FROM AV_Schedule ';
- $SQL .= "WHERE docId='".$keyFields['docId']."' ";
- $SQL .= 'ORDER BY start ';
- $scheduleList = $this->dbDriver->GetAll($SQL);
- $values[$fieldDef['fieldName']] = json_encode($scheduleList);
- return $this->GetTextField($fieldDef,$values);
-
- }
- //--Method: GetSelectField
- function &GetSelectField(& $fieldDef,$values,$keyFields,$templates,
- $sourceId)
- {
- // retrieves information from FORM_SelectField
- $SQL = ' SELECT * FROM FORM_SelectField WHERE ';
- $SQL .= "tableName='" .$this->table. "' AND ";
- $SQL .= "(fieldName='" . $fieldDef['fieldName']. "' OR ";
- $SQL .= "FIND_IN_SET('".$fieldDef['fieldName']."',targetField)<>0) ";
- $selectFields = $this->dbDriver->GetAll($SQL);
- foreach($selectFields as $key=>$sField)
- {
- if($selectFields[$key]['fieldName']==$fieldDef['fieldName'])
- $field = $selectFields[$key];
- else
- {
- $targetFields = explode(',',$selectFields[$key]['targetField']);
- if(in_array($fieldDef['fieldName'],$targetFields))
- $sourceField=$selectFields[$key]['fieldName'];
- }
- }
- $fieldDef['targetField'] = $field['targetField'];
- $fieldDef['sourceField'] = $field['sourceField'];
- $modobj = new FORM_Object('field', $this->pageBuilder,
- $templates, $fieldDef['type'].'Option');
- $modobj->attrs = & $fieldDef;
- if($field['sourceField'] != NULL)
- {
- if($sourceId != '')
- $sourceValue = $sourceId;
- else
- $sourceValue = $values[$sourceField];
- //$fieldDef['value'] = $sourceValue;
- }
- // else
- $fieldDef['value'] = $values[$fieldDef['fieldName']];
- // retrieves select options if sourceField is NULL (no dependence)
- // or if sourceValue is set (dependence solved)
- if($field['sourceField'] == NULL || $sourceValue != '')
- {
- $currValue = $values[$fieldDef['fieldName']];
- $SQL = "SELECT ";
- if($field['optionTableValue'] == NULL)
- $SQL .= 'value, ';
- else
- $SQL .= $field['optionTableValue'] . ' as value, ';
- $SQL .= $field['optionTableKey'] . " as id,";
- $SQL .= "IF(" . $field['optionTableKey'] . " ='".$currValue;
- $SQL .= "',1,0) as selected, '";
- $SQL .= $fieldDef['type']."Option' as type FROM ";
- $SQL .= $field['optionTable'];
- if($field['optionTableValue'] == NULL)
- $SQL .= " ,LANG_Label";
- $WHERE = '';
- if($sourceValue != '')
- $WHERE = $field['sourceField'] . " = '$sourceValue' ";
- if($field['optionTableValue'] == NULL)
- {
- if($WHERE != '')
- $WHERE .= ' AND ';
- $WHERE .= "labelId = name AND lang = '";
- $WHERE .= $this->lang."'";
- }
- if($WHERE != '')
- $SQL .= ' WHERE ' . $WHERE;
- if($field['orderField'] != NULL)
- {
- $SQL .= ' ORDER BY ' . $field['orderField'];
- $SQL .= ' '.($field['ascOrder']=='1'?'ASC':'DESC');
- }
- $rows = $this->dbDriver->GetAll($SQL);
- $i = 0;
- foreach($rows as & $row)
- {
- $modobj->children[$i] = new AV_ModObject('option',
- $this->pageBuilder);
- if($row['selected'] == 1)
- {
- $row['xhtmlSelectedAttr'] = "selected='selected'";
- $row['xhtmlCheckedAttr'] = "checked='checked'";
- $modobj->attrs['text'] = $row['value'];
- $fieldDef['text'] = $row['value'];
- }
- $modobj->children[$i]->attrs = & $row;
- $modobj->children[$i]->attrs['fieldIndex'] = $i+1;
- $modobj->children[$i]->attrs['fieldName'] = $fieldDef['fieldName'];
- $modobj->children[$i]->attrs['lang'] = $this->lang;
- $i++;
- }
- $modobj->attrs['numOfOptions'] = $i;
- }
- return $modobj;
- }
- protected function GetReadOnlySelectField(& $fieldDef, $values)
- {
- // retrieves information from FORM_SelectField
- $SQL = ' SELECT * FROM FORM_SelectField WHERE ';
- $SQL .= "tableName='" .$this->table. "' AND ";
- $SQL .= "fieldName='" . $fieldDef['fieldName']. "' ";
- $SQL .= 'LOCK IN SHARE MODE';
- $selectField = $this->dbDriver->GetRow($SQL);
- $SQL = "SELECT ";
- if($selectField['optionTableValue'] == NULL)
- $SQL .= 'value ';
- else
- $SQL .= $selectField['optionTableValue'] . ' as value ';
- $SQL .= 'FROM ' . $selectField['optionTable'];
- if($field['optionTableValue'] == NULL)
- $SQL .= " ,LANG_Label";
- $SQL .= ' WHERE ';
- $SQL .= $selectField['optionTableKey'];
- $SQL .= "='".$values[$fieldDef['fieldName']]."' ";
- if($selectField['optionTableValue'] == NULL)
- {
- $SQL .= "AND labelId = name AND lang = '";
- $SQL .= $this->pageBuilder->lang . "'";
- }
- $fieldDef['text'] = $this->dbDriver->GetOne($SQL);
- return $this->GetTextField($fieldDef, $values);
- }
- //--Method: GetSelectMultField
- protected function &GetSelectMultField(&$fieldDef,$values,$keyFields,
- $templates,$sourceId)
- {
- // retrieves information from FORM_SelectField
- $SQL = ' SELECT * FROM FORM_SelectField WHERE ';
- $SQL .= "tableName='" .$this->table. "' AND ";
- $SQL .= "(fieldName='" . $fieldDef['fieldName']. "' OR ";
- $SQL .= "FIND_IN_SET('".$fieldDef['fieldName']."',targetField)<>0) ";
- $selectFields = $this->dbDriver->GetAll($SQL);
- foreach($selectFields as $key=>$sField)
- {
- if($selectFields[$key]['fieldName']==$fieldDef['fieldName'])
- $field = $selectFields[$key];
- else
- {
- $targetFields = explode(',',$selectFields[$key]['targetField']);
- if(in_array($fieldDef['fieldName'],$targetFields))
- $sourceField=$selectFields[$key]['fieldName'];
- }
- }
-
- $fieldDef['targetField'] = $field['targetField'];
- $fieldDef['sourceField'] = $field['sourceField'];
- $modobj = new FORM_Object('field', $this->pageBuilder,
- $templates, 'selectMultOption');
- if($field['sourceField'] != NULL)
- {
- if($sourceId != '')
- $sourceValue = $sourceId;
- else
- $sourceValue = $values[$sourceField];
- }
- // retrieves select options if sourceField is NULL (no dependence)
- // or if sourceValue is set (dependence solved)
- if($field['sourceField'] == NULL || $sourceValue != '')
- {
- $SQL = 'SELECT ';
- if($field['optionTableValue'] == NULL)
- $SQL .= 'value, ';
- else
- $SQL .= $field['optionTableValue'] . ' as value, ';
- $SQL .= $field['optionTableKey']." as id, ";
- $SQL .= "'selectMultOption' as type ";
- $SQL .= "FROM ".$field['optionTable'];
- if($field['optionTableValue'] == NULL)
- $SQL .= " ,LANG_Label ";
- $WHERE = '';
- if($sourceValue != '')
- $WHERE = $field['sourceField'] . " = '$sourceValue' ";
- if($field['optionTableValue'] == NULL)
- {
- if($WHERE != '')
- $WHERE .= ' AND ';
- $WHERE .= "labelId = name AND lang = '";
- $WHERE .= $this->lang."'";
- }
- if($WHERE != '')
- $SQL .= ' WHERE ' . $WHERE;
- if($field['orderField'] != NULL)
- {
- $SQL .= ' ORDER BY ' . $field['orderField'];
- $SQL .= ' '.($field['ascOrder']=='1'?'ASC':'DESC');
- }
- $rows = $this->dbDriver->GetAll($SQL);
-
- if($keyFields != NULL)
- {
- // retrieves selected options
- $control = TRUE;
- foreach($keyFields as $key => $value)
- {
- if($control = TRUE)
- {
- $WHERE = $key. " = '" .$value. "'";
- $control = FALSE;
- }
- else
- $WHERE .=" AND " .$key. " = '" .$value. "'";
- }
- $SQL = ' SELECT '.$field['optionTableKey'].' FROM ';
- $SQL .= $field['selectedTable'].' WHERE '.$WHERE;
- $temp1 = $this->dbDriver->GetCol($SQL);
-
- }
- foreach ($rows as $key => $value)
- {
- if (in_array($value['id'],$temp1))
- {
- $rows[$key]['selected'] = 1;
- $rows[$key]['xhtmlCheckedAttr'] = "checked='checked'";
- $selected[] = $value['id'];
- $selectedText[] = $value['value'];
- }
- else
- $rows[$key]['selected'] = 0;
- $rows[$key]['fieldName'] = $fieldDef['fieldName'];
- }
- $fieldDef['value'] = $selected;
- $fieldDef['text'] = implode(',', $selectedText);
- $modobj->LoadChildrenFromRows($rows, "option", "numOfOptions");
- }
- else
- $fieldDef['numOfOptions'] = '0';
- $modobj->attrs = ArrayObjectMerge($modobj->attrs,$fieldDef);
- return $modobj;
- }
- protected function &GetFileListField(&$fieldDef,&$keyFields,&$templates)
- {
- $fileListField = new AV_ModObject('file', $this->pageBuilder,
- $this->GetTemplate($templates,
- 'fileListItem'),
- 'imageListItem');
- $fileListField->attrs = & $fieldDef;
- $fileListField->isArray = true;
- $SQL = 'SELECT path,contentFileTable,contentFileFK,maxFiles ';
- $SQL .= 'FROM LIB_Folder f, LIB_FileListField cif ';
- $SQL .= "WHERE tableName='".$this->table."' ";
- $SQL .= "AND fieldName='".$fieldDef['fieldName']."' ";
- $SQL .= 'AND f.folderId = cif.folderId ';
- $data = $this->dbDriver->GetRow($SQL);
- if(count($data) == NULL)
- throw new AV_Exception(NOT_FOUND, $this->lang);
- $fileListField->attrs['path'] = $data['path'];
- $fileListField->attrs['maxFiles'] = $data['maxFiles'];
- // retrives file list
- if($keyFields != NULL)
- {
- $SQL = "SELECT fieldName,fileId as docId,value as title,contentType,";
- $SQL .= 'creationDate, lastChanged ';
- $SQL .= 'FROM '.$data['contentFileTable'].' ci, ';
- $SQL .= 'LIB_FileDocument d, LIB_Node n, LANG_Label l ';
- $SQL .= "WHERE tableName='".$this->table."' ";
- $SQL .= "AND fieldName='".$fieldDef['fieldName']."'";
- reset($keyFields);
- $SQL .= "AND ci.".$data['contentFileFK']."='".current($keyFields)."' ";
- $SQL .= 'AND fileId=d.docId AND d.docId=n.nodeId AND d.title=l.labelId ';
- $SQL .= "AND lang='".$this->lang."' ";
- $SQL .= 'ORDER BY idx';
- $fileListField->attrs['value'] = $this->dbDriver->GetAll($SQL);
- }
- return $fileListField;
- }
- protected function &GetObjectListField(&$fieldDef,&$keyFields,$dateFormat,
- $numberFormat,$fieldName,$short)
- {
- $objectListField = new AV_ModObject('object', $this->pageBuilder);
- $objectListField->attrs = & $fieldDef;
- $objectListField->isArray = true;
- $data = $this->GetObjectListInfo($fieldDef);
- $…
Large files files are truncated, but you can click here to view the full file