Esempio n. 1
0
 public function preUpdateCallback($data)
 {
     if (isset($this->model->getDescription()->getFields()['updated'])) {
         $data['updated'] = date('Y-m-d H:i:s');
     }
     return $data;
 }
Esempio n. 2
0
 public function run($field, $data)
 {
     $test = [];
     foreach ($field['name'] as $name) {
         $test[$name] = isset($data[$name]) ? $data[$name] : null;
     }
     if ($this->mode == \ntentan\nibii\DataOperations::MODE_UPDATE) {
         $primaryKeyFields = $this->model->getDescription()->getPrimaryKey();
         $keys = [];
         foreach ($primaryKeyFields as $name) {
             $keys[$name] = $data[$name];
         }
         $testItem = $this->model->createNew()->fetchFirst($test);
         $intersection = array_intersect($testItem->toArray(), $keys);
         if (!empty($intersection)) {
             return true;
         }
     } else {
         $testItem = $this->model->createNew()->fields(array_keys($test))->fetchFirst($test);
     }
     return $this->evaluateResult($field, $testItem->count() === 0, "The value of " . implode(', ', $field['name']) . " must be unique");
 }
Esempio n. 3
0
 /**
  * 
  * @param RecordWrapper $model
  */
 public function __construct($model)
 {
     $this->table = $model->getTable();
     $this->name = Nibii::getModelName((new \ReflectionClass($model))->getName());
     $relationships = $model->getRelationships();
     $adapter = DriverAdapter::getDefaultInstance();
     $schema = Db::getDriver()->describeTable($this->table)[$this->table];
     $this->autoPrimaryKey = $schema['auto_increment'];
     foreach ($schema['columns'] as $field => $details) {
         $this->fields[$field] = ['type' => $adapter->mapDataTypes($details['type']), 'required' => !$details['nulls'], 'default' => $details['default'], 'name' => $field];
         if (isset($details['default'])) {
             $this->fields[$field]['default'] = $details['default'];
         }
         if (isset($details['length'])) {
             $this->fields[$field]['length'] = $details['length'];
         }
     }
     $this->appendConstraints($schema['primary_key'], $this->primaryKey, true);
     $this->appendConstraints($schema['unique_keys'], $this->uniqueKeys);
     foreach ($relationships as $type => $relations) {
         $this->createRelationships($type, $relations);
     }
 }
Esempio n. 4
0
 public function doDelete()
 {
     Db::getDriver()->beginTransaction();
     $parameters = $this->getQueryParameters(false);
     if ($parameters === null) {
         $primaryKey = $this->wrapper->getDescription()->getPrimaryKey();
         $parameters = $this->getQueryParameters();
         $data = $this->wrapper->getData();
         $keys = [];
         foreach ($data as $datum) {
             if ($this->dataOperations->isItemDeletable($primaryKey, $datum)) {
                 $keys[] = $datum[$primaryKey[0]];
             }
         }
         $parameters->addFilter($primaryKey[0], $keys);
         $this->adapter->delete($parameters);
     } else {
         $this->adapter->delete($parameters);
     }
     Db::getDriver()->commit();
     $this->resetQueryParameters();
 }
Esempio n. 5
0
 public static function init($namespace)
 {
     self::$namespace = $namespace;
     self::$prefix = Config::get('app.prefix');
     self::$prefix = (self::$prefix == '' ? '' : '/') . self::$prefix;
     self::setupAutoloader();
     logger\Logger::init('logs/app.log');
     Config::readPath(self::$configPath, 'ntentan');
     kaikai\Cache::init();
     panie\InjectionContainer::bind(ModelClassResolverInterface::class)->to(ClassNameResolver::class);
     panie\InjectionContainer::bind(ModelJoinerInterface::class)->to(ClassNameResolver::class);
     panie\InjectionContainer::bind(TableNameResolverInterface::class)->to(nibii\Resolver::class);
     panie\InjectionContainer::bind(ComponentResolverInterface::class)->to(ClassNameResolver::class);
     panie\InjectionContainer::bind(ControllerClassResolverInterface::class)->to(ClassNameResolver::class);
     panie\InjectionContainer::bind(controllers\RouterInterface::class)->to(DefaultRouter::class);
     if (Config::get('ntentan:db.driver')) {
         panie\InjectionContainer::bind(DriverAdapter::class)->to(Resolver::getDriverAdapterClassName());
         panie\InjectionContainer::bind(atiaa\Driver::class)->to(atiaa\Db::getDefaultDriverClassName());
     }
     Controller::setComponentResolverParameters(['type' => 'component', 'namespaces' => [$namespace, 'controllers\\components']]);
     nibii\RecordWrapper::setComponentResolverParameters(['type' => 'behaviour', 'namespaces' => [$namespace, 'nibii\\behaviours']]);
     controllers\ModelBinderRegister::setDefaultBinderClass(controllers\model_binders\DefaultModelBinder::class);
     controllers\ModelBinderRegister::register(utils\filesystem\UploadedFile::class, controllers\model_binders\UploadedFileBinder::class);
 }