]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/commandinterpreter.php
Misses this file to merge. I like the comments.
[quix0rs-gnu-social.git] / lib / commandinterpreter.php
index fbc6174bbfab1b95a2d9573df2043e3688cf9a0f..d2b744e93d79c41554dc2788277efcc7f3f6883c 100644 (file)
@@ -25,258 +25,292 @@ class CommandInterpreter
 {
     function handle_command($user, $text)
     {
-        # XXX: localise
+        // XXX: localise
 
         $text = preg_replace('/\s+/', ' ', trim($text));
-        list($cmd, $arg) = $this->split_arg($text);
+        list($cmd, $arg) = self::split_arg($text);
 
-        # We try to support all the same commands as Twitter, see
-        # http://getsatisfaction.com/twitter/topics/what_are_the_twitter_commands
-        # There are a few compatibility commands from earlier versions of
-        # StatusNet
+        // We try to support all the same commands as Twitter, see
+        // http://getsatisfaction.com/twitter/topics/what_are_the_twitter_commands
+        // There are a few compatibility commands from earlier versions of
+        // StatusNet
 
-        switch(strtolower($cmd)) {
-         case 'help':
-            if ($arg) {
-                return null;
-            }
-            return new HelpCommand($user);
-         case 'login':
-            if ($arg) {
-                return null;
-            } else {
-                return new LoginCommand($user);
-            }
-         case 'lose':
-            if ($arg) {
-                list($other, $extra) = $this->split_arg($arg);
-                if ($extra) {
-                    return null;
+        $cmd = strtolower($cmd);
+
+        if (Event::handle('StartInterpretCommand', array($cmd, $arg, $user, &$result))) {
+            switch($cmd) {
+            case 'help':
+                if ($arg) {
+                    $result = null;
                 } else {
-                    return new LoseCommand($user, $other);
+                    $result = new HelpCommand($user);
                 }
-            } else {
-              return null;
-            }
-         case 'subscribers':
-            if ($arg) {
-                return null;
-            } else {
-                return new SubscribersCommand($user);
-            }
-         case 'subscriptions':
-            if ($arg) {
-                return null;
-            } else {
-                return new SubscriptionsCommand($user);
-            }
-         case 'groups':
-            if ($arg) {
-                return null;
-            } else {
-                return new GroupsCommand($user);
-            }
-         case 'on':
-            if ($arg) {
-                list($other, $extra) = $this->split_arg($arg);
-                if ($extra) {
-                    return null;
+                break;
+            case 'login':
+                if ($arg) {
+                    $result = null;
                 } else {
-                    return new OnCommand($user, $other);
+                    $result = new LoginCommand($user);
                 }
-            } else {
-                return new OnCommand($user);
-            }
-         case 'off':
-            if ($arg) {
-                list($other, $extra) = $this->split_arg($arg);
+                break;
+            case 'lose':
+                if ($arg) {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new LoseCommand($user, $other);
+                    }
+                } else {
+                    $result = null;
+                }
+                break;
+            case 'subscribers':
+                if ($arg) {
+                    $result = null;
+                } else {
+                    $result = new SubscribersCommand($user);
+                }
+                break;
+            case 'subscriptions':
+                if ($arg) {
+                    $result = null;
+                } else {
+                    $result = new SubscriptionsCommand($user);
+                }
+                break;
+            case 'groups':
+                if ($arg) {
+                    $result = null;
+                } else {
+                    $result = new GroupsCommand($user);
+                }
+                break;
+            case 'on':
+                if ($arg) {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new OnCommand($user, $other);
+                    }
+                } else {
+                    $result = new OnCommand($user);
+                }
+                break;
+            case 'off':
+                if ($arg) {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new OffCommand($user, $other);
+                    }
+                } else {
+                    $result = new OffCommand($user);
+                }
+                break;
+            case 'stop':
+            case 'quit':
+                if ($arg) {
+                    $result = null;
+                } else {
+                    $result = new OffCommand($user);
+                }
+                break;
+            case 'join':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new JoinCommand($user, $other);
+                    }
+                }
+                break;
+            case 'drop':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new DropCommand($user, $other);
+                    }
+                }
+                break;
+            case 'follow':
+            case 'sub':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new SubCommand($user, $other);
+                    }
+                }
+                break;
+            case 'leave':
+            case 'unsub':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new UnsubCommand($user, $other);
+                    }
+                }
+                break;
+            case 'get':
+            case 'last':
+                if (!$arg) {
+                    $result = null;
+                }
+                list($other, $extra) = self::split_arg($arg);
                 if ($extra) {
-                    return null;
+                    $result = null;
                 } else {
-                    return new OffCommand($user, $other);
+                    $result = new GetCommand($user, $other);
                 }
-            } else {
-                return new OffCommand($user);
-            }
-         case 'stop':
-         case 'quit':
-            if ($arg) {
-                return null;
-            } else {
-                return new OffCommand($user);
-            }
-         case 'join':
-             if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new JoinCommand($user, $other);
-            }
-         case 'drop':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new DropCommand($user, $other);
-            }
-         case 'follow':
-         case 'sub':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new SubCommand($user, $other);
-            }
-         case 'leave':
-         case 'unsub':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new UnsubCommand($user, $other);
-            }
-         case 'get':
-         case 'last':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new GetCommand($user, $other);
-            }
-         case 'd':
-         case 'dm':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if (!$extra) {
-                return null;
-            } else {
-                return new MessageCommand($user, $other, $extra);
-            }
-         case 'r':
-         case 'reply':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if (!$extra) {
-                return null;
-            } else {
-                return new ReplyCommand($user, $other, $extra);
-            }
-         case 'repeat':
-         case 'rp':
-         case 'rt':
-         case 'rd':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new RepeatCommand($user, $other);
-            }
-         case 'whois':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new WhoisCommand($user, $other);
-            }
-         case 'fav':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new FavCommand($user, $other);
-            }
-         case 'nudge':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new NudgeCommand($user, $other);
-            }
-         case 'stats':
-            if ($arg) {
-                return null;
-            }
-            return new StatsCommand($user);
-         case 'invite':
-            if (!$arg) {
-                return null;
-            }
-            list($other, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else {
-                return new InviteCommand($user, $other);
-            }
-         case 'track':
-            if (!$arg) {
-                return null;
-            }
-            list($word, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else if ($word == 'off') {
-                return new TrackOffCommand($user);
-            } else {
-                return new TrackCommand($user, $word);
-            }
-         case 'untrack':
-            if (!$arg) {
-                return null;
-            }
-            list($word, $extra) = $this->split_arg($arg);
-            if ($extra) {
-                return null;
-            } else if ($word == 'all') {
-                return new TrackOffCommand($user);
-            } else {
-                return new UntrackCommand($user, $word);
-            }
-         case 'tracks':
-         case 'tracking':
-            if ($arg) {
-                return null;
+                break;
+            case 'r':
+            case 'reply':
+                if (!$arg) {
+                    $result = null;
+                }
+                list($other, $extra) = self::split_arg($arg);
+                if (!$extra) {
+                    $result = null;
+                } else {
+                    $result = new ReplyCommand($user, $other, $extra);
+                }
+                break;
+            case 'whois':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new WhoisCommand($user, $other);
+                    }
+                }
+                break;
+            case 'nudge':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new NudgeCommand($user, $other);
+                    }
+                }
+                break;
+            case 'stats':
+                if ($arg) {
+                    $result = null;
+                } else {
+                    $result = new StatsCommand($user);
+                }
+                break;
+            case 'invite':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($other, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else {
+                        $result = new InviteCommand($user, $other);
+                    }
+                }
+                break;
+             case 'list':
+             case 'tag':
+                if (!$arg) {
+                    $result = null;
+                    break;
+                }
+                list($other, $tags) = self::split_arg($arg);
+                if (!$tags) {
+                    $result = null;
+                } else {
+                    $result = new TagCommand($user, $other, $tags);
+                }
+                break;
+             case 'unlist':
+             case 'untag':
+                if (!$arg) {
+                    $result = null;
+                    break;
+                }
+                list($other, $tags) = self::split_arg($arg);
+                if (!$tags) {
+                    $result = null;
+                } else {
+                    $result = new UntagCommand($user, $other, $tags);
+                }
+                break;
+            case 'track':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($word, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else if ($word == 'off') {
+                        $result = new TrackOffCommand($user);
+                    } else {
+                        $result = new TrackCommand($user, $word);
+                    }
+                }
+                break;
+            case 'untrack':
+                if (!$arg) {
+                    $result = null;
+                } else {
+                    list($word, $extra) = self::split_arg($arg);
+                    if ($extra) {
+                        $result = null;
+                    } else if ($word == 'all') {
+                        $result = new TrackOffCommand($user);
+                    } else {
+                        $result = new UntrackCommand($user, $word);
+                    }
+                }
+                break;
+            case 'tracks':
+            case 'tracking':
+                if ($arg) {
+                    $result = null;
+                } else {
+                    $result = new TrackingCommand($user);
+                }
+                break;
+            default:
+                $result = false;
             }
-            return new TrackingCommand($user);
-         default:
-            return false;
+
+            Event::handle('EndInterpretCommand', array($cmd, $arg, $user, &$result));
         }
+
+        return $result;
     }
-    
+
     /**
      * Split arguments without triggering a PHP notice warning
      */
-    function split_arg($text)
+    static function split_arg($text)
     {
         $pieces = explode(' ', $text, 2);
         if (count($pieces) == 1) {
@@ -285,4 +319,3 @@ class CommandInterpreter
         return $pieces;
     }
 }
-