]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/UserFlag/flagprofile.php
Added block link to subscription notification emails; block action can now take a...
[quix0rs-gnu-social.git] / plugins / UserFlag / flagprofile.php
index 77c86b233bd50e800a5e44baa69ab12e9d2795fb..018c1e8ac99992eda613d86b6e42647d5371cd46 100644 (file)
@@ -41,11 +41,8 @@ if (!defined('STATUSNET')) {
  * @link     http://status.net/
  */
 
-class FlagprofileAction extends Action
+class FlagprofileAction extends ProfileFormAction
 {
-    var $profile = null;
-    var $flag    = null;
-
     /**
      * Take arguments for running
      *
@@ -56,38 +53,17 @@ class FlagprofileAction extends Action
 
     function prepare($args)
     {
-        parent::prepare($args);
-
-        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-            throw new ClientException(_('Action only accepts POST'));
-        }
-
-        if (!common_logged_in()) {
-            $this->clientError(_('Not logged in.'));
-            return false;
-        }
-
-        $id = $this->trimmed('flagprofileto');
-
-        if (!$id) {
-            $this->clientError(_('No profile specified.'));
-            return false;
-        }
-
-        $this->profile = Profile::staticGet('id', $id);
-
-        if (empty($this->profile)) {
-            $this->clientError(_('No profile with that ID.'));
+        if (!parent::prepare($args)) {
             return false;
         }
 
         $user = common_current_user();
 
         assert(!empty($user)); // checked above
+        assert(!empty($this->profile)); // checked above
 
         if (User_flag_profile::exists($this->profile->id,
-                                      $user->id))
-        {
+                                      $user->id)) {
             $this->clientError(_('Flag already exists.'));
             return false;
         }
@@ -98,6 +74,9 @@ class FlagprofileAction extends Action
     /**
      * Handle request
      *
+     * Overriding the base Action's handle() here to deal check
+     * for Ajax and return an HXR response if necessary
+     *
      * @param array $args $_REQUEST args; handled in prepare()
      *
      * @return void
@@ -105,69 +84,54 @@ class FlagprofileAction extends Action
 
     function handle($args)
     {
-        parent::handle($args);
-
-        $this->flagProfile();
-        
-        if ($this->boolean('ajax')) {
-            header('Content-Type: text/xml;charset=utf-8');
-            $this->xw->startDocument('1.0', 'UTF-8');
-            $this->elementStart('html');
-            $this->elementStart('head');
-            $this->element('title', null, _('Flagged for review'));
-            $this->elementEnd('head');
-            $this->elementStart('body');
-            $this->element('p', 'flagged', _('Flagged'));
-            $this->elementEnd('body');
-            $this->elementEnd('html');
-        } else {
-            $this->returnTo();
+        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+            $this->handlePost();
+            if (!$this->boolean('ajax')) {
+                $this->returnToPrevious();
+            }
         }
     }
 
-    function title() {
-        return _('Flag profile');
-    }
-
     /**
-     * save the profile flag
+     * Handle POST
      *
      * @return void
      */
 
-    function flagProfile()
+    function handlePost()
     {
         $user = common_current_user();
 
         assert(!empty($user));
         assert(!empty($this->profile));
 
-        $ufp = new User_flag_profile();
+        // throws an exception on error
 
-        $ufp->profile_id = $this->profile->id;
-        $ufp->user_id    = $user->id;
-        $ufp->created    = common_sql_now();
+        User_flag_profile::create($user->id, $this->profile->id);
 
-        if (!$ufp->insert()) {
-            throw new ServerException(sprintf(_("Couldn't flag profile '%s' with flag '%s'."),
-                                              $this->profile->nickname, $this->flag));
+        if ($this->boolean('ajax')) {
+            $this->ajaxResults();
         }
-
-        $ufp->free();
     }
 
-    function returnTo()
-    {
-        // Now, gotta figure where we go back to
-        foreach ($this->args as $k => $v) {
-            if ($k == 'returnto-action') {
-                $action = $v;
-            } elseif (substr($k, 0, 9) == 'returnto-') {
-                $args[substr($k, 9)] = $v;
-            }
-        }
+    /**
+     * Return results as AJAX message
+     *
+     * @return void
+     */
 
-        common_redirect(common_local_url($action, $args), 303);
+    function ajaxResults()
+    {
+        header('Content-Type: text/xml;charset=utf-8');
+        $this->xw->startDocument('1.0', 'UTF-8');
+        $this->elementStart('html');
+        $this->elementStart('head');
+        $this->element('title', null, _('Flagged for review'));
+        $this->elementEnd('head');
+        $this->elementStart('body');
+        $this->element('p', 'flagged', _('Flagged'));
+        $this->elementEnd('body');
+        $this->elementEnd('html');
     }
 }