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

This commit is contained in:
Brion Vibber 2011-03-15 17:15:25 -07:00
parent 325cb4833d
commit ce05a78d08
5 changed files with 94 additions and 4 deletions

View File

@ -59,11 +59,27 @@ class AddMirrorAction extends BaseMirrorAction
function prepare($args) function prepare($args)
{ {
parent::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); $this->profile = $this->profileForFeed($this->feedurl);
return true; 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() function saveMirror()
{ {
if ($this->oprofile->subscribe()) { if ($this->oprofile->subscribe()) {

View File

@ -68,7 +68,7 @@ abstract class BaseMirrorAction extends Action
if (common_valid_http_url($url)) { if (common_valid_http_url($url)) {
return $url; return $url;
} else { } else {
$this->clientError(_m("Invalid feed URL.")); $this->clientError(sprintf(_m("Invalid feed URL: %s"), $url));
} }
} }

View File

@ -100,7 +100,20 @@ class MirrorSettingsAction extends SettingsAction
function showAddFeedForm() 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(); $form->show();
} }

View File

@ -49,6 +49,7 @@ class AddMirrorForm extends Form
*/ */
function formData() function formData()
{ {
$this->out->hidden('provider', 'feed');
$this->out->elementStart('fieldset'); $this->out->elementStart('fieldset');
$this->out->elementStart('ul'); $this->out->elementStart('ul');
@ -67,7 +68,7 @@ class AddMirrorForm extends Form
$this->out->elementEnd('fieldset'); $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); $this->out->element('label', array('for' => $id), $label);
$attrs = array('name' => $name, $attrs = array('name' => $name,

View File

@ -0,0 +1,60 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
* 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/>.
*
* @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');
}
}