/**
  *
  * @return mixed[string]
  */
 public function getOptions()
 {
     if ($this->options === false) {
         $options = \Simplify::db()->query()->from($this->form->getTable())->select($this->getFieldName())->orderBy($this->getFieldName())->execute()->fetchCol();
         $options = array_combine($options, $options);
     } else {
         $options = (array) $this->options;
     }
     return $options;
 }
 /**
  * (non-PHPdoc)
  *
  * @see \Simplify\Form\Provider::getData()
  */
 public function getData()
 {
     if ($this->data === false) {
         $query = $this->query;
         if (is_array($query)) {
             $query = \Simplify::db()->query()->select($this->value)->select($this->label)->setParams($query);
         } elseif (is_string($query)) {
             $query = \Simplify::db()->query()->select($this->value)->select($this->label)->from($query);
         }
         $data = $query->execute()->fetchAll();
         $this->data = sy_array_to_options($data, $this->value, $this->label);
     }
     return $this->data;
 }
Exemple #3
0
 protected function buildPermalink(Action $action, $data, $post)
 {
     $id = $action->form->getId();
     $id = $id[0];
     $perma = call_user_func($this->callback, $data, $post);
     $perma = sy_slugify($perma);
     $pk = $action->form->getPrimaryKey();
     $table = $action->form->getTable();
     $field = $this->getFieldName();
     $i = 0;
     do {
         $c = $i ? '-' . $i : '';
         $sql = "SELECT {$pk} FROM {$table} WHERE {$field} LIKE '{$perma}{$c}'";
         if ($id) {
             $sql .= " AND {$pk} != {$id}";
         }
         $_row = \Simplify::db()->query($sql)->execute()->fetchOne();
         $i++;
     } while (!empty($_row) && $i < 10);
     $perma .= $c;
     return $perma;
 }
Exemple #4
0
 /**
  *
  * @return string
  */
 protected function filter()
 {
     if ($this->sortGroupColumn) {
         if (!\Simplify::request()->get()->has($this->sortGroupColumn)) {
             throw new \Exception("Missing sort group column value");
         }
         $value = \Simplify::request()->get($this->sortGroupColumn);
         $value = \Simplify::db()->quote($value);
         $filter = " {$this->sortGroupColumn} = {$value} ";
         return $filter;
     }
     return ' TRUE ';
 }
Exemple #5
0
 public function createRepository()
 {
     $create = '
   CREATE TABLE `%1$s` (
   	`%2$s` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
   	`%3$s` MEDIUMINT(8) UNSIGNED NOT NULL,
   	`%4$s` MEDIUMINT(8) UNSIGNED NOT NULL,
   	`%5$s` MEDIUMINT(8) UNSIGNED NOT NULL,
   	PRIMARY KEY (`%2$s`),
   	INDEX `tree_parent_id` (`%3$s`),
   	INDEX `tree_left_id` (`%4$s`),
   	INDEX `tree_right_id` (`%5$s`)
   )
   COLLATE=\'utf8_general_ci\'
   ENGINE=InnoDB
 ';
     $sql = sprintf($create, $this->table, $this->pk, $this->parent, $this->left, $this->right);
     if (\Simplify::db()->query($sql)->executeRaw() === false) {
         throw new \Simplify\Db\DatabaseException('Could not create table');
     }
 }
 /**
  * 
  * @param unknown_type $data
  * @return multitype:multitype:Ambigous <unknown, ArrayAccess>  multitype:unknown
  */
 public function getOptions($data)
 {
     $t = $this->getTable();
     $pk = $this->getPrimaryKey();
     $fk = $this->getForeignKey();
     $at = $this->getAssociationTable();
     $apk = $this->getAssociationPrimaryKey();
     $afk = $this->getAssociationForeignKey();
     $q = \Simplify::db()->query()->select("{$t}.{$fk}")->select("{$t}.{$this->labelField}")->select("{$at}.{$afk} AS checked")->from($t)->leftJoin("{$at} ON ({$t}.{$fk} = {$at}.{$afk} AND {$at}.{$apk} = :{$pk})");
     $data = $q->execute(array($pk => $data[\Simplify\Form::ID]))->fetchAll();
     $options = sy_array_to_options($data, $fk, $this->labelField);
     $checked = array();
     foreach ($data as $row) {
         if ($row['checked']) {
             $checked[] = $row[$fk];
         }
     }
     return array('options' => $options, 'checked' => $checked);
 }
Exemple #7
0
 public static function addGroupPermission($group_id, $permission_id)
 {
     if (is_string($permission_id)) {
         $permission_id = \Simplify::db()->query()->from(\Simplify::config()->get('amp:tables:permissions'))->select('permission_id')->where('permission_name = ?')->execute($permission_id)->fetchOne();
         if (empty($permission_id)) {
             throw new \Exception("Could not add group permission: invalid permission id");
         }
     }
     $data = array('permission_id' => $permission_id, 'group_id' => $group_id);
     \Simplify::db()->query('INSERT IGNORE INTO ' . \Simplify::config()->get('amp:tables:groups_permissions') . ' VALUES (:permission_id, :group_id)')->execute($data);
 }
Exemple #8
0
 /**
  * Get minimum and maximum datetime values from database
  *
  * @return string[]
  */
 protected function loadDatabaseLimits()
 {
     $limits = \Simplify::db()->query()->from($this->form->getTable())->select("MIN({$this->getFieldName()}) AS min, MAX({$this->getFieldName()}) AS max")->execute()->fetchRow();
     $minDate = \Simplify\Form\DateTime::timestamp($limits['min']);
     $maxDate = \Simplify\Form\DateTime::timestamp($limits['max']);
     $this->minDate = max(\Simplify\Form\DateTime::timestamp($this->minDate), $minDate);
     $this->maxDate = min(\Simplify\Form\DateTime::timestamp($this->maxDate), $maxDate);
     if (empty($this->maxDate)) {
         $this->maxDate = $maxDate;
     }
 }
Exemple #9
0
 public function create()
 {
     if (!$this->exists()) {
         if (empty($this->columns)) {
             throw new \Simplify\Db\DatabaseException('Cannot create empty table');
         }
         $create = "CREATE TABLE `%1\$s` (\n%2\$s\n) \nCOLLATE='utf8_general_ci' ENGINE=InnoDB";
         $s = array();
         foreach ($this->columns as $field => $column) {
             $s[] = '  ' . $column->getColumnSql();
         }
         foreach ($this->indexes as $type => $index) {
             if ($type == 'PRIMARY') {
                 $s[] = sprintf('  PRIMARY KEY (`%s`)', implode('` , `', (array) $index->fields));
             } elseif (!empty($index->unique)) {
                 $s[] = sprintf('  UNIQUE INDEX `%s` (`%s`)', $type, implode('` , `', (array) $index->fields));
             } else {
                 $s[] = sprintf('  INDEX `%s` (`%s`)', $type, implode('` , `', (array) $index->fields));
             }
         }
         $sql = sprintf($create, $this->name, implode(",\n", $s));
         \Simplify::db()->query($sql)->execute();
         $this->loadSchema();
     }
 }
Exemple #10
0
 /**
  * (non-PHPdoc)
  * @see \Simplify\Form\Action::onLoadData()
  */
 protected function onLoadData()
 {
     $elements = $this->getElements();
     $name = $this->getNameField();
     $value = $this->getValueField();
     $params = array();
     $params[\Simplify\Db\QueryParameters::SELECT][] = $value;
     $this->formData = array();
     $elements->rewind();
     while ($elements->valid()) {
         $element = $elements->current();
         $elements->next();
         $params[\Simplify\Db\QueryParameters::WHERE][] = "{$name} = :{$name}";
         $params[\Simplify\Db\QueryParameters::DATA] = array($name => $element->getFieldName());
         $row = array();
         $row['found'] = \Simplify::db()->query()->from($this->getTable())->setParams($params)->execute()->fetchRow();
         $row['data'][$element->getFieldName()] = sy_get_param($row['found'], $value);
         $this->formData[$element->getName()] = $row;
         $element->onLoadData($this, $this->formData[$element->getName()]['data'], $row['data']);
     }
 }
 function sy_format_sql($query, array $data = null)
 {
     if (!empty($data)) {
         foreach ($data as $name => $value) {
             $query = str_replace(':' . $name, \Simplify::db()->quote($value), $query);
         }
     }
     return $query;
 }
Exemple #12
0
 /**
  * Read an option
  *
  * @param string $name            
  * @return array
  */
 public static function read($name)
 {
     self::autoLoad();
     if (isset(self::$options[$name])) {
         $option = self::$options[$name];
     } else {
         $option = \Simplify::db()->query()->from(\Simplify::config()->get('amp:tables:options'))->where('option_name = ?')->execute($name)->fetchRow();
     }
     return $option;
 }
Exemple #13
0
 /**
  * Upgrade database tables to last version
  */
 protected static function upgrade()
 {
     $query = 'CREATE TABLE IF NOT EXISTS `' . \Simplify::config()->get('amp:tables:options') . '` (
             `option_id` mediumint(8) NOT NULL AUTO_INCREMENT,
             `option_name` varchar(255) NOT NULL,
             `option_value` text NOT NULL,
             `option_modified_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
             `option_autoload` tinyint(1) unsigned NOT NULL DEFAULT \'0\',
             PRIMARY KEY (`option_id`),
             UNIQUE KEY `option_name` (`option_name`),
             KEY `option_autoload` (`option_autoload`)
         ) ENGINE=MyISAM DEFAULT CHARSET=utf8;';
     \Simplify::db()->query($query)->executeRaw();
     $version = intval(\Amplify\Options::value('db_version', 0));
     if ($version <= 0) {
         $queries = array('CREATE TABLE IF NOT EXISTS `' . \Simplify::config()->get('amp:tables:groups') . '` (
                 `group_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
                 `group_name` varchar(255) NOT NULL,
                 PRIMARY KEY (`group_id`),
                 UNIQUE KEY `group_name` (`group_name`)
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;', 'CREATE TABLE IF NOT EXISTS `' . \Simplify::config()->get('amp:tables:groups_permissions') . '` (
                 `group_id` mediumint(8) unsigned NOT NULL,
                 `permission_id` mediumint(8) unsigned NOT NULL,
                 UNIQUE KEY `group_id_permission_id` (`group_id`,`permission_id`),
                 KEY `FK_groups_permissions_permissions` (`permission_id`),
                 CONSTRAINT `FK_groups_permissions_groups` FOREIGN KEY (`group_id`) REFERENCES `' . \Simplify::config()->get('amp:tables:groups') . '` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE,
                 CONSTRAINT `FK_groups_permissions_permissions` FOREIGN KEY (`permission_id`) REFERENCES `' . \Simplify::config()->get('amp:tables:permissions') . '` (`permission_id`) ON DELETE CASCADE ON UPDATE CASCADE
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;', 'CREATE TABLE IF NOT EXISTS `' . \Simplify::config()->get('amp:tables:groups_users') . '` (
                 `user_id` mediumint(8) unsigned NOT NULL,
                 `group_id` mediumint(8) unsigned NOT NULL,
                 UNIQUE KEY `user_id_group_id` (`user_id`,`group_id`),
                 KEY `FK_groups_users_groups` (`group_id`),
                 CONSTRAINT `FK_groups_users_groups` FOREIGN KEY (`group_id`) REFERENCES `' . \Simplify::config()->get('amp:tables:groups') . '` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE,
                 CONSTRAINT `FK_groups_users_users` FOREIGN KEY (`user_id`) REFERENCES `' . \Simplify::config()->get('amp:tables:users') . '` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;', 'CREATE TABLE IF NOT EXISTS `' . \Simplify::config()->get('amp:tables:permissions') . '` (
                 `permission_id` mediumint(255) unsigned NOT NULL AUTO_INCREMENT,
                 `permission_name` varchar(255) NOT NULL,
                 `permission_description` varchar(255) DEFAULT NULL,
                 PRIMARY KEY (`permission_id`),
                 UNIQUE KEY `permission_name` (`permission_name`)
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;', 'CREATE TABLE IF NOT EXISTS `' . \Simplify::config()->get('amp:tables:permissions_users') . '` (
                 `user_id` mediumint(8) unsigned NOT NULL,
                 `permission_id` mediumint(8) unsigned NOT NULL,
                 UNIQUE KEY `user_id_permission_id` (`user_id`,`permission_id`),
                 KEY `FK_permissions_users_permissions` (`permission_id`),
                 CONSTRAINT `FK_permissions_users_permissions` FOREIGN KEY (`permission_id`) REFERENCES `' . \Simplify::config()->get('amp:tables:permissions') . '` (`permission_id`) ON DELETE CASCADE ON UPDATE CASCADE,
                 CONSTRAINT `FK_permissions_users_users` FOREIGN KEY (`user_id`) REFERENCES `' . \Simplify::config()->get('amp:tables:users') . '` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;', 'CREATE TABLE IF NOT EXISTS `' . \Simplify::config()->get('amp:tables:users') . '` (
                 `user_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
                 `user_username` varchar(255) NOT NULL,
                 `user_email` varchar(255) NOT NULL,
                 `user_password` char(60) NOT NULL,
                 `access_token` char(60) DEFAULT NULL,
                 PRIMARY KEY (`user_id`),
                 INDEX `user_password` (`user_password`),
                 INDEX `access_token` (`access_token`),
                 UNIQUE KEY `user_username` (`user_username`)
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
         \Simplify::db()->beginTransaction();
         \Simplify::db()->query('SET FOREIGN_KEY_CHECKS=0')->executeRaw();
         foreach ($queries as $query) {
             \Simplify::db()->query($query)->executeRaw();
         }
         \Simplify::db()->commit();
     }
 }