예제 #1
0
 /**
  * Remove a field
  *
  * @param  array $fields
  * @param  array $config
  * @return void
  */
 public function remove(array $fields, array $config)
 {
     if (isset($fields['rm_fields'])) {
         $uploadFolder = BASE_PATH . CONTENT_PATH . '/files';
         $mediaLibrary = $config['media_library'];
         foreach ($fields['rm_fields'] as $id) {
             $field = Table\Fields::findById((int) $id);
             if (isset($field->id)) {
                 if ($field->type == 'file') {
                     if ($field->storage == 'eav') {
                         $values = Table\FieldValues::findBy(['field_id' => $field->id]);
                         foreach ($values->rows() as $value) {
                             $val = json_decode($value->value);
                             if (is_array($val)) {
                                 foreach ($val as $v) {
                                     if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $v)) {
                                         unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $v);
                                         if (null !== $mediaLibrary && class_exists('Phire\\Media\\Model\\Media')) {
                                             $media = new \Phire\Media\Model\Media();
                                             $media->getByFile($v);
                                             if (isset($media->id) && $media->library_folder == $mediaLibrary) {
                                                 $media->remove(['rm_media' => [$media->id]]);
                                             }
                                         }
                                     }
                                 }
                             } else {
                                 if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $val)) {
                                     unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $val);
                                     if (null !== $mediaLibrary && class_exists('Phire\\Media\\Model\\Media')) {
                                         $media = new \Phire\Media\Model\Media();
                                         $media->getByFile($val);
                                         if (isset($media->id) && $media->library_folder == $mediaLibrary) {
                                             $media->remove(['rm_media' => [$media->id]]);
                                         }
                                     }
                                 }
                             }
                         }
                     } else {
                         $fv = new Record();
                         $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                         $fv->findAllRecords();
                         if ($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 && class_exists('Phire\\Media\\Model\\Media')) {
                                         $media = new \Phire\Media\Model\Media();
                                         $media->getByFile($f->value);
                                         if (isset($media->id) && $media->library_folder == $mediaLibrary) {
                                             $media->remove(['rm_media' => [$media->id]]);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 if ($field->storage != 'eav') {
                     $this->dropFieldTable($field->name);
                 }
                 $field->delete();
             }
         }
     }
 }
예제 #2
0
 /**
  * Copy template
  *
  * @param  \Pop\Module\Manager $modules
  * @return void
  */
 public function copy(\Pop\Module\Manager $modules)
 {
     $oldId = (int) $this->data['id'];
     $template = Table\Templates::findById($oldId);
     if (isset($template->id)) {
         $i = 1;
         $name = $template->name . ' (Copy ' . $i . ')';
         $dupeTemplate = Table\Templates::findBy(['name' => $name]);
         while (isset($dupeTemplate->id)) {
             $i++;
             $name = $template->name . ' (Copy ' . $i . ')';
             $dupeTemplate = Table\Templates::findBy(['name' => $name]);
         }
         $newTemplate = new Table\Templates(['parent_id' => $template->parent_id, 'name' => $name, 'device' => null !== $template->parent_id ? null : 'desktop', 'template' => $template->template, 'history' => $template->history]);
         $newTemplate->save();
         if ($modules->isRegistered('phire-fields')) {
             $fv = \Phire\Fields\Table\FieldValues::findBy(['model_id' => $oldId]);
             if ($fv->count() > 0) {
                 foreach ($fv->rows() as $value) {
                     $v = new \Phire\Fields\Table\FieldValues(['field_id' => $value->field_id, 'model_id' => $newTemplate->id, 'model' => 'Phire\\Templates\\Model\\Template', 'value' => $value->value, 'timestamp' => time(), 'history' => $value->history]);
                     $v->save();
                 }
             }
         }
         $this->data = array_replace($this->data, $newTemplate->getColumns());
     }
 }
예제 #3
0
 /**
  * Process a form submission
  *
  * @param  array $fields
  * @return void
  */
 public function process(array $fields)
 {
     if (isset($fields['rm_submissions'])) {
         foreach ($fields['rm_submissions'] as $id) {
             $fv = \Phire\Fields\Table\FieldValues::findBy(['model_id' => $id]);
             foreach ($fv->rows() as $value) {
                 $field = \Phire\Fields\Table\Fields::findById($value->field_id);
                 if (isset($field->id) && $field->type == 'file') {
                     $file = json_decode($value->value);
                     if (file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/files/' . $file)) {
                         unlink($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/files/' . $file);
                     }
                 }
             }
             $fv = new \Phire\Fields\Table\FieldValues();
             $fv->delete(['model_id' => $id]);
             $form = Table\FormSubmissions::findById((int) $id);
             if (isset($form->id)) {
                 $form->delete();
             }
         }
     }
 }
예제 #4
0
 /**
  * Get all entity field names
  *
  * @param  array $rows
  * @return array
  */
 public function getAllFields(array $rows)
 {
     $fieldNames = [];
     foreach ($rows as $i => $row) {
         if (class_exists('Phire\\Fields\\Model\\FieldValue')) {
             $class = 'Phire\\Entities\\Model\\Entity';
             $sql = \Phire\Fields\Table\Fields::sql();
             $sql->select()->where('models LIKE :models');
             $sql->select()->orderBy('order');
             $value = $sql->getDbType() == \Pop\Db\Sql::SQLITE ? '%' . $class . '%' : '%' . addslashes($class) . '%';
             $fields = \Phire\Fields\Table\Fields::execute((string) $sql, ['models' => $value]);
             foreach ($fields->rows() as $field) {
                 $field->models = unserialize($field->models);
                 if ($this->isFieldAllowed($field->models, $row)) {
                     if ($field->storage == 'eav') {
                         $fv = \Phire\Fields\Table\FieldValues::findBy(['field_id' => $field->id, 'model_id' => $row->id, 'model' => 'Phire\\Entities\\Model\\Entity']);
                         foreach ($fv->rows() as $fv) {
                             if (!array_key_exists($field->name, $fieldNames)) {
                                 $fieldNames[$field->name] = $field->type;
                             }
                             $rows[$i][$field->name] = json_decode($fv->value, true);
                         }
                     } else {
                         $fv = new \Pop\Db\Record();
                         $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                         $fv->findRecordsBy(['model_id' => $row->id, 'model' => 'Phire\\Entities\\Model\\Entity', 'revision' => 0]);
                         if (!array_key_exists($field->name, $fieldNames)) {
                             $fieldNames[$field->name] = $field->type;
                         }
                         if ($fv->count() > 1) {
                             $rows[$i][$field->name] = [];
                             foreach ($fv->rows() as $f) {
                                 $rows[$i][$field->name][] = $f->value;
                             }
                         } else {
                             $rows[$i][$field->name] = $fv->value;
                         }
                     }
                 }
             }
         }
     }
     return $fieldNames;
 }
예제 #5
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]);
                         }
                     }
                 }
             }
         }
     }
 }
예제 #6
0
 /**
  * Copy content
  *
  * @param  int $userId
  * @return void
  */
 public function copy($userId)
 {
     $oldId = (int) $this->data['id'];
     $content = Table\Content::findById($oldId);
     if (isset($content->id)) {
         $i = 1;
         $title = $content->title . ' (Copy ' . $i . ')';
         $uri = $content->uri . '-' . $i;
         $slug = $content->slug . '-' . $i;
         $dupeContent = Table\Content::findBy(['uri' => $uri]);
         while (isset($dupeContent->id)) {
             $i++;
             $title = $content->title . ' (Copy ' . $i . ')';
             $uri = $content->uri . '-' . $i;
             $slug = $content->slug . '-' . $i;
             $dupeContent = Table\Content::findBy(['uri' => $uri]);
         }
         $newContent = new Table\Content(['type_id' => $content->type_id, 'parent_id' => $content->parent_id, 'title' => $title, 'uri' => $uri, 'slug' => $slug, 'publish' => date('Y-m-d H:i:s'), 'expire' => null, 'status' => -1, 'template' => $content->template, 'roles' => $content->roles, 'order' => $content->order, 'force_ssl' => $content->force_ssl, 'created' => date('Y-m-d H:i:s'), 'created_by' => $userId]);
         $newContent->save();
         if (class_exists('Phire\\Fields\\Table\\FieldValues')) {
             $fv = \Phire\Fields\Table\FieldValues::findBy(['model_id' => $oldId]);
             if ($fv->count() > 0) {
                 foreach ($fv->rows() as $value) {
                     $v = new \Phire\Fields\Table\FieldValues(['field_id' => $value->field_id, 'model_id' => $newContent->id, 'model' => 'Phire\\Content\\Model\\Content', 'value' => $value->value, 'timestamp' => time(), 'history' => $value->history]);
                     $v->save();
                 }
             }
         }
         $this->data = array_replace($this->data, $newContent->getColumns());
     }
 }