]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merged in Phergie changes
authorLuke Fitzgerald <lw.fitzgerald@googlemail.com>
Sat, 7 Aug 2010 23:31:30 +0000 (16:31 -0700)
committerLuke Fitzgerald <lw.fitzgerald@googlemail.com>
Sat, 7 Aug 2010 23:31:30 +0000 (16:31 -0700)
plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php
plugins/Irc/extlib/phergie/Phergie/Plugin/Exception.php
plugins/Irc/extlib/phergie/Phergie/Plugin/Handler.php
plugins/Irc/extlib/phergie/Phergie/Plugin/Iterator.php
plugins/Irc/extlib/phergie/Phergie/Plugin/Karma.php
plugins/Irc/extlib/phergie/Phergie/Plugin/Php.php

index 5c0a52e91635bd3aacdba48863ade467c27b4456..2058977ed577a5f6c51de570ce722877578a602f 100644 (file)
@@ -109,7 +109,7 @@ class Phergie_Plugin_Command extends Phergie_Plugin_Abstract
 
         // Resolve aliases to their corresponding commands
         $aliases = $this->getConfig('command.aliases', array());
-        $result = preg_grep('/^' . $command . '$/i', array_keys($aliases));
+        $result = preg_grep('/^' . preg_quote($command, '/') . '$/i', array_keys($aliases));
         if ($result) {
             $command = $aliases[array_shift($result)];
         }
index fd07d9d5ea5e180d5a5add7221f80252b655c7dd..ca4d53fede01f843694d61c146c79a75b9d067e4 100755 (executable)
@@ -110,4 +110,11 @@ class Phergie_Plugin_Exception extends Phergie_Exception
      * plugin
      */
     const ERR_FATAL_ERROR = 13;
+
+    /**
+     * Error indicating that a class specified to be used for iterating
+     * plugins cannot be found by the autoloader or does not extend
+     * FilterIterator
+     */
+    const ERR_INVALID_ITERATOR_CLASS = 14;
 }
index 13d2eac8fee195aa85dbc710bbcb59b9e9e6059f..335c10f88153764c5d1236cc862164687d609acc 100755 (executable)
@@ -69,12 +69,12 @@ class Phergie_Plugin_Handler implements IteratorAggregate, Countable
     protected $events;
 
     /**
-     * Iterator used for selectively proxying method calls to contained
+     * Name of the class to use for iterating over all currently loaded
      * plugins
      *
-     * @var Iterator
+     * @var string
      */
-    protected $iterator;
+    protected $iteratorClass = 'Phergie_Plugin_Iterator';
 
     /**
      * Constructor to initialize class properties and add the path for core
@@ -424,25 +424,40 @@ class Phergie_Plugin_Handler implements IteratorAggregate, Countable
      */
     public function getIterator()
     {
-        if (empty($this->iterator)) {
-            $this->iterator = new Phergie_Plugin_Iterator(
-                new ArrayIterator($this->plugins)
-            );
-        }
-        return $this->iterator;
+        return new $this->iteratorClass(
+            new ArrayIterator($this->plugins)
+        );
     }
 
     /**
-     * Sets the iterator for all currently loaded plugin instances.
+     * Sets the iterator class used for all currently loaded plugin
+     * instances.
      *
-     * @param Iterator $iterator Plugin iterator
+     * @param string $class Name of a class that extends FilterIterator
      *
-     * @return Phergie_Plugin_Handler Provides a fluent interface
+     * @return Phergie_Plugin_Handler Provides a fluent API
+     * @throws Phergie_Plugin_Exception Class cannot be found or is not an
+     *         FilterIterator-based class
      */
-    public function setIterator(Iterator $iterator)
+    public function setIteratorClass($class)
     {
-        $this->iterator = $iterator;
-        return $this;
+        $valid = true;
+
+        try {
+            $r = new ReflectionClass($class);
+            $valid = $r->isSubclassOf('FilterIterator');
+        } catch (ReflectionException $e) {
+            $valid = false;
+        }
+
+        if (!$valid) {
+            throw new Phergie_Plugin_Exception(
+                $e->getMessage(),
+                Phergie_Plugin_Exception::ERR_INVALID_ITERATOR_CLASS
+            );
+        }
+
+        $this->iteratorClass = $class;
     }
 
     /**
index 5963300713db04b06df298cab5ae5e9d69fbe2ad..d6109629865bba99e8f26d107c77322d1e90f5a3 100644 (file)
@@ -46,6 +46,22 @@ class Phergie_Plugin_Iterator extends FilterIterator
      */
     protected $methods = array();
 
+    /**
+     * Overrides the parent constructor to reset the internal iterator's
+     * pointer to the current item, which the parent class errantly does not
+     * do.
+     *
+     * @param Iterator $iterator Iterator to filter
+     *
+     * @return void
+     * @link http://bugs.php.net/bug.php?id=52560
+     */
+    public function __construct(Iterator $iterator)
+    {
+        parent::__construct($iterator);
+        $this->rewind();
+    }
+
     /**
      * Adds to a list of plugins to exclude when iterating.
      *
index f55f8d6edf78fb9297ea0048c558ded6105b79af..e6227be4a5506449abe70a2c14e7ab405e5acd77 100644 (file)
@@ -236,7 +236,7 @@ REGEX;
 
         $fixedKarma = $this->fetchFixedKarma($canonicalTerm);
         if ($fixedKarma) {
-            $message = $nick . ': ' . $term . $fixedKarma . '.';
+            $message = $nick . ': ' . $term . ' ' . $fixedKarma . '.';
             $this->doPrivmsg($source, $message);
             return;
         }
index 94abfb031c3f106f35efaf1bbc09a1c71a75633b..e10d101e73d354d7afe159c04fd9f919f4e4d953 100644 (file)
@@ -53,15 +53,7 @@ class Phergie_Plugin_Php extends Phergie_Plugin_Abstract
         }
 
         $this->getPluginHandler()->getPlugin('Command');
-    }
 
-    /**
-     * Initializes the data source. 
-     *
-     * @return void
-     */
-    public function onConnect()
-    {
         $this->source = new Phergie_Plugin_Php_Source_Local;
     }