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));
         }
     }
 }
Example #4
0
 /**
  * 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'];
         }
     }
 }