/** * Display detail report form * * @return void */ function showReportForm() { $hp = Codendi_HTMLPurifier::instance(); global $ath, $Language; $g = $ath->getGroup(); $group_id = $g->getID(); $atid = $ath->getID(); $ath->adminHeader(array('title' => $Language->getText('tracker_include_report', 'modify_report'), 'help' => 'TrackerAdministration.html#TrackerReportSetting')); echo '<H2>' . $Language->getText('tracker_import_admin', 'tracker') . ' \'<a href="/tracker/admin/?group_id=' . (int) $group_id . '&atid=' . (int) $atid . '">' . $hp->purify(SimpleSanitizer::unsanitize($ath->getName()), CODENDI_PURIFIER_CONVERT_HTML) . '</a>\' - ' . $Language->getText('tracker_include_report', 'modify_report') . ' \'' . $hp->purify($this->name, CODENDI_PURIFIER_CONVERT_HTML) . '\'</H2>'; // display the table of all fields that can be included in the report // along with their current state in this report $title_arr = array(); $title_arr[] = $Language->getText('tracker_include_report', 'field_label'); $title_arr[] = $Language->getText('tracker_include_artifact', 'desc'); $title_arr[] = $Language->getText('tracker_include_report', 'search_crit'); $title_arr[] = $Language->getText('tracker_include_report', 'rank_search'); $title_arr[] = $Language->getText('tracker_include_report', 'rep_col'); $title_arr[] = $Language->getText('tracker_include_report', 'rank_repo'); $title_arr[] = $Language->getText('tracker_include_report', 'col_width'); echo '<FORM ACTION="/tracker/admin/" METHOD="POST"> <INPUT TYPE="HIDDEN" NAME="func" VALUE="report"> <INPUT TYPE="HIDDEN" NAME="update_report" VALUE="y"> <INPUT TYPE="HIDDEN" NAME="atid" VALUE="' . (int) $atid . '"> <INPUT TYPE="HIDDEN" NAME="group_id" VALUE="' . (int) $group_id . '"> <INPUT TYPE="HIDDEN" NAME="report_id" VALUE="' . (int) $this->report_id . '"> <INPUT TYPE="HIDDEN" NAME="post_changes" VALUE="1"> <B>' . $Language->getText('tracker_include_artifact', 'name') . ': </B> <INPUT TYPE="TEXT" NAME="rep_name" VALUE="' . $hp->purify($this->name, CODENDI_PURIFIER_CONVERT_HTML) . '" CLASS="textfield_small" MAXLENGTH="80"> <B>' . $Language->getText('tracker_include_report', 'scope') . ': </B>'; $scope = $this->scope; if ($ath->userIsAdmin()) { echo '<SELECT ID="rep_scope" NAME="rep_scope" onchange="if (document.getElementById(\'rep_scope\').value == \'P\') {document.getElementById(\'rep_default\').disabled=false} else { document.getElementById(\'rep_default\').disabled=true;document.getElementById(\'rep_default\').checked=false }" > <OPTION VALUE="I"' . ($scope == 'I' ? 'SELECTED' : '') . '>' . $Language->getText('global', 'Personal') . '</OPTION> <OPTION VALUE="P"' . ($scope == 'P' ? 'SELECTED' : '') . '>' . $Language->getText('global', 'Project') . '</OPTION> </SELECT>'; echo ' <B>' . $Language->getText('tracker_include_report', 'default') . ':</B>' . '<INPUT TYPE="CHECKBOX" ID="rep_default" NAME="rep_default" ' . ($this->is_default == 1 ? 'CHECKED' : '') . ' ' . ($this->scope != 'P' ? 'DISABLED' : '') . '>'; } else { echo ($scope == 'P' ? $Language->getText('global', 'Project') : $Language->getText('global', 'Personal')) . '<INPUT TYPE="HIDDEN" NAME="rep_scope" VALUE="' . $hp->purify($scope, CODENDI_PURIFIER_CONVERT_HTML) . '">'; echo ' <B>' . $Language->getText('tracker_include_report', 'default') . ':</B>' . '<INPUT TYPE="CHECKBOX" ID="rep_default" NAME="rep_default" ' . ($this->is_default == 1 ? 'CHECKED' : '') . ' DISABLED >'; } echo ' <P> <B>' . $Language->getText('tracker_include_artifact', 'desc') . ':</B> <INPUT TYPE="TEXT" NAME="rep_desc" VALUE="' . $hp->purify($this->description, CODENDI_PURIFIER_CONVERT_HTML) . '" SIZE="50" MAXLENGTH="120"> <P>'; echo html_build_list_table_top($title_arr); // Write all the fields, grouped by fieldsetset and ordered by rank. $i = 0; $aff = new ArtifactFieldFactory($ath); $art_fieldset_fact = new ArtifactFieldsetFactory($ath); $used_fieldsets = $art_fieldset_fact->getAllFieldSetsContainingUsedFields(); // fetch list of used fieldsets for this artifact foreach ($used_fieldsets as $fieldset_id => $fieldset) { $used_fields = $fieldset->getAllUsedFields(); echo '<TR class="fieldset_separator">'; echo '<TD colspan="7">' . $fieldset->getLabel() . '</TD>'; echo '</TR>'; while (list($key, $field) = each($used_fields)) { // Do not show fields not used by the project if (!$field->isUsed()) { continue; } // Do not show some special fields any way if ($field->isSpecial()) { if ($field->getName() == 'group_id' || $field->getName() == 'comment_type_id') { continue; } } //Do not show unreadable fields if (!$ath->userIsAdmin() && !$field->userCanRead($group_id, $this->group_artifact_id)) { continue; } $cb_search = 'CBSRCH_' . $field->getName(); $cb_report = 'CBREP_' . $field->getName(); $tf_search = 'TFSRCH_' . $field->getName(); $tf_report = 'TFREP_' . $field->getName(); $tf_colwidth = 'TFCW_' . $field->getName(); $rep_field = null; if (isset($this->fields[$field->getName()])) { $rep_field = $this->fields[$field->getName()]; } if (!$rep_field) { $rep_field = new ArtifactReportField(); } $cb_search_chk = $rep_field->isShowOnQuery() ? 'CHECKED' : ''; $cb_report_chk = $rep_field->isShowOnResult() ? 'CHECKED' : ''; $tf_search_val = $rep_field->getPlaceQuery(); $tf_report_val = $rep_field->getPlaceResult(); $tf_colwidth_val = $rep_field->getColWidth(); echo '<TR class="' . util_get_alt_row_color($i) . '">'; echo "\n<td>" . $field->getLabel() . '</td>' . "\n<td>" . $field->getDescription() . '</td>' . "\n<td align=\"center\">" . '<input type="checkbox" name="' . $cb_search . '" value="1" ' . $cb_search_chk . ' ></td>' . "\n<td align=\"center\">" . '<input type="text" name="' . $tf_search . '" value="' . $tf_search_val . '" size="5" maxlen="5"></td>' . "\n<td align=\"center\">" . '<input type="checkbox" name="' . $cb_report . '" value="1" ' . $cb_report_chk . ' ></td>' . "\n<td align=\"center\">" . '<input type="text" name="' . $tf_report . '" value="' . $tf_report_val . '" size="5" maxlen="5"></td>' . "\n<td align=\"center\">" . '<input type="text" name="' . $tf_colwidth . '" value="' . $tf_colwidth_val . '" size="5" maxlen="5"></td>' . '</TR>'; $i++; } } echo '</TABLE>' . '<P><CENTER><INPUT TYPE="SUBMIT" VALUE="' . $Language->getText('global', 'btn_submit') . '"></CENTER>' . '</FORM>'; }
<P> <?php /* Delete this customer's responses in case they had back-arrowed Only do that for non anonymous users because if anonymous responses are allowed then they all have user_id = 0 and we don't want to delete them. */ if (user_isloggedin()) { $result = db_query("DELETE FROM survey_responses WHERE survey_id='{$survey_id}' AND group_id='{$group_id}' AND user_id='" . user_getid() . "'"); } /* Select the questions for this survey */ $quest_array = explode(',', db_result($result_survey, 0, "survey_questions")); $count = count($quest_array); $now = time(); $sanitizer = new SimpleSanitizer(); for ($i = 0; $i < $count; $i++) { /* Insert each form value into the responses table */ $val = "_{$quest_array[$i]}"; $value_sanitized = $sanitizer->sanitize(${$val}); $sql = "INSERT INTO survey_responses (user_id,group_id,survey_id,question_id,response,date) " . "VALUES ('" . user_getid() . "','{$group_id}','{$survey_id}','{$quest_array[$i]}','" . $value_sanitized . "','{$now}')"; $result = db_query($sql); if (!$result) { echo "<h1>" . $Language->getText('global', 'error') . "</h1>"; } } survey_footer(array());
/** * Prepare the column values in the artifact record * * @param ArtifactType (tracker) $at the tracker the artifact to prepare blelong to * @param array{ArtifactField} $fields the fields of the artifact to export * @param int $group_artifact_id the tracker ID * @param array $record array 'field_name' => 'field_value' * @param string $export type of export ('csv' or 'database' : for date format, csv will take user preference, wheareas for database the format will be mysql format.) */ function prepare_artifact_record($at, $fields, $group_artifact_id, &$record, $export) { global $datetime_fmt, $sys_lf, $Language; /* $record: Input: a row from the artifact table (passed by reference. Output: the same row with values transformed for export */ reset($fields); $line = ''; while (list(, $field) = each($fields)) { if ($field->isSelectBox() || $field->isMultiSelectBox()) { $values = array(); if ($field->isStandardField()) { $values[] = $record[$field->getName()]; } else { $values = $field->getValues($record['artifact_id']); } $label_values = $field->getLabelValues($group_artifact_id, $values); $record[$field->getName()] = SimpleSanitizer::unsanitize(join(",", $label_values)); } else { if ($field->isTextArea() || $field->isTextField() && $field->getDataType() == $field->DATATYPE_TEXT) { // all text fields converted from HTML to ASCII $record[$field->getName()] = prepare_textarea($record[$field->getName()]); } else { if ($field->isDateField()) { // replace the date fields (unix time) with human readable dates that // is also accepted as a valid format in future import if ($record[$field->getName()] == '') { // if date undefined then set datetime to 0. Ideally should // NULL as well but if we pass NULL it is interpreted as a string // later in the process $record[$field->getName()] = '0'; } else { if ($export == 'database') { $record[$field->getName()] = format_date($datetime_fmt, $record[$field->getName()]); } else { $record[$field->getName()] = format_date(util_get_user_preferences_export_datefmt(), $record[$field->getName()]); } } } else { if ($field->isFloat()) { $record[$field->getName()] = number_format($record[$field->getName()], 2); } } } } } // Follow ups $ah = new ArtifactHtml($at, $record['artifact_id']); $sys_lf_sav = $sys_lf; $sys_lf = "\n"; $record['follow_ups'] = $ah->showFollowUpComments($at->Group->getID(), true, Artifact::OUTPUT_EXPORT); $sys_lf = $sys_lf_sav; // Dependencies $result = $ah->getDependencies(); $rows = db_numrows($result); $dependent = ''; for ($i = 0; $i < $rows; $i++) { $dependent_on_artifact_id = db_result($result, $i, 'is_dependent_on_artifact_id'); $dependent .= $dependent_on_artifact_id . ","; } $record['is_dependent_on'] = $dependent !== '' ? substr($dependent, 0, strlen($dependent) - 1) : $Language->getText('global', 'none'); //CC $cc_list = $ah->getCCList(); $rows = db_numrows($cc_list); $cc = array(); for ($i = 0; $i < $rows; $i++) { $cc_email = db_result($cc_list, $i, 'email'); $cc[] = $cc_email; } $record['cc'] = implode(',', $cc); }
function displayAdd($user_id) { global $art_field_fact, $art_fieldset_fact, $sys_max_size_attachment, $Language; $hp = Codendi_HTMLPurifier::instance(); $fields_per_line = 2; // the column number is the number of field per line * 2 (label + value) // + the number of field per line -1 (a blank column between each pair "label-value" to give more space) $columns_number = $fields_per_line * 2 + ($fields_per_line - 1); $max_size = 40; $group = $this->ArtifactType->getGroup(); $group_artifact_id = $this->ArtifactType->getID(); $group_id = $group->getGroupId(); $result_fieldsets = $art_fieldset_fact->getAllFieldSetsContainingUsedFields(); // Display submit informations if any if ($this->ArtifactType->getSubmitInstructions()) { echo $hp->purify(util_unconvert_htmlspecialchars($this->ArtifactType->getSubmitInstructions()), CODENDI_PURIFIER_FULL); } // Beginning of the submission form with fixed fields echo '<FORM ACTION="" METHOD="POST" enctype="multipart/form-data" NAME="artifact_form"> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="' . $sys_max_size_attachment . '"> <INPUT TYPE="HIDDEN" NAME="func" VALUE="postadd"> <INPUT TYPE="HIDDEN" NAME="group_id" VALUE="' . (int) $group_id . '"> <INPUT TYPE="HIDDEN" NAME="atid" VALUE="' . (int) $group_artifact_id . '">'; echo '<TABLE><TR><TD class="artifact">'; $pm = ProjectManager::instance(); $html = ''; $html .= ' <TABLE width="100%"> <TR><TD VALIGN="TOP" COLSPAN="' . $columns_number . '"> <B>' . $Language->getText('tracker_include_artifact', 'group') . ':</B> ' . $hp->purify(util_unconvert_htmlspecialchars($pm->getProject($group_id)->getPublicName()), CODENDI_PURIFIER_CONVERT_HTML) . '</TD></TR>'; // Now display the variable part of the field list (depend on the project) foreach ($result_fieldsets as $fieldset_id => $result_fieldset) { // this variable will tell us if we have to display the fieldset or not (if there is at least one field to display or not) $display_fieldset = false; $fieldset_html = ''; $i = 0; $fields_in_fieldset = $result_fieldset->getAllUsedFields(); while (list($key, $field) = each($fields_in_fieldset)) { $field_html = new ArtifactFieldHtml($field); // if the field is a special field (except summary and original description) // or if not used by this project then skip it. // Plus only show fields allowed on the artifact submit_form if (!$field->isSpecial() || $field->getName() == 'summary' || $field->getName() == 'details') { if ($field->userCanSubmit($group_id, $group_artifact_id, $user_id)) { // display the artifact field with its default value // if field size is greatest than max_size chars then force it to // appear alone on a new line or it won't fit in the page // if the user can submit at least one field, we can display the fieldset this field is within $display_fieldset = true; $field_value = $field->getDefaultValue(); list($sz, ) = $field->getGlobalDisplaySize(); $label = $field_html->labelDisplay(false, false, true); $value = $field_html->display($group_artifact_id, $field_value, false, false); $star = $field->isEmptyOk() ? '' : '<span class="highlight"><big>*</big></b></span>'; if ($sz > $max_size || $field->getName() == 'details') { $fieldset_html .= "\n<TR>" . '<TD valign="top"><a class="artifact_field_tooltip" href="#" title="' . $hp->purify(SimpleSanitizer::unsanitize($field->getDescription()), CODENDI_PURIFIER_CONVERT_HTML) . '">' . $label . $star . '</a></td>' . '<TD valign="middle" colspan="' . ($columns_number - 1) . '">' . $value . '</TD>' . "\n</TR>"; $i = 0; } else { $fieldset_html .= $i % $fields_per_line ? '' : "\n<TR>"; $fieldset_html .= '<TD valign="middle"><a class="artifact_field_tooltip" href="#" title="' . $hp->purify(SimpleSanitizer::unsanitize($field->getDescription()), CODENDI_PURIFIER_CONVERT_HTML) . '">' . $label . $star . '</a></td>' . '<TD valign="middle">' . $value . '</TD>'; $i++; $fieldset_html .= $i % $fields_per_line ? '<td class="artifact_spacer"> </td>' : "\n</TR>"; } } } } // while // We display the fieldset only if there is at least one field inside that we can display if ($display_fieldset) { $html .= '<TR><TD COLSPAN="' . (int) $columns_number . '"> </TD></TR>'; $html .= '<TR class="boxtitle"><TD class="left" COLSPAN="' . (int) $columns_number . '"> <span title="' . $hp->purify(SimpleSanitizer::unsanitize($result_fieldset->getDescriptionText()), CODENDI_PURIFIER_CONVERT_HTML) . '">' . $hp->purify(SimpleSanitizer::unsanitize($result_fieldset->getLabel()), CODENDI_PURIFIER_CONVERT_HTML) . '</span></TD></TR>'; $html .= $fieldset_html; } } $html .= '</TABLE>'; echo $this->_getSection('artifact_section_details', $Language->getText('tracker_include_artifact', 'details'), $html, true); // // CC List // $html = ''; $html .= $Language->getText('tracker_include_artifact', 'fill_cc_list_msg'); $html .= $Language->getText('tracker_include_artifact', 'fill_cc_list_lbl'); $html .= '<textarea type="text" name="add_cc" id="tracker_cc" rows="2" cols="60" wrap="soft"></textarea>'; $html .= '<B> ' . $Language->getText('tracker_include_artifact', 'fill_cc_list_cmt') . ": </b>"; $html .= '<input type="text" name="cc_comment" size="40" maxlength="255">'; echo $this->_getSection('artifact_section_cc', $Language->getText('tracker_include_artifact', 'cc_list') . ' ' . help_button('tracker-v3.html#cc-list'), $html, true); // // File attachments // $html = ''; $html .= '<input type="file" name="input_file" size="40">'; $html .= $Language->getText('tracker_include_artifact', 'upload_file_msg', formatByteToMb($sys_max_size_attachment)); $html .= $Language->getText('tracker_include_artifact', 'upload_file_desc'); $html .= '<input type="text" name="file_description" size="60" maxlength="255">'; echo $this->_getSection('artifact_section_attachments', $Language->getText('tracker_include_artifact', 'attachment') . ' ' . help_button('tracker-v3.html#artifact-attachments'), $html, true); // // Artifact permissions // if ($this->ArtifactType->userIsAdmin()) { $checked = ''; if ($this->useArtifactPermissions()) { $checked = 'checked="checked"'; } $html = ''; $html .= '<p>'; $html .= '<label class="checkbox" for="use_artifact_permissions"><input type="hidden" name="use_artifact_permissions_name" value="0" />'; $html .= '<input type="checkbox" name="use_artifact_permissions_name" id="use_artifact_permissions" value="1" ' . $checked . ' />'; $html .= $GLOBALS['Language']->getText('tracker_include_artifact', 'permissions_label') . '</label>'; $html .= '</p>'; $html .= permission_fetch_selection_field('TRACKER_ARTIFACT_ACCESS', $this->getId(), $group_id); $html .= '<script type="text/javascript">'; $html .= "\n document.observe('dom:loaded', function() {\n if ( ! \$('use_artifact_permissions').checked) {\n \$('ugroups').disable();\n }\n \$('use_artifact_permissions').observe('click', function(evt) {\n if (this.checked) {\n \$('ugroups').enable();\n } else {\n \$('ugroups').disable();\n }\n });\n });\n </script>"; echo $this->_getSection('artifact_section_permissions', $Language->getText('tracker_include_artifact', 'permissions') . ' ' . help_button('tracker-v3.html#permissions-on-artifacts'), $html, false, $GLOBALS['Language']->getText('tracker_include_artifact', 'permissions_use_default')); } // // Final submit button // echo '<p><B><span class="highlight">' . $Language->getText('tracker_include_artifact', 'check_already_submitted') . '</b></p>'; echo '<div style="text-align:center"><INPUT CLASS="btn btn-primary" TYPE="SUBMIT" NAME="SUBMIT" VALUE="' . $Language->getText('tracker_include_artifact', 'submit') . '"></div>'; echo '</td></tr>'; echo '</table>'; echo '</form>'; }
require_once 'common/tracker/ArtifactFieldSetFactory.class.php'; require_once 'common/tracker/ArtifactFieldSet.class.php'; require_once 'common/tracker/ArtifactCanned.class.php'; require_once 'common/tracker/ArtifactFieldFactory.class.php'; require_once 'common/tracker/ArtifactField.class.php'; require_once 'common/tracker/ArtifactReport.class.php'; require_once 'common/tracker/ArtifactReportFactory.class.php'; require_once 'common/tracker/ArtifactReportField.class.php'; require_once 'common/tracker/Artifact.class.php'; require_once 'common/reference/ReferenceManager.class.php'; require_once '../include/ArtifactTypeHtml.class.php'; require_once '../include/ArtifactCannedHtml.class.php'; require_once '../include/ArtifactReportHtml.class.php'; require_once '../include/ArtifactHtml.class.php'; require_once 'common/include/SimpleSanitizer.class.php'; $sanitizer = new SimpleSanitizer(); $request =& HTTPRequest::instance(); $group_id = $request->getValidated('group_id', 'GroupId'); $atid = $request->getValidated('atid', 'uint'); $hp = Codendi_HTMLPurifier::instance(); if ($group_id && !$atid) { // // Manage trackers: create and delete // // get the Group object // $pm = ProjectManager::instance(); $group = $pm->getProject($group_id); if (!$group || !is_object($group) || $group->isError()) { exit_no_group(); }
private function getSelectBoxForTV3($requested_template_id, $radio, array $trackers_v3, $label) { $html = ''; $hp = Codendi_HTMLPurifier::instance(); $html .= '<h3><label>' . $radio . $label . '</label></h3>'; $html .= '<div class="tracker_create_mode">'; $checked = $requested_template_id ? '' : 'checked="checked"'; foreach ($trackers_v3 as $tracker_v3) { $html .= '<p>'; $html .= '<label>'; if ($requested_template_id == $tracker_v3->getID()) { $checked = 'checked="checked"'; } $html .= '<input type="radio" name="tracker_new_tv3" value="' . $tracker_v3->getID() . '" ' . $checked . ' />'; $html .= $hp->purify(SimpleSanitizer::unsanitize($tracker_v3->getName()), CODENDI_PURIFIER_CONVERT_HTML); $html .= '</label>'; $html .= '</p>'; $checked = ''; } $html .= '</div>'; return $html; }
/** * Send a notification * * @param array $recipients the list of recipients * @param array $headers the additional headers * @param string $subject the subject of the message * @param string $htmlBody the html content of the message * @param string $txtBody the text content of the message * * @return void */ protected function sendNotification($recipients, $headers, $subject, $htmlBody, $txtBody) { $mail = new Codendi_Mail(); $hp = Codendi_HTMLPurifier::instance(); $breadcrumbs = array(); $groupId = $this->getTracker()->getGroupId(); $project = $this->getTracker()->getProject(); $trackerId = $this->getTracker()->getID(); $artifactId = $this->getArtifact()->getID(); $breadcrumbs[] = '<a href="' . get_server_url() . '/projects/' . $project->getUnixName(true) . '" />' . $project->getPublicName() . '</a>'; $breadcrumbs[] = '<a href="' . get_server_url() . '/plugins/tracker/?tracker=' . (int) $trackerId . '" />' . $hp->purify(SimpleSanitizer::unsanitize($this->getTracker()->getName())) . '</a>'; $breadcrumbs[] = '<a href="' . get_server_url() . '/plugins/tracker/?aid=' . (int) $artifactId . '" />' . $hp->purify($this->getTracker()->getName() . ' #' . $artifactId) . '</a>'; $mail->getLookAndFeelTemplate()->set('breadcrumbs', $breadcrumbs); $mail->getLookAndFeelTemplate()->set('title', $hp->purify($subject)); $mail->setFrom($GLOBALS['sys_noreply']); $mail->addAdditionalHeader("X-Codendi-Project", $this->getArtifact()->getTracker()->getProject()->getUnixName()); $mail->addAdditionalHeader("X-Codendi-Tracker", $this->getArtifact()->getTracker()->getItemName()); $mail->addAdditionalHeader("X-Codendi-Artifact-ID", $this->getId()); foreach ($headers as $header) { $mail->addAdditionalHeader($header['name'], $header['value']); } $mail->setTo(implode(', ', $recipients)); $mail->setSubject($subject); if ($htmlBody) { $mail->setBodyHTML($htmlBody); } $mail->setBodyText($txtBody); $mail->send(); }
/** * Export muc logs of project $group_id * using monitoring openfire's plugin */ function export_muc_logs() { $request = HTTPRequest::instance(); $group_id = $request->get('group_id'); $pm = ProjectManager::instance(); $project = $pm->getProject($group_id); $any = $GLOBALS['Language']->getText('global', 'any'); if ($request->exist('log_start_date')) { $start_date = $request->get('log_start_date'); if ($start_date == '') { $start_date = $any; } } else { $week_ago = mktime(0, 0, 0, date("m"), date("d") - 7, date("Y")); $start_date = date("Y-m-d", $week_ago); } $end_date = $request->get('log_end_date'); if ($end_date == '') { $end_date = $any; } $mclm = IMMucLogManager::getMucLogManagerInstance(); $conversations = null; try { if ($start_date == $any && $end_date == $any) { $conversations = $mclm->getLogsByGroupName($project->getUnixName(true)); } elseif ($start_date == $any && $end_date != $any) { $conversations = $mclm->getLogsByGroupNameBeforeDate($project->getUnixName(true), $end_date); } elseif ($start_date != $any && $end_date == $any) { $conversations = $mclm->getLogsByGroupNameAfterDate($project->getUnixName(true), $start_date); } else { $conversations = $mclm->getLogsByGroupNameBetweenDates($project->getUnixName(true), $start_date, $end_date); } } catch (Exception $e) { echo $e->getMessage(); } $eol = "\n"; $col_list = array('date', 'nickname', 'message'); $lbl_list = array('date' => $GLOBALS['Language']->getText('plugin_im', 'muc_logs_time'), 'nickname' => $GLOBALS['Language']->getText('plugin_im', 'muc_logs_user'), 'message' => $GLOBALS['Language']->getText('plugin_im', 'muc_logs_message')); $purifier = Codendi_HTMLPurifier::instance(); $uh = new UserHelper(); $file_name = 'muc_logs_' . $project->getUnixName(); header('Content-Type: text/csv'); header('Content-Disposition: filename=' . $file_name . '.csv'); if (!$conversations || sizeof($conversations) == 0) { echo $GLOBALS['Language']->getText('plugin_im', 'no_muc_logs'); } else { // Build CSV header foreach ($lbl_list as $k => $v) { $lbl_list[$k] = SimpleSanitizer::unsanitize($v); } echo build_csv_header($col_list, $lbl_list) . $eol; // Build CSV content foreach ($conversations as $conv) { $time = format_date(util_get_user_preferences_export_datefmt(), $conv->getTimestamp()); if ($conv->getNickname() != null) { $nick = $conv->getNickname(); } else { $nick = ''; } $message = $conv->getMessage(); echo build_csv_record($col_list, array('date' => $time, 'nickname' => $nick, 'message' => $message)) . $eol; } } }
<?php // // Copyright (c) Xerox Corporation, Codendi Team, 2001-2009. All rights reserved // // $$ // // // Written for Codendi by Marc Nazarian // if (!user_isloggedin()) { exit_not_logged_in(); return; } if (!$ath->userIsAdmin()) { exit_permission_denied(); return; } // Check if this tracker is valid (not deleted) if (!$ath->isValid()) { exit_error($Language->getText('global', 'error'), $Language->getText('tracker_add', 'invalid')); } $ath->adminHeader(array('title' => $Language->getText('tracker_admin_fieldset', 'tracker_admin') . $Language->getText('tracker_admin_fieldset', 'fieldset_admin'), 'help' => 'TrackerAdministration.html#TrackerFieldSetsManagement')); $hp = Codendi_HTMLPurifier::instance(); echo '<H2>' . $Language->getText('tracker_import_admin', 'tracker') . ' \'<a href="/tracker/admin/?group_id=' . (int) $group_id . '&atid=' . (int) $atid . '">' . $hp->purify(SimpleSanitizer::unsanitize($ath->getName()), CODENDI_PURIFIER_CONVERT_HTML) . '</a>\' ' . $Language->getText('tracker_admin_fieldset', 'fieldset_admin') . '</H2>'; $ath->displayFieldSetList(); $ath->displayFieldSetCreateForm(); $ath->footer(array());
/** * Display the different Canned Responses associated to this tracker * * @return void */ function displayCannedResponses() { global $Language; $group_id = $this->ArtifactType->Group->getID(); $atid = $this->ArtifactType->getID(); $hp = Codendi_HTMLPurifier::instance(); echo '<H2>' . $Language->getText('tracker_import_admin', 'tracker') . ' \'<a href="/tracker?group_id=' . (int) $group_id . '&atid=' . (int) $atid . '">' . $hp->purify(SimpleSanitizer::unsanitize($this->ArtifactType->getName()), CODENDI_PURIFIER_CONVERT_HTML) . '</a>\' - ' . $Language->getText('tracker_admin_index', 'create_modify_cannedresponse') . '</a></H2>'; $result = $this->ArtifactType->getCannedResponses(); $rows = db_numrows($result); echo "<P>"; if ($result && $rows > 0) { /* Links to update pages */ echo "\n<H3>" . $Language->getText('tracker_include_canned', 'existing_responses') . "</H3><P>"; $title_arr = array(); $title_arr[] = $Language->getText('tracker_include_canned', 'title'); $title_arr[] = $Language->getText('tracker_include_canned', 'body_extract'); $title_arr[] = $Language->getText('tracker_include_canned', 'delete'); echo html_build_list_table_top($title_arr); $atid = $this->ArtifactType->getID(); $g = $this->ArtifactType->getGroup(); $group_id = $g->getID(); for ($i = 0; $i < $rows; $i++) { echo '<TR class="' . util_get_alt_row_color($i) . '">' . '<TD><A HREF="/tracker/admin?func=canned&update_canned=1&artifact_canned_id=' . (int) db_result($result, $i, 'artifact_canned_id') . '&atid=' . (int) $atid . '&group_id=' . (int) $group_id . '">' . $hp->purify(util_unconvert_htmlspecialchars(db_result($result, $i, 'title')), CODENDI_PURIFIER_CONVERT_HTML) . '</A></TD>' . '<TD>' . $hp->purify(util_unconvert_htmlspecialchars(substr(db_result($result, $i, 'body'), 0, 160)), CODENDI_PURIFIER_CONVERT_HTML) . '<b>...</b></TD>' . '<td align="center"><A HREF="/tracker/admin/?func=canned&delete_canned=1&artifact_canned_id=' . (int) db_result($result, $i, 'artifact_canned_id') . '&atid=' . (int) $atid . '&group_id=' . (int) $group_id . '" onClick="return confirm(\'' . addslashes($Language->getText('tracker_include_canned', 'delete_canned', db_result($result, $i, 'title'))) . '\')">' . '<img src="' . util_get_image_theme("ic/trash.png") . '" border="0"></A></td></TR>'; } echo '</TABLE>'; } else { echo "\n<H3>" . $Language->getText('tracker_include_canned', 'no_canned_response') . "</H3>"; } }
// if (!user_isloggedin()) { exit_not_logged_in(); return; } if (!$ath->userIsAdmin()) { exit_permission_denied(); return; } // Check if this tracker is valid (not deleted) if (!$ath->isValid()) { exit_error($Language->getText('global', 'error'), $Language->getText('tracker_add', 'invalid')); } $ath->adminHeader(array('title' => $Language->getText('tracker_admin_field_usage', 'tracker_admin') . $Language->getText('tracker_admin_field_values_details', 'values_admin'), 'help' => 'tracker-v3.html#browsing-tracker-field-values')); $hp = Codendi_HTMLPurifier::instance(); echo "<H2>" . $Language->getText('tracker_import_admin', 'tracker') . ' \'<a href="/tracker/admin/?group_id=' . (int) $group_id . "&atid=" . (int) $atid . '">' . $hp->purify(SimpleSanitizer::unsanitize($ath->getName()), CODENDI_PURIFIER_CONVERT_HTML) . "</a>'" . $Language->getText('tracker_admin_field_values_details', 'manage_for', $hp->purify(SimpleSanitizer::unsanitize($field->getLabel()), CODENDI_PURIFIER_CONVERT_HTML)) . "</H2>"; if (!$field->isSelectBox() && !$field->isMultiSelectBox()) { $ath->displayDefaultValueForm($field_id, $field->getDefaultValue()); } else { $val_func = $field->getValueFunction(); if (isset($val_func[0]) && $val_func[0]) { $ath->displayValueFunctionForm($field_id, $val_func); $ath->displayDefaultValueFunctionForm($field_id, $field->getDefaultValue(), $val_func); } else { $ath->displayFieldValuesList($field_id); $ath->displayDefaultValueForm($field_id, $field->getDefaultValue()); // For severity field, we don't display the Bind form or the Create Form if ($field->getName() != "severity" && $field->getName() != "status_id" || user_is_super_user()) { echo '<hr>'; $ath->displayFieldValueForm("value_create", $field_id); $ath->displayValueFunctionForm($field_id, NULL, $Language->getText('global', 'or'));
/** * set the predefined values of the field parsed at column column_number */ function setPredefinedValue($field, $column_number) { if ($field && ($field->getDisplayType() == "SB" || $field->getDisplayType() == "MB")) { //special case for submitted by if ($field->getName() == "submitted_by") { // simply put nothing in predefined values for submitted_by // as we accept all logged users, even None for allow-anon trackers //for all other fields not submitted by } else { $predef_val = $field->getFieldPredefinedValues($this->ath->getID()); $count = db_numrows($predef_val); for ($i = 0; $i < $count; $i++) { $values[SimpleSanitizer::unsanitize(db_result($predef_val, $i, 1))] = db_result($predef_val, $i, 0); } $this->predefined_values[$column_number] = $values; } } }
/** * trackerlist_to_soap : return the soap ArrayOfTracker structure giving an array of PHP Tracker Object. * @access private * * WARNING : We check the permissions here : only the readable trackers are returned. * * @param array of Object{Tracker} $tf_arr the array of ArtifactTrackers to convert. * @return array the SOAPArrayOfTracker corresponding to the array of Trackers Object */ private function trackerlist_to_soap($tf_arr, PFUser $user) { $return = array(); foreach ($tf_arr as $tracker_id => $tracker) { // Check if this tracker is active (not deleted) if (!$tracker->isActive()) { return new SoapFault(get_tracker_fault, 'This tracker is no longer valid.', 'getTrackerList'); } // Check if the user can view this tracker if ($tracker->userCanView($user)) { // get the reports description (light desc of reports) //$report_fact = new ArtifactReportFactory(); /* if (!$report_fact || !is_object($report_fact)) { return new SoapFault(get_artifact_type_fault, 'Could Not Get ArtifactReportFactory', 'getArtifactTrackers'); } $reports_desc = artifactreportsdesc_to_soap($report_fact->getReports($at_arr[$i]->data_array['group_artifact_id'], $user_id)); */ $return[] = array('tracker_id' => $tracker->getId(), 'group_id' => $tracker->getGroupID(), 'name' => SimpleSanitizer::unsanitize($tracker->getName()), 'description' => SimpleSanitizer::unsanitize($tracker->getDescription()), 'item_name' => $tracker->getItemName()); } } return $return; }
protected function displaySubmitJavascript() { $hp = Codendi_HTMLPurifier::instance(); $html = '<script type="text/javascript">'; $html .= "codendi.tracker.fields.add('" . (int) $this->getID() . "', '" . $this->getName() . "', '" . $hp->purify(SimpleSanitizer::unsanitize($this->getLabel()), CODENDI_PURIFIER_JS_QUOTE) . "')"; $default_value = $this->getDefaultValue(); $values = $this->getBind()->getAllValues(); $html .= "\n\t.addOption('" . $hp->purify(SimpleSanitizer::unsanitize('None'), CODENDI_PURIFIER_JS_QUOTE) . "'.escapeHTML(), '100', " . ($default_value == 100 ? 'true' : 'false') . ")"; foreach ($values as $id => $value) { $html .= "\n\t.addOption('" . $hp->purify(SimpleSanitizer::unsanitize($value->getLabel()), CODENDI_PURIFIER_JS_QUOTE) . "'.escapeHTML(), '" . (int) $id . "', " . ($id == $default_value ? 'true' : 'false') . ")"; } $html .= ";\n"; $html .= '</script>'; return $html; }
function artifactCC_to_soap($group_id, $group_artifact_id, $artifact_id, $artifact_cc_list) { $return = array(); $rows = db_numrows($artifact_cc_list); for ($i = 0; $i < $rows; $i++) { // retrieve the field, for permission checks $return[] = array('artifact_cc_id' => db_result($artifact_cc_list, $i, 'artifact_cc_id'), 'artifact_id' => $artifact_id, 'email' => db_result($artifact_cc_list, $i, 'email'), 'added_by' => db_result($artifact_cc_list, $i, 'added_by'), 'added_by_name' => db_result($artifact_cc_list, $i, 'user_name'), 'comment' => SimpleSanitizer::unsanitize(db_result($artifact_cc_list, $i, 'comment')), 'date' => db_result($artifact_cc_list, $i, 'date')); } return $return; }
require_once 'common/tracker/ArtifactFieldSetFactory.class.php'; require_once 'common/tracker/ArtifactField.class.php'; require_once 'common/tracker/ArtifactFieldFactory.class.php'; require_once 'common/tracker/ArtifactReportFactory.class.php'; require_once 'common/tracker/ArtifactReport.class.php'; require_once 'common/tracker/ArtifactReportField.class.php'; require_once './include/ArtifactFieldHtml.class.php'; require_once './include/ArtifactReportHtml.class.php'; require_once './include/ArtifactImportHtml.class.php'; require_once 'www/project/admin/permissions.php'; require_once 'common/include/SimpleSanitizer.class.php'; $aid = $request->getValidated('aid', 'uint', 0); $atid = $request->getValidated('atid', 'uint', 0); $group_id = $request->getValidated('group_id', 'GroupId', 0); $em = EventManager::instance(); $sanitizer = new SimpleSanitizer(); $hp = Codendi_HTMLPurifier::instance(); if ($aid && !$atid) { // We have the artifact id, but not the tracker id $sql = "SELECT group_artifact_id FROM artifact WHERE artifact_id= " . db_ei($aid); $result = db_query($sql); if (db_numrows($result) > 0) { $row = db_fetch_array($result); $atid = $row['group_artifact_id']; } } if ($atid && !$group_id) { // We have the artifact group id, but not the group id $sql = "SELECT group_id FROM artifact_group_list WHERE group_artifact_id=" . db_ei($atid); $result = db_query($sql); if (db_numrows($result) > 0) {
/** * * Check whether empty values are allowed for the bug fields * * @param Array $field_array associative array of field_name -> value * @param Boolean $showFeedback default value set to true, manage the display or not of the error message with reference to the field label * * @return boolean */ function checkEmptyFields($field_array, $showFeedback = true) { global $Language; $bad_fields = array(); reset($field_array); while (list($key, $val) = each($field_array)) { //Those fields are automatically filled out if ($key != 'artifact_id' && $key != 'open_date' && $key != 'last_update_date') { $field = $this->getFieldFromName($key); if ($field) { if ($field->isMultiSelectBox()) { $is_empty = implode(",", $val) == "100"; } else { $is_empty = $field->isSelectBox() ? $val == 100 : $val == ''; } if ($is_empty && !$field->isEmptyOk()) { $bad_fields[] = $field->getLabel(); } } } } if (count($bad_fields) > 0) { $hp = Codendi_HTMLPurifier::instance(); $bad_fields_escaped = array(); foreach ($bad_fields as $f) { $bad_fields_escaped[] = $hp->purify(SimpleSanitizer::unsanitize($f), CODENDI_PURIFIER_CONVERT_HTML); } if ($showFeedback) { $GLOBALS['Response']->addFeedback('error', $Language->getText('tracker_common_field_factory', 'missing', join(', ', $bad_fields_escaped)), CODENDI_PURIFIER_DISABLED); $this->setError($Language->getText('tracker_common_field_factory', 'missing', join(', ', $bad_fields))); } return false; } else { return true; } }
$result = db_query($q); $all_results[] = $result; $rows = db_numrows($result); } } else { $result = db_query($sql); $rows = db_numrows($result); } if ($export == 'artifact') { // Send the result in CSV format if ($result && $rows > 0) { $tbl_name = str_replace(' ', '_', 'artifact_' . $at->getItemName()); header('Content-Type: text/csv'); header('Content-Disposition: filename=' . $tbl_name . '_' . $dbname . '.csv'); foreach ($lbl_list as $k => $v) { $lbl_list[$k] = SimpleSanitizer::unsanitize($v); } echo build_csv_header($col_list, $lbl_list) . $eol; if ($multiple_queries) { $multiarr = array(); for ($i = 0; $i < $rows; $i++) { foreach ($all_results as $result) { $multiarr = array_merge($multiarr, db_fetch_array($result)); } prepare_artifact_record($ath, $fields, $atid, $multiarr, 'csv'); echo build_csv_record($col_list, $multiarr) . $eol; } } else { while ($arr = db_fetch_array($result)) { prepare_artifact_record($at, $fields, $atid, $arr, 'csv'); echo build_csv_record($col_list, $arr) . $eol;
function artifactfile_to_soap($file_id, $attachedfiles_arr, $set_bin_data) { $return = null; $rows = db_numrows($attachedfiles_arr); for ($i = 0; $i < $rows; $i++) { $file = array(); $file['id'] = db_result($attachedfiles_arr, $i, 'id'); $file['artifact_id'] = db_result($attachedfiles_arr, $i, 'artifact_id'); $file['filename'] = db_result($attachedfiles_arr, $i, 'filename'); $file['description'] = SimpleSanitizer::unsanitize(db_result($attachedfiles_arr, $i, 'description')); if ($set_bin_data) { $bin_data = db_result($attachedfiles_arr, $i, 'bin_data'); $file['bin_data'] = $bin_data; } $file['filesize'] = db_result($attachedfiles_arr, $i, 'filesize'); $file['filetype'] = db_result($attachedfiles_arr, $i, 'filetype'); $file['adddate'] = db_result($attachedfiles_arr, $i, 'adddate'); $file['submitted_by'] = db_result($attachedfiles_arr, $i, 'user_name'); if ($file['id'] == $file_id) { $return = $file; } } return $return; }
function displayChooseSourceAndTarget($engine, $request, $current_user, $source_field_id) { $hp = Codendi_HTMLPurifier::instance(); $this->tracker->displayAdminItemHeader($engine, 'dependencies'); echo '<p>' . $GLOBALS['Language']->getText('plugin_tracker_field_dependencies', 'inline_help') . '</p>'; echo '<form action="' . TRACKER_BASE_URL . '/?" method="GET">'; echo '<input type="hidden" name="tracker" value="' . (int) $this->tracker->id . '" />'; echo '<input type="hidden" name="func" value="admin-dependencies" />'; //source $source_field = $this->form_element_factory->getFormElementById($source_field_id); if (!$source_field) { echo '<select name="source_field" onchange="this.form.submit()">'; echo '<option value="0">' . $GLOBALS['Language']->getText('plugin_tracker_field_dependencies', 'choose_source_field') . '</option>'; $sources = $this->getAllSourceFields(null); foreach ($sources as $id => $field) { echo '<option value="' . $id . '">'; echo $hp->purify(SimpleSanitizer::unsanitize($field->getLabel()), CODENDI_PURIFIER_CONVERT_HTML); echo '</option>'; } echo '</select>'; } else { echo '<input type="hidden" name="source_field" value="' . $source_field_id . '" />'; echo $source_field->getLabel(); } echo ' → '; //target $disabled = ''; if (!$source_field) { $disabled = 'disabled="disabled" readonly="readonly"'; } echo '<select name="target_field" ' . $disabled . '>'; echo '<option value="0">' . $GLOBALS['Language']->getText('plugin_tracker_field_dependencies', 'choose_target_field') . '</option>'; if ($source_field) { $sources = $this->getAllTargetFields($source_field_id); foreach ($sources as $id => $field) { echo '<option value="' . $id . '">'; echo $hp->purify(SimpleSanitizer::unsanitize($field->getLabel()), CODENDI_PURIFIER_CONVERT_HTML); echo '</option>'; } } echo '</select>'; echo ' <input type="submit" name="choose_source" value="' . $GLOBALS['Language']->getText('global', 'btn_submit') . '" />'; echo '</form>'; //Shortcut $sources_targets = $this->getRuleFactory()->getInvolvedFieldsByTrackerId($this->tracker->id); if (count($sources_targets)) { $dependencies = array(); foreach ($sources_targets as $row) { if ($source = $this->form_element_factory->getFormElementById($row['source_field_id'])) { if ($target = $this->form_element_factory->getFormElementById($row['target_field_id'])) { $d = '<a href="' . TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => 'admin-dependencies', 'source_field' => $row['source_field_id'], 'target_field' => $row['target_field_id'])) . '">'; $d .= $source->getLabel() . ' → ' . $target->getLabel(); $d .= '</a>'; $dependencies[] = $d; } } } if ($dependencies) { echo '<p>' . $GLOBALS['Language']->getText('plugin_tracker_field_dependencies', 'choose_existing_dependency') . '</p>'; echo '<ul><li>' . implode('</li><li>', $dependencies) . '</li></ul>'; } echo '</ul>'; } $this->tracker->displayFooter($engine); }
<tr class="boxtable"> <td class="boxtitle"> </td> <td class="boxtitle"> <div align="center"><b>' . $Language->getText('tracker_import_admin', 'art_data_import') . '</b></div> </td> <td class="boxtitle"> <div align="center"><b>' . $Language->getText('tracker_import_admin', 'import_format') . '</b></div> </td> </tr>'; // Get the artfact type list $at_arr = $atf->getArtifactTypes(); if ($at_arr && count($at_arr) >= 1) { for ($j = 0; $j < count($at_arr); $j++) { echo ' <tr class="' . util_get_alt_row_color($j) . '"> <td><b>' . $Language->getText('tracker_import_admin', 'tracker') . ': ' . $hp->purify(SimpleSanitizer::unsanitize($at_arr[$j]->getName()), CODENDI_PURIFIER_CONVERT_HTML) . '</b></td> <td align="center"> <a href="/tracker/index.php?group_id=' . (int) $group_id . '&atid=' . (int) $at_arr[$j]->getID() . '&user_id=' . (int) user_getid() . '&func=import">' . $Language->getText('tracker_import_admin', 'import') . '</a> </td> <td align="center"> <a href="/tracker/index.php?group_id=' . (int) $group_id . '&atid=' . (int) $at_arr[$j]->getID() . '&user_id=' . (int) user_getid() . '&mode=showformat&func=import">' . $Language->getText('tracker_import_admin', 'show_format') . '</a> </td> </tr>'; } } echo '</TABLE>'; project_admin_footer(array()); } } else { exit_missing_param(); }
// Get the artfact type list $at_arr = $atf->getArtifactTypes(); if (!$at_arr || count($at_arr) < 1) { $no_rows = 1; echo '<H2>' . $Language->getText('search_index', 'no_match_found', htmlentities(stripslashes($words), ENT_QUOTES, 'UTF-8')) . '</H2>'; } else { for ($i = 0; $i < count($at_arr); $i++) { $atid = $at_arr[$i]->getID(); $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(',', $current_user->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, artifact.artifact_id DESC \n LIMIT " . db_ei($offset) . ", 25"; $result = db_query($sql); if ($rows_returned = db_result(db_query('SELECT FOUND_ROWS() as nb'), 0, 'nb')) { echo '<h3>' . $hp->purify(SimpleSanitizer::unsanitize($at_arr[$i]->getName()), CODENDI_PURIFIER_CONVERT_HTML) . '</h3>'; $art_field_fact = new ArtifactFieldFactory($at_arr[$i]); $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");
protected function displayCSVImportOverview($project, $group_id, $user) { $hp = Codendi_HTMLPurifier::instance(); $breadcrumbs = array(); $toolbar = array(); $this->displayHeader($project, $GLOBALS['Language']->getText('plugin_tracker', 'trackers'), $breadcrumbs, $toolbar); $html = ''; $tf = TrackerFactory::instance(); $trackers = $tf->getTrackersByGroupId($group_id); // Show all the fields currently available in the system echo '<table width="100%" border="0" cellspacing="1" cellpadding="2">'; echo ' <tr class="boxtable">'; echo ' <td class="boxtitle"> </td>'; echo ' <td class="boxtitle">'; echo ' <div align="center"><b>' . $GLOBALS['Language']->getText('plugin_tracker_import_admin', 'art_data_import') . '</b></div>'; echo ' </td>'; echo ' <td class="boxtitle">'; echo ' <div align="center"><b>' . $GLOBALS['Language']->getText('plugin_tracker_import_admin', 'import_format') . '</b></div>'; echo ' </td>'; echo ' </tr>'; $cpt = 0; foreach ($trackers as $tracker) { if ($tracker->userIsAdmin($user)) { echo '<tr class="' . util_get_alt_row_color($cpt) . '">'; echo ' <td><b>' . $GLOBALS['Language']->getText('plugin_tracker_import_admin', 'tracker') . ': ' . $hp->purify(SimpleSanitizer::unsanitize($tracker->getName()), CODENDI_PURIFIER_CONVERT_HTML) . '</b></td>'; echo ' <td align="center"><a href="' . TRACKER_BASE_URL . '/?tracker=' . (int) $tracker->getID() . '&func=admin-csvimport">' . $GLOBALS['Language']->getText('plugin_tracker_import_admin', 'import') . '</a></td>'; echo ' <td align="center"><a href="' . TRACKER_BASE_URL . '/?tracker=' . (int) $tracker->getID() . '&func=csvimport-showformat">' . $GLOBALS['Language']->getText('plugin_tracker_import_admin', 'show_format') . '</a></td>'; echo '</tr>'; } } echo '</table>'; $this->displayFooter($project); }
/** * Display the list of attached files * * @param group_id: the group id * @param group_artifact_id: the artifact type ID * @param ascii: ascii mode * * @return void */ function showAttachedFiles($group_id, $group_artifact_id, $ascii = false, $pv = 0) { global $Language; $hp = $this->getHtmlPurifier(); // // show the files attached to this artifact // $result = $this->getAttachedFiles(); $rows = db_numrows($result); // No file attached -> return now if ($rows <= 0) { if ($ascii) { $out = $Language->getText('tracker_include_artifact', 'no_file_attached') . $GLOBALS['sys_lf']; } else { $out = '<H4>' . $Language->getText('tracker_include_artifact', 'no_file_attached') . '</H4>'; } return $out; } // Header first if ($ascii) { $out = $Language->getText('tracker_include_artifact', 'file_attachment') . $GLOBALS['sys_lf'] . str_repeat("*", strlen($Language->getText('tracker_include_artifact', 'file_attachment'))); } else { $title_arr = array(); $title_arr[] = $Language->getText('tracker_include_artifact', 'name'); $title_arr[] = $Language->getText('tracker_include_artifact', 'desc'); $title_arr[] = $Language->getText('tracker_include_artifact', 'size_kb'); $title_arr[] = $Language->getText('global', 'by'); $title_arr[] = $Language->getText('tracker_include_artifact', 'posted_on'); if ($pv == 0) { $title_arr[] = $Language->getText('tracker_include_canned', 'delete'); } $out = html_build_list_table_top($title_arr); } // Determine what the print out format is based on output type (Ascii, HTML) if ($ascii) { $fmt = $GLOBALS['sys_lf'] . $GLOBALS['sys_lf'] . "------------------------------------------------------------------" . $GLOBALS['sys_lf'] . $Language->getText('tracker_import_utils', 'date') . ": %s " . $Language->getText('tracker_include_artifact', 'name') . ": %s " . $Language->getText('tracker_include_artifact', 'size') . ": %dKB " . $Language->getText('global', 'by') . ": %s" . $GLOBALS['sys_lf'] . "%s" . $GLOBALS['sys_lf'] . "%s"; } else { $fmt = "" . $GLOBALS['sys_lf'] . '<TR class="%s"><td>%s</td><td>%s</td><td align="center">%s</td><td align="center">%s</td><td align="center">%s</td>'; if ($pv == 0) { $fmt .= '<td align="center">%s</td>'; } $fmt .= '</tr>'; } // Determine which protocl to use for embedded URL in ASCII format $server = get_server_url(); // Loop throuh the attached files and format them for ($i = 0; $i < $rows; $i++) { $artifact_file_id = db_result($result, $i, 'id'); $href = "/tracker/download.php?artifact_id=" . (int) $this->getID() . "&id=" . (int) $artifact_file_id; if ($ascii) { $out .= sprintf($fmt, format_date($GLOBALS['Language']->getText('system', 'datefmt'), db_result($result, $i, 'adddate')), db_result($result, $i, 'filename'), intval(db_result($result, $i, 'filesize') / 1024), db_result($result, $i, 'user_name'), SimpleSanitizer::unsanitize(db_result($result, $i, 'description')), $server . $href); } else { // show CC delete icon if one of the condition is met: // (a) current user is group member // (b) the current user is the person who added a gieven name in CC list if (user_ismember($this->ArtifactType->getGroupID()) || user_getname(user_getid()) == db_result($result, $i, 'user_name')) { $html_delete = '<a href="?func=delete_file&group_id=' . (int) $group_id . "&atid=" . (int) $group_artifact_id . "&aid=" . (int) $this->getID() . "&id=" . (int) db_result($result, $i, 'id') . '" ' . ' onClick="return confirm(\'' . $Language->getText('tracker_include_artifact', 'delete_attachment') . '\')">' . '<IMG SRC="' . util_get_image_theme("ic/trash.png") . '" HEIGHT="16" WIDTH="16" BORDER="0" ALT="' . $Language->getText('global', 'btn_delete') . '"></A>'; } else { $html_delete = '-'; } $out .= sprintf($fmt, util_get_alt_row_color($i), '<a href="' . $href . '">' . $hp->purify(db_result($result, $i, 'filename'), CODENDI_PURIFIER_CONVERT_HTML) . '</a>', $hp->purify(SimpleSanitizer::unsanitize(db_result($result, $i, 'description')), CODENDI_PURIFIER_BASIC, $group_id), intval(db_result($result, $i, 'filesize') / 1024), util_user_link(db_result($result, $i, 'user_name')), format_date($GLOBALS['Language']->getText('system', 'datefmt'), db_result($result, $i, 'adddate')), $html_delete); } } // for // final touch... $out .= $ascii ? "" . $GLOBALS['sys_lf'] . "" : "</TABLE>"; return $out; }
function displayEditForm($source_field = false, $target_field = false, $source_value = false, $target_value = false) { $hp = Codendi_HTMLPurifier::instance(); echo '<noscript class="error">' . $GLOBALS['Language']->getText('tracker_field_dependencies', 'noscript') . '</noscript>'; echo '<form action="' . $this->href . '" method="post" id="edit_rule_form"><div id="edit_rule">'; /**/ echo '<table border=0><thead><tr class="boxtable"><td class="boxtitle">'; echo $GLOBALS['Language']->getText('tracker_field_dependencies', 'source'); $onchange = '$(\'source_field_hidden\').value = $(\'source_field\').value;' . '$(\'target_field_hidden\').value = $(\'target_field\').value;' . 'Form.Element.disable(\'source_field\');' . 'Form.Element.disable(\'target_field\');' . 'this.up(\'table\').down(\'tbody\').update(\'<tr><td align=\\\'center\\\' colspan=\\\'2\\\'>' . addslashes(str_replace('"', "'", $GLOBALS['HTML']->getImage('ic/spinner.gif'))) . '</td></tr>\');' . 'this.form.submit();'; echo PHP_EOL . '<select id="source_field" name="source_field" onchange="' . $onchange . '">' . PHP_EOL; echo '<option value="-1">' . $GLOBALS['Language']->getText('tracker_field_dependencies', 'choose_field') . '</option>'; $sources = $this->getAllSourceFields($target_field); foreach ($sources as $id => $field) { $highlight = $this->fieldHasTarget($this->artifact_type->getId(), $field->getId()) ? ' class="boxhighlight" ' : ' '; $selected = $field->getId() == $source_field ? ' selected="selected" ' : ' '; echo '<option value="' . $id . '" ' . $highlight . $selected . '>'; echo $hp->purify(SimpleSanitizer::unsanitize($field->getLabel()), CODENDI_PURIFIER_CONVERT_HTML); echo '</option>'; } echo '</select>'; echo '</td><td class="boxtitle">'; echo $GLOBALS['Language']->getText('tracker_field_dependencies', 'target'); echo '<select id="target_field" name="target_field" onchange="' . $onchange . '">'; echo '<option value="-1">' . $GLOBALS['Language']->getText('tracker_field_dependencies', 'choose_field') . '</option>'; $targets = $this->getAllTargetFields($source_field); foreach ($targets as $id => $field) { $highlight = $this->fieldHasSource($this->artifact_type->getId(), $field->getId()) ? ' class="boxhighlight" ' : ' '; $selected = $field->getId() == $target_field ? ' selected="selected" ' : ' '; echo '<option value="' . $id . '" ' . $highlight . $selected . '>'; echo $hp->purify(SimpleSanitizer::unsanitize($field->getLabel()), CODENDI_PURIFIER_CONVERT_HTML); echo '</option>'; } echo '</select>'; //Preload spinner echo $GLOBALS['HTML']->getImage('ic/spinner.gif', array('style' => 'display:none')); echo '</td></tr></thead>'; echo '<tbody><tr style="vertical-align:top;" class="boxitemalt"><td>'; if ($source_field && $target_field && isset($sources[$source_field]) && isset($targets[$target_field])) { //Source values echo '<table width="100%" cellpadding="0" cellspacing="0">'; $values = $sources[$source_field]->getFieldPredefinedValues($this->artifact_type->getID()); if (db_numrows($values) >= 1) { while ($row = db_fetch_array($values)) { echo '<tr id="source_' . $source_field . '_' . $target_field . '_' . (int) $row[0] . '">'; echo '<td style="width: 1%;">'; echo '<input type="checkbox" id="source_' . $source_field . '_' . $target_field . '_' . (int) $row[0] . '_chk" name="source_' . $source_field . '_' . $target_field . '_' . (int) $row[0] . '_chk" style="visibility: hidden;" onclick="admin_checked(this.id)" />'; echo '</td><td style="cursor: pointer;" onclick="return admin_selectSourceEvent(this)"><span> </span><label style="cursor: pointer;">'; $v = $hp->purify(SimpleSanitizer::unsanitize($row[1]), CODENDI_PURIFIER_CONVERT_HTML); if ($this->valueHasTarget($this->artifact_type->getId(), $source_field, $row[0], $target_field)) { echo '<strong>' . $v . '</strong>'; } else { echo $v; } echo ' </label></td>'; echo '<td style="text-align: right;"><div id="source_' . $source_field . '_' . $target_field . '_' . (int) $row[0] . '_arrow" style="visibility: hidden;">→</div></td>'; echo '</tr>'; } } echo '</table>'; echo '</td><td>'; //Target values echo '<table width="100%" cellpadding="0" cellspacing="0">'; $values = $targets[$target_field]->getFieldPredefinedValues($this->artifact_type->getID()); if (db_numrows($values) >= 1) { while ($row = db_fetch_array($values)) { echo '<tr id="target_' . $source_field . '_' . $target_field . '_' . (int) $row[0] . '">'; echo '<td style="text-align: right; width: 1%"><div id="target_' . $source_field . '_' . $target_field . '_' . (int) $row[0] . '_arrow" style="visibility: hidden;">→</div></td>'; echo '<td style="width: 1%;">'; echo '<input type="checkbox" id="target_' . $source_field . '_' . $target_field . '_' . (int) $row[0] . '_chk" name="target_' . $source_field . '_' . $target_field . '_' . (int) $row[0] . '_chk" style="visibility: hidden;" onclick="admin_checked(this.id)" />'; echo '</td><td style="cursor: pointer;" onclick="return admin_selectTargetEvent(this)"><span> </span><label style="cursor: pointer;">'; $v = $hp->purify(SimpleSanitizer::unsanitize($row[1]), CODENDI_PURIFIER_CONVERT_HTML); if ($this->valueHasSource($this->artifact_type->getId(), $target_field, $row[0], $source_field)) { echo '<strong>' . $v . '</strong>'; } else { echo $v; } echo ' </label></td>'; echo '</tr>'; } } echo '</table>'; } else { echo '</td><td>'; } echo '</td></tr>'; echo '<tr id="save_panel" class="boxtitle">'; echo '<td colspan="2" style="text-align: center;">'; echo '<input type="submit" value="' . $GLOBALS['Language']->getText('global', 'btn_submit') . '" id="save_btn"/>'; echo '<button id="reset_btn">' . $GLOBALS['Language']->getText('global', 'btn_reset') . '</button>'; echo '</td>'; echo '</tr>'; echo '</tbody>'; echo '</table>'; echo '</div>'; /**/ echo '<input type="hidden" id="save" name="save" value="no" />'; echo '<input type="hidden" id="source_field_hidden" name="source_field" value="" />'; echo '<input type="hidden" id="target_field_hidden" name="target_field" value="" />'; echo '<input type="hidden" id="value" name="value" value="" />'; echo '<input type="hidden" id="direction_type" name="direction_type" value="" />'; echo '</form>'; echo '<script type="text/javascript">' . "\n"; echo "//<![CDATA[\n"; $this->displayFieldsAndValuesAsJavascript(); $this->displayRulesAsJavascript(); echo "var messages = {\n"; echo "btn_save_rule: '" . addslashes($GLOBALS['Language']->getText('global', 'btn_submit')) . "',\n"; echo "btn_reset: '" . addslashes($GLOBALS['Language']->getText('global', 'btn_reset')) . "'\n"; echo "};\n"; echo "document.observe('dom:loaded', buildAdminUI);"; echo "\n//------------------------------------------------------\n"; echo "\n" . '//]]></script>'; }
/** * Display the dropdownlist (select list) of all available fieldsets of the tracker $artifact_group_id * * @param int $artifact_group_id the tracker id * @param int $selected_field_set_id the id of the fieldset that must be selected, or false if no default fieldset is selected */ function displayFieldSetDropDownList($artifact_group_id, $selected_fieldset_id = false) { $hp = Codendi_HTMLPurifier::instance(); global $ath, $art_fieldset_fact; $fieldsets = $art_fieldset_fact->getArtifactFieldSetsFromId($artifact_group_id); $html = '<select name="field_set_id">'; foreach ($fieldsets as $fieldset) { $html .= '<option value="' . $fieldset->getID() . '"'; if ($fieldset->getID() === $selected_fieldset_id) { $html .= ' selected="selected"'; } $html .= '>' . $hp->purify(SimpleSanitizer::unsanitize($fieldset->getLabel()), CODENDI_PURIFIER_CONVERT_HTML) . '</option>'; } $html .= '</select>'; echo $html; }
/** * * Display a artifact field either as a read-only value or as a read-write * making modification possible * * @param group_artifact_id : the group artifact id (artifact type id) * @param value: the current value stored in this field (for select boxes type of field * it is the value_id actually. It can also be an array with mutliple values. * @param break: true if a break line is to be inserted between the field label * and the field value * @param label: if true display the field label. * @param ro: true if only the field value is to be displayed. Otherwise * display an HTML select box, text field or text area to modify the value * @param ascii: if true do not use any HTML decoration just plain text (if true * then read-only (ro) flag is forced to true as well) * @param show_none: show the None entry in the select box if true (value_id 100) * @param text_none: text associated with the none value_id to display in the select box * @param show_any: show the Any entry in the select box if true (value_id 0) * @param text_any: text associated with the any value_id tp display in the select box * @param htmlEmail: Specific display for HTML email * * @return string */ function display($group_artifact_id, $value = 'xyxy', $break = false, $label = true, $ro = false, $ascii = false, $show_none = false, $text_none = 0, $show_any = false, $text_any = 0, $show_unchanged = false, $text_unchanged = 0, $htmlEmail = true) { global $Language; $hp = Codendi_HTMLPurifier::instance(); //Use url parameters to populate fields if (!$ro) { $request =& HTTPRequest::instance(); if ($request->get('func') == 'add' && $request->exist($this->field_name)) { $value = htmlentities($request->get($this->field_name), ENT_QUOTES, 'UTF-8'); } } if (!$text_none) { $text_none = $Language->getText('global', 'none'); } if (!$text_any) { $text_any = $Language->getText('global', 'any'); } if (!$text_unchanged) { $text_unchanged = $Language->getText('global', 'unchanged'); } $output = ""; if ($label) { $output = $this->labelDisplay($break, $ascii, !$ro); } // display depends upon display type of this field switch ($this->getDisplayType()) { case 'SB': if ($ro) { // if multiple selected values return a list of <br> separated values $arr = is_array($value) ? $value : array($value); for ($i = 0; $i < count($arr); $i++) { if ($arr[$i] == 0) { $arr[$i] = $text_any; } else { if ($arr[$i] == 100) { $arr[$i] = $text_none; } else { $arr[$i] = SimpleSanitizer::unsanitize($this->getValue($group_artifact_id, $arr[$i])); if (!$ascii) { $arr[$i] = $hp->purify($arr[$i], CODENDI_PURIFIER_CONVERT_HTML); } } } } if ($ascii) { $output .= join(', ', $arr); } else { $output .= join('<br>', $arr); if ($htmlEmail) { //The span is used to pass values that would be processed in JS as dependency sources' values $output .= '<span id="' . $this->field_name . '" style="display: none;">' . $value . '</span>'; } $output .= $this->fieldBox('', $group_artifact_id, $value, $show_none, $text_none, $show_any, $text_any, $show_unchanged, $text_unchanged, false); } } else { // Only show the 'None" label if empty value is allowed or // if value is already none (it can happen if the field was not used in // the artifact submission form) if ($this->isEmptyOk() || $value == 100) { $show_none = true; $text_none = $Language->getText('global', 'none'); } if (is_array($value)) { $output .= $this->multipleFieldBox('', $group_artifact_id, $value, $show_none, $text_none, $show_any, $text_any, $show_unchanged, $text_unchanged); } else { $output .= $this->fieldBox('', $group_artifact_id, $value, $show_none, $text_none, $show_any, $text_any, $show_unchanged, $text_unchanged); } } break; case 'MB': $arr = is_array($value) ? $value : array($value); $valueArray = $arr; if ($ro) { // if multiple selected values return a list of , separated values for ($i = 0; $i < count($arr); $i++) { if ($arr[$i] == 0) { $arr[$i] = $text_any; } else { if ($arr[$i] == 100) { $arr[$i] = $text_none; } else { $arr[$i] = SimpleSanitizer::unsanitize($this->getValue($group_artifact_id, $arr[$i])); if (!$ascii) { $arr[$i] = $hp->purify($arr[$i], CODENDI_PURIFIER_CONVERT_HTML); } } } } $output .= join(",", $arr); if (!$ascii) { if ($htmlEmail) { //The span is used to pass values id that would be processed in JS as dependency sources' values $output .= '<span id="' . $this->field_name . '" style="display: none;">' . implode(',', $valueArray) . '</span>'; } $output .= $this->multipleFieldBox('', $group_artifact_id, $value, $show_none, $text_none, $show_any, $text_any, $show_unchanged, $text_unchanged, false, false); } } else { // Only show the 'None" label if empty value is allowed or // if value is already none (it can happen if the field was not used in // the artifact submission form) if ($this->isEmptyOk() || implode(",", $arr) == "100") { $show_none = true; $text_none = $Language->getText('global', 'none'); } //if (is_array($value)) $output .= $this->multipleFieldBox('', $group_artifact_id, $value, $show_none, $text_none, $show_any, $text_any, $show_unchanged, $text_unchanged); // else // $output .= $this->fieldBox('',$group_artifact_id, $value, // $show_none,$text_none,$show_any, // $text_any); } break; case 'DF': if ($value == $Language->getText('global', 'unchanged')) { //$value = 'Unchanged (e.g. '.format_date("Y-m-j",time()).')'; $value = $Language->getText('global', 'unchanged'); $output .= $this->fieldDate($value, false, strlen($value) + 1, strlen($value) + 1, 'masschange_form', true); } else { // Default value if ($value == "") { $value = time(); } if ($ascii) { // most date fields (except open_date) are real dates (without time), so do not use $sys_datefmt // any more which can include an hour:min (than set on 00:00 for most dates). Especially in mail_follow_ups // after changing an Artifact $output .= $value == 0 ? '' : format_date("Y-m-j", $value); } else { if ($ro) { $output .= format_date($GLOBALS['Language']->getText('system', 'datefmt'), $value); } else { $output .= $this->fieldDate($value == 0 ? '' : format_date("Y-m-j", $value, '')); } } } break; case 'TF': if ($this->getDataType() == $this->DATATYPE_FLOAT) { if ($value == $Language->getText('global', 'unchanged')) { //$value = 'Unchanged (e.g. '.number_format($value,2).')'; $output .= $this->fieldText($value, strlen($value) + 1, strlen($value) + 1); break; } else { $value = number_format($value, 2, '.', ''); } } if ($ascii) { $output .= util_unconvert_htmlspecialchars($value); } else { $output .= $ro ? $value : $this->fieldText($value); } break; case 'TA': if ($ascii) { $output .= util_unconvert_htmlspecialchars($value); } else { $output .= $ro ? nl2br($value) : $this->fieldTextarea($value); } break; default: $output .= $Language->getText('tracker_include_field', 'unknown_display_type', $this->getName()); } return $output; }