Esempio n. 1
0
 function do_updateFeed()
 {
     $iFeedId = KTUtil::arrayGet($_REQUEST, 'feed_id');
     $aErrorOptions = array('redirect_to' => array('editFeed', sprintf('feed_id=%s', $iFeedId)));
     $sTitle = $this->oValidator->validateString(KTUtil::arrayGet($_REQUEST, 'title'), KTUtil::meldOptions($aErrorOptions, array('message' => _kt("You must provide a title"))));
     $sUrl = KTUtil::arrayGet($_REQUEST, 'url');
     $res = KTrss::updateFeed($iFeedId, $sTitle, $sUrl);
     if (PEAR::isError($res)) {
         $this->errorRedirectToMain(sprintf(_kt('Unable to delete item: %s'), $res->getMessage()));
     } else {
         $this->successRedirectToMain(sprintf(_kt('Updated news item.')));
     }
 }
 function &validatePermissionByName($iId, $aOptions = null)
 {
     $aOptions = KTUtil::meldOptions($aOptions, array('method' => 'getByName'));
     return $this->validateEntity('KTPermission', $iId, $aOptions);
 }
Esempio n. 3
0
 function do_createUser()
 {
     // FIXME generate and pass the error stack to adduser.
     $old_search = KTUtil::arrayGet($_REQUEST, 'old_search');
     $aErrorOptions = array('redirect_to' => array('addUser', sprintf('old_search=%s&do_search=1', $old_search)));
     $aInputKeys = array('newusername', 'name', 'email_address', 'email_notifications', 'mobile_number', 'max_sessions');
     $this->persistParams($aInputKeys);
     $username = $this->oValidator->validateString(KTUtil::arrayGet($_REQUEST, 'newusername'), KTUtil::meldOptions($aErrorOptions, array('message' => _kt("You must specify a new username."))));
     $name = $this->oValidator->validateString(KTUtil::arrayGet($_REQUEST, 'name'), KTUtil::meldOptions($aErrorOptions, array('message' => _kt("You must provide a name"))));
     $email_address = KTUtil::arrayGet($_REQUEST, 'email_address');
     $email_notifications = KTUtil::arrayGet($_REQUEST, 'email_notifications', false);
     if ($email_notifications !== false) {
         $email_notifications = true;
     }
     $mobile_number = KTUtil::arrayGet($_REQUEST, 'mobile_number');
     $max_sessions = $this->oValidator->validateInteger(KTUtil::arrayGet($_REQUEST, 'max_sessions'), KTUtil::meldOptions($aErrorOptions, array('message' => _kt("You must specify a numeric value for maximum sessions."))));
     $password = KTUtil::arrayGet($_REQUEST, 'new_password');
     $confirm_password = KTUtil::arrayGet($_REQUEST, 'confirm_password');
     $KTConfig =& KTConfig::getSingleton();
     $minLength = (int) $KTConfig->get('user_prefs/passwordLength', 6);
     $restrictAdmin = (bool) $KTConfig->get('user_prefs/restrictAdminPasswords', false);
     if ($restrictAdmin && strlen($password) < $minLength) {
         $this->errorRedirectTo('addUser', sprintf(_kt("The password must be at least %d characters long."), $minLength), sprintf("old_search=%s&do_search=1", $old_search));
     } else {
         if (empty($password)) {
             $this->errorRedirectTo('addUser', _kt("You must specify a password for the user."), sprintf("old_search=%s&do_search=1", $old_search));
         } else {
             if ($password !== $confirm_password) {
                 $this->errorRedirectTo('addUser', _kt("The passwords you specified do not match."), sprintf("old_search=%s&do_search=1", $old_search));
             }
         }
     }
     if (preg_match('/[\\!\\$\\#\\%\\^\\&\\*]/', $username)) {
         $this->errorRedirectTo('addUser', _kt("You have entered an invalid character in your username."));
     }
     if (preg_match('/[\\!\\$\\#\\%\\^\\&\\*]/', $name)) {
         $this->errorRedirectTo('addUser', _kt("You have entered an invalid character in your name."));
     }
     $dupUser =& User::getByUserName($username);
     if (!PEAR::isError($dupUser)) {
         $this->errorRedirectTo('addUser', _kt("A user with that username already exists"));
     }
     $oUser =& User::createFromArray(array("sUsername" => $username, "sName" => $name, "sPassword" => md5($password), "iQuotaMax" => 0, "iQuotaCurrent" => 0, "sEmail" => $email_address, "bEmailNotification" => $email_notifications, "sMobile" => $mobile_number, "bSmsNotification" => false, "iMaxSessions" => $max_sessions));
     if (PEAR::isError($oUser) || $oUser == false) {
         $this->errorRedirectToMain(_kt("failed to create user."), sprintf("old_search=%s&do_search=1", $old_search));
         exit(0);
     }
     $this->successRedirectToMain(_kt('Created new user') . ': ' . $oUser->getUsername(), 'name=' . $oUser->getUsername(), sprintf("old_search=%s&do_search=1", $old_search));
 }
 function &getByTransition($oTransition, $aOptions = null)
 {
     $iTransitionId = KTUtil::getId($oTransition);
     $aOptions = KTUtil::meldOptions($aOptions, array('multi' => true));
     return KTEntityUtil::getByDict('KTWorkflowTriggerInstance', array('workflow_transition_id' => $iTransitionId), $aOptions);
 }
Esempio n. 5
0
 function &getGenericFieldsets($aOptions = null)
 {
     $aOptions = KTUtil::meldOptions($aOptions, array('multi' => true));
     return KTEntityUtil::getByDict('KTFieldset', array('is_generic' => true, 'disabled' => false), $aOptions);
 }
Esempio n. 6
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;
 }
Esempio n. 7
0
 function get_graph($oWorkflow)
 {
     $fontsize = 11.0;
     $fontname = "Times-Roman";
     $opts = array('fontsize' => $fontsize, 'fontname' => $fontname);
     $graph = new Image_GraphViz(true, $opts);
     $graph->dotCommand = $this->dotCommand;
     // we need all states & transitions
     // FIXME do we want guards?
     // we want to enable link-editing, and indicate that transitions "converge"
     // so we use a temporary "node" for transitions
     // we also use a "fake" URL which we catch later
     // so we can give good "alt" tags.
     $states = KTWorkflowState::getByWorkflow($oWorkflow);
     $transitions = KTWorkflowTransition::getByWorkflow($oWorkflow);
     $this->state_names = array();
     $this->transition_names = array();
     $state_opts = array('shape' => 'box', 'fontsize' => $fontsize, 'fontname' => $fontname);
     $transition_opts = array('shape' => 'box', 'color' => '#ffffff', 'fontsize' => $fontsize, 'fontname' => $fontname);
     $finaltransition_opts = array('color' => '#333333');
     $sourcetransition_opts = array('color' => '#999999');
     // to make this a little more useful, we want to cascade our output from
     // start to end states - this will tend to give a better output.
     //
     // to do this, we need to order our nodes in terms of "nearness" to the
     // initial node.
     $processing_nodes = array();
     $sorted_ids = array();
     $availability = array();
     $sources = array();
     $destinations = array();
     $states = KTUtil::keyArray($states);
     $transitions = KTUtil::keyArray($transitions);
     foreach ($transitions as $tid => $oTransition) {
         $sources[$tid] = KTWorkflowAdminUtil::getSourceStates($oTransition, array('ids' => true));
         $destinations[$tid] = $oTransition->getTargetStateId();
         foreach ($sources[$tid] as $sourcestateid) {
             $av = (array) KTUtil::arrayGet($availability, $sourcestateid, array());
             $av[] = $tid;
             $availability[$sourcestateid] = $av;
         }
     }
     //var_dump($sources); exit(0);
     //var_dump($availability); exit(0);
     $processing = array($oWorkflow->getStartStateId());
     while (!empty($processing)) {
         $active = array_shift($processing);
         if (!$processing_nodes[$active]) {
             // mark that we've seen this node
             $processing_nodes[$active] = true;
             $sorted[] = $active;
             // now add all reachable nodes to the *end* of the queue.
             foreach ((array) $availability[$active] as $tid) {
                 $next = $destinations[$tid];
                 if (!$processing_nodes[$next]) {
                     $processing[] = $next;
                 }
             }
         }
         //var_dump($processing);
     }
     //var_dump($sorted); exit(0);
     foreach ($sorted as $sid) {
         $oState = $states[$sid];
         $this->state_names[$oState->getId()] = $oState->getHumanName();
         $local_opts = array('URL' => sprintf("s%d", $oState->getId()), 'label' => $oState->getHumanName(), 'color' => '#666666');
         if ($oState->getId() == $oWorkflow->getStartStateId()) {
             $local_opts['color'] = '#000000';
             $local_opts['style'] = 'filled';
             $local_opts['fillcolor'] = '#cccccc';
         }
         $graph->addNode(sprintf('state%d', $oState->getId()), KTUtil::meldOptions($state_opts, $local_opts));
     }
     foreach ($transitions as $tid => $oTransition) {
         $name = sprintf('transition%d', $tid);
         $this->transition_names[$oTransition->getId()] = $oTransition->getHumanName();
         // we "cheat" and use
         $graph->addNode($name, KTUtil::meldOptions($transition_opts, array('URL' => sprintf("t%d", $tid), 'label' => $oTransition->getHumanName())));
         $dest = sprintf("state%d", $oTransition->getTargetStateId());
         $graph->addEdge(array($name => $dest), $finaltransition_opts);
         foreach ($sources[$tid] as $source_id) {
             $source_name = sprintf("state%d", $source_id);
             $graph->addEdge(array($source_name => $name), $sourcetransition_opts);
         }
     }
     // some simple analysis
     $errors = array();
     $info = array();
     $sourceless_transitions = array();
     foreach ($transitions as $tid => $oTransition) {
         if (empty($sources[$tid])) {
             $sourceless_transitions[] = $oTransition->getHumanName();
         }
     }
     if (!empty($sourceless_transitions)) {
         $errors[] = sprintf(_kt("Some transitions have no source states: %s"), implode(', ', $sourceless_transitions));
     }
     $unlinked_states = array();
     foreach ($states as $sid => $oState) {
         if (!$processing_nodes[$sid]) {
             // quick sanity check
             $unlinked_states[] = $oState->getHumanName();
         }
     }
     if (!empty($unlinked_states)) {
         $errors[] = sprintf(_kt("Some states cannot be reached from the initial state (<strong>%s</strong>): %s"), $states[$oWorkflow->getStartStateId()]->getHumanName(), implode(', ', $unlinked_states));
     }
     $data = array('graph' => $graph, 'errors' => $errors, 'info' => $info);
     return $data;
 }
Esempio n. 8
0
 function getLastLogins($aOptions = null)
 {
     $oUser = KTUtil::arrayGet($aOptions, 'user');
     if ($oUser) {
         $iUserId = KTUtil::getId($oUser);
     } else {
         $iUserId = null;
     }
     $aOptions = KTUtil::meldOptions(array('limit' => 5, 'orderby' => 'datetime DESC'), $aOptions);
     $sTable = KTUserHistory::_table();
     if ($iUserId) {
         return KTEntityUtil::getByDict($sTable, array('user_id' => $iUserId), $aOptions);
     } else {
         return KTEntityUtil::getList2('KTUserHistory', null, $aOptions);
     }
 }
 function &getByDocument($oDocument, $aOptions = null)
 {
     $aOptions = KTUtil::meldOptions(array('multi' => true), $aOptions);
     $iDocumentId = KTUtil::getId($oDocument);
     return KTEntityUtil::getByDict('KTDocumentContentVersion', array('document_id' => $iDocumentId), $aOptions);
 }
 function &getByUser($oFolder, $aOptions = null)
 {
     $aOptions = KTUtil::meldOptions(array('multi' => true), $aOptions);
     $iFolderId = KTUtil::getId($oFolder);
     return KTEntityUtil::getByDict('KTFolderTransaction', array('folder_id' => $iFolderId), $aOptions);
 }