Completed
Pull Request — master (#29)
by Goffy
01:40
created

subscription.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * ****************************************************************************
4
 *  - A Project by Developers TEAM For Xoops - ( https://xoops.org )
5
 * ****************************************************************************
6
 *  XNEWSLETTER - MODULE FOR XOOPS
7
 *  Copyright (c) 2007 - 2012
8
 *  Goffy ( wedega.com )
9
 *
10
 *  You may not change or alter any portion of this comment or credits
11
 *  of supporting developers from this source code or any supporting
12
 *  source code which is considered copyrighted (c) material of the
13
 *  original comment or credit authors.
14
 *
15
 *  This program is distributed in the hope that it will be useful,
16
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 *  GNU General Public License for more details.
19
 *  ---------------------------------------------------------------------------
20
 * @copyright  Goffy ( wedega.com )
21
 * @license    GPL 2.0
22
 * @package    xnewsletter
23
 * @author     Goffy ( [email protected] )
24
 *
25
 * ****************************************************************************
26
 */
27
28
use XoopsModules\Xnewsletter;
29
30
$currentFile = basename(__FILE__);
31
require_once __DIR__ . '/header.php';
32
$op            = \Xmf\Request::getString('op', 'search_subscription');
33
$activationKey = \Xmf\Request::getString('actkey', '');
34
$subscr_id     = \Xmf\Request::getInt('subscr_id', 0);
35
$subscr_email  = \Xmf\Request::getString('subscr_email', '');
36
37
if (\Xmf\Request::hasVar('addnew', 'REQUEST')) {
38
    $op = 'addnew_subscription';
39
}
40
if ('' != $activationKey && 'unsub' !== $op) {
41
    $op = 'save_subscription';
42
}
43
if ('unsub' === $op) {
44
    $subscr_email = \Xmf\Request::getString('email', '');
45
    $op           = 'delete_subscription';
46
    //$GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription.tpl';
47
    $_SESSION['redirect_mail'] = \Xmf\Request::getString('email', '');
48
    $_SESSION['unsub']         = '1';
49
} else {
50
    $_SESSION['redirect_mail'] = '';
51
    $_SESSION['unsub']         = '0';
52
}
53
54
//to avoid errors in debug when xn_groups_change_other
55
$subscr_sex       = '';
56
$subscr_firstname = '';
57
$subscr_lastname  = '';
58
59
switch ($op) {
60
    case 'search_subscription':
61
    default:
62
        // if not anonymous subscriber / subscriber is a Xoops user
63
        if (is_object($xoopsUser) && isset($xoopsUser)) {
64
            $subscr_email              = $xoopsUser->email();
65
            $_SESSION['redirect_mail'] = $subscr_email;
66
            header("Location:{$currentFile}?op=list_subscriptions");
67
            exit();
68
        }
69
        // if anonymous subscriber
70
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_list_subscriptions.tpl';
71
        require_once XOOPS_ROOT_PATH . '/header.php';
72
73
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
74
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
75
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
76
        // breadcrumb
77
        $breadcrumb = new Xnewsletter\Breadcrumb();
78
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
79
        $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, '');
80
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
81
82
        $actionProts_ok      = [];
83
        $actionProts_error   = [];
84
        $actionProts_warning = [];
85
86
        $subscr_email         = '';
87
        $showSubscrSearchForm = true;
88
        $showSubscrForm       = false;
89
90
        // show search subscr form
91
        $xoopsTpl->assign('showSubscrSearchForm', $showSubscrSearchForm);
92
        // show form search
93
        $subscrObj = $helper->getHandler('Subscr')->create();
94
        $xoopsTpl->assign('subscrSearchForm', $subscrObj->getSearchForm()->render());
95
96
        break;
97
    case 'list_subscriptions':
98
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_list_subscriptions.tpl';
99
        require_once XOOPS_ROOT_PATH . '/header.php';
100
101
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
102
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
103
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
104
        // breadcrumb
105
        $breadcrumb = new Xnewsletter\Breadcrumb();
106
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
107
        $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, '');
108
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
109
        // init vars
110
        $actionProts_ok       = [];
111
        $actionProts_warning  = [];
112
        $actionProts_error    = [];
113
        $showSubscrSearchForm = false;
114
        $showSubscrForm       = true;
115
116
        if (is_object($xoopsUser) && isset($xoopsUser)) {
117
            // if not anonymous subscriber / subscriber is a Xoops user get subscr_email from Xoops user
118
            $subscr_email              = $xoopsUser->email();
119
            $_SESSION['redirect_mail'] = $subscr_email;
120
        } else {
121
            // if anonymous subscriber get subscr_email from search form
122
            $subscr_email = \Xmf\Request::getString('subscr_email', '');
123
            if ('' != $subscr_email) {
124
                // check captcha
125
                xoops_load('xoopscaptcha');
126
                $xoopsCaptcha = XoopsCaptcha::getinstance();
127
                if (!$xoopsCaptcha->verify()) {
128
                    $_SESSION['redirect_mail'] = $subscr_email;
129
                    redirect_header('?op=search_subscription', 3, $xoopsCaptcha->getMessage());
130
                }
131
                // check subscr_email
132
                if (!xnewsletter_checkEmail($subscr_email)) {
133
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
134
                }
135
                // check if a Xoops user has $subscr_email
136
                if (0 != count($memberHandler->getUsers(new \Criteria('email', $subscr_email)))) {
137
                    $actionProts_warning[] = sprintf(_MA_XNEWSLETTER_PLEASE_LOGIN, $subscr_email);
138
139
                    $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
140
                    $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
141
                    $xoopsTpl->assign('actionProts_error', $actionProts_error);
142
                    break;
143
                }
144
            } else {
145
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
146
            }
147
        }
148
149
        // ???
150
        /*
151
        if (\Xmf\Request::hasVar('redirect_mail', 'SESSION')) {
152
            if (!isset($_SESSION['unsub'])) {
153
                $subscr_email = $_SESSION['redirect_mail'];
154
            } else {
155
                unset($_SESSION['unsub']);
156
            }
157
            unset($_SESSION['redirect_mail']);
158
        }
159
        */
160
161
        // look for existing subscriptions
162
        $subscrCriteria = new \CriteriaCompo();
163
        $subscrCriteria->add(new \Criteria('subscr_email', $subscr_email));
164
        $subscrCriteria->setSort('subscr_id');
165
        $subscrCriteria->setOrder('ASC');
166
        $subscrCount = $helper->getHandler('Subscr')->getCount($subscrCriteria);
167
        $xoopsTpl->assign('subscrCount', $subscrCount);
168
        if ($subscrCount > 0) {
169
            // there are subscriptions with this email
170
            $actionProts_warning[] = _MA_XNEWSLETTER_REGISTRATION_EXIST;
171
            $subscrObjs            = $helper->getHandler('Subscr')->getAll($subscrCriteria);
172
            foreach ($subscrObjs as $subscrObj) {
173
                $subscr_array                             = $subscrObj->toArray();
174
                $subscr_array['subscr_created_formatted'] = formatTimestamp($subscr_array['subscr_created'], $helper->getConfig('dateformat'));
175
                // subscr exists but is unactivated
176
                if (0 == $subscr_array['subscr_activated']) {
177
                    $actionProts_warning[] = str_replace('%link', "?op=resend_subscription&subscr_id={$subscr_array['subscr_id']}", _MA_XNEWSLETTER_SUBSCRIPTION_UNFINISHED);
178
                }
179
                $catsubscrCriteria = new \CriteriaCompo();
180
                $catsubscrCriteria->add(new \Criteria('catsubscr_subscrid', $subscr_array['subscr_id']));
181
                $catsubscrCriteria->setSort('catsubscr_id');
182
                $catsubscrCriteria->setOrder('ASC');
183
                $catsubscrCount = $helper->getHandler('Catsubscr')->getCount($catsubscrCriteria);
184
                $catsubscrObjs  = $helper->getHandler('Catsubscr')->getAll($catsubscrCriteria);
185
                foreach ($catsubscrObjs as $catsubscr_id => $catsubscrObj) {
186
                    $catsubscr_array              = $catsubscrObj->toArray();
187
                    $catObj                       = $helper->getHandler('Cat')->get($catsubscrObj->getVar('catsubscr_catid'));
188
                    $cat_array                    = $catObj->toArray();
189
                    $catsubscr_array['cat']       = $cat_array;
190
                    $subscr_array['catsubscrs'][] = $catsubscr_array;
191
                    unset($catsubscr_array);
192
                    unset($cat_array);
193
                }
194
                $xoopsTpl->append('subscrs', $subscr_array);
195
            }
196
        } else {
197
            // show subscr form
198
            $actionProts_warning[] = _MA_XNEWSLETTER_REGISTRATION_NONE;
199
            $xoopsTpl->assign('showSubscrForm', true);
200
            $subscrObj = $helper->getHandler('Subscr')->create();
201
            $subscrObj->setVar('subscr_email', $subscr_email);
202
            $form = $subscrObj->getForm($currentFile);
203
            $xoopsTpl->assign('subscrForm', $form->render());
204
        }
205
206
        $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
207
        $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
208
        $xoopsTpl->assign('actionProts_error', $actionProts_error);
209
        break;
210
    case 'resend_subscription':
211
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_result.tpl';
212
        require_once XOOPS_ROOT_PATH . '/header.php';
213
214
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
215
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
216
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
217
        // breadcrumb
218
        $breadcrumb = new Xnewsletter\Breadcrumb();
219
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
220
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
221
        // init vars
222
        $actionProts_ok      = [];
223
        $actionProts_warning = [];
224
        $actionProts_error   = [];
225
226
        // check if subscr exists
227
        $subscr_id      = \Xmf\Request::getInt('subscr_id', 0);
228
        $subscrCriteria = new \Criteria('subscr_id', $subscr_id);
229
        $subscrCount    = $helper->getHandler('Subscr')->getCount($subscrCriteria);
230
        if (0 == $subscrCount) {
231
            redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOID);
232
        }
233
        // get subscr data
234
        $subscrObj    = $helper->getHandler('Subscr')->get($subscr_id);
235
        $subscr_email = $subscrObj->getVar('subscr_email');
236
        // resend the email with the confirmation code
237
        $xoopsMailer = xoops_getMailer();
238
        $xoopsMailer->reset();
239
        $xoopsMailer->setTemplateDir();
240
        $xoopsMailer->useMail();
241
        $xoopsMailer->setTemplate('activate.tpl');
242
        $xoopsMailer->setToEmails($subscr_email);
243
        if (isset($xoopsConfig['adminmail'])) {
244
            $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
245
        }
246
        if (isset($xoopsConfig['sitename'])) {
247
            $xoopsMailer->setFromName($xoopsConfig['sitename']);
248
        }
249
        $xoopsMailer->assign('EMAIL', $subscr_email);
250
        $xoopsMailer->assign('SEX', $subscrObj->getVar('subscr_sex'));
251
        $xoopsMailer->assign('FIRSTNAME', $subscrObj->getVar('subscr_firstname'));
252
        $xoopsMailer->assign('LASTNAME', $subscrObj->getVar('subscr_lastname'));
253
        $xoopsMailer->assign('IP', xoops_getenv('REMOTE_ADDR'));
254
        $activationKey = base64_encode(XOOPS_URL . "||addnew||{$subscr_id}||{$subscrObj->getVar('subscr_actkey')}||{$subscr_email}");
255
        $xoopsMailer->assign('ACTLINK', XOOPS_URL . "/modules/xnewsletter/{$currentFile}?actkey={$activationKey}");
256
        $subject = _MA_XNEWSLETTER_SUBSCRIPTIONSUBJECT . $GLOBALS['xoopsConfig']['sitename'];
257
        $xoopsMailer->setSubject($subject);
258
        if (!$xoopsMailer->send()) {
259
            $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors();
260
        } else {
261
            $actionProts_ok[] = str_replace('%subscr_email', $subscr_email, _MA_XNEWSLETTER_RESENDMAIL_REG_OK);
262
        }
263
264
        $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
265
        $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
266
        $xoopsTpl->assign('actionProts_error', $actionProts_error);
267
        break;
268
    case 'add_subscription':
269
    case 'create_subscription':
270
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription.tpl';
271
        require_once XOOPS_ROOT_PATH . '/header.php';
272
273
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
274
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
275
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
276
        // breadcrumb
277
        $breadcrumb = new Xnewsletter\Breadcrumb();
278
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
279
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
280
281
        // get create subscr form
282
        if ('' != $subscr_email) {
283
            // existing email
284
            if (!xnewsletter_checkEmail($subscr_email)) {
285
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
286
            }
287
        } elseif (is_object($xoopsUser) && isset($xoopsUser)) {
288
            // take actual xoops user
289
            $subscr_email = $xoopsUser->email();
290
        } else {
291
            $subscr_email = '';
292
        }
293
        $subscrObj = $helper->getHandler('Subscr')->create();
294
        $subscrObj->setVar('subscr_email', $subscr_email);
295
        $subscrForm = $subscrObj->getForm();
296
        $xoopsTpl->assign('xnewsletter_content', $subscrForm->render());
297
        break;
298
    case 'edit_subscription':
299
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription.tpl';
300
        require_once XOOPS_ROOT_PATH . '/header.php';
301
302
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
303
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
304
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
305
        // breadcrumb
306
        $breadcrumb = new Xnewsletter\Breadcrumb();
307
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
308
        $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, XNEWSLETTER_URL . '/subscription.php?op=list_subscriptions');
309
        $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIPTION_EDIT, '');
310
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
311
312
        // get edit subscr form
313
        $subscr_id = \Xmf\Request::getInt('subscr_id', 0);
314
        if ($subscr_id <= 0) {
315
            redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOID);
316
        }
317
        $subscrObj  = $helper->getHandler('Subscr')->get($subscr_id);
318
        $subscrForm = $subscrObj->getForm();
319
        $xoopsTpl->assign('xnewsletter_content', $subscrForm->render());
320
        break;
321
    case 'save_subscription':
322
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_result.tpl';
323
        require_once XOOPS_ROOT_PATH . '/header.php';
324
325
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
326
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
327
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
328
        // breadcrumb
329
        $breadcrumb = new Xnewsletter\Breadcrumb();
330
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
331
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
332
        // init vars
333
        $actionProts_ok       = [];
334
        $actionProts_warning  = [];
335
        $actionProts_error    = [];
336
        $count_ok             = 0;
337
        $count_err            = 0;
338
        $activationKeyIsValid = false;
339
        // check right to subscribe directly
340
        $allowedWithoutActivationKey = false;
341
        $uid                         = is_object($xoopsUser) ? (int)$xoopsUser->getVar('uid') : 0;
342 View Code Duplication
        if (is_object($xoopsUser) && isset($xoopsUser)) {
343
            // if not anonymous subscriber / subscriber is a Xoops user
344
            $submitter_email = $xoopsUser->email();
345
            foreach ($xoopsUser->getGroups() as $group) {
346
                if (in_array($group, $helper->getConfig('xn_groups_without_actkey'))
347
                    || XOOPS_GROUP_ADMIN == $group) {
348
                    $allowedWithoutActivationKey = true;
349
                    break;
350
                }
351
            }
352
        }
353
        // if anonymous subscriber
354
        // NOP
355
356
        if ($allowedWithoutActivationKey) {
357
            // 1st case: subscribe WITHOUT confirmation
358
            // check form
359
            if (!$GLOBALS['xoopsSecurity']->check()) {
360
                redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
361
            }
362
            // check email
363
            if ('' == $subscr_email || !xnewsletter_checkEmail($subscr_email)) {
364
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
365
            }
366
            // get or create subscr
367 View Code Duplication
            if ($subscr_id > 0) {
368
                $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
369
                $saveType  = 'update';
370
            } else {
371
                $subscrObj = $helper->getHandler('Subscr')->create();
372
                $saveType  = 'addnew';
373
            }
374
            $subscrObj->setVar('subscr_sex', \Xmf\Request::getString('subscr_sex', ''));
375
            $subscrObj->setVar('subscr_firstname', \Xmf\Request::getString('subscr_firstname', ''));
376
            $subscrObj->setVar('subscr_lastname', \Xmf\Request::getString('subscr_lastname', ''));
377
            // insert subscr
378
            if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
379
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVESUBSCR . '<br>' . $subscrObj->getHtmlErrors());
380
            }
381
            if ($subscr_id > 0) {
382
                $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_UPDATE_OK;
383
            } else {
384
                $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_REG_OK;
385
            }
386
            $subscr_id = $subscrObj->getVar('subscr_id');
387
            // create $code_selections string
388
            $catCriteria = new \CriteriaCompo();
389
            $catCriteria->setSort('cat_id');
390
            $catCriteria->setOrder('ASC');
391
            $catObjs    = $helper->getHandler('Cat')->getAll($catCriteria);
392
            $selections = [];
393 View Code Duplication
            foreach ($catObjs as $cat_id => $catObj) {
394
                // create selections: $cat_id-$cat_selected-$old_catsubcr_id-$old_catsubscr_quited
395
                $selection      = [];
396
                $selection[0]   = $cat_id;
397
                $selection[1]   = in_array($cat_id, $_REQUEST['cats']) ? '1' : '0'; //isset($_REQUEST["cats_{$cat_id}"]);
398
                $selection[2]   = \Xmf\Request::getInt("existing_catsubcr_id_{$cat_id}", 0);
399
                $selection[3]   = \Xmf\Request::getInt("existing_catsubscr_quited_{$cat_id}", 0);
400
                $code_selection = implode('-', $selection);
401
                $selections[]   = $code_selection;
402
                unset($selection);
403
            }
404
            $code_selections = implode('|', $selections);
405
        }
406
407
        if (!$allowedWithoutActivationKey) {
408
            // 2nd case: subscribe WITH confirmation
409
            if ('' == $activationKey) {
410
                // activation key DOESN'T EXIST
411
                // create and send confirmation email
412
                // check form
413
                if (!$GLOBALS['xoopsSecurity']->check()) {
414
                    redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
415
                }
416
                // check email
417
                if ('' == $subscr_email || !xnewsletter_checkEmail($subscr_email)) {
418
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
419
                }
420
                // get subscr fields from form
421
                $subscr_firstname = \Xmf\Request::getString('subscr_firstname', '');
422
                $subscr_lastname  = \Xmf\Request::getString('subscr_lastname', '');
423
                $subscr_sex       = \Xmf\Request::getString('subscr_sex', '');
424
                // create $code_selections string
425
                $catCriteria = new \CriteriaCompo();
426
                $catCriteria->setSort('cat_id');
427
                $catCriteria->setOrder('ASC');
428
                $catObjs    = $helper->getHandler('Cat')->getAll($catCriteria);
429
                $selections = [];
430 View Code Duplication
                foreach ($catObjs as $cat_id => $catObj) {
431
                    // create selections: $cat_id-$cat_selected-$old_catsubcr_id-$old_catsubscr_quited
432
                    $selection      = [];
433
                    $selection[0]   = $cat_id;
434
                    $selection[1]   = in_array($cat_id, \Xmf\Request::getArray('cats')) ? '1' : '0'; //isset($_REQUEST["cats_{$cat_id}"]);
435
                    $selection[2]   = \Xmf\Request::getInt("existing_catsubcr_id_{$cat_id}", 0);
436
                    $selection[3]   = \Xmf\Request::getInt("existing_catsubscr_quited_{$cat_id}", 0);
437
                    $code_selection = implode('-', $selection);
438
                    $selections[]   = $code_selection;
439
                    unset($selection);
440
                }
441
                $code_selections = implode('|', $selections); // string
442
                //
443
                // get or create subscr
444 View Code Duplication
                if ($subscr_id > 0) {
445
                    $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
446
                    $saveType  = 'update';
447
                } else {
448
                    $subscrObj = $helper->getHandler('Subscr')->create();
449
                    $saveType  = 'addnew';
450
                }
451
                // fill subscr
452
                if ($subscr_id <= 0) {
453
                    // form subscr_email
454
                    $subscrObj->setVar('subscr_email', $subscr_email);
455
                    // form subscr_uid
456
                    $subscr_uid = 0;
457
                    $sql        = "SELECT `uid` FROM {$xoopsDB->prefix('users')}";
458
                    $sql        .= " WHERE (`email`='{$subscr_email}')";
459
                    $sql        .= ' LIMIT 1';
460 View Code Duplication
                    if ($user = $xoopsDB->query($sql)) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
461
                        $row_user   = $xoopsDB->fetchRow($user);
462
                        $subscr_uid = $row_user[0];
463
                    }
464
                    $subscrObj->setVar('subscr_uid', $subscr_uid);
465
                    // form subscr_submitter
466
                    $subscrObj->setVar('subscr_submitter', $uid);
467
                }
468
469
                $subscrObj->setVar('subscr_created', time());
470
                $subscrObj->setVar('subscr_ip', xoops_getenv('REMOTE_ADDR'));
471
                $subscr_actkey = xoops_makepass();
472
                $subscrObj->setVar('subscr_actkey', $subscr_actkey);
473
                // format subscr_actoptions: selected_newsletters||firstname||lastname||sex
474
                $activationOptions = [
475
                    'code_selections'  => $code_selections,
476
                    'subscr_firstname' => $subscr_firstname,
477
                    'subscr_lastname'  => $subscr_lastname,
478
                    'subscr_sex'       => $subscr_sex,
479
                    'subscr_created'   => $subscrObj->getVar('subscr_created'),
480
                    'subscr_ip'        => $subscrObj->getVar('subscr_ip'),
481
                ];
482
                $subscrObj->setVar('subscr_actoptions', $activationOptions); // XOBJ_DTYPE_ARRAY
483
                // insert subscr
484
                if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
485
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVESUBSCR . '<br>' . $subscrObj->getHtmlErrors());
486
                }
487
                if ($subscr_id > 0) {
488
                    $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_UPDATE_OK;
489
                } else {
490
                    $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_REG_OK;
491
                }
492
                $subscr_id = $subscrObj->getVar('subscr_id');
493
                // send the email with the confirmation code
494
                $xoopsMailer = xoops_getMailer();
495
                $xoopsMailer->reset();
496
                $xoopsMailer->setTemplateDir();
497
                $xoopsMailer->useMail();
498
                $xoopsMailer->setTemplate(('update' === $saveType) ? 'update.tpl' : 'activate.tpl');
499
                $xoopsMailer->setToEmails($subscr_email);
500
                if (isset($xoopsConfig['adminmail'])) {
501
                    $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
502
                }
503
                if (isset($xoopsConfig['sitename'])) {
504
                    $xoopsMailer->setFromName($xoopsConfig['sitename']);
505
                }
506
                $xoopsMailer->assign('EMAIL', $subscr_email);
507
                $xoopsMailer->assign('SEX', '' != $subscrObj->getVar('subscr_sex') ? $subscrObj->getVar('subscr_sex') : $subscr_sex);
508
                $xoopsMailer->assign('FIRSTNAME', '' != $subscrObj->getVar('subscr_firstname') ? $subscrObj->getVar('subscr_firstname') : $subscr_firstname);
509
                $xoopsMailer->assign('LASTNAME', '' != $subscrObj->getVar('subscr_lastname') ? $subscrObj->getVar('subscr_lastname') : $subscr_lastname);
510
                $xoopsMailer->assign('IP', xoops_getenv('REMOTE_ADDR'));
511
                $act           = [
512
                    XOOPS_URL,
513
                    $saveType,
514
                    $subscr_id,
515
                    $subscr_actkey,
516
                    $subscr_email,
517
                ];
518
                $activationKey = base64_encode(implode('||', $act));
519
                $xoopsMailer->assign('ACTLINK', XOOPS_URL . "/modules/xnewsletter/{$currentFile}?actkey={$activationKey}");
520
                $xoopsMailer->setSubject(_MA_XNEWSLETTER_SUBSCRIPTIONSUBJECT . $GLOBALS['xoopsConfig']['sitename']);
521 View Code Duplication
                if (!$xoopsMailer->send()) {
522
                    $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors();
523
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors());
524
                } else {
525
                    $actionProts_ok[] = str_replace('%subscr_email', $subscr_email, _MA_XNEWSLETTER_SENDMAIL_REG_OK);
526
                }
527
            } else {
528
                // activation key EXISTS
529
                // check confirmation email
530
                // check activation key
531
                $activationKey_array  = explode('||', base64_decode($activationKey, true));
532
                $activationKeyIsValid = false;
533
                if ((XOOPS_URL == $activationKey_array[0]) && ('' != trim($activationKey_array[1]))
534
                    && ((int)$activationKey_array[2] > 0)
535
                    && ('' != trim($activationKey_array[3]))) {
536
                    $activationKeyIsValid = true;
537
                } else {
538
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_INVALIDKEY);
539
                }
540
                $saveType      = trim($activationKey_array[1]);
541
                $subscr_id     = (int)$activationKey_array[2];
542
                $subscr_actkey = trim($activationKey_array[3]);
543
                // check given data with table subscr
544
                $subscrCriteria = new \CriteriaCompo();
545
                $subscrCriteria->add(new \Criteria('subscr_id', $subscr_id));
546
                $subscrCriteria->add(new \Criteria('subscr_actkey', $subscr_actkey));
547
                $subscrCriteria->setLimit(1);
548
                $subscrCount = $helper->getHandler('Subscr')->getCount($subscrCriteria);
549
                if (0 == $subscrCount) {
550
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NODATAKEY);
551
                }
552
                // get subscr
553
                $subscrObj         = $helper->getHandler('Subscr')->get($subscr_id);
554
                $activationOptions = $subscrObj->getVar('subscr_actoptions'); // XOBJ_DTYPE_ARRAY
555
                // check time: confirmation not later than ... hours
556
                if ((0 != $helper->getConfig('confirmation_time'))
557
                    && ((int)$activationOptions['subscr_created'] < time() - (3600 + (int)$helper->getConfig('confirmation_time')))) {
558
                    // time expired
559
                    $subscrObj->setVar('subscr_actkey', '');
560
                    $subscrObj->setVar('subscr_actoptions', []);
561
                    $helper->getHandler('Subscr')->insert($subscrObj);
562
                    // IN PROGRESS
563
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_KEYEXPIRED);
564
                }
565
                // get subscr fields from subscr_actoptions
566
                $subscr_sex       = $activationOptions['subscr_sex'];
567
                $subscr_firstname = $activationOptions['subscr_firstname'];
568
                $subscr_lastname  = $activationOptions['subscr_lastname'];
569
                // insert subscr
570
                $subscrObj->setVar('subscr_sex', $subscr_sex);
571
                $subscrObj->setVar('subscr_firstname', $subscr_firstname);
572
                $subscrObj->setVar('subscr_lastname', $subscr_lastname);
573
                if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
574
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVESUBSCR);
575
                }
576
                $code_selections = $activationOptions['code_selections']; // string
577
            }
578
        }
579
        //
580
        //
581
        // subscribe subscr to cat (create/update catsubscr)
582
        if ($activationKeyIsValid || $allowedWithoutActivationKey) {
583
            // update xnewsletter_subscr
584
            if (0 == $subscrObj->getVar('subscr_activated')) {
585
                $subscrObj->setVar('subscr_created', time());
586
                $subscrObj->setVar('subscr_ip', xoops_getenv('REMOTE_ADDR'));
587
                $subscrObj->setVar('subscr_activated', 1);
588
            }
589
            // reset act fields
590
            $subscrObj->setVar('subscr_actkey', '');
591
            $subscrObj->setVar('subscr_actoptions', []);
592
            // insert subscr
593
            if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
594
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVESUBSCR);
595
            }
596
            // create cat subscr
597
            $selections = explode('|', $code_selections); // array
598
            foreach ($selections as $code_selection) {
599
                if ('' == $code_selection) {
600
                    $code_selection = '0-0-0-0';
601
                }
602
                $selection           = explode('-', $code_selection); // array
603
                $cat_id              = $selection[0];
604
                $catsubcr            = $selection[1];
605
                $catsubcr_id_old     = (int)$selection[2];
606
                $catsubcr_quited_old = (int)$selection[3];
607
                $catObj              = $helper->getHandler('Cat')->get($cat_id);
608
                $cat_mailinglist     = $catObj->getVar('cat_mailinglist');
609
                $cat_name            = $catObj->getVar('cat_name');
610
                if ('1' == $catsubcr && 0 == $catsubcr_id_old) {
611
                    $catsubscrObj = $helper->getHandler('Catsubscr')->create();
612
                    $catsubscrObj->setVar('catsubscr_catid', $cat_id);
613
                    $catsubscrObj->setVar('catsubscr_subscrid', $subscr_id);
614
                    $catsubscrObj->setVar('catsubscr_submitter', $uid);
615
                    $catsubscrObj->setVar('catsubscr_created', time());
616
                    if ($helper->getHandler('Catsubscr')->insert($catsubscrObj)) {
617
                        $count_ok++;
618
                        if ($catsubcr_id_old > 0) {
619
                            $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_NO_CHANGE);
620
                        } else {
621
                            $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_SUBSCRIBE);
622
                        }
623
                        // handle mailinglists
624
                        if ($cat_mailinglist > 0) {
625
                            require_once XOOPS_ROOT_PATH . '/modules/xnewsletter/include/mailinglist.php';
626
                            subscribingMLHandler(1, $subscr_id, $cat_mailinglist);
627
                        }
628
                    } else {
629
                        $count_err++;
630
                        $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVECATSUBSCR; //$catsubscrObj->getHtmlErrors();
631
                    }
632
                } elseif ('0' == $catsubcr && $catsubcr_id_old > 0) {
633
                    // unsubscribe / delete old subscription
634
                    $catsubscrObj = $helper->getHandler('Catsubscr')->get($catsubcr_id_old);
635 View Code Duplication
                    if ($helper->getHandler('Catsubscr')->delete($catsubscrObj, true)) {
636
                        // handle mailinglists
637
                        if ($cat_mailinglist > 0) {
638
                            require_once XOOPS_ROOT_PATH . '/modules/xnewsletter/include/mailinglist.php';
639
                            subscribingMLHandler(0, $subscr_id, $cat_mailinglist);
640
                        }
641
                    } else {
642
                        $count_err++;
643
                        $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVECATSUBSCR; //$catsubscrObj->getHtmlErrors();
644
                    }
645
                    /*
646
                                        if ($count_err > 0) {
647
                                            redirect_header($currentFile, 3, _AM_XNEWSLETTER_FORMDELNOTOK);
648
                                        }
649
                    */
650
                    $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_UNSUBSCRIBE);
651
                } elseif ($catsubcr_id_old > 0 && $catsubcr_quited_old > 0) {
652
                    // newsletter stay selected, but catsubscr_quited will be removed
653
                    $catsubscrObj = $helper->getHandler('Catsubscr')->get($catsubcr_id_old);
654
                    // Form catsubscr_quited
655
                    $catsubscrObj->setVar('catsubscr_quited', '0');
656
                    if ($helper->getHandler('Catsubscr')->insert($catsubscrObj)) {
657
                        $count_ok++;
658
                        $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_DAT_QUITED_REMOVED);
659
                    } else {
660
                        $count_err++;
661
                        $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVECATSUBSCR; //$catsubscrObj->getHtmlErrors();
662
                    }
663
                } elseif ($catsubcr_id_old > 0) {
664
                    // newsletter still subscribed
665
                    $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_NO_CHANGE);
666
                }
667
                // nothing to do
668
            }
669
            //
670
            // send infomail to subscriber if current user (submitter) is not the subscriber (subscr)
671
            if (isset($submitter_email) && ('' != $submitter_email) && ($submitter_email != $subscr_email)) {
672
                if ('' == $subscr_sex && '' == $subscr_firstname && '' == $subscr_lastname) {
673
                    $subscrObj        = $helper->getHandler('Subscr')->get($subscr_id);
674
                    $subscr_sex       = $subscrObj->getVar('subscr_sex');
675
                    $subscr_firstname = $subscrObj->getVar('subscr_firstname');
676
                    $subscr_lastname  = $subscrObj->getVar('subscr_lastname');
677
                }
678
                // send the email with the confirmation code
679
                $xoopsMailer = xoops_getMailer();
680
                $xoopsMailer->reset();
681
                $xoopsMailer->setTemplateDir();
682
                $xoopsMailer->useMail();
683
                $xoopsMailer->setHTML();
684
                $xoopsMailer->setTemplate('info_change.tpl');
685
                $xoopsMailer->setToEmails($subscr_email);
686
                if (isset($xoopsConfig['adminmail'])) {
687
                    $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
688
                }
689
                if (isset($xoopsConfig['sitename'])) {
690
                    $xoopsMailer->setFromName($xoopsConfig['sitename']);
691
                }
692
                $xoopsMailer->assign('EMAIL', $subscr_email);
693
                $xoopsMailer->assign('SEX', $subscr_sex);
694
                $xoopsMailer->assign('FIRSTNAME', $subscr_firstname);
695
                $xoopsMailer->assign('LASTNAME', $subscr_lastname);
696
                $xoopsMailer->assign('IP', xoops_getenv('REMOTE_ADDR'));
697
                $xoopsMailer->assign('ACTLINK', XOOPS_URL . "/modules/xnewsletter/{$currentFile}?subscr_email={$subscr_email}");
698
                $xoopsMailer->assign('USERLINK', XOOPS_URL . '/userinfo.php?uid=' . $xoopsUser->uid());
699
                $xoopsMailer->assign('USERNAME', $xoopsUser->name());
700
                $subject = _MA_XNEWSLETTER_SUBSCRIPTION_SUBJECT_CHANGE . $GLOBALS['xoopsConfig']['sitename'];
701
                $xoopsMailer->setSubject($subject);
702 View Code Duplication
                if (!$xoopsMailer->send()) {
703
                    $count_err++;
704
                    $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors();
705
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors());
706
                } else {
707
                    $actionProts_ok[] = str_replace('%e', $subscr_email, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_SENT_INFO);
708
                }
709
            }
710
            if (0 == $count_err) {
711
                if ('addnew' === $saveType) {
712
                    $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_REG_CLOSED;
713
                } else {
714
                    $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_REG_UPDATE_CLOSED;
715
                }
716
                //$actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_OK;
717
            }
718
        }
719
720
        $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
721
        $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
722
        $xoopsTpl->assign('actionProts_error', $actionProts_error);
723
        break;
724
    case 'delete_subscription':
725
        if ((!$activationKey && $subscr_id <= 0) && ('1' != $_SESSION['unsub'])) {
726
            redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOID);
727
        }
728
        // IN PROGRESS
729
        if ('1' == $_SESSION['unsub']) {
730
            $subscrCriteria = new \CriteriaCompo();
731
            $subscrCriteria->add(new \Criteria('subscr_email', $subscr_email));
732
            $subscrCriteria->setLimit(1);
733
            $subscrCount = $helper->getHandler('Subscr')->getCount($subscrCriteria);
734
            if (0 == $subscrCount) {
735
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR);
736
            }
737
            $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
738
            $subscr_id = $subscrObj->getVar('subscr_id');
739
        }
740
        // IN PROGRESS
741
742
        if (\Xmf\Request::getBool('ok', false, 'POST') || '' != $activationKey) {
743
            $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_result.tpl';
744
            require_once XOOPS_ROOT_PATH . '/header.php';
745
746
            $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
747
            $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
748
            $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
749
            // breadcrumb
750
            $breadcrumb = new Xnewsletter\Breadcrumb();
751
            $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
752
            $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, XNEWSLETTER_URL . '/subscription.php?op=list_subscriptions');
753
            $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIPTION_DELETE, '');
754
            $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
755
            // init vars
756
            $actionProts_ok       = [];
757
            $actionProts_warning  = [];
758
            $actionProts_error    = [];
759
            $count_ok             = 0;
760
            $count_err            = 0;
761
            $activationKeyIsValid = false;
762
            // check right to unsubscribe directly
763
            $allowedWithoutActivationKey = false;
764
            $uid                         = is_object($xoopsUser) ? (int)$xoopsUser->getVar('uid') : 0;
765 View Code Duplication
            if (is_object($xoopsUser) && isset($xoopsUser)) {
766
                // if not anonymous subscriber / subscriber is a Xoops user
767
                $submitter_email = $xoopsUser->email();
768
                foreach ($xoopsUser->getGroups() as $group) {
769
                    if (in_array($group, $helper->getConfig('xn_groups_without_actkey'))
770
                        || XOOPS_GROUP_ADMIN == $group) {
771
                        $allowedWithoutActivationKey = true;
772
                        break;
773
                    }
774
                }
775
            }
776
            // if anonymous subscriber
777
            // NOP
778
779
            if ('' != $activationKey || $allowedWithoutActivationKey) {
780
                // 1st case: unsubscribe WITHOUT confirmation
781
                // 2nd case: unsubscribe WITH confirmation & activation key EXISTS
782
                // check given data with table subscr
783
                $subscrCriteria = new \CriteriaCompo();
784
                $subscrCriteria->add(new \Criteria('subscr_email', $subscr_email));
785
                $subscrCriteria->add(new \Criteria('subscr_id', $subscr_id));
786
                // got actkey or user is allowed to delete without actkey
787
                if ('' != $activationKey) {
788
                    // check activation key
789
                    $activationKey_array  = explode('||', base64_decode($activationKey, true));
790
                    $activationKeyIsValid = false;
791
                    $subscr_id            = (int)$activationKey_array[1];
792
                    $subscr_actkey        = trim($activationKey_array[2]);
793
                    $subscr_email         = trim($activationKey_array[3]);
794
                    if ((XOOPS_URL == $activationKey_array[0]) && ((int)$activationKey_array[1] > 0)
795
                        && ('' != trim($activationKey_array[2]))) {
796
                        $activationKeyIsValid = true;
797
                    } else {
798
                        redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_INVALIDKEY);
799
                    }
800
                    $subscrCriteria->add(new \Criteria('subscr_actkey', $subscr_actkey));
801
                }
802
                $subscrCriteria->setLimit(1);
803
                $subscrCount = $helper->getHandler('Subscr')->getCount($subscrCriteria);
804
                if (0 == $subscrCount) {
805
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR);
806
                }
807
                $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
808
                // delete subscriber (subscr), subscriptions (catsubscrs) and mailinglist
809
                if (!$helper->getHandler('Subscr')->delete($subscrObj, true)) {
810
                    $actionProts_error[] = $subscrObj->getHtmlErrors();
811
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR . $subscrObj->getHtmlErrors());
812
                }
813
                if (0 == $count_err) {
814
                    $actionProts_ok[] = _AM_XNEWSLETTER_FORMDELOK;
815
                }
816
            } else {
817
                // 2nd case: unsubscribe WITH confirmation & activation key DOESN'T EXIST
818
                // check form
819
                if (!$GLOBALS['xoopsSecurity']->check()) {
820
                    redirect_header('subscr.php', 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
821
                }
822
                $subscrObj     = $helper->getHandler('Subscr')->get($subscr_id);
823
                $subscr_actkey = xoops_makepass();
824
                $subscrObj->setVar('subscr_actkey', $subscr_actkey);
825
                // insert subscr
826
                if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
827
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR);
828
                }
829
                //                if (!$allowedWithoutActivationKey) {
830
                $xoopsMailer = xoops_getMailer();
831
                $xoopsMailer->reset();
832
                $xoopsMailer->setTemplateDir();
833
                $xoopsMailer->useMail();
834
                $xoopsMailer->setTemplate('delete.tpl');
835
                $xoopsMailer->setToEmails($subscrObj->getVar('subscr_email'));
836
                if (isset($xoopsConfig['adminmail'])) {
837
                    $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
838
                }
839
                if (isset($xoopsConfig['sitename'])) {
840
                    $xoopsMailer->setFromName($xoopsConfig['sitename']);
841
                }
842
                $xoopsMailer->assign('EMAIL', $subscrObj->getVar('subscr_email'));
843
                $xoopsMailer->assign('SEX', $subscrObj->getVar('subscr_sex'));
844
                $xoopsMailer->assign('FIRSTNAME', $subscrObj->getVar('subscr_firstname'));
845
                $xoopsMailer->assign('LASTNAME', $subscrObj->getVar('subscr_lastname'));
846
                $xoopsMailer->assign('IP', xoops_getenv('REMOTE_ADDR'));
847
                $act           = [
848
                    XOOPS_URL,
849
                    $subscrObj->getVar('subscr_id'),
850
                    $subscrObj->getVar('subscr_actkey'),
851
                    $subscrObj->getVar('subscr_email'),
852
                ];
853
                $activationKey = base64_encode(implode('||', $act));
854
                $xoopsMailer->assign('ACTLINK', XOOPS_URL . "/modules/xnewsletter/{$currentFile}?op=unsub&email={$subscrObj->getVar('subscr_email')}&actkey={$activationKey}");
855
                $xoopsMailer->setSubject(_MA_XNEWSLETTER_DELETESUBJECT . $GLOBALS['xoopsConfig']['sitename']);
856
                if (!$xoopsMailer->send()) {
857
                    $count_err++;
858
                    $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors();
859
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors());
860
                }
861
                //                }
862
                if (0 == $count_err) {
863
                    $actionProts_ok[] = str_replace('%subscr_email', $subscrObj->getVar('subscr_email'), _MA_XNEWSLETTER_SENDMAIL_UNREG_OK);
864
                }
865
            }
866
867
            $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
868
            $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
869
            $xoopsTpl->assign('actionProts_error', $actionProts_error);
870
        } else {
871
            $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_empty.tpl';
872
            require_once XOOPS_ROOT_PATH . '/header.php';
873
874
            $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
875
            $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
876
            $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
877
            // breadcrumb
878
            $breadcrumb = new Xnewsletter\Breadcrumb();
879
            $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
880
            $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, XNEWSLETTER_URL . '/subscription.php?op=list_subscriptions');
881
            $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIPTION_DELETE, '');
882
            $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
883
884
            $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
885
            xoops_confirm([
886
                              'ok'           => true,
887
                              'subscr_id'    => $subscr_id,
888
                              'subscr_email' => $subscr_email,
889
                              'op'           => 'delete_subscription',
890
                          ], $currentFile, sprintf(_MA_XNEWSLETTER_SUBSCRIPTION_DELETE_SURE));
891
        }
892
        break;
893
}
894
895
require_once __DIR__ . '/footer.php';
896