コード例 #1
0
ファイル: index.php プロジェクト: nickl-/tuleap
     $title_arr[] = $Language->getText('global', 'status');
 }
 echo html_build_list_table_top($title_arr);
 echo "\n";
 $art_displayed = 0;
 $rows = 0;
 while ($arr = db_fetch_array($result)) {
     $rows++;
     $curArtifact = new Artifact($ath, $arr['artifact_id']);
     if ($curArtifact->isStatusClosed($curArtifact->getStatusID())) {
         $status = $Language->getText('global', 'closed');
     } else {
         $status = $Language->getText('global', 'open');
     }
     // Only display artifacts that the user is allowed to see
     if ($curArtifact->userCanView(user_getid())) {
         print "\n<TR class=\"" . html_get_alt_row_color($art_displayed) . "\">";
         if ($summary_field->userCanRead($group_id, $atid)) {
             print "<TD><A HREF=\"/tracker/?group_id={$group_id}&func=detail&atid={$atid}&aid=" . $arr['artifact_id'] . "\"><IMG SRC=\"" . util_get_image_theme('msg.png') . "\" BORDER=0 HEIGHT=12 WIDTH=10> " . $arr['summary'] . "</A></TD>";
         }
         if ($submitted_field->userCanRead($group_id, $atid)) {
             print "<TD>" . $arr['user_name'] . "</TD>";
         }
         if ($date_field->userCanRead($group_id, $atid)) {
             print "<TD>" . format_date($GLOBALS['Language']->getText('system', 'datefmt'), $arr['open_date']) . "</TD>";
         }
         if ($status_field->userCanRead($group_id, $atid)) {
             print "<TD>" . $status . "</TD>";
         }
         print "</TR>";
         $art_displayed++;
コード例 #2
0
 /**
  * Check if user (user_id) is allowed to receive reminder mail
  *
  * @return boolean
  */
 function isUserAllowedToBeNotified($user_id)
 {
     global $art_field_fact;
     $group = ProjectManager::instance()->getProject($this->getGroupId());
     $at = new ArtifactType($group, $this->getGroupArtifactId());
     $art_field_fact = new ArtifactFieldFactory($at);
     $art = new Artifact($at, $this->getArtifactId(), false);
     $field = $art_field_fact->getFieldFromId($this->getFieldId());
     return $art->userCanView($user_id) && $field->userCanRead($this->getGroupId(), $this->getGroupArtifactId(), $user_id);
 }
コード例 #3
0
ファイル: download.php プロジェクト: nterray/tuleap
$id = $request->get('id');
$artifact_id = $request->get('artifact_id');
// We have the artifact id, but not the tracker id
$sql = "SELECT group_artifact_id, group_id FROM artifact INNER JOIN artifact_group_list USING (group_artifact_id) WHERE artifact_id= " . db_ei($artifact_id);
$result = db_query($sql);
if (db_numrows($result) > 0) {
    $row = db_fetch_array($result);
    $atid = $row['group_artifact_id'];
    $pm = ProjectManager::instance();
    $group = $pm->getProject($row['group_id']);
    $at = new ArtifactType($group, $atid);
    if ($at->userCanView()) {
        $art_field_fact = new ArtifactFieldFactory($at);
        // Grrr! don't use global >_<
        $a = new Artifact($at, $artifact_id);
        if ($a->userCanView()) {
            $sql = "SELECT description,bin_data,filename,filesize,filetype FROM artifact_file WHERE id='" . db_ei($id) . "' AND artifact_id ='" . db_ei($artifact_id) . "'";
            //echo $sql;
            $result = db_query($sql);
            if ($result && db_numrows($result) > 0) {
                if (db_result($result, 0, 'filesize') == 0) {
                    exit_error($Language->getText('global', 'error'), $Language->getText('tracker_download', 'file_is_null'));
                } else {
                    // Download the patch with the correct filetype
                    require_once 'common/include/Codendi_HTTPPurifier.class.php';
                    $http = Codendi_HTTPPurifier::instance();
                    header('Content-Type: ' . $http->purify(db_result($result, 0, 'filetype')));
                    header('Content-Length: ' . $http->purify(db_result($result, 0, 'filesize')));
                    header('Content-Disposition: filename="' . $http->purify(db_result($result, 0, 'filename')) . '"');
                    header('Content-Description: ' . $http->purify(db_result($result, 0, 'description')));
                    echo db_result($result, 0, 'bin_data');
コード例 #4
0
 public function search(Search_SearchQuery $query, Search_SearchResults $search_results)
 {
     include_once 'www/tracker/include/ArtifactTypeHtml.class.php';
     include_once 'www/tracker/include/ArtifactHtml.class.php';
     $project = $query->getProject();
     if ($project->isError()) {
         return;
     }
     $group_id = $project->getId();
     $words = $query->getWords();
     $exact = $query->getExact();
     $offset = $query->getOffset();
     $atid = $query->getTrackerV3Id();
     ob_start();
     //
     //      Create the ArtifactType object
     //
     $ath = new ArtifactTypeHtml($project, $atid);
     if (!$ath || !is_object($ath)) {
         exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('global', 'error'));
     }
     if ($ath->isError()) {
         exit_error($GLOBALS['Language']->getText('global', 'error'), $ath->getErrorMessage());
     }
     // Check if this tracker is valid (not deleted)
     if (!$ath->isValid()) {
         exit_error($GLOBALS['Language']->getText('global', 'error'), $GLOBALS['Language']->getText('global', 'error'));
     }
     $results = $this->dao->searchGlobalPaginated($words, $exact, $offset, $atid, UserManager::instance()->getCurrentUser()->getUgroups($group_id, $atid), $query->getNumberOfResults());
     $rows_returned = $this->dao->foundRows();
     $art_displayed = 0;
     if ($rows_returned < 1) {
         echo '<H2>' . $GLOBALS['Language']->getText('search_index', 'no_match_found', htmlentities(stripslashes($words), ENT_QUOTES, 'UTF-8')) . '</H2>';
     } else {
         // Create field factory
         $art_field_fact = new ArtifactFieldFactory($ath);
         echo '<H3>' . $GLOBALS['Language']->getText('search_index', 'search_res', array(htmlentities(stripslashes($words), ENT_QUOTES, 'UTF-8'), $rows_returned)) . "</H3><P>\n";
         $title_arr = array();
         $summary_field = $art_field_fact->getFieldFromName("summary");
         if ($summary_field->userCanRead($group_id, $atid)) {
             $title_arr[] = $GLOBALS['Language']->getText('search_index', 'artifact_summary');
         }
         $submitted_field = $art_field_fact->getFieldFromName("submitted_by");
         if ($submitted_field->userCanRead($group_id, $atid)) {
             $title_arr[] = $GLOBALS['Language']->getText('search_index', 'submitted_by');
         }
         $date_field = $art_field_fact->getFieldFromName("open_date");
         if ($date_field->userCanRead($group_id, $atid)) {
             $title_arr[] = $GLOBALS['Language']->getText('search_index', 'date');
         }
         $status_field = $art_field_fact->getFieldFromName("status_id");
         if ($status_field->userCanRead($group_id, $atid)) {
             $title_arr[] = $GLOBALS['Language']->getText('global', 'status');
         }
         echo html_build_list_table_top($title_arr);
         echo "\n";
         $rows = 0;
         foreach ($results as $arr) {
             $rows++;
             $curArtifact = new Artifact($ath, $arr['artifact_id']);
             if ($curArtifact->isStatusClosed($curArtifact->getStatusID())) {
                 $status = $GLOBALS['Language']->getText('global', 'closed');
             } else {
                 $status = $GLOBALS['Language']->getText('global', 'open');
             }
             // Only display artifacts that the user is allowed to see
             if ($curArtifact->userCanView(user_getid())) {
                 print "\n<TR class=\"" . html_get_alt_row_color($art_displayed) . "\">";
                 if ($summary_field->userCanRead($group_id, $atid)) {
                     print "<TD><A HREF=\"/tracker/?group_id={$group_id}&func=detail&atid={$atid}&aid=" . $arr['artifact_id'] . "\"><IMG SRC=\"" . util_get_image_theme('msg.png') . "\" BORDER=0 HEIGHT=12 WIDTH=10> " . $arr['summary'] . "</A></TD>";
                 }
                 if ($submitted_field->userCanRead($group_id, $atid)) {
                     print "<TD>" . $arr['user_name'] . "</TD>";
                 }
                 if ($date_field->userCanRead($group_id, $atid)) {
                     print "<TD>" . format_date($GLOBALS['Language']->getText('system', 'datefmt'), $arr['open_date']) . "</TD>";
                 }
                 if ($status_field->userCanRead($group_id, $atid)) {
                     print "<TD>" . $status . "</TD>";
                 }
                 print "</TR>";
                 $art_displayed++;
                 if ($art_displayed > $query->getNumberOfResults()) {
                     break;
                 }
             }
         }
         echo "</TABLE>\n";
     }
     $maybe_more_results = $art_displayed < $query->getNumberOfResults() ? false : true;
     $search_results->setCountResults($art_displayed)->setHasMore($maybe_more_results);
     return new Search_SearchTrackerV3ResultPresenter(ob_get_clean());
 }
コード例 #5
0
ファイル: tracker.php プロジェクト: nterray/tuleap
 /**
  * We keep the order of the relation in the database, even if we are getting the inverse. 
  */
 function inverse_dependencies_to_soap($artifact_type, $artifact_id, $inverse_dependencies)
 {
     $return = array();
     $rows = db_numrows($inverse_dependencies);
     for ($i = 0; $i < $rows; $i++) {
         // check the permission : is the user allowed to see the artifact ?
         $artifact = new Artifact($artifact_type, db_result($inverse_dependencies, $i, 'artifact_id'));
         if ($artifact && $artifact->userCanView()) {
             $return[] = array('artifact_depend_id' => db_result($inverse_dependencies, $i, 'artifact_depend_id'), 'artifact_id' => db_result($inverse_dependencies, $i, 'artifact_id'), 'is_dependent_on_artifact_id' => $artifact_id, 'summary' => util_unconvert_htmlspecialchars(db_result($inverse_dependencies, $i, 'summary')), 'tracker_id' => db_result($inverse_dependencies, $i, 'group_artifact_id'), 'tracker_name' => SimpleSanitizer::unsanitize(db_result($inverse_dependencies, $i, 'name')), 'group_id' => db_result($inverse_dependencies, $i, 'group_id'), 'group_name' => util_unconvert_htmlspecialchars(db_result($inverse_dependencies, $i, 'group_name')));
         }
     }
     return $return;
 }
コード例 #6
0
 function getArtifactsFromReport($group_id, $group_artifact_id, $report_id, $criteria, $offset, $max_rows, $sort_criteria, &$total_artifacts)
 {
     global $ath, $art_field_fact, $Language;
     $GLOBALS['group_id'] = $group_id;
     $chunksz = $max_rows;
     $advsrch = 0;
     // ?
     $prefs = array();
     $report = new ArtifactReport($report_id, $group_artifact_id);
     if (!$report || !is_object($report)) {
         $this->setError('Cannot Get ArtifactReport From ID : ' . $report_id);
         return false;
     } elseif ($report->isError()) {
         $this->setError($report->getErrorMessage());
         return false;
     }
     $query_fields = $report->getQueryFields();
     $result_fields = $report->getResultFields();
     // Filter part
     if (is_array($criteria)) {
         foreach ($criteria as $cr) {
             $af = $art_field_fact->getFieldFromName($cr->field_name);
             if (!$af || !is_object($af)) {
                 $this->setError('Cannot Get ArtifactField From Name : ' . $cr->field_name);
                 return false;
             } elseif ($art_field_fact->isError()) {
                 $this->setError($art_field_fact->getErrorMessage());
                 return false;
             }
             if (!array_key_exists($cr->field_name, $query_fields)) {
                 $this->setError('You cannot filter on field ' . $cr->field_name . ': it is not a query field for report ' . $report_id);
                 return false;
             }
             if ($af->isSelectBox() || $af->isMultiSelectBox()) {
                 $prefs[$cr->field_name] = explode(",", $cr->field_value);
             } else {
                 $prefs[$cr->field_name] = array($cr->field_value);
                 if (isset($cr->operator)) {
                     $prefs[$cr->field_name][] = $cr->operator;
                 }
             }
         }
     }
     // Sort part
     $morder = '';
     $array_morder = array();
     if (is_array($sort_criteria)) {
         foreach ($sort_criteria as $sort_cr) {
             $field_name = $sort_cr->field_name;
             // check if fieldname is ok
             $af = $art_field_fact->getFieldFromName($sort_cr->field_name);
             if (!$af || !is_object($af)) {
                 $this->setError('Cannot Get ArtifactField From Name : ' . $sort_cr->field_name);
                 return false;
             } elseif ($art_field_fact->isError()) {
                 $this->setError($art_field_fact->getErrorMessage());
                 return false;
             }
             if (!array_key_exists($sort_cr->field_name, $result_fields)) {
                 $this->setError('You cannot sort on field ' . $sort_cr->field_name . ': it is not a result field for report ' . $report_id);
                 return false;
             }
             // check if direction is ok
             $sort_direction = '>';
             // by default, direction is ASC
             if (isset($sort_cr->sort_direction) && $sort_cr->sort_direction == 'DESC') {
                 $sort_direction = '<';
             }
             $array_morder[] = $field_name . $sort_direction;
         }
     }
     $morder = implode(',', $array_morder);
     $pm = ProjectManager::instance();
     $group = $pm->getProject($group_id);
     $ath = new ArtifactTypeHtml($group);
     $artifact_report = new ArtifactReport($report_id, $group_artifact_id);
     // get the total number of artifact that answer the query, and the corresponding IDs
     $total_artifacts = $artifact_report->selectReportItems($prefs, $morder, $advsrch, $aids);
     // get the SQL query corresponding to the query
     $sql = $artifact_report->createQueryReport($prefs, $morder, $advsrch, $offset, $chunksz, $aids);
     $result = $artifact_report->getResultQueryReport($sql);
     $result_fields = $artifact_report->getResultFields();
     //we get from result only fields that we need to display in the report (we add at the begining id and severity only to identify the artifact and for the severity color)
     $artifacts = array();
     $i = 0;
     foreach ($result as $art) {
         $artifact_id = $art['artifact_id'];
         $severity_id = $art['severity_id'];
         $artifact = new Artifact($this->ArtifactType, $art['artifact_id'], true);
         if ($artifact->userCanView()) {
             $fields = array();
             reset($result_fields);
             $fields['severity_id'] = $severity_id;
             $fields['id'] = $artifact_id;
             while (list($key, $field) = each($result_fields)) {
                 $value = $result[$i][$key];
                 $fields[$key] = $value;
             }
             $artifacts[$artifact_id] = $fields;
         }
         $i++;
     }
     return $artifacts;
 }