Example #1
0
 /**
  * Get field values for a model object
  *
  * @param  mixed $model
  * @param  int   $id
  * @param  array $filters
  * @return mixed
  */
 public static function getModelObjectValues($model, $id = null, array $filters = [])
 {
     if (is_string($model)) {
         $class = $model;
     } else {
         $class = get_class($model);
         if (isset($model->id)) {
             $id = $model->id;
         }
     }
     $fieldValues = [];
     $sql = Table\Fields::sql();
     $sql->select()->where('models LIKE :models');
     $value = $sql->getDbType() == \Pop\Db\Sql::SQLITE ? '%' . $class . '%' : '%' . addslashes($class) . '%';
     $fields = Table\Fields::execute((string) $sql, ['models' => $value]);
     if (null !== $id && $fields->count() > 0) {
         foreach ($fields->rows() as $field) {
             $fValue = '';
             if ($field->storage == 'eav') {
                 $fv = Table\FieldValues::findById([$field->id, $id, $class]);
                 if (isset($fv->field_id)) {
                     $fValue = json_decode($fv->value);
                     foreach ($filters as $filter => $params) {
                         if (null !== $params && count($params) > 0) {
                             $params = array_merge([$fValue], $params);
                         } else {
                             $params = [$fValue];
                         }
                         $fValue = call_user_func_array($filter, $params);
                     }
                     if ($field->encrypt) {
                         if (is_array($fValue)) {
                             foreach ($fValue as $k => $fv) {
                                 $fValue = (new Mcrypt())->decrypt($fValue);
                             }
                         } else {
                             $fValue = (new Mcrypt())->decrypt($fValue);
                         }
                     }
                 }
             } else {
                 $fv = new Record();
                 $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                 $fv->findRecordsBy(['model_id' => $id, 'model' => $class, 'revision' => 0]);
                 if ($fv->hasRows()) {
                     if ($fv->count() > 1) {
                         $fValue = [];
                         foreach ($fv->rows() as $f) {
                             $fValue[] = $field->encrypt ? (new Mcrypt())->decrypt($f->value) : $f->value;
                         }
                     } else {
                         $fValue = $field->encrypt ? (new Mcrypt())->decrypt($fv->value) : $fv->value;
                     }
                 }
             }
             if (is_object($model)) {
                 $model->{$field->name} = self::parse($fValue);
             } else {
                 $fieldValues[$field->name] = self::parse($fValue);
             }
         }
     }
     return is_object($model) ? $model : $fieldValues;
 }
Example #2
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;
 }
Example #3
0
 /**
  * Get form submission values
  *
  * @param  \Pop\Module\Manager $modules
  * @return array
  */
 public function getValues(\Pop\Module\Manager $modules = null)
 {
     $values = [];
     $fieldNames = [];
     if (null !== $modules && $modules->isRegistered('phire-fields')) {
         $class = 'Phire\\Forms\\Model\\Form';
         $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) {
             if ($field->storage == 'eav') {
                 $fv = \Phire\Fields\Table\FieldValues::findBy(['field_id' => $field->id, 'model_id' => $this->id, 'model' => 'Phire\\Forms\\Model\\FormSubmission']);
                 foreach ($fv->rows() as $fv) {
                     $fieldNames[$field->name] = $field->type;
                     $values[$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' => $this->id, 'model' => 'Phire\\Forms\\Model\\FormSubmission', 'revision' => 0]);
                 $fieldNames[$field->name] = $field->type;
                 if ($fv->count() > 1) {
                     $values[$field->name] = [];
                     foreach ($fv->rows() as $f) {
                         $fieldNames[$field->name] = $field->type;
                         $values[$field->name][] = $f->value;
                     }
                 } else {
                     $values[$field->name] = $fv->value;
                 }
             }
         }
     }
     return ['values' => $values, 'fields' => $fieldNames];
 }
Example #4
0
 /**
  * Constructor method to instantiate the form object
  *
  * @param  mixed $id
  * @param  array $captchaConfig
  * @throws \Pop\Form\Exception
  * @return self
  */
 public function __construct($id, $captchaConfig = [])
 {
     $form = is_numeric($id) ? Table\Forms::findById($id) : Table\Forms::findBy(['name' => $id]);
     if (!isset($form->id)) {
         throw new \Pop\Form\Exception('That form does not exist.');
     }
     if (!class_exists('Phire\\Fields\\Model\\Field')) {
         throw new \Pop\Form\Exception('The phire-fields module is not installed or active.');
     }
     $fieldGroups = [];
     $submitAttributes = [];
     $formAttributes = [];
     $this->filter = (bool) $form->filter;
     if (!empty($form->submit_attributes)) {
         $attribs = explode('" ', $form->submit_attributes);
         foreach ($attribs as $attrib) {
             $attAry = explode('=', $attrib);
             $att = trim($attAry[0]);
             $val = str_replace('"', '', trim($attAry[1]));
             $submitAttributes[$att] = $val;
         }
     }
     if (!empty($form->attributes)) {
         $attribs = explode('" ', $form->attributes);
         foreach ($attribs as $attrib) {
             $attAry = explode('=', $attrib);
             $att = trim($attAry[0]);
             $val = str_replace('"', '', trim($attAry[1]));
             $formAttributes[$att] = $val;
         }
     }
     $sql = \Phire\Fields\Table\Fields::sql();
     $sql->select()->where('models LIKE :models');
     $sql->select()->orderBy('order', 'ASC');
     $value = $sql->getDbType() == \Pop\Db\Sql::SQLITE ? '%Phire\\Forms\\Model\\Form%' : '%Phire\\\\Forms\\\\Model\\\\Form%';
     $fields = \Phire\Fields\Table\Fields::execute((string) $sql, ['models' => $value]);
     foreach ($fields->rows() as $field) {
         if (null !== $field->group_id) {
             $fieldGroups[$field->group_id] = [];
         }
     }
     $fieldGroups[0] = [];
     $fieldGroups[-1] = [];
     foreach ($fields->rows() as $field) {
         $field->validators = unserialize($field->validators);
         $field->models = unserialize($field->models);
         if (null !== $field->group_id) {
             foreach ($field->models as $model) {
                 if (null === $model['type_value'] || $form->id == $model['type_value']) {
                     $fieldConfig = \Phire\Fields\Event\Field::createFieldConfig($field);
                     if (strpos($fieldConfig['label'], '<span class="editor-link-span">') !== false) {
                         $fieldConfig['label'] = str_replace('<span class="editor-link-span">', '<span style="display: none;" class="editor-link-span">', $fieldConfig['label']);
                     }
                     $fieldGroups[$field->group_id]['field_' . $field->id] = $fieldConfig;
                     break;
                 }
             }
         } else {
             if (null === $field->group_id) {
                 foreach ($field->models as $model) {
                     if (null === $model['type_value'] || $form->id == $model['type_value']) {
                         $fieldConfig = \Phire\Fields\Event\Field::createFieldConfig($field);
                         if (strpos($fieldConfig['label'], '<span class="editor-link-span">') !== false) {
                             $fieldConfig['label'] = str_replace('<span class="editor-link-span">', '<span style="display: none;" class="editor-link-span">', $fieldConfig['label']);
                         }
                         $fieldGroups[0]['field_' . $field->id] = $fieldConfig;
                         break;
                     }
                 }
             }
         }
     }
     if ($form->use_csrf) {
         $fieldGroups[-1]['csrf'] = ['type' => 'csrf'];
     }
     if ($form->use_captcha) {
         if (class_exists('Phire\\Captcha\\Model\\Captcha')) {
             $captcha = new \Phire\Captcha\Model\Captcha($captchaConfig);
             $captcha->createToken();
             $fieldGroups[-1]['captcha'] = ['type' => 'captcha', 'label' => 'Enter Code', 'token' => $captcha->token];
         } else {
             $fieldGroups[-1]['captcha'] = ['type' => 'captcha', 'label' => 'Please Solve: '];
         }
     }
     $fieldGroups[-1]['id'] = ['type' => 'hidden', 'value' => $form->id];
     $fieldGroups[-1]['submit'] = ['type' => 'submit', 'label' => '&nbsp;', 'value' => !empty($form->submit_value) ? $form->submit_value : 'SUBMIT', 'attributes' => $submitAttributes];
     parent::__construct($fieldGroups, null, $form->method);
     foreach ($formAttributes as $attrib => $value) {
         $this->setAttribute($attrib, $value);
     }
 }