summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@controlyourself.ca>2009-04-07 17:10:54 -0400
committerEvan Prodromou <evan@controlyourself.ca>2009-04-07 17:10:54 -0400
commit60861760fc3bdc1cdea407e8ee21eb8c54e77b8f (patch)
tree2bd269851136ae88494e09c10b774ae3c58aa690
parent95bb1c6a99766d065ffcde9523de05d8a1162c3d (diff)
Host multiple sites with the same codebase
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.
-rwxr-xr-xclasses/Status_network.php61
-rwxr-xr-xclasses/statusnet.ini17
-rw-r--r--config.php.sample8
-rw-r--r--db/site.sql17
4 files changed, 103 insertions, 0 deletions
diff --git a/classes/Status_network.php b/classes/Status_network.php
new file mode 100755
index 000000000..f7747f71d
--- /dev/null
+++ b/classes/Status_network.php
@@ -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
index 000000000..a70cd4122
--- /dev/null
+++ b/classes/statusnet.ini
@@ -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
diff --git a/config.php.sample b/config.php.sample
index 59e0cc712..eec2bb2c5 100644
--- a/config.php.sample
+++ b/config.php.sample
@@ -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
index 000000000..660ba475b
--- /dev/null
+++ b/db/site.sql
@@ -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;