/**
  * @see Event::SEARCH_TYPES_PRESENTERS
  */
 public function search_types_presenters($params)
 {
     if ($this->isAllowed() && !$params['project']->isError()) {
         $lists = array();
         $dao = new MailingListDao();
         foreach ($dao->searchByProject($params['project']->getId()) as $row) {
             $lists[] = array('url' => $this->getSearchUrl($params['project']->getId(), $row['group_list_id'], $params['words']), 'title' => $row['list_name'], 'extra-parameters' => false);
         }
         if (!$lists) {
             return;
         }
         $params['project_presenters'][] = new Search_SearchTypePresenter(self::SEARCH_TYPE, $GLOBALS['Language']->getText('plugin_forumml', 'search_list'), $lists);
     }
 }
 /** 
  * Process stored event
  */
 function process()
 {
     /* @var $backendSystem BackendSystem */
     $backendSystem = Backend::instance('System');
     $backendAliases = Backend::instance('Aliases');
     $backendSVN = Backend::instance('SVN');
     $backendCVS = Backend::instance('CVS');
     $backendMailingList = Backend::instance('MailingList');
     //TODO:
     // User: unix_status vs status??
     // Private project: if codeaxadm is not member of the project: check access to SVN (incl. ViewVC), CVS, Web...
     // CVS Watch?
     // TODO: log event in syslog?
     // TODO: check that there is no pending event??? What about lower priority events??
     // First, force NSCD refresh to be sure that uid/gid will exist on next
     // actions
     $backendSystem->flushNscdAndFsCache();
     // remove deleted releases and released files
     if (!$backendSystem->cleanupFRS()) {
         $this->error("An error occured while moving FRS files");
         return false;
     }
     // Force global updates: aliases, CVS roots, SVN roots
     $backendAliases->setNeedUpdateMailAliases();
     // Remove temporary files generated by aborted CVS commits
     $backendCVS->cleanup();
     // Check mailing lists
     // (re-)create missing ML
     $mailinglistdao = new MailingListDao();
     $dar = $mailinglistdao->searchAllActiveML();
     foreach ($dar as $row) {
         $list = new MailingList($row);
         if (!$backendMailingList->listExists($list)) {
             $backendMailingList->createList($list->getId());
         }
         // TODO what about lists that changed their setting (description, public/private) ?
     }
     $project_manager = ProjectManager::instance();
     foreach ($project_manager->getProjectsByStatus(Project::STATUS_ACTIVE) as $project) {
         // Recreate project directories if they were deleted
         if (!$backendSystem->createProjectHome($project->getId())) {
             $this->error("Could not create project home");
             return false;
         }
         if ($project->usesCVS()) {
             $backendCVS->setCVSRootListNeedUpdate();
             if (!$backendCVS->repositoryExists($project)) {
                 if (!$backendCVS->createProjectCVS($project->getId())) {
                     $this->error("Could not create/initialize project CVS repository");
                     return false;
                 }
                 $backendCVS->setCVSPrivacy($project, !$project->isPublic() || $project->isCVSPrivate());
             }
             $backendCVS->createLockDirIfMissing($project);
             // check post-commit hooks
             if (!$backendCVS->updatePostCommit($project)) {
                 return false;
             }
             $backendCVS->updateCVSwriters($project->getID());
             $backendCVS->updateCVSWatchMode($project->getID());
             // Check ownership/mode/access rights
             $backendCVS->checkCVSMode($project);
         }
         if ($project->usesSVN()) {
             if (!$backendSVN->repositoryExists($project)) {
                 if (!$backendSVN->createProjectSVN($project->getId())) {
                     $this->error("Could not create/initialize project SVN repository");
                     return false;
                 }
                 $backendSVN->updateSVNAccess($project->getId());
                 $backendSVN->setSVNPrivacy($project, !$project->isPublic() || $project->isSVNPrivate());
                 $backendSVN->setSVNApacheConfNeedUpdate();
             } else {
                 $backendSVN->checkSVNAccessPresence($project->getId());
             }
             $backendSVN->updateHooks($project);
             // Check ownership/mode/access rights
             $backendSVN->checkSVNMode($project);
         }
     }
     $logger = new BackendLogger();
     if (is_file($logger->getFilepath())) {
         $backendSystem->changeOwnerGroupMode($logger->getFilepath(), ForgeConfig::get('sys_http_user'), ForgeConfig::get('sys_http_user'), 0640);
     }
     // If no codendi_svnroot.conf file, force recreate.
     if (!is_file($GLOBALS['svn_root_file'])) {
         $backendSVN->setSVNApacheConfNeedUpdate();
     }
     try {
         EventManager::instance()->processEvent(Event::PROCCESS_SYSTEM_CHECK, array('logger' => $logger));
     } catch (Exception $exception) {
         $this->error($exception->getMessage());
         return false;
     }
     $this->expireRestTokens(UserManager::instance());
     $this->done();
     return true;
 }
 /** 
  * Process stored event
  */
 function process()
 {
     $backendSystem = Backend::instance('System');
     $backendAliases = Backend::instance('Aliases');
     $backendSVN = Backend::instance('SVN');
     $backendCVS = Backend::instance('CVS');
     $backendMailingList = Backend::instance('MailingList');
     //TODO:
     // User: unix_status vs status??
     // Private project: if codeaxadm is not member of the project: check access to SVN (incl. ViewVC), CVS, Web...
     // CVS Watch?
     // TODO: log event in syslog?
     // TODO: check that there is no pending event??? What about lower priority events??
     // First, force NSCD refresh to be sure that uid/gid will exist on next
     // actions
     $backendSystem->flushNscdAndFsCache();
     // remove deleted releases and released files
     if (!$backendSystem->cleanupFRS()) {
         $this->error("An error occured while moving FRS files");
         return false;
     }
     // Force global updates: aliases, CVS roots, SVN roots
     $backendAliases->setNeedUpdateMailAliases();
     // Remove temporary files generated by aborted CVS commits
     $backendCVS->cleanup();
     // Check mailing lists
     // (re-)create missing ML
     $mailinglistdao = new MailingListDao();
     $dar = $mailinglistdao->searchAllActiveML();
     foreach ($dar as $row) {
         $list = new MailingList($row);
         if (!$backendMailingList->listExists($list)) {
             $backendMailingList->createList($list->getId());
         }
         // TODO what about lists that changed their setting (description, public/private) ?
     }
     // Check users
     // (re-)create missing home directories
     $user_manager = UserManager::instance();
     $userdao = new UserDao();
     $allowed_statuses = array(User::STATUS_ACTIVE, User::STATUS_RESTRICTED);
     $dar = $userdao->searchByStatus($allowed_statuses);
     foreach ($dar as $row) {
         $user = $user_manager->getUserInstanceFromRow($row);
         if ($user) {
             $backendSystem->userHomeSanityCheck($user);
         }
     }
     // dump SSH authorized_keys into all users homedirs
     $backendSystem->dumpSSHKeys();
     $project_manager = ProjectManager::instance();
     foreach ($project_manager->getProjectsByStatus(Project::STATUS_ACTIVE) as $project) {
         // Recreate project directories if they were deleted
         if (!$backendSystem->createProjectHome($project->getId())) {
             $this->error("Could not create project home");
             return false;
         }
         if ($project->usesCVS()) {
             $backendCVS->setCVSRootListNeedUpdate();
             if (!$backendCVS->repositoryExists($project)) {
                 if (!$backendCVS->createProjectCVS($project->getId())) {
                     $this->error("Could not create/initialize project CVS repository");
                     return false;
                 }
                 $backendCVS->setCVSPrivacy($project, !$project->isPublic() || $project->isCVSPrivate());
             }
             $backendCVS->createLockDirIfMissing($project);
             // check post-commit hooks
             if (!$backendCVS->updatePostCommit($project)) {
                 return false;
             }
             $backendCVS->updateCVSwriters($project->getID());
             $backendCVS->updateCVSWatchMode($project->getID());
             // Check ownership/mode/access rights
             $backendCVS->checkCVSMode($project);
         }
         if ($project->usesSVN()) {
             if (!$backendSVN->repositoryExists($project)) {
                 if (!$backendSVN->createProjectSVN($project->getId())) {
                     $this->error("Could not create/initialize project SVN repository");
                     return false;
                 }
                 $backendSVN->updateSVNAccess($project->getId());
                 $backendSVN->setSVNPrivacy($project, !$project->isPublic() || $project->isSVNPrivate());
                 $backendSVN->setSVNApacheConfNeedUpdate();
             } else {
                 $backendSVN->checkSVNAccessPresence($project->getId());
             }
             $backendSVN->updateHooks($project);
             // Check ownership/mode/access rights
             $backendSVN->checkSVNMode($project);
         }
     }
     // If no codendi_svnroot.conf file, force recreate.
     if (!is_file($GLOBALS['svn_root_file'])) {
         $backendSVN->setSVNApacheConfNeedUpdate();
     }
     $this->done();
     return true;
 }