/lib/LIB_Document.inc
PHP | 2492 lines | 2025 code | 346 blank | 121 comment | 378 complexity | 8ee92fa255a958374feddf7402e3a796 MD5 | raw file
Large files files are truncated, but you can click here to view the full file
- <?php
- require_once('UM_User.inc');
- require_once('LIB_Node.inc');
- require_once('AV_FaultTolerantFS.inc');
- define('HALF_SEARCH_LIMIT', 50000);
- //--Class: LIB_Document
- //--Desc: Library document class.
- class LIB_Document extends LIB_Node
- {
- //
- //--Private
- //
- protected $docMainTable; //--Desc: Document database main table
- protected $docTable; //--Desc: Document database table
- protected $docPath;
- protected $foderTables;
- //
- //--Public
- //
- //--Method: __constructor
- //--Desc: Constructor.
- function __construct(&$module)
- {
- parent::__construct($module);
- $this->docMainTable = new FORM_DynTable("LIB_Document", $this->module);
- $this->docTable = NULL;
- }
-
- function LoadFieldsDef($docId, $path)
- {
- if($docId != NULL)
- {
- $SQL = 'SELECT path FROM LIB_Folder,LIB_DocumentLink WHERE ';
- $SQL .= "docId = '$docId' AND ";
- $SQL .= 'LIB_DocumentLink.folderId=LIB_Folder.folderId ';
- $SQL .= 'LIMIT 1 LOCK IN SHARE MODE';
- $path = $this->dbDriver->GetOne($SQL);
- if($path == NULL)
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- array('fieldName'=>'path'));
- $path = addslashes($path);
- $disableFileReq = true;
- }
- else
- $disableFileReq = false;
-
- $this->folderTables = $this->GetFolderTables($path);
-
- $fieldsDef=array_merge($this->docMainTable->LoadFieldsDef($disableFileReq),
- $this->nodeTable->LoadFieldsDef($disableFileReq));
- foreach($this->folderTables as $table)
- {
- require_once($table['dataModule'].'.inc');
- $this->docTable[$table['tableName']]=
- new $table['dataModule']($table['tableName'],$this->module);
- $fieldsDef =
- array_merge($fieldsDef,
- $this->docTable[$table['tableName']]->LoadFieldsDef($disableFileReq));
- }
- $fieldsDef[2080]['fieldName'] = 'keywords';
- $fieldsDef[2080]['required'] = false;
- $fieldsDef[2080]['allowNull'] = true;
- $fieldsDef[2080]['stripSlashes'] = false;
- ksort($fieldsDef);
- return $fieldsDef;
- }
- //--Method: Insert
- //--Desc: Inserts new document to the library
- function Insert($fields)
- {
- $folderData = parent::Insert($fields);
- // Retrieves docId to be returned
- $docId = $this->dbDriver->GetOne('SELECT LAST_INSERT_ID() FROM DUAL');
- if($docId === NULL)
- throw new AV_Exception(FAILED, $this->lang);
- $this->docMainTable->Insert($fields,array('docId'=>$docId));
- foreach($this->docTable as $table)
- $table->Insert($fields, array('docId'=>$docId));
-
- if($fields['keywords'] != NULL)
- $this->InsertKeywords($fields['keywords']);
-
- $this->CreateDocLink($folderData['folderId'],$docId,$fields['beforeDocId']);
- $fields['docId'] = $docId;
- $this->InsHistory($fields);
-
- $this->NotifyAdmin('adminInsDocLogTag',$fields);
- return $docId;
- }
- //--Method: Set
- //--Desc: Sets document data
- function Set($fields)
- {
- // sets node
- $fields['nodeId'] = $fields['docId'];
- parent::Set($fields);
- $this->docMainTable->Set($fields);
- $oldValues = array();
- foreach($this->docTable as $table)
- {
- $_oldValues = $table->Set($fields);
- if($this->module->pageBuilder->siteConfig->getVar('admin','history'))
- $oldValues = array_merge($oldValues,$_oldValues);
- }
- // delete keywords
- if($fields['keywords'] !== NULL)
- {
- $SQL = "DELETE FROM LIB_Keyword WHERE docId = '".$fields['docId']."'";
- $this->dbDriver->ExecSQL($SQL);
- if($fields['keywords'] != NULL)
- $this->InsertKeywords($fields['keywords'],$fields['docId']);
- }
- $this->InsHistory($fields,$oldValues);
- $this->NotifyAdmin('adminSetDocLogTag',$fields);
- }
- function Duplicate($path, $docId, $beforeDocId)
- {
- $folderData = parent::Duplicate($path,$docId);
- // Retrieves docId to be returned
- $targetId = $this->dbDriver->GetOne('SELECT LAST_INSERT_ID()');
- if($targetId === NULL)
- throw new AV_Exception(FAILED, $this->lang);
- $fields['docId'] = $targetId;
- $sourceKey['fieldName'] = 'docId';
- $sourceKey['fieldValue'] = $docId;
- $this->docMainTable->Duplicate($sourceKey,$fields);
- foreach($this->docTable as $table)
- $table->Duplicate($sourceKey,$fields);
- $this->DuplicateKeywords($docId,$targetId);
-
- $this->CreateDocLink($folderData['folderId'],$targetId,$beforeDocId);
-
- $fields['path'] = $path;
- $this->NotifyAdmin('adminDupDocLogTag',$fields);
- return $targetId;
- }
- function InsDocLink($path, $docId, $beforeDocId)
- {
- if($this->dbDriver->type=='oracle')
- {
- $LOCK = 'LOCK TABLE LIB_FolderTables,LIB_Folder,LIB_DocumentLink ';
- $LOCK .= 'IN SHARE MODE';
- $this->dbDriver->ExecSQL($LOCK);
- }
- // check if path is compatible with the docId table
- $SQL = 'SELECT DISTINCT id, tableName ';
- $SQL .= 'FROM LIB_FolderTables,LIB_Folder,LIB_DocumentLink WHERE ';
- $SQL .= "docId = '$docId' AND ";
- $SQL .= 'LIB_DocumentLink.folderId=LIB_Folder.folderId AND ';
- $SQL .= 'folderTables = id ';
- $SQL .= 'ORDER BY printOrder LIMIT 2,10 LOCK IN SHARE MODE';
- $docTables = $this->dbDriver->GetAll($SQL);
- if(count($docTables) == 0)
- throw new AV_Exception(NOT_FOUND, $this->lang);
-
- $folderTables = $this->GetFolderTables($path);
- if($docTables !== $folderTables)
- throw new AV_Exception(INVALID_PATH, $this->lang,
- array('fieldName','path'));
- // checks out for write permission
- $folderData = $this->GetFolderData($path,'share');
- $this->CheckNodePermission($folderData, true);
- $docData = $this->GetDocData($docId, 'share');
- // checks out for read permission
- $this->CheckNodePermission($docData, false);
- $this->CreateDocLink($folderData['folderId'], $docId, $beforeDocId);
- $fields = $this->GetDocFields($docId, $path);
- $fields['path'] = $path;
- $this->NotifyAdmin('adminCopyDocLogTag',$fields);
- }
- //--Method: DelDocLink
- //--Desc: Deletes document link in the library.
- function DelDocLink($path, $docId)
- {
- $folderData = $this->GetFolderData($path, 'share');
- // checks out for write permission
- $data = $this->CheckNodePermission($folderData, true);
- // checks restricted deletion flag
- $this->CheckRestrictedDeletion($folderData, $data['memberData'], $docId);
- // lock link (table row) that will be deleted
- $SQL = 'SELECT * FROM LIB_DocumentLink ';
- $SQL .= "WHERE docId = '$docId' ";
- $SQL .= "AND folderId='".$folderData['folderId']."' ";
- $SQL .= 'FOR UPDATE ';
- $row = $this->dbDriver->GetRow($SQL);
- if(count($row)==NULL)
- throw new AV_Exception(NOT_FOUND, $this->lang);
- $SQL = 'SELECT COUNT(*) as numLinks ';
- $SQL .= 'FROM LIB_DocumentLink dl ';
- $SQL .= "WHERE dl.docId = '$docId' ";
- $SQL .= 'LOCK IN SHARE MODE ';
- $numLinks = $this->dbDriver->GetOne($SQL);
-
- $returnFields = $this->GetReturnFields($path);
- if(count($returnFields)>0)
- {
- $tables = array();
- foreach($returnFields as $key=>$field)
- {
- if(!isset($tables[$field['tableName']]))
- {
- if($key>0)
- $FROM .= ',';
- $FROM .= $field['tableName']." t$key";
- if($key>0)
- $WHERE .= "AND ";
- if($field['tableName']=='LIB_Node')
- $WHERE .= "t$key.nodeId='$docId' ";
- else
- $WHERE .= "t$key.docId='$docId' ";
- $tables[$field['tableName']] = "t$key";
- }
- if($key>0)
- $SELECT .= ',';
- $SELECT .= $tables[$field['tableName']].'.'.$field['fieldName'];
- }
- $SQL = "SELECT $SELECT FROM $FROM WHERE $WHERE ";
- $row = $this->dbDriver->GetRow($SQL);
- if(count($row) === NULL)
- throw new AV_Exception(FAILED, $this->lang);
- }
- // if it's the last document link, deletes full node and file
- if($numLinks == 1)
- $this->Del(array('nodeId'=>$docId));
- else
- {
- // not the last link, deletes only the link
- $SQL = 'DELETE FROM LIB_DocumentLink ';
- $SQL .= 'WHERE ';
- $SQL .= "folderId = '".$folderData['folderId']."' AND ";
- $SQL .= "docId = '$docId' ";
- $this->dbDriver->ExecSQL($SQL);
- }
- $row['path'] = $path;
- $this->NotifyAdmin('adminDelDocLogTag',$row);
- }
- function &GetForm($keyFields, $path, $fieldName, $sourceId, & $templates,
- & $formObject, $defValues = array(),$dateFormat = NULL,
- $numberFormat = true, $short = false)
- {
- if($keyFields != NULL)
- $this->LoadFieldsDef($keyFields['docId']);
- else
- $this->LoadFieldsDef(NULL,$path);
- $formObject->attrs['folderTables'] = $this->folderTables[0]['id'];
- foreach($this->docTable as $table)
- $table->GetForm($keyFields,$fieldName,$sourceId,$templates,
- $formObject,$defValues,$dateFormat,$numberFormat,$short);
- $this->docMainTable->GetForm($keyFields,$fieldName,$sourceId,$templates,
- $formObject,$defValues,$dateFormat,
- $numberFormat,$short);
- if($keyFields != NULL)
- $keyFields['nodeId'] = $keyFields['docId'];
- else
- {
- $folderData = $this->GetFolderData($path, 'share');
- if(!isset($defValues['userRight']) && isset($folderData['defUserRight']))
- $defValues['userRight'] = $folderData['defUserRight'];
- if(!isset($defValues['groupRight']) && isset($folderData['defGroupRight']))
- $defValues['groupRight'] = $folderData['defGroupRight'];
- if(!isset($defValues['otherRight']) && isset($folderData['defOtherRight']))
- $defValues['otherRight'] = $folderData['defOtherRight'];
- }
- parent::GetForm($keyFields,$fieldName,$sourceId,$templates,
- $formObject,$defValues,$dateFormat,$numberFormat,$short);
- // keywords field
- if($fieldName==NULL || $fieldName=='keywords')
- {
- $SQL = "SELECT keyword FROM LIB_Keyword WHERE docId = '";
- $SQL .= $keyFields['docId']."'";
- $keywords = $this->dbDriver->GetCol($SQL);
- $keywordsField = new AV_ModObject('field', $this->module->pageBuilder);
- $keywordsField->attrs['fieldName'] = 'keywords';
- $keywordsField->attrs['value'] = implode(', ', $keywords);
- $keywordsField->attrs['type'] = 'text';
- $keywordsField->attrs['size'] = '255';
- $keywordsField->attrs['attributes'] = "size='50'";
- $keywordsField->attrs['label'] =
- $this->label->GetLabel('LIB_Document_keywords', $this->lang);
- $formObject->children[2080] = & $keywordsField;
- $formObject->attrs['keywords'] = $keywordsField->attrs['value'];
- }
- if($fieldName==NULL || $fieldName=='langTab')
- {
- // language tab
- $langList = $this->label->GetLangList();
- $langTab = new FORM_Object('field', $this->module->pageBuilder,
- $templates, 'langTabItem');
- $langTab->attrs['fieldName'] = 'langTab';
- $langTab->attrs['type'] = 'langTab';
- $langTab->attrs['adminLangTitle']=$this->label->GetLabel('adminLangTitle',
- $this->lang);
- // creates tab items
- foreach($langList as $key => $lang)
- {
- $field = new AV_ModObject('tab', $this->module->pageBuilder);
- $field->attrs['type'] = 'langTabItem';
- $field->attrs['lang'] = $lang['lang'];
- $field->attrs['label'] = mb_substr($lang['lang'],0,2);
- $langTab->children[] = $field;
- }
- $formObject->children[500] = & $langTab;
- }
- ksort($formObject->children);
- return $formObject;
- }
- function GetHistory($docId)
- {
- $SQL = '(SELECT dh.id, u.login, u.name, dh.histDate, dh.fieldName, ';
- $SQL .= 'dh.value, NULL as parentField ';
- $SQL .= 'FROM LIB_DocHistory dh, UM_User u ';
- $SQL .= "WHERE dh.docId='$docId' ";
- $SQL .= 'AND dh.userId = u.userId) ';
- $SQL .= 'UNION ';
- $SQL .= '(SELECT dh.id, u.login, u.name, dh.histDate, dh.fieldName, ';
- $SQL .= 'dh.value, dhor.fieldName as parentField ';
- $SQL .= 'FROM LIB_DocHistory dh, LIB_DocHistoryObjRef dhor, UM_User u ';
- $SQL .= "WHERE dh.docId=dhor.refId AND dhor.docId='$docId' ";
- $SQL .= 'AND dh.userId = u.userId) ';
- $SQL .= 'ORDER BY id ';
- $historyList = $this->dbDriver->GetAll($SQL);
- foreach($historyList as &$history)
- if($history['value']!=NULL)
- $history['value'] = json_decode($history['value'],true);
- return $historyList;
- }
- function DocList($params)
- {
- $path = $this->PreparePath($params['path']);
-
- // checks for returnFields
- $aux['recursiveSearch'] = false; // prevents recursive search
- $aux['path'][] = $path;
- $this->LoadReturnFields($aux);
- $folderTables = $this->GetFolderTables($path);
- foreach($folderTables as $key=>$folder)
- {
- $tableObj = new FORM_DynTable($folder['tableName'], $this->module);
- $fieldsDef = $tableObj->LoadFieldsDef();
- foreach($fieldsDef as $def)
- {
- if(in_array($def['fieldName'],$aux['returnFields']))
- {
- if($def['type']!='objectList' &&
- $def['type']!='fileList')
- $returnFields[] = "t$key.".$def['fieldName'];
- }
- }
- if(!in_array($folder['tableName'],$tables))
- {
- $tables[$folder['tableName']] = $folder['tableName'] . " t$key";
- $tablesWhere[] .= "t$key.docId ";
- }
- }
- $returnFields = implode(',', $returnFields);
- if(count($returnFields)==0)
- throw new AV_Exception(FAILED, $this->lang);
- $SQL .= 'SELECT doc.docId, docLink.folderId, folderTables, path,';
- $SQL .= "docLink.fixedOrder,$returnFields ";
- $SQL .= 'FROM LIB_DocumentLink docLink,LIB_Folder folder,';
- $SQL .= 'LIB_Node docNode, LIB_Document doc, LIB_Node folderNode,';
- $SQL .= implode(',',$tables);
- $SQL .= " WHERE path = '$path' ";
- $SQL .= 'AND docLink.folderId=folder.folderId ';
- $SQL .= 'AND docLink.docId=docNode.nodeId ';
- $SQL .= 'AND docLink.docId=doc.docId ';
- $SQL .= 'AND docLink.folderId=folderNode.nodeId ';
- $SQL .= 'AND docLink.docId='.implode(' AND docLink.docId=',$tablesWhere);
- // loads user member data and groups
- $sessionH = & $this->module->pageBuilder->sessionH;
- // checks if user is not logged and also public access right
- if(!$sessionH->isGuest())
- {
- $userMan = new UM_User($this->module);
- $params['memberData'] = $userMan->GetMemberData('share', false, false);
- $params['memberGroups'] = $userMan->GetMemberGroupsIds('share');
- }
- $SQL .= " AND ";
- if(isset($params['memberData']['userId']))
- {
- if(count($params['memberGroups'])==0)
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- array('fieldName'=>'memberGroups'));
- $groups = implode(',',$params['memberGroups']);
- # check folder permission
- $SQL .= 'IF(folderNode.userId='.$params['memberData']['userId'].',';
- $SQL .= "INSTR(folderNode.userRight,'r'),";
- $SQL .= "IF(folderNode.groupId IN ($groups),";
- $SQL .= "INSTR(folderNode.groupRight,'r'),";
- $SQL .= "IF((SELECT SUM(IF(ngr.groupId IN ($groups),";
- $SQL .= "INSTR(ngr.groupRight,'r'),0)) FROM LIB_NodeGroupRights ngr ";
- $SQL .= "WHERE ngr.nodeId=folderNode.nodeId)<>0,1, ";
- $SQL .= "INSTR(folderNode.otherRight,'r'))))<>0 ";
- # check node permission
- $SQL .= ' AND ';
- $SQL .= 'IF(docNode.userId='.$params['memberData']['userId'].',';
- $SQL .= "INSTR(docNode.userRight,'r'),";
- $SQL .= "IF(docNode.groupId IN ($groups),";
- $SQL .= "INSTR(docNode.groupRight,'r'),";
- $SQL .= "IF((SELECT SUM(IF(ngr.groupId IN ($groups),";
- $SQL .= "INSTR(ngr.groupRight,'r'),0)) FROM LIB_NodeGroupRights ngr ";
- $SQL .= "WHERE ngr.nodeId=docNode.nodeId)<>0,1, ";
- $SQL .= "INSTR(docNode.otherRight,'r'))))<>0 ";
- }
- else
- {
- $SQL .= "INSTR(folderNode.otherRight,'r')<>0 ";
- $SQL .= "AND INSTR(docNode.otherRight,'r')<>0 ";
- }
- $SQL .= $this->GetExclusionFiltersSQL($params['exclusionFilters']);
- $SQL .= ' LIMIT ' . HALF_SEARCH_LIMIT;
-
- return $this->dbDriver->GetAll($SQL);
- }
- //--Method: Search
- //--Desc: Searches library documents
- function &Search(& $params)
- {
- if(!isset($params['tempTable']))
- $params['tempTable'] = true;
- // prepare filter
- $params['filter'] = $this->PrepareFilter($params['filter']);
- // search allows more then one path
- $params['path'] = explode(',',$params['path']);
- foreach($params['path'] as &$path)
- // prepare path
- $path = $this->PreparePath($path);
- // if should search keywords
- $key = array_search('keywords',$params['searchCriteria']);
- $params['searchKeywords'] = ($key !== false && $key !== NULL ||
- $params['searchCriteria'] == '*');
- if($params['searchKeywords'])
- {
- if($params['searchCriteria'] != '*')
- unset($params['searchCriteria'][$key]);
- // if no filter is specified, does not search keywords
- if($params['filter'] === NULL)
- $params['searchKeywords'] = false;
- }
- // checks for returnFields
- if($params['returnFields']==NULL)
- $this->LoadReturnFields($params);
- // saves default values for later use when deciding which search object
- // should be searched just bellow
- $exclusionFilters = $params['exclusionFilters'];
- $searchCriteria = $params['searchCriteria'];
- // load search fields and create result table with them
- $this->LoadSearchDefs($params);
- // loads user member data and groups
- $sessionH = & $this->module->pageBuilder->sessionH;
- // checks if user is not logged and also public access right
- if(!$sessionH->isGuest())
- {
- $userMan = new UM_User($this->module);
- $params['memberData'] = $userMan->GetMemberData('share', false, false);
- $params['memberGroups'] = $userMan->GetMemberGroupsIds('share');
- }
- try
- {
- foreach($params['searchObjs'] as $key=>$obj)
- {
- // search object if:
- // - returnFields has any field from the object tables and
- // - exclusionFilters are not given or all fields exists on the object
- // tables and
- // - searchCriteria are not given or any field exists on the object
- // tables
- if(count($obj['returnFields'])>0 &&
- ($exclusionFilters==NULL ||
- count($exclusionFilters)==count($obj['exclusionFilters'])) &&
- ($params['searchKeywords'] ||
- $searchCriteria==NULL ||
- count($obj['searchCriteria'])>0) &&
- ($params['orderBy'] == 'matches' ||
- $params['orderBy'] == 'fixedOrder' ||
- $obj['foundOrderBy']))
- {
- if(!$params['searchKeywords'] &&
- $searchCriteria==NULL ||
- count($obj['searchCriteria'])>0)
- $this->SearchObject($params,$obj);
- if($params['searchKeywords'])
- $this->SearchKeywords($params,$obj);
- }
- }
-
- $result = $this->GetSearchResult($params);
- if($params['tempTable'])
- $this->dbDriver->ExecSQL("DROP TABLE ".$params['tableName']);
- return $result;
- }
- catch(Exception $e)
- {
- if($params['tempTable'])
- $this->dbDriver->ExecSQL("DROP TABLE ".$params['tableName']);
- throw $e;
- }
- }
- //--Method: SetOrder
- function SetOrder($docId, $path, $offset)
- {
- $folderData = $this->GetFolderData($path, 'share');
- // checks out for write permission
- $data = $this->CheckNodePermission($folderData, true);
- $folderId = $folderData['folderId'];
- // locks selected document
- if($this->dbDriver->type=='oracle')
- {
- // for oracle, lock all folder files
- $SQL = 'SELECT fixedOrder FROM LIB_DocumentLink ';
- $SQL .= "WHERE folderId=$folderId FOR UPDATE";
- $this->dbDriver->ExecSQL($SQL);
- }
- $SQL = 'SELECT fixedOrder FROM LIB_DocumentLink ';
- $SQL .= "WHERE folderId=$folderId AND docId=$docId ";
- if($this->dbDriver->type!='oracle')
- $SQL .= "FOR UPDATE";
- $currPos = $this->dbDriver->GetOne($SQL);
- if($currPos == NULL)
- throw new AV_Exception(FAILED, $this->lang);
- // finds and locks next doc by position
- $SQL = 'SELECT docId, fixedOrder FROM LIB_DocumentLink ';
- $WHERE = "WHERE folderId=$folderId AND ";
- if($offset < 0)
- {
- $WHERE .= "fixedOrder<$currPos ";
- $WHERE .= "ORDER BY fixedOrder DESC ";
- }
- else
- {
- $WHERE .= "fixedOrder>$currPos ";
- $WHERE .= "ORDER BY fixedOrder ASC ";
- }
- $WHERE .= 'LIMIT '.abs($offset).' ';
- $SQL .= $WHERE;
- if($this->dbDriver->type!='oracle')
- $SQL .= "FOR UPDATE";
- $next = $this->dbDriver->GetAll($SQL);
- if(count($next) == 0)
- return;
- $SQL = "UPDATE LIB_DocumentLink SET ";
- if($offset < 0)
- $SQL .= "fixedOrder=fixedOrder+1 ";
- else
- $SQL .= "fixedOrder=fixedOrder-1 ";
- $SQL .= $WHERE;
- $this->dbDriver->ExecSQL($SQL);
- $SQL = "UPDATE LIB_DocumentLink SET fixedOrder='".end($next)['fixedOrder']."' WHERE ";
- $SQL .= "folderId=$folderId AND docId=$docId";
- $this->dbDriver->ExecSQL($SQL);
- $fields = $this->GetDocFields($docId, $path);
- $fields['path'] = $path;
- $this->NotifyAdmin('adminSetOrderLogTag',$fields);
- }
- function TakeDocOwnership($docId,$path)
- {
- $fields = $this->GetDocFields($docId, $path);
- if(count($fields)==NULL)
- throw new AV_Exception(NOT_FOUND,$this->lang);
- $login = $this->TakeOwnership($docId);
- $this->NotifyAdmin('adminTakeDocOwnershipLogTag',$fields);
- return $login;
- }
- function GetDocLinks($docId)
- {
- if($docId == NULL)
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- array('fieldName','docId'));
- $SQL = 'SELECT f.folderId, path ';
- $SQL .= 'FROM LIB_DocumentLink l, LIB_Folder f ';
- $SQL .= "WHERE docId=$docId AND l.folderId=f.folderId ";
- return $this->dbDriver->GetAll($SQL);
- }
- function GetFileContent($fieldName,$docId,$size,$jpegQuality,
- $maxWidth=NULL,$maxHeight=NULL,$bgColor=NULL,
- $cropRatio=NULL)
- {
- $SQL = 'SELECT fld.tableName ';
- $SQL .= 'FROM LIB_DocumentLink dl,LIB_Folder f,LIB_FolderTables ft,';
- $SQL .= 'FORM_Field fld ';
- $SQL .= "WHERE docId='$docId' AND dl.folderId=f.folderId ";
- $SQL .= 'AND folderTables=id AND ft.tableName=fld.tableName ';
- $SQL .= "AND fieldName='$fieldName' LIMIT 1";
- $tableName = $this->dbDriver->GetOne($SQL);
- if($tableName == NULL)
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- Array('fieldName'=>'fieldName',
- 'addMsg'=>' (fieldName)'));
- if($size != NULL || $maxHeight != NULL && $maxWidth != NULL ||
- $bgColor != NULL)
- $docData = & $this->GetThumb($tableName,$fieldName,$docId,$size,
- $jpegQuality,$maxWidth,$maxHeight,
- $bgColor,$cropRatio);
- else
- {
- $SQL = 'SELECT nodeId,userId,groupId,userRight,groupRight,otherRight,';
- $SQL .= 'UNIX_TIMESTAMP(creationDate) as creationDate,';
- $SQL .= 'UNIX_TIMESTAMP(lastChanged) as lastChanged,';
- $SQL .= "lastChangedUserId,${fieldName},${fieldName}FileName,";
- $SQL .= "${fieldName}Type ";
- $SQL .= "FROM LIB_Node node,$tableName doc ";
- $SQL .= "WHERE nodeId=$docId AND nodeId=docId ";
- $docData = & $this->dbDriver->GetRow($SQL);
- if(count($docData) == 0)
- throw new AV_Exception(NOT_FOUND, $this->lang);
- if($this->module->pageBuilder->siteConfig->getVar('admin','blobToFS'))
- {
- $libPath = $this->module->pageBuilder->siteConfig->getVar("dirs",
- "library");
- $docData[$fieldName] = ft_file_get_contents($libPath . $docData[$fieldName]);
- if($docData[$fieldName] === false)
- throw new AV_Exception(FAILED, $this->lang,
- array('addMsg'=>' (unable to read file)',
- 'filePath'=>$libPath . $docData[$fieldName]));
- }
- }
- // checks out for read permission
- $this->CheckNodePermission($docData, false);
- return $docData;
- }
- function CheckDocPermission($docId,$write)
- {
- $docData = $this->GetDocData($docId, 'share');
- $this->CheckNodePermission($docData, $write);
- }
-
- function DelBlobFS()
- {
- $libPath = $this->module->pageBuilder->siteConfig->getVar("dirs",
- "library");
- $SQL = "SELECT id FROM LIB_BlobFS WHERE deleted='1' FOR UPDATE ";
- $unlinkList = $this->dbDriver->GetCol($SQL);
- foreach($unlinkList as $id)
- ft_unlink($libPath . $id);
- $SQL = "DELETE FROM LIB_BlobFS WHERE deleted='1' ";
- $this->dbDriver->ExecSQL($SQL);
- }
- protected function InsHistory($values,$oldValues=NULL)
- {
- if(!$this->module->pageBuilder->siteConfig->getVar('admin','history'))
- return;
-
- $userMan = new UM_User($this->module);
- $memberData = $userMan->GetMemberData('share', false, false);
- foreach($this->docTable as $tableName=>& $table)
- {
- $fieldsDef = $table->LoadFieldsDef();
- foreach($fieldsDef as & $field)
- {
- $value = NULL;
- switch($field['type'])
- {
- case 'text': case 'integer': case "date": case "datetime": case "cpf":
- case "cnpj": case "cep": case 'float': case 'currency': case 'percent':
- case "select": case "radio": case "selectMult": case 'legalEntityRef':
- case 'naturalPersonRef': case 'leOrNpEntityRef': case 'folder':
- case 'formula': case 'boolean': case "selectMultiple":
- if(strpos($field['accessMode'],'w') !== false &&
- $values[$field['fieldName']]!== NULL &&
- ($oldValues==NULL ||
- $values[$field['fieldName']]!=$oldValues[$field['fieldName']]))
- $value = "'".addslashes(json_encode($values[$field['fieldName']]))."'";
- break;
- case 'objectList':
- if($values[$field['fieldName']]!== NULL && $oldValues != NULL && count($oldValues[$field['fieldName']])>0)
- {
- if(count($oldValues[$field['fieldName']])>50)
- $oldValues[$field['fieldName']] = array_slice($oldValues[$field['fieldName']],0,50);
- $value = "'".addslashes(json_encode($oldValues[$field['fieldName']]))."'";
- }
- break;
- case 'fileList':
- if($values[$field['fieldName']]!== NULL && $oldValues != NULL)
- {
- $diff = false;
- if(count($values[$field['fieldName']])!=
- count($oldValues[$field['fieldName']]))
- $diff = true;
- else
- {
- foreach($values[$field['fieldName']] as $key=>$val)
- {
- if($val['docId']!=$oldValues[$field['fieldName']][$key])
- {
- $diff = true;
- break;
- }
- }
- }
- }
- if($diff)
- $value = 'NULL';
- break;
-
- case 'schedule': case 'file': case 'textArea': case "langLabel":
- case "langTextArea": case "langHtmlArea": case 'htmlArea':
- case 'usageTerms':
- default:
- break;
- }
- if($value!=NULL)
- {
- $SQL = 'INSERT INTO LIB_DocHistory ';
- $SQL .= '(docId,userId,histDate,tableName,fieldName,value) VALUES ';
- $SQL .= "('".$values['docId']."','".$memberData['userId']."',NOW(),";
- $SQL .= "'$tableName','".$field['fieldName']."',".$value.")";
- $this->dbDriver->ExecSQL($SQL);
- }
- }
- }
- }
- protected function GetFolderTables($path)
- {
- $path = $this->PreparePath($path);
- // loads path rights
- $SQL = 'SELECT ft.id, ft.tableName, ftp.dataModule ';
- $SQL .= 'FROM LIB_Folder f, LIB_FolderTables ft, LIB_FolderType ftp WHERE ';
- $SQL .= "path = '$path' AND ";
- $SQL .= 'folderTables = ft.id AND ';
- $SQL .= 'ft.id=ftp.id ';
- $SQL .= 'ORDER BY printOrder LIMIT 12 LOCK IN SHARE MODE ';
- $folderTables = $this->dbDriver->GetAll($SQL);
- if(count($folderTables) == 0)
- throw new AV_Exception(INVALID_PATH, $this->lang,
- array('addMsg'=>" ($path)"));
- array_splice($folderTables,0,2);
- return $folderTables;
- }
- //--Method: GetSearchResult
- //--Desc: Returns results from SearchKeywords and SearchAll methods
- //--Desc: checking permissions.
- protected function GetSearchResult(& $params)
- {
- if(!$params['tempTable'])
- $params['query'] = '(('.implode(') UNION (',$params['query']).'))';
- if($params['totalResults'])
- {
- if($params['tempTable'])
- {
- $SQL = 'SELECT COUNT(DISTINCT docId) FROM '. $params['tableName'];
- $params['totalResults'] = $this->dbDriver->GetOne($SQL);
- }
- else
- {
- $SQL = 'SELECT COUNT(DISTINCT docId) FROM '.$params['query']. ' res';
- $params['totalResults'] = $this->dbDriver->GetOne($SQL);
- }
- }
- $SQL = 'SELECT res.docId,path,folderTables,fixedOrder,';
- $SQL .= implode(',', $params['returnFieldsFound']);
- if($this->dbDriver->type=='oracle')
- // ORACLE
- $SQL .= ', maxMatches, sumMatches';
- else
- {
- // MYSQL
- $SQL .= ', MAX(matches) as maxMatches';
- $SQL .= ', SUM(matches) as sumMatches';
- }
- $SQL .= ' FROM ';
- if($this->dbDriver->type=='oracle')
- {
- // ORACLE
- $SQL .= '(SELECT r.*,';
- $SQL .= 'ROW_NUMBER() OVER (PARTITION BY docId ORDER BY docId) as rank ';
- $SQL .= 'FROM ';
- if($params['tempTable'])
- $SQL .= $params['tableName'];
- else
- $SQL .= $params['query'];
- $SQL .= ' r) res,';
-
- $SQL .= '(SELECT docId,MAX(matches) as maxMatches,';
- $SQL .= 'SUM(matches) as sumMatches ';
- $SQL .= 'FROM ';
- if($params['tempTable'])
- $SQL .= $params['tableName'];
- else
- $SQL .= $params['query'];
- $SQL .= ' GROUP BY docId ';
- $SQL .= ') groupRes ';
- $SQL .= 'WHERE res.docId=groupRes.docId AND res.rank=1';
- }
- else
- {
- // MYSQL
- if($params['tempTable'])
- $SQL .= $params['tableName'];
- else
- $SQL .= $params['query'];
- $SQL .= ' res ';
- $SQL .= 'GROUP BY docId';
- }
- $SQL .= " ORDER BY ";
- if($params['orderBy'] == 'matches')
- {
- $SQL .= ' maxMatches ' . ($params['order'] ? 'DESC' : 'ASC');
- $SQL .= ', sumMatches ' . ($params['order'] ? 'DESC' : 'ASC');
- }
- else
- {
- $SQL .= ' '.$params['orderBy'];
- $SQL .= ($params['order'] ? ' ASC' : ' DESC');
- }
- $SQL .= ', res.docId ';
- if($params['limit'] != NULL)
- {
- $SQL .= ' LIMIT ';
- if(isset($params['offset']))
- $SQL .= $params['offset'] . ',';
- $SQL .= $params['limit'];
- }
- $results = $this->dbDriver->GetAll($SQL);
-
- // for oracle table, clob fields must be loaded before dropping temporary table
- if($this->dbDriver->type=='oracle')
- {
- foreach($results as & $row)
- {
- foreach($params['clobFields'] as $clobField)
- $x = $row[$clobField];
- }
- }
- // format date fields and retrieves object list fields
- if(count($params['dateFields'])>0 ||
- count($params['floatFields'])>0 ||
- count($params['objectListFields'])>0 ||
- count($params['fileListFields'])>0 ||
- count($params['selectMultFields'])>0)
- {
- $locale = localeconv();
- foreach($results as & $res)
- {
- if($params['dateFormat']!=NULL)
- {
- foreach($params['dateFields'] as $dateField)
- {
- $res[$dateField.'_timestamp'] = strtotime($res[$dateField]);
- if($res[$dateField]!=NULL)
- $res[$dateField]=strftime($params['dateFormat'],
- (int)$res[$dateField.'_timestamp']);
- }
- }
- if($params['numberFormat'])
- {
- foreach($params['floatFields'] as &$floatField)
- {
- $res[$floatField.'Value']=$res[$floatField];
- $res[$floatField]=number_format($res[$floatField],
- $locale['frac_digits'],
- $locale['mon_decimal_point'],
- $locale['mon_thousands_sep']);
- }
- }
- foreach($params['objectListFields'] as &$objectListField)
- {
- $SQL = 'SELECT path, parentIdField FROM FORM_ObjectListField ol, LIB_Folder f ';
- $SQL .= "WHERE tableName='".$objectListField['tableName']."' ";
- $SQL .= "AND fieldName='".$objectListField['fieldName']."' ";
- $SQL .= 'AND ol.folderId=f.folderId ';
- $objectList = $this->dbDriver->GetRow($SQL);
- if(count($objectList)==0)
- throw new AV_Exception(FAILED, $this->lang);
- $subsearch = array();
- $subsearch['path'] = $objectList['path'];
- $exlusionFilter['fieldName'] = $objectList['parentIdField'];
- $exlusionFilter['value'] = $res['docId'];
- $exlusionFilter['operator'] = '=';
- $subsearch['exclusionFilters'][$objectList['parentIdField']][]= $exlusionFilter;
- $subsearch['orderBy'] = 'matches';
- $subsearch['dateFormat'] = $params['dateFormat'];
- $subsearch['tempTable'] = $params['tempTable'];
- $res[$objectListField['fieldName']] = $this->Search($subsearch);
- }
- foreach($params['fileListFields'] as &$fileListField)
- {
- $SQL = 'SELECT fd.docId,fd.contentFileName,fd.contentSize,';
- $SQL .= 'l_title.value as title,fd.authors,l_descr.value as descr,';
- $SQL .= 'fd.contentType ';
- $SQL .= 'FROM LIB_ContentFile ci, LIB_FileDocument fd, ';
- $SQL .= 'LANG_Label l_title, LANG_Text l_descr ';
- $SQL .= "WHERE ci.tableName='".$fileListField['tableName']."' ";
- $SQL .= "AND ci.fieldName='".$fileListField['fieldName']."' ";
- $SQL .= "AND ci.nodeId='".$res['docId']."' ";
- $SQL .= 'AND ci.fileId=fd.docId ';
- $SQL .= 'AND fd.title = l_title.labelId ';
- $SQL .= 'AND fd.descr = l_descr.labelId ';
- $SQL .= "AND l_title.lang='".$this->lang."' ";
- $SQL .= 'AND l_title.lang=l_descr.lang ';
- $res[$fileListField['fieldName']] = $this->dbDriver->GetAll($SQL);
- }
- foreach($params['selectMultFields'] as &$selectMultField)
- {
- $selectFieldInfo = $selectMultField['selectFieldInfo'];
- $SQL = 'SELECT ';
- $SQL .= 'o.'.$selectFieldInfo['optionTableKey'].',';
- $SQL .= 'o.'.$selectFieldInfo['optionTableValue'].' ';
- $SQL .= 'FROM ';
- $SQL .= $selectFieldInfo['optionTable'] . ' o,';
- $SQL .= $selectFieldInfo['selectedTable'] . ' s ';
- $SQL .= 'WHERE ';
- $SQL .= 'o.'.$selectFieldInfo['optionTableKey'].'=';
- $SQL .= 's.'.$selectFieldInfo['optionTableKey'].' ';
- $SQL .= "AND s.docId='".$res['docId']."' ";
- $res[$selectMultField['fieldName']] = $this->dbDriver->GetAll($SQL);
- }
- }
- }
- return $results;
- }
- //--Method: GetDocData
- //--Desc: Returns document attributes
- private function GetDocData($docId, $lockMode, & $status)
- {
- // loads path rights
- $SQL = 'SELECT * ';
- $SQL .= 'FROM LIB_Node node, LIB_Document doc ';
- $SQL .= 'WHERE ';
- $SQL .= "nodeId = $docId AND ";
- $SQL .= 'nodeId = docId ';
- switch($lockMode)
- {
- case 'share':
- $SQL .= ' LOCK IN SHARE MODE';
- break;
- case 'update':
- $SQL .= ' FOR UPDATE';
- break;
- }
- $doc = $this->dbDriver->GetRow($SQL);
- if(count($doc) == 0)
- throw new AV_Exception(NOT_FOUND, $this->lang);
- return $doc;
- }
- private function LoadReturnFields(& $params)
- {
- $SQL = 'SELECT DISTINCT fieldName FROM LIB_Folder, LIB_DocReturnFields ';
- $SQL .= 'WHERE (';
- foreach($params['path'] as $key=>&$path)
- {
- if($key>0)
- $SQL .= ' OR ';
- if($params['recursiveSearch'])
- $SQL .= "path LIKE '".$path."%' ";
- else
- $SQL .= "path = '".$path."' ";
- }
- $SQL .= ') AND folderTables=id ';
- $params['returnFields'] = $this->dbDriver->GetCol($SQL);
- }
- private function GetReturnFields($path)
- {
- $SQL = 'SELECT rf.tableName,rf.fieldName ';
- $SQL .= 'FROM LIB_Folder f, LIB_DocReturnFields rf, FORM_Field field ';
- $SQL .= "WHERE f.path = '$path' AND f.folderTables=rf.id ";
- $SQL .= 'AND rf.tableName=field.tableName AND rf.fieldName=field.fieldName ';
- $SQL .= "AND field.type NOT IN ('objectList','fileList','selectMultiple') ";
- $SQL .= 'ORDER BY printOrder ';
- return $this->dbDriver->GetAll($SQL);
- }
- private function GetDocFields($docId,$path)
- {
- $returnFields = $this->GetReturnFields($path);
- $SELECT = NULL;
- $FROM = NULL;
- $WHERE = NULL;
- foreach($returnFields as $key=>$field)
- {
- if($SELECT == NULL)
- $SELECT = "SELECT ";
- else
- $SELECT .= ',';
- $SELECT .= "t$key.".$field['fieldName'];
- if($FROM == NULL)
- $FROM = ' FROM ';
- else
- $FROM .= ',';
- $FROM .= $field['tableName']." t$key";
- if($WHERE == NULL)
- $WHERE = ' WHERE ';
- else
- $WHERE .= ' AND ';
- if($field['tableName']=='LIB_Node')
- $WHERE .= "t$key.nodeId='$docId'";
- else
- $WHERE .= "t$key.docId='$docId'";
- }
- $SQL = "$SELECT $FROM $WHERE";
- return $this->dbDriver->GetRow($SQL);
- }
- protected function LoadSearchDefs(& $params)
- {
- // each folder represents a search object, which has multiple tables
- // searches search object and the tables associated to each one
- // (folderTables)
- $SQL = 'SELECT DISTINCT (ft.id), ft.tableName, ft.printOrder ';
- $SQL .= 'FROM LIB_Folder f, LIB_FolderTables ft WHERE (';
- foreach($params['path'] as $key=>&$path)
- {
- if($key>0)
- $SQL .= ' OR ';
- if($params['recursiveSearch'])
- $SQL .= "path LIKE '".$path."%' ";
- else
- $SQL .= "path = '".$path."' ";
- }
- $SQL .= ') AND f.folderTables=ft.id ';
- $SQL .= 'ORDER BY ft.id, ft.printOrder ';
- $folderTables = $this->dbDriver->GetAll($SQL);
- if(count($folderTables)==0)
- throw new AV_Exception(INVALID_PATH, $this->lang);
- // creates temporary table for storing results
- if($params['tempTable'])
- {
- $params['tableName'] = uniqid('LIB_SearchResult_',false);
- $SQL = 'CREATE TEMPORARY TABLE ' . $params['tableName'];
- $SQL .= '(docId INTEGER UNSIGNED NOT NULL';
- $SQL .= ',folderId INTEGER UNSIGNED NOT NULL';
- $SQL .= ',folderTables INTEGER UNSIGNED NOT NULL';
- $SQL .= ',path VARCHAR(255) NOT NULL';
- $SQL .= ',matches INTEGER UNSIGNED NOT NULL';
- $SQL .= ',fixedOrder INTEGER UNSIGNED NOT NULL';
- }
- $params['foundOrderBy'] = false;
- $params['searchTables'] = array();
- $params['searchFields'] = array();
- // loads LIB_Node fields
- $fieldsDef = $this->nodeTable->LoadFieldsDef();
- $params['searchTables']['LIB_Node'] = array();
- $params['searchTables']['LIB_Node']['tableRef'] = 'docNode';
- foreach($fieldsDef as $def)
- $this->GetSearchField('LIB_Node',$this->nodeTable,$def,$params);
- // load LIB_Document fields
- $fieldsDef = $this->docMainTable->LoadFieldsDef();
- $params['searchTables']['LIB_Document'] = array();
- $params['searchTables']['LIB_Document']['tableRef'] = 'doc';
- foreach($fieldsDef as $def)
- $this->GetSearchField('LIB_Document',$this->docMainTable,$def,$params);
- $searchCriteria = $params['searchCriteria'];
- $exclusionFilters = $params['exclusionFilters'];
- $returnFields = $params['returnFields'];
- $searchCriteriaCtrl = $searchCriteria;
- $exclusionFiltersCtrl = $exclusionFilters;
- $returnFieldsCtrl = $returnFields;
- // load folderTables fields
- $tableNum = 0;
- $id = NULL;
- foreach($folderTables as $folder)
- {
- $tableName = $folder['tableName'];
- if($id != NULL && $id != $folder['id'])
- {
- if($params['searchCriteria'] != '*')
- $searchCriteriaCtrl = array_intersect($searchCriteriaCtrl,
- $params['searchCriteria']);
- $exclusionFiltersCtrl = array_intersect_assoc($exclusionFiltersCtrl,
- $params['exclusionFilters']);
- $returnFieldsCtrl = array_intersect($returnFieldsCtrl,
- $params['returnFields']);
- $params['searchCriteria'] = $searchCriteria;
- $params['exclusionFilters'] = $exclusionFilters;
- $params['returnFields'] = $returnFields;
- }
- $id = $folder['id'];
- // load table fields if not done yet
- if(!isset($params['searchTables'][$tableName]))
- {
- $tableObj = new FORM_DynTable($tableName, $this->module);
- $fieldsDef = $tableObj->LoadFieldsDef();
- $params['searchTables'][$tableName] = array();
- $params['searchTables'][$tableName]['tableRef'] = 't'.$tableNum++;
- foreach($fieldsDef as $def)
- $this->GetSearchField($tableName,$tableObj,$def,$params);
- }
- $params['searchObjs'][$id]['returnFields'] =
- array_merge((array)$params['searchObjs'][$id]['returnFields'],
- (array)$params['searchTables'][$tableName]['returnFields']);
- $params['searchObjs'][$id]['returnFieldsRefs'] =
- array_merge((array)$params['searchObjs'][$id]['returnFieldsRefs'],
- (array)$params['searchTables'][$tableName]['returnFieldsRefs']);
- $params['searchObjs'][$id]['exclusionFilters'] =
- array_merge((array)$params['searchObjs'][$id]['exclusionFilters'],
- (array)$params['searchTables'][$tableName]['exclusionFilters']);
- $params['searchObjs'][$id]['searchCriteria'] =
- array_merge((array)$params['searchObjs'][$id]['searchCriteria'],
- (array)$params['searchTables'][$tableName]['searchCriteria']);
- $tableRef = $tableName . ' ';
- $tableRef .= $params['searchTables'][$tableName]['tableRef'];
- $params['searchObjs'][$id]['tables'][] = $tableRef;
- $params['searchObjs'][$id]['tables'] =
- array_merge($params['searchObjs'][$id]['tables'],
- (array)$params['searchTables'][$tableName]['tables']);
-
- $tablesWhere = 'docLink.docId=';
- $tablesWhere .= $params['searchTables'][$tableName]['keyField'];
- $params['searchObjs'][$id]['tablesWhere'][] = $tablesWhere;
- $params['searchObjs'][$id]['tablesWhere'] =
- array_merge($params['searchObjs'][$id]['tablesWhere'],
- (array)$params['searchTables'][$tableName]['tablesWhere']);
- if($params['searchTables'][$tableName]['foundOrderBy'])
- {
- $params['searchObjs'][$id]['foundOrderBy'] = true;
- $params['searchObjs'][$id]['orderByRef'] = $params['orderByRef'];
- }
- }
- if($params['searchCriteria'] != '*')
- $searchCriteriaCtrl = array_intersect($searchCriteriaCtrl,
- $params['searchCriteria']);
- $exclusionFiltersCtrl = array_intersect_assoc($exclusionFiltersCtrl,
- $params['exclusionFilters']);
- $returnFieldsCtrl = array_intersect($returnFieldsCtrl,
- $params['returnFields']);
- if($params['tempTable'])
- {
- if(count($params['searchFields']>0))
- $SQL .= ','.implode(',',$params['searchFields']);
- $SQL .= ')';
- }
- // consist order by
- if(!$params['foundOrderBy'])
- {
- switch($params['orderBy'])
- {
- case 'matches':
- break;
- case 'fixedOrder':
- $params['orderByRef'] = 'docLink.fixedOrder';
- break;
- default:
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- array('fieldName'=>'orderBy',
- 'orderBy'=>$params['orderBy']));
- }
- }
- if(count($returnFieldsCtrl) > 0)
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- array('fieldName'=>'returnFields',
- 'returnFields'=>$returnFieldsCtrl,
- 'returnFieldsFound'=>$params['returnFieldsFound']));
- if($params['searchCriteria'] != '*' &&
- count($searchCriteriaCtrl) > 0)
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- array('fieldName'=>'searchCriteria',
- 'value'=>$params['searchCriteria']));
- if(count($exclusionFiltersCtrl) > 0)
- throw new AV_Exception(INVALID_FIELD, $this->lang,
- array('fieldName'=>'exclusionFilters',
- 'value'=>$params['exclusionFilters']));
- if($params['tempTable'])
- $this->dbDriver->ExecSQL($SQL);
- }
- private function GetSearchField($tableName,$tableObj,$def,&$params)
- {
- $tableRef = $params['searchTables'][$tableName]['tableRef'];
- $fieldRef = $tableRef . '.' . $def['fieldName'];
- if($def['keyField'] == '1')
- $params['searchTables'][$tableName]['keyField'] = $fieldRef;
- if(//strpos($def['accessMode'],'r') === false ||
- ($def['type'] != 'dummy' &&
- $def['type'] != 'hidden' &&
- $def['type'] != 'text' &&
- $def['type'] != 'textArea' &&
- $def['type'] != 'htmlArea' &&
- $def['type'] != 'langLabel' &&
- $def['type'] != 'langTextArea' &&
- $def['type'] != 'langHtmlArea' &&
- $def['type'] != 'select' &&
- $def['type'] != 'selectMult' &&
- $def['type'] != 'selectMultiple' &&
- $def['type'] != 'radio' &&
- $def['type'] != 'readOnlySelect' &&
- $def['type'] != 'date' &&
- $def['type'] != 'datetime' &&
- $def['type'] != 'boolean' &&
- $def['type'] != 'accessRight' &&
- $def['type'] != 'integer' &&
- $def['type'] != 'float' &&
- $def['type'] != 'currency' &&
- $def['type'] != 'percent' &&
- $def['type'] != 'fileList' &&
- $def['type'] != 'cnpj' &&
- $def['type'] != 'cpf' &&
- $def['type'] != 'cep' &&
- $def['type'] != 'objectList' ))
- return;
- if($params['orderBy'] == $def['fieldName'])
- {
- $params['orderByRef'] = $tableRef . '.' .$def['fieldName'];
- $params['foundOrderBy'] = true;
- $params['searchTables'][$tableName]['foundOrderBy'] = true;
- }
- $optFieldRef = NULL;
- // sets searchCriteria
- $key = array_search($def['fieldName'],$params['searchCriteria']);
- if($key !== false && $key !== NULL || $params['searchCriteria']=='*')
- {
- switch($def['type'])
- {
- default:
- $params['searchTables'][$tableName]['searchCriteria'][] = $fieldRef;
- break;
- case 'select':
- case 'readOnlySelect':
- case 'radio':
- $this->GetSelectField($tableName, $tableObj, $def, $tableRef,
- $fieldRef, $params, $optFieldRef);
- $params['searchTables'][$tableName]['searchCriteria'][] = $optFieldRef;
- break;
- case 'langLabel':
- case 'langTextArea':
- case 'langHtmlArea':
- $this->GetLangField($tableName, $def, $fieldRef, $params,$optFieldRef,
- $def['type']!='langLabel');
- $params['searchTables'][$tableName]['searchCriteria'][] = $optFieldRef;
- break;
- case 'fileList':
- case 'objectList':
- break;
- }
- if($params['searchCriteria']!='*')
- unset($params['searchCriteria'][$key]);
- }
- // sets exclusionFilters
- if(isset($params['exclusionFilters'][$def['fieldName']]))
- {
- switch($def['type'])
- {
- default:
- $params['searchTables'][$tableName]['exclusionFilters'][$fieldRef]=
- $params['exclusionFilters'][$def['fieldName']];
- break;
- case 'langLabel':
- if($optFieldRef == NULL)
- $this->GetLangField($tableName,$def,$fieldRef,$params,$optFieldRef,
- $def['type']!='langLabel');
- $params['searchTables'][$tableName]['exclusionFilters'][$optFieldRef]=
- $params['exclusionFilters'][$def['fieldName']];
- break;
- }
- unset($params['exclusionFilters'][$def['fieldName']]);
- }
- // sets returnFields
- // result table needs only fields on returnFields or orderBy
- $key = array_search($def['fieldName'],$params['returnFields']);
- if($key !== false && $key !== NULL ||
- $params['orderBy'] == $def['fieldName'])
- {
- switch($def['type'])
- {
- case 'integer':
- case 'text':
- case 'hidden':
- case 'dummy':
- if(!isset($params['searchFields'][$def['fieldName']]))
- if($def['consistType']=='integer')
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' INTEGER UNSIGNED';
- else
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' VARCHAR('.$def['size'].')';
-
- $params['searchTables'][$tableName]['returnFields'][] =
- $def['fieldName'];
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName']] = $fieldRef;
- break;
- case 'htmlArea': case 'textArea':
- if(!isset($params['searchFields'][$def['fieldName']]))
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' TEXT';
-
- if($this->dbDriver->type=='oracle')
- $params['clobFields'][] = $def['fieldName'];
- $params['searchTables'][$tableName]['returnFields'][] = $def['fieldName'];
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName']] = $fieldRef;
- break;
- case 'select':
- case 'readOnlySelect':
- case 'radio':
- if(!isset($params['searchFields'][$def['fieldName']]))
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' '.$this->GetDBFieldType($tableName,$def['fieldName']);
- if(!isset($params['searchFields'][$def['fieldName'].'Text']))
- $params['searchFields'][$def['fieldName'].'Text'] =
- $def['fieldName'].'Text VARCHAR(255)';
- $params['searchTables'][$tableName]['returnFields'][] =
- $def['fieldName'];
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName']] = $fieldRef;
- if($optFieldRef == NULL)
- $this->GetSelectField($tableName, $tableObj, $def, $tableRef,
- $fieldRef, $params, $optFieldRef);
- $returnField = $optFieldRef . ' as ' . $def['fieldName'].'Text';
- $params['searchTables'][$tableName]['returnFields'][] =
- $def['fieldName'].'Text';
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName'].'Text'] =
- $returnField;
- break;
- case 'selectMult':
- case 'selectMultiple':
- break;
- case 'date':
- if(!isset($params['searchFields'][$def['fieldName']]))
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName']." DATE";
- $params['searchTables'][$tableName]['returnFields'][] =
- $def['fieldName'];
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName']] = $fieldRef;
- break;
- case 'datetime':
- if(!isset($params['searchFields'][$def['fieldName']]))
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName']." DATETIME";
- $params['searchTables'][$tableName]['returnFields'][] =
- $def['fieldName'];
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName']] = $fieldRef;
- break;
- case 'langLabel':
- case 'langTextArea':
- case 'langHtmlArea':
- if(!isset($params['searchFields'][$def['fieldName']]))
- if($def['type'] == 'langLabel')
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' VARCHAR(255)';
- else
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' TEXT';
- if($optFieldRef == NULL)
- $this->GetLangField($tableName, $def, $fieldRef, $params,
- $optFieldRef, $def['type']!='langLabel');
- $returnField = $optFieldRef .' as ' . $def['fieldName'];
- $params['searchTables'][$tableName]['returnFields'][] =
- $def['fieldName'];
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName']] =
- $returnField;
- break;
- case 'boolean':
- if(!isset($params['searchFields'][$def['fieldName']]))
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' CHAR(1)';
-
- $params['searchTables'][$tableName]['returnFields'][] =
- $def['fieldName'];
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName']] = $fieldRef;
- break;
- case 'accessRight':
- if(!isset($params['searchFields'][$def['fieldName']]))
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' CHAR(2)';
-
- $params['searchTables'][$tableName]['returnFields'][] =
- $def['fieldName'];
- $params['searchTables'][$tableName]['returnFieldsRefs'][$def['fieldName']] = $fieldRef;
- break;
-
- case 'currency':
- case 'float':
- case 'percent':
- if(!isset($params['searchFields'][$def['fieldName']]))
- $params['searchFields'][$def['fieldName']] =
- $def['fieldName'].' …
Large files files are truncated, but you can click here to view the full file