diff --git a/web/application/config.dist.php b/web/application/config.dist.php new file mode 100644 index 0000000..e69de29 diff --git a/web/application/controllers/base.php b/web/application/controllers/base.php index cdcbfcb..1105b54 100644 --- a/web/application/controllers/base.php +++ b/web/application/controllers/base.php @@ -1,14 +1,26 @@ sessionData && !isset($this->sessionData->userId)) { + header("Location: /login"); + return false; + } else { + return true; + } + } public function __construct($config, $core, $tpl) { parent::__construct($config, $core, $tpl); - if ($this->config["DATABASETYPE"] == "SQLITE") { + if ($this->config["DATABASE_TYPE"] == "SQLITE") { $this->pdo = new PDO("sqlite:kritbot.sqlite3"); - DB::$c = $this->pdo; + \vendor\DB\DB::$c = $this->pdo; } else { $this->pdo = new PDO( "mysql:dbname={$this->config['MYSQL_DBNAME']};host={$this->config['MYSQL_HOST']}", @@ -20,7 +32,38 @@ abstract class base extends HF_Controller { PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ) ); - DB::$c = $this->pdo; + \vendor\DB\DB::$c = $this->pdo; } + + if (isset($_COOKIE["session"])) { + $validSession = Sessions::getByField("sessionid", $_COOKIE["session"]); + if ($validSession) { + try { + $this->session = $validSession[0]; + $this->sessionData = json_decode($this->session->data); + if ($this->sessionData == null) { + return; + } + $this->user = \application\models\Users::getByField("id", $this->sessionData->userId)[0]; + } catch (\Exception $e) { + setcookie("session", "", time() - 3600); + header("Location: /login"); + } + } else { + setcookie("session", "", time() - 3600); + header("Location: /login"); + } + } else { + $bool = true; + $bytes = openssl_random_pseudo_bytes (10, $bool); + $sessionId = bin2hex($bytes); + $this->session = new Sessions(); + $this->session->ip = $_SERVER["REMOTE_ADDR"]; + $this->session->userAgent = $_SERVER["HTTP_USER_AGENT"]; + $this->session->sessionid = $sessionId; + $this->session->save(); + setcookie("session", $sessionId, 2147483647); + } + } } \ No newline at end of file diff --git a/web/application/controllers/login.php b/web/application/controllers/login.php new file mode 100644 index 0000000..edb2c53 --- /dev/null +++ b/web/application/controllers/login.php @@ -0,0 +1,40 @@ + $this->config["GOOGLE_OAUTH_ID"], + "client_secret" => $this->config["GOOGLE_OAUTH_SECRET"], + "redirect_uri" => "http://localhost/login" + ]); + $oauth = new OAuth($authProvider, $_GET); + + $check = $oauth->check(); + + if ($check === true) { + $email = $authProvider->getEmail(); + /** @var Users $user */ + //$user = DB::fetchObject("SELECT * FROM users WHERE email = ?", "users", [$email]); + $users = Users::getByField("email", $email); + if (count($users) == 0) { + echo $this->accessDenied(); + return; + } + $user = $users[0]; + $this->session->data = json_encode(["userId" => $user->id]); + $this->session->save(); + $this->sessionData = $this->session->data; + header("Location: /"); + } else { + header("Location: " . $check); + } + } +} \ No newline at end of file diff --git a/web/application/controllers/main.php b/web/application/controllers/main.php index dd60d13..77d71d4 100644 --- a/web/application/controllers/main.php +++ b/web/application/controllers/main.php @@ -1,11 +1,15 @@ loadRender("login.html"); + if ($this->isLoggedIn()) { + echo "Hello - " . $this->sessionData->userId; + echo "email = " . $this->user->email; + } + //echo "hello"; } } \ No newline at end of file diff --git a/web/application/migrations/1.php b/web/application/migrations/1.php new file mode 100644 index 0000000..a8181ff --- /dev/null +++ b/web/application/migrations/1.php @@ -0,0 +1,19 @@ + "adamsna@datanethost.net"]); \ No newline at end of file diff --git a/web/application/models/Sessions.php b/web/application/models/Sessions.php new file mode 100644 index 0000000..04be54a --- /dev/null +++ b/web/application/models/Sessions.php @@ -0,0 +1,11 @@ +run(); \ No newline at end of file diff --git a/web/migrations.php b/web/migrations.php new file mode 100644 index 0000000..beadd5d --- /dev/null +++ b/web/migrations.php @@ -0,0 +1,11 @@ +runMigrations(); \ No newline at end of file diff --git a/web/system/engine/HF_Controller.php b/web/system/engine/HF_Controller.php new file mode 100644 index 0000000..1c2826c --- /dev/null +++ b/web/system/engine/HF_Controller.php @@ -0,0 +1,24 @@ +config = $config; + $this->tpl = $tpl; + $this->core = $core; + } + + public function loadRender($template, $parameters=array()) + { + $this->tpl->loadTemplate($template); + return $this->tpl->render($parameters); + } + +} \ No newline at end of file diff --git a/web/system/engine/HF_Core.php b/web/system/engine/HF_Core.php new file mode 100644 index 0000000..7e43f51 --- /dev/null +++ b/web/system/engine/HF_Core.php @@ -0,0 +1,356 @@ +config = array_merge($config, $newconfig); + \vendor\DB\DB::$type = $config["DATABASE_TYPE"]; + if ($this->config["USE_H20_TPL"]) + $this->tpl = new \H2o(null, array( + "searchpath" => getcwd() . "/application/views/", + "cache_dir" => "application/tmp/", + 'cache' => 'file' + )); + set_error_handler("\\system\\engine\\HF_Core::error_handler"); + //set_exception_handler("\\system\\engine\\HF_Core::exception_handler"); + $this->findController(); + } + + public static function exception_handler($e) { + echo "Hello"; + } + + public function siteURL() + { + if (isvarset($this->config["SITE_URL"])) + { + return $this->config["SITE_URL"]; + } + $path = explode("/", $_SERVER["REQUEST_URI"]); + $path = array_filter($path, 'strlen'); + if (count($path) == 0) + { + return $_SERVER["HTTP_HOST"] . "/"; + } else { + if (in_array($this->classname, $path)) + { + $newpath = implode("/", array_splice($path, 0, -2)); + return $_SERVER["HTTP_HOST"] . "/" . $newpath . "/"; + } else { + $newpath = implode("/", $path); + return $_SERVER["HTTP_HOST"] . "/" . $newpath . "/"; + } + } + } + + private function findController() + { + try + { + if (isvarset($_SERVER["PATH_INFO"])) + { + $request = $_SERVER["PATH_INFO"]; + //$request = $_SERVER["PHP_SELF"]; + $splitreq = explode("/", $request); + /*$request = ""; + for($i = 0; $i < count($splitreq); $i++) + { + if ($splitreq[$i] == "index.php") + { + $request = implode("/", array_splice($splitreq, $i+1)); + } + }*/ + //print $request; + //$request = substr($request, 1); + //$request = substr($request, 0, -1); + } else { + $request = ""; + } + if ($request == "" || $request == "/") + { + require_once("application/controllers/" . $this->config["DEFAULT_ROUTE"] . ".php"); + $this->loadController(new $this->config["DEFAULT_ROUTE"]($this->config, $this, $this->tpl), $this->config["DEFAULT_ROUTE"], "index"); + return; + } + if ($request[strlen($request)-1] == "/") + $request = substr($request, 0, -1); + $arr = explode("/", $request); + $path = "application/controllers/"; + for($i = 0; $i < count($arr); $i++) + { + if (is_file($path . $arr[$i] . ".php")) // found the controller + { + include_once($path . $arr[$i] . ".php"); + if ($i + 1 < count($arr)) // if there is a define after the controller name - this would be the method name + { + $this->loadController(new $arr[$i]($this->config, $this, $this->tpl), $arr[$i], $arr[$i+1], array_slice ($arr, 2)); + } else { // call index + $this->loadController(new $arr[$i]($this->config, $this, $this->tpl), $arr[$i], "index"); + } + return; + } + + if (is_dir($path . $arr[$i])) // controller is hidden deeper + { + $path = $path . $arr[$i] . "/"; + continue; + } + + include_once($path . $this->config["DEFAULT_ROUTE"] . ".php"); + $this->loadController(new $this->config["DEFAULT_ROUTE"]($this->config, $this, $this->tpl), $this->config["DEFAULT_ROUTE"], "index"); + //$this->load404Controller(); + break; + // throw exception controller not found + } + } catch (\Exception $e) { + if ($this->config["DEBUG"]) + echo vdump($e, $this); + else + $this->mail_admins("[Exception - " . $this->config["SITE_NAME"] . "]", vdump($e, $this), true); + } + } + + private function load404Controller() + { + if (is_file(getcwd() . "/application/status.php")) + { + include_once (getcwd() . "/application/status.php"); + $this->loadController(new HF_Status($this->config, $this, $this->tpl), "HF_Status", "Status404"); + } else { + include_once(getcwd() . "/system/engine/status.php"); + $this->loadController(new HF_Status($this->config, $this, $this->tpl), "HF_Status", "Status404"); + + } + } + + private function load500Controller() + { + if (is_file(getcwd() . "/application/status.php")) + { + include_once (getcwd() . "/application/status.php"); + $this->loadController(new HF_Status($this->config, $this, $this->tpl), "\\system\\engine\\HF_Status", "Status500"); + } else { + include_once (getcwd() . "/system/engine/status.php"); + $this->loadController(new HF_Status($this->config, $this, $this->tpl), "\\system\\engine\\HF_Status", "Status500"); + + } + } + + private function loadController($class, $classname, $method, $args = array()) + { + $this->class = $class; + $this->classname = $classname; + $this->method = $method; + $this->args = $args; + } + + public function run($err=false) + { + try + { + $call = new \ReflectionMethod($this->classname, $this->method); + if ($err) + { + $call->invokeArgs($this->class, $this->args); + return; + } + + $numOfReqPara = $call->getNumberOfRequiredParameters(); + $numOfOptPara = $call->getNumberOfParameters() - $numOfReqPara; + $remainparas = count($this->args) - $numOfReqPara; + if ($numOfReqPara == 0 || ($remainparas >= 0 && $remainparas <= $numOfOptPara)) + { + $call->invokeArgs($this->class, $this->args); + } + else + { + $this->load404Controller(); + $this->run(true); + } + + } + catch (\ReflectionException $e) + { + if (strstr($e->getMessage(), "does not exist") !== false) + { + $this->load404Controller(); + } else { + $this->load500Controller(); + } + $this->run(true); + if ($this->config["DEBUG"]) + echo vdump($e, $this); + else + $this->mail_admins("[Exception - " . $this->config["SITE_NAME"] . "]", vdump($e, $this), true); + + + } catch (\Exception $e) { + $this->load500Controller(); + $this->run(true); + if ($this->config["DEBUG"]) + echo vdump($e, $this); + else + $this->mail_admins("[Exception - " . $this->config["SITE_NAME"] . "]", vdump($e, $this), true); + } + } + + public function mail_admins($subject, $msg, $html = false) + { + if (array_key_exists("ADMINS", $this->config)) + { + foreach($this->config["ADMINS"] as $email) + { + $this->mail_user($email, $subject, $msg, $html); + } + } + } + + public function mail_user($to, $subject, $msg, $html = false) + { + if ($this->config["USE_HF_SMTP"]) + { + $smtp = new HF_SMTP($this->config["SMTP_FROM"], $to, $subject, $msg, $this->config["SMTP_SERVER"], $this->config["SMTP_USER"], $this->config["SMTP_PASS"], $this->config["SMTP_PORT"]); + $smtp->send($html); + } else { + require_once "Mail.php"; + $smtp = null; + if ($this->$this->config["SMTP_USER"] && $this->config["SMTP_PASS"]) + $smtp = Mail::factory('smtp', array( + "host" => $this->config["SMTP_SERVER"], + "port" => $this->config["SMTP_PORT"], + "auth" => true, + 'username' => $this->config["SMTP_USER"], + 'password' => $this->config["SMTP_PASS"] + )); + else + $smtp = Mail::factory('smtp', array( + "host" => $this->config["SMTP_SERVER"], + "port" => $this->config["SMTP_PORT"] + )); + $headers = array ('From' => $this->config["SMTP_FROM"], + 'To' => $to, + 'Subject' => $subject); + $smtp->send($to, $headers, $msg); + } + } + + public static function error_handler($err_severity, $err_msg, $err_file, $err_line, array $err_context) + { + if (0 === error_reporting()) { return false;} + switch($err_severity) + { + case E_ERROR: throw new \ErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_WARNING: throw new WarningException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_PARSE: throw new ParseException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_NOTICE: throw new NoticeException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_CORE_ERROR: throw new CoreErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_CORE_WARNING: throw new CoreWarningException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_COMPILE_ERROR: throw new CompileErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_COMPILE_WARNING: throw new CoreWarningException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_USER_ERROR: throw new UserErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_USER_WARNING: throw new UserWarningException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_USER_NOTICE: throw new UserNoticeException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_STRICT: throw new StrictException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_RECOVERABLE_ERROR: throw new RecoverableErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_DEPRECATED: throw new DeprecatedException ($err_msg, 0, $err_severity, $err_file, $err_line); + case E_USER_DEPRECATED: throw new UserDeprecatedException ($err_msg, 0, $err_severity, $err_file, $err_line); + } + } + + public function runMigrations() { + global $argv; + switch($this->config["DATABASE_TYPE"]) { + case "SQLITE": + DB::$c = new \PDO("sqlite:" . $this->config["DATABASE_FILE"]); + break; + case "MySQL": + DB::$c = new \PDO( + "mysql:dbname={$this->config['MYSQL_DBNAME']};host={$this->config['MYSQL_HOST']}", + $this->config['MYSQL_USER'], + $this->config['MYSQL_PASS'], + array( + \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", + \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_OBJ, + \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION + ) + ); + break; + } + DB::$c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + + DB::query("CREATE TABLE IF NOT EXISTS migrations ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + migration INTEGER, + ran_at DATETIME + )"); + switch ($argv[1]) { + case "show": + foreach(DB::fetch("SELECT migration, ran_at FROM migrations") as $migration) { + echo $migration["migration"] . " => " . $migration["ran_at"] . PHP_EOL; + } + break; + case "count": + echo DB::column("SELECT COUNT(id) FROM migrations"); + break; + case "run": + $migrations = DB::fetch("SELECT migration FROM migrations"); + $migrationArray = []; + foreach($migrations as $migration) { + $migrationArray[] = $migration["migration"]; + } + + foreach (glob("application/migrations/*.php") as $filename) + { + if (!in_array($filename, $migrationArray)) { + include $filename; + DB::insert("migrations", ["migration" => $filename, "ran_at" => (new \DateTime())->format("Y-m-d")]); + } + + + } + break; + case "clear": + DB::query("DELETE FROM migrations"); + break; + case "reset": + switch($this->config["DATABASE_TYPE"]) { + case "SQLITE": + DB::$c = null; + unlink($this->config["DATABASE_FILE"]); + break; + case "MYSQL": + DB::query("DROP DATABASE " . $this->config['MYSQL_DBNAME']); + DB::query("CREATE DATABASE " . $this->config['MYSQL_DBNAME']); + break; + } + break; + } + + + } +} \ No newline at end of file diff --git a/web/system/engine/HF_Model.php b/web/system/engine/HF_Model.php new file mode 100644 index 0000000..f408f0d --- /dev/null +++ b/web/system/engine/HF_Model.php @@ -0,0 +1,48 @@ +getShortName()); + foreach(DB::getColumns($table) as $column) { + $fieldMap[$column] = $this->$column; + } + if ($fieldMap["id"] == null) { + DB::insert($table, $fieldMap); + } else { + $updateFields = $fieldMap; + unset($updateFields["id"]); + DB::update($table, $updateFields, $fieldMap["id"]); + } + } + + public static function getByField($field, $value) { + $function = new \ReflectionClass(get_called_class()); + $table = strtolower($function->getShortName()); + $fields = implode(", ", DB::getColumns($table)); + return DB::fetchObject("SELECT $fields FROM $table WHERE $field = ?", get_called_class(), [$value]); + } + +} \ No newline at end of file diff --git a/web/system/engine/SMTP.php b/web/system/engine/SMTP.php index 61bb3ba..2f554f1 100644 --- a/web/system/engine/SMTP.php +++ b/web/system/engine/SMTP.php @@ -1,5 +1,7 @@ config = $config; - $this->tpl = $tpl; - $this->core = $core; - } - - public function loadRender($template, $parameters=array()) - { - $this->tpl->loadTemplate($template); - return $this->tpl->render($parameters); - } - -} \ No newline at end of file diff --git a/web/system/engine/core.php b/web/system/engine/core.php deleted file mode 100644 index 268e137..0000000 --- a/web/system/engine/core.php +++ /dev/null @@ -1,270 +0,0 @@ -config = array_merge($config, $newconfig); - if ($this->config["USE_H20_TPL"]) - $this->tpl = new H2o(null, array( - "searchpath" => getcwd() . "/application/views/", - "cache_dir" => "application/tmp/", - 'cache' => 'file' - )); - set_error_handler("HF_Core::error_handler"); - $this->findController(); - } - - public function siteURL() - { - if (isvarset($this->config["SITE_URL"])) - { - return $this->config["SITE_URL"]; - } - $path = explode("/", $_SERVER["REQUEST_URI"]); - $path = array_filter($path, 'strlen'); - if (count($path) == 0) - { - return $_SERVER["HTTP_HOST"] . "/"; - } else { - if (in_array($this->classname, $path)) - { - $newpath = implode("/", array_splice($path, 0, -2)); - return $_SERVER["HTTP_HOST"] . "/" . $newpath . "/"; - } else { - $newpath = implode("/", $path); - return $_SERVER["HTTP_HOST"] . "/" . $newpath . "/"; - } - } - } - - private function findController() - { - try - { - if (isvarset($_SERVER["PATH_INFO"])) - { - $request = $_SERVER["PATH_INFO"]; - //$request = $_SERVER["PHP_SELF"]; - $splitreq = explode("/", $request); - /*$request = ""; - for($i = 0; $i < count($splitreq); $i++) - { - if ($splitreq[$i] == "index.php") - { - $request = implode("/", array_splice($splitreq, $i+1)); - } - }*/ - //print $request; - //$request = substr($request, 1); - //$request = substr($request, 0, -1); - } else { - $request = ""; - } - if ($request == "" || $request == "/") - { - require("application/controllers/" . $this->config["DEFAULT_ROUTE"] . ".php"); - $this->loadController(new $this->config["DEFAULT_ROUTE"]($this->config, $this, $this->tpl), $this->config["DEFAULT_ROUTE"], "index"); - return; - } - if ($request[strlen($request)-1] == "/") - $request = substr($request, 0, -1); - $arr = explode("/", $request); - $path = "application/controllers/"; - for($i = 0; $i < count($arr); $i++) - { - if (is_file($path . $arr[$i] . ".php")) // found the controller - { - include($path . $arr[$i] . ".php"); - if ($i + 1 < count($arr)) // if there is a define after the controller name - this would be the method name - { - $this->loadController(new $arr[$i]($this->config, $this, $this->tpl), $arr[$i], $arr[$i+1], array_slice ($arr, 2)); - } else { // call index - $this->loadController(new $arr[$i]($this->config, $this, $this->tpl), $arr[$i], "index"); - } - return; - } - - if (is_dir($path . $arr[$i])) // controller is hidden deeper - { - $path = $path . $arr[$i] . "/"; - continue; - } - - include($path . $this->config["DEFAULT_ROUTE"] . ".php"); - $this->loadController(new $this->config["DEFAULT_ROUTE"]($this->config, $this, $this->tpl), $this->config["DEFAULT_ROUTE"], "index"); - //$this->load404Controller(); - break; - // throw exception controller not found - } - } catch (Exception $e) { - if ($this->config["DEBUG"]) - echo vdump($e, $this); - else - $this->mail_admins("[Exception - " . $this->config["SITE_NAME"] . "]", vdump($e, $this), true); - } - } - - private function load404Controller() - { - if (is_file(getcwd() . "/application/status.php")) - { - include_once (getcwd() . "/application/status.php"); - $this->loadController(new status($this->config, $this, $this->tpl), "status", "Status404"); - } else { - include_once(getcwd() . "/system/engine/status.php"); - $this->loadController(new HF_Status($this->config, $this, $this->tpl), "HF_Status", "Status404"); - - } - } - - private function load500Controller() - { - if (is_file(getcwd() . "/application/status.php")) - { - include_once (getcwd() . "/application/status.php"); - $this->loadController(new status($this->config, $this, $this->tpl), "status", "Status500"); - } else { - include_once (getcwd() . "/system/engine/status.php"); - $this->loadController(new HF_Status($this->config, $this, $this->tpl), "HF_Status", "Status500"); - - } - } - - private function loadController($class, $classname, $method, $args = array()) - { - $this->class = $class; - $this->classname = $classname; - $this->method = $method; - $this->args = $args; - } - - public function run($err=false) - { - try - { - $call = new ReflectionMethod($this->classname, $this->method); - if ($err) - { - $call->invokeArgs($this->class, $this->args); - return; - } - - $numOfReqPara = $call->getNumberOfRequiredParameters(); - $numOfOptPara = $call->getNumberOfParameters() - $numOfReqPara; - $remainparas = count($this->args) - $numOfReqPara; - if ($numOfReqPara == 0 || ($remainparas >= 0 && $remainparas <= $numOfOptPara)) - { - $call->invokeArgs($this->class, $this->args); - } - else - { - $this->load404Controller(); - $this->run(true); - } - - } catch (ReflectionException $e) - { - if (strstr($e->getMessage(), "does not exist") !== false) - { - $this->load404Controller(); - } else { - $this->load500Controller(); - } - $this->run(true); - if ($this->config["DEBUG"]) - echo vdump($e, $this); - else - $this->mail_admins("[Exception - " . $this->config["SITE_NAME"] . "]", vdump($e, $this), true); - - - } catch (Exception $e) { - $this->load500Controller(); - $this->run(true); - if ($this->config["DEBUG"]) - echo vdump($e, $this); - else - $this->mail_admins("[Exception - " . $this->config["SITE_NAME"] . "]", vdump($e, $this), true); - } - } - - public function mail_admins($subject, $msg, $html = false) - { - if (array_key_exists("ADMINS", $this->config)) - { - foreach($this->config["ADMINS"] as $email) - { - $this->mail_user($email, $subject, $msg, $html); - } - } - } - - public function mail_user($to, $subject, $msg, $html = false) - { - if ($this->config["USE_HF_SMTP"]) - { - $smtp = new HF_SMTP($this->config["SMTP_FROM"], $to, $subject, $msg, $this->config["SMTP_SERVER"], $this->config["SMTP_USER"], $this->config["SMTP_PASS"], $this->config["SMTP_PORT"]); - $smtp->send($html); - } else { - require_once "Mail.php"; - $smtp = null; - if ($this->$this->config["SMTP_USER"] && $this->config["SMTP_PASS"]) - $smtp = Mail::factory('smtp', array( - "host" => $this->config["SMTP_SERVER"], - "port" => $this->config["SMTP_PORT"], - "auth" => true, - 'username' => $this->config["SMTP_USER"], - 'password' => $this->config["SMTP_PASS"] - )); - else - $smtp = Mail::factory('smtp', array( - "host" => $this->config["SMTP_SERVER"], - "port" => $this->config["SMTP_PORT"] - )); - $headers = array ('From' => $this->config["SMTP_FROM"], - 'To' => $to, - 'Subject' => $subject); - $smtp->send($to, $headers, $msg); - } - } - - public static function error_handler($err_severity, $err_msg, $err_file, $err_line, array $err_context) - { - if (0 === error_reporting()) { return false;} - switch($err_severity) - { - case E_ERROR: throw new ErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_WARNING: throw new WarningException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_PARSE: throw new ParseException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_NOTICE: throw new NoticeException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_CORE_ERROR: throw new CoreErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_CORE_WARNING: throw new CoreWarningException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_COMPILE_ERROR: throw new CompileErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_COMPILE_WARNING: throw new CoreWarningException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_USER_ERROR: throw new UserErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_USER_WARNING: throw new UserWarningException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_USER_NOTICE: throw new UserNoticeException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_STRICT: throw new StrictException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_RECOVERABLE_ERROR: throw new RecoverableErrorException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_DEPRECATED: throw new DeprecatedException ($err_msg, 0, $err_severity, $err_file, $err_line); - case E_USER_DEPRECATED: throw new UserDeprecatedException ($err_msg, 0, $err_severity, $err_file, $err_line); - } - - } -} \ No newline at end of file diff --git a/web/system/engine/exceptions.php b/web/system/engine/exceptions.php index a180229..dd1b130 100644 --- a/web/system/engine/exceptions.php +++ b/web/system/engine/exceptions.php @@ -1,18 +1,20 @@ ********************************** 80 Columns ********************************* */ + +namespace vendor\DB; + class DB { static $q,$c,$p,$i = '`'; + static $type = ""; + /** * Fetch a column offset from the result set (COUNT() queries) * @@ -80,6 +85,21 @@ class DB } /** + * Fetch all query result rows as object + * + * @param string $query query string + * @param array $params query parameters + * @return array + */ + static function fetchObject($query, $className, $params = NULL) + { + if( ! $statement = DB::query($query, $params)) return null; + + $statement->setFetchMode(\PDO::FETCH_INTO, new $className); + return $statement->fetchAll(); + } + + /** * Prepare and send a query returning the PDOStatement * * @param string $query query string @@ -126,4 +146,17 @@ class DB )) return $statement->rowCount(); } + + /** + * Returns array containing all field names + * @param $table + * @return array + */ + static function getColumns($table) { + switch (self::$type) { + case "SQLITE": + return self::fetch("PRAGMA table_info($table)", null, 1); + break; + } + } } \ No newline at end of file diff --git a/web/system/vendor/StackTracePrint.php b/web/system/vendor/StackTracePrint.php index bbd689b..08d49b5 100644 --- a/web/system/vendor/StackTracePrint.php +++ b/web/system/vendor/StackTracePrint.php @@ -10,7 +10,7 @@ function vdump() { $ret = "
";
 
-    $ret .- "".htmlspecialchars(trim($code[$backtrace[0]['line']-1]))."\n";
+    $ret .= "".htmlspecialchars(trim($code[$backtrace[0]['line']-1]))."\n";
 
     $ret .= "\n";
 
diff --git a/web/system/vendor/h2o.php b/web/system/vendor/h2o.php
index e03d293..5b55079 100644
--- a/web/system/vendor/h2o.php
+++ b/web/system/vendor/h2o.php
@@ -1,4 +1,5 @@