oDocument =& $oDocument; $this->oUser =& $oUser; $this->oPlugin =& $oPlugin; $this->aBreadcrumbs = array( array('action' => 'browse', 'name' => _kt('Browse')), ); $this->persistParams('fDocumentId'); parent::KTStandardDispatcher(); } function setDocument(&$oDocument) { $this->oDocument =& $oDocument; } function setUser(&$oUser) { $this->oUser =& $oUser; } function _show() { if (is_null($this->_sShowPermission)) { return true; } $oFolder = Folder::get($this->oDocument->getFolderId()); if ($this->_bMutator && $this->oDocument->getImmutable()) { if ($this->_bMutationAllowedByAdmin === true) { if (!KTBrowseUtil::inAdminMode($this->oUser, $oFolder)) { return false; } } else { return false; } } if ($this->_bAdminAlwaysAvailable) { if (Permission::userIsSystemAdministrator($this->oUser->getId())) { return true; } if (Permission::isUnitAdministratorForFolder($this->oUser, $this->oDocument->getFolderId())) { return true; } } $oPermission =& KTPermission::getByName($this->_sShowPermission); if (PEAR::isError($oPermission)) { return true; } if (!KTWorkflowUtil::actionEnabledForDocument($this->oDocument, $this->sName)) { return false; } // be nasty in archive/delete status. $status = $this->oDocument->getStatusID(); if (($status == DELETED) || ($status == ARCHIVED)) { return false; } if ($this->bAllowInAdminMode) { // check if this user is in admin mode if (KTBrowseUtil::inAdminMode($this->oUser, $oFolder)) { return true; } } return KTPermissionUtil::userHasPermissionOnItem($this->oUser, $oPermission, $this->oDocument); } function getURL() { $oKTConfig =& KTConfig::getSingleton(); $sExt = '.php'; if (KTUtil::arrayGet($_SERVER, 'kt_no_extensions')) { $sExt = ''; } if ($oKTConfig->get('KnowledgeTree/pathInfoSupport')) { return sprintf('%s/action%s/%s?fDocumentId=%d', $GLOBALS['KTRootUrl'], $sExt, $this->sName, $this->oDocument->getID()); } else { return sprintf('%s/action%s?kt_path_info=%s&fDocumentId=%d', $GLOBALS['KTRootUrl'], $sExt, $this->sName, $this->oDocument->getID()); } } function getInfo() { if ($this->_show() === false) { return null; } $url = $this->getURL(); $aInfo = array( 'description' => $this->sDescription, 'name' => $this->getDisplayName(), 'ns' => $this->sName, 'url' => $url, 'icon_class' => $this->sIconClass, ); $aInfo = $this->customiseInfo($aInfo); return $aInfo; } function getName() { return $this->sName; } function getDisplayName() { // Should be overridden by the i18nised display name // This is here solely for backwards compatibility return $this->sDisplayName; } function getDescription() { return $this->sDescription; } function customiseInfo($aInfo) { return $aInfo; } function check() { $this->oDocument =& $this->oValidator->validateDocument($_REQUEST['fDocumentId']); if (!$this->_show()) { return false; } $aOptions = array('final' => false, 'documentaction' => 'viewDocument', 'folderaction' => 'browse', ); $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForDocument($this->oDocument, $aOptions)); $actions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser, 'documentinfo'); $oPortlet = new KTActionPortlet(sprintf(_kt('Document info'))); $oPortlet->setActions($actions, $this->sName); $this->oPage->addPortlet($oPortlet); $actions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser); $oPortlet = new KTActionPortlet(sprintf(_kt('Document actions'))); $oPortlet->setActions($actions, $this->sName); $this->oPage->addPortlet($oPortlet); $this->oPage->setSecondaryTitle($this->oDocument->getName()); return true; } function do_main() { return _kt('Dispatcher component of action not implemented.'); } } class KTDocumentActionUtil { function getDocumentActionInfo($slot = 'documentaction') { $oRegistry =& KTActionRegistry::getSingleton(); return $oRegistry->getActions($slot); } function &getDocumentActionsForDocument(&$oDocument, $oUser, $slot = 'documentaction') { $aObjects = array(); foreach (KTDocumentActionUtil::getDocumentActionInfo($slot) as $aAction) { list($sClassName, $sPath, $sPlugin) = $aAction; $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin($sPlugin); if (!empty($sPath)) { require_once($sPath); } $aObjects[] =& new $sClassName($oDocument, $oUser, $oPlugin); } return $aObjects; } function getAllDocumentActions($slot = 'documentaction') { $aObjects = array(); $oDocument = null; $oUser = null; foreach (KTDocumentActionUtil::getDocumentActionInfo($slot) as $aAction) { list($sClassName, $sPath, $sName, $sPlugin) = $aAction; $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin($sPlugin); if (!empty($sPath)) { require_once($sPath); } $aObjects[] =& new $sClassName($oDocument, $oUser, $oPlugin); } return $aObjects; } function getDocumentActionsByNames($aNames, $slot = 'documentaction', $oDocument = null, $oUser = null) { $aObjects = array(); foreach (KTDocumentActionUtil::getDocumentActionInfo($slot) as $aAction) { list($sClassName, $sPath, $sName, $sPlugin) = $aAction; $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin($sPlugin); if (!in_array($sName, $aNames)) { continue; } if (!empty($sPath)) { require_once($sPath); } $aObjects[] =& new $sClassName($oDocument, $oUser, $oPlugin); } return $aObjects; } } ?>