git.gnu.io has moved to IP address 209.51.188.249 -- please double check where you are logging in.

unsubscribe.php 3.63 KB
Newer Older
Evan Prodromou's avatar
Evan Prodromou committed
1
<?php
2 3 4 5 6 7
/**
 * Unsubscribe handler
 *
 * PHP version 5
 *
 * @category Action
8
 * @package  StatusNet
9 10
 * @author   Evan Prodromou <evan@status.net>
 * @author   Robin Millette <millette@status.net>
11
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
12
 * @link     http://status.net/
13
 *
14
 * StatusNet - the distributed open-source microblogging tool
15
 * Copyright (C) 2008, 2009, StatusNet, Inc.
Evan Prodromou's avatar
Evan Prodromou committed
16
 *
17 18 19 20
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
Evan Prodromou's avatar
Evan Prodromou committed
21
 *
22 23 24 25
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
Evan Prodromou's avatar
Evan Prodromou committed
26
 *
27 28 29
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
Evan Prodromou's avatar
Evan Prodromou committed
30

31
if (!defined('STATUSNET') && !defined('LACONICA')) {
32 33 34 35 36 37 38
    exit(1);
}

/**
 * Unsubscribe handler
 *
 * @category Action
39
 * @package  StatusNet
40 41
 * @author   Evan Prodromou <evan@status.net>
 * @author   Robin Millette <millette@status.net>
42
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
43
 * @link     http://status.net/
44
 */
45 46
class UnsubscribeAction extends Action
{
47 48
    function handle($args)
    {
49 50
        parent::handle($args);
        if (!common_logged_in()) {
51
            // TRANS: Error message displayed when trying to perform an action that requires a logged in user.
52
            $this->clientError(_('Not logged in.'));
53
        }
54

55
        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
56
            common_redirect(common_local_url('subscriptions',
57
                                             array('nickname' => $this->scoped->nickname)));
58
        }
59

60
        /* Use a session token for CSRF protection. */
61

62
        $token = $this->trimmed('token');
63

64
        if (!$token || $token != common_session_token()) {
65
            // TRANS: Client error displayed when the session token does not match or is not given.
66 67
            $this->clientError(_('There was a problem with your session token. ' .
                                 'Try again, please.'));
68
        }
69

70
        $other_id = $this->arg('unsubscribeto');
71 72

        if (!$other_id) {
73
            // TRANS: Client error displayed when trying to unsubscribe without providing a profile ID.
74
            $this->clientError(_('No profile ID in request.'));
75 76
        }

77
        $other = Profile::getKV('id', $other_id);
78

79
        if (!($other instanceof Profile)) {
80
            // TRANS: Client error displayed when trying to unsubscribe while providing a non-existing profile ID.
81
            $this->clientError(_('No profile with that ID.'));
82 83
        }

84 85 86 87
        try {
            Subscription::cancel($this->scoped, $other);
        } catch (Exception $e) {
            $this->clientError($e->getMessage());
88
        }
Evan Prodromou's avatar
Evan Prodromou committed
89

90
        if ($this->boolean('ajax')) {
91
            $this->startHTML('text/xml;charset=utf-8');
92
            $this->elementStart('head');
93
            // TRANS: Page title for page to unsubscribe.
94 95 96
            $this->element('title', null, _('Unsubscribed'));
            $this->elementEnd('head');
            $this->elementStart('body');
sarven's avatar
sarven committed
97 98
            $subscribe = new SubscribeForm($this, $other);
            $subscribe->show();
99
            $this->elementEnd('body');
100
            $this->endHTML();
101
        } else {
102
            common_redirect(common_local_url('subscriptions', array('nickname' => $this->scoped->nickname)), 303);
millette's avatar
millette committed
103
        }
104
    }
Evan Prodromou's avatar
Evan Prodromou committed
105
}