Example #1
0
         // 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;
 }
Example #3
0
 //
 //      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;
 }