]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch 'doc-src' into 'nightly'
authormmn <mmn@hethane.se>
Sat, 6 Jun 2015 20:27:00 +0000 (20:27 +0000)
committermmn <mmn@hethane.se>
Sat, 6 Jun 2015 20:27:00 +0000 (20:27 +0000)
Small updates to doc-src files

* Remove mentions of GTalk since it's been replaced by Hangouts which doesn't do XMPP
* Update URLS, use HTTPS where possible

See merge request !11

130 files changed:
actions/apiconversation.php
actions/conversation.php
classes/File.php
classes/GS_DataObject.php [new file with mode: 0644]
classes/Managed_DataObject.php
classes/Memcached_DataObject.php
classes/Notice.php
classes/Safe_DataObject.php
classes/Status_network_tag.php
extlib/DB/DataObject.php
lib/action.php
lib/apioauthaction.php
lib/clienterroraction.php
lib/fullthreadednoticelist.php
lib/plugin.php
lib/servererroraction.php
plugins/AccountManager/AccountManagerPlugin.php
plugins/Activity/ActivityPlugin.php
plugins/ActivitySpam/ActivitySpamPlugin.php
plugins/ActivityVerb/ActivityVerbPlugin.php
plugins/AnonymousFave/AnonymousFavePlugin.php
plugins/AntiBrute/AntiBrutePlugin.php
plugins/ApiLogger/ApiLoggerPlugin.php
plugins/AuthCrypt/AuthCryptPlugin.php
plugins/AutoSandbox/AutoSandboxPlugin.php
plugins/Autocomplete/AutocompletePlugin.php
plugins/Awesomeness/AwesomenessPlugin.php
plugins/BitlyUrl/BitlyUrlPlugin.php
plugins/Blacklist/BlacklistPlugin.php
plugins/BlankAd/BlankAdPlugin.php
plugins/BlogspamNet/BlogspamNetPlugin.php
plugins/Bookmark/BookmarkPlugin.php
plugins/CacheLog/CacheLogPlugin.php
plugins/CasAuthentication/CasAuthenticationPlugin.php
plugins/ClientSideShorten/ClientSideShortenPlugin.php
plugins/Comet/CometPlugin.php
plugins/Cronish/CronishPlugin.php
plugins/DefaultLayout/DefaultLayoutPlugin.php
plugins/Diaspora/DiasporaPlugin.php [new file with mode: 0644]
plugins/DirectionDetector/DirectionDetectorPlugin.php
plugins/Directory/DirectoryPlugin.php
plugins/DiskCache/DiskCachePlugin.php
plugins/DomainStatusNetwork/DomainStatusNetworkPlugin.php
plugins/DomainWhitelist/DomainWhitelistPlugin.php
plugins/EmailAuthentication/EmailAuthenticationPlugin.php
plugins/EmailRegistration/EmailRegistrationPlugin.php
plugins/EmailReminder/EmailReminderPlugin.php
plugins/EmailSummary/EmailSummaryPlugin.php
plugins/Event/EventPlugin.php
plugins/ExtendedProfile/ExtendedProfilePlugin.php
plugins/FacebookBridge/FacebookBridgePlugin.php
plugins/FeedPoller/FeedPollerPlugin.php
plugins/FirePHP/FirePHPPlugin.php
plugins/FollowEveryone/FollowEveryonePlugin.php
plugins/ForceGroup/ForceGroupPlugin.php
plugins/GeoURL/GeoURLPlugin.php
plugins/Geonames/GeonamesPlugin.php
plugins/GoogleAnalytics/GoogleAnalyticsPlugin.php
plugins/Gravatar/GravatarPlugin.php
plugins/GroupPrivateMessage/GroupPrivateMessagePlugin.php
plugins/ImageMagick/ImageMagickPlugin.php
plugins/Imap/ImapPlugin.php
plugins/InProcessCache/InProcessCachePlugin.php
plugins/LRDD/LRDDPlugin.php
plugins/LdapAuthentication/LdapAuthenticationPlugin.php
plugins/LdapAuthorization/LdapAuthorizationPlugin.php
plugins/LilUrl/LilUrlPlugin.php
plugins/LinkPreview/LinkPreviewPlugin.php
plugins/Linkback/LinkbackPlugin.php
plugins/LogFilter/LogFilterPlugin.php
plugins/Mapstraction/MapstractionPlugin.php
plugins/Memcache/MemcachePlugin.php
plugins/Memcached/MemcachedPlugin.php
plugins/Meteor/MeteorPlugin.php
plugins/Minify/MinifyPlugin.php
plugins/Mobile/WAP20Plugin.php
plugins/MobileProfile/MobileProfilePlugin.php
plugins/ModHelper/ModHelperPlugin.php
plugins/ModLog/ModLogPlugin.php
plugins/ModPlus/ModPlusPlugin.php
plugins/NoticeTitle/NoticeTitlePlugin.php
plugins/OStatus/EVENTS.txt [new file with mode: 0644]
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/classes/Magicsig.php
plugins/OStatus/classes/Ostatus_profile.php
plugins/OStatus/lib/feedsubexception.php [new file with mode: 0644]
plugins/OStatus/lib/salmon.php
plugins/OStatus/lib/salmonaction.php
plugins/OStatus/scripts/update-profile.php
plugins/OfflineBackup/OfflineBackupPlugin.php
plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php
plugins/OpenID/OpenIDPlugin.php
plugins/OpenX/OpenXPlugin.php
plugins/OpportunisticQM/OpportunisticQMPlugin.php
plugins/Orbited/OrbitedPlugin.php
plugins/PiwikAnalytics/PiwikAnalyticsPlugin.php
plugins/Poll/PollPlugin.php
plugins/PostDebug/PostDebugPlugin.php
plugins/PtitUrl/PtitUrlPlugin.php
plugins/QnA/QnAPlugin.php
plugins/RSSCloud/RSSCloudPlugin.php
plugins/Recaptcha/RecaptchaPlugin.php
plugins/RegisterThrottle/RegisterThrottlePlugin.php
plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php
plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php
plugins/SQLProfile/SQLProfilePlugin.php
plugins/SQLStats/SQLStatsPlugin.php
plugins/Sample/SamplePlugin.php
plugins/SearchSub/SearchSubPlugin.php
plugins/ShareNotice/ShareNoticePlugin.php
plugins/SimpleUrl/SimpleUrlPlugin.php
plugins/Sitemap/SitemapPlugin.php
plugins/SlicedFavorites/SlicedFavoritesPlugin.php
plugins/SphinxSearch/SphinxSearchPlugin.php
plugins/StrictTransportSecurity/StrictTransportSecurityPlugin.php
plugins/SubMirror/SubMirrorPlugin.php
plugins/SubscriptionThrottle/SubscriptionThrottlePlugin.php
plugins/TabFocus/TabFocusPlugin.php
plugins/TagSub/TagSubPlugin.php
plugins/TightUrl/TightUrlPlugin.php
plugins/TwitterBridge/TwitterBridgePlugin.php
plugins/UserFlag/UserFlagPlugin.php
plugins/UserLimit/UserLimitPlugin.php
plugins/VideoThumbnails/VideoThumbnailsPlugin.php
plugins/WebFinger/WebFingerPlugin.php
plugins/WikiHashtags/WikiHashtagsPlugin.php
plugins/WikiHowProfile/WikiHowProfilePlugin.php
plugins/Xmpp/XmppPlugin.php
theme/base/css/display.css
theme/neo-quitter/css/display.css

index 0e292303d58b2791e052f4da9d8c50eb63e096d2..5e1102b2f6f415928dc1cabd4b05247738083459 100644 (file)
@@ -49,16 +49,9 @@ class ApiconversationAction extends ApiAuthAction
     protected $conversation = null;
     protected $notices      = null;
 
-    /**
-     * For initializing members of the class.
-     *
-     * @param array $argarray misc. arguments
-     *
-     * @return boolean true
-     */
-    function prepare($argarray)
+    protected function prepare(array $args=array())
     {
-        parent::prepare($argarray);
+        parent::prepare($args);
 
         $convId = $this->trimmed('id');
 
index 5a6e4b5c7a51c6357c1b482fa9ad9aad280af73e..b1cb50abacdde4b179e5b0c9f6b5c5a35e1a9a07 100644 (file)
@@ -97,7 +97,7 @@ class ConversationAction extends ManagedAction
         Event::handle('EndShowConversation', array($this, $this->conv, $this->scoped));
     }
 
-    function isReadOnly()
+    function isReadOnly($args)
     {
         return true;
     }
index d4abbfddeef3f5f45c26621fce6414c16e75827f..1a29ea5107e537dec350188c4b7b323e523b2e76 100644 (file)
@@ -488,13 +488,13 @@ class File extends Managed_DataObject
             throw new ServerException('URL already exists in DB');
         }
         $sql = 'UPDATE %1$s SET urlhash=%2$s, url=%3$s WHERE urlhash=%4$s;';
-        $result = $this->query(sprintf($sql, $this->__table,
+        $result = $this->query(sprintf($sql, $this->tableName(),
                                              $this->_quote((string)self::hashurl($url)),
                                              $this->_quote((string)$url),
                                              $this->_quote((string)$this->urlhash)));
         if ($result === false) {
             common_log_db_error($this, 'UPDATE', __FILE__);
-            throw new ServerException("Could not UPDATE {$this->__table}.url");
+            throw new ServerException("Could not UPDATE {$this->tableName()}.url");
         }
 
         return $result;
diff --git a/classes/GS_DataObject.php b/classes/GS_DataObject.php
new file mode 100644 (file)
index 0000000..4ca2436
--- /dev/null
@@ -0,0 +1,234 @@
+<?php
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+class GS_DataObject extends DB_DataObject
+{
+    public function _autoloadClass($class, $table=false)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::_autoloadClass($class, $table);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    // wraps the _connect call so we don't throw E_STRICT warnings during it
+    public function _connect()
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::_connect();
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    // wraps the _loadConfig call so we don't throw E_STRICT warnings during it
+    // doesn't actually return anything, but we'll follow the same model as the rest of the wrappers
+    public function _loadConfig()
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::_loadConfig();
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    // wraps the count call so we don't throw E_STRICT warnings during it
+    public function count($countWhat = false,$whereAddOnly = false)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::count($countWhat, $whereAddOnly);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    static public function debugLevel($v = null)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::debugLevel($v);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    // delete calls PEAR::isError from DB_DataObject, so let's make that disappear too
+    public function delete($useWhere = false)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::delete($useWhere);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    static public function factory($table = '')
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::factory($table);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    public function get($k = null, $v = null)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::get($k, $v);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    public function fetch()
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::fetch();
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    public function find($n = false)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::find($n);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    public function fetchRow($row = null)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::fetchRow($row);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    // insert calls PEAR::isError from DB_DataObject, so let's make that disappear too
+    public function insert()
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::insert();
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    // DB_DataObject's joinAdd calls DB_DataObject::factory explicitly, so our factory-override doesn't work
+    public function joinAdd($obj = false, $joinType='INNER', $joinAs=false, $joinCol=false)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::joinAdd($obj, $joinType, $joinAs, $joinCol);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    public function links()
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::links();
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    // wraps the update call so we don't throw E_STRICT warnings during it
+    public function update($dataObject = false)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::update($dataObject);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    static public function staticGet($class, $k, $v = null)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::staticGet($class, $k, $v);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+
+    public function staticGetAutoloadTable($table)
+    {
+        // avoid those annoying PEAR::DB strict standards warnings it causes
+        $old = error_reporting();
+        error_reporting(error_reporting() & ~E_STRICT);
+
+        $res = parent::staticGetAutoloadTable($table);
+
+        // reset
+        error_reporting($old);
+        return $res;
+    }
+}
index a69a957bcc0225bad8b4085312b1b73a53b9ea13..ec514029939547997f5e098925e79816868d0034 100644 (file)
@@ -406,7 +406,7 @@ abstract class Managed_DataObject extends Memcached_DataObject
                 common_log_db_error($this, 'UPDATE', __FILE__);
                 // rollback as something bad occurred
                 $this->query('ROLLBACK');
-                throw new ServerException("Could not UPDATE non-keys for {$this->__table}");
+                throw new ServerException("Could not UPDATE non-keys for {$this->tableName()}");
             }
             $orig->decache();
             $this->encache();
@@ -428,7 +428,7 @@ abstract class Managed_DataObject extends Memcached_DataObject
             common_log_db_error($this, 'UPDATE', __FILE__);
             // rollback as something bad occurred
             $this->query('ROLLBACK');
-            throw new ServerException("Could not UPDATE key fields for {$this->__table}");
+            throw new ServerException("Could not UPDATE key fields for {$this->tableName()}");
         }
 
         // Update non-keys too, if the previous endeavour worked.
@@ -438,7 +438,7 @@ abstract class Managed_DataObject extends Memcached_DataObject
             common_log_db_error($this, 'UPDATE', __FILE__);
             // rollback as something bad occurred
             $this->query('ROLLBACK');
-            throw new ServerException("Could not UPDATE non-keys for {$this->__table}");
+            throw new ServerException("Could not UPDATE non-keys for {$this->tableName()}");
         }
         $orig->decache();
         $this->encache();
index 91b986891cea53aa6a74ee04f3c0512f2e047ba6..c1f6f644db010d9e85e4d121b73474f3cb547724 100644 (file)
@@ -461,11 +461,11 @@ class Memcached_DataObject extends Safe_DataObject
         }
 
         global $_DB_DATAOBJECT;
-        if (!isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"])) {
+        if (!isset($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"])) {
             $this->databaseStructure();
 
         }
-        return $_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"];
+        return $_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"];
     }
 
     function encache()
@@ -824,7 +824,7 @@ class Memcached_DataObject extends Safe_DataObject
         global $_DB_DATAOBJECT;
 
         if (empty($_DB_DATAOBJECT['CONFIG'])) {
-            DB_DataObject::_loadConfig();
+            self::_loadConfig();
         }
 
         $options = &$_DB_DATAOBJECT['CONFIG'];
@@ -836,7 +836,7 @@ class Memcached_DataObject extends Safe_DataObject
         if (!$dsn) {
 
             if (!$this->_database) {
-                $this->_database = isset($options["table_{$this->__table}"]) ? $options["table_{$this->__table}"] : null;
+                $this->_database = isset($options["table_{$this->tableName()}"]) ? $options["table_{$this->tableName()}"] : null;
             }
 
             if ($this->_database && !empty($options["database_{$this->_database}"]))  {
index 9246c26919ac13897a22e261e5cc3b044f2fb3ad..8c9957958b943a9ef9cac8a8c289549a520e9df8 100644 (file)
@@ -979,12 +979,14 @@ class Notice extends Managed_DataObject
 
         // Force the scope for private groups
         foreach ($groups as $group_id) {
-            $group = User_group::staticGet('id', $group_id);
-            if ($group instanceof User_group) {
+            try {
+                $group = User_group::getByID($group_id);
                 if ($group->force_scope) {
                     $scope |= Notice::GROUP_SCOPE;
                     break;
                 }
+            } catch (Exception $e) {
+                common_log(LOG_ERR, 'Notice figureOutScope threw exception: '.$e->getMessage());
             }
         }
 
index b4c251c475f609047c737d401863fd930416e697..6aed88ae1f67501d1e1af30ffe6995b0cc469f70 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Extended DB_DataObject to improve a few things:
@@ -26,7 +26,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
  * - don't leak memory when loading already-used .ini files
  *   (eg when using the same schema on thousands of databases)
  */
-class Safe_DataObject extends DB_DataObject
+class Safe_DataObject extends GS_DataObject
 {
     /**
      * Destructor to free global memory resources associated with
@@ -177,7 +177,6 @@ class Safe_DataObject extends DB_DataObject
             }
 
         }
-
         if (!$this->_database) {
             $this->_connect();
         }
@@ -187,7 +186,7 @@ class Safe_DataObject extends DB_DataObject
 
             // database loaded - but this is table is not available..
             if (
-                    empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])
+                    empty($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()])
                     && !empty($_DB_DATAOBJECT['CONFIG']['proxy'])
                 ) {
                 if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
@@ -198,13 +197,13 @@ class Safe_DataObject extends DB_DataObject
 
 
                 $x = new DB_DataObject_Generator;
-                $x->fillTableSchema($this->_database,$this->__table);
+                $x->fillTableSchema($this->_database,$this->tableName());
             }
             return true;
         }
 
         if (empty($_DB_DATAOBJECT['CONFIG'])) {
-            DB_DataObject::_loadConfig();
+            self::_loadConfig();
         }
 
         // if you supply this with arguments, then it will take those
@@ -226,7 +225,7 @@ class Safe_DataObject extends DB_DataObject
 
         // now have we loaded the structure..
 
-        if (!empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) {
+        if (!empty($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()])) {
             return true;
         }
         // - if not try building it..
@@ -235,11 +234,11 @@ class Safe_DataObject extends DB_DataObject
                 require_once 'DB/DataObject/Generator.php';
 
             $x = new DB_DataObject_Generator;
-            $x->fillTableSchema($this->_database,$this->__table);
+            $x->fillTableSchema($this->_database,$this->tableName());
             // should this fail!!!???
             return true;
         }
-        $this->debug("Cant find database schema: {$this->_database}/{$this->__table} \n".
+        $this->debug("Cant find database schema: {$this->_database}/{$this->tableName()} \n".
                     "in links file data: " . print_r($_DB_DATAOBJECT['INI'],true),"databaseStructure",5);
         // we have to die here!! - it causes chaos if we don't (including looping forever!)
         // Low level exception. No need for i18n as discussed with Brion.
index 9e5ff89be352c9863d72a977756c8445ae5da7ea..b45224ff74c5225b02fa23c21d10269c9ba65d22 100644 (file)
@@ -38,7 +38,7 @@ class Status_network_tag extends Safe_DataObject
         $sn = new Status_network();
         $sn->_connect();
 
-        $config['db']['table_'. $this->__table] = $sn->_database;
+        $config['db']['table_'. $this->tableName()] = $sn->_database;
 
         $this->_connect();
     }
index 684a98c92a4c3a1e42edf8ba37ac88a5d4eb20e7..1a7b34665d174224ef50528dd4355b9e348cbdf7 100755 (executable)
@@ -346,7 +346,7 @@ class DB_DataObject extends DB_DataObject_Overload
                $this->_query['derive_select']
                .' FROM ( SELECT'.
                     $this->_query['data_select'] . " \n" .
-                    " FROM   $tn \n" .
+                    " FROM   $tn  " . $this->_query['useindex'] . " \n" .
                     $this->_join . " \n" .
                     $this->_query['condition'] . " \n" .
                     $this->_query['group_by'] . " \n" .
@@ -362,7 +362,7 @@ class DB_DataObject extends DB_DataObject_Overload
         
         $sql = 'SELECT ' .
             $this->_query['data_select'] . " \n" .
-            " FROM   $tn \n" .
+            " FROM   $tn  " . $this->_query['useindex'] . " \n" .
             $this->_join . " \n" .
             $this->_query['condition'] . " \n" .
             $this->_query['group_by'] . " \n" .
@@ -862,6 +862,43 @@ class DB_DataObject extends DB_DataObject_Overload
         $this->_query['having'] .= " AND {$having}";
     }
 
+    /**
+     * Adds a using Index
+     *
+     * $object->useIndex(); //reset the use Index 
+     * $object->useIndex("some_index");
+     *
+     * Note do not put unfiltered user input into theis method.
+     * This is mysql specific at present? - might need altering to support other databases.
+     * 
+     * @param  string|array  $index  index or indexes to use.
+     * @access public
+     * @return none|PEAR::Error - invalid args only
+     */
+    function useIndex($index = false)
+    {
+        if ($this->_query === false) {
+            $this->raiseError(
+                "You cannot do two queries on the same object (copy it before finding)", 
+                DB_DATAOBJECT_ERROR_INVALIDARGS);
+            return false;
+        }
+        if ($index=== false) {
+            $this->_query['useindex'] = '';
+            return;
+        }
+        // check input...= 0 or '    ' == error!
+        if ((is_string($index) && !trim($index)) || (is_array($index) && !count($index)) ) {
+            return $this->raiseError("Having: No Valid Arguments", DB_DATAOBJECT_ERROR_INVALIDARGS);
+        }
+        $index = is_array($index) ? implode(', ', $index) : $index;
+        
+        if (!$this->_query['useindex']) {
+            $this->_query['useindex'] = " USE INDEX ({$index}) ";
+            return;
+        }
+        $this->_query['useindex'] =  substr($this->_query['useindex'],0, -2) . ", {$index}) ";
+    }
     /**
      * Sets the Limit
      *
@@ -1090,11 +1127,9 @@ class DB_DataObject extends DB_DataObject_Overload
                 continue;
             }
         
-            
-           
-           
-            // Ignore variables which aren't set to a value
-            if ( (!isset($this->$k) || ($v == 1 && $this->$k == ''))
+             
+            // Ignore INTEGERS which aren't set to a value - or empty string..
+            if ( (!isset($this->$k) || ($v == 1 && $this->$k === ''))
                     && $ignore_null
             ) {
                 continue;
@@ -1342,7 +1377,8 @@ class DB_DataObject extends DB_DataObject_Overload
       
         foreach($items as $k => $v) {
             
-            if ((!isset($this->$k) || ($v == 1 && $this->$k == ''))
+            // I think this is ignoring empty vlalues
+            if ((!isset($this->$k) || ($v == 1 && $this->$k === ''))
                     && $ignore_null
             ) {
                  continue;
@@ -1808,6 +1844,7 @@ class DB_DataObject extends DB_DataObject_Overload
         'group_by'    => '', // the GROUP BY condition
         'order_by'    => '', // the ORDER BY condition
         'having'      => '', // the HAVING condition
+        'useindex'   => '', // the USE INDEX condition
         'limit_start' => '', // the LIMIT condition
         'limit_count' => '', // the LIMIT condition
         'data_select' => '*', // the columns to be SELECTed
@@ -2458,7 +2495,7 @@ class DB_DataObject extends DB_DataObject_Overload
             } else {
                 $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5] = DB::connect($dsn);
             }
-            
+             
         } else {
             /* assumption is MDB2 */
             require_once 'MDB2.php';
@@ -2774,7 +2811,7 @@ class DB_DataObject extends DB_DataObject_Overload
     
     
 
-    function factory($table = '')
+    static function factory($table = '')
     {
         global $_DB_DATAOBJECT;
         
@@ -2792,13 +2829,14 @@ class DB_DataObject extends DB_DataObject_Overload
         }
         // no configuration available for database
         if (!empty($database) && empty($_DB_DATAOBJECT['CONFIG']['database_'.$database])) {
-                return DB_DataObject::raiseError(
+                $do = new DB_DataObject();
+                $do->raiseError(
                     "unable to find database_{$database} in Configuration, It is required for factory with database"
                     , 0, PEAR_ERROR_DIE );   
        }
         
        
-        
+        /*
         if ($table === '') {
             if (is_a($this,'DB_DataObject') && strlen($this->tableName())) {
                 $table = $this->tableName();
@@ -2809,6 +2847,7 @@ class DB_DataObject extends DB_DataObject_Overload
             }
         }
         
+        */
         // does this need multi db support??
         $cp = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ?
             explode(PATH_SEPARATOR, $_DB_DATAOBJECT['CONFIG']['class_prefix']) : '';
@@ -2859,7 +2898,8 @@ class DB_DataObject extends DB_DataObject_Overload
         }
         
         if (!$rclass || !class_exists($rclass)) {
-            return DB_DataObject::raiseError(
+            $dor = new DB_DataObject();
+            return $dor->raiseError(
                 "factory could not find class " . 
                 (is_array($class) ? implode(PATH_SEPARATOR, $class)  : $class  ). 
                 "from $table",
@@ -2944,7 +2984,8 @@ class DB_DataObject extends DB_DataObject_Overload
                 }
             }
             if (!$found) {
-                DB_DataObject::raiseError(
+                $dor = new DB_DataObject();
+                $dor->raiseError(
                     "autoload:Could not find class " . implode(',', $cls) .
                     " using class_location value :" . $search .
                     " using include_path value :" . ini_get('include_path'), 
@@ -2965,7 +3006,8 @@ class DB_DataObject extends DB_DataObject_Overload
             }
         }
         if (!$ce) {
-            DB_DataObject::raiseError(
+            $dor = new DB_DataObject();
+            $dor->raiseError(
                 "autoload:Could not autoload " . implode(',', $cls) , 
                 DB_DATAOBJECT_ERROR_INVALIDCONFIG);
             return false;
@@ -3975,6 +4017,7 @@ class DB_DataObject extends DB_DataObject_Overload
         global $_DB_DATAOBJECT;
         $keys  = $this->keys();
         $items = $this->table();
+        
         if (!$items) {
             $this->raiseError(
                 "setFrom:Could not find table definition for {$this->tableName()}", 
@@ -4592,7 +4635,7 @@ class DB_DataObject extends DB_DataObject_Overload
      * @access  public
      * @return  none
      */
-    function debugLevel($v = null)
+    static function debugLevel($v = null)
     {
         global $_DB_DATAOBJECT;
         if (empty($_DB_DATAOBJECT['CONFIG'])) {
@@ -4646,7 +4689,8 @@ class DB_DataObject extends DB_DataObject_Overload
             $error = $message;
         } else {
             require_once 'DB/DataObject/Error.php';
-            $error = PEAR::raiseError($message, $type, $behaviour,
+            $dor = new PEAR();
+            $error = $dor->raiseError($message, $type, $behaviour,
                             $opts=null, $userinfo=null, 'DB_DataObject_Error'
                         );
         }
@@ -4773,7 +4817,7 @@ class DB_DataObject extends DB_DataObject_Overload
     /**
      * (deprecated - use ::get / and your own caching method)
      */
-    function staticGet($class, $k, $v = null)
+    static function staticGet($class, $k, $v = null)
     {
         $lclass = strtolower($class);
         global $_DB_DATAOBJECT;
@@ -4799,7 +4843,8 @@ class DB_DataObject extends DB_DataObject_Overload
 
         $obj = DB_DataObject::factory(substr($class,strlen($_DB_DATAOBJECT['CONFIG']['class_prefix'])));
         if (PEAR::isError($obj)) {
-            DB_DataObject::raiseError("could not autoload $class", DB_DATAOBJECT_ERROR_NOCLASS);
+            $dor = new DB_DataObject();
+            $dor->raiseError("could not autoload $class", DB_DATAOBJECT_ERROR_NOCLASS);
             $r = false;
             return $r;
         }
@@ -4808,7 +4853,8 @@ class DB_DataObject extends DB_DataObject_Overload
             $_DB_DATAOBJECT['CACHE'][$lclass] = array();
         }
         if (!$obj->get($k,$v)) {
-            DB_DataObject::raiseError("No Data return from get $k $v", DB_DATAOBJECT_ERROR_NODATA);
+            $dor = new DB_DataObject();
+            $dor->raiseError("No Data return from get $k $v", DB_DATAOBJECT_ERROR_NODATA);
             
             $r = false;
             return $r;
index a9cc99221da1b2eb573bb309aac6f323e4352a21..fa91d46726c572fddd52ee4303a10b8b26c3e6f8 100644 (file)
@@ -125,11 +125,10 @@ class Action extends HTMLOutputter // lawsuit
             } else {
                 common_debug('Prepare failed for Action.');
             }
-        }
-
-        $this->flush();
 
-        Event::handle('EndActionExecute', array($this));
+            $this->flush();
+            Event::handle('EndActionExecute', array($this));
+        }
     }
 
     /**
index 8da7e5c61c5daee73aa40a5ad76ab61fe99bcd84..95a3bec45d8a3ecd1aeb3b7c72dafb7473f7385d 100644 (file)
@@ -54,25 +54,10 @@ class ApiOAuthAction extends ApiAction
         return false;
     }
 
-    function prepare($args)
+    protected function prepare(array $args=array())
     {
-        parent::prepare($args);
-        return true;
-    }
-
-    /**
-     * Handle input, produce output
-     *
-     * Switches on request method; either shows the form or handles its input.
-     *
-     * @param array $args $_REQUEST data
-     *
-     * @return void
-     */
-    function handle($args)
-    {
-        parent::handle($args);
         self::cleanRequest();
+        return parent::prepare($args);
     }
 
     /*
index 9233c9bde6d202996ba61d24ddd6087fc4245fb4..37f722291e53e1525f0eb532a4f918887d923aec 100644 (file)
@@ -72,9 +72,9 @@ class ClientErrorAction extends ErrorAction
 
     // XXX: Should these error actions even be invokable via URI?
 
-    function handle($args)
+    protected function handle()
     {
-        parent::handle($args);
+        parent::handle();
 
         $this->code = $this->trimmed('code');
 
index 52b5f279c9436b1114548076ed32f4ef5e3dca4f..0cc023ca5dbc6ca25e62698923eeb74d70f975e0 100644 (file)
@@ -48,7 +48,7 @@ if (!defined('STATUSNET')) {
 
 class FullThreadedNoticeList extends ThreadedNoticeList
 {
-    function newListItem($notice)
+    function newListItem(Notice $notice)
     {
         return new FullThreadedNoticeListItem($notice, $this->out, $this->userProfile);
     }
index 94bb1e124a16570702ad0fa2b6777c744e3a4979..28040d3f84f22e1faad9348f7e93faf0c5e7cd6e 100644 (file)
@@ -181,7 +181,7 @@ class Plugin
                 . ' (' . get_class($this) . ' v' . $this->version() . ')';
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $name = $this->name();
 
index 54cc99099a5abef5e27e56c70315a31dc5525216..c8e3067b825c7098d27a8372cd3652bcfbada196 100644 (file)
@@ -78,9 +78,9 @@ class ServerErrorAction extends ErrorAction
 
     // XXX: Should these error actions even be invokable via URI?
 
-    function handle($args)
+    protected function handle()
     {
-        parent::handle($args);
+        parent::handle();
 
         $this->code = $this->trimmed('code');
 
index c4edce74e85ba5dbc07ee6c441d7a03067c43e00..768f71510f24c334752c9e223042eaf8008dd50e 100644 (file)
@@ -87,7 +87,7 @@ class AccountManagerPlugin extends Plugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'AccountManager',
                             'version' => GNUSOCIAL_VERSION,
index 0d8508e06d9cf5bbc1427cf188b60377ac3e9049..5144eb46662f3f86a4c1c25969b008aef3da4c99 100644 (file)
@@ -339,7 +339,7 @@ class ActivityPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Activity',
                             'version' => self::VERSION,
index a3974b3a7879a46d2103388e3236336537d6040b..9d61b2ddddba392d34a59203dbe0fccbc14f512b 100644 (file)
@@ -215,7 +215,7 @@ class ActivitySpamPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'ActivitySpam',
                             'version' => GNUSOCIAL_VERSION,
index dab4cb4d0baa329a81216de585ddb7922301cd63..368c2f11b72bdb8d1a6be3bfda8ff32d1886326c 100644 (file)
@@ -44,7 +44,7 @@ class ActivityVerbPlugin extends Plugin
                           'verb'   => '[a-z]+'));
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Activity Verb',
                             'version' => GNUSOCIAL_VERSION,
index c817578ec222f570cb222bcd5aff45d3bde9ba24..841b6524012de81d5e2c72717bcbd900d78e9dc0 100644 (file)
@@ -271,7 +271,7 @@ class AnonymousFavePlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:AnonymousFave';
 
index 625180d23d7d330ba5f8adfc07179deecc146662..c2291cbf1da18c27be1f5d6882101222248a8c06 100755 (executable)
@@ -68,7 +68,7 @@ class AntiBrutePlugin extends Plugin {
         return true;
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'AntiBrute',
                             'version' => GNUSOCIAL_VERSION,
index ba09e35f24a5d5cd4dcc23c712be25aa5bdf5765..920009de5ad9bc46c2117251b7cbc3af5ef962c6 100644 (file)
@@ -75,7 +75,7 @@ class ApiLoggerPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'ApiLogger',
                             'version' => GNUSOCIAL_VERSION,
index c99a0a4e2ac0ec542fde52284510ae7fb44fb727..c6695667725d904683e38d926568ee59dfd881d2 100644 (file)
@@ -150,7 +150,7 @@ class AuthCryptPlugin extends AuthenticationPlugin
         return true;
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'AuthCrypt',
                             'version' => GNUSOCIAL_VERSION,
index bffb84057297c3102c8aa1e3ae748b6c759650b1..e914977cc90cf61e9ee7cf2de450950211980d77 100644 (file)
@@ -56,7 +56,7 @@ class AutoSandboxPlugin extends Plugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'AutoSandbox',
                             'version' => GNUSOCIAL_VERSION,
index ff56b60fc463cb210f1c4e83f90cf0cc440e2106..0f0c2592c2cd7bf7b3cbd0d832c71ce32e4268c9 100644 (file)
@@ -52,7 +52,7 @@ class AutocompletePlugin extends Plugin
         $m->connect('main/autocomplete/suggest', array('action'=>'autocomplete'));
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Autocomplete',
                             'version' => GNUSOCIAL_VERSION,
index 55a596b5694e7f9bd2fb1e11b739e6fdc13bd2cd..ca3b281df681c80ebb288f01d070c39bbb674607 100644 (file)
@@ -44,7 +44,7 @@ class AwesomenessPlugin extends Plugin
 {
     const VERSION = '0.0.42';
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array(
             'name' => 'Awesomeness',
index d4d56c1be2bf5970a9a5d3e79e1e78610ff4f062..13a1bf2ec4dc897fb82695701d5203a17e5cd7d9 100644 (file)
@@ -145,7 +145,7 @@ class BitlyUrlPlugin extends UrlShortenerPlugin
                return null;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => sprintf('BitlyUrl (%s)', $this->shortenerName),
                             'version' => GNUSOCIAL_VERSION,
index fc26cd77c631e63a21351005408a1555e133a2cd..bad89f2457239a7f2fabbf3bbe24e4d0e51a9de2 100644 (file)
@@ -291,7 +291,7 @@ class BlacklistPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Blacklist',
                             'version' => self::VERSION,
index 49f70e68a4e8fb4ea3aee7912b1e6e9ef29aafa0..b5cd968c7fc7b2e065fdd7a4752ba8696f03c0c3 100644 (file)
@@ -117,7 +117,7 @@ class BlankAdPlugin extends UAPPlugin
                          '');
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'BlankAd',
                             'version' => GNUSOCIAL_VERSION,
index f4de0d6c8868d5ad77a75b71383be6b61fe98ad6..2cab69be30e03672b33dd1aab8926baf0d69fdb7 100644 (file)
@@ -148,7 +148,7 @@ class BlogspamNetPlugin extends Plugin
         return BLOGSPAMNETPLUGIN_VERSION;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'BlogspamNet',
                             'version' => BLOGSPAMNETPLUGIN_VERSION,
index 3cb6d9dacb8182015e8a5f88d8bc7920d68bb563..547efa2370104187891241cfbd7ba90d7ad689c8 100644 (file)
@@ -181,7 +181,7 @@ class BookmarkPlugin extends MicroAppPlugin
      *
      * @return value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Bookmark',
                             'version' => self::VERSION,
index e722972bfce6dfe7251e69d83b3f244819c5ef78..5c1b57e0e6f36eb2db34983b8c7bb85a3e14cae5 100644 (file)
@@ -96,7 +96,7 @@ class CacheLogPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'CacheLog',
                             'version' => GNUSOCIAL_VERSION,
index 2f17492a8e2dd4c35356a954272eabc40644c6aa..461655264e721e87ec7ecc3776980575b5872b56 100644 (file)
@@ -147,7 +147,7 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
         $casSettings['takeOverLogin']=$this->takeOverLogin;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'CAS Authentication',
                             'version' => GNUSOCIAL_VERSION,
index 0c2c9b76cc3aac751c3a8e22418a518abdcab108..4d87ab22404f905e30b2b5753bd99caf074a86eb 100644 (file)
@@ -54,7 +54,7 @@ class ClientSideShortenPlugin extends Plugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Shorten',
                             'version' => GNUSOCIAL_VERSION,
index d669626a67d30611d976782fbb15f666a67e77e8..5b38b2ae11dfaf731bebd9e8d3e4ea8d51e827f8 100644 (file)
@@ -104,7 +104,7 @@ class CometPlugin extends RealtimePlugin
         return '/' . implode('/', $path);
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Comet',
                             'version' => GNUSOCIAL_VERSION,
index 9ae62dc778c1c00a390487e03c883cd864d0aeed..e90fa3e34c676da2a240a8dd50ba7d657f1c5112 100644 (file)
@@ -45,7 +45,7 @@ class CronishPlugin extends Plugin {
         return true;
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Cronish',
                             'version' => GNUSOCIAL_VERSION,
index 40823ecf9db6ea70fece5334de53bfa99faa1538..3c3846faf3cce934114ba83bd67b1232cb3690a0 100644 (file)
@@ -43,7 +43,7 @@ class DefaultLayoutPlugin extends Plugin
         return true;
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Default Layout',
                             'version' => GNUSOCIAL_VERSION,
diff --git a/plugins/Diaspora/DiasporaPlugin.php b/plugins/Diaspora/DiasporaPlugin.php
new file mode 100644 (file)
index 0000000..66a9759
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+/*
+ * GNU Social - a federating social network
+ * Copyright (C) 2015, Free Software Foundation, 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('GNUSOCIAL')) { exit(1); }
+
+/**
+ * Diaspora federation protocol plugin for GNU Social
+ *
+ * Depends on:
+ *  - OStatus plugin
+ *  - WebFinger plugin
+ *
+ * @package ProtocolDiasporaPlugin
+ * @maintainer Mikael Nordfeldth <mmn@hethane.se>
+ */
+
+class DiasporaPlugin extends Plugin
+{
+    const REL_SEED_LOCATION = 'http://joindiaspora.com/seed_location';
+    const REL_GUID          = 'http://joindiaspora.com/guid';
+    const REL_PUBLIC_KEY    = 'diaspora-public-key';
+
+    public function onEndAttachPubkeyToUserXRD(Magicsig $magicsig, XML_XRD $xrd, Profile $target)
+    {
+        // So far we've only handled RSA keys, but it can change in the future,
+        // so be prepared. And remember to change the statically assigned type attribute below!
+        assert($magicsig->publicKey instanceof Crypt_RSA);
+        $xrd->links[] = new XML_XRD_Element_Link(self::REL_PUBLIC_KEY,
+                                    base64_encode($magicsig->exportPublicKey()), 'RSA');
+
+        // Instead of choosing a random string, we calculate our GUID from the public key
+        // by fingerprint through a sha256 hash.
+        $xrd->links[] = new XML_XRD_Element_Link(self::REL_GUID,
+                                    strtolower($magicsig->toFingerprint()));
+    }
+
+    public function onPluginVersion(array &$versions)
+    {
+        $versions[] = array('name' => 'Diaspora',
+                            'version' => '0.1',
+                            'author' => 'Mikael Nordfeldth',
+                            'homepage' => 'https://gnu.io/social',
+                            // TRANS: Plugin description.
+                            'rawdescription' => _m('Follow people across social networks that implement '.
+                               'the <a href="https://diasporafoundation.org/">Diaspora</a> federation protocol.'));
+
+        return true;
+    }
+}
index 890af068073321373e4f10dde075afd608641073..561d38cd38f6fc0fbcee7ae9ecdc138b789233ba 100644 (file)
@@ -244,7 +244,7 @@ class DirectionDetectorPlugin extends Plugin {
     /**
      * plugin details
      */
-    function onPluginVersion(&$versions){
+    function onPluginVersion(array &$versions){
         $url = 'http://status.net/wiki/Plugin:DirectionDetector';
 
         $versions[] = array(
index 7ac0f9326588684d1dc61b9d383f7db513f7251c..cae94e3427f668c33d46ed534ad67a53c3df485f 100644 (file)
@@ -251,7 +251,7 @@ class DirectoryPlugin extends Plugin
     /*
      * Version info
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array(
             'name' => 'Directory',
index 5d23d45f590f2f3fda92e063c35794b6034cb067..967990c12fae0afcda1df95b19db2b2dc0fc2c7f 100644 (file)
@@ -161,7 +161,7 @@ class DiskCachePlugin extends Plugin
         return false;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'DiskCache',
                             'version' => GNUSOCIAL_VERSION,
index d0e1ea7d76fc912ca3596c2f285bd5239ed99856..062151db175acad33280425b628abec52dab6b04 100644 (file)
@@ -190,7 +190,7 @@ class DomainStatusNetworkPlugin extends Plugin
         return null;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'DomainStatusNetwork',
                             'version' => GNUSOCIAL_VERSION,
index 20073a07c409a1a3af67727fb10ca3fa5f5105bb..2e15dd809a2c521974002006b39ae00603a9598a 100644 (file)
@@ -267,7 +267,7 @@ class DomainWhitelistPlugin extends Plugin
        return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'DomainWhitelist',
                             'version' => GNUSOCIAL_VERSION,
index a17748fe3208d66286ddaa4de44f25fb161966a1..524f1a6411f5732be01086d58fee466c2a93ca50 100644 (file)
@@ -49,7 +49,7 @@ class EmailAuthenticationPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Email Authentication',
                             'version' => GNUSOCIAL_VERSION,
index 741f24305b9cdd6bdec67c88f592020fd3c363b0..9e0fd58856758894884d2692ee409de6e2c19f51 100644 (file)
@@ -172,7 +172,7 @@ class EmailRegistrationPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'EmailRegistration',
                             'version' => GNUSOCIAL_VERSION,
index 51950542b2b93a0487f089c3e02936048616f4f3..9ac6275537afd6535de0a64f4e1aa0f23ae8157b 100644 (file)
@@ -179,7 +179,7 @@ class EmailReminderPlugin extends Plugin
      * @param type $versions
      * @return type
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array(
             'name'           => 'EmailReminder',
index da682e0454e2834054ff298bb95ed894a5d278a5..bc47fdece946c628b95963a6b4994bd9a2ee5c2d 100644 (file)
@@ -66,7 +66,7 @@ class EmailSummaryPlugin extends Plugin
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'EmailSummary',
                             'version' => GNUSOCIAL_VERSION,
index 8d661bbd8525d62e49a2217dfaacb4c92225e561..9fa6e17fc3f2c0014cf98afb7aeb4a66b2be8b53 100644 (file)
@@ -90,7 +90,7 @@ class EventPlugin extends MicroAppPlugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Event',
                             'version' => GNUSOCIAL_VERSION,
index a5cd823bb76ff14c5e6c37f0ed0c1892a6c409a9..ea928b995e054ace9f17e02bcdaf27896d3507c6 100644 (file)
@@ -29,7 +29,7 @@ if (!defined('STATUSNET')) {
  */
 class ExtendedProfilePlugin extends Plugin
 {
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array(
             'name' => 'ExtendedProfile',
index fff5a7621b426b7a49063df2c4ff93de7b8db3ad..a19cc0349bf7b2a7f18bee6b8bba243f3fa4928a 100644 (file)
@@ -612,7 +612,7 @@ ENDOFSCRIPT;
      *
      * @param array &$versions    plugin version descriptions
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array(
             'name' => 'Facebook Bridge',
index c844d99c1bd95f53878a1867e3bb91b9319de609..e272c0b7052bde9226566adae38bb718a9378bc7 100644 (file)
@@ -47,7 +47,7 @@ class FeedPollerPlugin extends Plugin {
         return true;
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'FeedPoller',
                             'version' => GNUSOCIAL_VERSION,
index b6d3773c2082f343745767703bfb5dd4ed164d6f..f884cd9c699d88e779530a56a87dd552c656025d 100644 (file)
@@ -58,7 +58,7 @@ class FirePHPPlugin extends Plugin
         $this->firephp->fb($msg, $fp_priority);
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'FirePHP',
                             'version' => GNUSOCIAL_VERSION,
index ee38c7a3117f78f289a7b33e1c7483e3dc9bcfd2..3c26963e3e400c6b70c46f18d07c0e329c46f112 100644 (file)
@@ -165,7 +165,7 @@ class FollowEveryonePlugin extends Plugin
      * @return boolean hook value
      *
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'FollowEveryone',
                             'version' => GNUSOCIAL_VERSION,
index a79c9d312bbbdd88dba8f3e164c46fdb890fe890..56e33355e86703ecc5d356ccf911d46a07704141 100644 (file)
@@ -105,7 +105,7 @@ class ForceGroupPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:ForceGroup';
 
index d548de925adec7d2674f07ea94460d9cdbcbb838..caad8fde11f0a77da6e6ee9441791c93cbda560e 100644 (file)
@@ -114,7 +114,7 @@ class GeoURLPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'GeoURL',
                             'version' => GNUSOCIAL_VERSION,
index 68d66bc0b15a5d19f2808ef02f5d14167283709d..ff9192283f62ccf73b15c07e8a8769c5f6cf1ac0 100644 (file)
@@ -487,7 +487,7 @@ class GeonamesPlugin extends Plugin
         return $document->geoname;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Geonames',
                             'version' => GNUSOCIAL_VERSION,
index 640330b85007305b5cd7cb0548b30b49ecb9a504..1dc0f0f07a402ca6955a808bdd3c4a5d55d11fc1 100644 (file)
@@ -105,7 +105,7 @@ ENDOFSCRIPT2;
        $action->inlineScript($js);
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'GoogleAnalytics',
                             'version' => self::VERSION,
index d7163988895ff02e1b218e32b50e1c36f1abf833..cf9e3a01fe66296724cf9e2de4febeac40fde256 100644 (file)
@@ -59,7 +59,7 @@ class GravatarPlugin extends Plugin
             return $url;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Gravatar',
                             'version' => GNUSOCIAL_VERSION,
index 73d7201e6f726c179a5c99041e17945c454373d7..61828239cac793a19549de9e390f4927e3dc2ec9 100644 (file)
@@ -405,7 +405,7 @@ class GroupPrivateMessagePlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'GroupPrivateMessage',
                             'version' => GNUSOCIAL_VERSION,
index 6e238ee8f2d26176c4620b809f33b254bc5387b3..927445211cee75057d69d222c84ebb845e87bcbd 100644 (file)
@@ -132,7 +132,7 @@ class ImageMagickPlugin extends Plugin
         return getimagesize($outpath);  // Verify that we wrote an understandable image.
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'ImageMagick',
                             'version' => GNUSOCIAL_VERSION,
index 5711951e264f11157c917909ff40b3da37f761bb..ea6eaabef88598ecda07764443efe4126e444ddb 100644 (file)
@@ -76,7 +76,7 @@ class ImapPlugin extends Plugin
         $classes[] = new ImapManager($this);
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'IMAP',
                             'version' => GNUSOCIAL_VERSION,
index af3d822dfd034b4c442639b9f744a0c888da986b..4684d0169ff201e0771670c585f6724cde658ae2 100644 (file)
@@ -170,7 +170,7 @@ class InProcessCachePlugin extends Plugin
      *
      * @return boolean true
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:InProcessCache';
 
index e8bf82ec315f572f53e098dd84fac00f600491b8..16eee335a3079050eb326ee69e68820d5d10fcbf 100644 (file)
@@ -51,7 +51,7 @@ class LRDDPlugin extends Plugin
         $disco->registerMethod('LRDDMethod_LinkHTML');
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'LRDD',
                             'version' => GNUSOCIAL_VERSION,
index df28c5a09f5566113c775354af6302f3269295a9..0efaec99b201b8b6d61e0d42f54070242393bfec 100644 (file)
@@ -142,7 +142,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
         return common_nicknamize($nickname);
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'LDAP Authentication',
                             'version' => GNUSOCIAL_VERSION,
index 9a666d15518030a267b7641ddbfcfb5717d3665b..eca8e037a03d066598d0033d6880cf93f970c342 100644 (file)
@@ -118,7 +118,7 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
         return false;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'LDAP Authorization',
                             'version' => GNUSOCIAL_VERSION,
index f871a956307e33285dee8d3499462f4e62777a3b..fcbee2b56dcc896ab9f53036167a7a66a93e562d 100644 (file)
@@ -57,7 +57,7 @@ class LilUrlPlugin extends UrlShortenerPlugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => sprintf('LilUrl (%s)', $this->shortenerName),
                             'version' => GNUSOCIAL_VERSION,
index effb105e2ba0fcb128ddcd5bc76e3890e7ccfc38..5edf66767d3715f3bb95f1c81bf32daadbde3f96 100644 (file)
@@ -29,7 +29,7 @@ if (!defined('STATUSNET')) {
  */
 class LinkPreviewPlugin extends Plugin
 {
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'LinkPreview',
                             'version' => GNUSOCIAL_VERSION,
index 597ac1f4469f8948e88f328408ee60d3f1894b0a..a710abd7bf8c8c5f80c59b16db87143323638d67 100644 (file)
@@ -232,7 +232,7 @@ class LinkbackPlugin extends Plugin
         return LINKBACKPLUGIN_VERSION;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Linkback',
                             'version' => LINKBACKPLUGIN_VERSION,
index 430e89594e91b9300bc494c75c82b1b1372bb9e4..028af9bc9cb99436718b1f870df6ccdd30f09643 100644 (file)
@@ -39,7 +39,7 @@ class LogFilterPlugin extends Plugin
     public $priority = array(); // override by priority: array(LOG_ERR => true, LOG_DEBUG => false)
     public $regex = array();    // override by regex match of message: array('/twitter/i' => false)
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'LogFilter',
                             'version' => GNUSOCIAL_VERSION,
index 1e0d05f8ad36e342d13422e0362a847c29560522..fcc9d88e5661852d505ad5f678223dec7a6c5d8c 100644 (file)
@@ -169,7 +169,7 @@ class MapstractionPlugin extends Plugin
         $action->elementEnd('div');
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Mapstraction',
                             'version' => self::VERSION,
index 8e674e62b8634716be03698e328875fc436c8053..7efb5e028437b26aaf6ffd147879b1defc1fe94d 100644 (file)
@@ -236,7 +236,7 @@ class MemcachePlugin extends Plugin
         return $out;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Memcache',
                             'version' => GNUSOCIAL_VERSION,
index 55c21cd923520152d7f444139944dc82bee43645..ca24b7b7d1c838ad26f29ba32a105fd13ff6fcd0 100644 (file)
@@ -207,7 +207,7 @@ class MemcachedPlugin extends Plugin
         return $flag;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Memcached',
                             'version' => GNUSOCIAL_VERSION,
index d2341980d2298ec8d3507d5102719736f2150d3b..64c2fd3d6902b39e3c36e89a683ce3c6fae02ba4 100644 (file)
@@ -160,7 +160,7 @@ class MeteorPlugin extends RealtimePlugin
         return implode('-', $path);
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Meteor',
                             'version' => GNUSOCIAL_VERSION,
index 1e13f8d80114db370523c1f133ffe42f08d65ee4..1dd3bdcf345fcd685cabdfe9ba3ad304d3e3ced0 100644 (file)
@@ -157,7 +157,7 @@ class MinifyPlugin extends Plugin
         return Minify_CSS::minify($code,$options);
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Minify',
                             'version' => GNUSOCIAL_VERSION,
index fc5008cda6ff91b29990031ef4a4d6a1d245c0e1..a48a32e9f1ecb16e1519f0b14993e5482923d0ae 100644 (file)
@@ -43,7 +43,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
 
 class WAP20Plugin extends Plugin
 {
-    function onStartShowHTML($action)
+    function onStartShowHTML(Action $action)
     {
 
     }
index 2efc0068794a9ae19c3ac34213c6ca2f1cb723cd..4129035ebb284a4fe742ae7da7b772c7b94362c0 100644 (file)
@@ -368,7 +368,7 @@ class MobileProfilePlugin extends WAP20Plugin
         return $proto.'://'.$serverpart.'/'.$pathpart.$relative;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'MobileProfile',
                             'version' => GNUSOCIAL_VERSION,
index 4b4bf8f447d24d203a3807eb4160b7225e263198..2752a2153947302d251aabf8374d381e32412f44 100644 (file)
@@ -29,7 +29,7 @@ class ModHelperPlugin extends Plugin
 {
     static $rights = array(Right::SILENCEUSER, Right::TRAINSPAM, Right::REVIEWSPAM);
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'ModHelper',
                             'version' => GNUSOCIAL_VERSION,
index bbf283f8c41369858d763d8f734c5ce3cbb80895..32c96be0e8c0722b5d7249adc0012beacc7455d6 100644 (file)
@@ -183,7 +183,7 @@ class ModLogPlugin extends Plugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'ModLog',
                             'version' => GNUSOCIAL_VERSION,
index 2e1077c22532972b8f73bad13e2a1516ba7265ec..816034f83126a37fce7d82838f03d107c4981312 100644 (file)
@@ -27,7 +27,7 @@ if (!defined('GNUSOCIAL')) { exit(1); }
  */
 class ModPlusPlugin extends Plugin
 {
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'ModPlus',
                             'version' => GNUSOCIAL_VERSION,
index 1b910cc4084045c5f1718fcfb02780a9ac5ab40b..960cb935f715ced90e5ec2102c353a2e8f619351 100644 (file)
@@ -84,7 +84,7 @@ class NoticeTitlePlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:NoticeTitle';
 
diff --git a/plugins/OStatus/EVENTS.txt b/plugins/OStatus/EVENTS.txt
new file mode 100644 (file)
index 0000000..766b751
--- /dev/null
@@ -0,0 +1,7 @@
+StartAttachPubkeyToUserXRD: Runs only for XRD generation where a Magicsig exists for a Profile which is a "person".
+@param  Magicsig    $magicsig   crypto stuff related to the profile we're representing
+@param  XRD         $xrd        the XRD object which holds all data for the profile we're representing
+
+EndAttachPubkeyToUserXRD: Runs only for XRD generation where a Magicsig exists for a Profile which is a "person". And only if StartAttachPubkeyToUserXRD didn't abort.
+@param  Magicsig    $magicsig   crypto stuff related to the profile we're representing
+@param  XRD         $xrd        the XRD object which holds all data for the profile we're representing
index 774a13be826dae24337829810748387d96d04c43..630031fdde06916a44d0238a6d71e2be61c7db2b 100644 (file)
@@ -30,19 +30,6 @@ if (!defined('GNUSOCIAL')) { exit(1); }
 
 set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/phpseclib');
 
-class FeedSubException extends Exception
-{
-    function __construct($msg=null)
-    {
-        $type = get_class($this);
-        if ($msg) {
-            parent::__construct("$type: $msg");
-        } else {
-            parent::__construct($type);
-        }
-    }
-}
-
 class OStatusPlugin extends Plugin
 {
     /**
@@ -1179,7 +1166,7 @@ class OStatusPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'OStatus',
                             'version' => GNUSOCIAL_VERSION,
@@ -1315,11 +1302,14 @@ class OStatusPlugin extends Plugin
             $magicsig = Magicsig::generate($target->getUser());
         }
 
-        if ($magicsig instanceof Magicsig) {
+        if (!$magicsig instanceof Magicsig) {
+            return false;   // value doesn't mean anything, just figured I'd indicate this function didn't do anything
+        }
+        if (Event::handle('StartAttachPubkeyToUserXRD', array($magicsig, $xrd, $target))) {
             $xrd->links[] = new XML_XRD_Element_Link(Magicsig::PUBLICKEYREL,
                                 'data:application/magic-public-key,'. $magicsig->toString());
-            $xrd->links[] = new XML_XRD_Element_Link(Magicsig::DIASPORA_PUBLICKEYREL,
-                                base64_encode($magicsig->exportPublicKey()));
+            // The following event handles plugins like Diaspora which add their own version of the Magicsig pubkey
+            Event::handle('EndAttachPubkeyToUserXRD', array($magicsig, $xrd, $target));
         }
     }
 
index 8d2bb4eac97b8d3a0e6ba2d8a91417de30fb54ef..890f525862ead99c7aa997a7f9b3fcbc70d1b27e 100644 (file)
@@ -36,7 +36,6 @@ require_once 'Crypt/RSA.php';
 class Magicsig extends Managed_DataObject
 {
     const PUBLICKEYREL = 'magic-public-key';
-    const DIASPORA_PUBLICKEYREL = 'diaspora-public-key';
 
     const DEFAULT_KEYLEN = 1024;
     const DEFAULT_SIGALG = 'RSA-SHA256';
@@ -179,18 +178,31 @@ class Magicsig extends Managed_DataObject
      * @param boolean $full_pair set to true to include the private key.
      * @return string
      */
-    public function toString($full_pair=false)
+    public function toString($full_pair=false, $base64url=true)
     {
-        $mod = Magicsig::base64_url_encode($this->publicKey->modulus->toBytes());
-        $exp = Magicsig::base64_url_encode($this->publicKey->exponent->toBytes());
+        $base64_func = $base64url ? 'Magicsig::base64_url_encode' : 'base64_encode';
+        $mod = call_user_func($base64_func, $this->publicKey->modulus->toBytes());
+        $exp = call_user_func($base64_func, $this->publicKey->exponent->toBytes());
+
         $private_exp = '';
         if ($full_pair && $this->privateKey instanceof Crypt_RSA && $this->privateKey->exponent->toBytes()) {
-            $private_exp = '.' . Magicsig::base64_url_encode($this->privateKey->exponent->toBytes());
+            $private_exp = '.' . call_user_func($base64_func, $this->privateKey->exponent->toBytes());
         }
 
         return 'RSA.' . $mod . '.' . $exp . $private_exp;
     }
 
+    public function toFingerprint()
+    {
+        // This assumes a specific behaviour from toString, to format as such:
+        //    "RSA." + base64(pubkey.modulus_as_bytes) + "." + base64(pubkey.exponent_as_bytes)
+        // We don't want the base64 string to be the "url encoding" version because it is not
+        // as common in programming libraries. And we want it to be base64 encoded since ASCII
+        // representation avoids any problems with NULL etc. in less forgiving languages and also
+        // just easier to debug...
+        return strtolower(hash('sha256', $this->toString(false, false)));
+    }
+
     public function exportPublicKey($format=CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
     {
         $this->publicKey->setPublicKey();
index 4d1b95e2b76eeedd30c5d31847f73a4be2b19a23..cb961dc96ba8f164bf2105e5d51d0134339b82e2 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * @package OStatusPlugin
- * @maintainer Brion Vibber <brion@status.net>
+ * @author Brion Vibber <brion@status.net>
+ * @maintainer Mikael Nordfeldth <mmn@hethane.se>
  */
 class Ostatus_profile extends Managed_DataObject
 {
@@ -1746,11 +1745,8 @@ class Ostatus_profile extends Managed_DataObject
             throw new Exception(_m('Not a valid webfinger address.'));
         }
 
-        $hints = array('webfinger' => $addr);
-
-        $dhints = DiscoveryHints::fromXRD($xrd);
-
-        $hints = array_merge($hints, $dhints);
+        $hints = array_merge(array('webfinger' => $addr),
+                             DiscoveryHints::fromXRD($xrd));
 
         // If there's an Hcard, let's grab its info
         if (array_key_exists('hcard', $hints)) {
diff --git a/plugins/OStatus/lib/feedsubexception.php b/plugins/OStatus/lib/feedsubexception.php
new file mode 100644 (file)
index 0000000..8d65881
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+class FeedSubException extends Exception
+{
+    function __construct($msg=null)
+    {
+        $type = get_class($this);
+        if ($msg) {
+            parent::__construct("$type: $msg");
+        } else {
+            parent::__construct($type);
+        }
+    }
+}
index 83be963c77cca4ed55ba6aa372ac4a35ad93bfee..2097ffa77f87e04378037e8f91c09922176ee793 100644 (file)
@@ -71,7 +71,19 @@ class Salmon
             common_log(LOG_ERR, "Salmon post to $endpoint_uri failed: " . $e->getMessage());
             return false;
         }
-        if ($response->getStatus() != 200) {
+
+        // Diaspora wants a slightly different formatting on the POST (other Content-type, so body needs "xml=")
+        if ($response->getStatus() === 422) {
+            common_debug(sprintf('Salmon (from profile %d) endpoint %s returned status %s. Diaspora? Will try again! Body: %s',
+                                $user->id, $endpoint_uri, $response->getStatus(), $response->getBody()));
+            $headers = array('Content-Type: application/x-www-form-urlencoded');
+            $client->setBody('xml=' . Magicsig::base64_url_encode($envxml));
+            $response = $client->post($endpoint_uri, $headers);
+        }
+
+        // 200 OK is the best response
+        // 202 Accepted is what we get from Diaspora for example
+        if (!in_array($response->getStatus(), array(200, 202))) {
             common_log(LOG_ERR, sprintf('Salmon (from profile %d) endpoint %s returned status %s: %s',
                                 $user->id, $endpoint_uri, $response->getStatus(), $response->getBody()));
             return false;
index 6fb3d2f9fe20bf175437305ba3004d8e46836e63..5193d302f1e1ebf7a7f096acf0a9ed7c5ba1044b 100644 (file)
@@ -41,13 +41,27 @@ class SalmonAction extends Action
 
         parent::prepare($args);
 
-        if (!isset($_SERVER['CONTENT_TYPE']) || $_SERVER['CONTENT_TYPE'] != 'application/magic-envelope+xml') {
-            // TRANS: Client error. Do not translate "application/magic-envelope+xml".
-            $this->clientError(_m('Salmon requires "application/magic-envelope+xml".'));
+        if (!isset($_SERVER['CONTENT_TYPE'])) {
+            // TRANS: Client error. Do not translate "Content-type"
+            $this->clientError(_m('Salmon requires a Content-type header.'));
+        }
+        $envxml = null;
+        switch ($_SERVER['CONTENT_TYPE']) {
+        case 'application/magic-envelope+xml':
+            $envxml = file_get_contents('php://input');
+            break;
+        case 'application/x-www-form-urlencoded':
+            $envxml = Magicsig::base64_url_decode($this->trimmed('xml'));
+            break;
+        default:
+            // TRANS: Client error. Do not translate the quoted "application/[type]" strings.
+            $this->clientError(_m('Salmon requires "application/magic-envelope+xml". For Diaspora we also accept "application/x-www-form-urlencoded" with an "xml" parameter.', 415));
         }
 
         try {
-            $envxml = file_get_contents('php://input');
+            if (empty($envxml)) {
+                throw new ClientException('No magic envelope supplied in POST.');
+            }
             $magic_env = new MagicEnvelope($envxml);   // parse incoming XML as a MagicEnvelope
 
             $entry = $magic_env->getPayload();  // Not cryptographically verified yet!
index ece19804420a1841d6a598ff98d1274137dae9ca..3d726749202f82eb1471efc220b63899d174d076 100644 (file)
@@ -54,10 +54,28 @@ print "\n";
 print "Re-running feed discovery for profile URL $oprofile->uri\n";
 // @fixme will bork where the URI isn't the profile URL for now
 $discover = new FeedDiscovery();
-$feedurl = $discover->discoverFromURL($oprofile->uri);
+try {
+    $feedurl = $discover->discoverFromURL($oprofile->uri);
+    $salmonuri = $discover->getAtomLink(Salmon::REL_SALMON)
+                    ?: $discover->getAtomLink(Salmon::NS_REPLIES);  // NS_REPLIES is deprecated
+} catch (FeedSubException $e) {
+    $acct = $oprofile->localProfile()->getAcctUri();
+    print "Could not discover feeds HTML response, trying reconstructed acct URI: " . $acct;
+    $disco = new Discovery();
+    $xrd = $disco->lookup($acct);
+    $hints = DiscoveryHints::fromXRD($xrd);
+
+    if (!array_key_exists('feedurl', $hints)) {
+        throw new FeedSubNoFeedException($acct);
+    }
+    $feedurl = $hints['feedurl'];
+    $salmonuri = array_key_exists('salmon', $hints) ? $hints['salmon'] : null;
+
+    // get the hub data too and put it in the FeedDiscovery object
+    $discover->discoverFromFeedUrl($feedurl);
+}
+
 $huburi = $discover->getHubLink();
-$salmonuri = $discover->getAtomLink(Salmon::REL_SALMON)
-                ?: $discover->getAtomLink(Salmon::NS_REPLIES);
 
 print "  Feed URL: $feedurl\n";
 print "  Hub URL: $huburi\n";
index a2e3d8c49b781868e67c1e1cf5b061b6b79a6abc..1d7a17ca2c87fff49e647f7345c7dcc53e62357a 100644 (file)
@@ -71,7 +71,7 @@ class OfflineBackupPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'OfflineBackup',
                             'version' => GNUSOCIAL_VERSION,
index d5b9dfa0da5138020f3763ae23ec9d305a434eb9..06c75f7a930daee5b64ec3dd01f469a5d6f29b56 100644 (file)
@@ -49,7 +49,7 @@ class OpenExternalLinkTargetPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'OpenExternalLinkTarget',
                             'version' => GNUSOCIAL_VERSION,
index 3ba2f4e5abb5d34354e8c659ad08d7ecf28b85ef..710a34410ac6e81551fb94068a26bae84e022463 100644 (file)
@@ -615,7 +615,7 @@ class OpenIDPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'OpenID',
                             'version' => GNUSOCIAL_VERSION,
index 6385d82102b6742f4e485a03c6160edaa88a2a72..8d80197be35aeed6e7933a07ad5e244d2e232264 100644 (file)
@@ -199,7 +199,7 @@ ENDOFSCRIPT;
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'OpenX',
                             'version' => GNUSOCIAL_VERSION,
index 2e57cae9d1e22db42028e9488fa359a8ff0fa205..0b57fb4ccc222e047f56a3644a3ed2c73e8be2fc 100644 (file)
@@ -32,7 +32,7 @@ class OpportunisticQMPlugin extends Plugin {
         return true;
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'OpportunisticQM',
                             'version' => GNUSOCIAL_VERSION,
index e788c464e605f42b36d90f3fa9578ad774d13f97..5abd27e9ee52854b094c87b92a90cc0888f7c5c3 100644 (file)
@@ -159,7 +159,7 @@ class OrbitedPlugin extends RealtimePlugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Orbited',
                             'version' => GNUSOCIAL_VERSION,
index 7b8be7900f10beb0d83901a7fe14471013b4daea..fa5894a8f5386e6750675878b4967c84cdbe598f 100644 (file)
@@ -103,7 +103,7 @@ ENDOFPIWIK;
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'PiwikAnalytics',
                             'version' => GNUSOCIAL_VERSION,
index 92886dcc28defac7a39bb83d5a9b0a842fe69dcb..53a491ef4776918d27ae6db14848bcc95d06c37e 100644 (file)
@@ -120,7 +120,7 @@ class PollPlugin extends MicroAppPlugin
      *
      * @return value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Poll',
                             'version' => self::VERSION,
index 3b4ccd272b258afd485a758e6866b7106e142008..120feee8fe0c88c92260d683ad44f3822a910cd3 100644 (file)
@@ -48,7 +48,7 @@ class PostDebugPlugin extends Plugin
         }
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'PostDebug',
                             'version' => GNUSOCIAL_VERSION,
index 7696333145afd0106753e1c62561fcfa7556a20b..0e23a5f64eeda27abc9813bd1492ddd47a75f508 100644 (file)
@@ -57,7 +57,7 @@ class PtitUrlPlugin extends UrlShortenerPlugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => sprintf('PtitUrl (%s)', $this->shortenerName),
                             'version' => GNUSOCIAL_VERSION,
index a476c2af56540cf93405e68c165ac641566d7354..e8c983eb9ae5d2c0bfae6c5433c43716703536ad 100644 (file)
@@ -124,7 +124,7 @@ class QnAPlugin extends MicroAppPlugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array(
             'name'        => 'QnA',
@@ -260,7 +260,7 @@ class QnAPlugin extends MicroAppPlugin
      * @return boolean hook value
      */
 
-    function onStartOpenNoticeListItemElement($nli)
+    function onStartOpenNoticeListItemElement(NoticeListItem $nli)
     {
         $type = $nli->notice->object_type;
 
@@ -325,7 +325,7 @@ class QnAPlugin extends MicroAppPlugin
      *
      * @todo FIXME: WARNING WARNING WARNING this closes a 'div' that is implicitly opened in BookmarkPlugin's showNotice implementation
      */
-    function onStartShowNoticeItem($nli)
+    function onStartShowNoticeItem(NoticeListItem $nli)
     {
         if (!$this->isMyNotice($nli->notice)) {
             return true;
index 55f73783fa4785bf4d2ee8ce8201712000bca83f..0fff0947a288020217dd4c9d56fd39013ed312e6 100644 (file)
@@ -198,7 +198,7 @@ class RSSCloudPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'RSSCloud',
                             'version' => RSSCLOUDPLUGIN_VERSION,
index 946c604e65c52f1b3805ed92dec25c8a2094669d..c039dd5350148f80ccc46b406bf6e58d6ab563ec 100644 (file)
@@ -104,7 +104,7 @@ class RecaptchaPlugin extends Plugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Recaptcha',
                             'version' => GNUSOCIAL_VERSION,
index dbff2bace8c853842a75f0e95da6eba93679187f..9d3be3b8a26bdea267a036133e3cce4b0973e090 100644 (file)
@@ -175,7 +175,7 @@ class RegisterThrottlePlugin extends Plugin
      *
      * @return boolean hook value
      */
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'RegisterThrottle',
                             'version' => GNUSOCIAL_VERSION,
index f7e17f80c8dd190549be5ad252d2c172722ac4c5..a37a3918f69c4f868899c70fb394f842e3c2c8ff 100644 (file)
@@ -209,7 +209,7 @@ class RequireValidatedEmailPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] =
           array('name' => 'Require Validated Email',
index 959648bc8909ee3fb833c62e68a02b4cacbfc2ab..9a85a974aec9a4498e1ae0492ad07c332d715419 100644 (file)
@@ -57,7 +57,7 @@ class ReverseUsernameAuthenticationPlugin extends AuthenticationPlugin
         return User::register($registration_data);
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Reverse Username Authentication',
                             'version' => GNUSOCIAL_VERSION,
index a29a7f5bea218237b870c58e636c56df94bb5853..a7912844c2421436b9f413ecc1a9fad44ea90e5b 100644 (file)
@@ -31,7 +31,7 @@ class SQLProfilePlugin extends Plugin
 {
     private $recursionGuard = false;
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'SQLProfile',
                             'version' => GNUSOCIAL_VERSION,
index b20f72be424cd396ad28c511acbb7a4f377846d7..f67ed03012e695b1847f51f55eb3b7f06a3993d7 100644 (file)
@@ -34,7 +34,7 @@ class SQLStatsPlugin extends Plugin
     protected $queryTimes = array();
     protected $queries    = array();
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'SQLStats',
                             'version' => GNUSOCIAL_VERSION,
index 8758013a4147fc85dd7f98906df5a88405190c9a..80c46d17c4887e13975d730f5fbe5548edfc211e 100644 (file)
@@ -222,7 +222,7 @@ class SamplePlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Sample',
                             'version' => GNUSOCIAL_VERSION,
index dc7ff7b19a2fff843bb2db3e85ec3d696cd0d2af..57984d0e01b03e2dea8ea000e6a1ae11890683cb 100644 (file)
@@ -88,7 +88,7 @@ class SearchSubPlugin extends Plugin
      *
      * @return value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'SearchSub',
                             'version' => self::VERSION,
index bb09b94605dd853f28eeea8e18f2c2c7b8bea33a..7a6fd28feee10b5d9776611df46f3c2fc8957543 100644 (file)
@@ -209,7 +209,7 @@ class FacebookShareTarget extends NoticeShareTarget
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:ShareNotice';
 
index 574b466df659b43fd9df0571d7fb218d65c13f77..41e1998483b771928b37b8f6bb9647c966bb271c 100644 (file)
@@ -47,7 +47,7 @@ class SimpleUrlPlugin extends UrlShortenerPlugin
         return $this->http_get(sprintf($this->serviceUrl,urlencode($url)));
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => sprintf('SimpleUrl (%s)', $this->shortenerName),
                             'version' => GNUSOCIAL_VERSION,
index 3d83629bb2dc1acfa59b6f2d1e61bcaf6d6d752d..a1fe90b4b42e4313769735217e423b68b98f33e9 100644 (file)
@@ -174,7 +174,7 @@ class SitemapPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:Sitemap';
 
index 92d1f55c3f5d365bcb50d2d36601a57dfa6ba0fd..4e1129536db36cbc8c6d422b6956ee8823eff0f5 100644 (file)
@@ -95,7 +95,7 @@ class SlicedFavoritesPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:SlicedFavorites';
 
index be7fc9536861c7f3bc77066e355ea437e849a2a0..74744f18e63bd7439c1004b6f1499160d52c2fc3 100644 (file)
@@ -105,7 +105,7 @@ class SphinxSearchPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:SphinxSearch';
 
index 675642135c4d2ef4bcf5d8035ac9f38ae65e3e9b..74a643d6d939c96200dfb16da19914f8864c35f2 100644 (file)
@@ -50,7 +50,7 @@ class StrictTransportSecurityPlugin extends Plugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'StrictTransportSecurity',
                             'version' => GNUSOCIAL_VERSION,
index a21cb4355131d5c658fac811b27dcd566563d409..27fc7c984d03e65ba680723261058f61e685f1d0 100644 (file)
@@ -57,7 +57,7 @@ class SubMirrorPlugin extends Plugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'SubMirror',
                             'version' => GNUSOCIAL_VERSION,
index b19a03d11c1d554d799be0514a440b4d0dd76d51..fec91afdb78d859efd0ed72be1028802e079596f 100644 (file)
@@ -157,7 +157,7 @@ class SubscriptionThrottlePlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'SubscriptionThrottle',
                             'version' => GNUSOCIAL_VERSION,
index 0dd7a902efe1d8868a5607a83468ed43791c9181..df692988882d25a523bcadc9263d3577ff3c487a 100644 (file)
@@ -44,7 +44,7 @@ class TabFocusPlugin extends Plugin
         $action->script($this->path('tabfocus.js'));
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'TabFocus',
                             'version' => GNUSOCIAL_VERSION,
index ef58553d2eb3f28a548d251efcfdc977ab98c490..f1d1ab462229d1f3209d4f4b97c45e67959bf43f 100644 (file)
@@ -89,7 +89,7 @@ class TagSubPlugin extends Plugin
      *
      * @return value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'TagSub',
                             'version' => self::VERSION,
index d9414a8e8c427866d1e01ddff33ea9edc6c18182..52e51843923a95952f2a9c48b46c5e6de34a3032 100644 (file)
@@ -57,7 +57,7 @@ class TightUrlPlugin extends UrlShortenerPlugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => sprintf('TightUrl (%s)', $this->shortenerName),
                             'version' => GNUSOCIAL_VERSION,
index 643591cf775e1fb8d62ad6c75964e43e78c656b8..9b129ea21be69067f84d50ad20ec96bc1d740eae 100644 (file)
@@ -297,7 +297,7 @@ class TwitterBridgePlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array(
             'name' => 'TwitterBridge',
index a5fc470e079e19af0d9294837945130f8b0656cf..d2afeaced85346c4f6aae441db7466d6893e3438 100644 (file)
@@ -227,7 +227,7 @@ class UserFlagPlugin extends Plugin
      *
      * @return boolean hook value
      */
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $url = 'http://status.net/wiki/Plugin:UserFlag';
 
index f881e9006a210a66ff227950ca01da7a568e8d1c..ac4d503151d569d1d619c52776efe3bab3d31b14 100644 (file)
@@ -81,7 +81,7 @@ class UserLimitPlugin extends Plugin
         }
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'UserLimit',
                             'version' => GNUSOCIAL_VERSION,
index 23af7e00ac433676ae53f1e91c91f1feebd6dfd2..32ce37c1cf2945d4286f6d0e9177ec0aa44f440a 100644 (file)
@@ -69,7 +69,7 @@ class VideoThumbnailsPlugin extends Plugin
         return false;
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'Video Thumbnails',
                             'version' => GNUSOCIAL_VERSION,
index 6f8ec9397d34a72dc82cc45b903be947f0beff9f..91dc9b53f797f060d65e47f8e361566d949bf9b9 100644 (file)
@@ -153,7 +153,7 @@ class WebFingerPlugin extends Plugin
         }
     }
 
-    public function onPluginVersion(&$versions)
+    public function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'WebFinger',
                             'version' => GNUSOCIAL_VERSION,
index f0baa597ce8489d923b4be8960efe42595a26cae..db33eb801ab173b886419bae290c53850df6a340 100644 (file)
@@ -104,7 +104,7 @@ class WikiHashtagsPlugin extends Plugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'WikiHashtags',
                             'version' => self::VERSION,
index b058cc3b6530886f50a070c1ef07a36bbe66daaf..8656272e48c85068be643d352295f9e9660ddfb1 100644 (file)
@@ -49,7 +49,7 @@ if (!defined('STATUSNET')) {
  */
 class WikiHowProfilePlugin extends Plugin
 {
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'WikiHow avatar fetcher',
                             'version' => GNUSOCIAL_VERSION,
index d95ffcf0d6d0d2bd636546b276b5ace8407a49eb..0a702687359e1c95fa76b50943f7d61a887e872f 100644 (file)
@@ -462,7 +462,7 @@ class XmppPlugin extends ImPlugin
     }
 
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array('name' => 'XMPP',
                             'version' => GNUSOCIAL_VERSION,
index 949f40e79167b15db2c64987a6c8eb324b2c1564..040d259554ccc99b0db2f2b579e426489921288b 100644 (file)
@@ -2103,11 +2103,13 @@ width:14.5%;
 
 .mark-top {
     border-top: 1px solid #ccc;
+    padding-top: 5px;
 }
 
 #realtime_actions {
     position: relative !important;
     right: -4px !important;
+    top: -65px !important;
     float: right;
     padding-top: 15px;
     margin-bottom: -8px !important;
index 8af4a32cb38cf8c49b17a1bfe73f20f78a5cb2fc..967b6d62ffbd63df9abf282b23492958c59c9699 100644 (file)
@@ -1322,6 +1322,7 @@ div.entry-content a.response:after {
 
 #realtime_actions {
     padding-top: 0px !important;
+    top: -25px !important;
 }
 
 #realtime_actions button {