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'); }
/** * 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; }
$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 {
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()); }