コード例 #1
0
ファイル: index.php プロジェクト: nickl-/tuleap
 echo '<div id="tracker_toolbar_clear"></div>';
 $array = explode(" ", $words);
 $words1 = implode($array, "%' {$crit} artifact.details LIKE '%");
 $words2 = implode($array, "%' {$crit} artifact.summary LIKE '%");
 $words3 = implode($array, "%' {$crit} artifact_history.new_value LIKE '%");
 $sql = "SELECT SQL_CALC_FOUND_ROWS artifact.artifact_id,\n                   artifact.summary,\n                   artifact.open_date,\n                   user.user_name\n           FROM artifact INNER JOIN user ON user.user_id=artifact.submitted_by \n              LEFT JOIN artifact_history ON artifact_history.artifact_id=artifact.artifact_id \n              LEFT JOIN permissions ON (permissions.object_id = CAST(artifact.artifact_id AS CHAR) AND permissions.permission_type = 'TRACKER_ARTIFACT_ACCESS')\n           WHERE artifact.group_artifact_id='" . db_ei($atid) . "' \n             AND (\n                   artifact.use_artifact_permissions = 0\n                   OR \n                   (\n                       permissions.ugroup_id IN (" . implode(',', UserManager::instance()->getCurrentUser()->getUgroups($group_id, $atid)) . ")\n                   )\n             )\n             AND (\n                   (artifact.details LIKE '%" . db_es($words1) . "%') \n                   OR \n                   (artifact.summary LIKE '%" . db_es($words2) . "%') \n                   OR \n                   (artifact_history.field_name='comment' AND (artifact_history.new_value LIKE '%" . db_es($words3) . "%'))\n             ) \n           GROUP BY open_date DESC \n           LIMIT " . db_ei($offset) . ", 25";
 $result = db_query($sql);
 $rows_returned = db_result(db_query('SELECT FOUND_ROWS() as nb'), 0, 'nb');
 if (!$result || $rows_returned < 1) {
     $no_rows = 1;
     echo '<H2>' . $Language->getText('search_index', 'no_match_found', htmlentities(stripslashes($words), ENT_QUOTES, 'UTF-8')) . '</H2>';
     echo db_error();
 } else {
     echo '<H3>' . $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[] = $Language->getText('search_index', 'artifact_summary');
     }
     $submitted_field = $art_field_fact->getFieldFromName("submitted_by");
     if ($submitted_field->userCanRead($group_id, $atid)) {
         $title_arr[] = $Language->getText('search_index', 'submitted_by');
     }
     $date_field = $art_field_fact->getFieldFromName("open_date");
     if ($date_field->userCanRead($group_id, $atid)) {
         $title_arr[] = $Language->getText('search_index', 'date');
     }
     $status_field = $art_field_fact->getFieldFromName("status_id");
     if ($status_field->userCanRead($group_id, $atid)) {
         $title_arr[] = $Language->getText('global', 'status');
     }
コード例 #2
0
 /**
  * Get the list of users to be notified by the event
  *
  * @return array
  */
 function getNotifiedPeople()
 {
     global $art_field_fact;
     //Instantiate a new Artifact object
     $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);
     $notified_people = array();
     $sql = sprintf('SELECT notified_people FROM artifact_date_reminder_settings' . ' WHERE reminder_id=%d' . ' AND group_artifact_id=%d' . ' AND field_id=%d', db_ei($this->getReminderId()), db_ei($this->getGroupArtifactId()), db_ei($this->getFieldId()));
     $res = db_query($sql);
     $notif = db_result($res, 0, 'notified_people');
     $notif_array = explode(",", $notif);
     foreach ($notif_array as $item) {
         if ($item == 1) {
             //Submitter
             $submitter = $art->getSubmittedBy();
             //add submitter in the 'notified_people' array
             if (!in_array(user_getemail($submitter), $notified_people) && $submitter != 100 && $this->isUserAllowedToBeNotified($submitter)) {
                 $count = count($notified_people);
                 $notified_people[$count] = user_getemail($submitter);
             }
         } else {
             if ($item == 2) {
                 //Assigned To
                 $assignee_array = array();
                 $multi_assigned_to = $art_field_fact->getFieldFromName('multi_assigned_to');
                 if (is_object($multi_assigned_to)) {
                     //Multi-Assigned To field
                     if ($multi_assigned_to->isUsed()) {
                         $assignee_array = $art->getMultiAssignedTo();
                     }
                 } else {
                     $assigned_to = $art_field_fact->getFieldFromName('assigned_to');
                     if (is_object($assigned_to)) {
                         //Assigned To field
                         if ($assigned_to->isUsed()) {
                             $assignee_array = array($art->getValue('assigned_to'));
                         }
                     }
                 }
                 $index = count($notified_people);
                 if (count($assignee_array) > 0) {
                     foreach ($assignee_array as $assignee) {
                         if (!in_array(user_getemail($assignee), $notified_people) && $assignee != 100 && $this->isUserAllowedToBeNotified($assignee)) {
                             $notified_people[$index] = user_getemail($assignee);
                             $index++;
                         }
                     }
                 }
             } else {
                 if ($item == 3) {
                     //CC
                     $cc_array = $art->getCCIdList();
                     if (count($cc_array) > 0) {
                         $index = count($notified_people);
                         foreach ($cc_array as $cc_id) {
                             $cc = user_getemail($cc_id);
                             if (!in_array($cc, $notified_people) && $this->isUserAllowedToBeNotified($cc_id)) {
                                 //add CC list in the 'notified_people' array
                                 $notified_people[$index] = $cc;
                                 $index++;
                             }
                         }
                     }
                 } else {
                     if ($item == 4) {
                         //Commenter
                         $res_com = $art->getCommenters();
                         if (db_numrows($res_com) > 0) {
                             $index = count($notified_people);
                             while ($row = db_fetch_array($res_com)) {
                                 $commenter = $row['mod_by'];
                                 if (!in_array(user_getemail($commenter), $notified_people) && $commenter != 100 && $this->isUserAllowedToBeNotified($commenter)) {
                                     //add Commenters in the 'notified_people' array
                                     $notified_people[$index] = user_getemail($commenter);
                                     $index++;
                                 }
                             }
                         }
                     } else {
                         if (preg_match("/^g/", $item)) {
                             // user-group
                             $ugr_id = (int) substr($item, 1);
                             if ($ugr_id > 100) {
                                 // user-defined ugroup
                                 $qry = ugroup_db_get_members($ugr_id);
                                 $result = db_query($qry);
                                 if (db_numrows($result) > 0) {
                                     $idx = count($notified_people);
                                     while ($row = db_fetch_array($result)) {
                                         $usr = $row['user_id'];
                                         if (!in_array(user_getemail($usr), $notified_people) && $usr != 100 && $this->isUserAllowedToBeNotified($usr)) {
                                             //add ugroup members in the 'notified_people' array
                                             $notified_people[$idx] = user_getemail($usr);
                                             $idx++;
                                         }
                                     }
                                 }
                             } else {
                                 // predefined ugroup
                                 $qry = ugroup_db_get_dynamic_members($ugr_id, $this->getGroupArtifactId(), $this->getGroupId());
                                 $result = db_query($qry);
                                 if (db_numrows($result) > 0) {
                                     $idx = count($notified_people);
                                     while ($row = db_fetch_array($result)) {
                                         $usr = $row['user_id'];
                                         if (!in_array(user_getemail($usr), $notified_people) && $usr != 100 && $this->isUserAllowedToBeNotified($usr)) {
                                             //add ugroup members in the 'notified_people' array
                                             $notified_people[$idx] = user_getemail($usr);
                                             $idx++;
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     return $notified_people;
 }
コード例 #3
0
 $art_fieldset_fact = new ArtifactFieldSetFactory($at);
 if ($art_fieldset_fact->isError()) {
     exit_error($Language->getText('global', 'error'), $art_fieldset_fact->getErrorMessage());
 }
 $col_list = array();
 $sql = $at->buildExportQuery($fields, $col_list, $lbl_list, $dsc_list, $select, $from, $where, $multiple_queries, $all_queries);
 $col_list[] = 'follow_ups';
 $col_list[] = 'is_dependent_on';
 // Let's create the project database if it does not exist
 // Drop the existing table and create a fresh one
 db_project_create($dbname);
 db_project_query($dbname, 'DROP TABLE IF EXISTS ' . $tbl_name);
 $sql_create = "";
 reset($col_list);
 while (list(, $col) = each($col_list)) {
     $field = $art_field_fact->getFieldFromName($col);
     if (!$field) {
         break;
     }
     if ($field->isSelectBox() || $field->isMultiSelectBox()) {
         $type = "TEXT";
     } else {
         if ($field->isTextArea() || $field->isTextField() && $field->getDataType() == $field->DATATYPE_TEXT) {
             $type = "TEXT";
         } else {
             if ($field->isDateField()) {
                 $type = "DATETIME";
             } else {
                 if ($field->isFloat()) {
                     $type = "FLOAT(10,2)";
                 } else {
コード例 #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());
 }