count() публичный Метод

Method to return the current number of records.
public count ( ) : integer
Результат integer
Пример #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;
 }
Пример #2
0
 /**
  * Save dynamic field values to a field table
  *
  * @param  Application $application
  * @param  T\Fields    $field
  * @param  mixed       $value
  * @param  string      $model
  * @param  int         $modelId
  * @param  string      $uploadFolder
  * @param  string      $mediaLibrary
  * @return void
  */
 public static function save(Application $application, $field, $value, $model, $modelId, $uploadFolder = null, $mediaLibrary = null)
 {
     $fieldId = $field->id;
     $key = 'field_' . $fieldId;
     switch ($field->storage) {
         case 'int':
             $value = (int) $value;
             break;
         case 'float':
             $value = (double) $value;
             break;
         case 'date':
             $value = date('Y-m-d', strtotime($value));
             break;
         case 'time':
             $value = date('H:i:s', strtotime($value));
             break;
         case 'datetime':
             $value = date('Y-m-d H:i:s', strtotime($value));
             break;
     }
     $fv = new Record();
     $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
     $fv->findRecordsBy(['model_id' => $modelId, 'model' => $model], ['order' => 'timestamp DESC']);
     if (isset($fv->model_id)) {
         if (strpos($field->type, '-history') !== false) {
             $historyAry = $fv->rows();
             if ($historyAry[0]->value != $value) {
                 if ($fv->count() == $application->module('phire-fields')->config()['history']) {
                     $fv = new Record();
                     $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                     $fv->delete(['model_id' => $modelId, 'model' => $model, 'timestamp' => end($historyAry)->timestamp]);
                 }
                 $fv = new Record();
                 $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                 $fv->findRecordsBy(['model_id' => $modelId, 'model' => $model]);
                 $fvRows = $fv->rows();
                 foreach ($fvRows as $f) {
                     $fv->findRecordById($f->id);
                     if (isset($fv)) {
                         $fv->revision = 1;
                         $fv->save();
                     }
                 }
                 $fv = new Record(['model_id' => $modelId, 'model' => $model, 'timestamp' => time(), 'revision' => 0, 'value' => $value]);
                 $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $field->name);
                 $fv->save();
             }
         } else {
             if ($field->type == 'file') {
                 self::saveFiles($fieldId, $modelId, $model, $field->encrypt, $application, $uploadFolder, $mediaLibrary);
             } else {
                 $fv->delete();
                 self::saveValues($fieldId, $modelId, $model, $value, $field->encrypt);
             }
         }
     } else {
         if ($field->type == 'file' && isset($_FILES[$key]) && !empty($_FILES[$key]['tmp_name']) && !empty($_FILES[$key]['name'])) {
             self::saveFiles($fieldId, $modelId, $model, $field->encrypt, $application, $uploadFolder, $mediaLibrary);
         } else {
             self::saveValues($fieldId, $modelId, $model, $value, $field->encrypt);
         }
     }
 }
Пример #3
0
 /**
  * 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']);
 }
Пример #4
0
 public function testSetValues()
 {
     $r = new Record();
     $r->setValues(array('column' => 'value'));
     $this->assertEquals(1, $r->count());
     $r->setValues();
     $this->assertEquals(0, count($r->rows));
 }
Пример #5
0
 /**
  * Remove any media files
  *
  * @param  Application $application
  * @return void
  */
 public static function removeMedia(Application $application)
 {
     $uploadFolder = BASE_PATH . CONTENT_PATH . '/files';
     $mediaLibrary = $application->module('phire-fields')->config()['media_library'];
     if ($_POST && isset($_POST['rm_media']) && null !== $mediaLibrary && $application->isRegistered('phire-media')) {
         $media = new \Phire\Media\Model\Media();
         $fields = Table\Fields::findBy(['type' => 'file']);
         $fieldIds = [];
         foreach ($fields->rows() as $field) {
             $fieldIds[$field->id] = $field->name;
         }
         foreach ($_POST['rm_media'] as $mid) {
             $media->getById($mid);
             if (isset($media->id) && !empty($media->file)) {
                 $sql = Table\FieldValues::sql();
                 $sql->select()->where('value LIKE :value');
                 $fv = Table\FieldValues::execute((string) $sql, ['value' => '%"' . $media->file . '"%']);
                 // Remove field value media files from EAV field table
                 if ($fv->count() > 0) {
                     if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file)) {
                         unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file);
                     }
                     foreach ($fv->rows() as $val) {
                         $v = json_decode($val->value);
                         if (is_array($v) && in_array($media->file, $v)) {
                             $sql = Table\FieldValues::sql();
                             $sql->select()->where('field_id = :field_id')->where('model_id = :model_id')->where('value LIKE :value');
                             $f = Table\FieldValues::execute((string) $sql, ['field_id' => $val->field_id, 'model_id' => $val->model_id, 'value' => '%"' . $media->file . '"%']);
                             if (isset($f->field_id)) {
                                 unset($v[array_search($media->file, $v)]);
                                 if (count($v) > 0) {
                                     $v = array_values($v);
                                     $f->value = json_encode($v);
                                     $f->save();
                                 } else {
                                     $f->delete();
                                 }
                             }
                         } else {
                             $f = Table\FieldValues::findBy(['field_id' => $val->field_id, 'model_id' => $val->model_id, 'value' => '"' . $media->file . '"']);
                             $f->delete();
                         }
                     }
                 }
                 // Remove field value media files from field tables
                 foreach ($fieldIds as $fieldId => $fieldName) {
                     $fv = new Record();
                     $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $fieldName);
                     $sql = $fv->getSql();
                     $sql->select()->where('value LIKE :value');
                     $fv->executeStatement($sql, ['value' => '%"' . $media->file . '"%']);
                     if ($fv->count() > 0) {
                         if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file)) {
                             unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file);
                         }
                         foreach ($fv->rows() as $val) {
                             $f = new Record();
                             $f->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('fields_' . $fieldName);
                             $f->findRecordById($val->id);
                             if (isset($f->id)) {
                                 $f->delete();
                             }
                         }
                     }
                 }
             }
         }
     }
 }