Example #1
0
 /**
  * Update an existing field
  *
  * @param  array $fields
  * @return void
  */
 public function update(array $fields)
 {
     $field = Table\Fields::findById($fields['id']);
     if (isset($field->id)) {
         $oldStorage = $field->storage;
         $oldFieldName = $field->name;
         $field->group_id = $fields['group_id'] != '----' ? (int) $fields['group_id'] : null;
         $field->storage = $fields['storage'];
         $field->type = $fields['type'];
         $field->name = $fields['name'];
         $field->label = !empty($fields['label']) ? $fields['label'] : null;
         $field->values = !empty($fields['values']) ? $fields['values'] : null;
         $field->default_values = !empty($fields['default_values']) ? $fields['default_values'] : null;
         $field->attributes = !empty($fields['attributes']) ? $fields['attributes'] : null;
         $field->validators = serialize($this->getValidators());
         $field->encrypt = !empty($fields['encrypt']) ? (int) $fields['encrypt'] : 0;
         $field->order = !empty($fields['order']) ? (int) $fields['order'] : 0;
         $field->required = !empty($fields['required']) ? (int) $fields['required'] : 0;
         $field->prepend = (int) $fields['prepend'];
         $field->dynamic = (int) $fields['dynamic'];
         $field->editor = !empty($fields['editor']) && strpos($fields['type'], 'textarea') !== false ? $fields['editor'] : null;
         $field->models = serialize($this->getModels());
         $field->save();
         if ($oldStorage != 'eav' && $field->storage == 'eav') {
             $this->dropFieldTable($field->name);
         } else {
             if ($oldStorage == 'eav' && $field->storage != 'eav') {
                 $f = new Table\FieldValues();
                 $f->delete(['field_id' => $field->id]);
                 $this->createFieldTable($field->name, $field->storage);
             } else {
                 if ($oldStorage != 'eav' && $field->storage != 'eav') {
                     if ($oldStorage != $field->storage || $oldFieldName != $field->name) {
                         $this->updateFieldTable($field->name, $oldFieldName, $field->storage);
                     }
                 }
             }
         }
         $this->data = array_merge($this->data, $field->getColumns());
     }
 }
Example #2
0
 /**
  * Delete dynamic field values
  *
  * @param  AbstractController $controller
  * @param  Application        $application
  *
  * @return void
  */
 public static function delete(AbstractController $controller, Application $application)
 {
     if ($_POST) {
         $uploadFolder = BASE_PATH . CONTENT_PATH . '/files';
         $mediaLibrary = $application->module('phire-fields')->config()['media_library'];
         foreach ($_POST as $key => $value) {
             if (substr($key, 0, 3) == 'rm_' && is_array($value)) {
                 $fields = Table\Fields::findBy();
                 $fieldIds = [];
                 $fieldTypes = [];
                 $fieldStorage = [];
                 foreach ($fields->rows() as $field) {
                     $fieldIds[$field->id] = $field->name;
                     $fieldTypes[$field->id] = $field->type;
                     $fieldStorage[$field->id] = $field->storage;
                 }
                 foreach ($value as $id) {
                     foreach ($fieldIds as $fieldId => $fieldName) {
                         if ($fieldStorage[$fieldId] == 'eav') {
                             $fv = Table\FieldValues::findBy(['model_id' => (int) $id]);
                             if ($fv->hasRows()) {
                                 foreach ($fv->rows() as $f) {
                                     $fValue = json_decode($f->value, true);
                                     if (!is_array($fValue)) {
                                         $fValue = [$fValue];
                                     }
                                     foreach ($fValue as $f) {
                                         if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $f)) {
                                             unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $f);
                                         }
                                         if (null !== $mediaLibrary && $application->isRegistered('phire-media')) {
                                             $library = new \Phire\Media\Model\MediaLibrary();
                                             $library->getByFolder($mediaLibrary);
                                             if (file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $library->folder . '/' . $f)) {
                                                 $media = new \Phire\Media\Model\Media();
                                                 $media->getByFile($f);
                                                 if (isset($media->id)) {
                                                     $media->remove(['rm_media' => [$media->id]]);
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                             $fv = new Table\FieldValues();
                             $fv->delete(['model_id' => (int) $id]);
                         } else {
                             $fv = new Record();
                             $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $fieldName);
                             $fv->findRecordsBy(['model_id' => (int) $id]);
                             if ($fieldTypes[$fieldId] == 'file' && $fv->hasRows()) {
                                 foreach ($fv->rows() as $f) {
                                     if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $f->value)) {
                                         unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $f->value);
                                     }
                                     if (null !== $mediaLibrary && $application->isRegistered('phire-media')) {
                                         $library = new \Phire\Media\Model\MediaLibrary();
                                         $library->getByFolder($mediaLibrary);
                                         if (file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $library->folder . '/' . $f->value)) {
                                             $media = new \Phire\Media\Model\Media();
                                             $media->getByFile($f->value);
                                             if (isset($media->id)) {
                                                 $media->remove(['rm_media' => [$media->id]]);
                                             }
                                         }
                                     }
                                 }
                             }
                             $fv->delete(['model_id' => (int) $id]);
                         }
                     }
                 }
             }
         }
     }
 }