]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
OStatus: disable HTMLPurify cache unless we've configured a writable path for it.
authorBrion Vibber <brion@pobox.com>
Wed, 24 Feb 2010 22:16:17 +0000 (22:16 +0000)
committerBrion Vibber <brion@pobox.com>
Wed, 24 Feb 2010 22:16:17 +0000 (22:16 +0000)
Updated plugin README with available config options.
Cleanup for a bad element fallback lookup in Activity

lib/activity.php
plugins/OStatus/README
plugins/OStatus/classes/Ostatus_profile.php

index 33932ad0ef9c91e7fbb68ad0ecff50cc1de2b4f2..25727bf2b55314c806b39d390876e183be8d3bbe 100644 (file)
@@ -167,16 +167,18 @@ class PoCo
             PoCo::NS
         );
 
-        $formatted = ActivityUtils::childContent(
-            $addressEl,
-            PoCoAddress::FORMATTED,
-            self::NS
-        );
+        if (!empty($addressEl)) {
+            $formatted = ActivityUtils::childContent(
+                $addressEl,
+                PoCoAddress::FORMATTED,
+                self::NS
+            );
 
-        if (!empty($formatted)) {
-            $address = new PoCoAddress();
-            $address->formatted = $formatted;
-            return $address;
+            if (!empty($formatted)) {
+                $address = new PoCoAddress();
+                $address->formatted = $formatted;
+                return $address;
+            }
         }
 
         return null;
@@ -292,7 +294,7 @@ class ActivityUtils
      * @return string related link, if any
      */
 
-    static function getLink($element, $rel, $type=null)
+    static function getLink(DOMNode $element, $rel, $type=null)
     {
         $links = $element->getElementsByTagnameNS(self::ATOM, self::LINK);
 
@@ -320,7 +322,7 @@ class ActivityUtils
      * @return DOMElement found element or null
      */
 
-    static function child($element, $tag, $namespace=self::ATOM)
+    static function child(DOMNode $element, $tag, $namespace=self::ATOM)
     {
         $els = $element->childNodes;
         if (empty($els) || $els->length == 0) {
@@ -345,7 +347,7 @@ class ActivityUtils
      * @return string content of the child
      */
 
-    static function childContent($element, $tag, $namespace=self::ATOM)
+    static function childContent(DOMNode $element, $tag, $namespace=self::ATOM)
     {
         $el = self::child($element, $tag, $namespace);
 
index cbf3adbb9c095d9c422c6fa8472e117f160044e1..09a59e34978ee555ea98cd07ec67c8ded44fb0a8 100644 (file)
@@ -2,23 +2,37 @@ Plugin to support importing updates from external RSS and Atom feeds into your t
 
 Uses PubSubHubbub for push feed updates; currently non-PuSH feeds cannot be subscribed.
 
+Configuration options available:
+
+$config['ostatus']['hub']
+    (default internal hub)
+    Set to URL of an external PuSH hub to use it instead of our internal hub.
+
+$config['ostatus']['hub_retries']
+    (default 0)
+    Number of times to retry a PuSH send to consumers if using internal hub
+
+$config['ostatus']['purify_cache']
+    (default cache disabled)
+    Set to a writable cache directory for HTMLPurifier's configuration settings, can speed up processing of remote messages (have not tested by how much)
+
+
+For testing, shouldn't be used in production:
+
+$config['ostatus']['skip_signatures']
+    (default use signatures)
+    Disable generation and validation of Salmon magicenv signatures
+
+$config['feedsub']['nohub']
+    (default require hub)
+    Allow low-level feed subscription setup for feeds without hubs.
+    Not actually usable at this stage, OStatus will check for hubs too
+    and we have no polling backend.
+
+
 Todo:
-* set feed icon avatar for actual profiles as well as for preview
-* use channel image and/or favicon for avatar?
-* garbage-collect subscriptions that are no longer being used
-* administrative way to kill feeds?
-* functional l10n
-* clean up subscription form look and workflow
-* use ajax for test/preview in subscription form
-* rssCloud support? (Does anything use it that doesn't support PuSH as well?)
-* possibly a polling daemon to support non-PuSH feeds?
-* likely problems with multiple feeds from the same site, such as category feeds on a blog
-  (currently each feed would publish a separate notice on a separate profile, but pointing to the same post URI.)
-  (could use the local URI I guess, but that's so icky!)
-* problems with Atom feeds that list <link rel="alternate" href="..."/> but don't have the type
-  (such as http://atomgen.appspot.com/feed/5 demo feed); currently it's not recognized and we end up with the feed's master URI
-* make it easier to see what you're subscribed to and unsub from things
-* saner treatment of fullname/nickname?
+* fully functional l10n
+* redo non-OStatus feed support
+** rssCloud support?
+** possibly a polling daemon to support non-PuSH feeds?
 * make use of tags/categories from feeds
-* update feed profile data when it changes
-* XML_Feed_Parser has major problems with category and link tags; consider replacing?
index 5e38a523ead9437e320ae6e2d7c12f76c04b2747..c755a094e6f3bd5ceb5cfff6a4a5c7edbabcf7bb 100644 (file)
@@ -668,9 +668,27 @@ class Ostatus_profile extends Memcached_DataObject
      */
     protected function purify($html)
     {
-        // @fixme disable caching or set a sane temp dir
         require_once(INSTALLDIR.'/extlib/HTMLPurifier/HTMLPurifier.auto.php');
-        $purifier = new HTMLPurifier();
+
+        // By default Purifier wants to cache data to its own code directories,
+        // and spews error messages if they're not writable.
+        $config = HTMLPurifier_Config::createDefault();
+        if (common_config('ostatus', 'purify_cache')) {
+            $config->set('Cache.SerializerPath', common_config('ostatus', 'purify_cache'));
+        } else {
+            // Although recommended in the documentation, this produces a notice:
+            //    "Core.DefinitionCache is an alias, preferred directive name is Cache.DefinitionImpl"
+            // If I then follow *those* directions, I get a warning and it doesn't work:
+            //    "Cannot set undefined directive Core.DefinitionImpl"
+            // So... lesser of two evils. Suppressing the notice from output,
+            // though it'll still be seen and logged by StatusNet's error handler.
+            $old = error_reporting();
+            error_reporting($old & ~E_NOTICE);
+            $config->set('Core.DefinitionCache', null);
+            error_reporting($old);
+        }
+
+        $purifier = new HTMLPurifier($config);
         return $purifier->purify($html);
     }