* @copyright Copyright (C) 2002-2005 Markus Westphal, * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, * 2010-2012 Uwe Steinmann * @version Release: @package_version@ */ /** * Include parent class */ //require_once("class.Bootstrap.php"); /** * Include class to preview documents */ require_once("SeedDMS/Preview.php"); /** * Class which outputs the html page for ViewFolder view * * @category DMS * @package SeedDMS * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann * @copyright Copyright (C) 2002-2005 Markus Westphal, * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, * 2010-2012 Uwe Steinmann * @version Release: @package_version@ */ class SeedDMS_View_ViewFolder extends SeedDMS_Theme_Style { /** * set a different name which is used to specify the hooks. */ //public $viewAliasName = ''; function data() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $folder = $this->params['folder']; $jsondata = array('name'=>$folder->getName()); header('Content-Type: application/json'); echo json_encode($jsondata); } /* }}} */ function getAccessModeText($defMode) { /* {{{ */ switch($defMode) { case M_NONE: return getMLText("access_mode_none"); break; case M_READ: return getMLText("access_mode_read"); break; case M_READWRITE: return getMLText("access_mode_readwrite"); break; case M_ALL: return getMLText("access_mode_all"); break; } } /* }}} */ function printAccessList($obj) { /* {{{ */ $accessList = $obj->getAccessList(); if (count($accessList["users"]) == 0 && count($accessList["groups"]) == 0) return; $content = ''; for ($i = 0; $i < count($accessList["groups"]); $i++) { $group = $accessList["groups"][$i]->getGroup(); $accesstext = $this->getAccessModeText($accessList["groups"][$i]->getMode()); $content .= $accesstext.": ".htmlspecialchars($group->getName()); if ($i+1 < count($accessList["groups"]) || count($accessList["users"]) > 0) $content .= "
"; } for ($i = 0; $i < count($accessList["users"]); $i++) { $user = $accessList["users"][$i]->getUser(); $accesstext = $this->getAccessModeText($accessList["users"][$i]->getMode()); $content .= $accesstext.": ".htmlspecialchars($user->getFullName()); if ($i+1 < count($accessList["users"])) $content .= "
"; } if(count($accessList["groups"]) + count($accessList["users"]) > 3) { $this->printPopupBox(getMLText('list_access_rights'), $content); } else { echo $content; } } /* }}} */ /** * Output a single attribute in the document info section * * @param object $attribute attribute */ protected function printAttribute($attribute) { /* {{{ */ $attrdef = $attribute->getAttributeDefinition(); ?> getName()); ?>: getAttributeValue($attribute); ?> params['user']; $node = $this->params['node']; $orderby = $this->params['orderby']; $this->printNewTreeNavigationSubtree($node->getID(), 0, $orderby); } /* }}} */ public function js() { /* {{{ */ $user = $this->params['user']; $folder = $this->params['folder']; $orderby = $this->params['orderby']; $orderdir = (isset($orderby[1]) ? ($orderby[1] == 'd' ? 'desc' : 'asc') : 'asc'); $expandFolderTree = $this->params['expandFolderTree']; $enableDropUpload = $this->params['enableDropUpload']; $maxItemsPerPage = $this->params['maxItemsPerPage']; $maxuploadsize = $this->params['maxuploadsize']; $showtree = $this->params['showtree']; $onepage = $this->params['onepage']; $sitename = trim(strip_tags($this->params['sitename'])); header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('cancel', 'splash_move_document', 'confirm_move_document', 'move_document', 'confirm_transfer_link_document', 'transfer_content', 'link_document', 'splash_move_folder', 'confirm_move_folder', 'move_folder')); ?> seeddms_folder = getID() ?>; function folderSelectedmaintree(id, name) { window.location = '../out/out.ViewFolder.php?folderid=' + id; seeddms_folder = id; title_prefix = "0 ? $sitename : "SeedDMS") ?>"; $('div.ajax').trigger('update', {folderid: id, orderby: ''}); document.title = title_prefix+": "+name; window.history.pushState({"html":"","pageTitle":title_prefix+": "+name},"", '../out/out.ViewFolder.php?folderid=' + id); } function loadMoreObjects(element, limit, orderby) { if(!$(element).is(":visible")) return; element.text(''); element.prop("disabled",true); var folder = element.data('folder') var offset = element.data('offset') // var limit = element.data('limit') url = seeddms_webroot+"out/out.ViewFolder.php?action=entries&folderid="+folder+"&offset="+offset+"&limit="+limit+"&orderby="+orderby; $.ajax({ type: 'GET', url: url, dataType: 'json', success: function(data){ $('#viewfolder-table').append(data.html); if(data.count <= 0) { element.hide(); } else { var str = ''; element.text(str.replace('[number]', data.count)); element.data('offset', offset+limit); element.prop("disabled",false); } } }); } $(window).scroll(function() { if($(window).scrollTop() + $(window).height() == $(document).height()) { loadMoreObjects($('#loadmore'), $('#loadmore').data('limit'), $('#loadmore').data('orderby')); } }); $('body').on('click', '#loadmore', function(e) { loadMoreObjects($(this), $(this).data('all'), $(this).data('orderby')); }); window.onpopstate = function(event) { console.log("location: " + document.location + ", state: " + JSON.stringify(event.state)); console.log(JSON.stringify(event.state)); window.location = document.location; }; /* catch click on 'goto parent button' */ $('body').on('click', '#goto-parent', function(ev) { attr_id = $(ev.currentTarget).data('parentid'); folderSelectedmaintree(attr_id, ''); $([document.documentElement, document.body]).animate({ scrollTop: 200 }, 200); }); /* catch click on a folder row in the list folders and documents */ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) { /* retrieve the id of the target folder either from data-target-id or * from the id. Prefer data-target-id because the id is also used for identifying * the table row when deleting the folder * This was added for the internal_link extensŃ–on */ if(ev.shiftKey) { $(ev.currentTarget).parent().toggleClass('selected'); } else { attr_id = $(ev.currentTarget).parent().data('target-id'); if(typeof attr_id == 'undefined') attr_id = $(ev.currentTarget).parent().attr('id').split('-')[3]; folderSelectedmaintree(attr_id, ''); $([document.documentElement, document.body]).animate({ scrollTop: 200 }, 200); } }); printClickDocumentJs(); ?> $('body').on('click', '.order-btn', function(ev) { ev.preventDefault(); var element = $(this); var orderby = element.data('orderby'); $("div.ajax[data-action='folderList']").trigger('update', {folderid: seeddms_folder, orderby: orderby}); }); printNewTreeNavigationJs($folder->getID(), M_READ, 0, 'maintree', ($expandFolderTree == 1) ? -1 : 3, $orderby); if ($enableDropUpload && $folder->getAccessMode($user) >= M_READWRITE) { echo "SeedDMSUpload.setUrl('".$this->params['settings']->_httpRoot."op/op.Ajax.php');"; echo "SeedDMSUpload.setAbortBtnLabel('".getMLText("cancel")."');"; echo "SeedDMSUpload.setEditBtnLabel('".getMLText("edit_document_props")."');"; echo "SeedDMSUpload.setMaxFileSize($maxuploadsize);\n"; echo "SeedDMSUpload.setMaxFileSizeMsg('".getMLText("uploading_maxsize")."');"; } $this->printDeleteFolderButtonJs(); $this->printDeleteDocumentButtonJs(); } /* }}} */ function folderInfos() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $folder = $this->params['folder']; $txt = $this->callHook('folderInfos', $folder); if(is_string($txt)) echo $txt; else { $owner = $folder->getOwner(); $txt = $this->callHook('preFolderInfos', $folder); if(is_string($txt)) echo $txt; ob_start(); echo "\n"; if($user->isAdmin()) { echo ""; echo "\n"; echo "\n"; echo ""; } echo ""; echo "\n"; echo "\n"; echo ""; echo ""; echo ""; echo ""; echo ""; if($folder->getComment()) { echo ""; echo "\n"; echo "\n"; echo ""; } if($user->isAdmin() || $folder->getAccessMode($user) > M_READ) { echo ""; echo ""; echo ""; echo ""; if($folder->inheritsAccess()) { echo ""; echo "\n"; echo ""; } else { echo ""; echo ""; echo ""; echo ""; } } $attributes = $folder->getAttributes(); if($attributes) { foreach($attributes as $attribute) { $arr = $this->callHook('showFolderAttribute', $folder, $attribute); if(is_array($arr)) { echo ""; echo ""; echo ""; echo ""; } elseif(is_string($arr)) { echo $arr; } else { $this->printAttribute($attribute); } } } $arrarr = $this->callHook('additionalFolderInfos', $folder); if(is_array($arrarr)) { foreach($arrarr as $arr) { echo ""; echo ""; echo ""; echo ""; } } elseif(is_string($arrarr)) { echo $arrarr; } echo "
".getMLText("id").":".htmlspecialchars($folder->getID())."
".getMLText("owner").":getEmail())."\">".htmlspecialchars($owner->getFullName())."
".getMLText("creation_date").":".getLongReadableDate($folder->getDate())."
".getMLText("comment").":".htmlspecialchars($folder->getComment())."
".getMLText('default_access').":".$this->getAccessModeText($folder->getDefaultAccess())."
".getMLText("access_mode").":"; echo getMLText("inherited")."
"; $this->printAccessList($folder); echo "
".getMLText('access_mode').":"; $this->printAccessList($folder); echo "
".$arr[0].":".$arr[1]."
".$arr[0].":".$arr[1]."
\n"; $infos = ob_get_clean(); echo $infos; // $this->printAccordion2(getMLText("folder_infos"), $infos); $txt = $this->callHook('postFolderInfos', $folder); if(is_string($txt)) echo $txt; } } /* }}} */ function folderList() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $folder = $this->params['folder']; $folderid = $folder->getId(); $orderby = $this->params['orderby']; $orderdir = (isset($orderby[1]) ? ($orderby[1] == 'd' ? 'desc' : 'asc') : 'asc'); $cachedir = $this->params['cachedir']; $conversionmgr = $this->params['conversionmgr']; $maxItemsPerPage = $this->params['maxItemsPerPage']; $incItemsPerPage = $this->params['incItemsPerPage']; $previewwidth = $this->params['previewWidthList']; $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; $onepage = $this->params['onepage']; $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidth, $timeout, $xsendfile); if($conversionmgr) $previewer->setConversionMgr($conversionmgr); else $previewer->setConverters($previewconverters); $txt = $this->callHook('listHeader', $folder); if(is_string($txt)) echo $txt; else $this->contentHeading(getMLText("folder_contents")); $subFolders = $this->callHook('folderGetSubFolders', $folder, $orderby[0], $orderdir); if($subFolders === null) $subFolders = $folder->getSubFolders($orderby[0], $orderdir); $subFolders = SeedDMS_Core_DMS::filterAccess($subFolders, $user, M_READ); $documents = $this->callHook('folderGetDocuments', $folder, $orderby[0], $orderdir); if($documents === null) $documents = $folder->getDocuments($orderby[0], $orderdir); $documents = SeedDMS_Core_DMS::filterAccess($documents, $user, M_READ); $txt = $this->callHook('folderListPreContent', $folder, $subFolders, $documents); if(is_string($txt)) echo $txt; $i = 0; if ((count($subFolders) > 0)||(count($documents) > 0)){ $txt = $this->callHook('folderListHeader', $folder, $orderby, $orderdir); if(is_string($txt)) { echo $txt; } elseif(is_array($txt)) { print ""; print "\n\n"; foreach($txt as $headcol) echo "\n"; print "\n\n"; } else { echo $this->folderListHeader(); } print "\n"; foreach($subFolders as $subFolder) { if(!$maxItemsPerPage || $i < $maxItemsPerPage) { $txt = $this->callHook('folderListItem', $subFolder, false, 'viewfolder'); if(is_string($txt)) echo $txt; else { echo $this->folderListRow($subFolder); } } $i++; } if($subFolders && $documents) { if(!$maxItemsPerPage || $maxItemsPerPage > count($subFolders)) { $txt = $this->callHook('folderListSeparator', $folder); if(is_string($txt)) echo $txt; } } foreach($documents as $document) { if(!$maxItemsPerPage || $i < $maxItemsPerPage) { $document->verifyLastestContentExpriry(); $txt = $this->callHook('documentListItem', $document, $previewer, false, 'viewfolder'); if(is_string($txt)) echo $txt; else { echo $this->documentListRow($document, $previewer); } } $i++; } $txt = $this->callHook('folderListFooter', $folder); if(is_string($txt)) echo $txt; else echo "\n
".$headcol."
\n"; if($maxItemsPerPage && $i > $maxItemsPerPage) echo ""; } else printMLText("empty_folder_list"); $txt = $this->callHook('folderListPostContent', $folder, $subFolders, $documents); if(is_string($txt)) echo $txt; } /* }}} */ function navigation() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $folder = $this->params['folder']; $txt = $this->callHook('folderMenu', $folder); if(is_string($txt)) echo $txt; else { $this->pageNavigation($this->getFolderPathHTML($folder), "view_folder", $folder); } echo $this->callHook('preContent'); } /* }}} */ function dropUpload() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $folder = $this->params['folder']; $maxuploadsize = $this->params['maxuploadsize']; $this->contentHeading(getMLText("dropupload"), true); if ($folder->getAccessMode($user) >= M_READWRITE) { ?>
SeedDMS_Core_File::format_filesize($maxuploadsize)]); ?>
errorMsg(getMLText('access_denied')); } } /* }}} */ function entries() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $folder = $this->params['folder']; $orderby = $this->params['orderby']; $orderdir = (isset($orderby[1]) ? ($orderby[1] == 'd' ? 'desc' : 'asc') : 'asc'); $cachedir = $this->params['cachedir']; $conversionmgr = $this->params['conversionmgr']; $previewwidth = $this->params['previewWidthList']; $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; $offset = $this->params['offset']; $limit = $this->params['limit']; header('Content-Type: application/json'); $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidth, $timeout, $xsendfile); if($conversionmgr) $previewer->setConversionMgr($conversionmgr); else $previewer->setConverters($previewconverters); $subFolders = $this->callHook('folderGetSubFolders', $folder, $orderby[0]); if($subFolders === null) $subFolders = $folder->getSubFolders($orderby[0], $orderdir); $subFolders = SeedDMS_Core_DMS::filterAccess($subFolders, $user, M_READ); $documents = $this->callHook('folderGetDocuments', $folder, $orderby[0]); if($documents === null) $documents = $folder->getDocuments($orderby[0], $orderdir); $documents = SeedDMS_Core_DMS::filterAccess($documents, $user, M_READ); $content = ''; if ((count($subFolders) > 0)||(count($documents) > 0)){ $i = 0; // counts all entries $j = 0; // counts only returned entries foreach($subFolders as $subFolder) { if($i >= $offset && $j < $limit) { $txt = $this->callHook('folderListItem', $subFolder, false, 'viewfolder'); if(is_string($txt)) $content .= $txt; else { $content .= $this->folderListRow($subFolder); } $j++; } $i++; } if($subFolders && $documents) { if(($j && $j < $limit) || ($offset + $limit == $i)) { $txt = $this->callHook('folderListSeparator', $folder); if(is_string($txt)) $content .= $txt; } } foreach($documents as $document) { if($i >= $offset && $j < $limit) { $document->verifyLastestContentExpriry(); $txt = $this->callHook('documentListItem', $document, $previewer, false, 'viewfolder'); if(is_string($txt)) $content .= $txt; else { $content .= $this->documentListRow($document, $previewer); } $j++; } $i++; } echo json_encode(array('error'=>0, 'count'=>$i-($offset+$limit), 'html'=>$content)); } } /* }}} */ function show() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; $folder = $this->params['folder']; $orderby = $this->params['orderby']; $orderdir = (isset($orderby[1]) ? ($orderby[1] == 'd' ? 'desc' : 'asc') : 'asc'); $enableFolderTree = $this->params['enableFolderTree']; $enableClipboard = $this->params['enableclipboard']; $enableDropUpload = $this->params['enableDropUpload']; $expandFolderTree = $this->params['expandFolderTree']; $showtree = $this->params['showtree']; $cachedir = $this->params['cachedir']; $conversionmgr = $this->params['conversionmgr']; $enableRecursiveCount = $this->params['enableRecursiveCount']; $maxRecursiveCount = $this->params['maxRecursiveCount']; $maxItemsPerPage = $this->params['maxItemsPerPage']; $incItemsPerPage = $this->params['incItemsPerPage']; $previewwidth = $this->params['previewWidthList']; $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; $currenttab = $this->params['currenttab']; $folderid = $folder->getId(); $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidth, $timeout, $xsendfile); if($conversionmgr) $previewer->setConversionMgr($conversionmgr); else $previewer->setConverters($previewconverters); // echo $this->callHook('startPage'); $this->htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); $this->globalNavigation($folder); $this->contentStart(); ?>
getID()."\"" : "") ?>>
rowStart(); // dynamic columns - left column removed if no content and right column then fills span12. if (!($enableFolderTree || $enableClipboard)) { $LeftColumnSpan = 0; $RightColumnSpan = 12; } else { $LeftColumnSpan = 4; $RightColumnSpan = 8; } if ($LeftColumnSpan > 0) { $this->columnStart($LeftColumnSpan); echo $this->callHook('leftContentPre'); if ($enableFolderTree) { if ($showtree==1){ $this->contentHeading("params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=". $folderid."&showtree=0\">", true); $this->contentContainerStart(); /* * access expandFolderTree with $this->params because it can * be changed by preContent hook. */ $this->printNewTreeNavigationHtml($folderid, M_READ, 0, 'maintree', ($this->params['expandFolderTree'] == 1) ? -1 : 3, $orderby); $this->contentContainerEnd(); } else { $this->contentHeading("params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\">", true); } } echo $this->callHook('leftContent'); if ($enableClipboard) $this->printClipboard($this->params['session']->getClipboard(), $previewer); echo $this->callHook('leftContentPost'); $this->columnEnd(); } $this->columnStart($RightColumnSpan); if ($enableDropUpload/* && $folder->getAccessMode($user) >= M_READWRITE*/) { $this->rowStart(); $this->columnStart(8); } ?>
getID()."\"" : "") ?>>
$tab) { echo '
'; echo $tab['content']; echo "
\n"; } } ?>
getAccessMode($user) >= M_READWRITE*/) { $this->columnEnd(); $this->columnStart(4); ?>
getID()."\"" : "") ?>>
columnEnd(); $this->rowEnd(); } echo $this->callHook('rightContentPre'); ?>
getID()."&orderby=".$orderby."\"" : "") ?>>
callHook('rightContentPost'); $this->columnEnd(); // End of right column div $this->rowEnd(); // End of div around left and right column echo $this->callHook('postContent'); $this->contentEnd(); $this->htmlEndPage(); } /* }}} */ } ?>