/** * Permit CSV file input,parse the CSV file and show the parse report * * */ function displayParse($csv_filename) { global $Language; if (!file_exists($csv_filename) || !is_readable($csv_filename)) { exit_missing_param(); } $is_tmp = false; //} if (array_key_exists('notify', $_REQUEST) && $_REQUEST['notify']) { user_set_preference('tracker_import_notify_' . $this->ath->getID(), 1); } else { user_set_preference('tracker_import_notify_' . $this->ath->getID(), 0); } $ok = $this->parse($csv_filename, $is_tmp, $artifacts_data, $number_inserts, $number_updates); $this->ath->header(array('title' => $Language->getText('tracker_import', 'art_import') . $this->ath->getID() . ' - ' . $this->ath->getName(), 'pagename' => 'tracker', 'atid' => $this->ath->getID(), 'sectionvals' => array($this->group->getPublicName()), 'help' => 'tracker-v3.html#tracker-artifact-import')); echo '<div id="tracker_toolbar_clear"></div>' . PHP_EOL; echo '<h2>' . $Language->getText('tracker_import', 'parse_report') . '</h2>'; if (!$ok) { $this->showErrors(); } else { echo $Language->getText('tracker_import', 'ready', array($number_inserts + $number_updates, $number_inserts, $number_updates)) . "<br><br>\n"; echo $Language->getText('tracker_import', 'check_data'); $this->showParseResults($this->parsed_labels, $artifacts_data); } $this->ath->footer(array()); }
/* message moderation by Daniel Perez - 2005 */ require_once '../../env.inc.php'; require_once $gfwww . 'include/pre.php'; require_once $gfwww . 'forum/include/ForumHTML.class.php'; require_once $gfwww . 'forum/admin/ForumAdmin.class.php'; require_once $gfcommon . 'forum/Forum.class.php'; require_once $gfcommon . 'forum/ForumMessage.class.php'; $msg_id = getIntFromRequest("msg_id"); $group_id = getIntFromRequest('group_id'); $forum_id = getIntFromRequest("forum_id"); global $HTML; $fa = new ForumAdmin(); if (!$forum_id || !$group_id || !$msg_id) { exit_missing_param(); } if ($fa->Authorized($group_id)) { //user authorized, continue check if ($fa->isForumAdmin($forum_id)) { //print the message forum_header(array()); $g =& $fa->GetGroupObject(); $f = new Forum($g, $forum_id); if (!$f || !is_object($f)) { exit_error(_('Error'), "Error getting new Forum"); } elseif ($f->isError()) { exit_error(_('Error'), $f->getErrorMessage()); } $fm = new ForumMessage($f, $msg_id, false, true); //create the pending message
/** * Update an artifact. Rk: vfl is an variable list of fields, Vary from one project to another * return true if artifact updated, false if nothing changed or DB update failed * * @param artifact_id_dependent: artifact dependencies * @param canned_response: canned responses * @param changes (OUT): array of changes (for notifications) * * @return boolean */ function handleUpdate($artifact_id_dependent, $canned_response, &$changes, $masschange = false, $vfl = false, $import = false) { global $art_field_fact, $HTTP_POST_VARS, $Language; if ($masschange && !$this->ArtifactType->userIsAdmin()) { exit_permission_denied(); } if (!$import) { // Retrieve HTTP GET variables and store them in $vfl array $vfl = $art_field_fact->extractFieldList(); // make sure required fields are not empty if ($art_field_fact->checkEmptyFields($vfl) == false) { exit_missing_param(); } } //get this artifact from the db $result = $this->getFieldsValues(); // // See which fields changed during the modification // and if we must keep history then do it. Also add them to the update // statement // $reference_manager =& ReferenceManager::instance(); $text_value_list = array(); $changes = array(); $upd_list = ''; reset($vfl); while (list($field_name, $value) = each($vfl)) { $field = $art_field_fact->getFieldFromName($field_name); // skip over special fields except for details which in this // particular case can be processed normally if ($field->isSpecial()) { continue; } if ($field->isInt() && $value == '' && $field->getRequired() == 0) { $value = 0; } // we check if the given value is authorized for this field (for select box fields only) // we don't check here the none value, we have already check it before (we can't check here the none value because the function checkValueInPredefinedValues don't take the none value into account) // if the value did not change, we don't do the check (because of stored values that can be deleted now) if (!$masschange && $result[$field_name] != $value && $field->isSelectBox() && $value != 100 && !$field->checkValueInPredefinedValues($this->ArtifactType->getID(), $value)) { $this->setError($Language->getText('tracker_common_artifact', 'bad_field_value', array($field->getLabel(), $value))); return false; } if (!$masschange && $field->isMultiSelectBox()) { if (is_array($value)) { foreach ($value as $a_value) { if ($a_value != 100 && !$field->checkValueInPredefinedValues($this->ArtifactType->getID(), $a_value)) { $this->setError($Language->getText('tracker_common_artifact', 'bad_field_value', array($field->getLabel(), $value))); return false; } } } } $is_text = $field->isTextField() || $field->isTextArea(); if ($field->isMultiSelectBox() && is_array($value)) { if ($masschange && in_array($Language->getText('global', 'unchanged'), $value)) { continue; } // The field is a multi values field and it has multi assigned values $values = $value; // check if the user can update the field or not if (!$field->userCanUpdate($this->ArtifactType->getGroupID(), $this->ArtifactType->getID(), user_getid())) { // we only throw an error if the values has changed $old_values = $field->getValues($this->getID()); list($deleted_values, $added_values) = util_double_diff_array($old_values, $values); if (count($deleted_values) > 0 || count($added_values) > 0) { // The user does not have the permissions to update the current field, // we exit the function with an error message $this->setError($Language->getText('tracker_common_artifact', 'bad_field_permission_update', $field->getLabel())); return false; } } //don't take into account the none value if there are several values selected if (count($values) > 1) { $temp = array(); while (list($i, $v) = each($values)) { if ($v == 100) { unset($values[$i]); $unset = true; } else { $temp[] = $v; } } if (isset($unset) && $unset) { $values = $temp; } } $old_values = $field->getValues($this->getID()); list($deleted_values, $added_values) = util_double_diff_array($old_values, $values); // Check if there are some differences if (count($deleted_values) > 0 || count($added_values) > 0) { // Add values in the history $a = $field->getLabelValues($this->ArtifactType->getID(), $old_values); $val = join(",", $a); $b = $field->getLabelValues($this->ArtifactType->getID(), $values); $new_val = join(",", $b); $this->addHistory($field, $val, $new_val); // Update the field value if (!$field->updateValues($this->getID(), $values)) { $GLOBALS['Response']->addFeedback('error', $Language->getText('tracker_common_artifact', 'field_upd_fail', $field->getLabel())); } if ($is_text) { //Log for Cross references $text_value_list[] = $values; } // Keep track of the change $field_html = new ArtifactFieldHtml($field); if (count($deleted_values) > 0) { $val = join(",", $field->getLabelValues($this->ArtifactType->getID(), $deleted_values)); $changes[$field_name]['del'] = $val; } if (count($added_values) > 0) { $val = join(",", $field->getLabelValues($this->ArtifactType->getID(), $added_values)); $changes[$field_name]['add'] = $val; } } } else { if ($masschange && $value == $Language->getText('global', 'unchanged')) { continue; } $old_value = $result[$field_name]; if ($is_text) { $differ = $old_value != htmlspecialchars($value); //Log for Cross references $text_value_list[] = $value; } else { if ($field->isDateField()) { // if it's a date we must convert the format to unix time if ($value != '') { list($value, $ok) = util_date_to_unixtime($value); } else { $value = '0'; } //first have a look if both dates are uninitialized if (($old_value == 0 || $old_value == '') && ($value == 0 || !$ok)) { $differ = false; } else { // and make also sure that the old_value has been treated as the new value // i.e. old_value (unix timestamp) -> local date (with hours cut off, so change the date by x hours) -> unixtime $old_date = format_date("Y-m-j", $old_value); list($old_val, $ok) = util_date_to_unixtime($old_date); $differ = $old_val != $value; } } else { $differ = $old_value != $value; } } if ($differ) { // The userCanUpdate test is only done on modified fields if ($field->userCanUpdate($this->ArtifactType->getGroupID(), $this->ArtifactType->getID(), user_getid())) { if ($is_text) { if ($field->isStandardField()) { $upd_list .= "{$field_name}='" . db_es(htmlspecialchars($value)) . "',"; } else { $update_value = htmlspecialchars($value); } $this->addHistory($field, $old_value, $value); $value = stripslashes($value); } else { if ($field->isStandardField()) { $upd_list .= "{$field_name}='" . db_es($value) . "',"; } else { $update_value = $value; } $this->addHistory($field, $old_value, $value); } // Update the field value if (!$field->isStandardField()) { if (!$field->updateValue($this->getID(), $update_value)) { $GLOBALS['Response']->addFeedback('error', $Language->getText('tracker_common_artifact', 'field_upd_fail', $field->getLabel())); } } // Keep track of the change $field_html = new ArtifactFieldHtml($field); $changes[$field_name]['del'] = $field_html->display($this->ArtifactType->getID(), $old_value, false, false, true, true); $changes[$field_name]['add'] = $field_html->display($this->ArtifactType->getID(), $value, false, false, true, true); } else { // The user does not have the permissions to update the current field, // we exit the function with an error message $this->setError($Language->getText('tracker_common_artifact', 'bad_field_permission_update', $field->getLabel())); return false; } } } } // while for ($i = 0; $i < sizeof($text_value_list); $i++) { $reference_manager->extractCrossRef($text_value_list[$i], $this->getID(), ReferenceManager::REFERENCE_NATURE_ARTIFACT, $this->ArtifactType->getGroupID()); } $request = HTTPRequest::instance(); //for masschange look at the special case of changing the submitted_by param if ($masschange) { reset($HTTP_POST_VARS); while (list($key, $val) = each($HTTP_POST_VARS)) { $val = $request->get($key); //Don't use HTTP_POST_VARS if ($key == 'submitted_by' && $val != $Language->getText('global', 'unchanged')) { $sql = "UPDATE artifact SET submitted_by=" . db_ei($val) . " WHERE artifact_id = " . db_ei($this->getID()); $res = db_query($sql); $field = $art_field_fact->getFieldFromName('submitted_by'); if ($this->getSubmittedBy() != $val) { $this->addHistory('submitted_by', $this->getSubmittedBy(), $val); } } } } // Comment field history is handled a little differently. Followup comments // are added in the bug history along with the comment type. // // If a canned response is given it overrides anything typed in the followup // comment text area. $comment = $request->get('comment'); $comment_type_id = array_key_exists('comment_type_id', $vfl) ? $vfl['comment_type_id'] : ''; $vFormat = new Valid_WhiteList('comment_format', array(self::FORMAT_HTML, self::FORMAT_TEXT)); $comment_format = $request->getValidated('comment_format', $vFormat, self::FORMAT_TEXT); $this->addFollowUpComment($comment, $comment_type_id, $canned_response, $changes, $comment_format); // // Enter the timestamp if we are changing to closed or declined // if (isset($changes['status_id']) && $this->isStatusClosed($vfl['status_id'])) { $now = time(); $upd_list .= "close_date='{$now}',"; $field = $art_field_fact->getFieldFromName('close_date'); if ($field) { $this->addHistory($field, $result['close_date'], ''); } } // // Reset the timestamp if we are changing from closed or declined // if (isset($changes['status_id']) && !$this->isStatusClosed($vfl['status_id'])) { $upd_list .= "close_date='',"; $field = $art_field_fact->getFieldFromName('close_date'); if ($field) { $this->addHistory($field, $result['close_date'], ''); } } // // Insert the list of dependencies // if ($import && $artifact_id_dependent) { if (!$this->deleteAllDependencies()) { return false; } if ($artifact_id_dependent == $Language->getText('global', 'none')) { unset($artifact_id_dependent); } } if (isset($artifact_id_dependent)) { if (!$this->addDependencies($artifact_id_dependent, $changes, $masschange, $import)) { return false; } } // // Finally, build the full SQL query and update the artifact itself (if need be) // $res_upd = true; if ($upd_list) { // strip the excess comma at the end of the update field list $upd_list = substr($upd_list, 0, -1); $sql = "UPDATE artifact SET {$upd_list} " . " WHERE artifact_id=" . db_ei($this->getID()); $res_upd = db_query($sql); } if (!$res_upd) { exit_error($Language->getText('tracker_common_artifact', 'upd_fail') . ': ' . $sql, $Language->getText('tracker_common_artifact', 'upd_fail')); return false; } else { if (!$request->exist('change_permissions') || $request->get('change_permissions')) { $this->setPermissions($request->get('use_artifact_permissions_name'), $request->get('ugroups')); } return true; } }