/** * Delete a FieldSet * * @param int $field_set_id the field set id to delete * @return boolean true if the deletion happen without problems, false otherwise */ function deleteFieldSet($field_set_id) { global $Language; // Check if the field set contains no field $sql = "SELECT field_id, label \n FROM artifact_field \n WHERE group_artifact_id='" . db_ei($this->ArtifactType->getID()) . "' AND\n field_set_id='" . db_ei($field_set_id) . "'"; $result = db_query($sql); $num_rows = db_numrows($result); if ($num_rows != 0) { $this->setError($Language->getText('tracker_common_fieldset_factory', 'delete_only_empty_fieldset') . ' ' . db_error()); return false; } else { // Delete the FieldSet $sql = "DELETE FROM artifact_field_set \n WHERE field_set_id=" . db_ei($field_set_id); $result = db_query($sql); if (!$result || db_affected_rows($result) <= 0) { $this->setError('Error: deleteArtifactFieldSet ' . db_error()); return false; } } return true; }
/** * artifacttype_to_soap : return the soap ArtifactType structure giving an PHP ArtifactType Object. * @access private * * WARNING : We check the permissions here : only the readable trackers and the readable fields are returned. * * @param Object{ArtifactType} $at the artifactType to convert. * @return the SOAPArtifactType corresponding to the ArtifactType Object */ function artifacttype_to_soap($at) { global $ath; $user_id = UserManager::instance()->getCurrentUser()->getId(); $return = array(); // number of opend artifact are not part of ArtifactType, so we have to get it with ArtifactTypeFactory (could need some refactoring maybe) $atf = new ArtifactTypeFactory($at->getGroup()); $arr_count = $atf->getStatusIdCount($at->getID()); if ($arr_count) { $open_count = array_key_exists('open_count', $arr_count) ? $arr_count['open_count'] : -1; $count = array_key_exists('count', $arr_count) ? $arr_count['count'] : -1; } else { $open_count = -1; $count = -1; } $field_sets = array(); $ath = new ArtifactType($at->getGroup(), $at->getID()); if (!$ath || !is_object($ath)) { return new SoapFault(get_artifact_type_fault, 'ArtifactType could not be created', 'getArtifactTypes'); } if ($ath->isError()) { return new SoapFault(get_artifact_type_fault, $ath->getErrorMessage(), 'getArtifactTypes'); } // Check if this tracker is valid (not deleted) if (!$ath->isValid()) { return new SoapFault(get_artifact_type_fault, 'This tracker is no longer valid.', 'getArtifactTypes'); } // Check if the user can view this tracker if ($ath->userCanView($user_id)) { $art_fieldset_fact = new ArtifactFieldSetFactory($at); if (!$art_fieldset_fact || !is_object($art_fieldset_fact)) { return new SoapFault(get_artifact_field_factory_fault, 'Could Not Get ArtifactFieldSetFactory', 'getFieldSets'); } elseif ($art_fieldset_fact->isError()) { return new SoapFault(get_artifact_field_factory_fault, $art_fieldset_fact->getErrorMessage(), 'getFieldSets'); } $result_fieldsets = $art_fieldset_fact->getAllFieldSetsContainingUsedFields(); foreach ($result_fieldsets as $fieldset_id => $result_fieldset) { $fields = array(); $fields_in_fieldset = $result_fieldset->getAllUsedFields(); $group_id = $at->Group->getID(); $group_artifact_id = $at->getID(); while (list($key, $field) = each($fields_in_fieldset)) { if ($field->userCanRead($group_id, $group_artifact_id, $user_id)) { $availablevalues = array(); $result = $field->getFieldPredefinedValues($at->getID(), false, false, false, false); $rows = db_numrows($result); $cols = db_numfields($result); for ($j = 0; $j < $rows; $j++) { $field_status = $cols > 2 ? db_result($result, $j, 6) : ''; // we don't send hidden values (status == 'H') if ($field_status != 'H') { $availablevalues[] = array('field_id' => $field->getID(), 'group_artifact_id' => $at->getID(), 'value_id' => db_result($result, $j, 0), 'value' => SimpleSanitizer::unsanitize(db_result($result, $j, 1)), 'description' => SimpleSanitizer::unsanitize($cols > 2 ? db_result($result, $j, 4) : ''), 'order_id' => $cols > 2 ? db_result($result, $j, 5) : 0, 'status' => $field_status); } } // For bound-values select boxes, we add the none value. if (($field->isMultiSelectBox() || $field->isSelectBox()) && $field->isBound()) { $availablevalues[] = array('field_id' => $field->getID(), 'group_artifact_id' => $at->getID(), 'value_id' => 100, 'value' => 'None', 'description' => '', 'order_id' => 10, 'status' => 'P'); } if ($field->isMultiSelectBox()) { $defaultvalue = implode(",", $field->getDefaultValue()); } else { $defaultvalue = $field->getDefaultValue(); } $fields[] = array('field_id' => $field->getID(), 'group_artifact_id' => $at->getID(), 'field_set_id' => $field->getFieldSetID(), 'field_name' => SimpleSanitizer::unsanitize($field->getName()), 'data_type' => $field->getDataType(), 'display_type' => $field->getDisplayType(), 'display_size' => $field->getDisplaySize(), 'label' => SimpleSanitizer::unsanitize($field->getLabel()), 'description' => SimpleSanitizer::unsanitize($field->getDescription()), 'scope' => $field->getScope(), 'required' => $field->getRequired(), 'empty_ok' => $field->getEmptyOk(), 'keep_history' => $field->getKeepHistory(), 'special' => $field->getSpecial(), 'value_function' => implode(",", $field->getValueFunction()), 'available_values' => $availablevalues, 'default_value' => $defaultvalue, 'user_can_submit' => $field->userCanSubmit($group_id, $group_artifact_id, $user_id), 'user_can_read' => $field->userCanRead($group_id, $group_artifact_id, $user_id), 'user_can_update' => $field->userCanUpdate($group_id, $group_artifact_id, $user_id), 'is_standard_field' => $field->isStandardField()); } } $field_sets[] = array('field_set_id' => $result_fieldset->getID(), 'group_artifact_id' => $result_fieldset->getArtifactTypeID(), 'name' => SimpleSanitizer::unsanitize($result_fieldset->getName()), 'label' => SimpleSanitizer::unsanitize($result_fieldset->getLabel()), 'description' => SimpleSanitizer::unsanitize($result_fieldset->getDescription()), 'description_text' => SimpleSanitizer::unsanitize($result_fieldset->getDescriptionText()), 'rank' => $result_fieldset->getRank(), 'fields' => $fields); } // We add the field dependencies $field_dependencies = artifactrules_to_soap($at); $sql = "SELECT COALESCE(sum(af.filesize) / 1024,NULL,0) as total_file_size" . " FROM artifact_file af, artifact a, artifact_group_list agl" . " WHERE (af.artifact_id = a.artifact_id)" . " AND (a.group_artifact_id = agl.group_artifact_id)" . " AND (agl.group_artifact_id =" . db_ei($at->getID()) . ")"; $result = db_query($sql); $return = array('group_artifact_id' => $at->data_array['group_artifact_id'], 'group_id' => $at->data_array['group_id'], 'name' => SimpleSanitizer::unsanitize($at->data_array['name']), 'description' => SimpleSanitizer::unsanitize($at->data_array['description']), 'item_name' => $at->data_array['item_name'], 'open_count' => $at->userHasFullAccess() ? $open_count : -1, 'total_count' => $at->userHasFullAccess() ? $count : -1, 'total_file_size' => db_result($result, 0, 0), 'field_sets' => $field_sets, 'field_dependencies' => $field_dependencies); } return $return; }