diff --git a/Auth/Auth.php b/Auth/Auth.php index c174be1bb..42aa25fb3 100644 --- a/Auth/Auth.php +++ b/Auth/Auth.php @@ -15,8 +15,6 @@ */ namespace phpOMS\Auth; -use phpOMS\Config\OptionsInterface; -use phpOMS\Config\OptionsTrait; use phpOMS\DataStorage\Database\Connection\ConnectionAbstract; use phpOMS\DataStorage\Database\DatabaseType; use phpOMS\DataStorage\Session\SessionInterface; @@ -34,10 +32,8 @@ use phpOMS\DataStorage\Session\SessionInterface; * @link http://orange-management.com * @since 1.0.0 */ -class Auth implements OptionsInterface +class Auth { - use OptionsTrait; - /** * Session instance. * @@ -157,7 +153,7 @@ class Auth implements OptionsInterface * @since 1.0.0 * @author Dennis Eichhorn */ - public function logout(\int $uid) + public function logout(\int $uid = null) { // TODO: logout other users? If admin wants to kick a user for updates etc. $this->session->remove('UID'); diff --git a/Config/OptionsTrait.php b/Config/OptionsTrait.php index 8f19bbf77..ac8e26205 100644 --- a/Config/OptionsTrait.php +++ b/Config/OptionsTrait.php @@ -38,7 +38,7 @@ trait OptionsTrait */ public function exists($key) { - return array_key_exists($key, $this->options); + return isset($this->options[$key]); } /** @@ -55,7 +55,7 @@ trait OptionsTrait public function setOption($key, $value, \bool $overwrite = true) : \bool { if ($overwrite || !array_key_exists($key, $this->options)) { - $this->options[$key] = [$value, $overwrite]; + $this->options[$key] = $value; return true; } diff --git a/Config/SettingsAbstract.php b/Config/SettingsAbstract.php index 7e4274e22..cdc67245c 100644 --- a/Config/SettingsAbstract.php +++ b/Config/SettingsAbstract.php @@ -95,7 +95,7 @@ abstract class SettingsAbstract implements OptionsInterface switch ($this->connection->getType()) { case DatabaseType::MYSQL: $query = new Builder($this->connection); - $sql = $query->select(static::$columns[0], 'settings_content') + $sql = $query->select(...static::$columns) ->from($this->connection->prefix . static::$table) ->where(static::$columns[0], 'in', $columns) ->toSql(); @@ -115,7 +115,6 @@ abstract class SettingsAbstract implements OptionsInterface * Set option by key. * * @param \string[] $options Column values for filtering - * @param \bool $overwrite Overwrite existing settings * @param \bool $store Save this Setting immediately to database * * @return mixed Option value @@ -123,9 +122,9 @@ abstract class SettingsAbstract implements OptionsInterface * @since 1.0.0 * @author Dennis Eichhorn */ - public function set(array $options, \bool $overwrite = true, \bool $store = false) + public function set(array $options, \bool $store = false) { - $this->setOptions($options, $overwrite); + $this->setOptions($options); if($store) { // save to db diff --git a/DataStorage/Database/BuilderAbstract.php b/DataStorage/Database/BuilderAbstract.php index 4bf7bc298..13001d4ec 100644 --- a/DataStorage/Database/BuilderAbstract.php +++ b/DataStorage/Database/BuilderAbstract.php @@ -85,4 +85,17 @@ abstract class BuilderAbstract { return $this->prefix; } + + /** + * Get query type. + * + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getType() : \int + { + return $this->type; + } } diff --git a/DataStorage/Database/Connection/ConnectionAbstract.php b/DataStorage/Database/Connection/ConnectionAbstract.php index fc9adf039..be1c6f706 100644 --- a/DataStorage/Database/Connection/ConnectionAbstract.php +++ b/DataStorage/Database/Connection/ConnectionAbstract.php @@ -17,7 +17,7 @@ namespace phpOMS\DataStorage\Database\Connection; use phpOMS\DataStorage\Database\DatabaseStatus; use phpOMS\DataStorage\Database\Query\Grammar\Grammar; -use phpOMS\DataStorage\Database\Schema\Query\Grammar\Grammar as SchemaGrammar; +use phpOMS\DataStorage\Database\Schema\Grammar\Grammar as SchemaGrammar; /** * Database handler. diff --git a/DataStorage/Database/Connection/ConnectionInterface.php b/DataStorage/Database/Connection/ConnectionInterface.php index 0ea8f96e1..ce92cb233 100644 --- a/DataStorage/Database/Connection/ConnectionInterface.php +++ b/DataStorage/Database/Connection/ConnectionInterface.php @@ -16,7 +16,7 @@ namespace phpOMS\DataStorage\Database\Connection; use phpOMS\DataStorage\Database\Query\Grammar\Grammar; -use phpOMS\DataStorage\Database\Schema\Query\Grammar\Grammar as SchemaGrammar; +use phpOMS\DataStorage\Database\Schema\Grammar\Grammar as SchemaGrammar; /** * Database connection interface. diff --git a/DataStorage/Database/GrammarAbstract.php b/DataStorage/Database/GrammarAbstract.php index 6910e5794..3968882e9 100644 --- a/DataStorage/Database/GrammarAbstract.php +++ b/DataStorage/Database/GrammarAbstract.php @@ -40,7 +40,7 @@ abstract class GrammarAbstract * @var \string * @since 1.0.0 */ - public $systemIdentifier = '"'; + protected $systemIdentifier = '"'; /** * And operator. @@ -63,7 +63,7 @@ abstract class GrammarAbstract /** * Compile to query. * - * @param Builder $query Builder + * @param BuilderAbstract $query Builder * * @return \string * @@ -72,7 +72,7 @@ abstract class GrammarAbstract * @since 1.0.0 * @author Dennis Eichhorn */ - public function compileQuery($query) : \string + public function compileQuery(BuilderAbstract $query) : \string { return trim( implode(' ', @@ -86,6 +86,8 @@ abstract class GrammarAbstract ) . ';'; } + abstract protected function compileComponents(BuilderAbstract $query) : array; + /** * Expressionize elements. * @@ -118,6 +120,26 @@ abstract class GrammarAbstract return rtrim($expression, ', '); } + /** + * Compile system. + * + * @param array|\string $system System + * @param \string $prefix Prefix for table + * + * @return \string + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + protected function compileSystem($system, \string $prefix = '') : \string + { + if (count($split = explode('.', $system)) == 2) { + return $this->compileSystem($prefix . $split[0]) . '.' . $this->compileSystem($split[1]); + } else { + return $this->systemIdentifier . $prefix . $system . $this->systemIdentifier; + } + } + public function getDateFormat() : \string { return 'Y-m-d H:i:s'; diff --git a/DataStorage/Database/Query/Builder.php b/DataStorage/Database/Query/Builder.php index d75f61612..d51601707 100644 --- a/DataStorage/Database/Query/Builder.php +++ b/DataStorage/Database/Query/Builder.php @@ -788,19 +788,6 @@ class Builder extends BuilderAbstract } - /** - * Get query type. - * - * @return \int - * - * @since 1.0.0 - * @author Dennis Eichhorn - */ - public function getType() : \int - { - return $this->type; - } - /** * Merging query. * diff --git a/DataStorage/Database/Query/Grammar/Grammar.php b/DataStorage/Database/Query/Grammar/Grammar.php index f2132fc12..3eeab852c 100644 --- a/DataStorage/Database/Query/Grammar/Grammar.php +++ b/DataStorage/Database/Query/Grammar/Grammar.php @@ -16,6 +16,7 @@ namespace phpOMS\DataStorage\Database\Query\Grammar; +use phpOMS\DataStorage\Database\BuilderAbstract; use phpOMS\DataStorage\Database\GrammarAbstract; use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\Column; @@ -82,7 +83,7 @@ class Grammar extends GrammarAbstract /** * Compile components. * - * @param Builder $query Builder + * @param BuilderAbstract $query Builder * * @return \string[] * @@ -91,7 +92,7 @@ class Grammar extends GrammarAbstract * @since 1.0.0 * @author Dennis Eichhorn */ - protected function compileComponents(Builder $query) : array + protected function compileComponents(BuilderAbstract $query) : array { $sql = []; @@ -257,26 +258,6 @@ class Grammar extends GrammarAbstract } } - /** - * Compile system. - * - * @param array|\string $system System - * @param \string $prefix Prefix for table - * - * @return \string - * - * @since 1.0.0 - * @author Dennis Eichhorn - */ - protected function compileSystem($system, \string $prefix = '') : \string - { - if (count($split = explode('.', $system)) == 2) { - return $this->compileSystem($prefix . $split[0]) . '.' . $this->compileSystem($split[1]); - } else { - return $this->systemIdentifier . $prefix . $system . $this->systemIdentifier; - } - } - /** * Compile limit. * diff --git a/DataStorage/Database/Query/Grammar/MysqlGrammar.php b/DataStorage/Database/Query/Grammar/MysqlGrammar.php index de0f83028..36e82fb19 100644 --- a/DataStorage/Database/Query/Grammar/MysqlGrammar.php +++ b/DataStorage/Database/Query/Grammar/MysqlGrammar.php @@ -25,5 +25,5 @@ class MysqlGrammar extends Grammar * @var \string * @since 1.0.0 */ - public $systemIdentifier = '`'; + protected $systemIdentifier = '`'; } diff --git a/DataStorage/Database/Schema/Builder.php b/DataStorage/Database/Schema/Builder.php index 787149ed6..80984e8f4 100644 --- a/DataStorage/Database/Schema/Builder.php +++ b/DataStorage/Database/Schema/Builder.php @@ -14,12 +14,11 @@ * @link http://orange-management.com */ -namespace phpOMS\DataStorage\Database\Schema\Query; +namespace phpOMS\DataStorage\Database\Schema; use phpOMS\DataStorage\Database\BuilderAbstract; use phpOMS\DataStorage\Database\Connection\ConnectionAbstract; use phpOMS\DataStorage\Database\Query; -use phpOMS\DataStorage\Database\Schema\QueryType; /** * Database query builder. @@ -34,9 +33,9 @@ use phpOMS\DataStorage\Database\Schema\QueryType; */ class Builder extends BuilderAbstract { - private $type = QueryType::SELECT; + public $table = []; - private $table = []; + public $drop = []; /** * Constructor. @@ -59,9 +58,11 @@ class Builder extends BuilderAbstract $this->table = array_unique($this->table); } - public function drop(\string $table) + public function drop(...$table) { - + $this->type = QueryType::DROP; + $this->drop += $table; + $this->drop = array_unique($this->drop); } public function create(\string $table) @@ -73,4 +74,17 @@ class Builder extends BuilderAbstract { } + + /** + * Parsing to string. + * + * @return \string + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function toSql() : \string + { + return $this->grammar->compileQuery($this); + } } diff --git a/DataStorage/Database/Schema/Grammar/Grammar.php b/DataStorage/Database/Schema/Grammar/Grammar.php index 6fc3e193b..9f26e12cb 100644 --- a/DataStorage/Database/Schema/Grammar/Grammar.php +++ b/DataStorage/Database/Schema/Grammar/Grammar.php @@ -16,7 +16,10 @@ namespace phpOMS\DataStorage\Database\Schema\Grammar; +use phpOMS\DataStorage\Database\BuilderAbstract; use phpOMS\DataStorage\Database\GrammarAbstract; +use phpOMS\DataStorage\Database\Schema\Builder; +use phpOMS\DataStorage\Database\Schema\QueryType; /** * Database query grammar. @@ -41,4 +44,47 @@ class Grammar extends GrammarAbstract 'selects', 'from', ]; + + /** + * Select components. + * + * @var \string[] + * @since 1.0.0 + */ + protected $dropComponents = [ + 'drop', + ]; + + public function compileComponents(BuilderAbstract $query) : array + { + $sql = []; + + switch ($query->getType()) { + case QueryType::DROP: + $components = $this->dropComponents; + break; + default: + throw new \InvalidArgumentException('Unknown query type.'); + } + + /* Loop all possible query components and if they exist compile them. */ + foreach ($components as $component) { + if (isset($query->{$component}) && !empty($query->{$component})) { + $sql[$component] = $this->{'compile' . ucfirst($component)}($query, $query->{$component}); + } + } + + return $sql; + } + + protected function compileDrop(Builder $query, array $tables) : \string + { + $expression = $this->expressionizeTableColumn($tables, $query->getPrefix()); + + if ($expression === '') { + $expression = '*'; + } + + return 'DROP TABLE ' . $expression; + } } diff --git a/DataStorage/Database/Schema/Grammar/MysqlGrammar.php b/DataStorage/Database/Schema/Grammar/MysqlGrammar.php index 5a014bf35..fd632c28b 100644 --- a/DataStorage/Database/Schema/Grammar/MysqlGrammar.php +++ b/DataStorage/Database/Schema/Grammar/MysqlGrammar.php @@ -31,6 +31,14 @@ use phpOMS\DataStorage\Database\Query\Builder; */ class MysqlGrammar extends Grammar { + /** + * System identifier. + * + * @var \string + * @since 1.0.0 + */ + protected $systemIdentifier = '`'; + /** * Compile select. * diff --git a/DataStorage/Session/ConsoleSession.php b/DataStorage/Session/ConsoleSession.php index cb1bcf170..3c4774a0f 100644 --- a/DataStorage/Session/ConsoleSession.php +++ b/DataStorage/Session/ConsoleSession.php @@ -45,7 +45,7 @@ class ConsoleSession implements SessionInterface * @since 1.0.0 * @author Dennis Eichhorn */ - public function __construct($sid) + public function __construct($sid = false) { $this->sid = $sid; } diff --git a/DataStorage/Session/SocketSession.php b/DataStorage/Session/SocketSession.php index 05bc2c7a7..4a0950045 100644 --- a/DataStorage/Session/SocketSession.php +++ b/DataStorage/Session/SocketSession.php @@ -45,7 +45,7 @@ class SocketSession implements SessionInterface * @since 1.0.0 * @author Dennis Eichhorn */ - public function __construct($sid) + public function __construct($sid = false) { $this->sid = $sid; } diff --git a/Html/TagType.php b/Html/TagType.php index 8f9671228..bdd342a51 100644 --- a/Html/TagType.php +++ b/Html/TagType.php @@ -38,4 +38,5 @@ abstract class TagType extends Enum const SELECT = 5; /*