aboutsummaryrefslogtreecommitdiff
path: root/src/SemanticScuttle/Service/Factory.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/SemanticScuttle/Service/Factory.php')
-rw-r--r--src/SemanticScuttle/Service/Factory.php154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/SemanticScuttle/Service/Factory.php b/src/SemanticScuttle/Service/Factory.php
new file mode 100644
index 0000000..b661cdb
--- /dev/null
+++ b/src/SemanticScuttle/Service/Factory.php
@@ -0,0 +1,154 @@
+<?php
+/**
+ * SemanticScuttle - your social bookmark manager.
+ *
+ * PHP version 5.
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
+ * @author Christian Weiske <cweiske@cweiske.de>
+ * @author Eric Dane <ericdane@users.sourceforge.net>
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+
+/**
+ * Connect to the database and build services.
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
+ * @author Christian Weiske <cweiske@cweiske.de>
+ * @author Eric Dane <ericdane@users.sourceforge.net>
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+class SemanticScuttle_Service_Factory
+{
+ /**
+ * Array of service instances.
+ * Key is service name (i.e. "Bookmark")
+ *
+ * @var array
+ */
+ protected static $instances = array();
+
+ /**
+ * Database connection
+ *
+ * @var sql_qb
+ */
+ protected static $db = null;
+
+ /**
+ * Array of service names -> new service class
+ * in case you want to overwrite the services.
+ *
+ * Key is the old service name (i.e. "Bookmark"),
+ * value the new class name, e.g.
+ * "My_Cool_Own_BookmarkService"
+ *
+ * @var array
+ */
+ public static $serviceoverrides = array();
+
+
+
+ /**
+ * Returns the service for the given name.
+ *
+ * @param string $name Service name (i.e. "Bookmark")
+ *
+ * @return SemanticScuttle_Service Service object
+ */
+ public static function get($name)
+ {
+ self::loadDb();
+ self::loadService($name);
+ return self::$instances[$name];
+ }
+
+
+
+ /**
+ * Loads service with the given name into
+ * self::$instances[$name].
+ *
+ * @param string $name Service name (i.e. 'Bookmark')
+ *
+ * @return void
+ */
+ protected static function loadService($name)
+ {
+ if (isset(self::$instances[$name])) {
+ return;
+ }
+
+ if (isset(self::$serviceoverrides[$name])) {
+ $class = self::$serviceoverrides[$name];
+ } else {
+ $class = 'SemanticScuttle_Service_' . $name;
+ }
+
+ if (!class_exists($class)) {
+ //PEAR classname to filename rule
+ $file = str_replace('_', '/', $class) . '.php';
+ include_once $file;
+ }
+
+ self::$instances[$name] = call_user_func(
+ array($class, 'getInstance'),
+ self::$db
+ );
+ }
+
+
+
+ /**
+ * Loads self::$db if it is not loaded already.
+ * Dies if the connection could not be established.
+ *
+ * @return void
+ */
+ protected static function loadDb()
+ {
+ global $dbhost, $dbuser, $dbpass, $dbname,
+ $dbport, $dbpersist, $dbtype, $dbneedssetnames;
+
+ if (self::$db !== null) {
+ return;
+ }
+ include_once 'SemanticScuttle/db/'. $dbtype .'.php';
+ $db = new sql_db();
+ $db->sql_connect(
+ $dbhost, $dbuser, $dbpass, $dbname, $dbport, $dbpersist
+ );
+ if (!$db->db_connect_id) {
+ message_die(
+ CRITICAL_ERROR,
+ 'Could not connect to the database',
+ self::$db
+ );
+ }
+
+ $dbneedssetnames && $db->sql_query('SET NAMES UTF8');
+
+ self::$db = $db;
+ }
+
+
+
+ /**
+ * Returns sql database object
+ *
+ * @return sql_db Database instance
+ */
+ public static function getDb()
+ {
+ self::loadDb();
+ return self::$db;
+ }
+
+}
+?>