]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
repeat actions to Share plugin
authorMikael Nordfeldth <mmn@hethane.se>
Thu, 12 Mar 2015 20:46:10 +0000 (21:46 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Thu, 12 Mar 2015 20:46:10 +0000 (21:46 +0100)
12 files changed:
actions/apistatusesretweet.php [deleted file]
actions/apistatusesretweets.php [deleted file]
actions/apitimelineretweetedbyme.php [deleted file]
actions/apitimelineretweetedtome.php [deleted file]
actions/apitimelineretweetsofme.php [deleted file]
actions/repeat.php [deleted file]
plugins/Share/actions/apistatusesretweet.php [new file with mode: 0644]
plugins/Share/actions/apistatusesretweets.php [new file with mode: 0644]
plugins/Share/actions/apitimelineretweetedbyme.php [new file with mode: 0644]
plugins/Share/actions/apitimelineretweetedtome.php [new file with mode: 0644]
plugins/Share/actions/apitimelineretweetsofme.php [new file with mode: 0644]
plugins/Share/actions/repeat.php [new file with mode: 0644]

diff --git a/actions/apistatusesretweet.php b/actions/apistatusesretweet.php
deleted file mode 100644 (file)
index 922d395..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Repeat a notice through the API
- *
- * PHP version 5
- *
- * LICENCE: 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/>.
- *
- * @category  API
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('GNUSOCIAL')) { exit(1); }
-
-/**
- * Repeat a notice through the API
- *
- * @category API
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://status.net/
- */
-class ApiStatusesRetweetAction extends ApiAuthAction
-{
-    protected $needPost = true;
-
-    var $original = null;
-
-    /**
-     * Take arguments for running
-     *
-     * @param array $args $_REQUEST args
-     *
-     * @return boolean success flag
-     */
-    protected function prepare(array $args=array())
-    {
-        parent::prepare($args);
-
-        $id = $this->trimmed('id');
-
-        $this->original = Notice::getKV('id', $id);
-
-        if (!$this->original instanceof Notice) {
-            // TRANS: Client error displayed trying to repeat a non-existing notice through the API.
-            $this->clientError(_('No such notice.'), 400, $this->format);
-        }
-
-        return true;
-    }
-
-    /**
-     * Handle the request
-     *
-     * Make a new notice for the update, save it, and show it
-     *
-     * @param array $args $_REQUEST data (unused)
-     *
-     * @return void
-     */
-    protected function handle()
-    {
-        parent::handle();
-
-        $repeat = $this->original->repeat($this->scoped, $this->source);
-
-        $this->showNotice($repeat);
-    }
-
-    /**
-     * Show the resulting notice
-     *
-     * @return void
-     */
-    function showNotice($notice)
-    {
-        if (!empty($notice)) {
-            if ($this->format == 'xml') {
-                $this->showSingleXmlStatus($notice);
-            } elseif ($this->format == 'json') {
-                $this->show_single_json_status($notice);
-            }
-        }
-    }
-}
diff --git a/actions/apistatusesretweets.php b/actions/apistatusesretweets.php
deleted file mode 100644 (file)
index 7af4cd3..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Show up to 100 repeats of a notice
- *
- * PHP version 5
- *
- * LICENCE: 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/>.
- *
- * @category  API
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Show up to 100 repeats of a notice
- *
- * @category API
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://status.net/
- */
-class ApiStatusesRetweetsAction extends ApiAuthAction
-{
-    const MAXCOUNT = 100;
-
-    var $original = null;
-    var $cnt      = self::MAXCOUNT;
-
-    /**
-     * Take arguments for running
-     *
-     * @param array $args $_REQUEST args
-     *
-     * @return boolean success flag
-     */
-    function prepare($args)
-    {
-        parent::prepare($args);
-
-        $id = $this->trimmed('id');
-
-        $this->original = Notice::getKV('id', $id);
-
-        if (empty($this->original)) {
-            // TRANS: Client error displayed trying to display redents of a non-exiting notice.
-            $this->clientError(_('No such notice.'),
-                               400, $this->format);
-            return false;
-        }
-
-        $cnt = $this->trimmed('count');
-
-        if (empty($cnt) || !is_integer($cnt)) {
-            $cnt = 100;
-        } else {
-            $this->cnt = min((int)$cnt, self::MAXCOUNT);
-        }
-
-        return true;
-    }
-
-    /**
-     * Handle the request
-     *
-     * Make a new notice for the update, save it, and show it
-     *
-     * @param array $args $_REQUEST data (unused)
-     *
-     * @return void
-     */
-    function handle($args)
-    {
-        parent::handle($args);
-
-        $strm = $this->original->repeatStream($this->cnt);
-
-        switch ($this->format) {
-        case 'xml':
-            $this->showXmlTimeline($strm);
-            break;
-        case 'json':
-            $this->showJsonTimeline($strm);
-            break;
-        default:
-            // TRANS: Client error displayed when coming across a non-supported API method.
-            $this->clientError(_('API method not found.'), $code = 404);
-            break;
-        }
-    }
-
-    /**
-     * Return true if read only.
-     *
-     * MAY override
-     *
-     * @param array $args other arguments
-     *
-     * @return boolean is read only action?
-     */
-
-    function isReadOnly($args)
-    {
-        return true;
-    }
-}
diff --git a/actions/apitimelineretweetedbyme.php b/actions/apitimelineretweetedbyme.php
deleted file mode 100644 (file)
index 01f3fe3..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Show authenticating user's most recent repeats
- *
- * PHP version 5
- *
- * LICENCE: 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/>.
- *
- * @category  API
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Show authenticating user's most recent repeats
- *
- * @category API
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://status.net/
- */
-class ApiTimelineRetweetedByMeAction extends ApiAuthAction
-{
-    const DEFAULTCOUNT = 20;
-    const MAXCOUNT     = 200;
-    const MAXNOTICES   = 3200;
-
-    var $repeats  = null;
-    var $cnt      = self::DEFAULTCOUNT;
-    var $page     = 1;
-    var $since_id = null;
-    var $max_id   = null;
-
-    /**
-     * Take arguments for running
-     *
-     * @param array $args $_REQUEST args
-     *
-     * @return boolean success flag
-     *
-     */
-    function prepare($args)
-    {
-        parent::prepare($args);
-
-        // TRANS: Server error displayed calling unimplemented API method for 'retweeted by me'.
-        $this->serverError(_('Unimplemented.'), 503);
-
-        return false;
-    }
-
-    /**
-     * Return true if read only.
-     *
-     * @param array $args other arguments
-     *
-     * @return boolean is read only action?
-     */
-    function isReadOnly($args)
-    {
-        return true;
-    }
-}
diff --git a/actions/apitimelineretweetedtome.php b/actions/apitimelineretweetedtome.php
deleted file mode 100644 (file)
index 92d4b35..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Show most recent notices that are repeats in user's inbox
- *
- * PHP version 5
- *
- * LICENCE: 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/>.
- *
- * @category  API
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('GNUSOCIAL')) { exit(1); }
-
-/**
- * Show most recent notices that are repeats in user's inbox
- *
- * @category API
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://status.net/
- */
-class ApiTimelineRetweetedToMeAction extends ApiAuthAction
-{
-    const DEFAULTCOUNT = 20;
-    const MAXCOUNT     = 200;
-    const MAXNOTICES   = 3200;
-
-    var $repeats  = null;
-    var $cnt      = self::DEFAULTCOUNT;
-    var $page     = 1;
-    var $since_id = null;
-    var $max_id   = null;
-
-    /**
-     * Take arguments for running
-     *
-     * @param array $args $_REQUEST args
-     *
-     * @return boolean success flag
-     */
-    protected function prepare(array $args=array())
-    {
-        parent::prepare($args);
-
-        $cnt = $this->int('count', self::DEFAULTCOUNT, self::MAXCOUNT, 1);
-
-        $page = $this->int('page', 1, (self::MAXNOTICES/$this->cnt));
-
-        $since_id = $this->int('since_id');
-
-        $max_id = $this->int('max_id');
-
-        return true;
-    }
-
-    /**
-     * Handle the request
-     *
-     * show a timeline of the user's repeated notices
-     *
-     * @return void
-     */
-    protected function handle()
-    {
-        parent::handle();
-
-        $offset = ($this->page-1) * $this->cnt;
-        $limit  = $this->cnt;
-
-        // TRANS: Title for Atom feed "repeated to me". %s is the user nickname.
-        $title      = sprintf(_("Repeated to %s"), $this->scoped->getNickname());
-        $subtitle   = sprintf(
-            // @todo FIXME: $profile is not defined.
-            // TRANS: Subtitle for API action that shows most recent notices that are repeats in user's inbox.
-            // TRANS: %1$s is the sitename, %2$s is a user nickname, %3$s is a user profile name.
-            _('%1$s notices that were to repeated to %2$s / %3$s.'),
-            $sitename, $this->scoped->getNickname(), $profile->getBestName()
-        );
-        $taguribase = TagURI::base();
-        $id         = "tag:$taguribase:RepeatedToMe:" . $this->scoped->id;
-
-        $link = common_local_url(
-            'all',
-             array('nickname' => $this->scoped->getNickname())
-        );
-
-        $strm = $this->scoped->repeatedToMe($offset, $limit, $this->since_id, $this->max_id);
-
-        switch ($this->format) {
-        case 'xml':
-            $this->showXmlTimeline($strm);
-            break;
-        case 'json':
-            $this->showJsonTimeline($strm);
-            break;
-        case 'atom':
-            header('Content-Type: application/atom+xml; charset=utf-8');
-
-            $atom = new AtomNoticeFeed($this->scoped->getUser());
-
-            $atom->setId($id);
-            $atom->setTitle($title);
-            $atom->setSubtitle($subtitle);
-            $atom->setUpdated('now');
-            $atom->addLink($link);
-
-            $id = $this->arg('id');
-
-            $atom->setSelfLink($self);
-            $atom->addEntryFromNotices($strm);
-
-            $this->raw($atom->getString());
-
-            break;
-        case 'as':
-            header('Content-Type: ' . ActivityStreamJSONDocument::CONTENT_TYPE);
-            $doc = new ActivityStreamJSONDocument($this->scoped->getUser());
-            $doc->setTitle($title);
-            $doc->addLink($link, 'alternate', 'text/html');
-            $doc->addItemsFromNotices($strm);
-            $this->raw($doc->asString());
-            break;
-        default:
-            // TRANS: Client error displayed when coming across a non-supported API method.
-            $this->clientError(_('API method not found.'), $code = 404);
-            break;
-        }
-    }
-
-    /**
-     * Return true if read only.
-     *
-     * MAY override
-     *
-     * @param array $args other arguments
-     *
-     * @return boolean is read only action?
-     */
-    function isReadOnly($args)
-    {
-        return true;
-    }
-}
diff --git a/actions/apitimelineretweetsofme.php b/actions/apitimelineretweetsofme.php
deleted file mode 100644 (file)
index fe90213..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Show authenticating user's most recent notices that have been repeated
- *
- * PHP version 5
- *
- * LICENCE: 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/>.
- *
- * @category  API
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Show authenticating user's most recent notices that have been repeated
- *
- * @category API
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://status.net/
- */
-class ApiTimelineRetweetsOfMeAction extends ApiAuthAction
-{
-    const DEFAULTCOUNT = 20;
-    const MAXCOUNT     = 200;
-    const MAXNOTICES   = 3200;
-
-    var $repeats  = null;
-    var $cnt      = self::DEFAULTCOUNT;
-    var $page     = 1;
-    var $since_id = null;
-    var $max_id   = null;
-
-    /**
-     * Take arguments for running
-     *
-     * @param array $args $_REQUEST args
-     *
-     * @return boolean success flag
-     */
-    function prepare($args)
-    {
-        parent::prepare($args);
-
-        $cnt = $this->int('count', self::DEFAULTCOUNT, self::MAXCOUNT, 1);
-
-        $page = $this->int('page', 1, (self::MAXNOTICES/$this->cnt));
-
-        $since_id = $this->int('since_id');
-
-        $max_id = $this->int('max_id');
-
-        return true;
-    }
-
-    /**
-     * Handle the request
-     *
-     * show a timeline of the user's repeated notices
-     *
-     * @param array $args $_REQUEST data (unused)
-     *
-     * @return void
-     */
-    function handle($args)
-    {
-        parent::handle($args);
-
-        $offset = ($this->page-1) * $this->cnt;
-        $limit  = $this->cnt;
-
-        // TRANS: Title of list of repeated notices of the logged in user.
-        // TRANS: %s is the nickname of the logged in user.
-        $title      = sprintf(_("Repeats of %s"), $this->auth_user->nickname);
-        $sitename   = common_config('site', 'name');
-
-        $profile = $this->auth_user->getProfile();
-
-        $subtitle   = sprintf(
-            // TRANS: Subtitle of API time with retweets of me.
-            // TRANS: %1$s is the StatusNet sitename, %2$s is the user nickname, %3$s is the user profile name.
-            _('%1$s notices that %2$s / %3$s has repeated.'),
-            $sitename, $this->auth_user->nickname, $profile->getBestName()
-        );
-
-        $taguribase = TagURI::base();
-        $id         = "tag:$taguribase:RepeatsOfMe:" . $this->auth_user->id;
-
-        $link = common_local_url(
-            'all',
-             array('nickname' => $this->auth_user->nickname)
-        );
-
-        // This is a really bad query for some reason
-
-        if (!common_config('performance', 'high')) {
-            $strm = $this->auth_user->repeatsOfMe($offset, $limit, $this->since_id, $this->max_id);
-        } else {
-            $strm = new Notice();
-            $strm->whereAdd('0 = 1');
-            $strm->find();
-        }
-
-        switch ($this->format) {
-        case 'xml':
-            $this->showXmlTimeline($strm);
-            break;
-        case 'json':
-            $this->showJsonTimeline($strm);
-            break;
-        case 'atom':
-            header('Content-Type: application/atom+xml; charset=utf-8');
-            $atom = new AtomNoticeFeed($this->auth_user);
-            $atom->setId($id);
-            $atom->setTitle($title);
-            $atom->setSubtitle($subtitle);
-            $atom->setUpdated('now');
-            $atom->addLink($link);
-            $atom->setSelfLink($this->getSelfUri());
-            $atom->addEntryFromNotices($strm);
-            $this->raw($atom->getString());
-            break;
-        case 'as':
-            header('Content-Type: ' . ActivityStreamJSONDocument::CONTENT_TYPE);
-            $doc = new ActivityStreamJSONDocument($this->auth_user);
-            $doc->setTitle($title);
-            $doc->addLink($link, 'alternate', 'text/html');
-            $doc->addItemsFromNotices($strm);
-            $this->raw($doc->asString());
-            break;
-        default:
-            // TRANS: Client error displayed when coming across a non-supported API method.
-            $this->clientError(_('API method not found.'), 404);
-            break;
-        }
-    }
-
-    /**
-     * Return true if read only.
-     *
-     * MAY override
-     *
-     * @param array $args other arguments
-     *
-     * @return boolean is read only action?
-     */
-    function isReadOnly($args)
-    {
-        return true;
-    }
-}
diff --git a/actions/repeat.php b/actions/repeat.php
deleted file mode 100644 (file)
index 49132e9..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-/**
- * Repeat action.
- *
- * PHP version 5
- *
- * @category Action
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://status.net/
- *
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, 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/>.
- */
-
-if (!defined('GNUSOCIAL')) { exit(1); }
-
-/**
- * Repeat action
- *
- * @category Action
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://status.net/
- */
-class RepeatAction extends FormAction
-{
-    protected $notice = null;   // Notice that is being repeated.
-    protected $repeat = null;   // The resulting repeat object/notice.
-
-    function title()
-    {
-        return _m('TITLE', 'Repeat notice');
-    }
-
-    protected function doPreparation()
-    {
-        $id = $this->trimmed('notice');
-
-        if (empty($id)) {
-            // TRANS: Client error displayed when trying to repeat a notice while not providing a notice ID.
-            $this->clientError(_('No notice specified.'));
-        }
-
-        $this->notice = Notice::getKV('id', $id);
-
-        if (!$this->notice instanceof Notice) {
-            // TRANS: Client error displayed when trying to repeat a non-existing notice.
-            $this->clientError(_('Notice not found.'));
-        }
-
-        $this->repeat = $this->notice->repeat($this->scoped, 'web');
-        if (!$this->repeat instanceof Notice) {
-            // TRANS: Error when unable to repeat a notice for unknown reason.
-            $this->clientError(_('Could not repeat notice for unknown reason. Please contact the webmaster!'));
-        }
-
-        return true;
-    }
-
-    /**
-     * Class handler.
-     *
-     * @param array $args query arguments
-     *
-     * @return void
-     */
-    protected function showContent()
-    {
-        $this->element('p', array('id' => 'repeat_response',
-                                  'class' => 'repeated'),
-                            // TRANS: Confirmation text after repeating a notice.
-                            _('Repeated!'));
-    }
-}
diff --git a/plugins/Share/actions/apistatusesretweet.php b/plugins/Share/actions/apistatusesretweet.php
new file mode 100644 (file)
index 0000000..922d395
--- /dev/null
@@ -0,0 +1,103 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Repeat a notice through the API
+ *
+ * PHP version 5
+ *
+ * LICENCE: 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/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+/**
+ * Repeat a notice through the API
+ *
+ * @category API
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ */
+class ApiStatusesRetweetAction extends ApiAuthAction
+{
+    protected $needPost = true;
+
+    var $original = null;
+
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     */
+    protected function prepare(array $args=array())
+    {
+        parent::prepare($args);
+
+        $id = $this->trimmed('id');
+
+        $this->original = Notice::getKV('id', $id);
+
+        if (!$this->original instanceof Notice) {
+            // TRANS: Client error displayed trying to repeat a non-existing notice through the API.
+            $this->clientError(_('No such notice.'), 400, $this->format);
+        }
+
+        return true;
+    }
+
+    /**
+     * Handle the request
+     *
+     * Make a new notice for the update, save it, and show it
+     *
+     * @param array $args $_REQUEST data (unused)
+     *
+     * @return void
+     */
+    protected function handle()
+    {
+        parent::handle();
+
+        $repeat = $this->original->repeat($this->scoped, $this->source);
+
+        $this->showNotice($repeat);
+    }
+
+    /**
+     * Show the resulting notice
+     *
+     * @return void
+     */
+    function showNotice($notice)
+    {
+        if (!empty($notice)) {
+            if ($this->format == 'xml') {
+                $this->showSingleXmlStatus($notice);
+            } elseif ($this->format == 'json') {
+                $this->show_single_json_status($notice);
+            }
+        }
+    }
+}
diff --git a/plugins/Share/actions/apistatusesretweets.php b/plugins/Share/actions/apistatusesretweets.php
new file mode 100644 (file)
index 0000000..7af4cd3
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Show up to 100 repeats of a notice
+ *
+ * PHP version 5
+ *
+ * LICENCE: 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/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ * Show up to 100 repeats of a notice
+ *
+ * @category API
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ */
+class ApiStatusesRetweetsAction extends ApiAuthAction
+{
+    const MAXCOUNT = 100;
+
+    var $original = null;
+    var $cnt      = self::MAXCOUNT;
+
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     */
+    function prepare($args)
+    {
+        parent::prepare($args);
+
+        $id = $this->trimmed('id');
+
+        $this->original = Notice::getKV('id', $id);
+
+        if (empty($this->original)) {
+            // TRANS: Client error displayed trying to display redents of a non-exiting notice.
+            $this->clientError(_('No such notice.'),
+                               400, $this->format);
+            return false;
+        }
+
+        $cnt = $this->trimmed('count');
+
+        if (empty($cnt) || !is_integer($cnt)) {
+            $cnt = 100;
+        } else {
+            $this->cnt = min((int)$cnt, self::MAXCOUNT);
+        }
+
+        return true;
+    }
+
+    /**
+     * Handle the request
+     *
+     * Make a new notice for the update, save it, and show it
+     *
+     * @param array $args $_REQUEST data (unused)
+     *
+     * @return void
+     */
+    function handle($args)
+    {
+        parent::handle($args);
+
+        $strm = $this->original->repeatStream($this->cnt);
+
+        switch ($this->format) {
+        case 'xml':
+            $this->showXmlTimeline($strm);
+            break;
+        case 'json':
+            $this->showJsonTimeline($strm);
+            break;
+        default:
+            // TRANS: Client error displayed when coming across a non-supported API method.
+            $this->clientError(_('API method not found.'), $code = 404);
+            break;
+        }
+    }
+
+    /**
+     * Return true if read only.
+     *
+     * MAY override
+     *
+     * @param array $args other arguments
+     *
+     * @return boolean is read only action?
+     */
+
+    function isReadOnly($args)
+    {
+        return true;
+    }
+}
diff --git a/plugins/Share/actions/apitimelineretweetedbyme.php b/plugins/Share/actions/apitimelineretweetedbyme.php
new file mode 100644 (file)
index 0000000..01f3fe3
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Show authenticating user's most recent repeats
+ *
+ * PHP version 5
+ *
+ * LICENCE: 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/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ * Show authenticating user's most recent repeats
+ *
+ * @category API
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ */
+class ApiTimelineRetweetedByMeAction extends ApiAuthAction
+{
+    const DEFAULTCOUNT = 20;
+    const MAXCOUNT     = 200;
+    const MAXNOTICES   = 3200;
+
+    var $repeats  = null;
+    var $cnt      = self::DEFAULTCOUNT;
+    var $page     = 1;
+    var $since_id = null;
+    var $max_id   = null;
+
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     *
+     */
+    function prepare($args)
+    {
+        parent::prepare($args);
+
+        // TRANS: Server error displayed calling unimplemented API method for 'retweeted by me'.
+        $this->serverError(_('Unimplemented.'), 503);
+
+        return false;
+    }
+
+    /**
+     * Return true if read only.
+     *
+     * @param array $args other arguments
+     *
+     * @return boolean is read only action?
+     */
+    function isReadOnly($args)
+    {
+        return true;
+    }
+}
diff --git a/plugins/Share/actions/apitimelineretweetedtome.php b/plugins/Share/actions/apitimelineretweetedtome.php
new file mode 100644 (file)
index 0000000..92d4b35
--- /dev/null
@@ -0,0 +1,162 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Show most recent notices that are repeats in user's inbox
+ *
+ * PHP version 5
+ *
+ * LICENCE: 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/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+/**
+ * Show most recent notices that are repeats in user's inbox
+ *
+ * @category API
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ */
+class ApiTimelineRetweetedToMeAction extends ApiAuthAction
+{
+    const DEFAULTCOUNT = 20;
+    const MAXCOUNT     = 200;
+    const MAXNOTICES   = 3200;
+
+    var $repeats  = null;
+    var $cnt      = self::DEFAULTCOUNT;
+    var $page     = 1;
+    var $since_id = null;
+    var $max_id   = null;
+
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     */
+    protected function prepare(array $args=array())
+    {
+        parent::prepare($args);
+
+        $cnt = $this->int('count', self::DEFAULTCOUNT, self::MAXCOUNT, 1);
+
+        $page = $this->int('page', 1, (self::MAXNOTICES/$this->cnt));
+
+        $since_id = $this->int('since_id');
+
+        $max_id = $this->int('max_id');
+
+        return true;
+    }
+
+    /**
+     * Handle the request
+     *
+     * show a timeline of the user's repeated notices
+     *
+     * @return void
+     */
+    protected function handle()
+    {
+        parent::handle();
+
+        $offset = ($this->page-1) * $this->cnt;
+        $limit  = $this->cnt;
+
+        // TRANS: Title for Atom feed "repeated to me". %s is the user nickname.
+        $title      = sprintf(_("Repeated to %s"), $this->scoped->getNickname());
+        $subtitle   = sprintf(
+            // @todo FIXME: $profile is not defined.
+            // TRANS: Subtitle for API action that shows most recent notices that are repeats in user's inbox.
+            // TRANS: %1$s is the sitename, %2$s is a user nickname, %3$s is a user profile name.
+            _('%1$s notices that were to repeated to %2$s / %3$s.'),
+            $sitename, $this->scoped->getNickname(), $profile->getBestName()
+        );
+        $taguribase = TagURI::base();
+        $id         = "tag:$taguribase:RepeatedToMe:" . $this->scoped->id;
+
+        $link = common_local_url(
+            'all',
+             array('nickname' => $this->scoped->getNickname())
+        );
+
+        $strm = $this->scoped->repeatedToMe($offset, $limit, $this->since_id, $this->max_id);
+
+        switch ($this->format) {
+        case 'xml':
+            $this->showXmlTimeline($strm);
+            break;
+        case 'json':
+            $this->showJsonTimeline($strm);
+            break;
+        case 'atom':
+            header('Content-Type: application/atom+xml; charset=utf-8');
+
+            $atom = new AtomNoticeFeed($this->scoped->getUser());
+
+            $atom->setId($id);
+            $atom->setTitle($title);
+            $atom->setSubtitle($subtitle);
+            $atom->setUpdated('now');
+            $atom->addLink($link);
+
+            $id = $this->arg('id');
+
+            $atom->setSelfLink($self);
+            $atom->addEntryFromNotices($strm);
+
+            $this->raw($atom->getString());
+
+            break;
+        case 'as':
+            header('Content-Type: ' . ActivityStreamJSONDocument::CONTENT_TYPE);
+            $doc = new ActivityStreamJSONDocument($this->scoped->getUser());
+            $doc->setTitle($title);
+            $doc->addLink($link, 'alternate', 'text/html');
+            $doc->addItemsFromNotices($strm);
+            $this->raw($doc->asString());
+            break;
+        default:
+            // TRANS: Client error displayed when coming across a non-supported API method.
+            $this->clientError(_('API method not found.'), $code = 404);
+            break;
+        }
+    }
+
+    /**
+     * Return true if read only.
+     *
+     * MAY override
+     *
+     * @param array $args other arguments
+     *
+     * @return boolean is read only action?
+     */
+    function isReadOnly($args)
+    {
+        return true;
+    }
+}
diff --git a/plugins/Share/actions/apitimelineretweetsofme.php b/plugins/Share/actions/apitimelineretweetsofme.php
new file mode 100644 (file)
index 0000000..fe90213
--- /dev/null
@@ -0,0 +1,172 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Show authenticating user's most recent notices that have been repeated
+ *
+ * PHP version 5
+ *
+ * LICENCE: 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/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ * Show authenticating user's most recent notices that have been repeated
+ *
+ * @category API
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ */
+class ApiTimelineRetweetsOfMeAction extends ApiAuthAction
+{
+    const DEFAULTCOUNT = 20;
+    const MAXCOUNT     = 200;
+    const MAXNOTICES   = 3200;
+
+    var $repeats  = null;
+    var $cnt      = self::DEFAULTCOUNT;
+    var $page     = 1;
+    var $since_id = null;
+    var $max_id   = null;
+
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     */
+    function prepare($args)
+    {
+        parent::prepare($args);
+
+        $cnt = $this->int('count', self::DEFAULTCOUNT, self::MAXCOUNT, 1);
+
+        $page = $this->int('page', 1, (self::MAXNOTICES/$this->cnt));
+
+        $since_id = $this->int('since_id');
+
+        $max_id = $this->int('max_id');
+
+        return true;
+    }
+
+    /**
+     * Handle the request
+     *
+     * show a timeline of the user's repeated notices
+     *
+     * @param array $args $_REQUEST data (unused)
+     *
+     * @return void
+     */
+    function handle($args)
+    {
+        parent::handle($args);
+
+        $offset = ($this->page-1) * $this->cnt;
+        $limit  = $this->cnt;
+
+        // TRANS: Title of list of repeated notices of the logged in user.
+        // TRANS: %s is the nickname of the logged in user.
+        $title      = sprintf(_("Repeats of %s"), $this->auth_user->nickname);
+        $sitename   = common_config('site', 'name');
+
+        $profile = $this->auth_user->getProfile();
+
+        $subtitle   = sprintf(
+            // TRANS: Subtitle of API time with retweets of me.
+            // TRANS: %1$s is the StatusNet sitename, %2$s is the user nickname, %3$s is the user profile name.
+            _('%1$s notices that %2$s / %3$s has repeated.'),
+            $sitename, $this->auth_user->nickname, $profile->getBestName()
+        );
+
+        $taguribase = TagURI::base();
+        $id         = "tag:$taguribase:RepeatsOfMe:" . $this->auth_user->id;
+
+        $link = common_local_url(
+            'all',
+             array('nickname' => $this->auth_user->nickname)
+        );
+
+        // This is a really bad query for some reason
+
+        if (!common_config('performance', 'high')) {
+            $strm = $this->auth_user->repeatsOfMe($offset, $limit, $this->since_id, $this->max_id);
+        } else {
+            $strm = new Notice();
+            $strm->whereAdd('0 = 1');
+            $strm->find();
+        }
+
+        switch ($this->format) {
+        case 'xml':
+            $this->showXmlTimeline($strm);
+            break;
+        case 'json':
+            $this->showJsonTimeline($strm);
+            break;
+        case 'atom':
+            header('Content-Type: application/atom+xml; charset=utf-8');
+            $atom = new AtomNoticeFeed($this->auth_user);
+            $atom->setId($id);
+            $atom->setTitle($title);
+            $atom->setSubtitle($subtitle);
+            $atom->setUpdated('now');
+            $atom->addLink($link);
+            $atom->setSelfLink($this->getSelfUri());
+            $atom->addEntryFromNotices($strm);
+            $this->raw($atom->getString());
+            break;
+        case 'as':
+            header('Content-Type: ' . ActivityStreamJSONDocument::CONTENT_TYPE);
+            $doc = new ActivityStreamJSONDocument($this->auth_user);
+            $doc->setTitle($title);
+            $doc->addLink($link, 'alternate', 'text/html');
+            $doc->addItemsFromNotices($strm);
+            $this->raw($doc->asString());
+            break;
+        default:
+            // TRANS: Client error displayed when coming across a non-supported API method.
+            $this->clientError(_('API method not found.'), 404);
+            break;
+        }
+    }
+
+    /**
+     * Return true if read only.
+     *
+     * MAY override
+     *
+     * @param array $args other arguments
+     *
+     * @return boolean is read only action?
+     */
+    function isReadOnly($args)
+    {
+        return true;
+    }
+}
diff --git a/plugins/Share/actions/repeat.php b/plugins/Share/actions/repeat.php
new file mode 100644 (file)
index 0000000..49132e9
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Repeat action.
+ *
+ * PHP version 5
+ *
+ * @category Action
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link     http://status.net/
+ *
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, 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/>.
+ */
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+/**
+ * Repeat action
+ *
+ * @category Action
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link     http://status.net/
+ */
+class RepeatAction extends FormAction
+{
+    protected $notice = null;   // Notice that is being repeated.
+    protected $repeat = null;   // The resulting repeat object/notice.
+
+    function title()
+    {
+        return _m('TITLE', 'Repeat notice');
+    }
+
+    protected function doPreparation()
+    {
+        $id = $this->trimmed('notice');
+
+        if (empty($id)) {
+            // TRANS: Client error displayed when trying to repeat a notice while not providing a notice ID.
+            $this->clientError(_('No notice specified.'));
+        }
+
+        $this->notice = Notice::getKV('id', $id);
+
+        if (!$this->notice instanceof Notice) {
+            // TRANS: Client error displayed when trying to repeat a non-existing notice.
+            $this->clientError(_('Notice not found.'));
+        }
+
+        $this->repeat = $this->notice->repeat($this->scoped, 'web');
+        if (!$this->repeat instanceof Notice) {
+            // TRANS: Error when unable to repeat a notice for unknown reason.
+            $this->clientError(_('Could not repeat notice for unknown reason. Please contact the webmaster!'));
+        }
+
+        return true;
+    }
+
+    /**
+     * Class handler.
+     *
+     * @param array $args query arguments
+     *
+     * @return void
+     */
+    protected function showContent()
+    {
+        $this->element('p', array('id' => 'repeat_response',
+                                  'class' => 'repeated'),
+                            // TRANS: Confirmation text after repeating a notice.
+                            _('Repeated!'));
+    }
+}