* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+if (!defined('GNUSOCIAL')) { exit(1); }
require_once(INSTALLDIR.'/lib/channel.php');
class Command
{
+ protected $scoped = null; // The Profile of the user performing the command
var $user = null;
function __construct($user=null)
{
+ $this->scoped = empty($user)?null:$user->getProfile();
$this->user = $user;
}
if(substr($this->other,0,1)=='#'){
// A specific notice_id #123
- $notice = Notice::staticGet(substr($arg,1));
+ $notice = Notice::getKV(substr($arg,1));
if (!$notice) {
// TRANS: Command exception text shown when a notice ID is requested that does not exist.
throw new CommandException(_('Notice with that id does not exist.'));
if (Validate::uri($this->other)) {
// A specific notice by URI lookup
- $notice = Notice::staticGet('uri', $arg);
+ $notice = Notice::getKV('uri', $arg);
}
if (!$notice) {
{
$user = null;
if (Event::handle('StartCommandGetUser', array($this, $arg, &$user))) {
- $user = User::staticGet('nickname', Nickname::normalize($arg));
+ $user = User::getKV('nickname', Nickname::normalize($arg));
}
Event::handle('EndCommandGetUser', array($this, $arg, &$user));
if (!$user){
}
}
-class FavCommand extends Command
-{
- var $other = null;
-
- function __construct($user, $other)
- {
- parent::__construct($user);
- $this->other = $other;
- }
-
- function handle($channel)
- {
- $notice = $this->getNotice($this->other);
-
- $fave = new Fave();
- $fave->user_id = $this->user->id;
- $fave->notice_id = $notice->id;
- $fave->find();
-
- if ($fave->fetch()) {
- // TRANS: Error message text shown when a favorite could not be set because it has already been favorited.
- $channel->error($this->user, _('Could not create favorite: Already favorited.'));
- return;
- }
-
- $fave = Fave::addNew($this->user->getProfile(), $notice);
-
- if (!$fave) {
- // TRANS: Error message text shown when a favorite could not be set.
- $channel->error($this->user, _('Could not create favorite.'));
- return;
- }
-
- // @fixme favorite notification should be triggered
- // at a lower level
-
- $other = User::staticGet('id', $notice->profile_id);
-
- if ($other && $other->id != $this->user->id) {
- if ($other->email && $other->emailnotifyfav) {
- mail_notify_fave($other, $this->user, $notice);
- }
- }
-
- $this->user->blowFavesCache();
-
- // TRANS: Text shown when a notice has been marked as favourite successfully.
- $channel->output($this->user, _('Notice marked as fave.'));
- }
-}
-
class JoinCommand extends Command
{
var $other = null;
}
}
-class MessageCommand extends Command
-{
- var $other = null;
- var $text = null;
- function __construct($user, $other, $text)
- {
- parent::__construct($user);
- $this->other = $other;
- $this->text = $text;
- }
-
- function handle($channel)
- {
- try {
- $other = $this->getUser($this->other);
- } catch (CommandException $e) {
- try {
- $profile = $this->getProfile($this->other);
- } catch (CommandException $f) {
- throw $e;
- }
- // TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
- // TRANS: %s is a remote profile.
- throw new CommandException(sprintf(_('%s is a remote profile; you can only send direct messages to users on the same server.'), $this->other));
- }
-
- $len = mb_strlen($this->text);
-
- if ($len == 0) {
- // TRANS: Command exception text shown when trying to send a direct message to another user without content.
- $channel->error($this->user, _('No content!'));
- return;
- }
-
- $this->text = $this->user->shortenLinks($this->text);
-
- if (Message::contentTooLong($this->text)) {
- // XXX: i18n. Needs plural support.
- // TRANS: Message given if content is too long. %1$sd is used for plural.
- // TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
- $channel->error($this->user, sprintf(_m('Message too long - maximum is %1$d character, you sent %2$d.',
- 'Message too long - maximum is %1$d characters, you sent %2$d.',
- Message::maxContent()),
- Message::maxContent(), mb_strlen($this->text)));
- return;
- }
-
- if (!$other) {
- // TRANS: Error text shown when trying to send a direct message to a user that does not exist.
- $channel->error($this->user, _('No such user.'));
- return;
- } else if (!$this->user->mutuallySubscribed($other)) {
- // TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
- $channel->error($this->user, _('You can\'t send a message to this user.'));
- return;
- } else if ($this->user->id == $other->id) {
- // TRANS: Error text shown when trying to send a direct message to self.
- $channel->error($this->user, _('Don\'t send a message to yourself; just say it to yourself quietly instead.'));
- return;
- }
- $message = Message::saveNew($this->user->id, $other->id, $this->text, $channel->source());
- if ($message) {
- $message->notify();
- // TRANS: Message given have sent a direct message to another user.
- // TRANS: %s is the name of the other user.
- $channel->output($this->user, sprintf(_('Direct message to %s sent.'), $this->other));
- } else {
- // TRANS: Error text shown sending a direct message fails with an unknown reason.
- $channel->error($this->user, _('Error sending direct message.'));
- }
- }
-}
-
-class RepeatCommand extends Command
-{
- var $other = null;
- function __construct($user, $other)
- {
- parent::__construct($user);
- $this->other = $other;
- }
-
- function handle($channel)
- {
- $notice = $this->getNotice($this->other);
-
- try {
- $repeat = $notice->repeat($this->user->id, $channel->source());
- $recipient = $notice->getProfile();
-
- // TRANS: Message given having repeated a notice from another user.
- // TRANS: %s is the name of the user for which the notice was repeated.
- $channel->output($this->user, sprintf(_('Notice from %s repeated.'), $recipient->nickname));
- } catch (Exception $e) {
- $channel->error($this->user, $e->getMessage());
- }
- }
-}
-
class ReplyCommand extends Command
{
var $other = null;
$target = $this->getProfile($this->other);
- $remote = Remote_profile::staticGet('id', $target->id);
- if ($remote) {
- // TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
- throw new CommandException(_("Can't subscribe to OMB profiles by command."));
- }
-
try {
- Subscription::start($this->user->getProfile(),
- $target);
+ Subscription::start($this->user->getProfile(), $target);
// TRANS: Text shown after having subscribed to another user successfully.
// TRANS: %s is the name of the user the subscription was requested for.
$channel->output($this->user, sprintf(_('Subscribed to %s.'), $this->other));
$target = $this->getProfile($this->other);
try {
- Subscription::cancel($this->user->getProfile(),
- $target);
+ Subscription::cancel($this->user->getProfile(), $target);
// TRANS: Text shown after having unsubscribed from another user successfully.
// TRANS: %s is the name of the user the unsubscription was requested for.
$channel->output($this->user, sprintf(_('Unsubscribed from %s.'), $this->other));
{
function handle($channel)
{
- $profile = $this->user->getSubscriptions(0);
+ $profile = $this->user->getSubscribed(0);
$nicknames=array();
while ($profile->fetch()) {
$nicknames[]=$profile->nickname;
{
$group = $this->user->getGroups();
$groups=array();
- while ($group->fetch()) {
+ while ($group instanceof User_group && $group->fetch()) {
$groups[]=$group->nickname;
}
if(count($groups)==0){
"whois <nickname>" => _m('COMMANDHELP', "get profile info on user"),
// TRANS: Help message for IM/SMS command "lose <nickname>".
"lose <nickname>" => _m('COMMANDHELP', "force user to stop following you"),
- // TRANS: Help message for IM/SMS command "fav <nickname>".
- "fav <nickname>" => _m('COMMANDHELP', "add user's last notice as a 'fave'"),
- // TRANS: Help message for IM/SMS command "fav #<notice_id>".
- "fav #<notice_id>" => _m('COMMANDHELP', "add notice with the given id as a 'fave'"),
- // TRANS: Help message for IM/SMS command "repeat #<notice_id>".
- "repeat #<notice_id>" => _m('COMMANDHELP', "repeat a notice with a given id"),
- // TRANS: Help message for IM/SMS command "repeat <nickname>".
- "repeat <nickname>" => _m('COMMANDHELP', "repeat the last notice from user"),
// TRANS: Help message for IM/SMS command "reply #<notice_id>".
"reply #<notice_id>" => _m('COMMANDHELP', "reply to notice with a given id"),
// TRANS: Help message for IM/SMS command "reply <nickname>".
// Give plugins a chance to add or override...
Event::handle('HelpCommandMessages', array($this, &$commands));
+
+ ksort($commands);
foreach ($commands as $command => $help) {
$out[] = "$command - $help";
}