*\r
* @license http://nucleuscms.org/license.txt GNU General Public License\r
* @copyright Copyright (C) 2002-2009 The Nucleus Group\r
- * @version $Id: MANAGER.php 1731 2012-04-08 15:10:35Z sakamocchi $\r
+ * @version $Id: MANAGER.php 1878 2012-06-17 07:42:07Z sakamocchi $\r
*/\r
class Manager\r
{\r
* The $items, $blogs, ... arrays map an id to an object (for plugins, the name is used\r
* rather than an ID)\r
*/\r
- var $items;\r
- var $blogs;\r
- var $plugins;\r
- var $karma;\r
- var $templates;\r
- var $members;\r
+ private $items;\r
+ private $blogs;\r
+ private $plugins;\r
+ private $karma;\r
+ private $templates;\r
+ private $members;\r
+ private $skins;\r
\r
/**\r
* cachedInfo to avoid repeated SQL queries (see pidInstalled/pluginInstalled/getPidFromName)\r
* $manager =& Manager::instance(); to get a reference to the object\r
* instead of a copy\r
*/\r
- public function &instance()\r
+ public static function &instance()\r
{\r
static $instance = array();\r
if ( empty($instance) )\r
$this->blogs = array();\r
$this->plugins = array();\r
$this->karma = array();\r
+ $this->templates = array();\r
+ $this->skins = array();\r
$this->parserPrefs = array();\r
$this->cachedInfo = array();\r
+ $this->members = array();\r
return;\r
}\r
\r
/**\r
* Returns the requested item object. If it is not in the cache, it will\r
* first be loaded and then placed in the cache.\r
- * Intended use: $item =& $manager->getItem(1234)\r
+ * Intended use: $item =& $manager->getItem(1234, 0, 0)\r
*/\r
public function &getItem($itemid, $allowdraft, $allowfuture)\r
{\r
- $item =& $this->items[$itemid];\r
+ /* confirm to cached */\r
+ if ( !array_key_exists($itemid, $this->items) )\r
+ {\r
+ $this->loadClass('ITEM');\r
+ $item = Item::getitem($itemid, $allowdraft, $allowfuture);\r
+ $this->items[$itemid] = $item;\r
+ }\r
\r
- // check the draft and future rules if the item was already cached\r
- if ( $item )\r
+ $item =& $this->items[$itemid];\r
+ if ( !$allowdraft && ($item['draft']) )\r
{\r
- if ( (!$allowdraft) && ($item['draft']) )\r
- {\r
- return 0;\r
- }\r
- \r
- $blog =& $this->getBlog(getBlogIDFromItemID($itemid));\r
- \r
- if ( (!$allowfuture) && ($item['timestamp'] > $blog->getCorrectTime()) )\r
- {\r
- return 0;\r
- }\r
+ return 0;\r
}\r
\r
- if ( !$item )\r
+ $blog =& $this->getBlog($item['blogid']);\r
+ if ( !$allowfuture && ($item['timestamp'] > $blog->getCorrectTime()) )\r
{\r
- // load class if needed\r
- $this->loadClass('ITEM');\r
- // load item object\r
- $item = Item::getitem($itemid, $allowdraft, $allowfuture);\r
- $this->items[$itemid] = $item;\r
+ return 0;\r
}\r
+ \r
return $item;\r
}\r
\r
*/\r
public function existsCategory($id)\r
{\r
- return (quickQuery('SELECT COUNT(*) as result FROM '.sql_table('category').' WHERE catid='.intval($id)) > 0);\r
+ return (DB::getValue('SELECT COUNT(*) as result FROM '.sql_table('category').' WHERE catid='.intval($id)) > 0);\r
}\r
\r
/**\r
*/\r
public function &getBlog($blogid)\r
{\r
- $blog =& $this->blogs[$blogid];\r
- \r
- if ( !$blog )\r
+ if ( !array_key_exists($blogid, $this->blogs) )\r
{\r
- // load class if needed\r
$this->_loadClass('BLOG','BLOG.php');\r
- // load blog object\r
- $blog = new Blog($blogid);\r
- $this->blogs[$blogid] =& $blog;\r
+ $this->blogs[$blogid] = new Blog($blogid);\r
}\r
- return $blog;\r
+ return $this->blogs[$blogid];\r
}\r
\r
/**\r
*/\r
public function &getTemplate($templateName)\r
{\r
- $template =& $this->templates[$templateName];\r
- \r
- if ( !$template )\r
+ if ( !array_key_exists($templateName, $this->templates) )\r
{\r
- $template = Template::read($templateName);\r
- $this->templates[$templateName] =& $template;\r
+ $this->_loadClass('Template','TEMPLATE.php');\r
+ $this->templates[$templateName] =& Template::read($templateName);\r
}\r
- return $template;\r
+ return $this->templates[$templateName];\r
}\r
\r
/**\r
*/\r
public function &getKarma($itemid)\r
{\r
- $karma =& $this->karma[$itemid];\r
- \r
- if ( !$karma )\r
+ if ( !array_key_exists($itemid, $this->karma) )\r
{\r
- // load class if needed\r
- $this->_loadClass('KARMA','KARMA.php');\r
- // create KARMA object\r
- $karma = new Karma($itemid);\r
- $this->karma[$itemid] =& $karma;\r
+ $this->_loadClass('Karma','KARMA.php');\r
+ $this->karma[$itemid] = new Karma($itemid);\r
}\r
- return $karma;\r
+ return $this->karma[$itemid];\r
}\r
\r
/**\r
*/\r
public function &getMember($memberid)\r
{\r
- $mem =& $this->members[$memberid];\r
- \r
- if ( !$mem )\r
+ if ( !array_key_exists($memberid, $this->members) )\r
{\r
- // load class if needed\r
- $this->_loadClass('MEMBER','MEMBER.php');\r
- // create MEMBER object\r
- $mem =& Member::createFromID($memberid);\r
- $this->members[$memberid] =& $mem;\r
+ $this->_loadClass('Member','MEMBER.php');\r
+ $this->members[$memberid] =& Member::createFromID($memberid);;\r
}\r
- return $mem;\r
+ return $this->members[$memberid];\r
+ }\r
+ \r
+ /**\r
+ * Manager::getSkin()\r
+ * \r
+ * @param integer $skinid ID for skin\r
+ * @param string $action_class action class for handling skin variables\r
+ * @param string $event_identifier identifier for event name\r
+ * @return object instance of Skin class\r
+ */\r
+ public function &getSkin($skinid, $action_class='Actions', $event_identifier='Skin')\r
+ {\r
+ if ( !array_key_exists($skinid, $this->skins) )\r
+ {\r
+ $this->_loadClass('Skin', 'SKIN.php');\r
+ $this->skins[$skinid] = new Skin($skinid, $action_class, $event_identifier);\r
+ }\r
+ \r
+ return $this->skins[$skinid];\r
}\r
\r
/**\r
*/\r
private function _loadClass($name, $filename)\r
{\r
+ global $DIR_LIBS;\r
+ \r
if ( !class_exists($name) )\r
{\r
- global $DIR_LIBS;\r
- include($DIR_LIBS . $filename);\r
+ include($DIR_LIBS . $filename);\r
}\r
return;\r
}\r
}\r
\r
/**\r
+ * Manager::getPluginNameFromPid()\r
+ * \r
+ * @param string $pid ID for plugin\r
+ * @return string name of plugin\r
+ */\r
+ public function getPluginNameFromPid($pid)\r
+ {\r
+ if ( !array_key_exists($pid, $this->cachedInfo['installedPlugins']) )\r
+ {\r
+ $query = 'SELECT pfile FROM %s WHERE pid=%d;';\r
+ $query = sprintf($query, sql_table('plugin'), (integer) $pid);\r
+ return DB::getValue($query);\r
+ }\r
+ return $this->cachedInfo['installedPlugins'][$pid];\r
+ }\r
+ \r
+ /**\r
* Manager::getUpperCaseName()\r
* Retrieve the name of a plugin in the right capitalisation\r
* \r
// 'installedPlugins' = array ($pid => $name)\r
case 'installedPlugins':\r
$this->cachedInfo['installedPlugins'] = array();\r
- $res = sql_query('SELECT pid, pfile FROM ' . sql_table('plugin'));\r
- while ( $o = sql_fetch_object($res) )\r
+ $res = DB::getResult('SELECT pid, pfile FROM ' . sql_table('plugin'));\r
+ foreach ( $res as $row )\r
{\r
- $this->cachedInfo['installedPlugins'][$o->pid] = $o->pfile;\r
+ $this->cachedInfo['installedPlugins'][$row['pid']] = $row['pfile'];\r
}\r
break;\r
}\r
&& !empty($this->plugins[$listener])\r
&& method_exists($this->plugins[$listener], 'event_' . $eventName) )\r
{\r
- call_user_func(array(&$this->plugins[$listener],'event_' . $eventName), $data);\r
+ call_user_func(array(&$this->plugins[$listener], 'event_' . $eventName), array(&$data));\r
}\r
}\r
}\r
. " FROM %s as e, %s as p"\r
. " WHERE e.pid=p.pid ORDER BY p.porder ASC";\r
$query = sprintf($query, sql_table('plugin_event'), sql_table('plugin'));\r
- $res = sql_query($query);\r
+ $res = DB::getResult($query);\r
\r
- while ( $o = sql_fetch_object($res) )\r
+ foreach ( $res as $row )\r
{\r
- $pluginName = $o->pfile;\r
- $eventName = $o->event;\r
+ $pluginName = $row['pfile'];\r
+ $eventName = $row['event'];\r
$this->subscriptions[$eventName][] = $pluginName;\r
}\r
return;\r
}\r
\r
/**\r
+ * Manager::getNumberOfSubscribers()\r
+ * \r
+ * @param string $event name of events\r
+ * @return integer number of event subscriber\r
+ */\r
+ public function getNumberOfSubscribers($event)\r
+ {\r
+ $query = 'SELECT COUNT(*) as count FROM %s WHERE event=%s;';\r
+ $query = sprintf($query, sql_table('plugin_event'), DB::quoteValue($event));\r
+ return (integer) DB::getValue($query);\r
+ }\r
+ \r
+ /**\r
* Manager::addTicketToUrl()\r
* GET requests: Adds ticket to URL (URL should NOT be html-encoded!, ticket is added at the end)\r
* \r
public function addTicketToUrl($url)\r
{\r
$ticketCode = 'ticket=' . $this->_generateTicket();\r
- if ( strstr($url, '?') )\r
+ if ( i18n::strpos($url, '?') === FALSE )\r
{\r
- $ticketCode = "{$url}&{$ticketCode}";\r
+ $ticketCode = "{$url}?{$ticketCode}";\r
}\r
else\r
{\r
- $ticketCode = "{$url}?{$ticketCode}";\r
+ $ticketCode = "{$url}&{$ticketCode}";\r
}\r
return $ticketCode;\r
}\r
}\r
\r
// check if ticket is a valid one\r
- $query = 'SELECT COUNT(*) as result FROM ' . sql_table('tickets') . ' WHERE member=' . intval($memberId). ' and ticket=\''.sql_real_escape_string($ticket).'\'';\r
+ $query = sprintf('SELECT COUNT(*) as result FROM %s WHERE member=%d and ticket=%s',\r
+ sql_table('tickets'),\r
+ intval($memberId),\r
+ DB::quoteValue($ticket)\r
+ );\r
\r
/*\r
* NOTE:\r
* leaving the keys in the database is not a real problem, since they're member-specific and\r
* only valid for a period of one hour]\r
*/\r
- if ( quickQuery($query) != 1 )\r
+ if ( DB::getValue($query) != 1 )\r
{\r
return FALSE;\r
}\r
{\r
// remove tickets older than 1 hour\r
$oldTime = time() - 60 * 60;\r
- $query = "DELETE FROM %s WHERE ctime < '%s';";\r
- $query = sprintf($query, sql_table('tickets'), date('Y-m-d H:i:s',$oldTime));\r
- sql_query($query);\r
+ $query = 'DELETE FROM %s WHERE ctime < %s';\r
+ $query = sprintf($query, sql_table('tickets'), DB::formatDateTime($oldTime));\r
+ DB::execute($query);\r
return;\r
}\r
\r
$ticket = md5(uniqid(rand(), true));\r
\r
// add in database as non-active\r
- $query = "INSERT INTO %s (ticket, member, ctime)"\r
- . " VALUES ('%s', %d, '%d');";\r
- $query = sprintf($query, sql_table('tickets'), sql_real_escape_string($ticket), (integer) $memberId, date('Y-m-d H:i:s',time()));\r
+ $query = 'INSERT INTO %s (ticket, member, ctime) VALUES (%s, %d, %s)';\r
+ $query = sprintf($query, sql_table('tickets'), DB::quoteValue($ticket), (integer) $memberId, DB::formatDateTime());\r
\r
- if ( sql_query($query) )\r
+ if ( DB::execute($query) !== FALSE )\r
{\r
$ok = true;\r
}\r