public function build(Tracker_FormElement $field, $type, array $permissions)
 {
     $this->field_id = JsonCast::toInt($field->getId());
     $this->name = $field->getName();
     $this->label = $field->getLabel();
     if ($field instanceof Tracker_FormElement_Field) {
         $this->required = JsonCast::toBoolean($field->isRequired());
         $this->collapsed = false;
     } else {
         $this->required = false;
         $this->collapsed = (bool) $field->isCollapsed();
     }
     $this->default_value = $field->getDefaultValue();
     $this->type = $type;
     $this->values = null;
     if ($field->getRESTAvailableValues()) {
         $this->values = $field->getRESTAvailableValues();
     }
     $bindings = $field->getSoapBindingProperties();
     $this->bindings = array(self::BIND_TYPE => $bindings[Tracker_FormElement_Field_List_Bind::SOAP_TYPE_KEY], self::BIND_LIST => array_map(function ($binding) {
         return array(Tracker_REST_FieldRepresentation::BIND_ID => $binding[Tracker_FormElement_Field_List_Bind_Users::SOAP_BINDING_LIST_ID], Tracker_REST_FieldRepresentation::BIND_LABEL => $binding[Tracker_FormElement_Field_List_Bind_Users::SOAP_BINDING_LIST_LABEL]);
     }, $bindings[Tracker_FormElement_Field_List_Bind::SOAP_LIST_KEY]));
     $this->permissions = array_map(function ($permission) {
         switch ($permission) {
             case Tracker_FormElement::SOAP_PERMISSION_READ:
                 return Tracker_REST_FieldRepresentation::PERM_READ;
             case Tracker_FormElement::SOAP_PERMISSION_UPDATE:
                 return Tracker_REST_FieldRepresentation::PERM_UPDATE;
             case Tracker_FormElement::SOAP_PERMISSION_SUBMIT:
                 return Tracker_REST_FieldRepresentation::PERM_CREATE;
         }
     }, $permissions);
 }
 public function setUp()
 {
     parent::setUp();
     $tracker = stub('Tracker')->getId()->returns(123);
     $this->field_status = $this->setUpField($tracker, 1001);
     $this->field_start_date = $this->setUpField($tracker, 1002);
     $this->field_close_date = $this->setUpField($tracker, 1003);
     $this->field_due_date = $this->setUpField($tracker, 1004);
     $workflow = mock('Workflow');
     stub($workflow)->getFieldId()->returns($this->field_status->getId());
     $this->transition_factory = mock('TransitionFactory');
     stub($this->transition_factory)->isFieldUsedInTransitions($this->field_start_date)->returns(false);
     stub($this->transition_factory)->isFieldUsedInTransitions($this->field_close_date)->returns(true);
     $this->workflow_factory = partial_mock('WorkflowFactory', array('getWorkflowByTrackerId'), array($this->transition_factory, mock('TrackerFactory'), mock('Tracker_FormElementFactory'), mock('Tracker_Workflow_Trigger_RulesManager'), mock('WorkflowBackendLogger')));
     stub($this->workflow_factory)->getWorkflowByTrackerId($tracker->getId())->returns($workflow);
 }
 /**
  * @return bool
  */
 private function fieldHasChanged(array $mapping_fields, Tracker $mapping_tracker = null, Tracker_FormElement $field = null)
 {
     return !isset($mapping_fields[$mapping_tracker->getId()]) || $mapping_fields[$mapping_tracker->getId()] != $field->getId();
 }
 /** @return bool */
 public function isUsedInFieldDependency(Tracker_FormElement $field)
 {
     $field_id = $field->getId();
     $list_rules = $this->getAllListRulesByTrackerWithOrder($this->tracker->getId());
     $date_rules = $this->getAllDateRulesByTrackerId($this->tracker->getId());
     $rules = array_merge($list_rules, $date_rules);
     foreach ($rules as $rule) {
         if ($rule->isUsedInRule($field->getId())) {
             return true;
         }
     }
     return false;
 }
 public function getOriginalFieldId()
 {
     if ($this->original_field) {
         return $this->original_field->getId();
     }
     return 0;
 }
 /**
  * @return Tracker_FormElement
  */
 public function getFieldFromTrackerAndSharedField(Tracker $tracker, Tracker_FormElement $shared)
 {
     $dar = $this->getDao()->searchFieldFromTrackerIdAndSharedFieldId($tracker->getId(), $shared->getId());
     return $this->getInstanceFromDar($dar);
 }