]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch 'master' into testing
authorBrion Vibber <brion@pobox.com>
Wed, 28 Jul 2010 18:56:55 +0000 (11:56 -0700)
committerBrion Vibber <brion@pobox.com>
Wed, 28 Jul 2010 18:56:55 +0000 (11:56 -0700)
classes/Status_network.php
classes/Status_network_tag.php [new file with mode: 0644]
classes/status_network.ini
db/site.sql
db/site_093to094.sql [new file with mode: 0644]
scripts/fixup_status_network.php [new file with mode: 0644]
scripts/settag.php
scripts/setup_status_network.sh

index 64016dd790c06233587ab8b80a651571fe75d80a..a0f3ba5f785525f7435237f7353898c2b20ed5ff 100644 (file)
@@ -27,7 +27,8 @@ class Status_network extends Safe_DataObject
     /* 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 $site_id;                         // int(4) primary_key not_null
+    public $nickname;                        // varchar(64)   unique_key not_null
     public $hostname;                        // varchar(255)  unique_key
     public $pathname;                        // varchar(255)  unique_key
     public $dbhost;                          // varchar(255)
@@ -39,7 +40,6 @@ class Status_network extends Safe_DataObject
     public $logo;                            // varchar(255)
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
-    public $tags;                            // text
 
     /* Static get */
     function staticGet($k,$v=NULL) {
@@ -308,9 +308,62 @@ class Status_network extends Safe_DataObject
      */
     function getTags()
     {
-        return array_filter(explode("|", strval($this->tags)));
+        $result = array();
+        
+        $tags = new Status_network_tag();
+        $tags->site_id = $this->site_id;
+        if ($tags->find()) {
+            while ($tags->fetch()) {
+                $result[] = $tags->tag;
+            }
+        }
+
+        // XXX : for backwards compatibility
+        if (empty($result)) {
+            return explode('|', $this->tags);
+        }
+        
+        return $result;
     }
 
+    /**
+     * Save a given set of tags
+     * @param array tags
+     */
+    function setTags($tags)
+    {
+        $this->clearTags();
+        foreach ($tags as $tag) {
+            if (!empty($tag)) {
+                $snt = new Status_network_tag();
+                $snt->site_id = $this->site_id;
+                $snt->tag = $tag;
+                $snt->created = common_sql_now();
+                
+                $id = $snt->insert();
+                if (!$id) {
+                    throw new Exception(_("Unable to save tag."));
+                }
+            }
+        }
+
+        return true;
+    }
+
+    function clearTags()
+    {
+        $tag = new Status_network_tag();
+        $tag->site_id = $this->site_id;
+
+        if ($tag->find()) {
+            while($tag->fetch()) {
+                $tag->delete();
+            }
+        }
+
+        $tag->free();
+    }
+    
     /**
      * Check if this site record has a particular meta-info tag attached.
      * @param string $tag
diff --git a/classes/Status_network_tag.php b/classes/Status_network_tag.php
new file mode 100644 (file)
index 0000000..18c508b
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, 2010 StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('STATUSNET')) { exit(1); }
+
+class Status_network_tag extends Safe_DataObject
+{
+    ###START_AUTOCODE
+    /* the code below is auto generated do not remove the above tag */
+
+    public $__table = 'status_network_tag';                      // table name
+    public $site_id;                  // int(4)  primary_key not_null
+    public $tag;                      // varchar(64)  primary_key not_null 
+    public $created;                 // datetime()   not_null
+
+
+    function __construct()
+    {
+        global $config;
+        global $_DB_DATAOBJECT;
+        
+        $sn = new Status_network();
+        $sn->_connect();
+
+        $config['db']['table_'. $this->__table] = $sn->_database;
+
+        $this->_connect();
+    }
+
+
+    /* Static get */
+    function staticGet($k,$v=null)
+    {
+        $i = DB_DataObject::staticGet('Status_network_tag',$k,$v);
+
+        // Don't use local process cache; if we're fetching multiple
+        // times it's because we're reloading it in a long-running
+        // process; we need a fresh copy!
+        global $_DB_DATAOBJECT;
+        unset($_DB_DATAOBJECT['CACHE']['status_network_tag']);
+        return $i;
+    }
+
+    /* the code above is auto generated do not remove the tag below */
+    ###END_AUTOCODE
+
+
+
+    function pkeyGet($kv)
+    {
+        return Memcached_DataObject::pkeyGet('Status_network_tag', $kv);
+    }
+}
index adb71cba77ad1c06d850614583ddff2dcd726f47..83226e91598d2435b882545d8994a3aa8930c5b0 100644 (file)
@@ -1,4 +1,5 @@
 [status_network]
+side_id = 129
 nickname = 130
 hostname = 2
 pathname = 2
@@ -11,9 +12,19 @@ theme = 2
 logo = 2
 created = 142
 modified = 384
-tags = 34
 
 [status_network__keys]
-nickname = K
+site_id  = K
+nickname = U
 hostname = U
 pathname = U
+
+[status_network_tag]
+site_id = 129
+tag = 130
+created = 142
+
+[status_network_tag__keys]
+site_id = K
+tag = K
+
index 791303bd540885857f0f2baef805994684b8261a..f87995b94362c0f7ecb596475f48e0a0649329ea 100644 (file)
@@ -1,8 +1,9 @@
 /* For managing multiple sites */
 
 create table status_network (
-
-    nickname varchar(64) primary key comment 'nickname',
+       
+    site_id  integer auto_increment primary key comment 'unique id',
+    nickname varchar(64)  unique key comment 'nickname',
     hostname varchar(255) unique key comment 'alternate hostname if any',
     pathname varchar(255) unique key comment 'alternate pathname if any',
 
@@ -21,3 +22,12 @@ create table status_network (
     modified timestamp comment 'date this record was modified'
 
 ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
+
+create table status_network_tag (
+    site_id integer  comment 'unique id',
+    tag varchar(64) comment 'tag name',
+    created datetime not null comment 'date the record was created',
+
+    constraint primary key (site_id, tag)
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
+
diff --git a/db/site_093to094.sql b/db/site_093to094.sql
new file mode 100644 (file)
index 0000000..30cea31
--- /dev/null
@@ -0,0 +1,13 @@
+alter table status_network 
+      drop primary key,
+      add column site_id integer auto_increment primary key first,
+      add unique key (nickname);
+
+create table status_network_tag (
+    site_id integer  comment 'unique id',
+    tag varchar(64) comment 'tag name',
+    created datetime not null comment 'date the record was created',
+
+    constraint primary key (site_id, tag)
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
+
diff --git a/scripts/fixup_status_network.php b/scripts/fixup_status_network.php
new file mode 100644 (file)
index 0000000..def1eaa
--- /dev/null
@@ -0,0 +1,37 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+common_log(LOG_INFO, 'Beginning status_network conversion...');
+
+$sn = new Status_network();
+$sn->find();
+while ($sn->fetch()) {
+    try {
+        $sn->setTags(explode('|', $sn->tags));
+    } catch (Exception $e) {
+        common_log(LOG_ERR, $e->getMessage());
+    }
+}
+
+common_log(LOG_INFO, 'Completed status_network conversion...');
index d1b06ff10082373c46ca084138b74d10e8b24c10..ca260f7bf9456822fb42139299fe545960b1cae7 100644 (file)
@@ -39,11 +39,10 @@ if (count($args) < 1) {
 }
 
 $nickname = $args[0];
-
 $sn = Status_network::memGet('nickname', $nickname);
 
 if (empty($sn)) {
-    print "No such site.\n";
+    print "No such site ($nickname).\n";
     exit(-1);
 }
 
@@ -54,16 +53,13 @@ if (count($args) == 1) {
        exit(0);
 }
 $tag = $args[1];
-
 $i = array_search($tag, $tags);
 
 if ($i !== false) {
     if (have_option('d', 'delete')) { // Delete
         unset($tags[$i]);
 
-        $orig = clone($sn);
-        $sn->tags = implode('|', $tags);
-        $result = $sn->update($orig);
+        $result = $sn->setTags($tags);
         if (!$result) {
             print "Couldn't update.\n";
             exit(-1);
@@ -78,9 +74,7 @@ if ($i !== false) {
         exit(-1);
     } else {
         $tags[] = $tag;
-        $orig = clone($sn);
-        $sn->tags = implode('|', $tags);
-        $result = $sn->update($orig);
+        $result = $sn->setTags($tags);
         if (!$result) {
             print "Couldn't update.\n";
             exit(-1);
index 4ebb696c710c79e97770583ed2ea16b5c59e598e..3dd7390303f867b6715f81a368230277f756cd87 100755 (executable)
@@ -44,8 +44,8 @@ mysql -h $DBHOST -u $ADMIN --password=$ADMINPASS $SITEDB << ENDOFCOMMANDS
 
 GRANT ALL ON $database.* TO '$username'@'localhost' IDENTIFIED BY '$password';
 GRANT ALL ON $database.* TO '$username'@'%' IDENTIFIED BY '$password';
-INSERT INTO status_network (nickname, dbhost, dbuser, dbpass, dbname, sitename, created, tags)
-VALUES ('$nickname', '$DBHOSTNAME', '$username', '$password', '$database', '$sitename', now(), '$tags');
+INSERT INTO status_network (nickname, dbhost, dbuser, dbpass, dbname, sitename, created)
+VALUES ('$nickname', '$DBHOSTNAME', '$username', '$password', '$database', '$sitename', now());
 
 ENDOFCOMMANDS
 
@@ -56,6 +56,8 @@ done
 
 php $PHPBASE/scripts/checkschema.php -s"$server"
 
+php $PHPBASE/scripts/settag.php -s"$server" "$nickname" "$tags"
+
 php $PHPBASE/scripts/registeruser.php \
   -s"$server" \
   -n"$nickname" \