示例#1
0
 public function unarchive_project_page($ctl)
 {
     if (!empty($_REQUEST['p'])) {
         if (is_array($_REQUEST['p']) || preg_match('/[^\\w\\_\\-]/', $_REQUEST['p'])) {
             return trigger_error("Please don't hack...", E_USER_ERROR);
         }
         $project = new Ansible__Project($_REQUEST['p'], $ctl->stage, true);
         if ($project->exists() && $project->archived()) {
             $user = !empty($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'] : '******';
             $project->unarchive($user);
         }
     }
     $ctl->redirect('../list.php?cat=archived');
     exit;
 }
示例#2
0
 public function project_page($ctl)
 {
     if (empty($_REQUEST['p'])) {
         $ctl->redirect('list.php');
     }
     $projects = $ctl->stage->get_projects_from_param($_REQUEST['p']);
     $projects_lookup = array_flip((array) $_REQUEST['p']);
     ###  Read Command output
     $previous_command = $this->read_previous_command($ctl);
     ###  Load for each project
     $locally_modified = false;
     $project_data = array();
     foreach ($projects as $project) {
         ###  Load and parse the file list
         $file_tags = $project->get_file_tags();
         $files = $project->get_affected_files();
         $project_data[$project->project_name]['project'] = $project;
         $project_data[$project->project_name]['file_lines'] = array();
         foreach ($files as $file) {
             $file_line = array('file' => $file);
             ###  Get Current Version
             $file_line['cur_vers'] = delayed_load_span(array($file), create_function('$file', now_doc('DELAY')));
             ###  Get PROD_SAFE Version
             $file_line['prod_safe_vers'] = delayed_load_span(array($file), create_function('$file', now_doc('DELAY')));
             ###  Get PROD_TEST Version
             $file_line['prod_test_vers'] = delayed_load_span(array($file), create_function('$file', now_doc('DELAY')));
             ###  Get HEAD Version
             $file_line['head_vers'] = delayed_load_span(array($file, $project, $file_tags), create_function('$file,$project,$file_tags', now_doc('DELAY')));
             ###  Do Target
             $file_line['target_vers'] = delayed_load_span(array($file, $project), create_function('$file,$project', now_doc('DELAY')));
             ###  Changes by
             $file_line['changes_by'] = delayed_load_span(array($file, $project), create_function('$file,$project', now_doc('DELAY')));
             ###  Actions
             $file_line['actions'] = delayed_load_span(array($file, $project), create_function('$file,$project', now_doc('DELAY')));
             ###  Other Projects Sharing files
             $other_projects = array();
             foreach ($ctl->stage->get_projects() as $pname) {
                 if (empty($pname) || $pname == $project->project_name) {
                     continue;
                 }
                 $other_project = new Ansible__Project($pname, $ctl->stage, false);
                 if (!in_array($other_project->get_group(), array('00_none', '01_staging', '03_testing_done', '04_prod_rollout_prep'))) {
                     continue;
                 }
                 foreach ($files as $our_file) {
                     foreach ($other_project->get_affected_files() as $their_file) {
                         if ($our_file == $their_file) {
                             if (!isset($other_projects[$pname])) {
                                 $other_projects[$pname] = array('data' => array('project' => $other_project, 'included' => isset($projects_lookup[$other_project->project_name]), 'remove_project_url' => $ctl->stage->get_projects_url($projects, $other_project->project_name)));
                             }
                             $other_projects[$pname][] = $their_file;
                         }
                     }
                 }
             }
             $project_data[$project->project_name]['other_projects'] = $other_projects;
             $project_data[$project->project_name]['remove_project_url'] = $ctl->stage->get_projects_url($projects, $project->project_name);
             $project_data[$project->project_name]['files'][] = $file_line;
         }
     }
     ///  Find all rollback points that include ALL of these projects
     require_once dirname(__FILE__) . '/../model/RollPoint.class.php';
     $proj_join = array();
     foreach ($projects as $p) {
         $proj_join[$p->project_name] = $ctl->stage->dbh()->quote($p->project_name);
     }
     $roll_points = Ansible__RollPoint::get_where(array("(SELECT COUNT(*) FROM rlpt_project r WHERE roll_point.rlpt_id = r.rlpt_id AND r.project IN (" . join(',', $proj_join) . " )) == " . count($proj_join), "(SELECT COUNT(*) FROM rlpt_project r WHERE roll_point.rlpt_id = r.rlpt_id                                               ) == " . count($proj_join)), false, 'creation_date DESC');
     return array('project_data' => $project_data, 'previous_command' => $previous_command, 'locally_modified' => $locally_modified, 'project_url_params' => $ctl->stage->get_projects_url($projects), 'roll_points' => $roll_points);
 }
示例#3
0
 public function project()
 {
     require_once dirname(dirname(dirname(__FILE__))) . '/Project.class.php';
     $project = new Ansible__Project($this->project, $GLOBALS['controller']->stage, false);
     return $project->exists() ? $project : null;
 }
示例#4
0
 public function get_projects_by_group($category = 'active')
 {
     require_once $this->config('lib_path') . '/Ansible/Project.class.php';
     ###  Project Groups
     $groups = array('00_none' => 'New Projects - In Development', '01_staging' => 'Step 1 : Updated to Staging for Testing', '03_testing_done' => 'Step 3 : Testing Done - Tagged as PROD_TEST', '04_prod_rollout_prep' => 'Step 4 : Production tagged as PROD_SAFE', '05_rolled_out' => 'Step 5 : Rolled out to Production');
     $projects = array();
     $category_list = $category == 'archived' ? $this->get_archived_projects() : $this->get_projects();
     $file_lines = array();
     foreach ($category_list as $project_name) {
         if (empty($project_name)) {
             continue;
         }
         $project = new Ansible__Project($project_name, $this, $category == 'archived');
         ###  Get more info from ls
         $ls = is_dir($SYSTEM_PROJECT_BASE) ? preg_split('/\\s+/', $project->get_ls()) : array();
         #        $stat = (is_dir($SYSTEM_PROJECT_BASE)) ? ($project->get_stat()) : ();
         $stat = $project->get_stat();
         $project_info = array('name' => $project_name, 'creator' => $ls[2] || '-', 'group' => $ls[3] || '-', 'mod_time' => $stat ? $stat[9] : 0, 'mod_time_display' => $stat ? date('n/j/y', $stat[9]) : '-', 'has_summary' => is_dir($SYSTEM_PROJECT_BASE) ? $project->file_exists("summary.txt") ? "YES" : "" : '-', 'aff_file_count' => count($project->get_affected_files()));
         //  Make array key unique, but sortable
         $projects[$project->get_group()][sprintf("%011d", $project_info['mod_time']) . '_' . $project_name] = $project_info;
     }
     ///  Nested Sort
     ksort($projects, SORT_NUMERIC);
     foreach ($projects as $group => $x) {
         ksort($projects[$group], SORT_NUMERIC);
         $projects[$group] = array_reverse($projects[$group]);
     }
     return array($projects, $groups);
 }