// We check if there is a change with the name and description // If there is no changes, we keep the internationalized key, because in the interface, // the user don't see the i18n key, but the associated value (the l10n value). if ($name == $fieldset->getLabel()) { // getName returns the key, getLabel returns the value (internationalized if so, same as name if not) $name = $fieldset->getName(); } if ($description == $fieldset->getDescriptionText()) { // getDescription returns the key, getDescriptionText returns the value (internationalized if so, same as description if not) $description = $fieldset->getDescription(); } if (!$fieldset->update($name, $description, $rank)) { exit_error($Language->getText('global', 'error'), $fieldset->getErrorMessage()); } else { // Reload the field factory $art_fieldset_fact = new ArtifactFieldSetFactory($ath); $GLOBALS['Response']->addFeedback('info', $Language->getText('tracker_admin_index', 'fieldset_updated')); } } require './field_sets.php'; break; case 'fieldset_delete': if (!user_isloggedin()) { exit_not_logged_in(); return; } if (!$ath->userIsAdmin()) { exit_permission_denied(); return; } $fieldset_id = $request->getValidated('fieldset_id', 'uint', 0);
/** * create - use this to create a new ArtifactType in the database. * * @param group_id: the group id of the new tracker * @param group_id_template: the template group id (used for the copy) * @param atid_template: the template artfact type id * @param name: the name of the new tracker * @param description: the description of the new tracker * @param itemname: the itemname of the new tracker * @return id on success, false on failure. */ function create($group_id, $group_id_template, $atid_template, $name, $description, $itemname, $ugroup_mapping = false, &$report_mapping = array()) { global $Language; if (!$name || !$description || !$itemname || trim($name) == "" || trim($description) == "" || trim($itemname) == "") { $this->setError('ArtifactTypeFactory: ' . $Language->getText('tracker_common_type', 'name_requ')); return false; } // Necessary test to avoid issues when exporting the tracker to a DB (e.g. '-' not supported as table name) if (!eregi("^[a-zA-Z0-9_]+\$", $itemname)) { $this->setError($Language->getText('tracker_common_type', 'invalid_shortname', $itemname)); return false; } $reference_manager = ReferenceManager::instance(); if ($reference_manager->_isKeywordExists($itemname, $group_id)) { $this->setError($Language->getText('tracker_common_type', 'shortname_already_exists', $itemname)); return false; } if ($this->isNameExists($name, $group_id)) { $this->setError($Language->getText('tracker_common_type', 'name_already_exists', $name)); return false; } // get the template Group object $pm = ProjectManager::instance(); $template_group = $pm->getProject($group_id_template); if (!$template_group || !is_object($template_group) || $template_group->isError()) { $this->setError('ArtifactTypeFactory: ' . $Language->getText('tracker_common_type', 'invalid_templ')); } // get the Group object of the new tracker $pm = ProjectManager::instance(); $group = $pm->getProject($group_id); if (!$group || !is_object($group) || $group->isError()) { $this->setError('ArtifactTypeFactory: ' . $Language->getText('tracker_common_type', 'invalid_templ')); } // We retrieve allow_copy from template $at_template = new ArtifactType($template_group, $atid_template); $id_sharing = new TrackerIdSharingDao(); if ($id = $id_sharing->generateTrackerId()) { // First, we create a new ArtifactType into artifact_group_list // By default, set 'instantiate_for_new_projects' to '1', so that a project that is not yet a // template will be able to have its trackers cloned by default when it becomes a template. $sql = "INSERT INTO \n artifact_group_list \n (group_artifact_id, group_id, name, description, item_name, allow_copy,\n submit_instructions,browse_instructions,instantiate_for_new_projects,stop_notification\n ) \n VALUES \n ({$id},\n '" . db_ei($group_id) . "',\n '" . db_es($name) . "',\n '" . db_es($description) . "',\n '" . db_es($itemname) . "',\n '" . db_ei($at_template->allowsCopy()) . "',\n '" . db_es($at_template->getSubmitInstructions()) . "',\n '" . db_es($at_template->getBrowseInstructions()) . "',1,0)"; //echo $sql; $res = db_query($sql); if (!$res || db_affected_rows($res) <= 0) { $this->setError('ArtifactTypeFactory: ' . db_error()); return false; } else { //No need to get the last insert id since we already know the id : $id //$id = db_insertid($res,'artifact_group_list','group_artifact_id'); $at_new = new ArtifactType($group, $id); if (!$at_new->fetchData($id)) { $this->setError('ArtifactTypeFactory: ' . $Language->getText('tracker_common_type', 'load_fail')); return false; } else { //create global notifications $sql = "INSERT INTO artifact_global_notification (tracker_id, addresses, all_updates, check_permissions)\n SELECT " . db_ei($id) . ", addresses, all_updates, check_permissions\n FROM artifact_global_notification\n WHERE tracker_id = " . db_ei($atid_template); $res = db_query($sql); if (!$res || db_affected_rows($res) <= 0) { $this->setError('ArtifactTypeFactory: ' . db_error()); } // Create fieldset factory $art_fieldset_fact = new ArtifactFieldSetFactory($at_template); // Then copy all the field sets. $mapping_field_set_array = $art_fieldset_fact->copyFieldSets($atid_template, $id); if (!$mapping_field_set_array) { $this->setError('ArtifactTypeFactory: ' . $art_fieldset_fact->getErrorMessage()); return false; } // Create field factory $art_field_fact = new ArtifactFieldFactory($at_template); // Then copy all the fields informations if (!$art_field_fact->copyFields($id, $mapping_field_set_array, $ugroup_mapping)) { $this->setError('ArtifactTypeFactory: ' . $art_field_fact->getErrorMessage()); return false; } // Then copy all the reports informations // Create field factory $art_report_fact = new ArtifactReportFactory(); if (!($report_mapping = $art_report_fact->copyReports($atid_template, $id))) { $this->setError('ArtifactTypeFactory: ' . $art_report_fact->getErrorMessage()); return false; } $em =& EventManager::instance(); $pref_params = array('atid_source' => $atid_template, 'atid_dest' => $id); $em->processEvent('artifactType_created', $pref_params); // Copy artifact_notification_event and artifact_notification_role if (!$at_new->copyNotificationEvent($id)) { return false; } if (!$at_new->copyNotificationRole($id)) { return false; } // Create user permissions: None for group members and Admin for group admin if (!$at_new->createUserPerms($id)) { return false; } // Create canned responses $canned_new = new ArtifactCanned($at_new); $canned_template = $at_template->getCannedResponses(); if ($canned_template && db_numrows($canned_template) > 0) { while ($row = db_fetch_array($canned_template)) { $canned_new->create($row['title'], $row['body']); } } //Copy template permission permission_copy_tracker_and_field_permissions($atid_template, $id, $group_id_template, $group_id, $ugroup_mapping); //Copy Rules require_once 'ArtifactRulesManager.class.php'; $arm = new ArtifactRulesManager(); $arm->copyRules($atid_template, $id); } } } return $id; }
// // Create the ArtifactTypeHtml object - needed in ArtifactField.getFieldPredefinedValues() // $ath = new ArtifactTypeHtml($group, $atid); if (!$ath || !is_object($ath)) { exit_error($Language->getText('global', 'error'), $Language->getText('project_export_artifact_export', 'ath_not_created')); } if ($ath->isError()) { exit_error($Language->getText('global', 'error'), $ath->getErrorMessage()); } // Create field factory $art_field_fact = new ArtifactFieldFactory($at); if ($art_field_fact->isError()) { exit_error($Language->getText('global', 'error'), $art_field_fact->getErrorMessage()); } $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);
function getFieldsSelectbox($name, $label, $used, $ath) { $html_result = ''; $html_result .= '<select name="' . $name . '" onchange="this.form.submit();">'; $html_result .= '<option selected="selected" value="">' . $label . '</option>'; $afsf = new ArtifactFieldSetFactory($ath); foreach ($afsf->getAllFieldSets() as $fieldset) { $html_result .= '<optgroup label="' . $fieldset->getLabel() . '">'; foreach ($fieldset->getArtifactFields() as $field) { if ($field->isUsed()) { $highlight = ''; if ($field->getName() != 'comment_type_id') { if (isset($used[$field->getName()])) { $highlight = 'boxhighlight'; } $html_result .= '<option value="' . $field->getName() . '" class="' . $highlight . '">'; $html_result .= $field->getLabel(); $html_result .= '</option>'; } } } $html_result .= '</optgroup>'; } $html_result .= '</select>'; return $html_result; }