From ce05a78d0843b7d6f1664d128d0cfd3eac5e2801 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 17:15:25 -0700 Subject: [PATCH] SubMirror wizard work in progress: Twitter option now lets you type in a username and picks the feed. Should in theory work via superfeedr or other compatible hub --- plugins/SubMirror/actions/addmirror.php | 18 +++++- plugins/SubMirror/actions/basemirror.php | 2 +- plugins/SubMirror/actions/mirrorsettings.php | 15 ++++- plugins/SubMirror/lib/addmirrorform.php | 3 +- .../SubMirror/lib/addtwittermirrorform.php | 60 +++++++++++++++++++ 5 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 plugins/SubMirror/lib/addtwittermirrorform.php diff --git a/plugins/SubMirror/actions/addmirror.php b/plugins/SubMirror/actions/addmirror.php index 8c3a9740f3..31805c1669 100644 --- a/plugins/SubMirror/actions/addmirror.php +++ b/plugins/SubMirror/actions/addmirror.php @@ -59,11 +59,27 @@ class AddMirrorAction extends BaseMirrorAction function prepare($args) { parent::prepare($args); - $this->feedurl = $this->validateFeedUrl($this->trimmed('feedurl')); + $feedurl = $this->getFeedUrl(); + $this->feedurl = $this->validateFeedUrl($feedurl); $this->profile = $this->profileForFeed($this->feedurl); return true; } + function getFeedUrl() + { + $provider = $this->trimmed('provider'); + switch ($provider) { + case 'feed': + return $this->trimmed('feedurl'); + case 'twitter': + $screenie = $this->trimmed('screen_name'); + $base = 'http://api.twitter.com/1/statuses/user_timeline.atom?screen_name='; + return $base . urlencode($screenie); + default: + throw new Exception('Internal form error: unrecognized feed provider.'); + } + } + function saveMirror() { if ($this->oprofile->subscribe()) { diff --git a/plugins/SubMirror/actions/basemirror.php b/plugins/SubMirror/actions/basemirror.php index 3e3431103f..843dfb92e1 100644 --- a/plugins/SubMirror/actions/basemirror.php +++ b/plugins/SubMirror/actions/basemirror.php @@ -68,7 +68,7 @@ abstract class BaseMirrorAction extends Action if (common_valid_http_url($url)) { return $url; } else { - $this->clientError(_m("Invalid feed URL.")); + $this->clientError(sprintf(_m("Invalid feed URL: %s"), $url)); } } diff --git a/plugins/SubMirror/actions/mirrorsettings.php b/plugins/SubMirror/actions/mirrorsettings.php index ae09111ec4..90bbf3dffb 100644 --- a/plugins/SubMirror/actions/mirrorsettings.php +++ b/plugins/SubMirror/actions/mirrorsettings.php @@ -100,7 +100,20 @@ class MirrorSettingsAction extends SettingsAction function showAddFeedForm() { - $form = new AddMirrorForm($this); + switch ($this->arg('provider')) { + case 'statusnet': + break; + case 'twitter': + $form = new AddTwitterMirrorForm($this); + break; + case 'wordpress': + break; + case 'linkedin': + break; + case 'feed': + default: + $form = new AddMirrorForm($this); + } $form->show(); } diff --git a/plugins/SubMirror/lib/addmirrorform.php b/plugins/SubMirror/lib/addmirrorform.php index e1d50c272c..17edbd5e96 100644 --- a/plugins/SubMirror/lib/addmirrorform.php +++ b/plugins/SubMirror/lib/addmirrorform.php @@ -49,6 +49,7 @@ class AddMirrorForm extends Form */ function formData() { + $this->out->hidden('provider', 'feed'); $this->out->elementStart('fieldset'); $this->out->elementStart('ul'); @@ -67,7 +68,7 @@ class AddMirrorForm extends Form $this->out->elementEnd('fieldset'); } - private function doInput($id, $name, $label, $value=null, $instructions=null) + protected function doInput($id, $name, $label, $value=null, $instructions=null) { $this->out->element('label', array('for' => $id), $label); $attrs = array('name' => $name, diff --git a/plugins/SubMirror/lib/addtwittermirrorform.php b/plugins/SubMirror/lib/addtwittermirrorform.php new file mode 100644 index 0000000000..eb28aa038f --- /dev/null +++ b/plugins/SubMirror/lib/addtwittermirrorform.php @@ -0,0 +1,60 @@ +. + * + * @package StatusNet + * @copyright 2010 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') && !defined('LACONICA')) { + exit(1); +} + +class AddTwitterMirrorForm extends AddMirrorForm +{ + + /** + * Visible or invisible data elements + * + * Display the form fields that make up the data of the form. + * Sub-classes should overload this to show their data. + * + * @return void + */ + function formData() + { + $this->out->hidden('provider', 'twitter'); + $this->out->elementStart('fieldset'); + + $this->out->elementStart('ul'); + + $this->li(); + $this->doInput('addmirror-feedurl', + 'screen_name', + _m('Twitter username:'), + $this->out->trimmed('screen_name')); + $this->unli(); + + $this->li(); + $this->out->submit('addmirror-save', _m('BUTTON','Add feed')); + $this->unli(); + $this->out->elementEnd('ul'); + $this->out->elementEnd('fieldset'); + } +}