Beispiel #1
0
 /**
  * Returns true if and only if $value meets the validation requirements
  *
  * If $value fails validation, then this method returns false, and
  * getMessages() will return an array of messages that explain why the
  * validation failed.
  *
  * @param  mixed $value
  * @param  array $context
  * @return boolean
  * @throws \Zend_Validate_Exception If validation of $value is impossible
  */
 public function isValid($value, $context = array())
 {
     $this->_setValue($value);
     // Make sure the (optionally filtered) value is in the context
     $context[reset($this->_fields)] = $value;
     $filter = array();
     foreach ($this->_fields as $name) {
         // Return valid when not all the fields to check for are in the context
         if (!isset($context[$name])) {
             return true;
         }
         $filter[$name] = $context[$name];
     }
     $check = array();
     $doGet = $this->_model->hasItemsUsed();
     $keys = $this->_model->getKeys();
     foreach ($keys as $id => $key) {
         if ($doGet) {
             // Make sure the item is used
             $this->_model->get($key);
         }
         if (isset($context[$id])) {
             $check[$key] = $context[$id];
         } elseif (isset($context[$key])) {
             $check[$key] = $context[$key];
         } else {
             // Not all keys are in => therefore this is a new item
             $check = false;
             break;
         }
     }
     $rows = $this->_model->load($filter);
     if (!$rows) {
         return true;
     }
     if (!$check) {
         // Rows where found while it is a new item
         $this->_error(self::ERROR_RECORD_FOUND);
         return false;
     }
     $count = count($check);
     foreach ($rows as $row) {
         // Check for return of the whole check
         if (count(array_intersect_assoc($check, $row)) !== $count) {
             // There exists a row with the same values but not the same keys
             $this->_error(self::ERROR_RECORD_FOUND);
             return false;
         }
     }
     return true;
 }
 /**
  * The transform function performs the actual transformation of the data and is called after
  * the loading of the data in the source model.
  *
  * @param \MUtil_Model_ModelAbstract $model The parent model
  * @param array $data Nested array
  * @param boolean $new True when loading a new item
  * @param boolean $isPostData With post data, unselected multiOptions values are not set so should be added
  * @return array Nested array containing (optionally) transformed data
  */
 public function transformLoad(\MUtil_Model_ModelAbstract $model, array $data, $new = false, $isPostData = false)
 {
     if (!$data) {
         return $data;
     }
     //*
     $row = reset($data);
     if (!$this->crossTabs) {
         return $data;
     }
     $keys = $model->getKeys();
     $keys = array_combine($keys, $keys);
     $default = array_fill_keys(array_keys(array_diff_key($this->_fields, $this->excludes)), null);
     $results = array();
     // \MUtil_Echo::track($default);
     foreach ($data as $row) {
         foreach ($this->crossTabs as $crossTab) {
             $name = $crossTab['pre'] . $row[$crossTab['id']];
             $key = implode("\t", array_intersect_key($row, $keys));
             if (!isset($results[$key])) {
                 $results[$key] = array_diff_key($row, $this->excludes) + $default;
             }
             $results[$key][$name] = $row[$crossTab['val']];
         }
     }
     if (\MUtil_Model::$verbose) {
         \MUtil_Echo::r($results, 'Transform output');
     }
     return $results;
 }
Beispiel #3
0
 /**
  * Returns true if name is in the model
  *
  * @param string $name
  * @return boolean
  */
 public function has($name)
 {
     if ($this->model->has($name)) {
         return true;
     }
     $modelKeys = $this->model->getKeys();
     return (bool) isset($modelKeys[$name]);
 }
 /**
  * Returns an array of the field names that are required
  *
  * @return array of fields sourceName => targetName
  */
 public function getRequiredFields()
 {
     $trans = $this->getFieldsTranslations();
     $keys = array_fill_keys($this->_targetModel->getKeys(), true);
     $output = array();
     foreach ($trans as $input => $source) {
         if (isset($keys[$source])) {
             $output[$input] = $source;
         }
     }
     return $output;
 }