From f2ff442d8a8ee3474474ec2a93ffb1564915dbe2 Mon Sep 17 00:00:00 2001 From: logsol Date: Fri, 8 Apr 2011 03:27:38 +1200 Subject: [PATCH] initial commit --- README.textile | 5 + application/controller/IndexController.php | 44 ++ application/model/Example.php | 23 + application/view/welcome.phtml | 12 + config/database.config.ini | 5 + library/Katharsis/Autoload.php | 51 ++ library/Katharsis/Bootstrap.php | 29 + library/Katharsis/Controller/Abstract.php | 105 +++ library/Katharsis/Controller/Plugin.php | 53 ++ .../Katharsis/Controller/Plugin/Abstract.php | 31 + .../Controller/Plugin/Autorender.php | 32 + library/Katharsis/ControllerRouting.php | 136 ++++ library/Katharsis/DatabaseConnector.php | 130 ++++ library/Katharsis/Db5.php | 627 ++++++++++++++++++ library/Katharsis/Exception.php | 11 + library/Katharsis/Model/Abstract.php | 36 + library/Katharsis/Request.php | 93 +++ library/Katharsis/View.php | 101 +++ public/.htaccess | 9 + public/index.php | 26 + public/style/main.css | 0 21 files changed, 1559 insertions(+) create mode 100644 README.textile create mode 100644 application/controller/IndexController.php create mode 100644 application/model/Example.php create mode 100644 application/view/welcome.phtml create mode 100644 config/database.config.ini create mode 100644 library/Katharsis/Autoload.php create mode 100644 library/Katharsis/Bootstrap.php create mode 100644 library/Katharsis/Controller/Abstract.php create mode 100644 library/Katharsis/Controller/Plugin.php create mode 100644 library/Katharsis/Controller/Plugin/Abstract.php create mode 100644 library/Katharsis/Controller/Plugin/Autorender.php create mode 100644 library/Katharsis/ControllerRouting.php create mode 100644 library/Katharsis/DatabaseConnector.php create mode 100644 library/Katharsis/Db5.php create mode 100644 library/Katharsis/Exception.php create mode 100644 library/Katharsis/Model/Abstract.php create mode 100644 library/Katharsis/Request.php create mode 100644 library/Katharsis/View.php create mode 100644 public/.htaccess create mode 100644 public/index.php create mode 100644 public/style/main.css diff --git a/README.textile b/README.textile new file mode 100644 index 0000000..d8e75a3 --- /dev/null +++ b/README.textile @@ -0,0 +1,5 @@ +Katharsis Framework is a lightweight open-source MVC-framework for PHP5. + +Its principles of project processing as well as its handling are based on the manners of Zend Framework, so it is the perfect tool for a programmer who is looking for a lightweight alternative to Zend Framework. + +Katharsis Framework is written in native, object-orientated PHP5 code only. It keeps things simple without bloating your project unnecessarily. diff --git a/application/controller/IndexController.php b/application/controller/IndexController.php new file mode 100644 index 0000000..5b69fb8 --- /dev/null +++ b/application/controller/IndexController.php @@ -0,0 +1,44 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class IndexController extends Katharsis_Controller_Abstract +{ + /** + * Controller init method, will be called on any action request, + * before action method is called + * + * @return void + */ + public function init() + { + } + + /** + * Action method, call url: /controller/action + * + * @return void + */ + public function indexAction() + { + $this->_view->someVariableName = 'Katharsis'; + echo $this->_view->render('welcome'); + } + + /** + * Fallback method, will be called, if requested action doesn't exist + * + * @param string $name + * @param array $args + * @return void + */ + public function __call($name, $args) + { + } +} \ No newline at end of file diff --git a/application/model/Example.php b/application/model/Example.php new file mode 100644 index 0000000..8044495 --- /dev/null +++ b/application/model/Example.php @@ -0,0 +1,23 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Example extends Katharsis_Model_Abstract +{ + /** + * Init method, will be called when this class is instanced + * Use this method instead of __construct() + * + * @return void + */ + public function init() + { + } +} \ No newline at end of file diff --git a/application/view/welcome.phtml b/application/view/welcome.phtml new file mode 100644 index 0000000..b8b5b6d --- /dev/null +++ b/application/view/welcome.phtml @@ -0,0 +1,12 @@ + + + + + + +

Welcome

+

+ This is an empty someVariableName?> project. +

+ + \ No newline at end of file diff --git a/config/database.config.ini b/config/database.config.ini new file mode 100644 index 0000000..359b86c --- /dev/null +++ b/config/database.config.ini @@ -0,0 +1,5 @@ +; [connection:development:default] +; host = localhost +; user = root +; password = +; database = myDatabaseName \ No newline at end of file diff --git a/library/Katharsis/Autoload.php b/library/Katharsis/Autoload.php new file mode 100644 index 0000000..776419b --- /dev/null +++ b/library/Katharsis/Autoload.php @@ -0,0 +1,51 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_Autoload +{ + /** + * @var array + */ + protected static $_classLocations = array( + 'library', + 'application/controller', + 'application/model' + ); + + /** + * Registering autoload method + * + * @return void + */ + public static function init() + { + spl_autoload_register('Katharsis_Autoload::autoload'); + } + + /** + * Actual autoload method. Loads class files automatically when they are needed + * + * @return void + */ + public static function autoload($classname) + { + $name = str_replace("_", DIRECTORY_SEPARATOR, $classname); + + foreach(self::$_classLocations as $location) + { + if(file_exists($location . DIRECTORY_SEPARATOR . $name . ".php")) + { + require_once $location . DIRECTORY_SEPARATOR . $name . ".php"; + return; + } + } + + die('Autoload: could not load class "' . $classname . '"'); + } +} \ No newline at end of file diff --git a/library/Katharsis/Bootstrap.php b/library/Katharsis/Bootstrap.php new file mode 100644 index 0000000..d7a2a9d --- /dev/null +++ b/library/Katharsis/Bootstrap.php @@ -0,0 +1,29 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_Bootstrap +{ + /** + * Central application routing method + * + * @return void + */ + public static function run() + { + $router = Katharsis_ControllerRouting::getInstance(); + + $router->init(); + + Katharsis_Controller_Plugin::preControllerHook(); + + $router->route(); + + Katharsis_Controller_Plugin::postControllerHook(); + } +} \ No newline at end of file diff --git a/library/Katharsis/Controller/Abstract.php b/library/Katharsis/Controller/Abstract.php new file mode 100644 index 0000000..460b3e6 --- /dev/null +++ b/library/Katharsis/Controller/Abstract.php @@ -0,0 +1,105 @@ + + * @version 0.5.2 + * @package Katharsis + */ +abstract class Katharsis_Controller_Abstract +{ + /** + * @var Katharsis_Db5 + */ + protected $_con; + + /** + * @var Katharsis_View + */ + protected $_view; + + /** + * Instances class attributes, calles init method + * + * @return void + */ + public final function __construct() + { + $this->_con = Katharsis_DatabaseConnector::getConnection(); + $this->_view = Katharsis_View::getInstance(); + $this->init(); + } + + /** + * Overwrite this method instead of using a constructor + * + * @return void + */ + public function init() + { + } + + /** + * If subclass hasn't got a __call method, this exception will be thrown + * + * @return void + */ + public function __call($action, $params) + { + throw new Katharsis_Exception('Action "' . $action . '" doesn\'t exist.'); + } + + /** + * Returns a specific request parameter + * + * @param string $key + * @return mixed + */ + protected function _getParam($key) + { + $params = Katharsis_Request::getParams(); + if(array_key_exists($key,$params)) + { + return $params[$key]; + } + return null; + } + + /** + * Returns all request parameters + * + * @return array + */ + protected function _getAllParams() + { + return Katharsis_Request::getParams(); + } + + /** + * Forward to an other action + * + * @param string $action + * @param string $controller + * @param array $getParams + * @return void + */ + protected function _location($action, $controller = null, $getParams = null) + { + if($controller === null) + { + $controller = Katharsis_Request::getControllerName(); + } + + $paramstring = ""; + if($getParams !== null) + { + foreach($getParams as $key => $value) + { + $paramstring .= "/" . (string) $key . "/" . (string) $value; + } + } + + header("location: " . $this->_view->base . "/" . $controller . "/" . $action . $paramstring); + } +} \ No newline at end of file diff --git a/library/Katharsis/Controller/Plugin.php b/library/Katharsis/Controller/Plugin.php new file mode 100644 index 0000000..0959e3a --- /dev/null +++ b/library/Katharsis/Controller/Plugin.php @@ -0,0 +1,53 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_Controller_Plugin +{ + /** + * @var array + */ + protected static $_plugins; + + /** + * Register all plugins with this method + * Plugins will be called in the same order as they have been registered + * + * @param object $object - an instance of your plugin + * @return void + */ + public static function registerPlugin($object) + { + self::$_plugins[] = $object; + } + + /** + * Processes preController methods of all plugins + * + * @return void + */ + public static function preControllerHook() + { + foreach(self::$_plugins as $plugin) + { + $plugin->preController(); + } + } + + /** + * Processes postController methods of all plugins + * + * @return void + */ + public static function postControllerHook() + { + foreach(self::$_plugins as $plugin) + { + $plugin->postController(); + } + } +} \ No newline at end of file diff --git a/library/Katharsis/Controller/Plugin/Abstract.php b/library/Katharsis/Controller/Plugin/Abstract.php new file mode 100644 index 0000000..8877623 --- /dev/null +++ b/library/Katharsis/Controller/Plugin/Abstract.php @@ -0,0 +1,31 @@ + + * @version 0.5.2 + * @package Katharsis + */ +abstract class Katharsis_Controller_Plugin_Abstract +{ + /** + * Overwrite this method, if you want something to be processed + * _before_ the controller is called + * + * @return void + */ + public function preController() + { + } + + /** + * Overwrite this method, if you want something to be processed + * _after_ the controller was called + * + * @return void + */ + public function postController() + { + } +} \ No newline at end of file diff --git a/library/Katharsis/Controller/Plugin/Autorender.php b/library/Katharsis/Controller/Plugin/Autorender.php new file mode 100644 index 0000000..f101b3d --- /dev/null +++ b/library/Katharsis/Controller/Plugin/Autorender.php @@ -0,0 +1,32 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_Controller_Plugin_Autorender extends Katharsis_Controller_Plugin_Abstract +{ + /** + * Renders a controller/action.phtml template automaticly after processing controller + * + * @return void + */ + public function postController() + { + $view = Katharsis_View::getInstance(); + + $view->controllerAction = false; + + $templateName = strtolower(Katharsis_Request::getControllerName()) . DIRECTORY_SEPARATOR . strtolower(Katharsis_Request::getActionName()); + + if(file_exists('application/view' . DIRECTORY_SEPARATOR . $templateName . '.phtml')) + { + $view->controllerAction = $templateName; + } + + $view = Katharsis_View::getInstance(); + echo $view->render('main'); + } +} \ No newline at end of file diff --git a/library/Katharsis/ControllerRouting.php b/library/Katharsis/ControllerRouting.php new file mode 100644 index 0000000..18aeb19 --- /dev/null +++ b/library/Katharsis/ControllerRouting.php @@ -0,0 +1,136 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_ControllerRouting +{ + /** + * @var Katharsis_ControllerRouting + */ + protected static $_instance = null; + + /** + * Singleton. Returns the same instance every time + * + * @return Katharsis_ControllerRouting + */ + public static function getInstance() + { + if(self::$_instance === null) + { + self::$_instance = new self(); + } + return self::$_instance; + } + + /** + * Sets default controller and action names + * + * @return void + */ + protected function __construct() + { + Katharsis_Request::setControllerName('index'); + Katharsis_Request::setActionName('index'); + } + + /** + * Initiates routing process + * + * @return void + */ + public function init() + { + $paramstring = ""; + $baseUrl = preg_replace('#(.*/)[^/]+#', '\1', $_SERVER['SCRIPT_NAME']); + + if(preg_match("~.*" . $baseUrl . "([^/\?]+)/([^/\?]+)/*([^\?]*)~", $_SERVER['REQUEST_URI'], $matches)) + { + $controller = $matches[1]; + $action = $matches[2]; + $paramstring = $matches[3]; + $params = $this->_buildParams($paramstring); + + Katharsis_Request::setControllerName($controller); + Katharsis_Request::setActionName($action); + } else if(preg_match("~.*" . $baseUrl . "([^/\?]+)/*([^\?]*)~", $_SERVER['REQUEST_URI'], $matches)) + { + $controller = $matches[1]; + $paramstring = $matches[2]; + $params = $this->_buildParams($paramstring); + + Katharsis_Request::setControllerName($controller); + } else + { + if(array_key_exists('controller', $_GET)) + { + $controller = $_GET['controller']; + Katharsis_Request::setControllerName($controller); + } + + if(array_key_exists('action', $_GET)) + { + $action = $_GET['action']; + Katharsis_Request::setActionName($action); + } + + $params = $_GET; + } + + Katharsis_Request::setParams($params); + + Katharsis_View::getInstance()->requestHook(); + } + + + /** + * Routing processing method + * + * @return void + */ + public function route() + { + $controllerName = ucfirst(Katharsis_Request::getControllerName()) . 'Controller'; + $action = Katharsis_Request::getActionName() . 'Action'; + + if(class_exists($controllerName)) + { + $controllerObject = new $controllerName(); + + $controllerObject->$action(); + } + } + + + /** + * Splits parameters to an array and returns them + * + * @return array + */ + protected function _buildParams($string) + { + $params = array(); + if(trim($string) !== '') + { + $urlparams = explode("/", $string); + + for($i = 0; $i < count($urlparams); $i=$i+2) + { + if(array_key_exists($i+1, $urlparams)) + { + $params[$urlparams[$i]] = $urlparams[$i+1]; + } else + { + $params[$urlparams[$i]] = null; + } + } + } + + return $params; + } +} \ No newline at end of file diff --git a/library/Katharsis/DatabaseConnector.php b/library/Katharsis/DatabaseConnector.php new file mode 100644 index 0000000..021bde7 --- /dev/null +++ b/library/Katharsis/DatabaseConnector.php @@ -0,0 +1,130 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_DatabaseConnector +{ + /** + * @var array + */ + public static $_conns = array(); + + /** + * Reading ini file information and connecting + * + * @param string $requestedName + * @return Katharsis_Db5 + */ + protected static function connect($requestedName = null) + { + $ini = parse_ini_file('config/database.config.ini', true); + if($ini !== array()) + { + $conInformation = self::_selectConnection($ini, $requestedName); + return self::_realConnect($conInformation); + } else + { + return null; + } + } + + /** + * Connects to all connections in config file + * + * @param string $requestedName + * @return void + */ + public static function connectAll() + { + $groups = parse_ini_file('config/database.config.ini', true); + + foreach($groups as $iniName => $conInformation) + { + if(preg_match("~^connection:([^:]+)~", $iniName, $matches)) + { + self::getConnection($matches[1]); + } + } + } + + /** + * Calling Katharsis Db connecting method + * + * @param string $requestedName + * @return Katharsis_Db5 + */ + protected static function _realConnect($conInformation) + { + $con = new Katharsis_Db5($conInformation['host'], $conInformation['user'], $conInformation['password'], $conInformation['database']); + + self::$_conns[$conInformation['name']]['connection'] = $con; + self::$_conns[$conInformation['name']]['info'] = $conInformation; + + return $con; + } + + /** + * Returns specified or default connection + * + * @param string $requestedName + * @return Katharsis_Db5 + */ + public static function getConnection($requestedName = null) + { + if($requestedName === null) + { + foreach(self::$_conns as $con) + { + if($con['info']['default'] === true) + { + return $con['connection']; + } + } + return self::connect(null); + } else + { + if(in_array($requestedName, array_keys(self::$_conns))) + { + return self::$_conns[$requestedName]['connection']; + } + return self::connect($requestedName); + } + } + + /** + * Returns an array of connection information + * + * @param array $ini + * @param string $requestedName + * @return array + */ + protected static function _selectConnection($ini, $requestedName = null) + { + foreach($ini as $name => $connectionInfo) + { + if($requestedName === null) + { + if(preg_match("~^connection:([^:]+):default~", $name, $matches)) + { + $connectionInfo['name'] = $matches[1]; + $connectionInfo['default'] = true; + return $connectionInfo; + } + } else + { + if(preg_match("~^connection:" . $requestedName . ".*~", $name)) + { + $connectionInfo['default'] = false; + $connectionInfo['name'] = $requestedName; + return $connectionInfo; + } + } + } + throw new Katharsis_Exception('Could not find database connection information for "' . $requestedName . '"'); + } +} \ No newline at end of file diff --git a/library/Katharsis/Db5.php b/library/Katharsis/Db5.php new file mode 100644 index 0000000..f5857d2 --- /dev/null +++ b/library/Katharsis/Db5.php @@ -0,0 +1,627 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_Db5 +{ + /** + * @var string + */ + const FETCHMODE_ASSOC = 'ASSOC'; + + /** + * @var string + */ + const FETCHMODE_ARRAY = 'ARRAY'; + + /** + * @var Mysql Resource + */ + private $_connection = null; + + /** + * @var string + */ + private $_host = null; + + /** + * @var string + */ + private $_user = null; + + /** + * @var string + */ + private $_password = null; + + /** + * @var string + */ + private $_database = null; + + /** + * @var string + */ + private $_lastStatement = ""; + + /** + * @var array + */ + private $_lastResult = array(); + + /** + * @var array + */ + private $_lastError = array(); + + /** + * @var int + */ + private $_lastRowCount = 0; + + /** + * Create a connection + * + * @param $host + * @param $user + * @param $password + * @param $database + * + * @return KatharsisDbConnector + */ + public function __construct($host = null, $user = null, $password = null, $database = null) + { + $this->setHost($host); + $this->setUser($user); + $this->setPassword($password); + $this->setDatabase($database); + + if($host !== null && $user !== null && $password !== null && $database !== null) + { + $this->connect(); + } + } + + /** + * Sets the value of $_host + * + * @param string $host + * @author Karl Pannek + */ + public function setHost($value) + { + $this->_host = $value; + } + + /** + * Sets the value of $_user + * + * @param string $user + * @author Karl Pannek + */ + public function setUser($value) + { + $this->_user = $value; + } + + /** + * Sets the value of $_password + * + * @param string $password + * @author Karl Pannek + */ + public function setPassword($value) + { + $this->_password = $value; + } + + /** + * Sets the value of $_database + * + * @param string $database + * @author Karl Pannek + */ + public function setDatabase($value) + { + $this->_database = $value; + $this->_selectDatabase(); + } + + /** + * Returns the value of $_host + * + * @return string + * @author Karl Pannek + */ + public function getHost() + { + return $this->_host; + } + + /** + * Returns the value of $_user + * + * @return string + * @author Karl Pannek + */ + public function getUser() + { + return $this->_user; + } + + /** + * Returns the value of $_password + * + * @return string + * @author Karl Pannek + */ + public function getPassword() + { + return $this->_password; + } + + /** + * Returns the value of $_database + * + * @return string + * @author Karl Pannek + */ + public function getDatabase() + { + return $this->_database; + } + + /** + * Connect to database + * + * + * @return void + */ + public function connect() + { + $this->_connection = @mysql_connect( + $this->getHost(), + $this->getUser(), + $this->getPassword(), + true + ); + + if(!$this->_connection) + { + throw new KatharsisDb5_Exception('Could not connect to "' . $this->getHost() . '" with user "' . $this->getUser() . '".'); + } + + $this->_selectDatabase(); + } + + /** + * Disconnect database connection + * @return bool + */ + public function disconnect() + { + $this->_connection = null; + return (bool) mysql_close($this->_connection); + } + +/** + * Checks connection to database + * + * @return bool + */ + public function isConnected() + { + if($this->_connection !== null && $this->_connection !== false) + { + return true; + } else + { + return false; + } + } + + /** + * Returns mysql connection link resource + * + * @return mysql link resource + */ + public function getMysqlResource () + { + return $this->_connection; + } + + /** + * Executes a Sql statement + * + * @param $statement + * @return bool + */ + public function run ($statement) + { + if($this->_execute($statement)) + { + return true; + } else + { + return false; + } + } + + /** + * Returns Result set for incremental fetching + * + * @param $statement + * @return KatharsisDb5_ResultSet + */ + public function runForIncrementalFetch ($statement) + { + $resultSet = $this->_execute($statement); + return new KatharsisDb5_ResultSet($resultSet); + } + + /** + * Inserts a row into a specified table + * + * @param $table + * @param $values + * @return bool + */ + public function insert ($table, $values = array()) + { + $sets = array(); + + foreach($values as $key => $value) + { + if(is_string($value)) + { + $value = "'" . mysql_real_escape_string($value, $this->_connection) . "'"; + } + $sets[] = "`" . $key . "` = " . $value; + } + + $sql = 'INSERT INTO ' . $table; + + if($values !== array()) + { + $sql .= ' SET ' . implode(',', $sets); + } else + { + $sql .= ' () VALUES () '; + } + + return $this->run($sql); + } + + /** + * Executes Query and returns number of rows + * + * @param $statement + * @return int + */ + public function count ($statement) + { + $result = $this->_execute($statement); + $this->_lastRowCount = mysql_num_rows($result); + return $this->_lastRowCount; + } + + /** + * Returns a fetched result set (All rows) + * + * @param $statement + * @param $fetchmode + * @return array + */ + public function fetchAll($statement, $fetchmode = self::FETCHMODE_ASSOC) + { + return $this->_fetch($statement, $fetchmode, false); + } + + /** + * Returns a fetched result (One rows) + * + * @param $statement + * @param $fetchmode + * @return array + */ + public function fetchOne($statement, $fetchmode = self::FETCHMODE_ASSOC) + { + return $this->_fetch($statement, $fetchmode, true); + } + + public function fetchField ($statement, $field = null) + { + if($field === null) + { + $result = $this->_fetch($statement, self::FETCHMODE_ARRAY, true); + return $result[0]; + } else + { + $result = $this->_fetch($statement, self::FETCHMODE_ASSOC, true); + if(array_key_exists($field, $result)) + { + return $result[$field]; + } + return null; + } + } + + /** + * Prints out details of the last query (Html formatted) + * + * @return void + */ + public function analyseLast () + { + $debug = debug_backtrace(); + $file = explode("/", str_replace("\\", "/", $debug[0]['file'])); + $file = $file[count($file)-1]; + + + echo '
';
+
+		echo '';
+		echo '
QUERY ANALYSIS | from ' . $file . ' on line ' . $debug[0]['line'] . ''; + echo '
'; + echo '
'; + echo 'Statement:
'; + echo '

'; + print_r((string) $this->_lastStatement); + echo '

'; + echo '
'; + + echo '
'; + echo 'Result:
'; + echo '

'; + print_r($this->_lastResult); + echo '

'; + echo '
'; + + if($this->_lastError) + { + echo '
'; + echo 'Error:
'; + echo '

'; + echo ''; + echo ''; + echo ''; + echo '
Number:' . $this->_lastError['number'] . '
Message:' . $this->_lastError['message'] . '
'; + echo '

'; + echo '
'; + } + echo '
'; + } + + /** + * Prepares a statement with certain values + * + * @param $statement + * @param $values + * @return string + */ + public function createStatement ($statement, $values = array()) + { + foreach($values as $key => $value) + { + $wasString = false; + if(is_string($value)) + { + $wasString = true; + } + + if($this->_connection !== null) + { + $value = mysql_real_escape_string($value); + } else + { + $value = mysql_escape_string($value); + } + + // if string, or a integer, but wanting to request via LIKE + if($wasString || preg_match('~%' . $key . '|' . $key . '%~', $statement)) + { + $statement = preg_replace('~\:(%*)' . $key . '(%*)~', "'" . '${1}' . (string) $value . '${2}' . "'", $statement); + } else + { + $statement = str_replace(":" . $key, $value, $statement); + } + } + + return $statement; + } + + /** + * Last primary key that has been inserted + * + * @return int + */ + public function lastInsertId () + { + return mysql_insert_id($this->_connection); + } + + /** + * Returns the number of rows from the last executed statement + * + * @return int + */ + public function lastRowCount () + { + return $this->_lastRowCount; + } + + /** + * Select a database for usage + * + * @return void + * @throws KatharsisDb5_Exception + */ + protected function _selectDatabase() + { + if($this->isConnected() && $this->getDatabase() !== null) + { + if(!mysql_select_db($this->getDatabase(), $this->_connection)) + { + throw new KatharsisDb5_Exception('Could not select database "' . $this->getDatabase() . '".'); + } + } + } + + /** + * Executes Sql statement + * + * @param $statement + * @return mysql resource + */ + protected function _execute($statement) + { + if(!$this->isConnected()) + { + throw new KatharsisDb5_Exception("Not connected to database."); + } + if($result = mysql_query($statement, $this->_connection)) + { + $this->_lastStatement = $statement; + $this->_lastRowCount = mysql_affected_rows($this->_connection); + } + + if(mysql_error($this->_connection)) + { + $this->_lastError['number'] = mysql_errno($this->_connection); + $this->_lastError['message'] = mysql_error($this->_connection); + } else + { + $this->_lastError = array(); + } + + return $result; + } + + /** + * Fetches database result + * + * @param $statement + * @param $fetchmode + * @param $fetchOne + * @return array + */ + protected function _fetch($statement, $fetchmode = self::FETCHMODE_ASSOC, $fetchOne = false) + { + $result = $this->_execute($statement); + + if(!$result) + { + $this->_lastResult = array(); + return array(); + } + + $fetchedResult = array(); + + switch($fetchmode) + { + case self::FETCHMODE_ASSOC: + while($row = mysql_fetch_assoc($result)) + { + if($fetchOne) + { + $fetchedResult = $row; + break; + } else + { + $fetchedResult[] = $row; + } + } + break; + + case self::FETCHMODE_ARRAY: + while($row = mysql_fetch_row($result)) + { + if($fetchOne) + { + $fetchedResult = $row; + break; + } else + { + $fetchedResult[] = $row; + } + } + break; + + default: + throw new KatharsisDb5_Exception('Wrong Fetchmode'); + break; + } + + $this->_lastResult = $fetchedResult; + + return $fetchedResult; + } +} + +/** + * KatharsisDb exception spicification + * + * @author Karl Pannek + * @version 0.5.2 + * @package Katharsis + */ +class KatharsisDb5_Exception extends Exception {} + +/** + * KatharsisDb Result Set + * + * @author Karl Pannek + * @version 0.5.2 + * @package Katharsis + + */ +class KatharsisDb5_ResultSet +{ + /** + * @var Mysql Resource + */ + private $_resultSet; + + /** + * @var Katharsis_Db5 + */ + private $_connection; + + /** + * Sets class attributes + * + * @param Mysql Resource $resultSet + */ + public function __construct($resultSet) + { + $this->_resultSet = $resultSet; + } + + /** + * Fetching next row + * + * @param Mysql Resource $resultSet + */ + public function fetchNext ($fetchmode = Katharsis_Db5::FETCHMODE_ASSOC) + { + switch ($fetchmode) + { + case Katharsis_Db5::FETCHMODE_ASSOC: + return mysql_fetch_assoc($this->_resultSet); + break; + + case Katharsis_Db5::FETCHMODE_ARRAY: + return mysql_fetch_row($this->_resultSet); + break; + + default: + throw new KatharsisDb5_Exception('Wrong Fetchmode'); + break; + } + } +} \ No newline at end of file diff --git a/library/Katharsis/Exception.php b/library/Katharsis/Exception.php new file mode 100644 index 0000000..9e09ee7 --- /dev/null +++ b/library/Katharsis/Exception.php @@ -0,0 +1,11 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_Exception extends Exception +{ +} \ No newline at end of file diff --git a/library/Katharsis/Model/Abstract.php b/library/Katharsis/Model/Abstract.php new file mode 100644 index 0000000..0d3566a --- /dev/null +++ b/library/Katharsis/Model/Abstract.php @@ -0,0 +1,36 @@ + + * @version 0.5.2 + * @package Katharsis + */ +abstract class Katharsis_Model_Abstract +{ + /** + * @var Katharsis_Db5 + */ + protected $_con; + + /** + * Instances class attributes, calles init method + * + * @return void + */ + public final function __construct() + { + $this->_con = Katharsis_DatabaseConnector::getConnection(); + $this->init(); + } + + /** + * Overwrite this method instead of using a constructor + * + * @return void + */ + public function init() + { + } +} \ No newline at end of file diff --git a/library/Katharsis/Request.php b/library/Katharsis/Request.php new file mode 100644 index 0000000..8470fa1 --- /dev/null +++ b/library/Katharsis/Request.php @@ -0,0 +1,93 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_Request +{ + /** + * @var string + */ + protected static $_controller; + + /** + * @var string + */ + protected static $_action; + + /** + * @var array + */ + protected static $_params = array(); + + /** + * Set name of controller + * + * @param string $name + * @return void + */ + public static function setControllerName($name) + { + self::$_controller = $name; + } + + /** + * Set name of action + * + * @param string $name + * @return void + */ + public static function setActionName($name) + { + self::$_action = $name; + } + + /** + * Set parameters + * + * @param array $params + * @return void + */ + public static function setParams($params) + { + foreach($_POST as $key => $value) + { + $params[$key] = $value; + } + self::$_params = $params; + } + + /** + * Get controller name + * + * @return string + */ + public static function getControllerName() + { + return self::$_controller; + } + + /** + * Get action name + * + * @return string + */ + public static function getActionName() + { + return self::$_action; + } + + /** + * Get parameter array + * + * @return array + */ + public static function getParams() + { + return self::$_params; + } +} \ No newline at end of file diff --git a/library/Katharsis/View.php b/library/Katharsis/View.php new file mode 100644 index 0000000..a5dc791 --- /dev/null +++ b/library/Katharsis/View.php @@ -0,0 +1,101 @@ + + * @version 0.5.2 + * @package Katharsis + */ +class Katharsis_View +{ + /** + * @var Katharsis_View + */ + protected static $_instance = null; + + /** + * @var array + */ + protected $_params = array(); + + /** + * Singleton. Returns the same instance every time + * + * @return Katharsis_View + */ + public static function getInstance() + { + if(self::$_instance === null) + { + self::$_instance = new self(); + } + return self::$_instance; + } + + /** + * Sets base application path + * + * @return void + */ + protected function __construct() + { + $base = preg_replace('/(.+)\/[^\/]+/', '\1', $_SERVER['SCRIPT_NAME']); + $this->_params['base'] = $base != $_SERVER['SCRIPT_NAME'] ? $base : ''; + } + + /** + * Magical get method, gets specific param + * + * @param string $name + * @return string + */ + public function __get($name) + { + if(array_key_exists($name, $this->_params)) + { + return $this->_params[$name]; + } + return null; + } + + /** + * Magical set method, sets specific param + * + * @param string name + * @param string value + */ + public function __set($name, $value) + { + $this->_params[$name] = $value; + } + + /** + * Template rendering method + * + * @param string $template + * @return string + */ + public function render($template) + { + ob_start(); + if(file_exists('application/view/' . $template . '.phtml')) + { + include('application/view/' . $template . '.phtml'); + } + $output = ob_get_contents(); + ob_end_clean(); + + return $output; + } + + /** + * Sets Request params into View params + * + * @return void + */ + public function requestHook() + { + $this->_params['params'] = Katharsis_Request::getParams(); + } +} \ No newline at end of file diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..f9567cf --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,9 @@ +RewriteEngine On +RewriteCond %{REQUEST_FILENAME} -s [OR] +RewriteCond %{REQUEST_FILENAME} -l [OR] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule ^.*$ - [NC,L] +RewriteRule ^.*$ index.php [NC,L] + +php_flag magic_quotes_gpc 0 +php_value error_reporting 6143 \ No newline at end of file diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..ce66f02 --- /dev/null +++ b/public/index.php @@ -0,0 +1,26 @@ + + * @version 0.5.2 + * @package Katharsis + */ + +chdir('..'); +require_once('library/Katharsis/Bootstrap.php'); +Katharsis_Autoload::init(); + +Katharsis_Controller_Plugin::registerPlugin(new Katharsis_Controller_Plugin_Autorender()); + + +try { + Katharsis_Bootstrap::run(); +} catch(Exception $e) +{ + echo '

Exception thrown

'; + echo '

' . $e->getMessage() . '

'; + echo '
';
+	print_r($e);
+}
\ No newline at end of file
diff --git a/public/style/main.css b/public/style/main.css
new file mode 100644
index 0000000..e69de29