]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/SubMirror/actions/addmirror.php
RSS feed items did not get a type assigned
[quix0rs-gnu-social.git] / plugins / SubMirror / actions / addmirror.php
index df6939491fdbf595ba8a5b9c51e96933f087e55d..738fa92f47366e10ba5db02b8149d5d5522df77e 100644 (file)
@@ -26,9 +26,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
 
 /**
  * Takes parameters:
@@ -45,10 +43,8 @@ if (!defined('STATUSNET')) {
  * @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;
 
     /**
@@ -58,98 +54,30 @@ class AddMirrorAction extends Action
      *
      * @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);
     }
 }