public function setup(Model $Model, $config = array())
 {
     $config = (array) $config;
     if (Hash::numeric($config) && isset($config[0])) {
         $config = array('on' => $config[0]);
     }
     $this->settings[$Model->alias] = array_merge($this->_defaults, $config);
 }
 /**
  * Get field names for Translation
  *
  * @param object $model
  * @return array
  * @access public
  */
 public function getTranslationFields(Model $model)
 {
     if (Hash::numeric(array_keys($this->translationFields[$model->alias]))) {
         return $this->translationFields[$model->alias];
     } else {
         return array_keys($this->translationFields[$model->alias]);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function setup(Model $Model, $config = array())
 {
     if (!empty($config) && (!array_key_exists('fields', (array) $config) && Hash::numeric((array) array_keys($config)))) {
         $config = array('fields' => Hash::normalize($config));
     }
     $this->settings[$Model->alias] = array_merge($this->_defaults, $config);
     $this->bindSecurityToken($Model);
 }
Beispiel #4
0
 /**
  * Protected method for MetaBehavior::prepareData()
  *
  * @param Model $model
  * @param array $data
  * @return array
  */
 protected function _prepareMeta($data)
 {
     if (isset($data['Meta']) && is_array($data['Meta']) && count($data['Meta']) > 0 && !Hash::numeric(array_keys($data['Meta']))) {
         $meta = $data['Meta'];
         $data['Meta'] = array();
         $i = 0;
         foreach ($meta as $metaArray) {
             $data['Meta'][$i] = $metaArray;
             $i++;
         }
     }
     return $data;
 }
 /**
  * Get Denormalized Fields
  *
  * @author	Everton Yoshitani <*****@*****.**>
  * @since	1.0
  * @param	Model $Model
  * @param	$data Request data to search foreign keys
  * @return	array
  */
 public function getDenormalizedFields(Model $Model, $data = array())
 {
     if (empty($Model->_denormalized_fields)) {
         return false;
     }
     $denormalized_fields = array();
     foreach ($Model->_denormalized_fields as $denormalized_field => $settings) {
         if (is_callable($settings) && is_object($settings) && $settings instanceof Closure) {
             $settings = $settings($data);
         }
         if (empty($settings)) {
             continue;
         }
         if (!Hash::numeric(array_keys($settings))) {
             $settings = array($settings);
         }
         $values = array();
         $last = count($settings) - 1;
         foreach ($settings as $index => $set) {
             if (empty($set['field']) || empty($set['conditions']) || !is_array($set['conditions'])) {
                 continue;
             }
             if (strpos($set['field'], '.')) {
                 list(, $field_name) = explode('.', $set['field']);
             } else {
                 $field_name = $set['field'];
             }
             $field_conditions = array();
             foreach ($set['conditions'] as $field => $value) {
                 if (!is_string($field)) {
                     continue;
                 }
                 $field_model = $Model->alias;
                 if (strpos($field, '.') !== false) {
                     list($field_model, $field) = explode('.', $field);
                 }
                 if ($field_model === $Model->alias) {
                     $modelObject = $Model;
                 } elseif (isset($Model->{$field_model})) {
                     $modelObject = $Model->{$field_model};
                 } else {
                     $modelObject = ClassRegistry::init($field_model);
                 }
                 $value_model = $Model->alias;
                 if (strpos($value, '.') !== false) {
                     list($value_model, $value) = explode('.', $value);
                 }
                 if ($value_model === $Model->alias && !empty($data[$value])) {
                     $value = $data[$value];
                 } elseif ($value_model !== $Model->alias && !empty($values[$value_model . '.' . $value])) {
                     $value = $values[$value_model . '.' . $value];
                 }
                 $field_conditions[] = array($field_model . '.' . $field => $value);
             }
             $field_value = $modelObject->field($field_name, $field_conditions);
             if ($index !== $last && empty($field_value)) {
                 continue 3;
             } elseif ($index === $last) {
                 $denormalized_fields[$denormalized_field] = $field_value;
             } else {
                 $values[$set['field']] = $field_value;
             }
         }
     }
     return $denormalized_fields;
 }
 /**
  * afterFind Callback
  *
  * @param array $results
  * @param boolean $primary
  * @return array Modified results
  * @access public
  */
 public function afterFind(Model $model, $results, $primary)
 {
     $locale = $this->_getLocale($model);
     if (empty($locale) || empty($results)) {
         return $results;
     }
     $fields = $this->getTranslationFields($model);
     $RuntimeModel = $this->translateModel($model);
     if ($primary && isset($results[0][$model->alias])) {
         $i = 0;
         foreach ($results as $result) {
             if (!isset($result[$model->alias][$model->primaryKey])) {
                 continue;
             }
             $translations = $RuntimeModel->find('all', array('conditions' => array($RuntimeModel->alias . '.model' => $model->alias, $RuntimeModel->alias . '.foreign_key' => $result[$model->alias][$model->primaryKey], $RuntimeModel->alias . '.field' => $fields)));
             foreach ($translations as $translation) {
                 $field = $translation[$RuntimeModel->alias]['field'];
                 // Original row
                 /*if (isset($results[$i][$model->alias][$field])) {
                 			$results[$i][$field.'Original'] = $results[$i][$model->alias][$field];
                 		}*/
                 // Translated row
                 if ($translation[$RuntimeModel->alias]['locale'] == $locale && isset($results[$i][$model->alias][$field])) {
                     $results[$i][$model->alias][$field] = $translation[$RuntimeModel->alias]['content'];
                 }
                 // Other translations
                 if (!Hash::numeric(array_keys($this->translationFields[$model->alias])) && isset($results[$i][$model->alias][$field])) {
                     if (!isset($results[$i][$field . 'Translation'])) {
                         $results[$i][$field . 'Translation'] = array();
                     }
                     $results[$i][$field . 'Translation'][] = $translation[$RuntimeModel->alias];
                 }
             }
             $i++;
         }
     }
     return $results;
 }
Beispiel #7
0
 /**
  * Checks to see if all the values in the array are numeric
  *
  * @param array $array The array to check.  If null, the value of the current Set object
  * @return boolean true if values are numeric, false otherwise
  * @link http://book.cakephp.org/2.0/en/core-utility-libraries/set.html#Set::numeric
  */
 public static function numeric($array = null)
 {
     return Hash::numeric($array);
 }
Beispiel #8
0
 /**
  * testNumericArrayCheck method
  *
  * @return void
  */
 public function testNumeric()
 {
     $data = array('one');
     $this->assertTrue(Hash::numeric(array_keys($data)));
     $data = array(1 => 'one');
     $this->assertFalse(Hash::numeric($data));
     $data = array('one');
     $this->assertFalse(Hash::numeric($data));
     $data = array('one' => 'two');
     $this->assertFalse(Hash::numeric($data));
     $data = array('one' => 1);
     $this->assertTrue(Hash::numeric($data));
     $data = array(0);
     $this->assertTrue(Hash::numeric($data));
     $data = array('one', 'two', 'three', 'four', 'five');
     $this->assertTrue(Hash::numeric(array_keys($data)));
     $data = array(1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five');
     $this->assertTrue(Hash::numeric(array_keys($data)));
     $data = array('1' => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five');
     $this->assertTrue(Hash::numeric(array_keys($data)));
     $data = array('one', 2 => 'two', 3 => 'three', 4 => 'four', 'a' => 'five');
     $this->assertFalse(Hash::numeric(array_keys($data)));
     $data = array(2.4, 1, 0, -1, -2);
     $this->assertTrue(Hash::numeric($data));
 }
 protected function _filterCustomConditions(Model $model, $results, $conditions)
 {
     // Every result has to be checked against the conditions.
     // If it does not meet all conditions it will be removed
     // from the results array.
     if (is_array($results)) {
         // if we have a results list with multiple results we need to check each
         if (TRUE === Hash::numeric(array_keys($results))) {
             foreach ($results as $key => $result) {
                 if (!$this->_meetsConditions($model, $result, $conditions)) {
                     unset($results[$key]);
                 }
             }
         } else {
             if (!$this->_meetsConditions($model, $results, $conditions)) {
                 $results = array();
             }
         }
         return $results;
     }
     return array();
 }
Beispiel #10
0
 /**
  * {@inheritdoc}
  */
 public function afterFind($results, $primary = false)
 {
     if (empty($this->belongsToForeignModels)) {
         return $results;
     }
     // Apply filter to result like:
     // array('model' => 'ForeignModel', 'ForeignModel' => array(..), 'AnotherForeignModel' => array(..))
     if (!empty($results['foreign_model'])) {
         return $this->_filterForeignModels($results, $results['foreign_model']);
     }
     // Skip if result not like array(0 => array(..), 1 => array(..), ...)
     if (!Hash::numeric(array_keys($results))) {
         return $results;
     }
     foreach ($results as $k => $result) {
         // Apply filter to result like:
         // array('Affiliate' => array('model' => 'ForeignModel', 'ForeignModel' => array(..), 'AnotherForeignModel' => array(..)))
         if (!empty($result[$this->alias]) && !empty($result[$this->alias]['foreign_model'])) {
             $results[$k] = $this->_filterForeignModels($result, $result[$this->alias]['foreign_model']);
         }
     }
     return $results;
 }
 /**
  * Check previous session data.
  *
  * @param mixed $prev Previous action for check
  * @param array $options
  * @param string $prevAction Previous action to Redirect.
  * @return boolean Success
  */
 public function checkPrev($prev, $options = array(), $prevAction = null)
 {
     // mostly compatible
     if (is_string($options)) {
         $options = array('message' => $options);
     } elseif ($options !== array() && empty($options)) {
         $options = array();
     }
     $options += $this->_filter(compact('prevAction'));
     $defaults = array('message' => $this->messages['prev']);
     extract($options = array_merge($defaults, $options));
     if (is_array($prev) && Hash::numeric(array_keys($prev))) {
         foreach ($prev as $p) {
             if (!$this->checkPrev($p, $options)) {
                 return false;
             }
         }
         return true;
     }
     $check = true;
     if (!is_array($prev)) {
         $prev = array('action' => $prev);
     }
     if ($prevAction === null) {
         $prevAction = $prev;
     }
     if (!$this->Session->check($this->sessionKey($prev))) {
         if ($message !== false) {
             $this->Session->setFlash($message, $this->flashParams['element'], $this->flashParams['params'], $this->flashParams['key']);
         }
         if ($this->autoRedirect) {
             $this->Controller->redirect($prevAction);
         }
         return false;
     }
     return true;
 }
 /**
  * Batch Update Resource Data, Filtering by Query String
  * 
  * @author	Wes DeMoney <*****@*****.**>
  * @since	1.0
  * @param	array	$this->_data	Array of Resource Indexed Data
  * @param	string	$this->_model	Primary Resource Name
  * @return	boolean 
  */
 public function batchUpdate()
 {
     $data = $this->_data;
     $this->withData();
     $parent_model = $this->_model;
     $this->forModel();
     $passed_conditions = $this->_passed_conditions;
     $this->withPassedConditions();
     $field_exceptions = $this->_field_exceptions;
     $this->withFieldExceptions();
     // Cannot Update Multiple Models
     if (count(array_keys($data)) > 1) {
         $this->setResponseCode(4015);
         return false;
     }
     // Data Should Not Be Indexed
     if (Hash::numeric(array_keys($data[$parent_model]))) {
         $this->setResponseCode(4008);
         return false;
     }
     // Cannot Pass ID
     if (!empty($data[$parent_model]['id'])) {
         $this->setResponseCode(4001);
         return false;
     }
     // Field Map Based Off Read for Querying
     $field_map = $this->withParentModel()->forModel($parent_model)->returnsFieldMap('read');
     $modelObject = $this->Controller->{$parent_model};
     $fields = array();
     if (!empty($field_map)) {
         $fields = $this->forModel($parent_model)->withFieldMap($field_map)->withDataFields($data[$parent_model])->withFieldExceptions($field_exceptions)->returnsFilteredDataFields();
     }
     $field_names = $modelObject->getFieldNames($field_map);
     if (empty($passed_conditions)) {
         $passed_conditions = $this->Query->withFieldMap($field_map)->rendersConditions();
     }
     if (empty($passed_conditions)) {
         $this->setResponseCode(4017);
         return false;
     }
     $conditions = $this->withParentModel()->forModel($parent_model)->withFields($field_names)->withPassedConditions($passed_conditions)->on('update')->rendersConditions();
     if (empty($conditions)) {
         $this->setResponseCode(4017);
         return false;
     }
     // Find IDs of Records to Update
     $ids = $modelObject->find('list', array('conditions' => $conditions, 'fields' => array($parent_model . '.id'), 'contain' => false));
     if (empty($ids)) {
         return true;
     }
     // ID `0` Could Come from Special Cases like FormRecordFolder `Uncategorized`
     if (false !== ($key = array_search(0, $ids))) {
         unset($ids[$key]);
     }
     if (empty($ids)) {
         return true;
     }
     $modelObject->begin();
     foreach ($ids as $id) {
         $modelObject->create(false);
         $modelObject->id = $id;
         $modelObject->set(array($parent_model => $fields));
         // Validation
         if (!$modelObject->validates() || !is_null($this->getIndexValidationErrors())) {
             $validationErrors = $modelObject->validationErrors;
             $modelObject->rollback();
             $this->setResponseCode(4012);
             if (!empty($validationErrors)) {
                 $this->forModel($parent_model)->withFieldMap($field_map)->setValidationErrors($validationErrors);
             }
             return false;
         }
         // Can Update
         if (!$this->Permissions->forModel($parent_model)->canUpdate($id, $fields)) {
             $this->setResponseCode(4013);
             return false;
         }
         $fieldList = array_keys($field_map);
         if (!empty($field_exceptions)) {
             $fieldList = array_merge($fieldList, $field_exceptions);
         }
         // Save Data
         if (!$modelObject->save(array($data), array('fieldList' => $fieldList, 'validate' => false))) {
             $modelObject->rollback();
             $this->setResponseCode(5001);
             return false;
         }
     }
     $modelObject->commit();
     $this->Controller->request->params['paging'][$parent_model]['count'] = count($ids);
     return true;
 }
 /**
  * setup method
  *
  * @param	Model	$Model
  * @param	array	$config
  * @return	void
  */
 public function setup(Model $Model, $config = array())
 {
     $this->settings[$Model->alias] = array_merge(array('consolidated' => true, 'field' => 'bits', 'bits' => array('ALL' => 1), 'disabled' => false, 'mask' => null, 'default' => 1), (array) $config);
     if (empty($this->settings[$Model->alias]['bits'])) {
         $this->disableBitmasked($Model);
     } else {
         if (Hash::numeric(array_keys($this->settings[$Model->alias]['bits']))) {
             $last = 1;
             $bits = array('ALL' => 1);
             foreach ($this->settings[$Model->alias]['bits'] as $flag) {
                 $bits[$flag] = $last = $last * 2;
             }
             $this->settings[$Model->alias]['bits'] = $bits;
         }
     }
 }
 /**
  * Validation rule for HABTM relations
  * 
  * @author	Anthony Putignano <*****@*****.**>
  * @since	1.0
  * @param	Model		$Model
  * @param	mixed		$check
  * @return	boolean
  */
 public function validateHabtmRelation(Model $Model, $check = array())
 {
     foreach ($this->__settings[$Model->alias]['fields'] as $field => $settings) {
         if (array_key_exists($field, $check)) {
             $ids = array_shift($check);
             $ids = $this->getHabtmAssociationIdArray($Model, $ids);
             if (!Hash::numeric($ids)) {
                 return false;
             }
             extract($settings);
             if (!isset($Model->{$foreignModel})) {
                 $Model->{$foreignModel} = ClassRegistry::init($foreignModel);
             }
             $relations = array();
             foreach ($ids as $id) {
                 if (array_key_exists($id, $relations)) {
                     return false;
                 }
                 $relations[$id] = true;
                 if (!$Model->{$foreignModel}->exists($id)) {
                     return false;
                 }
             }
             return true;
         }
     }
     return false;
 }
Beispiel #15
0
 /**
  * Serialize view vars.
  *
  * @param string|array $serialize The viewVars that need to be serialized.
  * @return string The serialized data
  * @throws RuntimeException When the prefix is not specified
  */
 protected function _serialize($serialize)
 {
     $rootNode = isset($this->viewVars['_rootNode']) ? $this->viewVars['_rootNode'] : 'channel';
     if (is_array($serialize)) {
         $data = array($rootNode => array());
         foreach ($serialize as $alias => $key) {
             if (is_numeric($alias)) {
                 $alias = $key;
             }
             $data[$rootNode][$alias] = $this->viewVars[$key];
         }
     } else {
         $data = isset($this->viewVars[$serialize]) ? $this->viewVars[$serialize] : null;
         if (is_array($data) && Hash::numeric(array_keys($data))) {
             $data = array($rootNode => array($serialize => $data));
         }
     }
     $defaults = array('document' => array(), 'channel' => array(), 'items' => array());
     $data += $defaults;
     if (!empty($data['document']['namespace'])) {
         foreach ($data['document']['namespace'] as $prefix => $url) {
             $this->setNamespace($prefix, $url);
         }
     }
     $channel = $this->channel($data['channel']);
     if (!empty($channel['image']) && empty($channel['image']['title'])) {
         $channel['image']['title'] = $channel['title'];
     }
     foreach ($data['items'] as $item) {
         $channel['item'][] = $this->_prepareOutput($item);
     }
     $array = array('rss' => array('@version' => $this->version, 'channel' => $channel));
     $namespaces = array();
     foreach ($this->_usedNamespaces as $usedNamespacePrefix) {
         if (!isset($this->_namespaces[$usedNamespacePrefix])) {
             throw new RuntimeException(__('The prefix %s is not specified.', $usedNamespacePrefix));
         }
         $namespaces['xmlns:' . $usedNamespacePrefix] = $this->_namespaces[$usedNamespacePrefix];
     }
     $array['rss'] += $namespaces;
     $options = array();
     if (Configure::read('debug')) {
         $options['pretty'] = true;
     }
     $output = Xml::fromArray($array, $options)->asXML();
     $output = $this->_replaceCdata($output);
     return $output;
 }
Beispiel #16
0
 /**
  * Returns an entity from a set of data
  *
  * @param string $p classname
  * @param string $value the name of the property to retrieve
  * @return mixed
  */
 protected function _transformIntoEntity($p, $value)
 {
     $_p = Inflector::singularize($p);
     $className = $_p . 'Entity';
     if (empty($value)) {
         return [$p, $value];
     }
     if (!class_exists($_p)) {
         App::uses($_p, 'Model');
         if (!class_exists($_p)) {
             return [$p, $value];
         }
     }
     if (!is_subclass_of($_p, 'Table')) {
         return [$p, $value];
     }
     if (!class_exists($className)) {
         App::uses($className, 'Model/Entity');
     }
     if (!class_exists($className)) {
         $className = 'Entity';
     }
     if (is_array($value) && Hash::numeric(array_keys($value))) {
         $_value = [];
         foreach ($value as $sub) {
             $_value[] = new $className($sub);
         }
         $value = $_value;
     } else {
         $value = new $className($value);
     }
     return [$p, $value];
 }
 /**
  * Is Save All
  *
  * @author	Anthony Putignano <*****@*****.**>
  * @since	1.0
  * @param	array	$data
  * @return  boolean
  */
 public function isSaveAll($data = array())
 {
     if (empty($data)) {
         $data = $this->Controller->request->data;
     }
     return Hash::numeric(array_keys($data));
 }
Beispiel #18
0
 /**
  * Auxiliary function to quote matched `(Model.fields)` from a preg_replace_callback call
  * Quotes the fields in a function call.
  *
  * @param string $match matched string
  * @return string quoted string
  */
 protected function _quoteFunctionField($match)
 {
     $prepend = '';
     if (strpos($match[1], 'DISTINCT') !== false) {
         $prepend = 'DISTINCT ';
         $match[1] = trim(str_replace('DISTINCT', '', $match[1]));
     }
     $constant = preg_match('/^\\d+|NULL|FALSE|TRUE$/i', $match[1]);
     if (!$constant && strpos($match[1], '.') === false) {
         $match[1] = $this->name($match[1]);
     } elseif (!$constant) {
         $parts = explode('.', $match[1]);
         if (!Hash::numeric($parts)) {
             $match[1] = $this->name($match[1]);
         }
     }
     return '(' . $prepend . $match[1] . ')';
 }
 /**
  * Format CSV Response
  *
  * @since   1.0
  * @return  void
  */
 public function formatCsvResponse()
 {
     $this->Controller->viewClass = 'Csv';
     if (!Hash::numeric(array_keys($this->Controller->viewVars))) {
         $this->Controller->viewVars = array($this->Controller->viewVars);
     }
     foreach ($this->Controller->viewVars as $key => $val) {
         $this->Controller->viewVars[$key] = Hash::flatten($this->__jsonEncodeCsvResponse($val));
     }
     $this->Controller->viewVars = array('data' => $this->Controller->viewVars, '_header' => array_keys($this->Controller->viewVars[0]), '_serialize' => 'data');
     return;
 }
Beispiel #20
0
 /**
  * Serialize view vars.
  *
  * ### Special parameters
  * `_xmlOptions` You can set an array of custom options for Xml::fromArray() this way, e.g.
  *   'format' as 'attributes' instead of 'tags'.
  *
  * @param array $serialize The viewVars that need to be serialized.
  * @return string The serialized data
  */
 protected function _serialize($serialize)
 {
     $rootNode = isset($this->viewVars['_rootNode']) ? $this->viewVars['_rootNode'] : 'response';
     if (is_array($serialize)) {
         $data = array($rootNode => array());
         foreach ($serialize as $alias => $key) {
             if (is_numeric($alias)) {
                 $alias = $key;
             }
             $data[$rootNode][$alias] = $this->viewVars[$key];
         }
     } else {
         $data = isset($this->viewVars[$serialize]) ? $this->viewVars[$serialize] : null;
         if (is_array($data) && Hash::numeric(array_keys($data))) {
             $data = array($rootNode => array($serialize => $data));
         }
     }
     $options = array();
     if (isset($this->viewVars['_xmlOptions'])) {
         $options = $this->viewVars['_xmlOptions'];
     }
     if (Configure::read('debug')) {
         $options['pretty'] = true;
     }
     return Xml::fromArray($data, $options)->asXML();
 }
Beispiel #21
0
 /**
  * Table::convertToEntities()
  *
  * @param mixed $list an array or list of data to convert into entities
  * @return array
  */
 public function convertToEntities($list)
 {
     if ($list && !Hash::numeric(array_keys($list))) {
         return $this->convertToEntity($list);
     }
     $result = [];
     foreach ($list as $data) {
         $result[] = $this->convertToEntity($data);
     }
     return $result;
 }
Beispiel #22
0
 /**
  * Generates the fields list of an SQL query.
  *
  * @param Model $Model The model to get fields for.
  * @param string $alias Alias table name
  * @param mixed $fields The provided list of fields.
  * @param bool $quote If false, returns fields array unquoted
  * @return array
  */
 public function fields(Model $Model, $alias = null, $fields = array(), $quote = true)
 {
     if (empty($alias)) {
         $alias = $Model->alias;
     }
     $virtualFields = $Model->getVirtualField();
     $cacheKey = array($alias, get_class($Model), $Model->alias, $virtualFields, $fields, $quote, ConnectionManager::getSourceName($this), $Model->schemaName, $Model->table);
     $cacheKey = md5(serialize($cacheKey));
     if ($return = $this->cacheMethod(__FUNCTION__, $cacheKey)) {
         return $return;
     }
     $allFields = empty($fields);
     if ($allFields) {
         $fields = array_keys($Model->schema());
     } elseif (!is_array($fields)) {
         $fields = CakeText::tokenize($fields);
     }
     $fields = array_values(array_filter($fields));
     $allFields = $allFields || in_array('*', $fields) || in_array($Model->alias . '.*', $fields);
     $virtual = array();
     if (!empty($virtualFields)) {
         $virtualKeys = array_keys($virtualFields);
         foreach ($virtualKeys as $field) {
             $virtualKeys[] = $Model->alias . '.' . $field;
         }
         $virtual = $allFields ? $virtualKeys : array_intersect($virtualKeys, $fields);
         foreach ($virtual as $i => $field) {
             if (strpos($field, '.') !== false) {
                 $virtual[$i] = str_replace($Model->alias . '.', '', $field);
             }
             $fields = array_diff($fields, array($field));
         }
         $fields = array_values($fields);
     }
     if (!$quote) {
         if (!empty($virtual)) {
             $fields = array_merge($fields, $this->_constructVirtualFields($Model, $alias, $virtual));
         }
         return $fields;
     }
     $count = count($fields);
     if ($count >= 1 && !in_array($fields[0], array('*', 'COUNT(*)'))) {
         for ($i = 0; $i < $count; $i++) {
             if (is_string($fields[$i]) && in_array($fields[$i], $virtual)) {
                 unset($fields[$i]);
                 continue;
             }
             if (is_object($fields[$i]) && isset($fields[$i]->type) && $fields[$i]->type === 'expression') {
                 $fields[$i] = $fields[$i]->value;
             } elseif (preg_match('/^\\(.*\\)\\s' . $this->alias . '.*/i', $fields[$i])) {
                 continue;
             } elseif (!preg_match('/^.+\\(.*\\)/', $fields[$i])) {
                 $prepend = '';
                 if (strpos($fields[$i], 'DISTINCT') !== false) {
                     $prepend = 'DISTINCT ';
                     $fields[$i] = trim(str_replace('DISTINCT', '', $fields[$i]));
                 }
                 $dot = strpos($fields[$i], '.');
                 if ($dot === false) {
                     $prefix = !(strpos($fields[$i], ' ') !== false || strpos($fields[$i], '(') !== false);
                     $fields[$i] = $this->name(($prefix ? $alias . '.' : '') . $fields[$i]);
                 } else {
                     if (strpos($fields[$i], ',') === false) {
                         $build = explode('.', $fields[$i]);
                         if (!Hash::numeric($build)) {
                             $fields[$i] = $this->name(implode('.', $build));
                         }
                     }
                 }
                 $fields[$i] = $prepend . $fields[$i];
             } elseif (preg_match('/\\(([\\.\\w]+)\\)/', $fields[$i], $field)) {
                 if (isset($field[1])) {
                     if (strpos($field[1], '.') === false) {
                         $field[1] = $this->name($alias . '.' . $field[1]);
                     } else {
                         $field[0] = explode('.', $field[1]);
                         if (!Hash::numeric($field[0])) {
                             $field[0] = implode('.', array_map(array(&$this, 'name'), $field[0]));
                             $fields[$i] = preg_replace('/\\(' . $field[1] . '\\)/', '(' . $field[0] . ')', $fields[$i], 1);
                         }
                     }
                 }
             }
         }
     }
     if (!empty($virtual)) {
         $fields = array_merge($fields, $this->_constructVirtualFields($Model, $alias, $virtual));
     }
     return $this->cacheMethod(__FUNCTION__, $cacheKey, array_unique($fields));
 }
Beispiel #23
0
 /**
  * Tests `convert`.
  *
  * @return void
  */
 public function testConvertSingleItemData()
 {
     $data = ['EDEX' => ['school' => ['schooljaar' => '2012-2013', 'brincode' => '99XX', 'dependancecode' => '99', 'schoolkey' => '99999', 'aanmaakdatum' => '2013-03-27T12:43:06', 'auteur' => 'Cito LeerlingVolgSysteem versie 4.6', 'xsdversie' => '1.03'], 'groepen' => ['groep' => ['@key' => '49', 'naam' => '1A', 'jaargroep' => '1', 'mutatiedatum' => '2005-08-29T22:19:18']], 'leerlingen' => ['leerling' => ['@key' => '3580', 'achternaam' => 'Achternaam', 'voorvoegsel' => 'v. d.', 'roepnaam' => 'Roepnaam', 'geboortedatum' => '2009-08-07', 'geslacht' => '2', 'jaargroep' => '4', 'etniciteit' => '9', 'land' => '?', 'land_vader' => '?', 'land_moeder' => '?', 'gewicht_nieuw' => '?', 'gewicht' => '?', 'mutatiedatum' => '2011-01-24T15:33:29']], 'leerkrachten' => ['leerkracht' => ['@key' => '75', 'achternaam' => 'Achternaam', 'roepnaam' => 'Roepnaam', 'groepen' => ['groep' => ['@key' => '49']], 'mutatiedatum' => '2004-02-07T14:03:18']], '@xsi:noNamespaceSchemaLocation' => 'EDEXML.structuur.xsd']];
     $result = $this->Edexml->convert($data);
     $this->assertTrue(Hash::numeric(array_keys($result['SchoolClass'])));
     $this->assertTrue(Hash::numeric(array_keys($result['Student'])));
     $this->assertTrue(Hash::numeric(array_keys($result['Teacher'])));
 }
Beispiel #24
0
 /**
  * Backwards compatible passthrough method for:
  * saveMany(), validateMany(), saveAssociated() and validateAssociated()
  *
  * Saves multiple individual records for a single model; Also works with a single record, as well as
  * all its associated records.
  *
  * #### Options
  *
  * - `validate`: Set to false to disable validation, true to validate each record before saving,
  *   'first' to validate *all* records before any are saved (default),
  *   or 'only' to only validate the records, but not save them.
  * - `atomic`: If true (default), will attempt to save all records in a single transaction.
  *   Should be set to false if database/table does not support transactions.
  * - `fieldList`: Equivalent to the $fieldList parameter in Model::save().
  *   It should be an associate array with model name as key and array of fields as value. Eg.
  *   {{{
  *   array(
  *       'SomeModel' => array('field'),
  *       'AssociatedModel' => array('field', 'otherfield')
  *   )
  *   }}}
  * - `deep`: See saveMany/saveAssociated
  * - `callbacks`: See Model::save()
  * - `counterCache`: See Model::save()
  *
  * @param array $data Record data to save. This can be either a numerically-indexed array (for saving multiple
  *     records of the same type), or an array indexed by association name.
  * @param array $options Options to use when saving record data, See $options above.
  * @return mixed If atomic: True on success, or false on failure.
  *    Otherwise: array similar to the $data array passed, but values are set to true/false
  *    depending on whether each record saved successfully.
  * @link http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array
  * @link http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveall-array-data-null-array-options-array
  */
 public function saveAll($data = array(), $options = array())
 {
     $options = array_merge(array('validate' => 'first'), $options);
     if (Hash::numeric(array_keys($data))) {
         if ($options['validate'] === 'only') {
             return $this->validateMany($data, $options);
         }
         return $this->saveMany($data, $options);
     }
     if ($options['validate'] === 'only') {
         return $this->validateAssociated($data, $options);
     }
     return $this->saveAssociated($data, $options);
 }
Beispiel #25
0
 /**
  * Convert extracted Edexml data to normalized data
  *
  * @param array $data Extracted Edexml data
  * @return array Normalized data
  */
 public function convert($data)
 {
     $result = [];
     $result['school'] = $this->_convertSchool($data['EDEX']['school']);
     if (!empty($data['EDEX']['groepen']['groep'])) {
         if (!Hash::numeric(array_keys($data['EDEX']['groepen']['groep']))) {
             $data['EDEX']['groepen']['groep'] = [$data['EDEX']['groepen']['groep']];
         }
         $this->_schoolClasses = $this->_convertSchoolClasses($data['EDEX']['groepen']['groep']);
         $result['SchoolClass'] = $this->_schoolClasses;
     }
     if (!empty($data['EDEX']['leerlingen']['leerling'])) {
         if (!Hash::numeric(array_keys($data['EDEX']['leerlingen']['leerling']))) {
             $data['EDEX']['leerlingen']['leerling'] = [$data['EDEX']['leerlingen']['leerling']];
         }
         foreach ($data['EDEX']['leerlingen']['leerling'] as $i => $student) {
             $result['Student'][$i] = $this->_convertStudent($student);
         }
     }
     if (!empty($data['EDEX']['leerkrachten']['leerkracht'])) {
         if (!Hash::numeric(array_keys($data['EDEX']['leerkrachten']['leerkracht']))) {
             $data['EDEX']['leerkrachten']['leerkracht'] = [$data['EDEX']['leerkrachten']['leerkracht']];
         }
         foreach ($data['EDEX']['leerkrachten']['leerkracht'] as $i => $teacher) {
             $result['Teacher'][$i] = $this->_convertTeacher($teacher);
         }
     }
     return $result;
 }