summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2012-01-07 08:21:00 -0800
committerLuke Shumaker <LukeShu@sbcglobal.net>2012-01-07 10:20:28 -0800
commit464f4d3497617fadb9d7752868f1175849cfa6d2 (patch)
tree0771bd935b30971bf2c244b6f158ed7496b644e5 /src/lib
parent3d64793a1ee45857856be1cd71c3a0a040a3e869 (diff)
Refactor to separate the framework from the app; drop message stuff, this app is just user management. Add a json view for individual usersHEADmaster
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Controller.class.php30
-rw-r--r--src/lib/DB.class.php164
-rw-r--r--src/lib/Database.class.php403
-rw-r--r--src/lib/Hasher.class.php18
-rw-r--r--src/lib/Login.class.php41
-rw-r--r--src/lib/Mime.class.php45
-rw-r--r--src/lib/Model.class.php9
-rw-r--r--src/lib/Plugin.class.php25
-rw-r--r--src/lib/PluginManager.class.php99
-rw-r--r--src/lib/Router.class.php110
-rw-r--r--src/lib/Singleton.class.php12
-rw-r--r--src/lib/Site.class.php32
-rw-r--r--src/lib/View.class.php135
13 files changed, 0 insertions, 1123 deletions
diff --git a/src/lib/Controller.class.php b/src/lib/Controller.class.php
deleted file mode 100644
index 05736ee..0000000
--- a/src/lib/Controller.class.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-class Controller {
- /**
- * Show a $view, in the most appropriate format (according to file
- * extension and HTTP Accept header). Pass the array $vars to the view.
- */
- protected function showView($view, $vars=null) {
- if ($vars===null) { $vars = array(); }
-
- $obj = new View($view);
- $obj->show($vars);
- }
-
- // Here be default handlers ////////////////////////////////////////////
-
- public function index($routed, $remainder) {
- header('Content-type: text/plain');
- echo " == Generic Controller Index == \n\n";
- $routed_str = implode('/', $routed);
- $remainder_str = implode('/', $remainder);
- echo "Full path: $routed_str/$remainder_str\n";
- echo "Controller path: $routed_str\n";
- echo "Remainder path: $remainder_str\n";
- }
- public function http404($routed, $remainder) {
- $this->showView('http404', array('routed'=>$routed,
- 'remainder'=>$remainder));
- }
-}
diff --git a/src/lib/DB.class.php b/src/lib/DB.class.php
deleted file mode 100644
index ac8dafe..0000000
--- a/src/lib/DB.class.php
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-require_once('Auth.class.php');
-require_once('Login.class.php');
-require_once('Database.class.php');
-
-class DB {
- public static function set($table, $unit, $key, $value, $orig_value) {
- $value_base = $orig_value;
-
- $doit = true;
- $forked = false;
- $have_old = ($value_base!==null);
- if ($have_old) {
- $we_changed_it = $value_base != $value;
- if ($we_changed_it) {
- $value_fork = $this->getConfString($key);
- $someone_else_changed_it =
- $value_fork != $value_base;
- if ($someone_else_changed_it) {
- if ($value == $value_fork) {
- // we might as well not have
- $we_changed_it = false;
- } else {
- $forked = true;
- }
- }
- }
- if (!$we_changed_it) {
- $doit = false;// nothing to do
- }
- }
- if ($doit) {
- return $this->setConf($key, $value);
- }
- if ($forked) {
- return $value_fork;
- }
- }
-
- public static function get($table, $unit, $key) {
- switch ($table) {
- case 'conf':
- case 'plugins':
- return self::admin_get($unit, $key);
- break;
- case 'users':
- return self::user_get($unit, $key);
- break;
- default:
- return false;
- }
- }
- public static function raw_set($table, $unit, $key, $value) {
- switch ($table) {
- case 'conf':
- case 'plugins':
- return self::admin_get($unit, $key, $value);
- break;
- case 'users':
- return self::user_set($unit, $key, $value);
- break;
- default:
- return false;
- }
- }
-
- private static function user_get($uid, $key) {
- $user = Auth::getInstance($uid);
- $logged_in_user = Auth::getInstance(Login::isLoggedIn());
-
- $post_key = $key."[$uid]";
- @$value = $_POST[$post_key];
- $editable = $user->canEdit();
-
- switch ($key) {
- case 'auth_uid':
- $value = $user->getUID();
- $editable = false;
- break;
- case 'auth_name':
- $value = $user->getName();
- break;
- case 'auth_user':
- $editable = $editable && $logged_in_user->isAdmin();
- $value = $user->isUser()?'true':'false';
- break;
- case 'auth_admin':
- $editable = $editable && $logged_in_user->isAdmin();
- $value = $user->isAdmin()?'true':'false';
- break;
- case 'auth_delete':
- $editable = $editable && $logged_in_user->isAdmin();
- $value = 'false';
- break;
- default:
- $value = $user->getConf($key);
- if ($value===false) $value='';
- break;
- }
-
- return array('value'=>$value,
- 'post_key'=>$post_key,
- 'editable'=>$editable);
- }
- private static function user_set($uid, $key, $value) {
- $user = Auth::getInstance($uid);
-
- switch ($key) {
- case 'auth_uid':
- return false;
- break;
- case 'auth_name':
- return $user->setName($value);
- break;
- case 'auth_user':
- return $user->setUser($value=='true');
- break;
- case 'auth_admin':
- return $user->setAdmin($value=='true');
- break;
- case 'auth_delete':
- if ($value=='true') return $user->delete();
- default:
- return $user->setConf($key, $value);
- break;
- }
- }
-
- private static function admin_get($plugin, $key) {
- $db = Database::getInstance();
- $user = Auth::getInstance(Login::isLoggedIn());
- if ($user->isAdmin()) {
- $editable = true;
- switch ($plugin) {
- case 'system':
- $value = $db->getSysConf($key);
- break;
- default:
- $value = $db->getPluginConf($plugin, $key);
- break;
- }
- } else {
- $editable = false;
- $value = false;
- }
-
- return array('value'=>$value,
- 'post_key'=>'to be implemented',// FIXME
- 'editable'=>$editable);
- }
- private static function admin_set($plugin, $key, $value) {
- $db = Database::getInstance();
- $user = Auth::getInstance(Login::isLoggedIn());
- if (!$user->isAdmin()) {
- return false;
- }
- switch ($plugin) {
- case 'system':
- return $db->setSysConf($key, $value);
- default:
- return $db->setPluginConf($plugin, $key, $value);
- }
- }
-}
diff --git a/src/lib/Database.class.php b/src/lib/Database.class.php
deleted file mode 100644
index a76d891..0000000
--- a/src/lib/Database.class.php
+++ /dev/null
@@ -1,403 +0,0 @@
-<?php
-require_once('Singleton.class.php');
-require_once('Hasher.class.php');
-
-class Database extends Singleton {
- private static $me = null;
- private $conf;
- private $mysql;
- private $db_prefix;
-
- public function __construct($conf_file) {
- $this->conf = $conf_file;
- self::$me = $this;
- }
- public static function getInstance() {
- return self::$me;
- }
-
- // Low-Level SQL functions /////////////////////////////////////////////
-
- private function mysql() {
- if (!isset($this->mysql)) {
- $this->mysql_init();
- }
- return $this->mysql;
- }
- private function mysql_init() {
- global $db_config;
- require($this->conf);
- $this->mysql = mysql_connect($db_config['host'],
- $db_config['user'],
- $db_config['password']);
- mysql_set_charset($db_config['charset'], $this->mysql);
- mysql_select_db($db_config['name'], $this->mysql);
- $this->db_prefix = $db_config['prefix'];
- unset($db_config);
- }
- private function mysql_table($table_name) {
- $mysql = $this->mysql();
- $prefix = $this->db_prefix;
- return $prefix.mysql_real_escape_string($table_name, $mysql);
- }
- private function mysql_escape($string) {
- $mysql = $this->mysql();
- return mysql_real_escape_string($string, $mysql);
- }
- private function mysql_query($query) {
- $mysql = $this->mysql();
- return mysql_query($query, $mysql);
- }
- public function mysql_error() {
- $mysql = $this->mysql();
- return mysql_error($mysql);
- }
-
- // High-Level SQL functions ////////////////////////////////////////////
-
- // The 'auth' table
-
- public function getUID($username) {
- $t = $this->mysql_table('auth');
- $v = $this->mysql_escape($username);
- $query =
- "SELECT * \n".
- "FROM $t \n".
- "WHERE name='$v' ;";
- $q = $this->mysql_query($query);
- $user = mysql_fetch_array($q);
- if (isset($user['uid'])) {
- return (int)$user['uid'];
- } else {
- return false;
- }
- }
- public function getUsername($uid) {
- if (!is_int($uid)) return false;
- $t = $this->mysql_table('auth');
- $query =
- "SELECT * \n".
- "FROM $t \n".
- "WHERE uid=$uid ;";
- $q = $this->mysql_query($query);
- $user = mysql_fetch_array($q);
- if (isset($user['name'])) {
- return $user['name'];
- } else {
- return false;
- }
- }
- public function setUsername($uid, $username) {
- if (!is_int($uid)) return false;
- if ($this->getUID($username) !== false) {
- return false;
- }
- $table = $this->mysql_table('auth');
- $name = $this->mysql_escape($username);
- $query =
- "UPDATE $table \n".
- "SET name='$name' \n".
- "WHERE uid=$uid ;";
- $q = $this->mysql_query($query);
- return ($q?true:false);
- }
- public function getPasswordHash($uid) {
- if (!is_int($uid)) return false;
-
- $table = $this->mysql_table('auth');
- $query =
- "SELECT * \n".
- "FROM $table \n".
- "WHERE uid=$uid ;";
- $q = $this->mysql_query($query);
- $user = mysql_fetch_array($q);
- if (isset($user['hash'])) {
- return $user['hash'];
- } else {
- return false;
- }
- }
- public function setPassword($uid, $password) {
- if (!is_int($uid)) return false;
- $table = $this->mysql_table('auth');
-
- $hasher = Hasher::getInstance();
- @$hash = $hasher->hash($password);
- $query =
- "UPDATE $table \n".
- "SET hash='$hash' \n".
- "WHERE uid=$uid ;";
- $q = $this->mysql_query($query);
- return ($q?true:false);
- }
- public function addUser($username, $password) {
- $user_exits = $this->getUID($username);
- if ($user_exists) {
- return false;
- }
-
- $table = $this->mysql_table('auth');
- $user = $this->mysql_escape($username);
- $hasher = Hasher::getInstance();
- @$hash = $hasher->hash($password);
- $status = 0;
- $query =
- "INSERT INTO $table ( name, hash , status) \n".
- "VALUES ('$user', '$hash', $status) ;";
- $this->mysql_query($query);
- $uid = $this->getUID($username);
- return $uid;
- }
- public function getStatus($uid) {
- if (!is_int($uid)) return false;
- $table = $this->mysql_table('auth');
- $query =
- "SELECT * \n".
- "FROM $table \n".
- "WHERE uid=$uid ;";
- $q = $this->mysql_query($query);
- $user = mysql_fetch_array($q);
- if (isset($user['status'])) {
- return (int)$user['status'];
- } else {
- return false;
- }
- }
- public function setStatus($uid, $status) {
- if (!is_int($uid)) return false;
- $table = $this->mysql_table('auth');
- $s = $this->mysql_escape($status);
- $query =
- "UPDATE $table \n".
- "SET status=$s \n".
- "WHERE uid=$uid ;";
- $q = $this->mysql_query($query);
- return ($q?true:false);
- }
- public function countUsers() {
- $table = $this->mysql_table('auth');
- $query = "SELECT COUNT(*) FROM $table;";
- $q = $this->mysql_query($query);
- $row = mysql_fetch_array($q);
- $count = $row[0];
- return $count;
- }
- public function listGroups() {
- $table = $this->mysql_table('auth');
- $query =
- "SELECT uid \n".
- "FROM $table \n".
- "WHERE status=3 ;";
- $q = $this->mysql_query($query);
- $groups = array();
- while (($row = mysql_fetch_array($q)) !==false) {
- $groups[] = (int)$row[0];
- }
- return $groups;
- }
- public function listGroupNames() {
- $table = $this->mysql_table('auth');
- $query =
- "SELECT name \n".
- "FROM $table \n".
- "WHERE status=3 ;";
- $q = $this->mysql_query($query);
- $groups = array();
- while (($row = mysql_fetch_array($q)) !==false) {
- $groups[] = $row[0].'';
- }
- return $groups;
- }
- public function listUsers() {
- $table = $this->mysql_table('auth');
- $query =
- "SELECT uid \n".
- "FROM $table \n".
- "WHERE status < 3 ;";
- $q = $this->mysql_query($query);
- $users = array();
- while (($row = mysql_fetch_array($q)) !==false) {
- $users[] = (int)$row[0];
- }
- return $users;
- }
-
- // The 'users' table
-
- public function findUser($setting, $value) {
- $t = $this->mysql_table('users');
- $k = $this->mysql_escape($setting);
- $v = $this->mysql_escape($value);
- $query =
- "SELECT * \n".
- "FROM $t \n".
- "WHERE k = '$k' \n".
- "AND UPPER(v)=UPPER('$v') ;";
- $q = $this->mysql_query($query);
- $user = mysql_fetch_array($q);
- if (isset($user['uid'])) {
- return $user['uid'];
- } else {
- return false;
- }
- }
- public function getUserConf($uid, $setting) {
- if (!is_int($uid)) return false;
- $t = $this->mysql_table('users');
- $k = $this->mysql_escape($setting);
- $query =
- "SELECT * \n".
- "FROM $t \n".
- "WHERE k='$k' \n".
- "AND uid=$uid ;";
- $q = $this->mysql_query($query);
- $row = mysql_fetch_array($q);
- if (isset($row['v'])) {
- return $row['v'];
- } else {
- return false;
- }
- }
- public function setUserConf($uid, $setting, $value) {
- if (!is_int($uid)) return false;
- $isset = ($this->getUserConf($uid, $setting) !== false);
- $t = $this->mysql_table('users');
- $k = $this->mysql_escape($setting);
- $v = $this->mysql_escape($value);
- if ($isset) {
- $query =
- "UPDATE $t \n".
- "SET v = '$v' \n".
- "WHERE k = '$k' \n".
- "AND uid = $uid ;";
- } else {
- $query =
- "INSERT INTO $t ( uid, k , v ) \n".
- "VALUES ($uid, '$k', '$v') ;";
- }
- $q = $this->mysql_query($query);
- return ($q?true:false);
- }
- public function getUsersInGroup($groupname) {
- $table = $this->mysql_table('users');
- $group = $this->mysql_escape($groupname);
- $query =
- "SELECT uid \n".
- "FROM $table \n".
- "WHERE k='groups' \n".
- "AND v LIKE '%,$group,%' ;";
- $q = $this->mysql_query($query);
- $users = array();
- while (($row = mysql_fetch_array($q)) !==false) {
- $users[] = $row[0];
- }
- return $users;
- }
-
- // The 'plugins' table
-
- public function getPluginConf($plugin, $key) {
- $t = $this->mysql_table('plugins');
- $p = $this->mysql_escape($plugin);
- $k = $this->mysql_escape($key);
- $query =
- "SELECT * \n".
- "FROM $t \n".
- "WHERE k='$k' \n".
- "AND plugin='$p' ;";
- $q = $this->mysql_query($query);
- $row = mysql_fetch_array($q);
- if (isset($row['v'])) {
- return $row['v'];
- } else {
- return false;
- }
- }
- public function setPluginConf($plugin, $key, $value) {
- $isset = ($this->getPluginConf($plugin, $key) !== false);
- $t = $this->mysql_table('plugins');
- $p = $this->mysql_escape($plugin);
- $k = $this->mysql_escape($key);
- $v = $this->mysql_escape($value);
- if ($isset) {
- $query =
- "UPDATE $t \n".
- "SET v = '$v' \n".
- "WHERE k = '$k' \n".
- "AND plugin = '$p' ;";
- } else {
- $query =
- "INSERT INTO $t (plugin, k , v ) \n".
- "VALUES ('$p' , '$k', '$v') ;";
- }
- $q = $this->mysql_query($query);
- return ($q?true:false);
- }
-
- // The 'conf' table
-
- public function getSysConf($key) {
- $t = $this->mysql_table('conf');
- $k = $this->mysql_escape($key);
- $query =
- "SELECT * \n".
- "FROM $t \n".
- "WHERE k='$k' ;";
- $q = $this->mysql_query($query);
- $row = mysql_fetch_array($q);
- if (isset($row['v'])) {
- return $row['v'];
- } else {
- return false;
- }
- }
- public function setSysConf($key, $value) {
- $isset = ($this->getSysConf($key) !== false);
- $t = $this->mysql_table('conf');
- $k = $this->mysql_escape($key);
- $v = $this->mysql_escape($value);
- if ($isset) {
- $query =
- "UPDATE $t \n".
- "SET v = '$v' \n".
- "WHERE k = '$k' ;";
- } else {
- $query =
- "INSERT INTO $t ( k , v ) \n".
- "VALUES ('$k', '$v') ;";
- }
- $q = $this->mysql_query($query);
- return ($q?true:false);
- }
-
- /**
- * Strip out empty group names and duplicates, sort.
- */
- private static function sanitizeArray($in) {
- $out = array();
- foreach ($in as $item) {
- if (($item !== '')&&(!in_array($item, $out))) {
- $out[] = $item;
- }
- }
- natsort($out);
- return $out;
- }
- /**
- * Translate an array into a value suitable to be stored into a
- * key-value store in the database.
- */
- public static function arrayToValue($list) {
- $out_list = self::sanitizeArray($list);
- return ','.implode(',', $out_list).',';
- }
- /**
- * Translate a value from arrayToValue() back into an array.
- */
- public static function valueToArray($value) {
- $raw_list = explode(',', $value);
- $out_list = self::sanitizeArray($raw_list);
- return $out_list;
- }
-
-}
diff --git a/src/lib/Hasher.class.php b/src/lib/Hasher.class.php
deleted file mode 100644
index dc16d68..0000000
--- a/src/lib/Hasher.class.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-require_once('Singleton.class.php');
-require_once('PasswordHash.class.php');
-
-class Hasher extends Singleton {
- private $pw_hash;
-
- function __construct() {
- $this->pw_hash = new PasswordHash(8, false);
- }
-
- public function hash($password) {
- return $this->pw_hash->HashPassword($password);
- }
- public function check($password, $hash) {
- return $this->pw_hash->CheckPassword($password, $hash);
- }
-}
diff --git a/src/lib/Login.class.php b/src/lib/Login.class.php
deleted file mode 100644
index bb21928..0000000
--- a/src/lib/Login.class.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-require_once('Database.class.php');
-require_once('Hasher.class.php');
-
-class Login {
- /** Decalare an empty __construct() so that the login function doesn't
- get mistaken for the costructor. */
- public function __construct() {}
-
- public static function login($username, $password) {
- $db = Database::getInstance();
- $hasher = Hasher::getInstance();
-
- $uid = $db->getUID($username);
- if ($uid!==false && $db->getStatus($uid)>=3)
- $uid=false;
- if ($uid===false) {
- // user does not exist
- return 2;
- }
- $hash = $db->getPasswordHash($uid);
- if ($hasher->check($password, $hash)) {
- // success
- $_SESSION['uid'] = $uid;
- return 0;
- } else {
- // wrong password
- return 1;
- }
- }
- public static function isLoggedIn() {
- if ( isset($_SESSION['uid']) && ($_SESSION['uid']!='') ) {
- return $_SESSION['uid'];
- } else {
- return false;
- }
- }
- public static function logout() {
- $_SESSION['uid'] = '';
- }
-}
diff --git a/src/lib/Mime.class.php b/src/lib/Mime.class.php
deleted file mode 100644
index f37c1eb..0000000
--- a/src/lib/Mime.class.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-class Mime {
- public static $mimes = array(
- 'csv' => array(
- 'text/csv', 'text/x-csv',
- 'text/x-comma-separated-values',
- 'text/comma-separated-values',
- 'application/csv',
- 'application/excel', 'application/vnd.msexcel'),
- 'xhtml' => array('text/html', 'application/xhtml+xml'),
- 'html' => array('text/html', 'application/xhtml+xml'),
- 'bmp' => 'image/bmp',
- 'gif' => 'image/gif',
- 'jpeg' => array('image/jpeg', 'image/pjpeg'),
- 'jpg' => array('image/jpeg', 'image/pjpeg'),
- 'jpe' => array('image/jpeg', 'image/pjpeg'),
- 'png' => array('image/png', 'image/x-png'),
- 'tiff' => 'image/tiff',
- 'tif' => 'image/tiff',
- 'css' => 'text/css',
- 'htm' => 'text/html',
- 'txt' => 'text/plain',
- 'json' => array('application/json', 'text/json')
- );
-
- public static function ext2mime($ext) {
- $mimes = self::$mimes;
- $mime = $mimes[$ext];
- if (!is_array($mime)) $mime = array($mime);
- return $mime;
- }
- public static function mime2ext($my_mime) {
- $ret = array();
- foreach (self::mimes as $ext => $mime) {
- if (is_array($mime)) {
- $match = in_array($my_mime, $mime);
- } else {
- $match = $my_mime==$mime;
- }
- if ($match) $ret[] = $ext;
- }
- return $ret;
- }
-} \ No newline at end of file
diff --git a/src/lib/Model.class.php b/src/lib/Model.class.php
deleted file mode 100644
index 0cce525..0000000
--- a/src/lib/Model.class.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-require_once('Database.class.php');
-
-abstract class Model {
- protected $db;
- public function __construct() {
- $this->db = Database::getInstance();
- }
-}
diff --git a/src/lib/Plugin.class.php b/src/lib/Plugin.class.php
deleted file mode 100644
index 9d2fc2e..0000000
--- a/src/lib/Plugin.class.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-abstract class Plugin {
- protected $config = Array();
-
- public abstract static function configList();
- public abstract static function description();
-
- public function configSet($param, $value) {
- if (isset($this->config[$param])) {
- $this->config[$param]=$value;
- }
- }
-
- public function userConfig() { return array(); }
- protected function addConfigGroup($arr, $group) {
- if (!isset($arr[$group]))
- $arr[$group] = array();
- }
-
- public abstract function init();
-
- public function antispam_html() { return ''; }
- public function antispam_verify() { return true; }
-}
diff --git a/src/lib/PluginManager.class.php b/src/lib/PluginManager.class.php
deleted file mode 100644
index ce5a3ef..0000000
--- a/src/lib/PluginManager.class.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-require_once('Singleton.class.php');
-require_once('Database.class.php');
-
-class PluginManager extends Singleton {
- public $plugins = array();
- private $loaded = false;
-
- /**
- * Return an instance of the plugin with $plugin_name
- */
- public function loadPlugin($plugin_name) {
- $db = Database::getInstance();
-
- require_once("$plugin_name.class.php");
- $obj = new $plugin_name;
- $params = call_user_func("$plugin_name::configList");
- foreach ($params as $param => $type) {
- $value = $db->getPluginConf($plugin_name, $param);
- if ($value!==false) {
- switch ($type) {
- case 'text':
- case 'password':
- $value = "$value";
- break;
- case 'int':
- $value = (int)$value;
- break;
- }
- $obj->configSet($param, $value);
- }
- }
- return $obj;
- }
-
- /**
- * Return an array of available plugin names.
- */
- public function listPlugins() {
- $plugins = array();
-
- $dirs = explode(PATH_SEPARATOR, PLUGINPATH);
- foreach ($dirs as $dir) {
- // Find all files in $dir with the ext `.class.php'
- $files = glob($dir.'/*.class.php');
- foreach ($files as $file) {
- $plugins[] = preg_replace('@\.class\.php$@', '$1', basename($file));
- }
- }
-
- return $plugins;
- }
-
- /**
- * Return an array of enabled plugin names.
- */
- public function getActivePlugins() {
- $db = Database::getInstance();
- $string = $db->getSysConf('plugins');
- return $db->valueToArray($string);
- }
-
- /**
- * Set the enabled plugins.
- */
- public function setActivePlugins($plugins) {
- $db = Database::getInstance();
- $string = $db->arrayToValue($plugins);
- return $db->setSysConf('plugins', $string);
- }
-
- /**
- * Load the enabled plugins.
- */
- public function loadPlugins() {
- if ($this->loaded) return;
- $plugin_names = $this->getActivePlugins();
- foreach ($plugin_names as $name) {
- $this->plugins[$name] = $this->loadPlugin($name);
- }
- $this->loaded = true;
- }
-
- public function callHook($hook, $arg=null) {
- $this->loadPlugins();
- $ret = array();
- foreach ($this->plugins as $name => $plugin) {
- $ret[$name] = call_user_func(array($plugin, $hook),
- &$arg);
- }
- return $ret;
- }
-
- public function staticHook($plugin_name, $hook) {
- require_once("$plugin_name.class.php");
- return call_user_func("$plugin_name::$hook");
- }
-
-}
diff --git a/src/lib/Router.class.php b/src/lib/Router.class.php
deleted file mode 100644
index 238e3f8..0000000
--- a/src/lib/Router.class.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-require_once('Controller.class.php');
-
-class Router {
- /**
- * Array mapping URIs to controllers.
- * A controller may register itself either by using
- * Router::register($URI, $controller[, $function]);
- * or by adding itself to the $ROUTER global.
- *
- * The default here just gives us a 404 handler.
- */
- private $routes = array('/*' => 'Http404');
-
- /**
- * Instantiate a router that looks for controllers in $controllerpath.
- */
- public function Router($controllerpath) {
- // create a $ROUTES global that can be used to set up our
- // $this->routes.
- global $ROUTES;
- $ROUTES = $this->routes;
-
- // Split $controllerpath into directories, and load the
- // controllers in each.
- $dirs = explode(PATH_SEPARATOR, $controllerpath);
- foreach ($dirs as $dir) {
- // Find all files in $dir with the ext `.class.php'
- $files = glob($dir.'/*.class.php');
- foreach ($files as $file) {
- // and include them
- require_once($file);
- }
- }
-
- $this->routes = $ROUTES;
- unset($ROUTES);
- }
-
- /**
- * Route the page at the relative URL $page to the appropriate
- * controller, and call the appropriate function.
- */
- public function route($page) {
- $parts = explode('/', $page);
- $length = count($parts); // the # of segments in $controllerpart
-
- // if $page ends in "/", strip that off
- if ($parts[$length-1]=='') {
- array_pop($parts);
- $length--;
- }
-
- $controllerpart = implode('/', $parts);
-
- // Keep shortening $controllerpart until it matches something in
- // $this->routes. The shortest it will ever become is '/*'.
- // If no key exists for '/*', that's an infinite loop.
- // Fortunately, the default value of $this->routes directs '/*'
- // to the Http404 controller.
- while(!isset($this->routes[$controllerpart])) {
- $some_parts = array_slice($parts, 0, $length);
- $controllerpart = implode('/', $some_parts).'/*';
- $length--;
- }
- $length++;
-
- // Figure what function to call on what controller
- // Grammar Nazi Warning: `what' or `which'?
- $controller = $this->routes[$controllerpart];
- if (strpos($controller, '->')===false) {
- // imply function
- $function = $parts[$length];
- } else {
- preg_match('/(.*)->(.*)/', $controller, $matches);
- $controller = $matches[1];
- $function = $matches[2];
- }
-
- // Default to the `index' function, provided by all controllers
- if ($function=='') {
- $function = 'index';
- }
-
- // We will pass these arrays to the function.
- $routed = array_slice($parts, 0, $length);
- $remainder = array_slice($parts, $length);
-
- // Finally, run the controller
- $obj = new $controller();
- if (in_array($function, get_class_methods($obj))) {
- call_user_func(array($obj, $function),
- $routed, $remainder);
- } else {
- $obj->http404($routed, $remainder);
- }
- }
-
- /**
- * This is to allow controllers to register themselves to the router.
- * If $function=='', then the function will be determined by the segment
- * to the right of the last segment in $path
- */
- public static function register($path, $controller, $function='') {
- $str = $controller.(($function=='')?'':'->'.$function);
- global $ROUTES;
- $ROUTES[$path] = $str;
- }
-} \ No newline at end of file
diff --git a/src/lib/Singleton.class.php b/src/lib/Singleton.class.php
deleted file mode 100644
index 2f8c74f..0000000
--- a/src/lib/Singleton.class.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-abstract class Singleton {
- private static $instances = array();
- public static function getInstance() {
- $class = get_called_class();
- if (!isset(self::$instances[$class])) {
- self::$instances[$class] = new $class;
- }
- return self::$instances[$class];
- }
-}
diff --git a/src/lib/Site.class.php b/src/lib/Site.class.php
deleted file mode 100644
index 1204089..0000000
--- a/src/lib/Site.class.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-require_once('Singleton.class.php');
-require_once('Database.class.php');
-
-class Site extends Singleton {
- public function shortUrl($longUrl) {
- $ch = curl_init('http://ur1.ca');
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFILEDS,
- 'longurl='.urlencode($longUrl));
- $html = curl_exec();
- preg_match('/Your ur1 is: <a href="([^"]*)">/',$html,$matches);
- $shortUrl = $matches[1];
- curl_close($ch);
- return $shortUrl;
- }
-
- public function baseUrl() {
- $base = $_SERVER['REQUEST_URI'];
-
- $db = Database::getInstance();
- if ($db !== null) {
- $b = $db->getSysConf('baseurl');
- if ($b != false) {
- $base = $b;
- }
- }
-
- return $base;
- }
-}
diff --git a/src/lib/View.class.php b/src/lib/View.class.php
deleted file mode 100644
index d7a21d3..0000000
--- a/src/lib/View.class.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-
-require_once('Mime.class.php');
-require_once('HTTP_Accept.class.php');
-
-/**
- * A class to handle loading and evaluating the appropriateness of different
- * views.
- *
- * Depends on the state of the following variables/constants:
- * PAGE_EXT
- * VIEWPATH
- * $_SERVER['HTTP_ACCEPT']
- */
-class View {
- private $extensions = array();
- private $ext = '';
- private $view = '';
-
- /**
- * Return the filename of the view file with extension $ext
- */
- private static function filename($view, $ext) {
- return VIEWPATH."/pages/$view.$ext.php";
- }
-
- /**
- * Choose between $extensions, which all have equal quality.
- */
- private function chooseBetweenEquals($extensions) {
- if (count($extensions)<1) return false;
- $pref = array('html');
- foreach ($pref as $ext) {
- if (in_array($ext, $extensions)) return $ext;
- }
- return $extensions[0]; // XXX: Worst. Solution. Ever.
- }
-
- /**
- * Find the best available extension to use, based on file extension and
- * HTTP 'Accept' headers.
- */
- private function chooseExtension($view) {
- // Make a list of candidate extensions for this view.
- $files = glob(self::filename($view, '*'));
- $this->extensions = array();
- $regex = '@'.preg_quote(VIEWPATH,'@').'[^.]*\.(.*)\.php$@';
- foreach ($files as $file) {
- $ext = preg_replace($regex, '$1', $file);
- $this->extensions[] = $ext;
- }
- if (count($this->extensions)<1) return false;
-
- if (PAGE_EXT != '') {
- // First, do a check if we can just return requested
- // file extension:
- if (in_array(PAGE_EXT, $this->extensions)) {
- return PAGE_EXT;
- }
-
- // Check for other extensions with the same mime type as
- // the requested:
- $accept_str = implode(', ', Mime::ext2mime(PAGE_EXT));
- $extensions = $this->parseAccept($view, $accept_str);
- if ($ext = $this->chooseBetweenEquals($extensions)) return $ext;
- }
-
- // Check for other extensions based on HTTP 'Accept' headers:
- $accept_str = $_SERVER['HTTP_ACCEPT'];
- $extensions = $this->parseAccept($view, $accept_str);
- if ($ext = $this->chooseBetweenEquals($extensions)) return $ext;
-
- // Well, all the good options failed, so let's see what we've
- // got left:
- $extensions = $this->extensions;
- return $this->chooseBetweenEquals($extensions);
-
- }
-
- private function parseAccept($view, $accept_str) {
- // $prefs is a associative array where the key is the file
- // extension, and the value is how much we like that extension.
- // Higher numbers are better.
- $prefs = array();
-
- $accept = new HTTP_Accept($accept_str);
-
- // Loop through the candidate views, and record how much we
- // like each.
- foreach ($this->extensions as $ext) {
- $mimes = Mime::ext2mime($ext);
- foreach ($mimes as $mime) {
- $quality = $accept->getQuality($mime);
- if (isset($prefs[$ext])) {
- $quality = max($prefs[$ext], $quality);
- }
- $prefs[$ext] = $quality;
- }
- }
-
- // Create an array of all extensions tied for the top quality.
- $ret = array();
- $top_quality = 0.001;// minimum acceptable according to RFC 2616
- foreach ($prefs as $ext => $quality) {
- if ($quality > $top_quality) {
- $top_quality = $quality;
- $ret = array();
- }
- if ($quality == $top_quality) {
- $ret[] = $ext;
- }
- }
- return $ret;
- }
-
- public function __construct($view) {
- $this->ext = $this->chooseExtension($view);
- $this->view = $view;
- }
-
- public function show($vars) {
- $file = self::filename($this->view, $this->ext);
- $mimes = Mime::ext2mime($this->ext);
-
- header('Content-type: '.$mimes[0]);
-
- require_once(VIEWPATH.'/Template.class.php');
- $vars['template'] = new Template();
-
- global $VARS;
- $VARS = $vars;
- include($file);
- unset($VARS);
- }
-}