protected function doPost()
 {
     try {
         $request = Subscription_queue::pkeyGet(array('subscriber' => $this->scoped->id, 'subscribed' => $this->target->id));
         if ($request instanceof Subscription_queue) {
             $request->abort();
         }
     } catch (AlreadyFulfilledException $e) {
         common_debug('Tried to cancel a non-existing pending subscription');
     }
     if (GNUsocial::isAjax()) {
         $this->startHTML('text/xml;charset=utf-8');
         $this->elementStart('head');
         // TRANS: Title after unsubscribing from a group.
         $this->element('title', null, _m('TITLE', 'Unsubscribed'));
         $this->elementEnd('head');
         $this->elementStart('body');
         $subscribe = new SubscribeForm($this, $this->target);
         $subscribe->show();
         $this->elementEnd('body');
         $this->endHTML();
         exit;
     }
     common_redirect(common_local_url('subscriptions', array('nickname' => $this->scoped->getNickname())), 303);
 }
Пример #2
0
 /**
  * Prepare to run
  */
 function prepare($args)
 {
     parent::prepare($args);
     $cur = common_current_user();
     if (empty($cur)) {
         // TRANS: Client error displayed trying to approve group membership while not logged in.
         $this->clientError(_('Must be logged in.'), 403);
         return false;
     }
     if ($this->arg('profile_id')) {
         $this->profile = Profile::staticGet('id', $this->arg('profile_id'));
     } else {
         // TRANS: Client error displayed trying to approve subscriptionswithout specifying a profile to approve.
         $this->clientError(_('Must specify a profile.'));
         return false;
     }
     $this->request = Subscription_queue::pkeyGet(array('subscriber' => $this->profile->id, 'subscribed' => $cur->id));
     if (empty($this->request)) {
         // TRANS: Client error displayed trying to approve subscription for a non-existing request.
         // TRANS: %s is a user nickname.
         $this->clientError(sprintf(_('%s is not in the moderation queue for your subscriptions.'), $this->profile->nickname), 403);
     }
     $this->approve = (bool) $this->arg('approve');
     $this->cancel = (bool) $this->arg('cancel');
     if (!$this->approve && !$this->cancel) {
         // TRANS: Client error displayed trying to approve/deny subscription.
         $this->clientError(_('Internal error: received neither cancel nor abort.'));
     }
     if ($this->approve && $this->cancel) {
         // TRANS: Client error displayed trying to approve/deny  subscription
         $this->clientError(_('Internal error: received both cancel and abort.'));
     }
     return true;
 }
Пример #3
0
 function handle($args)
 {
     parent::handle($args);
     if ($this->boolean('ajax')) {
         StatusNet::setApi(true);
     }
     if (!common_logged_in()) {
         // TRANS: Error message displayed when trying to perform an action that requires a logged in user.
         $this->clientError(_('Not logged in.'));
         return;
     }
     $user = common_current_user();
     if ($_SERVER['REQUEST_METHOD'] != 'POST') {
         common_redirect(common_local_url('subscriptions', array('nickname' => $user->nickname)));
         return;
     }
     /* Use a session token for CSRF protection. */
     $token = $this->trimmed('token');
     if (!$token || $token != common_session_token()) {
         // TRANS: Client error displayed when the session token does not match or is not given.
         $this->clientError(_('There was a problem with your session token. ' . 'Try again, please.'));
         return;
     }
     $other_id = $this->arg('unsubscribeto');
     if (!$other_id) {
         // TRANS: Client error displayed when trying to leave a group without specifying an ID.
         $this->clientError(_('No profile ID in request.'));
         return;
     }
     $other = Profile::staticGet('id', $other_id);
     if (!$other) {
         // TRANS: Client error displayed when trying to leave a non-existing group.
         $this->clientError(_('No profile with that ID.'));
         return;
     }
     $this->request = Subscription_queue::pkeyGet(array('subscriber' => $user->id, 'subscribed' => $other->id));
     if (empty($this->request)) {
         // TRANS: Client error displayed when trying to approve a non-existing group join request.
         // TRANS: %s is a user nickname.
         $this->clientError(sprintf(_('%s is not in the moderation queue for this group.'), $this->profile->nickname), 403);
     }
     $this->request->abort();
     if ($this->boolean('ajax')) {
         $this->startHTML('text/xml;charset=utf-8');
         $this->elementStart('head');
         // TRANS: Title after unsubscribing from a group.
         $this->element('title', null, _m('TITLE', 'Unsubscribed'));
         $this->elementEnd('head');
         $this->elementStart('body');
         $subscribe = new SubscribeForm($this, $other);
         $subscribe->show();
         $this->elementEnd('body');
         $this->elementEnd('html');
     } else {
         common_redirect(common_local_url('subscriptions', array('nickname' => $user->nickname)), 303);
     }
 }
Пример #4
0
 function exists($subscriber, $other)
 {
     $sub = Subscription_queue::pkeyGet(array('subscriber' => $subscriber->id, 'subscribed' => $other->id));
     return empty($sub) ? false : true;
 }
Пример #5
0
 public function exists(Profile $subscriber, Profile $other)
 {
     $sub = Subscription_queue::pkeyGet(array('subscriber' => $subscriber->id, 'subscribed' => $other->id));
     return $sub instanceof Subscription_queue;
 }