public function beforeSave(Model $model, $options = array()) { $columns = $model->getColumnTypes(); foreach ($model->data as $modelClass => $values) { foreach ($values as $field => $value) { if (!isset($columns[$field]) or $columns[$field] != 'binary') { continue; } if (is_array($value) and isset($value['size'])) { if ($value["size"] > 0) { $fileHandler = new BlobFileHandler(); $fileHandler->loadFromFile($value['tmp_name']); if ($fileHandler->getImageWith() > $this->config['imageMaxWidth']) { $fileHandler->modify('resize', $this->config['imageMaxWidth']); // max image size $fileData = $fileHandler->store(null, $fileHandler->resourceInfo[2], 90); } else { $fileData = file_get_contents($value['tmp_name']); } $model->data[$modelClass][$field] = $fileData; } else { unset($model->data[$modelClass][$field]); } } } } return true; }
private function index(Model $Model) { $index = array(); $data = $Model->data[$Model->alias]; if ($this->settings[$Model->name]['fields'] === '*') { $this->settings[$Model->name]['fields'] = array(); } if (is_string($this->settings[$Model->name]['fields'])) { $this->settings[$Model->name]['fields'] = array($this->settings[$Model->name]['fields']); } foreach ($data as $key => $value) { if (is_array($this->settings[$Model->name]['fields']) && count($this->settings[$Model->name]['fields']) < 1 || is_array($this->settings[$Model->name]['fields']) && in_array($key, $this->settings[$Model->name]['fields'])) { if (is_string($value)) { $columns = $Model->getColumnTypes(); if ($key != $Model->primaryKey && isset($columns[$key]) && in_array($columns[$key], array('text', 'varchar', 'char', 'string'))) { $index[] = strip_tags(html_entity_decode($value, ENT_COMPAT, 'UTF-8')); } } } } $index = join('. ', $index); // Some servers have issues with locale settings, we must set to the cake locale language before calling iconv. setlocale(LC_ALL, Configure::read('Config.language')); $index = iconv('UTF-8', 'ASCII//TRANSLIT', $index); $index = preg_replace('/[\\ ]+/', ' ', $index); $index = $this->removeStopwords($index); return $index; }
/** * Validate the presence of the required fields in the database * * @param Model $model */ private function validateDb(Model $model) { $columns = $model->getColumnTypes(); foreach ($this->settings[$model->alias]['fields'] as $field) { if (!isset($columns[$field])) { throw new FatalErrorException(__('The table %s for the model %s is missing the field %s!', $model->table, $model->alias, $field)); } } }
/** * Check and set missing configurations * * @param Model $model * @param array $config * @return void */ private function __checkConfig(Model $model, $config = null) { if ($config !== null || !isset($this->settings[$model->alias])) { $this->settings[$model->alias] = Set::merge($this->_defaultSettings, $config); } if (!isset($this->_modelFields[$model->alias])) { $this->_modelFields[$model->alias] = @$model->getColumnTypes(); } if (isset($this->typesFormat[$model->useDbConfig])) { return; } $db = $model->getDataSource(); $this->typesFormat[$model->useDbConfig] = array(); foreach ($db->columns as $type => $info) { if (isset($info['format'])) { $this->typesFormat[$model->useDbConfig][$type] = $info['format']; } } }