예제 #1
0
 function testBreadcrumbsForFolder()
 {
     $oFolder =& KTFolderUtil::add($this->oFolder, 'testBreadcrumbsForFolder', $this->oUser);
     $aBreadcrumbs =& KTBrowseUtil::breadcrumbsForFolder($oFolder, array('final' => true));
     $this->assertEqual($this->_getId($aBreadcrumbs[0]['url']), 1);
     $this->assertEqual($aBreadcrumbs[0]['name'], 'Folders');
     $this->assertEqual($this->_getId($aBreadcrumbs[1]['url']), $this->oFolder->getId());
     $this->assertEqual($aBreadcrumbs[1]['name'], $this->oFolder->getName());
     $this->assertNull($aBreadcrumbs[2]['url']);
     $this->assertEqual($aBreadcrumbs[2]['name'], $oFolder->getName());
     $aBreadcrumbs =& KTBrowseUtil::breadcrumbsForFolder($oFolder, array('final' => false));
     $this->assertEqual($this->_getId($aBreadcrumbs[0]['url']), 1);
     $this->assertEqual($aBreadcrumbs[0]['name'], 'Folders');
     $this->assertEqual($this->_getId($aBreadcrumbs[1]['url']), $this->oFolder->getId());
     $this->assertEqual($aBreadcrumbs[1]['name'], $this->oFolder->getName());
     $this->assertEqual($this->_getId($aBreadcrumbs[2]['url']), $oFolder->getId());
     $this->assertEqual($aBreadcrumbs[2]['name'], $oFolder->getName());
 }
예제 #2
0
 function check()
 {
     $this->browse_mode = KTUtil::arrayGet($_REQUEST, 'fBrowseMode', 'folder');
     $action = KTUtil::arrayGet($_REQUEST, $this->event_var, 'main');
     $this->editable = false;
     // catch the alternative actions.
     if ($action != 'main') {
         return true;
     }
     // if we're going to main ...
     // folder browse mode
     if ($this->browse_mode == 'folder') {
         $in_folder_id = KTUtil::arrayGet($_REQUEST, 'fFolderId');
         if (empty($in_folder_id)) {
             $oConfig = KTConfig::getSingleton();
             if ($oConfig->get('tweaks/browseToUnitFolder')) {
                 $iHomeFolderId = $this->oUser->getHomeFolderId();
                 if ($iHomeFolderId) {
                     $in_folder_id = $iHomeFolderId;
                 }
             }
         }
         $folder_id = (int) $in_folder_id;
         // conveniently, will be 0 if not possible.
         if ($folder_id == 0) {
             $folder_id = 1;
         }
         $_REQUEST['fBrowseMode'] = 'folder';
         // here we need the folder object to do the breadcrumbs.
         $oFolder =& Folder::get($folder_id);
         if (PEAR::isError($oFolder)) {
             return false;
             // just fail.
         }
         // check whether the user can edit this folder
         $oPerm = KTPermission::getByName('ktcore.permissions.write');
         if (KTPermissionUtil::userHasPermissionOnItem($this->oUser, $oPerm, $oFolder)) {
             $this->editable = true;
         } else {
             $this->editable = false;
         }
         // set the title and breadcrumbs...
         $this->oPage->setTitle(_kt('Browse'));
         if (KTPermissionUtil::userHasPermissionOnItem($this->oUser, 'ktcore.permissions.folder_details', $oFolder)) {
             $this->oPage->setSecondaryTitle($oFolder->getName());
         } else {
             if (KTBrowseUtil::inAdminMode($this->oUser, $oFolder)) {
                 $this->oPage->setSecondaryTitle(sprintf('(%s)', $oFolder->getName()));
             } else {
                 $this->oPage->setSecondaryTitle('...');
             }
         }
         //Figure out if we came here by navigating trough a shortcut.
         //If we came here from a shortcut, the breadcrumbspath should be relative
         //to the shortcut folder.
         $iSymLinkFolderId = KTUtil::arrayGet($_REQUEST, 'fShortcutFolder', null);
         if (is_numeric($iSymLinkFolderId)) {
             $oBreadcrumbsFolder = Folder::get($iSymLinkFolderId);
             $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForFolder($oBreadcrumbsFolder, array('final' => false)));
             $this->aBreadcrumbs[] = array('name' => $oFolder->getName());
         } else {
             $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForFolder($oFolder));
         }
         $this->oFolder =& $oFolder;
         // we now have a folder, and need to create the query.
         $aOptions = array('ignorepermissions' => KTBrowseUtil::inAdminMode($this->oUser, $oFolder));
         $this->oQuery = new BrowseQuery($oFolder->getId(), $this->oUser, $aOptions);
         $this->resultURL = KTUtil::addQueryString($_SERVER['PHP_SELF'], sprintf('fFolderId=%d', $oFolder->getId()));
         // and the portlets
         $portlet = new KTActionPortlet(sprintf(_kt('About this folder')));
         $aActions = KTFolderActionUtil::getFolderInfoActionsForFolder($this->oFolder, $this->oUser);
         $portlet->setActions($aActions, $this->sName);
         $this->oPage->addPortlet($portlet);
         $portlet = new KTActionPortlet(sprintf(_kt('Actions on this folder')));
         $aActions = KTFolderActionUtil::getFolderActionsForFolder($oFolder, $this->oUser);
         $portlet->setActions($aActions, null);
         $this->oPage->addPortlet($portlet);
     } else {
         if ($this->browse_mode == 'lookup_value') {
             // browsing by a lookup value
             $this->editable = false;
             // check the inputs
             $field = KTUtil::arrayGet($_REQUEST, 'fField', null);
             $oField = DocumentField::get($field);
             if (PEAR::isError($oField) || $oField == false) {
                 $this->errorRedirectToMain('No Field selected.');
                 exit(0);
             }
             $value = KTUtil::arrayGet($_REQUEST, 'fValue', null);
             $oValue = MetaData::get($value);
             if (PEAR::isError($oValue) || $oValue == false) {
                 $this->errorRedirectToMain('No Value selected.');
                 exit(0);
             }
             $this->oQuery = new ValueBrowseQuery($oField, $oValue);
             $this->resultURL = KTUtil::addQueryString($_SERVER['PHP_SELF'], sprintf('fBrowseMode=lookup_value&fField=%d&fValue=%d', $field, $value));
             // setup breadcrumbs
             $this->aBreadcrumbs = array(array('name' => _kt('Lookup Values'), 'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], 'action=selectField')), array('name' => $oField->getName(), 'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], 'action=selectLookup&fField=' . $oField->getId())), array('name' => $oValue->getName(), 'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], sprintf('fBrowseMode=lookup_value&fField=%d&fValue=%d', $field, $value))));
         } else {
             if ($this->browse_mode == 'document_type') {
                 // browsing by document type
                 $this->editable = false;
                 $doctype = KTUtil::arrayGet($_REQUEST, 'fType', null);
                 $oDocType = DocumentType::get($doctype);
                 if (PEAR::isError($oDocType) || $oDocType == false) {
                     $this->errorRedirectToMain('No Document Type selected.');
                     exit(0);
                 }
                 $this->oQuery = new TypeBrowseQuery($oDocType);
                 // FIXME probably want to redirect to self + action=selectType
                 $this->aBreadcrumbs[] = array('name' => _kt('Document Types'), 'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], 'action=selectType'));
                 $this->aBreadcrumbs[] = array('name' => $oDocType->getName(), 'url' => KTUtil::addQueryString($_SERVER['PHP_SELF'], 'fBrowseMode=document_type&fType=' . $oDocType->getId()));
                 $this->resultURL = KTUtil::addQueryString($_SERVER['PHP_SELF'], sprintf('fType=%s&fBrowseMode=document_type', $doctype));
             } else {
                 // FIXME what should we do if we can't initiate the browse?  we "pretend" to have no perms.
                 return false;
             }
         }
     }
     return true;
 }
예제 #3
0
 function do_main()
 {
     // fix legacy, broken items.
     if (KTUtil::arrayGet($_REQUEST, 'fDocumentID', true) !== true) {
         $_REQUEST['fDocumentId'] = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fDocumentID'));
         unset($_REQUEST['fDocumentID']);
     }
     $document_data = array();
     $document_id = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fDocumentId'));
     if ($document_id === null) {
         $this->oPage->addError(sprintf(_kt("No document was requested.  Please <a href=\"%s\">browse</a> for one."), KTBrowseUtil::getBrowseBaseUrl()));
         return $this->do_error();
     }
     // try get the document.
     $oDocument =& Document::get($document_id);
     if (PEAR::isError($oDocument)) {
         $this->oPage->addError(sprintf(_kt("The document you attempted to retrieve is invalid.   Please <a href=\"%s\">browse</a> for one."), KTBrowseUtil::getBrowseBaseUrl()));
         $this->oPage->booleanLink = true;
         return $this->do_error();
     }
     $document_id = $oDocument->getId();
     $document_data['document_id'] = $oDocument->getId();
     if (!KTBrowseUtil::inAdminMode($this->oUser, $oDocument->getFolderId())) {
         if ($oDocument->getStatusID() == ARCHIVED) {
             $this->oPage->addError(_kt('This document has been archived.  Please contact the system administrator to have it restored if it is still needed.'));
             return $this->do_request($oDocument);
         } else {
             if ($oDocument->getStatusID() == DELETED) {
                 $this->oPage->addError(_kt('This document has been deleted.  Please contact the system administrator to have it restored if it is still needed.'));
                 return $this->do_error();
             } else {
                 if (!Permission::userHasDocumentReadPermission($oDocument)) {
                     $this->oPage->addError(_kt('You are not allowed to view this document'));
                     return $this->permissionDenied();
                 }
             }
         }
     }
     if ($oDocument->getStatusID() == ARCHIVED) {
         $this->oPage->addError(_kt('This document has been archived.'));
     } else {
         if ($oDocument->getStatusID() == DELETED) {
             $this->oPage->addError(_kt('This document has been deleted.'));
         }
     }
     $this->oPage->setSecondaryTitle($oDocument->getName());
     $aOptions = array('documentaction' => 'viewDocument', 'folderaction' => 'browse');
     $this->oDocument =& $oDocument;
     //Figure out if we came here by navigating trough a shortcut.
     //If we came here from a shortcut, the breadcrumbspath should be relative
     //to the shortcut folder.
     $iSymLinkFolderId = KTUtil::arrayGet($_REQUEST, 'fShortcutFolder', null);
     if (is_numeric($iSymLinkFolderId)) {
         $oBreadcrumbsFolder = Folder::get($iSymLinkFolderId);
         $aOptions['final'] = false;
         $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForFolder($oBreadcrumbsFolder, $aOptions));
         $this->aBreadcrumbs[] = array('name' => $this->oDocument->getName());
     } else {
         $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForDocument($oDocument, $aOptions, $iSymLinkFolderId));
     }
     $this->oPage->setBreadcrumbDetails(_kt('document details'));
     $this->addPortlets('Document Details');
     $document_data['document'] = $oDocument;
     $document_data['document_type'] =& DocumentType::get($oDocument->getDocumentTypeID());
     $is_valid_doctype = true;
     if (PEAR::isError($document_data['document_type'])) {
         $this->oPage->addError(_kt('The document you requested has an invalid <strong>document type</strong>.  Unfortunately, this means that we cannot effectively display it.'));
         $is_valid_doctype = false;
     }
     // we want to grab all the md for this doc, since its faster that way.
     $mdlist =& DocumentFieldLink::getByDocument($oDocument);
     $field_values = array();
     foreach ($mdlist as $oFieldLink) {
         $field_values[$oFieldLink->getDocumentFieldID()] = $oFieldLink->getValue();
     }
     //var_dump($field_values);
     $document_data['field_values'] = $field_values;
     // Fieldset generation.
     //
     //   we need to create a set of FieldsetDisplay objects
     //   that adapt the Fieldsets associated with this lot
     //   to the view (i.e. ZX3).   Unfortunately, we don't have
     //   any of the plumbing to do it, so we handle this here.
     $fieldsets = array();
     // we always have a generic.
     array_push($fieldsets, new GenericFieldsetDisplay());
     $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton();
     $aDocFieldsets = KTMetadataUtil::fieldsetsForDocument($oDocument);
     foreach ($aDocFieldsets as $oFieldset) {
         $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace());
         array_push($fieldsets, new $displayClass($oFieldset));
     }
     $checkout_user = '******';
     if ($oDocument->getIsCheckedOut() == 1) {
         $oCOU = User::get($oDocument->getCheckedOutUserId());
         if (!(PEAR::isError($oCOU) || $oCOU == false)) {
             $checkout_user = $oCOU->getName();
         }
     }
     // is the checkout action active?
     $bCanCheckin = false;
     foreach ($this->actions as $oDocAction) {
         $sActName = $oDocAction->sName;
         if ($sActName == 'ktcore.actions.document.cancelcheckout') {
             if ($oDocAction->getInfo()) {
                 $bCanCheckin = true;
             }
         }
     }
     // viewlets.
     $aViewlets = array();
     $aViewletActions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser, 'documentviewlet');
     foreach ($aViewletActions as $oAction) {
         $aInfo = $oAction->getInfo();
         if ($aInfo !== null) {
             $aViewlets[] = $oAction->display_viewlet();
             // use the action, since we display_viewlet() later.
         }
     }
     $viewlet_data = implode(' ', $aViewlets);
     $viewlet_data = trim($viewlet_data);
     $content_class = 'view';
     if (!empty($viewlet_data)) {
         $content_class = 'view withviewlets';
     }
     $this->oPage->setContentClass($content_class);
     $oTemplating =& KTTemplating::getSingleton();
     $oTemplate = $oTemplating->loadTemplate('ktcore/document/view');
     $aTemplateData = array('context' => $this, 'sCheckoutUser' => $checkout_user, 'isCheckoutUser' => $this->oUser->getId() == $oDocument->getCheckedOutUserId(), 'canCheckin' => $bCanCheckin, 'document_id' => $document_id, 'document' => $oDocument, 'documentName' => $oDocument->getName(), 'document_data' => $document_data, 'fieldsets' => $fieldsets, 'viewlet_data' => $viewlet_data);
     //return '<pre>' . print_r($aTemplateData, true) . '</pre>';
     return $oTemplate->render($aTemplateData);
 }
예제 #4
0
 function getRestoreLocationFor($oDocument)
 {
     $iFolderId = $oDocument->getRestoreFolderId();
     $oFolder = Folder::get($iFolderId);
     if (PEAR::isError($oFolder)) {
         return _kt('Original folder no longer exists.  Document will be restored in the root folder.');
     } else {
         $aCrumbs = KTBrowseUtil::breadcrumbsForFolder($oFolder);
         $aParts = array();
         foreach ($aCrumbs as $aInfo) {
             $aParts[] = $aInfo['name'];
         }
         return implode(' &raquo; ', $aParts);
     }
 }
예제 #5
0
 function breadcrumbsForDocument($oDocument, $aOptions = null, $iFolderId = null)
 {
     $bFinal = KTUtil::arrayGet($aOptions, 'final', true, false);
     $aOptions = KTUtil::meldOptions($aOptions, array('final' => false));
     if ($iFolderId == null) {
         $iFolderId = $oDocument->getFolderId();
     }
     $aBreadcrumbs = KTBrowseUtil::breadcrumbsForFolder($iFolderId, $aOptions);
     $sAction = KTUtil::arrayGet($aOptions, 'documentaction');
     $url = KTUtil::addQueryStringSelf('fDocumentId=' . $oDocument->getId());
     if (!empty($sAction)) {
         $url = generateControllerUrl($sAction, 'fDocumentId=' . $oDocument->getId());
     }
     if ($bFinal) {
         $aBreadcrumbs[] = array('name' => $oDocument->getName());
     } else {
         $aBreadcrumbs[] = array('url' => $url, 'name' => $oDocument->getName());
     }
     return $aBreadcrumbs;
 }
예제 #6
0
 function check()
 {
     $this->oFolder =& $this->oValidator->validateFolder($_REQUEST['fFolderId']);
     if (!$this->_show()) {
         return false;
     }
     $aOptions = array('final' => false, 'documentaction' => 'viewDocument', 'folderaction' => 'browse');
     $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForFolder($this->oFolder, $aOptions));
     $portlet = new KTActionPortlet(sprintf(_kt('About this folder')));
     $aActions = KTFolderActionUtil::getFolderInfoActionsForFolder($this->oFolder, $this->oUser);
     $portlet->setActions($aActions, $this->sName);
     $this->oPage->addPortlet($portlet);
     $portlet = new KTActionPortlet(sprintf(_kt('Actions on this folder')));
     $aActions = KTFolderActionUtil::getFolderActionsForFolder($this->oFolder, $this->oUser);
     $portlet->setActions($aActions, $this->sName);
     $this->oPage->addPortlet($portlet);
     if (KTPermissionUtil::userHasPermissionOnItem($this->oUser, 'ktcore.permissions.folder_details', $this->oFolder)) {
         $this->oPage->setSecondaryTitle($this->oFolder->getName());
     } else {
         if (KTBrowseUtil::inAdminMode($this->oUser, $this->oFolder)) {
             $this->oPage->setSecondaryTitle(sprintf('(%s)', $this->oFolder->getName()));
         } else {
             $this->oPage->setSecondaryTitle('...');
         }
     }
     return true;
 }