function &getSingleton() { if (!KTUtil::arrayGet($GLOBALS, 'oKTFieldsetDisplayRegistry')) { $GLOBALS['oKTFieldsetDisplayRegistry'] = new KTFieldsetDisplayRegistry(); } return $GLOBALS['oKTFieldsetDisplayRegistry']; }
function do_main() { $notifications = (array) KTNotification::getList(array("user_id = ?", $this->oUser->getId())); $num_notifications = count($notifications); $PAGE_SIZE = 5; $page = (int) KTUtil::arrayGet($_REQUEST, 'page', 0); $page_count = ceil($num_notifications / $PAGE_SIZE); if ($page >= $page_count) { $page = $page_count - 1; } if ($page < 0) { $page = 0; } // slice the notification array. $notifications = array_slice($notifications, $page * $PAGE_SIZE, $PAGE_SIZE); // prepare the batch html. easier to do this here than in the template. $batch = array(); for ($i = 0; $i < $page_count; $i++) { if ($i == $page) { $batch[] = sprintf("<strong>%d</strong>", $i + 1); } else { $batch[] = sprintf('<a href="%s">%d</a>', KTUtil::addQueryStringSelf($this->meldPersistQuery(array("page" => $i), "main", true)), $i + 1); } } $batch_html = implode(' · ', $batch); $count_string = sprintf(_kt("Showing Notifications %d - %d of %d"), $page * $PAGE_SIZE + 1, min(($page + 1) * $PAGE_SIZE, $num_notifications), $num_notifications); $this->oPage->setTitle(_kt("Items that require your attention")); $oTemplate =& $this->oValidator->validateTemplate("ktcore/misc/notification_overflow"); $oTemplate->setData(array('count_string' => $count_string, 'batch_html' => $batch_html, 'notifications' => $notifications)); return $oTemplate->render(); }
function do_assign_handler() { $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); $aTriggers = $oKTTriggerRegistry->getTriggers('workflow', 'objectModification'); $selection_ns = KTUtil::arrayGet($_REQUEST, 'selection_ns'); if (empty($selection_ns)) { $sQuery = 'DELETE FROM ' . KTUtil::getTableName('trigger_selection'); $sQuery .= ' WHERE event_ns = ?'; $aParams = array('ktstandard.workflowassociation.handler'); DBUtil::runQuery(array($sQuery, $aParams)); $this->successRedirectToMain(_kt('Handler removed.')); } else { if (!array_key_exists($selection_ns, $aTriggers)) { $this->errorRedirectToMain(_kt('Invalid assignment')); } // clear $sQuery = 'DELETE FROM ' . KTUtil::getTableName('trigger_selection'); $sQuery .= ' WHERE event_ns = ?'; $aParams = array('ktstandard.workflowassociation.handler'); DBUtil::runQuery(array($sQuery, $aParams)); // set $sQuery = 'INSERT INTO ' . KTUtil::getTableName('trigger_selection'); $sQuery .= ' (event_ns, selection_ns)'; $sQuery .= ' VALUES ("ktstandard.workflowassociation.handler",?)'; $aParams = array($selection_ns); DBUtil::runQuery(array($sQuery, $aParams)); $this->successRedirectToMain(_kt('Handler set.')); } }
function isRegistered($sName) { if (KTUtil::arrayGet($this->aResources, $sName)) { return true; } return false; }
static function &getSingleton() { if (!KTUtil::arrayGet($GLOBALS['_KT_PLUGIN'], 'oKTTriggerRegistry')) { $GLOBALS['_KT_PLUGIN']['oKTTriggerRegistry'] = new KTTriggerRegistry(); } return $GLOBALS['_KT_PLUGIN']['oKTTriggerRegistry']; }
function do_checkin() { global $default; $document_id = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); if (empty($document_id)) { return $this->errorRedirectToMain(_kt('You must select a document to check in first.')); } $oDocument = Document::get($document_id); if (PEAR::isError($oDocument)) { return $this->errorRedirectToMain(_kt('The document you specified appears to be invalid.')); } $this->startTransaction(); // actually do the checkin. $oDocument->setIsCheckedOut(0); $oDocument->setCheckedOutUserID(-1); if (!$oDocument->update()) { $this->rollbackTransaction(); return $this->errorRedirectToMain(_kt("Failed to force the document's checkin.")); } // checkout cancelled transaction $oDocumentTransaction =& new DocumentTransaction($oDocument, _kt('Document checked out cancelled'), 'ktcore.transactions.force_checkin'); $res = $oDocumentTransaction->create(); if (PEAR::isError($res) || $res == false) { $this->rollbackTransaction(); return $this->errorRedirectToMain(_kt("Failed to force the document's checkin.")); } $this->commitTransaction(); // FIXME do we want to do this if we can't created the document-transaction? return $this->successRedirectToMain(sprintf(_kt('Successfully forced "%s" to be checked in.'), $oDocument->getName())); }
function do_rename() { $aErrorOptions = array('redirect_to' => array('', sprintf('fFolderId=%d', $this->oFolder->getId()))); $sFolderName = KTUtil::arrayGet($_REQUEST, 'foldername'); $aErrorOptions['defaultmessage'] = _kt("No folder name given"); $sFolderName = $this->oValidator->validateString($sFolderName, $aErrorOptions); $sFolderName = $this->oValidator->validateIllegalCharacters($sFolderName, $aErrorOptions); $sOldFolderName = $this->oFolder->getName(); if ($this->oFolder->getId() != 1) { $oParentFolder =& Folder::get($this->oFolder->getParentID()); if (PEAR::isError($oParentFolder)) { $this->errorRedirectToMain(_kt('Unable to retrieve parent folder.'), $aErrorOptions['redirect_to'][1]); exit(0); } if (KTFolderUtil::exists($oParentFolder, $sFolderName)) { $this->errorRedirectToMain(_kt('A folder with that name already exists.'), $aErrorOptions['redirect_to'][1]); exit(0); } } $res = KTFolderUtil::rename($this->oFolder, $sFolderName, $this->oUser); if (PEAR::isError($res)) { $_SESSION['KTErrorMessage'][] = $res->getMessage(); redirect(KTBrowseUtil::getUrlForFolder($this->oFolder)); exit(0); } else { $_SESSION['KTInfoMessage'][] = sprintf(_kt('Folder "%s" renamed to "%s".'), $sOldFolderName, $sFolderName); } $this->commitTransaction(); redirect(KTBrowseUtil::getUrlForFolder($this->oFolder)); exit(0); }
function do_update() { $sTable = KTUtil::getTableName('plugins'); $aIds = (array) KTUtil::arrayGet($_REQUEST, 'pluginids'); // Update disabled plugins $sIds = implode(',', $aIds); $sQuery = "UPDATE {$sTable} SET disabled = 1 WHERE id NOT IN ({$sIds})"; DBUtil::runQuery(array($sQuery)); // Select disabled plugins that have been enabled $sQuery = "SELECT * FROM {$sTable} WHERE disabled = 1 AND id IN ({$sIds})"; $res = DBUtil::getResultArray($sQuery); if (!PEAR::isError($res)) { // Enable the disabled plugins $sQuery = "UPDATE {$sTable} SET disabled = 0 WHERE id IN ({$sIds})"; DBUtil::runQuery(array($sQuery)); // run setup for each plugin $aEnabled = array(); if (!empty($res)) { foreach ($res as $item) { $aEnabled[] = $item['id']; } $sEnabled = implode(',', $aEnabled); $sQuery = "SELECT h.classname, h.pathname FROM {$sTable} p\n INNER JOIN plugin_helper h ON (p.namespace = h.plugin)\n WHERE classtype = 'plugin' AND p.id IN ({$sEnabled})"; $res = DBUtil::getResultArray($sQuery); if (!PEAR::isError($res)) { foreach ($res as $item) { $classname = $item['classname']; $path = $item['pathname']; if (!empty($path)) { require_once $path; } $oPlugin = new $classname($path); $oPlugin->setup(); } } } } KTPluginEntity::clearAllCaches(); // FIXME!!! Plugin manager needs to be updated to deal with this situation. This code should be in the plugin. //enabling or disabling Tag fieldset depending on whether tag cloud plugin is enabled or disabled. //Get tag cloud object $oTagClouPlugin = KTPluginEntity::getByNamespace('ktcore.tagcloud.plugin'); if (!PEAR::isError($oTagClouPlugin) && !is_a($oTagClouPlugin, 'KTEntityNoObjects') && !is_null($oTagClouPlugin)) { if ($oTagClouPlugin->getDisabled() == '1') { //disable tag fieldset $aFV = array('disabled' => true); $aWFV = array('namespace' => 'tagcloud'); $res = DBUtil::whereUpdate('fieldsets', $aFV, $aWFV); } else { //enable tag fieldset $aFV = array('disabled' => false); $aWFV = array('namespace' => 'tagcloud'); $res = DBUtil::whereUpdate('fieldsets', $aFV, $aWFV); } } // we reregister the plugins to ensure they are in the correct order KTPluginUtil::registerPlugins(); $this->successRedirectToMain(_kt('Plugins updated')); }
function &retrieveList($sCode) { $sList = KTUtil::arrayGet($_SESSION['ktentitylists'], $sCode, False); if ($sList === False) { return PEAR::raiseError(_kt('No such KTEntityList')); } $oList = unserialize($sList); return $oList; }
function renderDocumentLink($aDataRow) { $aOptions = $this->getOptions(); $fParentDocId = KTUtil::arrayGet(KTUtil::arrayGet($aOptions, 'qs_params', array()), 'fDocumentId', False); if ((int) $aDataRow["document"]->getId() === (int) $fParentDocId) { return htmlentities($aDataRow["document"]->getName(), ENT_QUOTES, 'UTF-8') . ' <span class="descriptiveText">(' . _kt('you cannot link to the source document') . ')'; } else { return parent::renderDocumentLink($aDataRow); } }
function &getValidatorByNamespace($sNamespace) { $aInfo = KTUtil::arrayGet($this->validators, $sNamespace); if (empty($aInfo)) { return PEAR::raiseError(sprintf(_kt('No such validator: %s'), $sNamespace)); } if (!empty($aInfo['file'])) { require_once $aInfo['file']; } return new $aInfo['class'](); }
function takeover() { $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin('password.reset.plugin'); $dispatcherURL = $oPlugin->getURLPath('loginResetDispatcher.php'); $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); $url = KTUtil::kt_url() . $dispatcherURL; $url .= !empty($redirect) ? '?redirect=' . $redirect : ''; redirect($url); exit(0); }
function do_main() { $clear_all = KTUtil::arrayGet($_REQUEST, 'clearAll'); if ($clear_all) { return $this->clearAll(); } // get the notification-handler, instantiate it, call resolveNotification. $oHandler =& $this->notification->getHandler(); $oHandler->notification =& $this->notification; $oHandler->subDispatch($this); exit(0); }
function KTBulkImportManager($oFolder, $oStorage, $oUser, $aOptions = null) { $this->oFolder =& $oFolder; $this->oStorage =& $oStorage; $this->oUser =& $oUser; $this->aOptions =& $aOptions; if (is_null($aOptions)) { $aOptions = array(); } $this->aMetadata = KTUtil::arrayGet($aOptions, 'metadata', array()); $this->oDocumentType = KTUtil::arrayGet($aOptions, 'documenttype', null); // DocUtil::_add will do the right thing. }
function getPage($sPath) { $aInfo = KTUtil::arrayGet($this->aResources, $sPath); if (empty($aInfo)) { return null; } $sClassName = $aInfo[1]; $sFilename = $aInfo[2]; if ($sFilename) { require_once $sFilename; } return new $sClassName(); }
function takeover() { $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin('password.reset.plugin'); $dispatcherURL = $oPlugin->getURLPath('loginResetDispatcher.php'); $queryString = $_SERVER['QUERY_STRING']; $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); $redirect = urlencode($redirect); $url = KTUtil::kt_url() . $dispatcherURL; $url .= !empty($queryString) ? '?' . $queryString : ''; redirect($url); exit(0); }
function render() { $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate("ktcore/search2/search_portlet"); $iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', 1); $iDocumentId = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); if (!$iFolderId && !$iDocumentId) { return null; } $savedSearches = SearchHelper::getSavedSearches($_SESSION['userID']); $aTemplateData = array('context' => $this, 'folder_id' => $iFolderId, 'document_id' => $iDocumentId, 'savedSearches' => $savedSearches); return $oTemplate->render($aTemplateData); }
function check() { $res = parent::check(); if (empty($res)) { return $res; } $postExpected = KTUtil::arrayGet($_REQUEST, "postExpected"); $postReceived = KTUtil::arrayGet($_REQUEST, "postReceived"); if (!empty($postExpected)) { $aErrorOptions = array('redirect_to' => array('main', sprintf('fFolderId=%d', $this->oFolder->getId())), 'message' => _kt('Upload larger than maximum POST size (post_max_size variable in .htaccess or php.ini)')); $this->oValidator->notEmpty($postReceived, $aErrorOptions); } return true; }
function do_viewCategory() { // are we categorised, or not? $category = KTUtil::arrayGet($_REQUEST, 'fCategory', $this->category); $oRegistry =& KTAdminNavigationRegistry::getSingleton(); $aCategory = $oRegistry->getCategory($category); $aItems = $oRegistry->getItemsForCategory($category); asort($aItems); $this->aBreadcrumbs[] = array('name' => $aCategory['title'], 'url' => KTUtil::ktLink('admin.php', $category)); $this->oPage->title = _kt('DMS Administration') . ': ' . $aCategory['title']; $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('kt3/admin_items'); $aTemplateData = array('context' => $this, 'category' => $aCategory, 'items' => $aItems, 'baseurl' => $_SERVER['PHP_SELF']); return $oTemplate->render($aTemplateData); }
function do_getNewCriteria() { $criteriaType = KTUtil::arrayGet($_REQUEST, 'type'); if (empty($criteriaType)) { return 'AJAX Error: no criteria type specified.'; } $oCriteriaRegistry =& KTCriteriaRegistry::getSingleton(); $critObj = $oCriteriaRegistry->getCriterion($criteriaType); if (PEAR::isError($critObj)) { return 'AJAX Error: failed to initialise critiria of type "' . $type . '".'; } // NBM: there appears to be no reason to take $aRequest into searchWidget... $noRequest = array(); return $critObj->searchWidget($noRequest); }
function KTBaseWidget($sLabel, $sDescription, $sName, $value, &$oPage, $bRequired = false, $sId = null, $aErrors = null, $aOptions = null) { $this->sLabel = $sLabel; $this->sDescription = $sDescription; $this->sName = $sName; $this->value = $value; $this->oPage =& $oPage; $this->bRequired = $bRequired; $this->sId = $sId; $this->aOptions = $aOptions; $this->aErrors = $aErrors; if (is_null($this->aOptions)) { $this->aOptions = array(); } // default to being a bit bigger. $this->aOptions['width'] = KTUtil::arrayGet($this->aOptions, 'width', '45'); }
function do_cleanup() { $folder = KTUtil::arrayGet($_REQUEST, 'folder'); if (is_null($folder)) { exit(redirect(generateControllerLink('dashboard'))); } $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin('ktcore.housekeeper.plugin'); // we must avoid doing anything to the documents folder at all costs! $folder = HouseKeeper::getDirectory($folder); if (is_null($folder) || !$folder['canClean']) { exit(redirect(generateControllerLink('dashboard'))); } HouseKeeper::cleanDirectory($folder['folder'], $folder['pattern']); HouseKeeper::getKTUsageStats(); exit(redirect(generateControllerLink('dashboard'))); }
function configure($aOptions) { $this->sInputVariable = KTUtil::arrayGet($aOptions, 'name', KTUtil::arrayGet($aOptions, 'test')); if (empty($this->sInputVariable)) { return PEAR::raiseError(_kt("You must specify a variable name")); } $this->sBasename = KTUtil::arrayGet($aOptions, 'basename', $this->sInputVariable); $this->sOutputVariable = KTUtil::arrayGet($aOptions, 'output'); if (empty($this->sOutputVariable)) { if (!KTUtil::arrayGet($aOptions, 'no_output', false)) { $this->sOutputVariable = $this->sInputVariable; } } $this->bProduceOutput = !empty($this->sOutputVariable); $this->bRequired = KTUtil::arrayGet($aOptions, 'required', false, false); $this->aOptions = $aOptions; }
function &getPlugin($sNamespace) { if (array_key_exists($sNamespace, $this->_aPlugins)) { return $this->_aPlugins[$sNamespace]; } $aDetails = KTUtil::arrayGet($this->_aPluginDetails, $sNamespace); if (empty($aDetails)) { return null; } $sFilename = KTUtil::isAbsolutePath($aDetails[2]) ? $aDetails[2] : KT_DIR . '/' . $aDetails[2]; if (!empty($sFilename)) { require_once $sFilename; } $sClassName = $aDetails[0]; $oPlugin = new $sClassName($sFilename); $this->_aPlugins[$sNamespace] =& $oPlugin; return $oPlugin; }
function getViewer($oError) { $sErrorClass = strtolower(get_class($oError)); // Try for direct hit first $sClass = $sErrorClass; $sHandlerClass = KTUtil::arrayGet($this->aViewers, $sClass); if ($sHandlerClass) { return new $sHandlerClass($oError); } // PHP 4.0.5 added get_parent_class - this offers us the // best/first match if (function_exists('get_parent_class')) { while ($sClass = get_parent_class($sClass)) { $sHandlerClass = KTUtil::arrayGet($this->aViewers, $sClass); if ($sHandlerClass) { return new $sHandlerClass($oError); } } } // Now try things the hard way - no best/first match (ick!) // Reverse, since hopefully the best/first match will be added // after the other matches. foreach (array_reverse($this->aViewers) as $sHandlerClass => $sClass) { if (is_a($oError, $sClass)) { return new $sHandlerClass($oError); } } // Just in case we have an unhandled i18n-friendly error if (method_exists($oError, 'geti18nMessage')) { return new KTStringErrorViewer($oError->getMessage()); } // PEAR_Error should have caught things above, but just in case, // check if getMessage is there, and use that: if (method_exists($oError, 'getMessage')) { return new KTStringErrorViewer($oError->getMessage()); } // Check if we are a string if (is_string($oError)) { return new KTStringErrorViewer($oError); } // Give up. return new KTStringErrorViewer(_kt("Unknown error")); }
/** * assign the class variables * @return * @param $sLabel Object * @param $sDescription Object * @param $sName Object * @param $value Object * @param $oPage Object * @param $bRequired Object[optional] * @param $sId Object[optional] * @param $aErrors Object[optional] * @param $aOptions Object[optional] * * iNET Process */ function InetMultiselectWidget($sLabel, $sDescription, $sName, $value, &$oPage, $bRequired = false, $sId = null, $aErrors = null, $aOptions = null) { $this->sLabel = $sLabel; $this->sDescription = $sDescription; $this->sName = $sName; $this->value = $value; $this->oPage =& $oPage; $this->bRequired = $bRequired; $this->sId = $sId; $this->aOptions = $aOptions; $this->aErrors = $aErrors; if (is_null($this->aOptions)) { $this->aOptions = array(); } // default to being a bit bigger. $this->aOptions['width'] = KTUtil::arrayGet($this->aOptions, 'width', '45'); if ($this->aOptions['lookup_type'] == "multiwithcheckboxes") { $this->sTemplate = "multiselect/simple_selection"; } }
function &getAuthenticationProvider($nsname) { $oProvider =& KTUtil::arrayGet($this->_aAuthenticationProviders, $nsname); if ($oProvider) { return $oProvider; } $aInfo = $this->_aAuthenticationProvidersInfo[$nsname]; $sClass = $aInfo[1]; $sPath = $aInfo[3]; if ($sPath) { $sPath = KTUtil::isAbsolutePath($sPath) ? $sPath : KT_DIR . '/' . $sPath; include_once $sPath; } if (!class_exists($sClass)) { return PEAR::raiseError(_kt('Authentication provider class does not exist. ' . $sClass)); } $oProvider = new $sClass(); $this->_aAuthenticationProviders[$nsname] =& $oProvider; return $oProvider; }
function do_viewCategory() { // are we categorised, or not? $category = KTUtil::arrayGet($_REQUEST, 'fCategory', $this->category); //Removing bad documents/fieldmanagement links from the Document Metadata and Workflow Configuration page. if ($category == 'documents') { $oPage =& $GLOBALS['main']; $aJavascript[] = 'thirdpartyjs/jquery/jquery-1.3.2.js'; $oPage->requireJSResources($aJavascript); $jscript .= "<script src='resources/js/kt_hideadminlink.js' type='text/javascript'></script>"; } $oRegistry =& KTAdminNavigationRegistry::getSingleton(); $aCategory = $oRegistry->getCategory($category); $aItems = $oRegistry->getItemsForCategory($category); asort($aItems); $this->aBreadcrumbs[] = array('name' => $aCategory['title'], 'url' => KTUtil::ktLink('admin.php', $category)); $this->oPage->title = _kt('Administration') . ': ' . $aCategory['title']; $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('kt3/admin_items'); $aTemplateData = array('context' => $this, 'category' => $aCategory, 'items' => $aItems, 'baseurl' => $_SERVER['PHP_SELF'], 'jscript' => $jscript); return $oTemplate->render($aTemplateData); }
function getPortletsForPage($aBreadcrumbs) { $aPortlets = array(); foreach ($aBreadcrumbs as $aBreadcrumb) { $action = KTUtil::arrayGet($aBreadcrumb, 'action'); if (empty($action)) { continue; } $aThisPortlets = $this->getPortlet($action); if (empty($aThisPortlets)) { continue; } foreach ($aThisPortlets as $aPortlet) { $aPortlets[] = $aPortlet; } } $aReturn = array(); $aDone = array(); foreach ($aPortlets as $aPortlet) { if (in_array($aPortlet, $aDone)) { continue; } $aDone[] = $aPortlet; $sPortletClass = $aPortlet[0]; $sPortletFile = $aPortlet[1]; $sPluginName = $aPortlet[3]; $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin($sPluginName); if (file_exists($sPortletFile)) { require_once $sPortletFile; } $oPortlet = new $sPortletClass(); $oPortlet->setPlugin($oPlugin); array_push($aReturn, $oPortlet); } return $aReturn; }
function &getCriterion($sNamespace) { if (!$this->_bGenericRegistered) { $this->_buildGenericCriteria(); } if (array_key_exists($sNamespace, $this->_aCriteria)) { return $this->_aCriteria[$sNamespace]; } $aDetails = KTUtil::arrayGet($this->_aCriteriaDetails, $sNamespace); if (empty($aDetails)) { return null; } $sFilename = $aDetails[2]; if (!empty($sFilename)) { require_once $sFilename; } $sClassName = $aDetails[0]; $oCriterion = new $sClassName(); if (is_array($aDetails[3])) { call_user_func_array(array(&$oCriterion, 'initialize'), $aDetails[3]); } $this->_aCriteria[$sNamespace] =& $oCriterion; return $oCriterion; }