link_folders = KTUtil::arrayGet($aOptions, 'link_folders', $this->link_folders, false); $this->link_documents = KTUtil::arrayGet($aOptions, 'link_documents', $this->link_documents, false); parent::setOptions($aOptions); } function AdvancedTitleColumn() { $this->label = _kt("Title"); } // what is used for sorting // query addition is: // [0] => join claus // [1] => join params // [2] => ORDER function addToFolderQuery() { return array(null, null, "F.name", ); } function addToDocumentQuery() { return array(null, null, "DM.name" ); } function renderFolderLink($aDataRow) { /* this check has to be done so that any titles longer than 40 characters is not displayed incorrectly. as mozilla cannot wrap text without white spaces */ if (mb_strlen($aDataRow["folder"]->getName(), 'UTF-8') > 40) { mb_internal_encoding("UTF-8"); $outStr = htmlentities(mb_substr($aDataRow["folder"]->getName(), 0, 40, 'UTF-8')."...", ENT_NOQUOTES, 'UTF-8'); }else{ $outStr = htmlentities($aDataRow["folder"]->getName(), ENT_NOQUOTES, 'UTF-8'); } if($this->link_folders) { $outStr = '' . $outStr . ''; } return $outStr; } function renderDocumentLink($aDataRow) { /* this check has to be done so that any titles longer than 40 characters is not displayed incorrectly. as mozilla cannot wrap text without white spaces */ if (mb_strlen($aDataRow["document"]->getName(), 'UTF-8') > 40) { mb_internal_encoding("UTF-8"); $outStr = htmlentities(mb_substr($aDataRow["document"]->getName(), 0, 40, 'UTF-8')."...", ENT_NOQUOTES, 'UTF-8'); }else{ $outStr = htmlentities($aDataRow["document"]->getName(), ENT_NOQUOTES, 'UTF-8'); } if($this->link_documents) { $outStr = 'getFilename().'">' . $outStr . ''; } return $outStr; } function buildDocumentLink($aDataRow) { return KTBrowseUtil::getUrlForDocument($aDataRow["document"]->getId()); } // 'folder_link' allows you to link to a different URL when you're connecting, instead of addQueryStringSelf // 'direct_folder' means that you want to go to 'browse folder' // 'qs_params' is an array (or string!) of params to add to the link function buildFolderLink($aDataRow) { if (is_null(KTUtil::arrayGet($this->aOptions, 'direct_folder'))) { $dest = KTUtil::arrayGet($this->aOptions, 'folder_link'); $params = kt_array_merge(KTUtil::arrayGet($this->aOptions, 'qs_params', array()), array('fFolderId' => $aDataRow['folder']->getId())); if (empty($dest)) { return KTUtil::addQueryStringSelf($params); } else { return KTUtil::addQueryString($dest, $params); } } else { return KTBrowseUtil::getUrlForFolder($aDataRow['folder']); } } // use inline, since its just too heavy to even _think_ about using smarty. function renderData($aDataRow) { if ($aDataRow["type"] == "folder") { $contenttype = 'folder'; $link = $this->renderFolderLink($aDataRow); return sprintf('%s', $contenttype, $link); } else { $contenttype = $this->_mimeHelper($aDataRow["document"]->getMimeTypeId()); $link = $this->renderDocumentLink($aDataRow); $size = $this->prettySize($aDataRow["document"]->getSize()); return sprintf('%s (%s)', $contenttype, $link, $size); } } function prettySize($size) { $finalSize = $size; $label = 'b'; if ($finalSize > 1000) { $label='Kb'; $finalSize = floor($finalSize/1000); } if ($finalSize > 1000) { $label='Mb'; $finalSize = floor($finalSize/1000); } return $finalSize . $label; } function _mimeHelper($iMimeTypeId) { require_once(KT_LIB_DIR . '/mime.inc.php'); return KTMime::getIconPath($iMimeTypeId); } } /* * Column to handle dates */ class AdvancedDateColumn extends AdvancedColumn { var $name = 'datecolumn'; var $document_field_function; var $folder_field_function; var $sortable = true; var $document_sort_column; var $folder_sort_column; var $namespace = 'ktcore.columns.genericdate'; function AdvancedDateColumn() { $this->label = _kt('Generic Date Function'); } // use inline, since its just too heavy to even _think_ about using smarty. function renderData($aDataRow) { $outStr = ''; if (($aDataRow["type"] == "folder") && (!is_null($this->folder_field_function))) { $res = call_user_func(array($aDataRow["folder"], $this->folder_field_function)); $dColumnDate = strtotime($res); // now reformat this into something "pretty" return date("Y-m-d H:i", $dColumnDate); } else if (($aDataRow["type"] == "document") && (!is_null($this->document_field_function))) { $res = call_user_func(array($aDataRow["document"], $this->document_field_function)); $dColumnDate = strtotime($res); // now reformat this into something "pretty" return date("Y-m-d H:i", $dColumnDate); } else { return '—'; } return $outStr; } function addToFolderQuery() { return array(null, null, null); } function addToDocumentQuery() { return array(null, null, $this->document_sort_column); } } class CreationDateColumn extends AdvancedDateColumn { var $document_field_function = 'getCreatedDateTime'; var $folder_field_function = null; var $document_sort_column = "D.created"; var $folder_sort_column = null; var $namespace = 'ktcore.columns.creationdate'; function CreationDateColumn() { $this->label = _kt('Created'); } } class ModificationDateColumn extends AdvancedDateColumn { var $document_field_function = 'getLastModifiedDate'; var $folder_field_function = null; var $document_sort_column = "D.modified"; var $folder_sort_column = null; var $namespace = 'ktcore.columns.modificationdate'; function ModificationDateColumn() { $this->label = _kt('Modified'); } } class AdvancedUserColumn extends AdvancedColumn { var $document_field_function; var $folder_field_function; var $sortable = false; // by default var $document_sort_column; var $folder_sort_column; var $namespace = 'ktcore.columns.genericuser'; function AdvancedUserColumn() { $this->label = null; // abstract. } // use inline, since its just too heavy to even _think_ about using smarty. function renderData($aDataRow) { $iUserId = null; if (($aDataRow["type"] == "folder") && (!is_null($this->folder_field_function))) { if (method_exists($aDataRow['folder'], $this->folder_field_function)) { $iUserId = call_user_func(array($aDataRow['folder'], $this->folder_field_function)); } } else if (($aDataRow["type"] == "document") && (!is_null($this->document_field_function))) { if (method_exists($aDataRow['document'], $this->document_field_function)) { $iUserId = call_user_func(array($aDataRow['document'], $this->document_field_function)); } } if (is_null($iUserId)) { return '—'; } $oUser = User::get($iUserId); if (PEAR::isError($oUser) || $oUser == false) { return '—'; } else { return htmlentities($oUser->getName(), ENT_NOQUOTES, 'UTF-8'); } } function addToFolderQuery() { return array(null, null, null); } function addToDocumentQuery() { return array(null, null, null); } } class CreatorColumn extends AdvancedUserColumn { var $document_field_function = "getCreatorID"; var $folder_field_function = "getCreatorID"; var $sortable = true; // by default var $namespace = 'ktcore.columns.creator'; function CreatorColumn() { $this->label = _kt("Creator"); // abstract. } } class AdvancedSelectionColumn extends AdvancedColumn { var $rangename = null; var $show_folders = true; var $show_documents = true; var $namespace = "ktcore.columns.selection"; function AdvancedSelectionColumn() { $this->label = ''; } function setOptions($aOptions) { AdvancedColumn::setOptions($aOptions); $this->rangename = KTUtil::arrayGet($this->aOptions, 'rangename', $this->rangename); $this->show_folders = KTUtil::arrayGet($this->aOptions, 'show_folders', $this->show_folders, false); $this->show_documents = KTUtil::arrayGet($this->aOptions, 'show_documents', $this->show_documents, false); } function renderHeader($sReturnURL) { global $main; $main->requireJSResource("resources/js/toggleselect.js"); return sprintf('', $this->rangename); } // only include the _f or _d IF WE HAVE THE OTHER TYPE. function renderData($aDataRow) { $localname = $this->rangename; if (($aDataRow["type"] === "folder") && ($this->show_folders)) { if ($this->show_documents) { $localname .= "_f[]"; } $v = $aDataRow["folderid"]; } else if (($aDataRow["type"] === "document") && $this->show_documents) { if ($this->show_folders) { $localname .= "_d[]"; } $v = $aDataRow["docid"]; } else { return ' '; } return sprintf('', $localname, $v); } // no label, but we do have a title function getName() { return _kt("Multiple Selection"); } } class AdvancedSingleSelectionColumn extends AdvancedSelectionColumn { var $namespace = 'ktcore.columns.singleselection'; function AdvancedSingleSelectionColumn() { parent::AdvancedSelectionColumn(); $this->label = null; } function renderHeader() { return ' '; } // only include the _f or _d IF WE HAVE THE OTHER TYPE. function renderData($aDataRow) { $localname = $this->rangename; if (($aDataRow["type"] === "folder") && ($this->show_folders)) { if ($this->show_documents) { $localname .= "_f"; } $v = $aDataRow["folderid"]; } else if (($aDataRow["type"] === "document") && $this->show_documents) { if ($this->show_folders) { $localname .= "_d"; } $v = $aDataRow["docid"]; } else { return ' '; } return ''; } // no label, but we do have a title function getName() { return _kt("Single Selection"); } } class AdvancedWorkflowColumn extends AdvancedColumn { var $namespace = 'ktcore.columns.workflow_state'; var $sortable = false; function AdvancedWorkflowColumn() { $this->label = _kt("Workflow State"); $this->sortable = false; } // use inline, since its just too heavy to even _think_ about using smarty. function renderData($aDataRow) { // only _ever_ show this for documents. if ($aDataRow["type"] === "folder") { return ' '; } $oWorkflow = KTWorkflowUtil::getWorkflowForDocument($aDataRow['document']); $oState = KTWorkflowUtil::getWorkflowStateForDocument($aDataRow['document']); if (($oState == null) || ($oWorkflow == null)) { return '—'; } else { return sprintf('%s %s', htmlentities($oState->getName(), ENT_NOQUOTES, 'UTF-8'), htmlentities($oWorkflow->getName(), ENT_NOQUOTES, 'UTF-8') ); } } } class AdvancedDownloadColumn extends AdvancedColumn { var $namespace = 'ktcore.columns.download'; function AdvancedDownloadColumn() { $this->label = null; } function renderData($aDataRow) { // only _ever_ show this for documents. if ($aDataRow["type"] === "folder") { return ' '; } $link = KTUtil::ktLink('action.php','ktcore.actions.document.view', 'fDocumentId=' . $aDataRow['document']->getId()); return sprintf('%s', $link, _kt('Download Document'), _kt('Download Document')); } function getName() { return _kt('Download'); } } class DocumentIDColumn extends AdvancedColumn { var $bSortable = false; var $namespace = 'ktcore.columns.docid'; function DocumentIDColumn() { $this->label = _kt("Document ID"); } function renderData($aDataRow) { // only _ever_ show this for documents. if ($aDataRow["type"] === "folder") { return ' '; } return htmlentities($aDataRow['document']->getId(), ENT_NOQUOTES, 'UTF-8'); } } class ContainingFolderColumn extends AdvancedColumn { var $namespace = 'ktcore.columns.containing_folder'; function ContainingFolderColumn() { $this->label = _kt("View Folder"); } function renderData($aDataRow) { // only _ever_ show this for documents. if ($aDataRow["type"] === "folder") { return ' '; } $link = KTBrowseUtil::getUrlForFolder($aDataRow['document']->getFolderId()); return sprintf('%s', $link, _kt('View Folder'), _kt('View Folder')); } function getName() { return _kt('Opening Containing Folder'); } } ?>