]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/favor.php
FeedSub gets a plugin event handler for sub/unsub
[quix0rs-gnu-social.git] / actions / favor.php
index c5adf7a3b173bb8305b33c241119e4fad6baa838..1ce0eb89471074c16e1af716f26dd66075483db5 100644 (file)
@@ -1,16 +1,16 @@
 <?php
-
 /**
  * Favor action.
  *
  * PHP version 5
  *
  * @category Action
- * @package  StatusNet
- * @author   Evan Prodromou <evan@controlyourself.ca>
- * @author   Robin Millette <millette@controlyourself.ca>
+ * @package  GNUsocial
+ * @author   Evan Prodromou <evan@status.net>
+ * @author   Robin Millette <millette@status.net>
+ * @author   Mikael Nordfeldth <mmn@hethane.se>
  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://laconi.ca/
+ * @link     http://www.gnu.org/software/social/
  *
  * StatusNet - the distributed open-source microblogging tool
  * Copyright (C) 2008, 2009, StatusNet, Inc.
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('LACONICA')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 require_once INSTALLDIR.'/lib/mail.php';
-require_once INSTALLDIR.'/lib/disfavorform.php';
 
 /**
- * Favor class.
+ * FavorAction class.
  *
  * @category Action
- * @package  StatusNet
- * @author   Evan Prodromou <evan@controlyourself.ca>
- * @author   Robin Millette <millette@controlyourself.ca>
+ * @package  GNUsocial
+ * @author   Evan Prodromou <evan@status.net>
+ * @author   Robin Millette <millette@status.net>
+ * @author   Mikael Nordfeldth <mmn@hethane.se>
  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link     http://laconi.ca/
+ * @link     http://www.gnu.org/software/social/
  */
-class FavorAction extends Action
+class FavorAction extends FormAction
 {
-    /**
-     * Class handler.
-     *
-     * @param array $args query arguments
-     *
-     * @return void
-     */
-    function handle($args)
+    // We overload this because success should redirect
+    public function showForm($msg=null, $success=false)
     {
-        parent::handle($args);
-        if (!common_logged_in()) {
-            $this->clientError(_('Not logged in.'));
-            return;
-        }
-        $user = common_current_user();
-        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
+        if ($success) {
             common_redirect(common_local_url('showfavorites',
-                array('nickname' => $user->nickname)));
-            return;
+                array('nickname' => $user->nickname)), 303);
         }
+
+        parent::showForm($msg, $success);
+    }
+
+    protected function handlePost()
+    {
         $id     = $this->trimmed('notice');
-        $notice = Notice::staticGet($id);
-        $token  = $this->trimmed('token-'.$notice->id);
-        if (!$token || $token != common_session_token()) {
-            $this->clientError(_("There was a problem with your session token. Try again, please."));
-            return;
+        $notice = Notice::getKV($id);
+        if (!($notice instanceof Notice)) {
+            $this->serverError(_('Notice not found'));
         }
-        if ($user->hasFave($notice)) {
+        if ($this->scoped->hasFave($notice)) {
+            // TRANS: Client error displayed when trying to mark a notice as favorite that already is a favorite.
             $this->clientError(_('This notice is already a favorite!'));
-            return;
         }
-        $fave = Fave::addNew($user, $notice);
+        $fave = Fave::addNew($this->scoped, $notice);
         if (!$fave) {
+            // TRANS: Server error displayed when trying to mark a notice as favorite fails in the database.
             $this->serverError(_('Could not create favorite.'));
-            return;
         }
-        $this->notify($notice, $user);
-        $user->blowFavesCache();
-        if ($this->boolean('ajax')) {
+        $this->notify($notice, $this->scoped->getUser());
+        $this->scoped->blowFavesCache();
+        if (StatusNet::isAjax()) {
             $this->startHTML('text/xml;charset=utf-8');
             $this->elementStart('head');
-            $this->element('title', null, _('Disfavor favorite'));
+            // TRANS: Page title for page on which favorite notices can be unfavourited.
+            $this->element('title', null, _('Disfavor favorite.'));
             $this->elementEnd('head');
             $this->elementStart('body');
             $disfavor = new DisFavorForm($this, $notice);
             $disfavor->show();
             $this->elementEnd('body');
-            $this->elementEnd('html');
-        } else {
-            common_redirect(common_local_url('showfavorites',
-                                             array('nickname' => $user->nickname)),
-                            303);
+            $this->endHTML();
+            exit;
         }
+        common_redirect(common_local_url('showfavorites',
+                                         array('nickname' => $this->scoped->nickname)),
+                            303);
     }
 
     /**
-     * Notifies a user when his notice is favorited.
+     * Notifies a user when their notice is favorited.
      *
      * @param class $notice favorited notice
      * @param class $user   user declaring a favorite
@@ -113,7 +103,7 @@ class FavorAction extends Action
      */
     function notify($notice, $user)
     {
-        $other = User::staticGet('id', $notice->profile_id);
+        $other = User::getKV('id', $notice->profile_id);
         if ($other && $other->id != $user->id) {
             if ($other->email && $other->emailnotifyfav) {
                 mail_notify_fave($other, $user, $notice);
@@ -123,4 +113,3 @@ class FavorAction extends Action
         }
     }
 }
-