コード例 #1
0
 /**
  * Extract Field data from XML input
  *
  * @param Tracker_FormElement_Field $field
  * @param SimpleXMLElement $field_change
  *
  * @return mixed
  */
 public function getFieldData(Tracker_FormElement_Field $field, SimpleXMLElement $field_change)
 {
     $values = $field_change->value;
     $files_infos = array();
     if ($this->isFieldChangeEmpty($values)) {
         $this->logger->warn('Skipped attachment field ' . $field->getLabel() . ': field value is empty.');
         return $files_infos;
     }
     foreach ($values as $value) {
         try {
             $attributes = $value->attributes();
             $file_id = (string) $attributes['ref'];
             $file = $this->files_importer->getFileXML($file_id);
             if (!$this->files_importer->fileIsAlreadyImported($file_id)) {
                 $files_infos[] = $this->getFileInfoForAttachment($file);
                 $this->files_importer->markAsImported($file_id);
             }
         } catch (Tracker_Artifact_XMLImport_Exception_FileNotFoundException $exception) {
             $this->logger->warn('Skipped attachment field ' . $field->getLabel() . ': ' . $exception->getMessage());
         }
     }
     if ($this->itCannotImportAnyFiles($values, $files_infos)) {
         throw new Tracker_Artifact_XMLImport_Exception_NoValidAttachementsException();
     }
     return $files_infos;
 }
コード例 #2
0
 private function getFieldChangeId(Tracker_FormElement_Field $field, $value)
 {
     if (isset($value['format']) && (string) $value['format'] === self::FORMAT_ID) {
         return (string) $value;
     }
     return $field->getFieldData((string) $value);
 }
コード例 #3
0
 private function getFieldChangeId(Tracker_FormElement_Field $field, $value)
 {
     if (isset($value['format']) && (string) $value['format'] === self::FORMAT_ID) {
         return $this->xml_fields_mapping->getNewOpenValueId((string) $value);
     }
     return $field->getFieldData((string) $value);
 }
コード例 #4
0
 /**
  * The Id of the (text) field used for initial_effort semantic
  *
  * @return int The Id of the (numeric) field used for initial_effort semantic, or 0 if no field
  */
 public function getFieldId()
 {
     if ($this->initial_effort_field) {
         return $this->initial_effort_field->getId();
     } else {
         return 0;
     }
 }
コード例 #5
0
 /**
  * Extract Field data from XML input
  *
  * @param Tracker_FormElement_Field $field
  * @param SimpleXMLElement $field_change
  *
  * @return mixed
  */
 public function getFieldData(Tracker_FormElement_Field $field, SimpleXMLElement $field_change)
 {
     $timestamp = strtotime((string) $field_change->value);
     if ($timestamp > 0) {
         return $field->formatDate(strtotime($field_change->value));
     }
     return '';
 }
コード例 #6
0
 public function itCreatesFieldChangeNodeInChangesetNode()
 {
     $this->exporter->export($this->artifact_xml, $this->changeset_xml, mock('Tracker_Artifact'), $this->changeset_value);
     $field_change = $this->changeset_xml->field_change;
     $this->assertEqual((string) $field_change['type'], 'int');
     $this->assertEqual((string) $field_change['field_name'], $this->field->getName());
     $this->assertEqual($field_change->value, 123);
 }
コード例 #7
0
 /**
  * Return the value of a field in the current changeset
  *
  * @param Tracker_FormElement_Field $field The field
  *
  * @return Tracker_Artifact_ChangesetValue, or null if not found
  */
 public function getValue(Tracker_FormElement_Field $field)
 {
     $values = $this->getValues();
     if (isset($values[$field->getId()])) {
         return $values[$field->getId()];
     }
     return null;
 }
 public function getFullRESTValue(Tracker_FormElement_Field $field)
 {
     $class_user_representation = '\\Tuleap\\Project\\REST\\UserGroupRepresentation';
     $ugroup_representation = new $class_user_representation();
     $ugroup_manager = new UGroupManager();
     $project = $field->getTracker()->getProject();
     $ugroup_representation->build($project->getID(), $ugroup_manager->getById($this->getUgroupId()));
     return $ugroup_representation;
 }
コード例 #9
0
 private function getStaticListDataValue(Tracker_FormElement_Field $field, $value)
 {
     if (isset($value['format']) && (string) $value['format'] === self::FORMAT_ID) {
         return $this->xml_fields_mapping->getNewValueId((int) $value);
     }
     $result = $this->static_value_dao->searchValueByLabel($field->getId(), (string) $value);
     $row = $result->getRow();
     return (int) $row['id'];
 }
 public function itCreatesFieldChangeNodeInChangesetNode()
 {
     $this->exporter->export($this->artifact_xml, $this->changeset_xml, mock('Tracker_Artifact'), $this->changeset_value);
     $field_change = $this->changeset_xml->field_change;
     $this->assertEqual((string) $field_change['type'], 'permissions_on_artifact');
     $this->assertEqual((string) $field_change['field_name'], $this->field->getName());
     $this->assertEqual((string) $field_change['use_perm'], '1');
     $this->assertEqual((string) $field_change->ugroup[0]['ugroup_name'], 'ug01');
     $this->assertEqual((string) $field_change->ugroup[1]['ugroup_name'], 'ug02');
 }
コード例 #11
0
 public function itCreatesFieldChangeNodeInChangesetNode()
 {
     $this->exporter->export($this->artifact_xml, $this->changeset_xml, $this->artifact, $this->changeset_value);
     $field_change = $this->changeset_xml->field_change;
     $this->assertEqual(count($field_change->value), 2);
     $this->assertEqual((string) $field_change['type'], 'file');
     $this->assertEqual((string) $field_change['field_name'], $this->field->getName());
     $this->assertEqual((string) $field_change->value[0]['ref'], $this->id_prefix . 123);
     $this->assertEqual((string) $field_change->value[1]['ref'], $this->id_prefix . 456);
 }
コード例 #12
0
 /**
  * @return array of Cardwall_OnTop_Config_ValueMapping
  */
 public function getMappings(Tracker $tracker, Tracker $mapping_tracker, Tracker_FormElement_Field $mapping_field)
 {
     // Why does we return a collection indexed on value_id in the case of freestyle mappings, and a collection
     // indexed on column_id in the case of status mappings @see getStatusMappings?????????
     // Shouldn't we let TrackerMapping do the indexing so that code in TrackerMapping might exploit that?
     $mappings = $this->getMappingFieldValuesIndexedByTracker($tracker);
     if (isset($mappings[$mapping_tracker->getId()][$mapping_field->getId()])) {
         return $mappings[$mapping_tracker->getId()][$mapping_field->getId()];
     }
     return array();
 }
コード例 #13
0
 /**
  * @return \Tracker_Artifact_Changeset|null
  */
 public function getLastChangesetWithFieldValue(Tracker_Artifact $artifact, Tracker_FormElement_Field $field)
 {
     $dar = $this->dao->searchLastChangesetAndValueForArtifactField($artifact->getId(), $field->getId());
     if ($dar) {
         $row = $dar->getRow();
         $changeset = $this->getChangesetFromRow($artifact, $row);
         $value = $field->getChangesetValue($changeset, $row['value_id'], $row['has_changed']);
         $changeset->setFieldValue($field, $value);
         return $changeset;
     }
     return null;
 }
 /**
  * Extract Field data from XML input
  *
  * @param Tracker_FormElement_Field $field
  * @param SimpleXMLElement $field_change
  *
  * @return mixed
  */
 public function getFieldData(Tracker_FormElement_Field $field, SimpleXMLElement $field_change)
 {
     $data = array('use_artifact_permissions' => (int) $field_change['use_perm'], 'u_groups' => array());
     foreach ($field_change->ugroup as $ugroup_xml) {
         if (isset($ugroup_xml['ugroup_id'])) {
             $data['u_groups'][] = (int) $ugroup_xml['ugroup_id'];
         } elseif (isset($ugroup_xml['ugroup_name'])) {
             $ugroup_manager = new UGroupManager();
             $ugroup = $ugroup_manager->getUGroupByName($field->getTracker()->getProject(), (string) $ugroup_xml['ugroup_name']);
             $data['u_groups'][] = $ugroup->getId();
         }
     }
     return $data;
 }
コード例 #15
0
 protected function getFullRESTRepresentation($value)
 {
     $classname_with_namespace = 'Tuleap\\Tracker\\REST\\Artifact\\ArtifactFieldValueFullRepresentation';
     $artifact_field_value_full_representation = new $classname_with_namespace();
     $artifact_field_value_full_representation->build($this->field->getId(), Tracker_FormElementFactory::instance()->getType($this->field), $this->field->getLabel(), $value);
     return $artifact_field_value_full_representation;
 }
コード例 #16
0
 function testValidateSubmitFieldRequiredNotSubmittedNoDefaultValue()
 {
     stub($this->field1)->isValid()->returns(false);
     stub($this->field1)->userCanSubmit()->returns(true);
     stub($this->field1)->isRequired()->returns(true);
     stub($this->field1)->hasDefaultValue()->returns(false);
     stub($this->field2)->isValid()->returns(true);
     stub($this->field3)->isValid()->returns(true);
     stub($this->workflow)->validate()->returns(true);
     $GLOBALS['Language']->expectOnce('getText', array('plugin_tracker_common_artifact', 'err_required', $this->field1->getLabel() . ' (' . $this->field1->getName() . ')'));
     $fields_data = array();
     $this->assertFalse($this->initial_changeset_fields_validator->validate($this->artifact, $fields_data));
 }
 /**
  * Build a binder associated to a list field.
  * @param Tracker_FormElement_Field $field
  * @param string $type ('ug', 'submit', 'Static')
  */
 public function getBind($field, $type)
 {
     $default_value = array();
     $dao = new Tracker_FormElement_Field_List_Bind_DefaultvalueDao();
     foreach ($dao->searchByFieldId($field->id) as $row) {
         $default_value[$row['value_id']] = true;
     }
     $decorators = array();
     $dao = new Tracker_FormElement_Field_List_BindDecoratorDao();
     foreach ($dao->searchByFieldId($field->id) as $row) {
         $decorators[$row['value_id']] = new Tracker_FormElement_Field_List_BindDecorator($row['field_id'], $row['value_id'], $row['red'], $row['green'], $row['blue']);
     }
     $bind = new Tracker_FormElement_Field_List_Bind_Null($field);
     switch ($type) {
         case self::STATIK:
             $dao = new Tracker_FormElement_Field_List_Bind_StaticDao();
             if ($row = $dao->searchByFieldId($field->id)->getRow()) {
                 $values = array();
                 $dao = new Tracker_FormElement_Field_List_Bind_Static_ValueDao();
                 foreach ($dao->searchByFieldId($field->id, $row['is_rank_alpha']) as $row_value) {
                     $values[$row_value['id']] = $this->getStaticValueInstance($row_value['id'], $row_value['label'], $row_value['description'], $row_value['rank'], $row_value['is_hidden']);
                 }
                 $bind = new Tracker_FormElement_Field_List_Bind_Static($field, $row['is_rank_alpha'], $values, $default_value, $decorators);
             }
             break;
         case self::USERS:
             $dao = new Tracker_FormElement_Field_List_Bind_UsersDao();
             if ($row = $dao->searchByFieldId($field->id)->getRow()) {
                 $bind = new Tracker_FormElement_Field_List_Bind_Users($field, $row['value_function'], $default_value, $decorators);
             }
             break;
         case self::UGROUPS:
             $values = array();
             foreach ($this->getUgroupsValueDao()->searchByFieldId($field->id) as $row_value) {
                 $values[$row_value['id']] = $this->getUgroupsValueInstance($row_value['id'], $field->getTracker()->getProject(), $row_value['ugroup_id'], $row_value['is_hidden']);
             }
             $bind = new Tracker_FormElement_Field_List_Bind_Ugroups($field, array_filter($values), $default_value, $decorators, $this->ugroup_manager, $this->getUgroupsValueDao());
             break;
         default:
             trigger_error('Unknown bind "' . $type . '"', E_USER_WARNING);
             break;
     }
     return $bind;
 }
コード例 #18
0
 /**
  * @see Transition_PostActionSubFactory::isFieldUsedInPostActions()
  */
 public function isFieldUsedInPostActions(Tracker_FormElement_Field $field)
 {
     foreach (array_keys($this->post_actions_classes) as $shortname) {
         if ($this->getDao($shortname)->countByFieldId($field->getId()) > 0) {
             return true;
         }
     }
     return false;
 }
コード例 #19
0
 public function getField()
 {
     return $this->field->fetchCard($this->artifact);
 }
コード例 #20
0
 private function canFieldBeExportedToCSV(Tracker_FormElement_Field $field)
 {
     return $field->isUsed() && $field->userCanRead() && (!is_a($field, 'Tracker_FormElement_Field_ArtifactId') || is_a($field, 'Tracker_FormElement_Field_PerTrackerArtifactId'));
 }
コード例 #21
0
 public function getFieldHTMLValue(PFUser $user, Tracker_FormElement_Field $field)
 {
     return $field->fetchCardValue($this->artifact, $this->display_preferences);
 }
コード例 #22
0
 /**
  * Get the value of bypass_permissions
  *
  * @param Tracker_FormElement_Field $field
  *
  * @return boolean
  */
 public function bypassPermissions($field)
 {
     return $this->getFieldId() == $field->getId() && $this->bypass_permissions;
 }
コード例 #23
0
 /**
  * Save the value submitted by the user in the new changeset
  *
  * @param Tracker_Artifact           $artifact         The artifact
  * @param Tracker_Artifact_Changeset $old_changeset    The old changeset. null if it is the first one
  * @param int                        $new_changeset_id The id of the new changeset
  * @param mixed                      $submitted_value  The value submitted by the user
  * @param boolean $is_submission true if artifact submission, false if artifact update
  *
  * @return bool true if success
  */
 public function saveNewChangeset(Tracker_Artifact $artifact, $old_changeset, $new_changeset_id, $submitted_value, User $submitter, $is_submission = false, $bypass_permissions = false)
 {
     $submitted_value = $this->updateLinkingDirection($artifact, $old_changeset, $submitted_value, $submitter);
     return parent::saveNewChangeset($artifact, $old_changeset, $new_changeset_id, $submitted_value, $submitter, $is_submission, $bypass_permissions);
 }
コード例 #24
0
 /**
  * Say if a field is used to define a workflow
  *
  * @param Tracker_FormElement_Field $field The field
  *
  * @return bool
  */
 public function isWorkflowField(Tracker_FormElement_Field $field)
 {
     $workflow = $this->getWorkflowByTrackerId($field->getTracker()->getId());
     if ($workflow) {
         return $field->getId() == $workflow->getFieldId();
     }
     return false;
 }
コード例 #25
0
 /**
  * @return bool
  */
 private function isRequiredFieldsValid(Tracker $tracker, Tracker_FormElement_Field $title_field, Tracker_FormElement_Field $description_field)
 {
     $is_required_fields_valid = true;
     $form_elements = $tracker->getFormElementFields();
     reset($form_elements);
     while ($is_required_fields_valid && (list(, $form_element) = each($form_elements))) {
         if ($form_element->isRequired()) {
             $is_required_fields_valid = $form_element->getId() === $title_field->getId() || $form_element->getId() === $description_field->getId();
         }
     }
     return $is_required_fields_valid;
 }
コード例 #26
0
 private function getFieldValue($fields_data, Tracker_Artifact $artifact, Tracker_FormElement_Field $field)
 {
     $field_id = $field->getId();
     if (isset($fields_data[$field_id])) {
         return $fields_data[$field_id];
     }
     return $this->getFieldValueFromLastChangeset($artifact, $field);
 }
コード例 #27
0
 public function fetchFormattedForJson()
 {
     $json = parent::fetchFormattedForJson();
     $json['values'] = $this->getBind()->fetchFormattedForJson();
     return $json;
 }
コード例 #28
0
 /**
  * Returns the selected values of a field
  *
  * @param Tracker_FormElement_Field $field
  * @param array $value_field_list the selected values to test for the artifact
  *
  * @return array the selected values
  */
 function getSelectedValuesForField($field, $value_field_list)
 {
     if (!is_array($value_field_list)) {
         $value_field_list = array($value_field_list);
     }
     $selected_values = array();
     foreach ($value_field_list as $value_field) {
         $selected_values[] = $field->getBind()->formatArtifactValue($value_field);
     }
     return $selected_values;
 }
コード例 #29
0
 public function setFieldValue(Tracker_FormElement_Field $field, Tracker_Artifact_ChangesetValue $value = null)
 {
     $this->values[$field->getId()] = $value;
 }
コード例 #30
0
 public function update(SimpleXMLElement $field_change_xml, Tracker_FormElement_Field $field, $submitted_value)
 {
     /* @var $updater Tracker_XML_Updater_FieldChange_FieldChangeXMLUpdater */
     $updater = $field->accept($this);
     $updater->update($field_change_xml, $submitted_value);
 }