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); }
/** * 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; }
/** * 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); }
/** * 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(); }
/** * {@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; }
/** * 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; }
/** * 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)); }
/** * 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; }
/** * 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(); }
/** * 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; }
/** * 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)); }
/** * 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']))); }
/** * 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); }
/** * 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; }