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

subscription.php (2 issues)

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
use Xmf\Request;
30
31
$currentFile = basename(__FILE__);
32
require_once __DIR__ . '/header.php';
33
$op            = Request::getString('op', 'search_subscription');
34
$activationKey = Request::getString('actkey', '');
35
$subscr_id     = Request::getInt('subscr_id', 0);
36
$subscr_email  = Request::getString('subscr_email', '');
37
38
if (Request::hasVar('addnew', 'REQUEST')) {
39
    $op = 'addnew_subscription';
40
}
41
if ('' != $activationKey && 'unsub' !== $op) {
42
    $op = 'save_subscription';
43
}
44
if ('unsub' === $op) {
45
    $subscr_email = Request::getString('email', '');
46
    $op           = 'delete_subscription';
47
    //$GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription.tpl';
48
    $_SESSION['redirect_mail'] = Request::getString('email', '');
49
    $_SESSION['unsub']         = '1';
50
} else {
51
    $_SESSION['redirect_mail'] = '';
52
    $_SESSION['unsub']         = '0';
53
}
54
55
//to avoid errors in debug when xn_groups_change_other
56
$subscr_sex       = '';
57
$subscr_firstname = '';
58
$subscr_lastname  = '';
59
60
switch ($op) {
61
    case 'search_subscription':
62
    default:
63
        // if not anonymous subscriber / subscriber is a Xoops user
64
        if (is_object($xoopsUser) && isset($xoopsUser)) {
65
            header("Location:{$currentFile}?op=list_subscriptions&subscr_email=" . $subscr_email);
66
            exit();
67
        }
68
        // if anonymous subscriber
69
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_list_subscriptions.tpl';
70
        require_once XOOPS_ROOT_PATH . '/header.php';
71
72
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
73
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
74
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
75
        // breadcrumb
76
        $breadcrumb = new Xnewsletter\Breadcrumb();
77
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
78
        $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, '');
79
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
80
81
        $actionProts_ok      = [];
82
        $actionProts_error   = [];
83
        $actionProts_warning = [];
84
85
        $subscr_email         = '';
86
        $showSubscrSearchForm = true;
87
        $showSubscrForm       = false;
88
89
        // show search subscr form
90
        $xoopsTpl->assign('showSubscrSearchForm', $showSubscrSearchForm);
91
        // show form search
92
        $subscrObj = $helper->getHandler('Subscr')->create();
93
        $xoopsTpl->assign('subscrSearchForm', $subscrObj->getSearchForm()->render());
94
95
        break;
96
    case 'list_subscriptions':
97
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_list_subscriptions.tpl';
98
        require_once XOOPS_ROOT_PATH . '/header.php';
99
100
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
101
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
102
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
103
        // breadcrumb
104
        $breadcrumb = new Xnewsletter\Breadcrumb();
105
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
106
        $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, '');
107
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
108
        // init vars
109
        $actionProts_ok       = [];
110
        $actionProts_warning  = [];
111
        $actionProts_error    = [];
112
        $showSubscrSearchForm = false;
113
        $showSubscrForm       = true;
114
115
        if (is_object($xoopsUser) && isset($xoopsUser)) {
116
            // if not anonymous subscriber / subscriber is a Xoops user get subscr_email from Xoops user
117
            $redirect_mail = ('' === $subscr_email) ? $xoopsUser->email() : $subscr_email;
118
            $_SESSION['redirect_mail'] = $subscr_email;
119
        } else {
120
            // if anonymous subscriber get subscr_email from search form
121
            $subscr_email = Request::getString('subscr_email', '');
122
            if ('' != $subscr_email) {
123
                // check captcha
124
                xoops_load('xoopscaptcha');
125
                $xoopsCaptcha = XoopsCaptcha::getinstance();
126
                if (!$xoopsCaptcha->verify()) {
127
                    $_SESSION['redirect_mail'] = $subscr_email;
128
                    redirect_header('?op=search_subscription', 3, $xoopsCaptcha->getMessage());
129
                }
130
                // check subscr_email
131
                if (!xnewsletter_checkEmail($subscr_email)) {
132
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
133
                }
134
                // check if a Xoops user has $subscr_email
135
                if (0 != count($memberHandler->getUsers(new \Criteria('email', $subscr_email)))) {
136
                    $actionProts_warning[] = sprintf(_MA_XNEWSLETTER_PLEASE_LOGIN, $subscr_email);
137
138
                    $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
139
                    $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
140
                    $xoopsTpl->assign('actionProts_error', $actionProts_error);
141
                    break;
142
                }
143
            } else {
144
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
145
            }
146
        }
147
148
        // ???
149
        /*
150
        if (Request::hasVar('redirect_mail', 'SESSION')) {
151
            if (!isset($_SESSION['unsub'])) {
152
                $subscr_email = $_SESSION['redirect_mail'];
153
            } else {
154
                unset($_SESSION['unsub']);
155
            }
156
            unset($_SESSION['redirect_mail']);
157
        }
158
        */
159
160
        // look for existing subscriptions
161
        if ('' === $subscr_email) {
162
            $subscr_email = $redirect_mail;
163
        }
164
        $subscrCriteria = new \CriteriaCompo();
165
        $subscrCriteria->add(new \Criteria('subscr_email', $subscr_email));
166
        $subscrCriteria->setSort('subscr_id');
167
        $subscrCriteria->setOrder('ASC');
168
        $subscrCount = $helper->getHandler('Subscr')->getCount($subscrCriteria);
169
        $xoopsTpl->assign('subscrCount', $subscrCount);
170
        if ($subscrCount > 0) {
171
            // there are subscriptions with this email
172
            $actionProts_warning[] = _MA_XNEWSLETTER_REGISTRATION_EXIST;
173
            $subscrObjs            = $helper->getHandler('Subscr')->getAll($subscrCriteria);
174
            foreach ($subscrObjs as $subscrObj) {
175
                $subscr_array                             = $subscrObj->toArray();
176
                $subscr_array['subscr_created_formatted'] = formatTimestamp($subscr_array['subscr_created'], $helper->getConfig('dateformat'));
177
                // subscr exists but is unactivated
178
                if (0 == $subscr_array['subscr_activated']) {
179
                    $actionProts_warning[] = str_replace('%link', "?op=resend_subscription&subscr_id={$subscr_array['subscr_id']}", _MA_XNEWSLETTER_SUBSCRIPTION_UNFINISHED);
180
                }
181
                $catsubscrCriteria = new \CriteriaCompo();
182
                $catsubscrCriteria->add(new \Criteria('catsubscr_subscrid', $subscr_array['subscr_id']));
183
                $catsubscrCriteria->setSort('catsubscr_id');
184
                $catsubscrCriteria->setOrder('ASC');
185
                $catsubscrCount = $helper->getHandler('Catsubscr')->getCount($catsubscrCriteria);
186
                $catsubscrObjs  = $helper->getHandler('Catsubscr')->getAll($catsubscrCriteria);
187
                foreach ($catsubscrObjs as $catsubscr_id => $catsubscrObj) {
188
                    $catsubscr_array              = $catsubscrObj->toArray();
189
                    $catObj                       = $helper->getHandler('Cat')->get($catsubscrObj->getVar('catsubscr_catid'));
190
                    $cat_array                    = $catObj->toArray();
191
                    $catsubscr_array['cat']       = $cat_array;
192
                    $subscr_array['catsubscrs'][] = $catsubscr_array;
193
                    unset($catsubscr_array);
194
                    unset($cat_array);
195
                }
196
                $xoopsTpl->append('subscrs', $subscr_array);
197
            }
198
        } else {
199
            // show subscr form
200
            $actionProts_warning[] = str_replace('%s', $subscr_email, _MA_XNEWSLETTER_REGISTRATION_NONE);
201
            $xoopsTpl->assign('showSubscrForm', true);
202
            $subscrObj = $helper->getHandler('Subscr')->create();
203
            $subscrObj->setVar('subscr_email', $subscr_email);
204
            $form = $subscrObj->getForm($currentFile);
205
            $xoopsTpl->assign('subscrForm', $form->render());
206
        }
207
208
        $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
209
        $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
210
        $xoopsTpl->assign('actionProts_error', $actionProts_error);
211
        break;
212
    case 'resend_subscription':
213
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_result.tpl';
214
        require_once XOOPS_ROOT_PATH . '/header.php';
215
216
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
217
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
218
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
219
        // breadcrumb
220
        $breadcrumb = new Xnewsletter\Breadcrumb();
221
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
222
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
223
        // init vars
224
        $actionProts_ok      = [];
225
        $actionProts_warning = [];
226
        $actionProts_error   = [];
227
228
        // check if subscr exists
229
        $subscr_id      = Request::getInt('subscr_id', 0);
230
        $subscrCriteria = new \Criteria('subscr_id', $subscr_id);
231
        $subscrCount    = $helper->getHandler('Subscr')->getCount($subscrCriteria);
232
        if (0 == $subscrCount) {
233
            redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOID);
234
        }
235
        // get subscr data
236
        $subscrObj    = $helper->getHandler('Subscr')->get($subscr_id);
237
        $subscr_email = $subscrObj->getVar('subscr_email');
238
        // resend the email with the confirmation code
239
        $xoopsMailer = xoops_getMailer();
240
        $xoopsMailer->reset();
241
        $xoopsMailer->setTemplateDir();
242
        $xoopsMailer->useMail();
243
        $xoopsMailer->setTemplate('activate.tpl');
244
        $xoopsMailer->setToEmails($subscr_email);
245
        if (isset($xoopsConfig['adminmail'])) {
246
            $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
247
        }
248
        if (isset($xoopsConfig['sitename'])) {
249
            $xoopsMailer->setFromName($xoopsConfig['sitename']);
250
        }
251
        $xoopsMailer->assign('EMAIL', $subscr_email);
252
        $xoopsMailer->assign('SEX', $subscrObj->getVar('subscr_sex'));
253
        $xoopsMailer->assign('FIRSTNAME', $subscrObj->getVar('subscr_firstname'));
254
        $xoopsMailer->assign('LASTNAME', $subscrObj->getVar('subscr_lastname'));
255
        $xoopsMailer->assign('IP', xoops_getenv('REMOTE_ADDR'));
256
        $activationKey = base64_encode(XOOPS_URL . "||addnew||{$subscr_id}||{$subscrObj->getVar('subscr_actkey')}||{$subscr_email}");
257
        $xoopsMailer->assign('ACTLINK', XOOPS_URL . "/modules/xnewsletter/{$currentFile}?actkey={$activationKey}");
258
        $subject = _MA_XNEWSLETTER_SUBSCRIPTIONSUBJECT . $GLOBALS['xoopsConfig']['sitename'];
259
        $xoopsMailer->setSubject($subject);
260
        if (!$xoopsMailer->send()) {
261
            $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors();
262
        } else {
263
            $actionProts_ok[] = str_replace('%subscr_email', $subscr_email, _MA_XNEWSLETTER_RESENDMAIL_REG_OK);
264
        }
265
266
        $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
267
        $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
268
        $xoopsTpl->assign('actionProts_error', $actionProts_error);
269
        break;
270
    case 'add_subscription':
271
    case 'create_subscription':
272
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription.tpl';
273
        require_once XOOPS_ROOT_PATH . '/header.php';
274
275
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
276
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
277
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
278
        // breadcrumb
279
        $breadcrumb = new Xnewsletter\Breadcrumb();
280
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
281
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
282
283
        // get create subscr form
284
        if ('' != $subscr_email) {
285
            // existing email
286
            if (!xnewsletter_checkEmail($subscr_email)) {
287
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
288
            }
289
        } elseif (is_object($xoopsUser) && isset($xoopsUser)) {
290
            // take actual xoops user
291
            $subscr_email = $xoopsUser->email();
292
        } else {
293
            $subscr_email = '';
294
        }
295
        $subscrObj = $helper->getHandler('Subscr')->create();
296
        $subscrObj->setVar('subscr_email', $subscr_email);
297
        $subscrForm = $subscrObj->getForm();
298
        $xoopsTpl->assign('xnewsletter_content', $subscrForm->render());
299
        break;
300
    case 'edit_subscription':
301
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription.tpl';
302
        require_once XOOPS_ROOT_PATH . '/header.php';
303
304
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
305
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
306
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
307
        // breadcrumb
308
        $breadcrumb = new Xnewsletter\Breadcrumb();
309
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
310
        $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, XNEWSLETTER_URL . '/subscription.php?op=list_subscriptions');
311
        $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIPTION_EDIT, '');
312
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
313
314
        // get edit subscr form
315
        $subscr_id = Request::getInt('subscr_id', 0);
316
        if ($subscr_id <= 0) {
317
            redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOID);
318
        }
319
        $subscrObj  = $helper->getHandler('Subscr')->get($subscr_id);
320
        $subscrForm = $subscrObj->getForm();
321
        $xoopsTpl->assign('xnewsletter_content', $subscrForm->render());
322
        break;
323
    case 'save_subscription':
324
        $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_result.tpl';
325
        require_once XOOPS_ROOT_PATH . '/header.php';
326
327
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
328
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
329
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
330
        // breadcrumb
331
        $breadcrumb = new Xnewsletter\Breadcrumb();
332
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
333
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
334
        // init vars
335
        $actionProts_ok       = [];
336
        $actionProts_warning  = [];
337
        $actionProts_error    = [];
338
        $count_ok             = 0;
339
        $count_err            = 0;
340
        $activationKeyIsValid = false;
341
        // check right to subscribe directly
342
        $allowedWithoutActivationKey = false;
343
        $uid                         = is_object($xoopsUser) ? (int)$xoopsUser->getVar('uid') : 0;
344 View Code Duplication
        if (is_object($xoopsUser) && isset($xoopsUser)) {
345
            // if not anonymous subscriber / subscriber is a Xoops user
346
            $submitter_email = $xoopsUser->email();
347
            foreach ($xoopsUser->getGroups() as $group) {
348
                if (in_array($group, $helper->getConfig('xn_groups_without_actkey'))
349
                    || XOOPS_GROUP_ADMIN == $group) {
350
                    $allowedWithoutActivationKey = true;
351
                    break;
352
                }
353
            }
354
        }
355
        // if anonymous subscriber
356
        // NOP
357
358
        if ($allowedWithoutActivationKey) {
359
            // 1st case: subscribe WITHOUT confirmation
360
            // check form
361
            if (!$GLOBALS['xoopsSecurity']->check()) {
362
                redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
363
            }
364
            // check email
365
            if ('' == $subscr_email || !xnewsletter_checkEmail($subscr_email)) {
366
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
367
            }
368
            // get or create subscr
369 View Code Duplication
            if ($subscr_id > 0) {
370
                $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
371
                $saveType  = 'update';
372
            } else {
373
                $subscrObj = $helper->getHandler('Subscr')->create();
374
                $saveType  = 'addnew';
375
            }
376
            $subscrObj->setVar('subscr_sex', Request::getString('subscr_sex', ''));
377
            $subscrObj->setVar('subscr_firstname', Request::getString('subscr_firstname', ''));
378
            $subscrObj->setVar('subscr_lastname', Request::getString('subscr_lastname', ''));
379
            $subscrObj->setVar('subscr_email', Request::getString('subscr_email', ''));
380
            // insert subscr
381 View Code Duplication
            if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
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...
382
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVESUBSCR . '<br>' . $subscrObj->getHtmlErrors());
383
            }
384
            if ($subscr_id > 0) {
385
                $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_UPDATE_OK;
386
            } else {
387
                $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_REG_OK;
388
            }
389
            $subscr_id = $subscrObj->getVar('subscr_id');
390
            // create $code_selections string
391
            $catCriteria = new \CriteriaCompo();
392
            $catCriteria->setSort('cat_id');
393
            $catCriteria->setOrder('ASC');
394
            $catObjs    = $helper->getHandler('Cat')->getAll($catCriteria);
395
            $selections = [];
396 View Code Duplication
            foreach ($catObjs as $cat_id => $catObj) {
397
                // create selections: $cat_id-$cat_selected-$old_catsubcr_id-$old_catsubscr_quited
398
                $selection      = [];
399
                $selection[0]   = $cat_id;
400
                $selection[1]   = in_array($cat_id, $_REQUEST['cats']) ? '1' : '0'; //isset($_REQUEST["cats_{$cat_id}"]);
401
                $selection[2]   = Request::getInt("existing_catsubcr_id_{$cat_id}", 0);
402
                $selection[3]   = Request::getInt("existing_catsubscr_quited_{$cat_id}", 0);
403
                $code_selection = implode('-', $selection);
404
                $selections[]   = $code_selection;
405
                unset($selection);
406
            }
407
            $code_selections = implode('|', $selections);
408
        }
409
410
        if (!$allowedWithoutActivationKey) {
411
            // 2nd case: subscribe WITH confirmation
412
            if ('' == $activationKey) {
413
                // activation key DOESN'T EXIST
414
                // create and send confirmation email
415
                // check form
416
                if (!$GLOBALS['xoopsSecurity']->check()) {
417
                    redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
418
                }
419
                // check email
420
                if ('' == $subscr_email || !xnewsletter_checkEmail($subscr_email)) {
421
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOEMAIL);
422
                }
423
                // get subscr fields from form
424
                $subscr_firstname = Request::getString('subscr_firstname', '');
425
                $subscr_lastname  = Request::getString('subscr_lastname', '');
426
                $subscr_sex       = Request::getString('subscr_sex', '');
427
                // create $code_selections string
428
                $catCriteria = new \CriteriaCompo();
429
                $catCriteria->setSort('cat_id');
430
                $catCriteria->setOrder('ASC');
431
                $catObjs    = $helper->getHandler('Cat')->getAll($catCriteria);
432
                $selections = [];
433 View Code Duplication
                foreach ($catObjs as $cat_id => $catObj) {
434
                    // create selections: $cat_id-$cat_selected-$old_catsubcr_id-$old_catsubscr_quited
435
                    $selection      = [];
436
                    $selection[0]   = $cat_id;
437
                    $selection[1]   = in_array($cat_id, Request::getArray('cats')) ? '1' : '0'; //isset($_REQUEST["cats_{$cat_id}"]);
438
                    $selection[2]   = Request::getInt("existing_catsubcr_id_{$cat_id}", 0);
439
                    $selection[3]   = Request::getInt("existing_catsubscr_quited_{$cat_id}", 0);
440
                    $code_selection = implode('-', $selection);
441
                    $selections[]   = $code_selection;
442
                    unset($selection);
443
                }
444
                $code_selections = implode('|', $selections); // string
445
                //
446
                // get or create subscr
447 View Code Duplication
                if ($subscr_id > 0) {
448
                    $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
449
                    $saveType  = 'update';
450
                } else {
451
                    $subscrObj = $helper->getHandler('Subscr')->create();
452
                    $saveType  = 'addnew';
453
                }
454
                // fill subscr
455
                if ($subscr_id <= 0) {
456
                    // form subscr_email
457
                    $subscrObj->setVar('subscr_email', $subscr_email);
458
                    // form subscr_uid
459
                    $subscr_uid = 0;
460
                    $sql        = "SELECT `uid` FROM {$xoopsDB->prefix('users')}";
461
                    $sql        .= " WHERE (`email`='{$subscr_email}')";
462
                    $sql        .= ' LIMIT 1';
463
                    $user       = $xoopsDB->query($sql);
464
                    if ($user) {
465
                        $row_user   = $xoopsDB->fetchRow($user);
466
                        $subscr_uid = $row_user[0];
467
                    }
468
                    $subscrObj->setVar('subscr_uid', $subscr_uid);
469
                    // form subscr_submitter
470
                    $subscrObj->setVar('subscr_submitter', $uid);
471
                }
472
473
                $subscrObj->setVar('subscr_created', time());
474
                $subscrObj->setVar('subscr_ip', xoops_getenv('REMOTE_ADDR'));
475
                $subscr_actkey = xoops_makepass();
476
                $subscrObj->setVar('subscr_actkey', $subscr_actkey);
477
                // format subscr_actoptions: selected_newsletters||firstname||lastname||sex
478
                $activationOptions = [
479
                    'code_selections'  => $code_selections,
480
                    'subscr_firstname' => $subscr_firstname,
481
                    'subscr_lastname'  => $subscr_lastname,
482
                    'subscr_sex'       => $subscr_sex,
483
                    'subscr_created'   => $subscrObj->getVar('subscr_created'),
484
                    'subscr_ip'        => $subscrObj->getVar('subscr_ip'),
485
                ];
486
                $subscrObj->setVar('subscr_actoptions', $activationOptions); // XOBJ_DTYPE_ARRAY
487
                // insert subscr
488 View Code Duplication
                if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
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...
489
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVESUBSCR . '<br>' . $subscrObj->getHtmlErrors());
490
                }
491
                if ($subscr_id > 0) {
492
                    $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_UPDATE_OK;
493
                } else {
494
                    $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_REG_OK;
495
                }
496
                $subscr_id = $subscrObj->getVar('subscr_id');
497
                // send the email with the confirmation code
498
                $xoopsMailer = xoops_getMailer();
499
                $xoopsMailer->reset();
500
                $xoopsMailer->setTemplateDir();
501
                $xoopsMailer->useMail();
502
                $xoopsMailer->setTemplate(('update' === $saveType) ? 'update.tpl' : 'activate.tpl');
503
                $xoopsMailer->setToEmails($subscr_email);
504
                if (isset($xoopsConfig['adminmail'])) {
505
                    $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
506
                }
507
                if (isset($xoopsConfig['sitename'])) {
508
                    $xoopsMailer->setFromName($xoopsConfig['sitename']);
509
                }
510
                $xoopsMailer->assign('EMAIL', $subscr_email);
511
                $xoopsMailer->assign('SEX', '' != $subscrObj->getVar('subscr_sex') ? $subscrObj->getVar('subscr_sex') : $subscr_sex);
512
                $xoopsMailer->assign('FIRSTNAME', '' != $subscrObj->getVar('subscr_firstname') ? $subscrObj->getVar('subscr_firstname') : $subscr_firstname);
513
                $xoopsMailer->assign('LASTNAME', '' != $subscrObj->getVar('subscr_lastname') ? $subscrObj->getVar('subscr_lastname') : $subscr_lastname);
514
                $xoopsMailer->assign('IP', xoops_getenv('REMOTE_ADDR'));
515
                $act           = [
516
                    XOOPS_URL,
517
                    $saveType,
518
                    $subscr_id,
519
                    $subscr_actkey,
520
                    $subscr_email,
521
                ];
522
                $activationKey = base64_encode(implode('||', $act));
523
                $xoopsMailer->assign('ACTLINK', XOOPS_URL . "/modules/xnewsletter/{$currentFile}?actkey={$activationKey}");
524
                $xoopsMailer->setSubject(_MA_XNEWSLETTER_SUBSCRIPTIONSUBJECT . $GLOBALS['xoopsConfig']['sitename']);
525 View Code Duplication
                if (!$xoopsMailer->send()) {
526
                    $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors();
527
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors());
528
                } else {
529
                    $actionProts_ok[] = str_replace('%subscr_email', $subscr_email, _MA_XNEWSLETTER_SENDMAIL_REG_OK);
530
                }
531
            } else {
532
                // activation key EXISTS
533
                // check confirmation email
534
                // check activation key
535
                $activationKey_array  = explode('||', base64_decode($activationKey, true));
536
                $activationKeyIsValid = false;
537
                if ((XOOPS_URL == $activationKey_array[0]) && ('' != trim($activationKey_array[1]))
538
                    && ((int)$activationKey_array[2] > 0)
539
                    && ('' != trim($activationKey_array[3]))) {
540
                    $activationKeyIsValid = true;
541
                } else {
542
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_INVALIDKEY);
543
                }
544
                $saveType      = trim($activationKey_array[1]);
545
                $subscr_id     = (int)$activationKey_array[2];
546
                $subscr_actkey = trim($activationKey_array[3]);
547
                // check given data with table subscr
548
                $subscrCriteria = new \CriteriaCompo();
549
                $subscrCriteria->add(new \Criteria('subscr_id', $subscr_id));
550
                $subscrCriteria->add(new \Criteria('subscr_actkey', $subscr_actkey));
551
                $subscrCriteria->setLimit(1);
552
                $subscrCount = $helper->getHandler('Subscr')->getCount($subscrCriteria);
553
                if (0 == $subscrCount) {
554
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NODATAKEY);
555
                }
556
                // get subscr
557
                $subscrObj         = $helper->getHandler('Subscr')->get($subscr_id);
558
                $activationOptions = $subscrObj->getVar('subscr_actoptions'); // XOBJ_DTYPE_ARRAY
559
                // check time: confirmation not later than ... hours
560
                if ((0 != $helper->getConfig('confirmation_time'))
561
                    && ((int)$activationOptions['subscr_created'] < time() - (3600 + (int)$helper->getConfig('confirmation_time')))) {
562
                    // time expired
563
                    $subscrObj->setVar('subscr_actkey', '');
564
                    $subscrObj->setVar('subscr_actoptions', []);
565
                    $helper->getHandler('Subscr')->insert($subscrObj);
566
                    // IN PROGRESS
567
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_KEYEXPIRED);
568
                }
569
                // get subscr fields from subscr_actoptions
570
                $subscr_sex       = $activationOptions['subscr_sex'];
571
                $subscr_firstname = $activationOptions['subscr_firstname'];
572
                $subscr_lastname  = $activationOptions['subscr_lastname'];
573
                // insert subscr
574
                $subscrObj->setVar('subscr_sex', $subscr_sex);
575
                $subscrObj->setVar('subscr_firstname', $subscr_firstname);
576
                $subscrObj->setVar('subscr_lastname', $subscr_lastname);
577
                if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
578
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVESUBSCR);
579
                }
580
                $code_selections = $activationOptions['code_selections']; // string
581
            }
582
        }
583
        //
584
        //
585
        // subscribe subscr to cat (create/update catsubscr)
586
        if ($activationKeyIsValid || $allowedWithoutActivationKey) {
587
            // update xnewsletter_subscr
588
            $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
589
            if (0 == $subscrObj->getVar('subscr_activated')) {
590
                $subscrObj->setVar('subscr_created', time());
591
                $subscrObj->setVar('subscr_ip', xoops_getenv('REMOTE_ADDR'));
592
                $subscrObj->setVar('subscr_activated', 1);
593
            }
594
            // reset act fields
595
            $subscrObj->setVar('subscr_actkey', '');
596
            $subscrObj->setVar('subscr_actoptions', []);
597
            // insert subscr
598
            if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
599
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVESUBSCR);
600
            }
601
            // create cat subscr
602
            $selections = explode('|', $code_selections); // array
603
            foreach ($selections as $code_selection) {
604
                if ('' == $code_selection) {
605
                    $code_selection = '0-0-0-0';
606
                }
607
                $selection           = explode('-', $code_selection); // array
608
                $cat_id              = $selection[0];
609
                $catsubcr            = $selection[1];
610
                $catsubcr_id_old     = (int)$selection[2];
611
                $catsubcr_quited_old = (int)$selection[3];
612
                $catObj              = $helper->getHandler('Cat')->get($cat_id);
613
                $cat_mailinglist     = $catObj->getVar('cat_mailinglist');
614
                $cat_name            = $catObj->getVar('cat_name');
615
                if ('1' == $catsubcr && 0 == $catsubcr_id_old) {
616
                    $catsubscrObj = $helper->getHandler('Catsubscr')->create();
617
                    $catsubscrObj->setVar('catsubscr_catid', $cat_id);
618
                    $catsubscrObj->setVar('catsubscr_subscrid', $subscr_id);
619
                    $catsubscrObj->setVar('catsubscr_submitter', $uid);
620
                    $catsubscrObj->setVar('catsubscr_created', time());
621
                    if ($helper->getHandler('Catsubscr')->insert($catsubscrObj)) {
622
                        $count_ok++;
623
                        if ($catsubcr_id_old > 0) {
624
                            $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_NO_CHANGE);
625
                        } else {
626
                            $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_SUBSCRIBE);
627
                        }
628
                        // handle mailinglists
629
                        if ($cat_mailinglist > 0) {
630
                            require_once XOOPS_ROOT_PATH . '/modules/xnewsletter/include/mailinglist.php';
631
                            subscribingMLHandler(_XNEWSLETTER_MAILINGLIST_SUBSCRIBE, $subscr_id, $cat_mailinglist);
632
                        }
633
                    } else {
634
                        $count_err++;
635
                        $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVECATSUBSCR; //$catsubscrObj->getHtmlErrors();
636
                    }
637
                } elseif ('0' == $catsubcr && $catsubcr_id_old > 0) {
638
                    // unsubscribe / delete old subscription
639
                    $catsubscrObj = $helper->getHandler('Catsubscr')->get($catsubcr_id_old);
640 View Code Duplication
                    if ($helper->getHandler('Catsubscr')->delete($catsubscrObj, true)) {
641
                        // handle mailinglists
642
                        if ($cat_mailinglist > 0) {
643
                            require_once XOOPS_ROOT_PATH . '/modules/xnewsletter/include/mailinglist.php';
644
                            subscribingMLHandler(_XNEWSLETTER_MAILINGLIST_UNSUBSCRIBE, $subscr_id, $cat_mailinglist);
645
                        }
646
                    } else {
647
                        $count_err++;
648
                        $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVECATSUBSCR; //$catsubscrObj->getHtmlErrors();
649
                    }
650
                    /*
651
                                        if ($count_err > 0) {
652
                                            redirect_header($currentFile, 3, _AM_XNEWSLETTER_FORMDELNOTOK);
653
                                        }
654
                    */
655
                    $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_UNSUBSCRIBE);
656
                } elseif ($catsubcr_id_old > 0 && $catsubcr_quited_old > 0) {
657
                    // newsletter stay selected, but catsubscr_quited will be removed
658
                    $catsubscrObj = $helper->getHandler('Catsubscr')->get($catsubcr_id_old);
659
                    // Form catsubscr_quited
660
                    $catsubscrObj->setVar('catsubscr_quited', '0');
661
                    if ($helper->getHandler('Catsubscr')->insert($catsubscrObj)) {
662
                        $count_ok++;
663
                        $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_DAT_QUITED_REMOVED);
664
                    } else {
665
                        $count_err++;
666
                        $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SAVECATSUBSCR; //$catsubscrObj->getHtmlErrors();
667
                    }
668
                } elseif ($catsubcr_id_old > 0) {
669
                    // newsletter still subscribed
670
                    $actionProts_ok[] = str_replace('%nl', $cat_name, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_NO_CHANGE);
671
                }
672
                // nothing to do
673
            }
674
            //
675
            // send infomail to subscriber if current user (submitter) is not the subscriber (subscr)
676
            if (isset($submitter_email) && ('' != $submitter_email) && ($submitter_email != $subscr_email)) {
677
                if ('' == $subscr_sex && '' == $subscr_firstname && '' == $subscr_lastname) {
678
                    $subscrObj        = $helper->getHandler('Subscr')->get($subscr_id);
679
                    $subscr_sex       = $subscrObj->getVar('subscr_sex');
680
                    $subscr_firstname = $subscrObj->getVar('subscr_firstname');
681
                    $subscr_lastname  = $subscrObj->getVar('subscr_lastname');
682
                }
683
                // send the email with the confirmation code
684
                $xoopsMailer = xoops_getMailer();
685
                $xoopsMailer->reset();
686
                $xoopsMailer->setTemplateDir();
687
                $xoopsMailer->useMail();
688
                $xoopsMailer->setHTML();
689
                $xoopsMailer->setTemplate('info_change.tpl');
690
                $xoopsMailer->setToEmails($subscr_email);
691
                if (isset($xoopsConfig['adminmail'])) {
692
                    $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
693
                }
694
                if (isset($xoopsConfig['sitename'])) {
695
                    $xoopsMailer->setFromName($xoopsConfig['sitename']);
696
                }
697
                $xoopsMailer->assign('EMAIL', $subscr_email);
698
                $xoopsMailer->assign('SEX', $subscr_sex);
699
                $xoopsMailer->assign('FIRSTNAME', $subscr_firstname);
700
                $xoopsMailer->assign('LASTNAME', $subscr_lastname);
701
                $xoopsMailer->assign('IP', xoops_getenv('REMOTE_ADDR'));
702
                $xoopsMailer->assign('ACTLINK', XOOPS_URL . "/modules/xnewsletter/{$currentFile}?subscr_email={$subscr_email}");
703
                $xoopsMailer->assign('USERLINK', XOOPS_URL . '/userinfo.php?uid=' . $xoopsUser->uid());
704
                $xoopsMailer->assign('USERNAME', $xoopsUser->name());
705
                $subject = _MA_XNEWSLETTER_SUBSCRIPTION_SUBJECT_CHANGE . $GLOBALS['xoopsConfig']['sitename'];
706
                $xoopsMailer->setSubject($subject);
707 View Code Duplication
                if (!$xoopsMailer->send()) {
708
                    $count_err++;
709
                    $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors();
710
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors());
711
                } else {
712
                    $actionProts_ok[] = str_replace('%e', $subscr_email, _MA_XNEWSLETTER_SUBSCRIPTION_PROT_SENT_INFO);
713
                }
714
            }
715
            if (0 == $count_err) {
716
                if ('addnew' === $saveType) {
717
                    $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_REG_CLOSED;
718
                } else {
719
                    $actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_REG_UPDATE_CLOSED;
720
                }
721
                //$actionProts_ok[] = _MA_XNEWSLETTER_SUBSCRIPTION_OK;
722
            }
723
        }
724
725
        $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
726
        $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
727
        $xoopsTpl->assign('actionProts_error', $actionProts_error);
728
        break;
729
    case 'delete_subscription':
730
        if ((!$activationKey && $subscr_id <= 0) && ('1' != $_SESSION['unsub'])) {
731
            redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_NOID);
732
        }
733
        // IN PROGRESS
734
        if ('1' == $_SESSION['unsub']) {
735
            $subscrCriteria = new \CriteriaCompo();
736
            $subscrCriteria->add(new \Criteria('subscr_email', $subscr_email));
737
            $subscrCriteria->setLimit(1);
738
            $subscrCount = $helper->getHandler('Subscr')->getCount($subscrCriteria);
739
            if (0 == $subscrCount) {
740
                redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR);
741
            }
742
            $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
743
            $subscr_id = $subscrObj->getVar('subscr_id');
744
        }
745
        // IN PROGRESS
746
747
        if (Request::getBool('ok', false, 'POST') || '' != $activationKey) {
748
            $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_subscription_result.tpl';
749
            require_once XOOPS_ROOT_PATH . '/header.php';
750
751
            $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
752
            $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
753
            $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
754
            // breadcrumb
755
            $breadcrumb = new Xnewsletter\Breadcrumb();
756
            $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
757
            $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, XNEWSLETTER_URL . '/subscription.php?op=list_subscriptions');
758
            $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIPTION_DELETE, '');
759
            $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
760
            // init vars
761
            $actionProts_ok       = [];
762
            $actionProts_warning  = [];
763
            $actionProts_error    = [];
764
            $count_ok             = 0;
765
            $count_err            = 0;
766
            $activationKeyIsValid = false;
767
            // check right to unsubscribe directly
768
            $allowedWithoutActivationKey = false;
769
            $uid                         = is_object($xoopsUser) ? (int)$xoopsUser->getVar('uid') : 0;
770 View Code Duplication
            if (is_object($xoopsUser) && isset($xoopsUser)) {
771
                // if not anonymous subscriber / subscriber is a Xoops user
772
                $submitter_email = $xoopsUser->email();
773
                foreach ($xoopsUser->getGroups() as $group) {
774
                    if (in_array($group, $helper->getConfig('xn_groups_without_actkey'))
775
                        || XOOPS_GROUP_ADMIN == $group) {
776
                        $allowedWithoutActivationKey = true;
777
                        break;
778
                    }
779
                }
780
            }
781
            // if anonymous subscriber
782
            // NOP
783
784
            if ('' != $activationKey || $allowedWithoutActivationKey) {
785
                // 1st case: unsubscribe WITHOUT confirmation
786
                // 2nd case: unsubscribe WITH confirmation & activation key EXISTS
787
                // check given data with table subscr
788
                $subscrCriteria = new \CriteriaCompo();
789
                $subscrCriteria->add(new \Criteria('subscr_email', $subscr_email));
790
                $subscrCriteria->add(new \Criteria('subscr_id', $subscr_id));
791
                // got actkey or user is allowed to delete without actkey
792
                if ('' != $activationKey) {
793
                    // check activation key
794
                    $activationKey_array  = explode('||', base64_decode($activationKey, true));
795
                    $activationKeyIsValid = false;
796
                    $subscr_id            = (int)$activationKey_array[1];
797
                    $subscr_actkey        = trim($activationKey_array[2]);
798
                    $subscr_email         = trim($activationKey_array[3]);
799
                    if ((XOOPS_URL == $activationKey_array[0]) && ((int)$activationKey_array[1] > 0)
800
                        && ('' != trim($activationKey_array[2]))) {
801
                        $activationKeyIsValid = true;
802
                    } else {
803
                        redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_INVALIDKEY);
804
                    }
805
                    $subscrCriteria->add(new \Criteria('subscr_actkey', $subscr_actkey));
806
                }
807
                $subscrCriteria->setLimit(1);
808
                $subscrCount = $helper->getHandler('Subscr')->getCount($subscrCriteria);
809
                if (0 == $subscrCount) {
810
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR);
811
                }
812
                $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
813
                // delete subscriber (subscr), subscriptions (catsubscrs) and mailinglist
814
                if (!$helper->getHandler('Subscr')->delete($subscrObj, true)) {
815
                    $actionProts_error[] = $subscrObj->getHtmlErrors();
816
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR . $subscrObj->getHtmlErrors());
817
                }
818
                if (0 == $count_err) {
819
                    $actionProts_ok[] = _AM_XNEWSLETTER_FORMDELOK;
820
                }
821
            } else {
822
                // 2nd case: unsubscribe WITH confirmation & activation key DOESN'T EXIST
823
                // check form
824
                if (!$GLOBALS['xoopsSecurity']->check()) {
825
                    redirect_header('subscr.php', 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
826
                }
827
                $subscrObj     = $helper->getHandler('Subscr')->get($subscr_id);
828
                $subscr_actkey = xoops_makepass();
829
                $subscrObj->setVar('subscr_actkey', $subscr_actkey);
830
                // insert subscr
831
                if (!$helper->getHandler('Subscr')->insert($subscrObj)) {
832
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR);
833
                }
834
                //                if (!$allowedWithoutActivationKey) {
835
                $xoopsMailer = xoops_getMailer();
836
                $xoopsMailer->reset();
837
                $xoopsMailer->setTemplateDir();
838
                $xoopsMailer->useMail();
839
                $xoopsMailer->setTemplate('delete.tpl');
840
                $xoopsMailer->setToEmails($subscrObj->getVar('subscr_email'));
841
                if (isset($xoopsConfig['adminmail'])) {
842
                    $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
843
                }
844
                if (isset($xoopsConfig['sitename'])) {
845
                    $xoopsMailer->setFromName($xoopsConfig['sitename']);
846
                }
847
                $xoopsMailer->assign('EMAIL', $subscrObj->getVar('subscr_email'));
848
                $xoopsMailer->assign('SEX', $subscrObj->getVar('subscr_sex'));
849
                $xoopsMailer->assign('FIRSTNAME', $subscrObj->getVar('subscr_firstname'));
850
                $xoopsMailer->assign('LASTNAME', $subscrObj->getVar('subscr_lastname'));
851
                $xoopsMailer->assign('IP', xoops_getenv('REMOTE_ADDR'));
852
                $act           = [
853
                    XOOPS_URL,
854
                    $subscrObj->getVar('subscr_id'),
855
                    $subscrObj->getVar('subscr_actkey'),
856
                    $subscrObj->getVar('subscr_email'),
857
                ];
858
                $activationKey = base64_encode(implode('||', $act));
859
                $xoopsMailer->assign('ACTLINK', XOOPS_URL . "/modules/xnewsletter/{$currentFile}?op=unsub&email={$subscrObj->getVar('subscr_email')}&actkey={$activationKey}");
860
                $xoopsMailer->setSubject(_MA_XNEWSLETTER_DELETESUBJECT . $GLOBALS['xoopsConfig']['sitename']);
861
                if (!$xoopsMailer->send()) {
862
                    $count_err++;
863
                    $actionProts_error[] = _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors();
864
                    redirect_header($currentFile, 3, _MA_XNEWSLETTER_SUBSCRIPTION_ERROR_SENDACTKEY . '<br>' . $xoopsMailer->getErrors());
865
                }
866
                //                }
867
                if (0 == $count_err) {
868
                    $actionProts_ok[] = str_replace('%subscr_email', $subscrObj->getVar('subscr_email'), _MA_XNEWSLETTER_SENDMAIL_UNREG_OK);
869
                }
870
            }
871
872
            $xoopsTpl->assign('actionProts_ok', $actionProts_ok);
873
            $xoopsTpl->assign('actionProts_warning', $actionProts_warning);
874
            $xoopsTpl->assign('actionProts_error', $actionProts_error);
875
        } else {
876
            $GLOBALS['xoopsOption']['template_main'] = 'xnewsletter_empty.tpl';
877
            require_once XOOPS_ROOT_PATH . '/header.php';
878
879
            $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
880
            $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
881
            $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
882
            // breadcrumb
883
            $breadcrumb = new Xnewsletter\Breadcrumb();
884
            $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
885
            $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIBE, XNEWSLETTER_URL . '/subscription.php?op=list_subscriptions');
886
            $breadcrumb->addLink(_MD_XNEWSLETTER_SUBSCRIPTION_DELETE, '');
887
            $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
888
889
            $subscrObj = $helper->getHandler('Subscr')->get($subscr_id);
890
            xoops_confirm([
891
                              'ok'           => true,
892
                              'subscr_id'    => $subscr_id,
893
                              'subscr_email' => $subscr_email,
894
                              'op'           => 'delete_subscription',
895
                          ], $currentFile, sprintf(_MA_XNEWSLETTER_SUBSCRIPTION_DELETE_SURE));
896
        }
897
        break;
898
}
899
900
require_once __DIR__ . '/footer.php';
901