* @link http://status.net/
*/
-if (!defined('STATUSNET')) {
- exit(1);
-}
+if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
/**
* Takes parameters:
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
-
-class AddMirrorAction extends Action
+class AddMirrorAction extends BaseMirrorAction
{
- var $user;
var $feedurl;
/**
*
* @return boolean success flag
*/
-
- function prepare($args)
+ protected function prepare(array $args=array())
{
parent::prepare($args);
- $ok = $this->sharedBoilerplate();
- if ($ok) {
- // and now do something useful!
- $this->profile = $this->validateProfile($this->trimmed('profile'));
- return true;
- } else {
- return $ok;
- }
- }
-
- function validateProfile($id)
- {
- $id = intval($id);
- $profile = Profile::staticGet('id', $id);
- if ($profile && $profile->id != $this->user->id) {
- return $profile;
- }
- // TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed.
- $this->clientError(_m("Invalid profile for mirroring."));
- }
-
- /**
- * @fixme none of this belongs in end classes
- * this stuff belongs in shared code!
- */
- function sharedBoilerplate()
- {
- // Only allow POST requests
-
- if ($_SERVER['REQUEST_METHOD'] != 'POST') {
- $this->clientError(_('This action only accepts POST requests.'));
- return false;
- }
-
- // CSRF protection
-
- $token = $this->trimmed('token');
-
- if (!$token || $token != common_session_token()) {
- $this->clientError(_('There was a problem with your session token.'.
- ' Try again, please.'));
- return false;
- }
-
- // Only for logged-in users
-
- $this->user = common_current_user();
-
- if (empty($this->user)) {
- $this->clientError(_('Not logged in.'));
- return false;
- }
+ $feedurl = $this->getFeedUrl();
+ $this->feedurl = $this->validateFeedUrl($feedurl);
+ $this->profile = $this->profileForFeed($this->feedurl);
return true;
}
- /**
- * Handle request
- *
- * Does the subscription and returns results.
- *
- * @param Array $args unused.
- *
- * @return void
- */
-
- function handle($args)
+ function getFeedUrl()
{
- // Throws exception on error
- $this->saveMirror();
-
- if ($this->boolean('ajax')) {
- $this->startHTML('text/xml;charset=utf-8');
- $this->elementStart('head');
- $this->element('title', null, _('Subscribed'));
- $this->elementEnd('head');
- $this->elementStart('body');
- $unsubscribe = new EditMirrorForm($this, $this->profile);
- $unsubscribe->show();
- $this->elementEnd('body');
- $this->elementEnd('html');
- } else {
- $url = common_local_url('mirrorsettings');
- common_redirect($url, 303);
+ $provider = $this->trimmed('provider');
+ switch ($provider) {
+ case 'feed':
+ return $this->trimmed('feedurl');
+ default:
+ // TRANS: Exception thrown when a feed provider could not be recognised.
+ throw new Exception(_m('Internal form error: Unrecognized feed provider.'));
}
}
- function saveMirror()
+ protected function saveMirror()
{
+ $this->oprofile->subscribe();
SubMirror::saveMirror($this->user, $this->profile);
}
}