/**
  * get appropriate fields with files
  * move uploaded file and set path to entity field, but only if a file was selected
  *
  * @param Entity $entity
  */
 public function uploadFile(Entity $entity)
 {
     $config = $this->config();
     if (!is_array($config['field'])) {
         $field = $entity->get($config['field']);
         if (empty($field['tmp_name'])) {
             $entity->unsetProperty($config['field']);
         } else {
             if ($entity->get($config['field']) != $entity->getOriginal($config['field'])) {
                 $originalFilePath = $entity->getOriginal($config['field']);
                 $this->_delete($originalFilePath);
             }
             $filePath = $this->_moveFile($field);
             $entity->set($config['field'], $filePath);
         }
     } else {
         foreach ($config['field'] as $value) {
             $field = $entity->get($value);
             if (empty($field['tmp_name'])) {
                 $entity->unsetProperty($config['field']);
             } else {
                 if ($entity->get($config['field']) != $entity->getOriginal($config['field'])) {
                     $originalFilePath = $entity->getOriginal($config['field']);
                     $this->_delete($originalFilePath);
                 }
                 $filePath = $this->_moveFile($field);
                 $entity->set($config['field'], $filePath);
             }
         }
     }
 }
Esempio n. 2
0
 /**
  * Tests setting multiple properties without custom setters
  *
  * @return void
  */
 public function testSetMultiplePropertiesNoSetters()
 {
     $entity = new Entity();
     $entity->accessible('*', true);
     $entity->set(['foo' => 'bar', 'id' => 1]);
     $this->assertEquals('bar', $entity->foo);
     $this->assertSame(1, $entity->id);
     $entity->set(['foo' => 'baz', 'id' => 2, 'thing' => 3]);
     $this->assertEquals('baz', $entity->foo);
     $this->assertSame(2, $entity->id);
     $this->assertSame(3, $entity->thing);
     $this->assertEquals('bar', $entity->getOriginal('foo'));
     $this->assertEquals(1, $entity->getOriginal('id'));
 }
 /**
  * Modifies the entity before it is saved so that uploaded file data is persisted
  * in the database too.
  *
  * @param \Cake\Event\Event $event The beforeSave event that was fired
  * @param \Cake\ORM\Entity $entity The entity that is going to be saved
  * @param \ArrayObject $options the options passed to the save method
  * @return void|false
  */
 public function beforeSave(Event $event, Entity $entity, ArrayObject $options)
 {
     foreach ($this->config() as $field => $settings) {
         if (Hash::get((array) $entity->get($field), 'error') !== UPLOAD_ERR_OK) {
             if (Hash::get($settings, 'restoreValueOnFailure', true)) {
                 $entity->set($field, $entity->getOriginal($field));
                 $entity->dirty($field, false);
             }
             continue;
         }
         $data = $entity->get($field);
         $path = $this->getPathProcessor($entity, $data, $field, $settings);
         $basepath = $path->basepath();
         $filename = $path->filename();
         $data['name'] = $filename;
         $files = $this->constructFiles($entity, $data, $field, $settings, $basepath);
         $writer = $this->getWriter($entity, $data, $field, $settings);
         $success = $writer->write($files);
         if ((new Collection($success))->contains(false)) {
             return false;
         }
         $entity->set($field, $filename);
         $entity->set(Hash::get($settings, 'fields.dir', 'dir'), $basepath);
         $entity->set(Hash::get($settings, 'fields.size', 'size'), $data['size']);
         $entity->set(Hash::get($settings, 'fields.type', 'type'), $data['type']);
     }
 }
Esempio n. 4
0
 /**
  * Test that getOriginal() retains falsey values.
  *
  * @return void
  */
 public function testGetOriginal()
 {
     $entity = new Entity(['false' => false, 'null' => null, 'zero' => 0, 'empty' => ''], ['markNew' => true]);
     $this->assertNull($entity->getOriginal('null'));
     $this->assertFalse($entity->getOriginal('false'));
     $this->assertSame(0, $entity->getOriginal('zero'));
     $this->assertSame('', $entity->getOriginal('empty'));
     $entity->set(['false' => 'y', 'null' => 'y', 'zero' => 'y', 'empty' => '']);
     $this->assertNull($entity->getOriginal('null'));
     $this->assertFalse($entity->getOriginal('false'));
     $this->assertSame(0, $entity->getOriginal('zero'));
     $this->assertSame('', $entity->getOriginal('empty'));
 }
 /**
  * Get old order and scope values.
  *
  * @param \Cake\ORM\Entity $entity Entity.
  *
  * @return array
  */
 protected function _getOldValues(Entity $entity)
 {
     $config = $this->config();
     $fields = array_merge($config['scope'], [$config['order']]);
     $values = [];
     foreach ($fields as $field) {
         if ($entity->dirty($field)) {
             $values[$field] = $entity->getOriginal($field);
         } elseif ($entity->has($field)) {
             $values[$field] = $entity->get($field);
         }
     }
     if (count($fields) != count($values)) {
         $primaryKey = $entity->get($this->_table->primaryKey());
         $values = $this->_table->get($primaryKey, ['fields' => $fields, 'limit' => 1])->toArray();
     }
     $order = $values[$config['order']];
     unset($values[$config['order']]);
     return [$order, $values];
 }
 /**
  * beforeSave callback
  *
  * @param \Cake\Event\Event $event Event.
  * @param \Cake\ORM\Entity $entity The Entity.
  * @param array $options Options.
  * @return void
  */
 public function beforeSave($event, $entity, $options)
 {
     $uploads = [];
     $fields = $this->getFieldList();
     foreach ($fields as $field => $data) {
         if (!is_string($entity->get($field))) {
             $uploads[$field] = $entity->get($field);
             $entity->set($field, null);
         }
         if (!$entity->isNew()) {
             $dirtyField = $entity->dirty($field);
             $originalField = $entity->getOriginal($field);
             if ($dirtyField && !is_null($originalField) && !is_array($originalField)) {
                 $fieldConfig = $this->config($field);
                 if ($fieldConfig['removeFileOnUpdate']) {
                     $this->_removeFile($entity->getOriginal($field));
                 }
             }
         }
     }
     $this->_uploads = $uploads;
 }
 /**
  * beforeSave callback
  *
  * @param \Cake\Event\Event $event Event.
  * @param \Cake\ORM\Entity $entity The Entity.
  * @param array $options Options.
  * @return void
  */
 public function beforeSave($event, $entity, $options)
 {
     $uploads = [];
     $fields = $this->getFieldList();
     $this->_customerSite = $options['loggedInCustomer'];
     foreach ($fields as $field => $data) {
         if (!is_string($entity->get($field))) {
             $uploads[$field] = $entity->get($field);
             $entity->set($field, null);
         }
         if (!$entity->isNew()) {
             $dirtyField = $entity->dirty($field);
             $originalField = $entity->getOriginal($field);
             if ($dirtyField && !is_null($originalField) && !is_array($originalField)) {
                 $fieldConfig = $this->config($field);
             }
         }
     }
     $this->_uploads = $uploads;
     /*
     * if (empty($options['loggedInUser'])) {
     			return;
     		}
     		if ($entity->isNew()) {
     			$entity->set('created_by', $options['loggedInUser']);
     		}
     		$entity->set('modified_by', $options['loggedInUser']);
     */
 }
 /**
  * beforeSave Event
  *
  * @param Event $event Event
  * @param Entity $entity Record
  * @return void
  */
 public function beforeSave(Event $event, Entity $entity)
 {
     $this->__originalSortValue = $entity->getOriginal($this->config('sortField'));
 }