]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Host multiple sites with the same codebase
authorEvan Prodromou <evan@controlyourself.ca>
Tue, 7 Apr 2009 21:10:54 +0000 (17:10 -0400)
committerEvan Prodromou <evan@controlyourself.ca>
Tue, 7 Apr 2009 21:10:54 +0000 (17:10 -0400)
This is the beginning of the code for status.net and related status
farms. It will read basic information about a site from a shared,
central database and use the data stored there to switch on the
hostname.

classes/Status_network.php [new file with mode: 0755]
classes/statusnet.ini [new file with mode: 0755]
config.php.sample
db/site.sql [new file with mode: 0644]

diff --git a/classes/Status_network.php b/classes/Status_network.php
new file mode 100755 (executable)
index 0000000..f7747f7
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Table Definition for status_network
+ */
+
+class Status_network extends DB_DataObject
+{
+    ###START_AUTOCODE
+    /* the code below is auto generated do not remove the above tag */
+
+    public $__table = 'status_network';                  // table name
+    public $nickname;                        // varchar(64)  primary_key not_null
+    public $hostname;                        // varchar(255)  unique_key
+    public $pathname;                        // varchar(255)  unique_key
+    public $sitename;                        // varchar(255)
+    public $dbhost;                          // varchar(255)
+    public $dbuser;                          // varchar(255)
+    public $dbpass;                          // varchar(255)
+    public $dbname;                          // varchar(255)
+    public $created;                         // datetime()   not_null
+    public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
+
+    /* Static get */
+    function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Status_network',$k,$v); }
+
+    /* the code above is auto generated do not remove the tag below */
+    ###END_AUTOCODE
+
+    static function setupDB($dbhost, $dbuser, $dbpass, $dbname)
+    {
+        global $config;
+
+        $config['db']['database_'.$dbname] = "mysqli://$dbuser:$dbpass@$dbhost/$dbname";
+        $config['db']['ini_'.$dbname] = INSTALLDIR.'/classes/statusnet.ini';
+        $config['db']['table_status_network'] = $dbname;
+
+        return true;
+    }
+
+    static function setupSite($servername, $pathname)
+    {
+        global $config;
+
+        $parts = explode('.', $servername);
+
+        $sn = Status_network::staticGet('nickname', $parts[0]);
+
+        if (!empty($sn)) {
+            $dbhost = (empty($sn->dbhost)) ? 'localhost' : $sn->dbhost;
+            $dbuser = (empty($sn->dbuser)) ? $sn->nickname : $sn->dbuser;
+            $dbpass = $sn->dbpass;
+            $dbname = (empty($sn->dbname)) ? $sn->nickname : $sn->dbname;
+
+            $config['db']['database'] = "mysqli://$dbuser:$dbpass@$dbhost/$dbname";
+            $config['site']['name'] = $sn->sitename;
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
diff --git a/classes/statusnet.ini b/classes/statusnet.ini
new file mode 100755 (executable)
index 0000000..a70cd41
--- /dev/null
@@ -0,0 +1,17 @@
+
+[status_network]
+nickname = 130
+hostname = 2
+pathname = 2
+sitename = 2
+dbhost = 2
+dbuser = 2
+dbpass = 2
+dbname = 2
+created = 142
+modified = 384
+
+[status_network__keys]
+nickname = K
+hostname = U
+pathname = U
index 59e0cc712606c7489c1174a942fcbdfc78c8b773..eec2bb2c5db03cc05863da941c6bbe2528b1229c 100644 (file)
@@ -192,3 +192,11 @@ $config['sphinx']['port'] = 3312;
 
 #Use a different hostname for SSL-encrypted pages
 #$config['site']['sslserver'] = 'secure.example.org';
+
+#If you have a lot of status networks on the same server, you can
+#store the site data in a database and switch as follows
+#Status_network::setupDB('localhost', 'statusnet', 'statuspass', 'statusnet');
+#if (!Status_network::setupSite($_server, $_path)) {
+#        print "Error\n";
+#        exit(1);
+#}
diff --git a/db/site.sql b/db/site.sql
new file mode 100644 (file)
index 0000000..660ba47
--- /dev/null
@@ -0,0 +1,17 @@
+/* For managing multiple sites */
+
+create table status_network (
+
+    nickname varchar(64) primary key comment 'nickname',
+    hostname varchar(255) unique key comment 'alternate hostname if any',
+    pathname varchar(255) unique key comment 'alternate pathname if any',
+    sitename varchar(255) comment 'display name',
+    dbhost varchar(255) comment 'database host',
+    dbuser varchar(255) comment 'database username',
+    dbpass varchar(255) comment 'database password',
+    dbname varchar(255) comment 'database name',
+
+    created datetime not null comment 'date this record was created',
+    modified timestamp comment 'date this record was modified'
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;