]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Added scripts/command.php, can be used to run commands such as subscription on behalf...
authorBrion Vibber <brion@pobox.com>
Tue, 9 Mar 2010 21:41:05 +0000 (13:41 -0800)
committerBrion Vibber <brion@pobox.com>
Tue, 9 Mar 2010 21:41:05 +0000 (13:41 -0800)
This includes whatever support for extended command parsing plugins may have added.

Example:
  ./scripts/command.php -nbrionv sub update@status.net

lib/channel.php
scripts/command.php [new file with mode: 0755]

index 3cd168786c9d69e89343170e19cdda7bf27a308c..689bca0be98a8028966812aa578569dbc3efdb7d 100644 (file)
@@ -47,6 +47,25 @@ class Channel
     }
 }
 
+class CLIChannel extends Channel
+{
+    function source()
+    {
+        return 'cli';
+    }
+
+    function output($user, $text)
+    {
+        $site = common_config('site', 'name');
+        print "[{$user->nickname}@{$site}] $text\n";
+    }
+
+    function error($user, $text)
+    {
+        $this->output($user, $text);
+    }
+}
+
 class XMPPChannel extends Channel
 {
 
diff --git a/scripts/command.php b/scripts/command.php
new file mode 100755 (executable)
index 0000000..6041b02
--- /dev/null
@@ -0,0 +1,80 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, 2010 StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'i:n:';
+$longoptions = array('id=', 'nickname=');
+
+$helptext = <<<END_OF_USERROLE_HELP
+command.php [options] [command line]
+Perform commands on behalf of a user, such as sub, unsub, join, drop
+
+  -i --id       ID of the user
+  -n --nickname nickname of the user
+
+END_OF_USERROLE_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+
+
+function interpretCommand($user, $body)
+{
+    $inter = new CommandInterpreter();
+    $chan = new CLIChannel();
+    $cmd = $inter->handle_command($user, $body);
+    if ($cmd) {
+        $cmd->execute($chan);
+        return true;
+    } else {
+        $chan->error($user, "Not a valid command. Try 'help'?");
+        return false;
+    }
+}
+
+
+
+if (have_option('i', 'id')) {
+    $id = get_option_value('i', 'id');
+    $user = User::staticGet('id', $id);
+    if (empty($user)) {
+        print "Can't find user with ID $id\n";
+        exit(1);
+    }
+} else if (have_option('n', 'nickname')) {
+    $nickname = get_option_value('n', 'nickname');
+    $user = User::staticGet('nickname', $nickname);
+    if (empty($user)) {
+        print "Can't find user with nickname '$nickname'\n";
+        exit(1);
+    }
+} else {
+    print "You must provide either an ID or a nickname.\n\n";
+    print $helptext;
+    exit(1);
+}
+
+// @todo refactor the interactive console in console.php and use
+// that to optionally make an interactive test console here too.
+// Would be good to help people test commands when XMPP or email
+// isn't available locally.
+interpretCommand($user, implode(' ', $args));
+