diff options
Diffstat (limited to 'actions')
-rw-r--r-- | actions/api.php | 4 | ||||
-rw-r--r-- | actions/conversation.php | 5 | ||||
-rw-r--r-- | actions/facebookhome.php | 4 | ||||
-rw-r--r-- | actions/facebooklogin.php | 4 | ||||
-rw-r--r-- | actions/facebooksettings.php | 4 | ||||
-rw-r--r-- | actions/showgroup.php | 23 | ||||
-rw-r--r-- | actions/tag.php | 20 | ||||
-rw-r--r-- | actions/twitapigroups.php | 114 | ||||
-rw-r--r-- | actions/twitapitags.php | 114 |
9 files changed, 280 insertions, 12 deletions
diff --git a/actions/api.php b/actions/api.php index 18c3b68d4..452ed8e82 100644 --- a/actions/api.php +++ b/actions/api.php @@ -127,7 +127,9 @@ class ApiAction extends Action 'help/downtime_schedule', 'laconica/version', 'laconica/config', - 'laconica/wadl'); + 'laconica/wadl', + 'tags/timeline', + 'groups/timeline'); static $bareauth = array('statuses/user_timeline', 'statuses/friends_timeline', diff --git a/actions/conversation.php b/actions/conversation.php index 0eb0d86d6..c8755ba6e 100644 --- a/actions/conversation.php +++ b/actions/conversation.php @@ -116,6 +116,11 @@ class ConversationAction extends Action $cnt = $ct->show(); } + + function isReadOnly() + { + return true; + } } /** diff --git a/actions/facebookhome.php b/actions/facebookhome.php index 34989c978..6d8d0745d 100644 --- a/actions/facebookhome.php +++ b/actions/facebookhome.php @@ -57,7 +57,7 @@ class FacebookhomeAction extends FacebookAction // If this is the first time the user has started the app // prompt for Facebook status update permission - if (!$this->facebook->api_client->users_hasAppPermission('status_update')) { + if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) { if ($this->facebook->api_client->data_getUserPreference( FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') { @@ -203,7 +203,7 @@ class FacebookhomeAction extends FacebookAction $api_key = common_config('facebook', 'apikey'); $auth_url = 'http://www.facebook.com/authorize.php?api_key=' . - $api_key . '&v=1.0&ext_perm=status_update&next=' . $next . + $api_key . '&v=1.0&ext_perm=publish_stream&next=' . $next . '&next_cancel=' . $next . '&submit=skip'; $this->elementStart('span', array('class' => 'facebook-button')); diff --git a/actions/facebooklogin.php b/actions/facebooklogin.php index 22007da4f..aa86cfbc0 100644 --- a/actions/facebooklogin.php +++ b/actions/facebooklogin.php @@ -31,7 +31,7 @@ class FacebookinviteAction extends FacebookAction $this->error = $error; if ($this->flink) { - if (!$this->facebook->api_client->users_hasAppPermission('status_update') && + if (!$this->facebook->api_client->users_hasAppPermission('publish_stream') && $this->facebook->api_client->data_getUserPreference( FACEBOOK_PROMPTED_UPDATE_PREF) == 'true') { @@ -60,7 +60,7 @@ class FacebookinviteAction extends FacebookAction // If this is the first time the user has started the app // prompt for Facebook status update permission - if (!$this->facebook->api_client->users_hasAppPermission('status_update')) { + if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) { if ($this->facebook->api_client->data_getUserPreference( FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') { diff --git a/actions/facebooksettings.php b/actions/facebooksettings.php index ee2c279ab..c3b364743 100644 --- a/actions/facebooksettings.php +++ b/actions/facebooksettings.php @@ -78,7 +78,7 @@ class FacebooksettingsAction extends FacebookAction } } - if ($this->facebook->api_client->users_hasAppPermission('status_update')) { + if ($this->facebook->api_client->users_hasAppPermission('publish_stream')) { $this->elementStart('form', array('method' => 'post', 'id' => 'facebook_settings')); @@ -131,7 +131,7 @@ class FacebooksettingsAction extends FacebookAction $this->elementStart('ul', array('id' => 'fb-permissions-list')); $this->elementStart('li', array('id' => 'fb-permissions-item')); - $this->elementStart('fb:prompt-permission', array('perms' => 'status_update', + $this->elementStart('fb:prompt-permission', array('perms' => 'publish_stream', 'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/settings.php" . '\')')); $this->element('span', array('class' => 'facebook-button'), sprintf(_('Allow %s to update my Facebook status'), common_config('site', 'name'))); diff --git a/actions/showgroup.php b/actions/showgroup.php index ce11d574e..32ec674a9 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -317,8 +317,25 @@ class ShowgroupAction extends GroupDesignAction common_local_url('grouprss', array('nickname' => $this->group->nickname)); - return array(new Feed(Feed::RSS1, $url, sprintf(_('Notice feed for %s group'), - $this->group->nickname))); + return array(new Feed(Feed::RSS1, + common_local_url('grouprss', + array('nickname' => $this->group->nickname)), + sprintf(_('Notice feed for %s group (RSS 1.0)'), + $this->group->nickname)), + new Feed(Feed::RSS2, + common_local_url('api', + array('apiaction' => 'groups', + 'method' => 'timeline', + 'argument' => $this->group->nickname.'.rss')), + sprintf(_('Notice feed for %s group (RSS 2.0)'), + $this->group->nickname)), + new Feed(Feed::ATOM, + common_local_url('api', + array('apiaction' => 'groups', + 'method' => 'timeline', + 'argument' => $this->group->nickname.'.atom')), + sprintf(_('Notice feed for %s group (Atom)'), + $this->group->nickname))); } /** @@ -466,4 +483,4 @@ class GroupAdminSection extends ProfileSection { return null; } -}
\ No newline at end of file +} diff --git a/actions/tag.php b/actions/tag.php index 888aba062..020399d9e 100644 --- a/actions/tag.php +++ b/actions/tag.php @@ -72,8 +72,24 @@ class TagAction extends Action function getFeeds() { return array(new Feed(Feed::RSS1, - common_local_url('tagrss', array('tag' => $this->tag)), - sprintf(_('Feed for tag %s'), $this->tag))); + common_local_url('tagrss', + array('tag' => $this->tag)), + sprintf(_('Notice feed for tag %s (RSS 1.0)'), + $this->tag)), + new Feed(Feed::RSS2, + common_local_url('api', + array('apiaction' => 'tags', + 'method' => 'timeline', + 'argument' => $this->tag.'.rss')), + sprintf(_('Notice feed for %s group (RSS 2.0)'), + $this->tag)), + new Feed(Feed::ATOM, + common_local_url('api', + array('apiaction' => 'tags', + 'method' => 'timeline', + 'argument' => $this->tag.'.atom')), + sprintf(_('Notice feed for tag %s (Atom)'), + $this->tag))); } function showContent() diff --git a/actions/twitapigroups.php b/actions/twitapigroups.php new file mode 100644 index 000000000..71a0776f4 --- /dev/null +++ b/actions/twitapigroups.php @@ -0,0 +1,114 @@ +<?php +/** + * Laconica, the distributed open-source microblogging tool + * + * Laconica extensions to the Twitter-like API for groups + * + * 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 Twitter + * @package Laconica + * @author Craig Andrews + * @author Zach Copley <zach@controlyourself.ca> + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/twitterapi.php'; + +/** + * Group-specific API methods + * + * This class handles Laconica group API methods. + * + * @category Twitter + * @package Laconica + * @author Craig Andrews + * @author Zach Copley <zach@controlyourself.ca> + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + + class TwitapigroupsAction extends TwitterapiAction + { + + function timeline($args, $apidata) + { + parent::handle($args); + + common_debug("in groups api action"); + + $this->auth_user = $apidata['user']; + $group = $this->get_group($apidata['api_arg'], $apidata); + + if (empty($group)) { + $this->clientError('Not Found', 404, $apidata['content-type']); + return; + } + + $sitename = common_config('site', 'name'); + $title = sprintf(_("%s timeline"), $group->nickname); + $taguribase = common_config('integration', 'taguri'); + $id = "tag:$taguribase:GroupTimeline:".$group->id; + $link = common_local_url('showgroup', + array('nickname' => $group->nickname)); + $subtitle = sprintf(_('Updates from %1$s on %2$s!'), + $group->nickname, $sitename); + + $page = (int)$this->arg('page', 1); + $count = (int)$this->arg('count', 20); + $max_id = (int)$this->arg('max_id', 0); + $since_id = (int)$this->arg('since_id', 0); + $since = $this->arg('since'); + + $notice = $group->getNotices(($page-1)*$count, + $count, $since_id, $max_id, $since); + + switch($apidata['content-type']) { + case 'xml': + $this->show_xml_timeline($notice); + break; + case 'rss': + $this->show_rss_timeline($notice, $title, $link, + $subtitle, $suplink); + break; + case 'atom': + if (isset($apidata['api_arg'])) { + $selfuri = common_root_url() . + 'api/laconica/groups/timeline/' . + $apidata['api_arg'] . '.atom'; + } else { + $selfuri = common_root_url() . + 'api/laconica/groups/timeline.atom'; + } + $this->show_atom_timeline($notice, $title, $id, $link, + $subtitle, $suplink, $selfuri); + break; + case 'json': + $this->show_json_timeline($notice); + break; + default: + $this->clientError(_('API method not found!'), $code = 404); + } + } + +} diff --git a/actions/twitapitags.php b/actions/twitapitags.php new file mode 100644 index 000000000..5c8527530 --- /dev/null +++ b/actions/twitapitags.php @@ -0,0 +1,114 @@ +<?php +/** + * Laconica, the distributed open-source microblogging tool + * + * Laconica extensions to the Twitter-like API for groups + * + * 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 Twitter + * @package Laconica + * @author Craig Andrews + * @author Zach Copley <zach@controlyourself.ca> + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/twitterapi.php'; + +/** + * Group-specific API methods + * + * This class handles Laconica group API methods. + * + * @category Twitter + * @package Laconica + * @author Craig Andrews + * @author Zach Copley <zach@controlyourself.ca> + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + + class TwitapitagsAction extends TwitterapiAction + { + + function timeline($args, $apidata) + { + parent::handle($args); + + common_debug("in tags api action"); + + $this->auth_user = $apidata['user']; + $tag = $apidata['api_arg']; + + if (empty($tag)) { + $this->clientError('Not Found', 404, $apidata['content-type']); + return; + } + + $sitename = common_config('site', 'name'); + $title = sprintf(_("Notices tagged with %s"), $tag); + $taguribase = common_config('integration', 'taguri'); + $id = "tag:$taguribase:TagTimeline:".$tag; + $link = common_local_url('tag', + array('tag' => $tag)); + $subtitle = sprintf(_('Updates tagged with %1$s on %2$s!'), + $tag, $sitename); + + $page = (int)$this->arg('page', 1); + $count = (int)$this->arg('count', 20); + $max_id = (int)$this->arg('max_id', 0); + $since_id = (int)$this->arg('since_id', 0); + $since = $this->arg('since'); + + # XXX: support max_id, since_id, and since arguments + $notice = Notice_tag::getStream($tag, ($page-1)*$count, $count + 1); + + switch($apidata['content-type']) { + case 'xml': + $this->show_xml_timeline($notice); + break; + case 'rss': + $this->show_rss_timeline($notice, $title, $link, + $subtitle, $suplink); + break; + case 'atom': + if (isset($apidata['api_arg'])) { + $selfuri = common_root_url() . + 'api/laconica/tags/timeline/' . + $apidata['api_arg'] . '.atom'; + } else { + $selfuri = common_root_url() . + 'api/laconica/tags/timeline.atom'; + } + $this->show_atom_timeline($notice, $title, $id, $link, + $subtitle, $suplink, $selfuri); + break; + case 'json': + $this->show_json_timeline($notice); + break; + default: + $this->clientError(_('API method not found!'), $code = 404); + } + } + +} |