Exemple #1
0
 /**
  * Get view by ID
  *
  * @param  int $id
  * @return void
  */
 public function getById($id)
 {
     $view = Table\Views::findById($id);
     if (isset($view->id)) {
         $data = $view->getColumns();
         if (!empty($data['group_fields'])) {
             $data['group_fields'] = explode('|', $data['group_fields']);
             $data['_group_fields'] = [];
             $data['group_fields_names'] = [];
             foreach ($data['group_fields'] as $id) {
                 $data['_group_fields'][] = '_' . $id;
                 if (!is_numeric($id)) {
                     $data['group_fields_names'][] = $id;
                 } else {
                     $f = \Phire\Fields\Table\Fields::findById($id);
                     if (isset($f->id)) {
                         $data['group_fields_names'][] = $f->name;
                     }
                 }
             }
         }
         if (!empty($data['single_fields'])) {
             $data['single_fields'] = explode('|', $data['single_fields']);
             $data['_single_fields'] = [];
             $data['single_fields_names'] = [];
             foreach ($data['single_fields'] as $id) {
                 $data['_single_fields'][] = '_' . $id;
                 if (!is_numeric($id)) {
                     $data['single_fields_names'][] = $id;
                 } else {
                     $f = \Phire\Fields\Table\Fields::findById($id);
                     if (isset($f->id)) {
                         $data['single_fields_names'][] = $f->name;
                     }
                 }
             }
         }
         if (!empty($data['models'])) {
             $data['models'] = unserialize($data['models']);
         }
         $this->data = array_merge($this->data, $data);
     }
 }
Exemple #2
0
 /**
  * Save field values
  *
  * @param  array  $fields
  * @param  int    $modelId
  * @param  string $model
  * @return array
  */
 public function save(array $fields, $modelId, $model)
 {
     $values = [];
     foreach ($fields as $name => $value) {
         if (substr($name, 0, 6) == 'field_') {
             $fieldId = substr($name, strpos($name, '_') + 1);
             $field = Table\Fields::findById($fieldId);
             if (isset($field->id)) {
                 if ($field->storage == 'eav') {
                     if ($field->encrypt) {
                         if (is_array($value)) {
                             foreach ($value as $k => $v) {
                                 $value[$k] = (new Mcrypt())->create($v);
                             }
                         } else {
                             $value = (new Mcrypt())->create($value);
                         }
                     }
                     $fv = new Table\FieldValues(['field_id' => $fieldId, 'model_id' => $modelId, 'model' => $model, 'value' => json_encode($value), 'timestamp' => time()]);
                     $fv->save();
                 } else {
                     if (!is_array($value)) {
                         $value = [$value];
                     }
                     foreach ($value as $v) {
                         if ($field->encrypt) {
                             $v = (new Mcrypt())->create($v);
                         }
                         $fv = new Record(['model_id' => $modelId, 'model' => $model, 'timestamp' => time(), 'revision' => 0, 'value' => $v]);
                         $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                         $fv->save();
                     }
                 }
                 $values[$field->name] = $value;
             }
         }
     }
     return $values;
 }
Exemple #3
0
 /**
  * Delete dynamic field files
  *
  * @param  int         $fieldId
  * @param  int         $modelId
  * @param  string      $model
  * @param  boolean     $encrypt
  * @param  Application $app
  * @param  string      $uploadFolder
  * @param  string      $mediaLibrary
  * @return void
  */
 protected static function saveFiles($fieldId, $modelId, $model, $encrypt, $app, $uploadFolder, $mediaLibrary = null)
 {
     $field = T\Fields::findById($fieldId);
     if (isset($field->id)) {
         $time = time();
         $newValues = [];
         $oldValues = new Record();
         $oldValues->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
         $oldValues->findRecordsBy(['model_id' => $modelId, 'model' => $model], ['order' => 'id ASC']);
         $old = $oldValues->rows(false);
         foreach ($_FILES as $key => $file) {
             $id = substr_count($key, '_') == 2 ? substr($key, strrpos($key, '_') + 1) : 0;
             if (!empty($_FILES[$key]['tmp_name']) && !empty($_FILES[$key]['name'])) {
                 if (null !== $mediaLibrary) {
                     $library = new \Phire\Media\Model\MediaLibrary();
                     $library->getByFolder($mediaLibrary);
                     if (isset($library->id)) {
                         $settings = $library->getSettings();
                         $mediaUpload = new Upload($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $library->folder, $settings['max_filesize'], $settings['disallowed_types'], $settings['allowed_types']);
                         if ($mediaUpload->test($_FILES[$key])) {
                             $media = new \Phire\Media\Model\Media();
                             $media->save($_FILES[$key], ['library_id' => $library->id]);
                             $value = $media->file;
                             if ($encrypt) {
                                 $value = (new Mcrypt())->create($value);
                             }
                             if (isset($old[$id])) {
                                 $replaceValue = new Record();
                                 $replaceValue->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                                 $replaceValue->findRecordById($old[$id]['id']);
                                 if (isset($replaceValue->id)) {
                                     $replaceValue->value = $value;
                                     $replaceValue->save();
                                     if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $old[$id]['value'])) {
                                         unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $old[$id]['value']);
                                     }
                                     if (file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $library->folder . '/' . $old[$id]['value'])) {
                                         $media = new \Phire\Media\Model\Media();
                                         $media->getByFile($old[$id]['value']);
                                         if (isset($media->id)) {
                                             $media->remove(['rm_media' => [$media->id]]);
                                         }
                                     }
                                 }
                             } else {
                                 $newValues[] = $value;
                             }
                             copy($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $library->folder . '/' . $media->file, $_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file);
                         }
                     }
                 } else {
                     $upload = new Upload($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/', $app->module('phire-fields')->config()['max_size'], $app->module('phire-fields')->config()['disallowed_types'], $app->module('phire-fields')->config()['allowed_types']);
                     $value = $upload->upload($_FILES[$key]);
                     if ($encrypt) {
                         $value = (new Mcrypt())->create($value);
                     }
                     if (isset($old[$id])) {
                         $replaceValue = new Record();
                         $replaceValue->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                         $replaceValue->findRecordById($old[$id]['id']);
                         if (isset($replaceValue->id)) {
                             $replaceValue->value = $value;
                             $replaceValue->save();
                             if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $old[$id]['value'])) {
                                 unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $old[$id]['value']);
                             }
                         }
                     } else {
                         $newValues[] = $value;
                     }
                 }
             }
         }
         foreach ($newValues as $v) {
             if (!empty($v)) {
                 $fv = new Record(['model_id' => $modelId, 'model' => $model, 'timestamp' => $time, 'revision' => 0, 'value' => $v]);
                 $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                 $fv->save();
                 $fvs = new Record();
                 $fvs->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                 $sql = $fvs->getSql();
                 $sql->update(['timestamp' => ':timestamp'])->where('model_id = :model_id')->where('model = :model');
                 $fvs->execute($sql, ['timestamp' => $time, 'model_id' => $modelId, 'model' => $model]);
             }
         }
     }
 }
Exemple #4
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();
             }
         }
     }
 }
 /**
  * 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();
             }
         }
     }
 }
 /**
  * JSON models action method
  *
  * @param  mixed $model
  * @param  mixed $fid
  * @param  mixed $marked
  * @return void
  */
 public function json($model = null, $fid = null, $marked = null)
 {
     $json = [];
     // Get field validators and models
     if ($model == 0 && null !== $fid) {
         $field = Table\Fields::findById($fid);
         if (isset($field->id)) {
             $json['validators'] = null != $field->validators ? unserialize($field->validators) : [];
             $json['models'] = null != $field->models ? unserialize($field->models) : [];
         }
         // Get field values
     } else {
         if (null !== $fid && null == $marked && null !== $this->request->getQuery('model')) {
             $field = Table\Fields::findById($fid);
             if ($field->dynamic) {
                 if ($field->storage == 'eav') {
                     $fv = Table\FieldValues::findById([$fid, $model, $this->request->getQuery('model')]);
                     if (!empty($fv->value)) {
                         $values = json_decode($fv->value, true);
                         if (is_array($values)) {
                             array_shift($values);
                         }
                     } else {
                         $values = [];
                     }
                 } else {
                     $fv = new Record();
                     $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                     $fv->findRecordsBy(['model_id' => $model, 'model' => $this->request->getQuery('model')], ['order' => 'id ASC']);
                     $values = [];
                     if ($fv->hasRows() && $fv->count() > 1) {
                         $rows = $fv->rows();
                         for ($i = 1; $i < count($rows); $i++) {
                             $values[] = $rows[$i]->value;
                         }
                     }
                 }
                 $json['values'] = $values;
             }
             // Get field history values
         } else {
             if (null !== $fid && null !== $marked && null !== $this->request->getQuery('model')) {
                 $field = Table\Fields::findById($fid);
                 $value = '';
                 if (isset($field->id)) {
                     if ($field->storage == 'eav') {
                         $fv = Table\FieldValues::findById([$fid, $model, $this->request->getQuery('model')]);
                         if (isset($fv->field_id) && null !== $fv->history) {
                             $history = json_decode($fv->history, true);
                             if (isset($history[$marked])) {
                                 $value = $history[$marked];
                                 $f = Table\Fields::findById($fid);
                                 if ($f->encrypt) {
                                     $value = (new \Pop\Crypt\Mcrypt())->decrypt($value);
                                 }
                             }
                         }
                         $json['fieldId'] = $fid;
                         $json['modelId'] = $model;
                         $json['model'] = $this->request->getQuery('model');
                         $json['value'] = $value;
                     } else {
                         $fv = new Record();
                         $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                         $fv->findRecordsBy(['model_id' => $model, 'model' => $this->request->getQuery('model'), 'timestamp' => $marked], ['order' => 'id ASC']);
                         if (isset($fv->model_id)) {
                             $value = $fv->value;
                             if ($field->encrypt) {
                                 $value = (new \Pop\Crypt\Mcrypt())->decrypt($value);
                             }
                         }
                         $json['fieldId'] = $fid;
                         $json['modelId'] = $model;
                         $json['model'] = $this->request->getQuery('model');
                         $json['value'] = $value;
                     }
                 }
                 // Get field models
             } else {
                 $model = rawurldecode($model);
                 $models = $this->application->module('phire-fields')->config()['models'];
                 if (isset($models[$model])) {
                     $json = $models[$model];
                 }
             }
         }
     }
     $this->response->setBody(json_encode($json, JSON_PRETTY_PRINT));
     $this->send(200, ['Content-Type' => 'application/json']);
 }
Exemple #7
0
 /**
  * Save dynamic field values
  *
  * @param  AbstractController $controller
  * @param  Application        $application
  * @return void
  */
 public static function save(AbstractController $controller, Application $application)
 {
     if ($_POST && $controller->hasView() && null !== $controller->view()->id && null !== $controller->view()->form && $controller->view()->form !== false && $controller->view()->form instanceof \Pop\Form\Form) {
         $fields = $controller->view()->form->getFields();
         $modelId = $controller->view()->id;
         $model = str_replace('Form', 'Model', get_class($controller->view()->form));
         $uploadFolder = BASE_PATH . CONTENT_PATH . '/files';
         $mediaLibrary = $application->module('phire-fields')->config()['media_library'];
         // Remove any files
         foreach ($_POST as $key => $value) {
             if (substr($key, 0, 14) == 'rm_field_file_' && isset($value[0])) {
                 $fieldId = substr($key, 14);
                 if (strpos($fieldId, '_') !== false) {
                     $fieldId = substr($fieldId, 0, strpos($fieldId, '_'));
                 }
                 $field = Table\Fields::findById($fieldId);
                 if (isset($field->id)) {
                     if ($field->storage == 'eav') {
                         $fv = Table\FieldValues::findById([$fieldId, $modelId, $model]);
                         if (isset($fv->field_id)) {
                             $oldValue = json_decode($fv->value);
                             if (is_array($oldValue)) {
                                 if (array_search($value[0], $oldValue) !== false) {
                                     $k = array_search($value[0], $oldValue);
                                     if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $oldValue[$k])) {
                                         unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $oldValue[$k]);
                                         if (null !== $mediaLibrary && $application->isRegistered('phire-media')) {
                                             $media = new \Phire\Media\Model\Media();
                                             $media->getByFile($oldValue[$k]);
                                             if (isset($media->id) && $media->library_folder == $mediaLibrary) {
                                                 $media->remove(['rm_media' => [$media->id]]);
                                             }
                                         }
                                     }
                                     unset($oldValue[$k]);
                                 }
                                 if (count($oldValue) == 0) {
                                     $fv->delete();
                                 } else {
                                     $oldValue = array_values($oldValue);
                                     $fv->value = json_encode($oldValue);
                                     $fv->save();
                                 }
                             } else {
                                 if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $oldValue)) {
                                     unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $oldValue);
                                     if (null !== $mediaLibrary && $application->isRegistered('phire-media')) {
                                         $media = new \Phire\Media\Model\Media();
                                         $media->getByFile($oldValue);
                                         if (isset($media->id) && $media->library_folder == $mediaLibrary) {
                                             $media->remove(['rm_media' => [$media->id]]);
                                         }
                                     }
                                 }
                                 $fv->delete();
                             }
                         }
                     } else {
                         $fv = new Record();
                         $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                         $fv->findRecordsBy(['model_id' => $modelId, 'model' => $model, 'value' => $value[0]]);
                         if (isset($fv->model_id)) {
                             if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $value[0])) {
                                 unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $value[0]);
                                 if (null !== $mediaLibrary && $application->isRegistered('phire-media')) {
                                     $media = new \Phire\Media\Model\Media();
                                     $media->getByFile($value[0]);
                                     if (isset($media->id) && $media->library_folder == $mediaLibrary) {
                                         $media->remove(['rm_media' => [$media->id]]);
                                     }
                                 }
                             }
                             $fv = new Record();
                             $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                             $fv->delete(['model_id' => $modelId, 'model' => $model, 'value' => $value[0]]);
                         }
                     }
                 }
             }
         }
         // Save field values
         foreach ($fields as $key => $value) {
             if (substr($key, 0, 6) == 'field_' && substr_count($key, '_') == 1) {
                 $fieldId = (int) substr($key, 6);
                 $field = Table\Fields::findById($fieldId);
                 if (isset($field->id)) {
                     if ($field->storage == 'eav') {
                         Value\Eav::save($application, $field, $value, $model, $modelId, $uploadFolder, $mediaLibrary);
                     } else {
                         Value\Table::save($application, $field, $value, $model, $modelId, $uploadFolder, $mediaLibrary);
                     }
                 }
             }
         }
     }
 }
Exemple #8
0
 /**
  * Copy form
  *
  * @param  int $id
  * @param  \Pop\Module\Manager $modules
  * @return void
  */
 public function copy($id, \Pop\Module\Manager $modules = null)
 {
     $oldForm = Table\Forms::findById((int) $id);
     if (isset($oldForm->id)) {
         $i = 1;
         $name = $oldForm->name . ' (Copy ' . $i . ')';
         $dupeForm = Table\forms::findBy(['name' => $name]);
         while (isset($dupeForm->id)) {
             $i++;
             $name = $oldForm->name . ' (Copy ' . $i . ')';
             $dupeForm = Table\forms::findBy(['name' => $name]);
         }
         $form = new Table\Forms(['name' => $name, 'method' => !empty($oldForm->method) ? $oldForm->method : null, 'to' => !empty($oldForm->to) ? $oldForm->to : null, 'from' => !empty($oldForm->from) ? $oldForm->from : null, 'reply_to' => !empty($oldForm->reply_to) ? $oldForm->reply_to : null, 'action' => !empty($oldForm->action) ? $oldForm->action : null, 'redirect' => !empty($oldForm->redirect) ? $oldForm->redirect : null, 'attributes' => !empty($oldForm->attributes) ? $oldForm->attributes : null, 'submit_value' => !empty($oldForm->submit_value) ? $oldForm->submit_value : null, 'submit_attributes' => !empty($oldForm->submit_attributes) ? $oldForm->submit_attributes : null, 'use_captcha' => !empty($oldForm->use_captcha) ? (int) $oldForm->use_captcha : null, 'use_csrf' => !empty($oldForm->use_csrf) ? (int) $oldForm->use_csrf : null, 'force_ssl' => !empty($oldForm->force_ssl) ? (int) $oldForm->force_ssl : null]);
         $form->save();
         $flds = null;
         if (null !== $modules && $modules->isRegistered('phire-fields')) {
             $flds = \Phire\Fields\Table\Fields::findAll();
         }
         if (null !== $flds) {
             foreach ($flds->rows() as $f) {
                 if (!empty($f->models)) {
                     $models = unserialize($f->models);
                     print_r($models);
                     foreach ($models as $model) {
                         if ($model['model'] == 'Phire\\Forms\\Model\\Form' && $oldForm->id == $model['type_value']) {
                             $models[] = ['model' => 'Phire\\Forms\\Model\\Form', 'type_field' => 'id', 'type_value' => $form->id];
                             $newField = \Phire\Fields\Table\Fields::findById($f->id);
                             if (isset($newField->id)) {
                                 $newField->models = serialize($models);
                                 $newField->save();
                             }
                         }
                     }
                 }
             }
         }
     }
 }