private function doCreate()
 {
     $data = $this->creation_request->getProjectValues();
     require_once 'www/project/create_project.php';
     $group_id = create_project($data);
     return $this->project_manager->getProject($group_id);
 }
 /**
  * Execute action
  * 
  * @see src/common/system_event/SystemEvent::process()
  */
 public function process()
 {
     $user_ids = $this->getParametersAsArray();
     $project_ids = array();
     // Get all projects the user is member of (project member or user group member)
     $um = $this->getUserManager();
     foreach ($user_ids as $user_id) {
         $user = $um->getUserById($user_id);
         if ($user && ($user->isActive() || $user->isRestricted())) {
             $prjs = $user->getAllProjects();
             foreach ($prjs as $pid) {
                 if (!isset($project_ids[$pid])) {
                     $project_ids[$pid] = $pid;
                 }
             }
         }
     }
     // Update SVNAccessFile of projects
     $backendSVN = $this->getBackendSVN();
     foreach ($project_ids as $project_id) {
         $project = $this->project_manager->getProject($project_id);
         if ($project && $this->ldap_project_manager->hasSVNLDAPAuth($project->getId())) {
             $backendSVN->updateProjectSVNAccessFile($project);
         }
     }
     $this->done();
 }
 /**
  * Instanciates a new controller.
  *
  * TODO:
  *   - pass $request to actions (e.g. show).
  *
  * @param Codendi_Request           $request
  * @param PlanningFactory           $planning_factory
  * @param Planning_MilestoneFactory $milestone_factory
  */
 public function __construct(Codendi_Request $request, Planning_MilestoneFactory $milestone_factory, ProjectManager $project_manager, Planning_VirtualTopMilestonePaneFactory $top_milestone_pane_factory)
 {
     parent::__construct('agiledashboard', $request);
     $this->milestone_factory = $milestone_factory;
     $this->top_milestone_pane_factory = $top_milestone_pane_factory;
     $this->project = $project_manager->getProject($request->get('group_id'));
 }
 /**
  * Instanciates a new controller.
  *
  * TODO:
  *   - pass $request to actions (e.g. show).
  *
  * @param Codendi_Request           $request
  * @param PlanningFactory           $planning_factory
  * @param Planning_MilestoneFactory $milestone_factory
  */
 public function __construct(Codendi_Request $request, Planning_MilestoneFactory $milestone_factory, ProjectManager $project_manager, Planning_MilestonePaneFactory $pane_factory, AgileDashboard_Milestone_Pane_PanePresenterBuilderFactory $pane_presenter_builder_factory)
 {
     parent::__construct('agiledashboard', $request);
     $this->milestone_factory = $milestone_factory;
     $this->pane_factory = $pane_factory;
     $this->pane_presenter_builder_factory = $pane_presenter_builder_factory;
     $this->project = $project_manager->getProject($request->get('group_id'));
 }
예제 #5
0
 /**
  * Returns the Project that match the given string
  *
  * @param String $repository_path
  * @return Project
  * @throws Exception
  */
 public function getProjectFromRepositoryPath($repository_path)
 {
     $unix_group_name = substr($repository_path, strlen(ForgeConfig::get('svn_prefix')) + 1);
     $project = $this->project_manager->getProjectByUnixName($unix_group_name);
     if ($project && !$project->isError() && !$project->isDeleted()) {
         return $project;
     }
     throw new Exception('Invalid project');
 }
예제 #6
0
 public function __construct(array $hit, ProjectManager $project_manager)
 {
     $project = $project_manager->getProject($hit['fields']['group_id']);
     $this->item_title = $hit['fields']['title'];
     $this->url = '/plugins/docman/?group_id=' . $hit['fields']['group_id'] . '&id=' . $hit['fields']['id'] . '&action=details';
     $this->permissions = implode(', ', $hit['fields']['permissions']);
     $this->project_name = $project->getPublicName();
     $this->highlight = isset($hit['highlight']['file']) ? array_shift($hit['highlight']['file']) : '';
 }
예제 #7
0
 public function renameProject($old_name, $new_name)
 {
     $git_modifications = new Git_Gitolite_GitModifications();
     $project = $this->project_manager->getProjectByUnixName($new_name);
     $this->moveProjectFiles($old_name, $new_name, $git_modifications, $project);
     $this->modifyProjectConf($old_name, $new_name, $git_modifications, $project);
     $this->modifyIncludersConf($old_name, $new_name, $git_modifications, $project);
     return $git_modifications;
 }
예제 #8
0
 /**
  * @return Project[]
  */
 public function getProjectsAuthorizingTokens()
 {
     $projects = array();
     foreach ($this->dao->getProjectsAuthorizingTokens() as $row) {
         $project_id = $row['project_id'];
         $projects[] = $this->project_manager->getProject($project_id);
     }
     return $projects;
 }
 private function migrateProject($project_to_migrate)
 {
     $project = $this->project_manager->getProjectFromAutocompleter($project_to_migrate);
     if ($project && $this->wiki_migrator->canMigrate($project)) {
         $this->system_event_manager->createEvent(SystemEvent_PHPWIKI_SWITCH_TO_PLUGIN::NAME, $project->getId(), SystemEvent::PRIORITY_HIGH);
         $GLOBALS['Response']->addFeedback(Feedback::INFO, $GLOBALS['Language']->getText('plugin_phpwiki', 'allowed_project_allow_project'));
     } else {
         $this->sendUpdateProjectListError();
     }
 }
예제 #10
0
 /**
  * Instanciates a new controller.
  * 
  * TODO:
  *   - pass $request to actions (e.g. show).
  * 
  * @param Codendi_Request           $request
  * @param PlanningFactory           $planning_factory
  * @param Planning_MilestoneFactory $milestone_factory 
  */
 public function __construct(Codendi_Request $request, Planning_MilestoneFactory $milestone_factory, ProjectManager $project_manager)
 {
     parent::__construct('agiledashboard', $request);
     try {
         $this->milestone_factory = $milestone_factory;
         $project = $project_manager->getProject($request->get('group_id'));
         $this->milestone = $this->milestone_factory->getMilestoneWithPlannedArtifactsAndSubMilestones($this->getCurrentUser(), $project, $request->get('planning_id'), $request->get('aid'));
     } catch (Tracker_Hierarchy_MoreThanOneParentException $e) {
         $GLOBALS['Response']->addFeedback('error', $e->getMessage(), CODENDI_PURIFIER_LIGHT);
     }
 }
 /**
  * Creates the Umbrella Projects of a given project
  * @param Git_RemoteServer_GerritServer[] $gerrit_servers
  * @param Project $project
  */
 public function recursivelyCreateUmbrellaProjects(array $gerrit_servers, Project $project)
 {
     $parent_project = $this->project_manager->getParentProject($project->getID());
     $this->createProjectOnServers($gerrit_servers, $project);
     if (!$parent_project) {
         $this->resetProjectInheritanceOnServers($gerrit_servers, $project);
         return;
     }
     $this->recursivelyCreateUmbrellaProjects($gerrit_servers, $parent_project);
     $this->setProjectInheritanceOnServers($gerrit_servers, $project, $parent_project);
 }
예제 #12
0
 /**
  * Select a PM from its username or password
  * 
  * @param ProjectManager $pm
  * @return array the selected row in the db
  */
 public function update($pm)
 {
     $sql = $this->dao->prepare("UPDATE project_manager set `password` = :password WHERE `pm_id` = :pm_id;");
     $sql->bindValue(":pm_id", $pm->pm_id(), \PDO::PARAM_INT);
     $sql->bindValue(":password", $pm->password(), \PDO::PARAM_STR);
     try {
         return $sql->execute();
     } catch (Exception $exc) {
         echo $exc->getTraceAsString();
     }
 }
예제 #13
0
 private function allowSVNTokensForProject($project_to_migrate)
 {
     $project = $this->project_manager->getProjectFromAutocompleter($project_to_migrate);
     if ($project && $this->token_manager->canAuthorizeTokens($project)) {
         $this->token_manager->setProjectAuthorizesTokens($project);
         $this->event_manager->processEvent(Event::SVN_AUTHORIZE_TOKENS, array('group_id' => $project->getID()));
         $GLOBALS['Response']->addFeedback(Feedback::INFO, $GLOBALS['Language']->getText('svn_tokens', 'allowed_project_allow_project'));
     } else {
         $this->sendUpdateProjectListError();
     }
 }
 public function __construct(array $results, ProjectManager $project_manager, array $submitted_facets)
 {
     if (isset($results['terms'])) {
         foreach ($results['terms'] as $result) {
             $project = $project_manager->getProject($result['term']);
             if ($project && !$project->isError()) {
                 $checked = isset($submitted_facets['group_id']) && in_array($project->getGroupId(), $submitted_facets['group_id']);
                 $this->facets[] = new ElasticSearch_SearchResultProjectsFacet($project, $result['count'], $checked);
             }
         }
     }
 }
 public function process()
 {
     foreach ($this->getProjectIdsFromParameters() as $project_id) {
         $project = $this->project_manager->getProject($project_id);
         if ($project && !$project->isError()) {
             $this->logger->debug('Update configuration for project ' . $project->getID());
             $this->gitolite_driver->dumpProjectRepoConf($project);
         }
     }
     $this->system_event_manager->queueGrokMirrorGitoliteAdminUpdate();
     $this->done();
 }
 private function getOtherProjectsValues(PFUser $user, $submitted_facets)
 {
     $other_projects = array();
     $all_projects_for_user = $this->project_manager->getAllMyAndPublicProjects($user);
     foreach ($all_projects_for_user as $project_id => $project) {
         if ($this->isProjectValid($project) && !$this->isProjectInSearchResults($project_id)) {
             $selected = isset($submitted_facets['group_id']) && in_array($project_id, $submitted_facets['group_id']);
             $other_projects[] = new ElasticSearch_SearchResultProjectsFacet($project, 0, $selected);
         }
     }
     usort($other_projects, array($this, 'sortProjects'));
     return $other_projects;
 }
 public function updateAccess($new_value, $old_value)
 {
     if ($new_value === $old_value) {
         return;
     }
     $property_name = ForgeAccess::CONFIG;
     $this->config_dao->save($property_name, $new_value);
     $this->event_manager->processEvent(Event::SITE_ACCESS_CHANGE, array('new_value' => $new_value, 'old_value' => $old_value));
     if ($old_value === ForgeAccess::RESTRICTED || $new_value === ForgeAccess::RESTRICTED) {
         $this->project_manager->disableAllowRestrictedForAll();
         $this->permission_manager->disableRestrictedAccess();
     }
 }
 /**
  * @param array $projectInfo The project data db row
  *
  * @return SVN_Apache
  */
 public function get($projectInfo)
 {
     $requested_authentication_method = ForgeConfig::get(SVN_Apache_SvnrootConf::CONFIG_SVN_AUTH_KEY);
     $svn_apache_auth = $this->getModFromPlugins($projectInfo, $requested_authentication_method);
     if (!$svn_apache_auth) {
         $project = $this->project_manager->getProjectFromDbRow($projectInfo);
         if ($this->token_manager->isProjectAuthorizingTokens($project)) {
             $svn_apache_auth = new SVN_Apache_ModPerl($projectInfo);
         } else {
             $svn_apache_auth = $this->getModFromLocalIncFile($projectInfo, $requested_authentication_method);
         }
     }
     return $svn_apache_auth;
 }
 /**
  * @param array $projectInfo The project data db row
  *
  * @return SVN_Apache
  */
 public function get(array $projectInfo, $requested_authentication_method)
 {
     $project = $this->project_manager->getProjectFromDbRow($projectInfo);
     $project_authorizes_tokens = $this->token_manager->isProjectAuthorizingTokens($project);
     $svn_apache_auth = $this->getModFromPlugins($projectInfo, $requested_authentication_method, $project_authorizes_tokens);
     if (!$svn_apache_auth) {
         if ($project_authorizes_tokens) {
             $svn_apache_auth = new SVN_Apache_ModPerl($projectInfo);
         } else {
             $svn_apache_auth = $this->getModFromLocalIncFile($projectInfo, $requested_authentication_method);
         }
     }
     return $svn_apache_auth;
 }
    protected function aCreationValidator($request_data, $required_custom_descriptions) {
        $request = aRequest()->withParams($request_data)->build();
        $creation_request = new Project_OneStepCreation_OneStepCreationRequest($request, ProjectManager::instance());
        $validator = new Project_OneStepCreation_OneStepCreationValidator($creation_request, $required_custom_descriptions);

        return $validator;
    }
예제 #21
0
 public function __construct()
 {
     $this->project_manager = ProjectManager::instance();
     $this->user_manager = UserManager::instance();
     $this->project_helper = new \DataInit\ProjectHelper();
     $GLOBALS['Language'] = new BaseLanguage('en_US', 'en_US');
 }
예제 #22
0
 /**
  * Constructor
  */
 function PHPWikiService($id)
 {
     global $LANG, $is_wiki_page;
     //used so the search box will add the necessary element to the pop-up box
     $is_wiki_page = 1;
     /* 
      * Check given id 
      */
     $this->gid = (int) $id;
     if (empty($this->gid)) {
         exit_no_group();
     }
     $pm = ProjectManager::instance();
     $go = $pm->getProject($this->gid);
     if (!$go) {
         exit_no_group();
     }
     $this->wiki = new PHPWiki($this->gid);
     // Check access right
     $this->checkPermissions();
     // If Wiki for project doesn't exist, propose creation ... if user is project admin or wiki admin
     if (!$this->wiki->exist()) {
         if (!user_ismember($this->gid, 'W2') && !user_ismember($this->gid, 'A')) {
             exit_wiki_empty();
         }
     }
     // Set language for phpWiki
     if ($this->wiki->getLanguage_id()) {
         define('DEFAULT_LANGUAGE', $this->wiki->getLanguage_id());
         $LANG = $this->wiki->getLanguage_id();
     }
 }
 public function getContent()
 {
     $request =& HTTPRequest::instance();
     $group_id = $request->get('group_id');
     $pm = ProjectManager::instance();
     $project = $pm->getProject($group_id);
     $res_admin = db_query("SELECT user.user_id AS user_id,user.user_name AS user_name, user.realname as realname " . "FROM user,user_group " . "WHERE user_group.user_id=user.user_id AND user_group.group_id=" . db_ei($group_id) . " AND " . "user_group.admin_flags = 'A'");
     if (db_numrows($res_admin) > 0) {
         $user_helper = UserHelper::instance();
         $hp = Codendi_HTMLPurifier::instance();
         $em = EventManager::instance();
         echo '<span class="develtitle">' . $GLOBALS['Language']->getText('include_project_home', 'proj_admins') . ':</span><br />';
         while ($row_admin = db_fetch_array($res_admin)) {
             $display_name = '';
             $em->processEvent('get_user_display_name', array('user_id' => $row_admin['user_id'], 'user_name' => $row_admin['user_name'], 'realname' => $row_admin['realname'], 'user_display_name' => &$display_name));
             if (!$display_name) {
                 $display_name = $hp->purify($user_helper->getDisplayNameFromUserId($row_admin['user_id']));
             }
             echo '<a href="/users/' . $row_admin['user_name'] . '/">' . $display_name . '</a><br />';
         }
     }
     echo '<span class="develtitle">' . $GLOBALS['Language']->getText('include_project_home', 'proj_members') . ':</span><br />';
     // count of developers on this project
     $res_count = db_query("SELECT user_id FROM user_group WHERE group_id=" . db_ei($group_id));
     echo db_numrows($res_count);
     echo ' <a href="/project/memberlist.php?group_id=' . $group_id . '">[' . $GLOBALS['Language']->getText('include_project_home', 'view_members') . ']</a>';
 }
예제 #24
0
 /**
  * Bootstrap the application and
  * call the other bootstrap classes
  * from the projects (if they exist)
  *
  * @return self
  */
 public function bootstrap($environment = Application::ENVIRONMENT_WEB)
 {
     static::$environment = $environment;
     // Setup application
     $this->setup();
     try {
         Buffer::start();
         // Call own bootstrap
         (new Bootstrap($this))->autoCall();
         // Call bootstrap of active project
         $project = ProjectManager::getActiveProject();
         if ($project) {
             // Save it in case for further use
             $bootstrap = $project->bootstrap($this);
         }
     } catch (\Exception $err) {
         switch (static::$environment) {
             case Application::ENVIRONMENT_WEB:
                 self::renderException(array($err));
                 break;
             case Application::ENVIRONMENT_CMD:
                 throw $err;
                 break;
         }
     }
     return $this;
 }
예제 #25
0
 /**
  * Create a new project
  * 
  * $data['project']['form_unix_name']
  * $data['project']['form_full_name']
  * $data['project']['form_license']
  * $data['project']['form_license_other']
  * $data['project']['form_short_description']
  * $data['project']['built_from_template']
  * $data['project']['is_test']
  * $data['project']['is_public']
  * $data['project']["form_".$descfieldsinfos[$i]["group_desc_id"]]
  * foreach($data['project']['trove'] as $root => $values);
  * $data['project']['services'][$arr['service_id']]['is_used'];
  * $data['project']['services'][$arr['service_id']]['server_id'];
  * 
  * @param String $shortName
  * @param String $publicName
  * @param Array $data
  * 
  * @return Project
  */
 public function create($shortName, $publicName, $data)
 {
     if (!$this->ruleShortName->isValid($shortName)) {
         throw new Project_InvalidShortName_Exception($this->ruleShortName->getErrorMessage());
     }
     $data['project']['form_unix_name'] = $shortName;
     if (!$this->ruleFullName->isValid($publicName)) {
         throw new Project_InvalidFullName_Exception($this->ruleFullName->getErrorMessage());
     }
     $data['project']['form_full_name'] = $publicName;
     $id = $this->create_project($data);
     if ($id) {
         return $this->projectManager->getProject($id);
     }
     throw new Project_Creation_Exception();
 }
 function displayNotificationEmail()
 {
     $html = '';
     $html .= '<h3>' . $GLOBALS['Language']->getText('plugin_docman', 'details_approval_email_title') . '</h3>';
     $atsm = new Docman_ApprovalTableNotificationCycle();
     $atsm->setItem($this->item);
     $atf =& Docman_ApprovalTableFactoriesFactory::getFromItem($this->item);
     $table = $atf->getTable(false);
     $atsm->setTable($table);
     $um =& UserManager::instance();
     $owner =& $um->getUserById($table->getOwner());
     $atsm->setOwner($owner);
     $atsm->sendNotifReviewer($owner);
     $html .= $GLOBALS['Language']->getText('plugin_docman', 'details_approval_email_subject') . ' ' . $atsm->getNotificationSubject() . "\n";
     $html .= '<p class="docman_approval_email">';
     if (ProjectManager::instance()->getProject($this->item->getGroupId())->getTruncatedEmailsUsage()) {
         $html .= $GLOBALS['Language']->getText('plugin_docman', 'truncated_email');
     } else {
         $html .= htmlentities(quoted_printable_decode($atsm->getNotificationBodyText()), ENT_COMPAT, 'UTF-8');
     }
     $html .= '</p>';
     $backurl = $this->url . '&action=approval_create&id=' . $this->item->getId();
     $html .= '<a href="' . $backurl . '">' . $GLOBALS['Language']->getText('plugin_docman', 'details_approval_email_back') . '</a>';
     return $html;
 }
예제 #27
0
function svn_data_get_revision_detail($group_id, $commit_id, $rev_id = 0, $order = '')
{
    $order_str = "";
    if ($order) {
        if ($order != 'filename') {
            // SQLi Warning: no real possibility to escape $order here.
            // We rely on a proper filtering of user input by calling methods.
            $order_str = " ORDER BY " . $order;
        } else {
            $order_str = " ORDER BY dir, file";
        }
    }
    //check user access rights
    $pm = ProjectManager::instance();
    $project = $pm->getProject($group_id);
    $forbidden = svn_utils_get_forbidden_paths(user_getname(), $project->getSVNRootPath());
    $where_forbidden = "";
    if (!empty($forbidden)) {
        while (list($no_access, ) = each($forbidden)) {
            $where_forbidden .= " AND svn_dirs.dir not like '%" . db_es(substr($no_access, 1)) . "%' ";
        }
    }
    // if the subversion revision id is given then it akes precedence on
    // the internal commit_id (this is to make it easy for users to build
    // URL to access a revision
    if ($rev_id) {
        // To be done -> get the commit ID from the svn-commit table
        $sql = "SELECT svn_commits.description, svn_commits.date, svn_commits.revision, svn_checkins.type,svn_checkins.commitid,svn_dirs.dir,svn_files.file " . "FROM svn_dirs, svn_files, svn_checkins, svn_commits " . "WHERE svn_checkins.fileid=svn_files.id " . "AND svn_checkins.dirid=svn_dirs.id " . "AND svn_checkins.commitid=svn_commits.id " . "AND svn_commits.revision=" . db_ei($rev_id) . " " . "AND svn_commits.group_id=" . db_ei($group_id) . " " . $where_forbidden . $order_str;
    } else {
        $sql = "SELECT svn_commits.description, svn_commits.date, svn_commits.revision, svn_checkins.type,svn_checkins.commitid,svn_dirs.dir,svn_files.file " . "FROM svn_dirs, svn_files, svn_checkins, svn_commits " . "WHERE svn_checkins.fileid=svn_files.id " . "AND svn_checkins.dirid=svn_dirs.id " . "AND svn_checkins.commitid=svn_commits.id " . "AND svn_commits.id=" . db_ei($commit_id) . " " . $where_forbidden . $order_str;
    }
    $result = db_query($sql);
    return $result;
}
예제 #28
0
 private function autoActivateProject($group)
 {
     $auto_approval = ForgeConfig::get('sys_project_approval', 1) ? PROJECT_APPROVAL_BY_ADMIN : PROJECT_APPROVAL_AUTO;
     if ($this->force_activation || $auto_approval == PROJECT_APPROVAL_AUTO) {
         $this->projectManager->activate($group);
     }
 }
예제 #29
0
 /**
  * Constructor.
  *
  * @param Integer $groupId     Project Id
  * @param Integer $weeksNumber Statistics duration in weeks
  *
  * @return Void
  */
 public function __construct($groupId, $weeksNumber)
 {
     $dao = new GitDao();
     // TODO: Optionally include presonal forks in repo list
     $allRepositories = $dao->getProjectRepositoryList($groupId);
     $um = UserManager::instance();
     $user = $um->getCurrentUser();
     $repoFactory = new GitRepositoryFactory($dao, ProjectManager::instance());
     foreach ($allRepositories as $repo) {
         $repository = $repoFactory->getRepositoryById($repo['repository_id']);
         if ($repository->userCanRead($user)) {
             $this->repoList[] = $repository;
         }
     }
     $this->displayChart = false;
     $this->weeksNumber = min($weeksNumber, self::MAX_WEEKSNUMBER);
     // Init some class properties according to 'weeks number' parameter
     $today = $_SERVER['REQUEST_TIME'];
     $startPeriod = strtotime("-{$this->weeksNumber} weeks");
     $weekInSeconds = self::WEEKS_IN_SECONDS;
     for ($i = $startPeriod + $weekInSeconds; $i < $today + $weekInSeconds; $i += $weekInSeconds) {
         $this->dates[] = date('M d', $i);
         $this->weekNum[] = intval(date('W', $i));
         $this->year[] = intval(date('Y', $i));
     }
 }
예제 #30
0
 public function tearDown()
 {
     UserManager::clearInstance();
     ProjectManager::clearInstance();
     SystemEventManager::clearInstance();
     unset($GLOBALS['Language']);
 }