示例#1
0
 /**
  * Overwrited setter mechanism to handle link retrieval properly.
  *
  * @see Opus_Model_Abstract::_setFieldValue()
  */
 protected function _setFieldValue(Opus_Model_Field $field, $values)
 {
     $fieldname = $field->getName();
     $linkmodelclass = $field->getLinkModelClass();
     if (!is_null($values) and !is_null($linkmodelclass)) {
         // Workaround for link_-tables with ternary relations.  It's not
         // beautyful, but it works for now.  There won't be an easier
         // solution without major changes on the framework/schema, since
         // we cannot know the type of ternary relations at this point.
         $ternaryRelationName = null;
         if (isset($this->_externalFields[$fieldname]['addprimarykey'][0])) {
             $ternaryRelationName = $this->_externalFields[$fieldname]['addprimarykey'][0];
         }
         $values_as_array = is_array($values);
         $values = is_array($values) ? $values : array($values);
         foreach ($values as $i => $value) {
             $linkmodel = null;
             if ($value instanceof Opus_Model_Dependent_Link_Abstract === true) {
                 $linkmodel = $value;
             } else {
                 if (is_null($this->getId()) or is_null($value->getId())) {
                     // If any of the linked models hasn't been stored yet.
                     $linkmodel = new $linkmodelclass();
                     $linkmodel->setModel($value);
                 } else {
                     $linkId = array($this->getId(), $value->getId());
                     if (isset($ternaryRelationName)) {
                         $linkId[] = $ternaryRelationName;
                     }
                     try {
                         $linkmodel = new $linkmodelclass($linkId);
                     } catch (Opus_Model_NotFoundException $e) {
                         $linkmodel = new $linkmodelclass();
                     }
                     $linkmodel->setModel($value);
                 }
             }
             $values[$i] = $linkmodel;
         }
         if (!$values_as_array) {
             $values = $values[0];
         }
     }
     return parent::_setFieldValue($field, $values);
 }