summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2011-10-23 17:08:41 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2011-10-23 17:08:41 -0400
commita580549d814adf828bf2bc6461a5572183ba114c (patch)
treec53a06e55039252e06839aff9929878c62507a3a
parentea13b80f93469d6d7790e02bfc4983918daa0315 (diff)
Refactor to *finally* get rid of the god-class "MessageManager".
Accomplish this largely by using singletons. Now, I know this breaks the "build", at least in PHP 5.2. But there's a lot here that's good stuff, so just wait for the next commit. Now, a *LOT* changed, as you can see by the size of the diff; it's about a day and a half of editing worth of editing. I'll describe a little of it, but I'm not going to go into a ton of detail, and won't bother trying to break it into separate commits (they're all so interconnected, it would be mental masturbation). 'Cause I'm the only one looking at it at this point. 1. MessageManager did 3 things: A. Act as a global site class. This has been moved into `lib/Site.class.php' B. Act as a registry for singletons. Now there's a `lib/Singleton.class.php' abstract class to let them manage themselves. : Note: With the possible exception of Database, none of the : : singletons *need* to be singletons, but to create : : multiple of them would be wasteful. : C. Check if the database conf file exists, and if it doesn't show an error message. This has been moved into index.php, and the message has been turned into a proper view. 2. Recognize `Auth.class.php' for what it is, a multiton. Rename Auth::getObj to Auth::getInstance to be consistant with singletons. 3. Make Site->baseUrl() (formerly `MessageManager->baseUrl()') figure the base URL each time, either with or without the database. This way we can be more flexible with initing the Template. 4. Init Template (now a singleton) sanely. We can now use views with no DB. I will use the above to shorten the below file changes: index.php: [1C] Also, just tidy up. src/controllers/Users.class.php: [1B] [2] src/lib/Controller.class.php: [4] src/lib/DB.class.php: [1B] [2] src/lib/Database.class.php: [1B] src/lib/Hasher.class.php: [1B] (new file) A singleton wrapper around `ext/PasswordHash.class.php', use bcrypt while exposing fewer internals. src/lib/Login.class.php: [1B] src/lib/MessageManager.class.php: [1] src/lib/Model.class.php: [1B] (new file) A abstract class for models, so they don't have to worry about initing the DB. src/lib/PluginManager.class.php: [1B] src/lib/Singleton.class.php: [1B] (new file) An abstract class that will take care of being a singleton for you; in order to make a class a singleton, just extend Singleton. src/lib/Site.class.php: [1A] [3] (new file) src/lib/View.class.php: [4] src/models/Auth.class.php: [2] [1B] Also make getUsername safely return false if the DB isn't connected. src/models/ContactMethod: extend `Model' src/views/Template.class.php: [1B] [3] src/views/pages/no-conf.html.php: [1C] src/views/pages/plugins/index.html.php: [1B] src/views/pages/users/500.html.php: [1B]
-rw-r--r--index.php49
-rw-r--r--src/controllers/AuthPage.class.php4
-rw-r--r--src/controllers/Config.class.php2
-rw-r--r--src/controllers/Messages.class.php3
-rw-r--r--src/controllers/Plugins.class.php9
-rw-r--r--src/controllers/Users.class.php33
-rw-r--r--src/lib/Controller.class.php7
-rw-r--r--src/lib/DB.class.php16
-rw-r--r--src/lib/Database.class.php20
-rw-r--r--src/lib/Hasher.class.php18
-rw-r--r--src/lib/Login.class.php7
-rw-r--r--src/lib/MessageManager.class.php85
-rw-r--r--src/lib/Model.class.php9
-rw-r--r--src/lib/PluginManager.class.php10
-rw-r--r--src/lib/Singleton.class.php12
-rw-r--r--src/lib/Site.class.php32
-rw-r--r--src/lib/View.class.php5
-rw-r--r--src/models/Auth.class.php42
-rw-r--r--src/models/ContactMethod.class.php3
-rw-r--r--src/views/Template.class.php27
-rw-r--r--src/views/pages/no-conf.html.php8
-rw-r--r--src/views/pages/plugins/index.html.php5
-rw-r--r--src/views/pages/users/500.html.php5
23 files changed, 212 insertions, 199 deletions
diff --git a/index.php b/index.php
index ad16995..231b4d6 100644
--- a/index.php
+++ b/index.php
@@ -1,7 +1,8 @@
<?php
-// What directory are we in on the server.
+// What directory are we in on the server? /////////////////////////////////////
define('BASEPATH', dirname(__FILE__));
+// Check for xss attacks. //////////////////////////////////////////////////////
$xss_file = BASEPATH.'/xss-check.php';
if (file_exists($xss_file)) {
require($xss_file);
@@ -11,14 +12,13 @@ if (file_exists($xss_file)) {
}
}
-// Decide where to look for things
-define('LIBPATH', BASEPATH.'/src/lib'.PATH_SEPARATOR.BASEPATH.'/src/ext');
-define('MODELPATH', BASEPATH.'/src/models');
-define('VIEWPATH', BASEPATH.'/src/views');// views are not objects
-define('CONTROLLERPATH', BASEPATH.'/src/controllers');
-define('PLUGINPATH', BASEPATH.'/src/plugins');
+// Decide where to look for things. ////////////////////////////////////////////
+define('LIBPATH', BASEPATH.'/src/lib'.PATH_SEPARATOR.BASEPATH.'/src/ext');
+define('MODELPATH', BASEPATH.'/src/models');
+define('VIEWPATH', BASEPATH.'/src/views');// views are not objects
+define('CONTROLLERPATH',BASEPATH.'/src/controllers');
+define('PLUGINPATH', BASEPATH.'/src/plugins');
-// Modify our include path to catch our class files.
set_include_path(get_include_path()
.PATH_SEPARATOR.LIBPATH
.PATH_SEPARATOR.MODELPATH
@@ -26,9 +26,10 @@ set_include_path(get_include_path()
.PATH_SEPARATOR.PLUGINPATH
);
-// Figure what page is trying to be loaded. Don't worry if we're
-// looking for a real file, if the requested page exists as a real
-// file, .htaccess won't even let us load this file.
+// Figure what page is trying to be loaded. ////////////////////////////////////
+// We don't have to do any check if it's a real file being looked for, if the
+// requested page exists as a real file, .htaccess won't even let us load
+// thisfile.
@$PAGE_RAW = $_GET['p'];
$PAGE_PARTS = explode('/', $PAGE_RAW);
$FILE = array_pop($PAGE_PARTS);
@@ -45,18 +46,26 @@ if ($PAGE=='') $PAGE = 'index';
define('PAGE', $PAGE); unset($PAGE);
define('PAGE_EXT', $EXT); unset($EXT);
-// Get ready
-//require_once('Model.class.php');
+// Include base MVC classes ////////////////////////////////////////////////////
+require_once('Model.class.php');
+require_once('View.class.php');
require_once('Controller.class.php');
-require_once('Router.class.php');
-require_once('ContactMethod.class.php');
-require('conf-contacts.php');
+// Check if we have a database configuration ///////////////////////////////////
+if (file_exists($conf_file)) {
+ new Database($conf_file);
+ session_start();
+} else {
+ $view = new View('no-conf');
+ $view->show(array());
+ exit();
+}
-global $mm;
-require_once('MessageManager.class.php');
-$mm = new MessageManager(BASEPATH.'/conf.php');
+// Kludgy ugly hacky hack //////////////////////////////////////////////////////
+require_once('ContactMethod.class.php');
+require(BASEPATH.'/conf-contacts.php');
-// Actually do stuff
+// Business ////////////////////////////////////////////////////////////////////
+require_once('Router.class.php');
$router = new Router(CONTROLLERPATH);
$router->route(PAGE);
diff --git a/src/controllers/AuthPage.class.php b/src/controllers/AuthPage.class.php
index b31d938..1f46f72 100644
--- a/src/controllers/AuthPage.class.php
+++ b/src/controllers/AuthPage.class.php
@@ -1,5 +1,6 @@
<?php
require_once('Login.class.php');
+require_once('Auth.class.php');
Router::register('auth', 'AuthPage');
@@ -41,12 +42,11 @@ class AuthPage extends Controller {
$this->showView('auth/logout');
}
private function maybe_login() {
- global $mm;
$uid = Login::isLoggedIn();
if ($uid===false) {
$this->login();
} else {
- $username = $mm->database()->getUsername($uid);
+ $username = Auth::getInstance($uid)->getName();
$this->showView('auth/index',
array('username'=>$username));
}
diff --git a/src/controllers/Config.class.php b/src/controllers/Config.class.php
index 37d1f09..dc6a884 100644
--- a/src/controllers/Config.class.php
+++ b/src/controllers/Config.class.php
@@ -6,7 +6,7 @@ Router::register('config', 'Config', 'index');
class Config extends Controller {
public function index($routed, $remainder) {
$uid = Login::isLoggedIn();
- if ($uid===false || !Auth::getObj($uid)->isAdmin()) {
+ if ($uid===false || !Auth::getInstance($uid)->isAdmin()) {
$this->http401($routed, $remainder);
return;
}
diff --git a/src/controllers/Messages.class.php b/src/controllers/Messages.class.php
index d28d968..717e18e 100644
--- a/src/controllers/Messages.class.php
+++ b/src/controllers/Messages.class.php
@@ -1,5 +1,6 @@
<?php
require_once('Login.class.php');
+require_once('Auth.class.php');
Router::register('messages', 'Messages', 'index');
Router::register('messages/index', 'Messages', 'index');
@@ -41,7 +42,7 @@ class Messages extends Controller {
public function message($routed, $remainder) {
$uid = Login::isLoggedIn();
- if ($uid===false || !Auth::getObj($uid)->isUser()) {
+ if ($uid===false || !Auth::getInstance($uid)->isUser()) {
$this->http401($routed, $remainder);
return;
}
diff --git a/src/controllers/Plugins.class.php b/src/controllers/Plugins.class.php
index e2b500c..2ed6e7a 100644
--- a/src/controllers/Plugins.class.php
+++ b/src/controllers/Plugins.class.php
@@ -2,13 +2,15 @@
require_once('Login.class.php');
require_once('Plugin.class.php');
require_once('PluginManager.class.php');
+require_once('Auth.class.php');
+require_once('Database.class.php');
Router::register('plugins', 'Plugins');
class Plugins extends Controller {
public function index($routed, $remainder) {
$uid = Login::isLoggedIn();
- if ($uid===false || !Auth::getObj($uid)->isAdmin()) {
+ if ($uid===false || !Auth::getInstance($uid)->isAdmin()) {
$this->http401($routed, $remainder);
return;
}
@@ -25,8 +27,7 @@ class Plugins extends Controller {
}
private function update() {
- global $mm;
- $db = $mm->database();
+ $db = Database::getInstance();
if (isset($_POST['plugins'])) {
$string = $db->arrayToValue($_POST['plugins']);
@@ -45,7 +46,7 @@ class Plugins extends Controller {
}
private function show_index() {
- global $mm; $pm = $mm->pluginManager();
+ $pm = PluginManager::getInstance();
$all_plugins = $pm->listPlugins();
$enabled_plugins = $pm->getActivePlugins();
diff --git a/src/controllers/Users.class.php b/src/controllers/Users.class.php
index 447a70f..9978ef8 100644
--- a/src/controllers/Users.class.php
+++ b/src/controllers/Users.class.php
@@ -2,6 +2,8 @@
require_once('Login.class.php');
require_once('Auth.class.php');
require_once('DB.class.php');
+require_once('PluginManager.class.php');
+require_once('Database.class.php');
Router::register('users/new' , 'Users', 'new_user');
Router::register('users/index', 'Users', 'index_file');
@@ -73,9 +75,8 @@ class Users extends Controller {
}
if (!isset($vars['errors'])) $vars['errors'] = array();
- global $mm;
- $pm = $mm->pluginManager();
- $db = $mm->database();
+ $db = Database::getInstance();
+ $pm = PluginManager::getInstance();
$vars['antispam_html'] = $pm->callHook('antispam_html');
$vars['userlist'] = $db->getSysConf('anon_userlist');
@@ -83,9 +84,8 @@ class Users extends Controller {
}
public function individual($routed, $remainder) {
- global $mm; // also used for pluginmanager
- $db = $mm->database();
- $pm = $mm->pluginManager();
+ $db = Database::getInstance();
+ $pm = PluginManager::getInstance();
$username = implode('/', $remainder);
if ($username == 'all') {
@@ -97,7 +97,7 @@ class Users extends Controller {
$vars = array();
if (count($uids)<2) {
- $user = Auth::getObj($uid);
+ $user = Auth::getInstance($uid);
if ($user->isGroup()) $uid = false; // ignore groups.
@@ -127,7 +127,7 @@ class Users extends Controller {
$vars['users'] = array();
foreach ($uids as $uid) {
- $vars['users'][] = Auth::getObj($uid);
+ $vars['users'][] = Auth::getInstance($uid);
}
$vars['username'] = $username;
$vars['config_options'] = $config_options;
@@ -155,9 +155,8 @@ class Users extends Controller {
* explained.
*/
private function create_user() {
- global $mm;
- $db = $mm->database();
- $pm = $mm->pluginManager();
+ $db = Database::getInstance();
+ $pm = PluginManager::getInstance();
$vars = array();
@$vars['username' ] = $_POST['auth_name'];
@@ -238,8 +237,8 @@ class Users extends Controller {
// Change information //////////////////////////////////////////
$config_options = array();
- global $mm;
- $mm->pluginManager()->callHook('userConfig', &$config_options);
+ $pm = PluginManager::getInstance();
+ $pm->callHook('userConfig', &$config_options);
foreach ($config_options as $group=>$options) {
foreach ($options as $option) {
@@ -311,9 +310,9 @@ class Users extends Controller {
* This will show the user index.
*/
private function show_index($routed, $remainder) {
- global $mm; $db = $mm->database();
+ $db = Database::getInstance();
- $logged_in_user = Auth::getObj(Login::isLoggedIn());
+ $logged_in_user = Auth::getInstance(Login::isLoggedIn());
$anon_userlist = $db->getSysConf('anon_userlist')=='true';
if (!$anon_userlist && !$logged_in_user->isUser()) {
$this->http401($routed, $remainder);
@@ -339,7 +338,7 @@ class Users extends Controller {
return array('key'=>$key, 'name'=>$name, 'type'=>$type);
}
private function getIndexAttribs() {
- $user = Auth::getObj(Login::isLoggedIn());
+ $user = Auth::getInstance(Login::isLoggedIn());
$attribs = array();
$attribs[] = $this->attrib('auth_uid', 'UID');
@@ -361,7 +360,7 @@ class Users extends Controller {
}
private function registrationOpen() {
- global $mm; $db = $mm->database();
+ $db = Database::getInstance();
$val = $db->getSysConf('registration_open');
switch ($val) {
case 'true': return true;
diff --git a/src/lib/Controller.class.php b/src/lib/Controller.class.php
index f9ed59d..05736ee 100644
--- a/src/lib/Controller.class.php
+++ b/src/lib/Controller.class.php
@@ -1,18 +1,13 @@
<?php
-require_once('View.class.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) {
- global $mm;
-
if ($vars===null) { $vars = array(); }
- $vars['template'] = $mm->template();
-
+
$obj = new View($view);
$obj->show($vars);
}
diff --git a/src/lib/DB.class.php b/src/lib/DB.class.php
index 5954726..ac8dafe 100644
--- a/src/lib/DB.class.php
+++ b/src/lib/DB.class.php
@@ -1,7 +1,7 @@
<?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) {
@@ -65,8 +65,8 @@ class DB {
}
private static function user_get($uid, $key) {
- $user = Auth::getObj($uid);
- $logged_in_user = Auth::getObj(Login::isLoggedIn());
+ $user = Auth::getInstance($uid);
+ $logged_in_user = Auth::getInstance(Login::isLoggedIn());
$post_key = $key."[$uid]";
@$value = $_POST[$post_key];
@@ -103,7 +103,7 @@ class DB {
'editable'=>$editable);
}
private static function user_set($uid, $key, $value) {
- $user = Auth::getObj($uid);
+ $user = Auth::getInstance($uid);
switch ($key) {
case 'auth_uid':
@@ -127,8 +127,8 @@ class DB {
}
private static function admin_get($plugin, $key) {
- global $mm; $db = $mm->database();
- $user = Auth::getObj(Login::isLoggedIn());
+ $db = Database::getInstance();
+ $user = Auth::getInstance(Login::isLoggedIn());
if ($user->isAdmin()) {
$editable = true;
switch ($plugin) {
@@ -149,8 +149,8 @@ class DB {
'editable'=>$editable);
}
private static function admin_set($plugin, $key, $value) {
- global $mm; $db = $mm->database();
- $user = Auth::getObj(Login::isLoggedIn());
+ $db = Database::getInstance();
+ $user = Auth::getInstance(Login::isLoggedIn());
if (!$user->isAdmin()) {
return false;
}
diff --git a/src/lib/Database.class.php b/src/lib/Database.class.php
index 13d9559..1e98511 100644
--- a/src/lib/Database.class.php
+++ b/src/lib/Database.class.php
@@ -1,12 +1,19 @@
<?php
+require_once('Singleton.class.php');
+require_once('Hasher.class.php');
-class Database {
+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 /////////////////////////////////////////////
@@ -114,9 +121,8 @@ class Database {
if (!is_int($uid)) return false;
$table = $this->mysql_table('auth');
- global $mm;
- $hasher = $mm->hasher();
- @$hash = $hasher->HashPassword($password);
+ $hasher = Hasher::getInstance();
+ @$hash = $hasher->hashPassword($password);
$query =
"UPDATE $table \n".
"SET hash='$hash' \n".
@@ -130,12 +136,10 @@ class Database {
return false;
}
- global $mm;
-
$table = $this->mysql_table('auth');
$user = $this->mysql_escape($username);
- $hasher = $mm->hasher();
- @$hash = $hasher->HashPassword($password);
+ $hasher = Hasher::getInstance();
+ @$hash = $hasher->hashPassword($password);
$status = 0;
$query =
"INSERT INTO $table ( name, hash , status) \n".
diff --git a/src/lib/Hasher.class.php b/src/lib/Hasher.class.php
new file mode 100644
index 0000000..dc16d68
--- /dev/null
+++ b/src/lib/Hasher.class.php
@@ -0,0 +1,18 @@
+<?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
index 870774a..a470176 100644
--- a/src/lib/Login.class.php
+++ b/src/lib/Login.class.php
@@ -1,4 +1,6 @@
<?php
+require_once('Database.class.php');
+require_once('Hasher.class.php');
class Login {
/** Decalare an empty __construct() so that the login function doesn't
@@ -6,9 +8,8 @@ class Login {
public function __construct() {}
public static function login($username, $password) {
- global $mm;
- $db = $mm->database();
- $hasher = $mm->hasher();
+ $db = Database::getInstance();
+ $hasher = Hasher::getInstance();
$uid = $db->getUID($username);
if ($uid!==false && $db->getStatus($uid)>=3)
diff --git a/src/lib/MessageManager.class.php b/src/lib/MessageManager.class.php
deleted file mode 100644
index d327eb7..0000000
--- a/src/lib/MessageManager.class.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-
-class MessageManager {
- private $conf;
- private $base;
-
- private $users = array();
-
- private $database;
- private $pw_hasher;
- private $template;
- private $pluginManager;
-
- public function __construct($conf_file) {
- $this->conf = $conf_file;
- if (!file_exists($this->conf)) {
- $this->base = $_SERVER['REQUEST_URI'];
- $t = $this->template();
- $t->header('Message Manager');
- $t->paragraph(
- 'Awe shiz, dude, conf.php doesn\'t exist, you '.
- 'need to go through the '.
- '<a href="installer">installer</a>.');
- $t->footer();
- exit();
- }
- session_start();
- }
-
- // Load Things
-
- public function database() {
- if (!isset($this->database)) {
- require_once('Database.class.php');
- $this->database = new Database($this->conf);
- }
- return $this->database;
- }
-
- public function hasher() {
- if (!isset($this->pw_hasher)) {
- require_once('PasswordHash.class.php');
- $this->pw_hasher = new PasswordHash(8, false);
- }
- return $this->pw_hasher;
- }
-
- public function template() {
- if (!isset($this->template)) {
- require_once(VIEWPATH.'/Template.class.php');
- $this->template = new Template($this->baseUrl(), $this);
- }
- return $this->template;
- }
-
- public function pluginManager() {
- if (!isset($this->pluginManager)) {
- require_once('PluginManager.class.php');
- $this->pluginManager = new PluginManager();
- }
- return $this->pluginManager;
- }
-
- // Utility functions
-
- 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() {
- if (!isset($this->base)) {
- $this->base = $this->database()->getSysConf('baseurl');
- }
- return $this->base;
- }
-}
diff --git a/src/lib/Model.class.php b/src/lib/Model.class.php
new file mode 100644
index 0000000..14f59d4
--- /dev/null
+++ b/src/lib/Model.class.php
@@ -0,0 +1,9 @@
+<?php
+require_once('Database.class.php');
+
+abstract class Model {
+ protected $db;
+ public function __construct() {
+ $db = Database::getInstance();
+ }
+}
diff --git a/src/lib/PluginManager.class.php b/src/lib/PluginManager.class.php
index 2e3dd2b..ce5a3ef 100644
--- a/src/lib/PluginManager.class.php
+++ b/src/lib/PluginManager.class.php
@@ -1,6 +1,8 @@
<?php
+require_once('Singleton.class.php');
+require_once('Database.class.php');
-class PluginManager {
+class PluginManager extends Singleton {
public $plugins = array();
private $loaded = false;
@@ -8,7 +10,7 @@ class PluginManager {
* Return an instance of the plugin with $plugin_name
*/
public function loadPlugin($plugin_name) {
- global $mm; $db = $mm->database();
+ $db = Database::getInstance();
require_once("$plugin_name.class.php");
$obj = new $plugin_name;
@@ -53,7 +55,7 @@ class PluginManager {
* Return an array of enabled plugin names.
*/
public function getActivePlugins() {
- global $mm; $db = $mm->database();
+ $db = Database::getInstance();
$string = $db->getSysConf('plugins');
return $db->valueToArray($string);
}
@@ -62,7 +64,7 @@ class PluginManager {
* Set the enabled plugins.
*/
public function setActivePlugins($plugins) {
- global $mm; $db = $mm->database();
+ $db = Database::getInstance();
$string = $db->arrayToValue($plugins);
return $db->setSysConf('plugins', $string);
}
diff --git a/src/lib/Singleton.class.php b/src/lib/Singleton.class.php
new file mode 100644
index 0000000..4eb3bb3
--- /dev/null
+++ b/src/lib/Singleton.class.php
@@ -0,0 +1,12 @@
+<?php
+
+abstract class Singleton {
+ private static $obj;
+ public static function getInstance() {
+ if (!isset(self::$obj)) {
+ $class = get_called_class();
+ self::$obj = new $class;
+ }
+ return self::$obj;
+ }
+}
diff --git a/src/lib/Site.class.php b/src/lib/Site.class.php
new file mode 100644
index 0000000..1204089
--- /dev/null
+++ b/src/lib/Site.class.php
@@ -0,0 +1,32 @@
+<?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
index 33a9c4e..d7a21d3 100644
--- a/src/lib/View.class.php
+++ b/src/lib/View.class.php
@@ -123,7 +123,10 @@ class View {
$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);
diff --git a/src/models/Auth.class.php b/src/models/Auth.class.php
index 9017bd5..bb35be5 100644
--- a/src/models/Auth.class.php
+++ b/src/models/Auth.class.php
@@ -1,15 +1,19 @@
<?php
-require_once('MessageManager.class.php');
+require_once('Model.class.php');
require_once('Login.class.php');
+require_once('Database.class.php');
+
require_once('Group.class.php');
require_once('User.class.php');
-class Auth {
- static $users = array();
- public static function getObj($uid) {
+class Auth extends Model {
+ /**********************************************************************\
+ * Multiton stuff *
+ \**********************************************************************/
+ private static $users = array();
+ public static function getInstance($uid) {
if (!isset(self::$users[$uid])) {
- global $mm;
- $type = $mm->database()->getStatus($uid)<3;
+ $type = Database::getInstance()->getStatus($uid)<3;
switch ($type) {
case 0: // unactivated user
case 1: // user
@@ -21,7 +25,10 @@ class Auth {
}
return self::$users[$uid];
}
-
+
+ /**********************************************************************\
+ * Static stuff *
+ \**********************************************************************/
public static function isNameLegal($name) {
// Current rules:
// * Not in "$illegal_names"
@@ -34,12 +41,13 @@ class Auth {
&& (strpos($name,'!')===false)
&& (strlen($name)<256);
}
-
- protected $db = null;
+
+ /**********************************************************************\
+ * Class stuff *
+ \**********************************************************************/
protected $uid = false;
public function __construct($uid) {
- global $mm;
- $this->db = $mm->database();
+ parent::__construct();
$this->uid = $uid;
}
public function getUID() {
@@ -60,7 +68,7 @@ class Auth {
}
protected function setType($type) {
$logged_in_uid = Login::isLoggedIn();
- $logged_in_obj = Auth::getObj($logged_in_uid);
+ $logged_in_obj = Auth::getInstance($logged_in_uid);
$is_admin = $logged_in_obj->isAdmin();
if (!$is_admin) return false;
return $this->db->setStatus($this->uid, $type);
@@ -97,7 +105,7 @@ class Auth {
$logged_in_uid = Login::isLoggedIn();
$is_me = ($logged_in_uid === $this->uid);
- $logged_in_obj = Auth::getObj($logged_in_uid);
+ $logged_in_obj = Auth::getInstance($logged_in_uid);
$is_user = $logged_in_obj->isUser();
return ($is_me || $is_user);
@@ -106,7 +114,7 @@ class Auth {
$logged_in_uid = Login::isLoggedIn();
$is_me = ($logged_in_uid === $this->uid);
- $logged_in_obj = Auth::getObj($logged_in_uid);
+ $logged_in_obj = Auth::getInstance($logged_in_uid);
$is_admin = $logged_in_obj->isAdmin();
return ($is_me || $is_admin);
@@ -114,7 +122,11 @@ class Auth {
// [user|group]name ////////////////////////////////////////////////////
public function getName() {
- return $this->db->getUsername($this->uid);
+ if ($this->db===null) {
+ return false;
+ } else {
+ return $this->db->getUsername($this->uid);
+ }
}
public function setName($new_name) {
if (!$this->canEdit()) return false;
diff --git a/src/models/ContactMethod.class.php b/src/models/ContactMethod.class.php
index b01e7d3..1dd40ee 100644
--- a/src/models/ContactMethod.class.php
+++ b/src/models/ContactMethod.class.php
@@ -1,11 +1,10 @@
<?php
-
global $CONTACT_METHODS;
if (!isset($CONTACT_METHODS)) {
$CONTACT_METHODS = array();
}
-class ContactMethod {
+class ContactMethod extends Model {
public $verb_slug = ''; // sms
public $addr_slug = ''; // phone
public $verb_text = ''; // text message
diff --git a/src/views/Template.class.php b/src/views/Template.class.php
index bf57e93..9d55b75 100644
--- a/src/views/Template.class.php
+++ b/src/views/Template.class.php
@@ -1,24 +1,19 @@
<?php
+require_once('Singleton.class.php');
+require_once('Site.class.php');
-require_once('Login.class.php');
+require_once('Login.class.php');// used to see if logged in
+require_once('Auth.class.php');// used to get username if we are
-class Template {
+class Template extends Singleton {
private $indent = 0;
private $ret = false;
- private $base = '/';
- private $db = null;
-
+
public function status($status) {
header($_SERVER["SERVER_PROTOCOL"]." $status");
header("Status: $status");
}
- public function __construct($base_url, $mm=null) {
- $this->base = $base_url;
- if ($mm!==null)
- $this->db = $mm->database();
- }
-
public function setRet($ret) {
$this->ret = $ret;
}
@@ -92,7 +87,7 @@ class Template {
echo $str;
}
public function url($page) {
- return $this->base.$page;
+ return Site::getInstance()->baseUrl().$page;
}
public function row($cells) {
@@ -112,12 +107,8 @@ class Template {
echo $str;
}
public function header($title) {
- $db = $this->db;
- if ($db==null) {
- $username = false;
- } else {
- $username = $db->getUsername(Login::isLoggedIn());
- }
+ // username=false if not logged in or not connected to DB
+ $username = Auth::getInstance(Login::isLoggedIn())->getName();
$ret = $this->ret;
$this->ret = true;
diff --git a/src/views/pages/no-conf.html.php b/src/views/pages/no-conf.html.php
new file mode 100644
index 0000000..1f4e3d3
--- /dev/null
+++ b/src/views/pages/no-conf.html.php
@@ -0,0 +1,8 @@
+<?php global $VARS;
+$t = $VARS['template'];
+
+$t->header('Message Manager');
+$t->paragraph('Awe shiz, dude, conf.php doesn\'t exist, you '.
+ 'need to go through the '.
+ '<a href="installer">installer</a>.');
+$t->footer();
diff --git a/src/views/pages/plugins/index.html.php b/src/views/pages/plugins/index.html.php
index 1f89344..b182288 100644
--- a/src/views/pages/plugins/index.html.php
+++ b/src/views/pages/plugins/index.html.php
@@ -1,7 +1,8 @@
-<?php global $VARS, $mm;
+<?php global $VARS;
+require_once('Database.class.php');
$t = $VARS['template'];
$plugins = $VARS['plugins'];
-$db = $mm->database();
+$db = Database::getInstance();
$t->header('Administrator Plugin Management');
$t->openTag('form',array('method'=>'post','action'=>$t->url('plugins')));
diff --git a/src/views/pages/users/500.html.php b/src/views/pages/users/500.html.php
index f4f1c42..339fe63 100644
--- a/src/views/pages/users/500.html.php
+++ b/src/views/pages/users/500.html.php
@@ -1,6 +1,7 @@
-<?php global $VARS, $mm;
+<?php global $VARS;
+require_once('Database.class.php');
$t = $VARS['template'];
-$db = $mm->database();
+$db = Database::getInstance();
$t->status('500 Internal Server Error');
$t->header('Unknown error');