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

letter.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 Xmf\Request;
29
use XoopsModules\Xnewsletter;
30
31
$currentFile = basename(__FILE__);
32
require_once __DIR__ . '/header.php';
33
34
$uid    = (is_object($xoopsUser) && isset($xoopsUser)) ? $xoopsUser->uid() : 0;
35
$groups = is_object($xoopsUser) ? $xoopsUser->getGroups() : [0 => XOOPS_GROUP_ANONYMOUS];
36
37
$op        = \Xmf\Request::getString('op', 'list_letters');
38
$letter_id = \Xmf\Request::getInt('letter_id', 0);
39
$cat_id    = \Xmf\Request::getInt('cat_id', 0);
40
41
switch ($op) {
42
    case 'list_subscrs':
43
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter_list_subscrs.tpl";
44
        require_once XOOPS_ROOT_PATH . '/header.php';
45
46
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
47
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
48
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
49
        // breadcrumb
50
        $breadcrumb = new Xnewsletter\Breadcrumb();
51
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
52
        $breadcrumb->addLink(_MD_XNEWSLETTER_LIST_SUBSCR, '');
53
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
54
55
        // check right to edit/delete subscription of other persons
56
        $permissionChangeOthersSubscriptions = false;
57
        foreach ($groups as $group) {
58
            if (in_array($group, $helper->getConfig('xn_groups_change_other')) || XOOPS_GROUP_ADMIN == $group) {
59
                $permissionChangeOthersSubscriptions = true;
60
                break;
61
            }
62
        }
63
        $xoopsTpl->assign('permissionChangeOthersSubscriptions', $permissionChangeOthersSubscriptions);
64
        // get search subscriber form
65
        if ($permissionChangeOthersSubscriptions) {
66
            require_once XOOPS_ROOT_PATH . '/class/xoopsformloader.php';
67
            $form = new \XoopsThemeForm(_AM_XNEWSLETTER_FORMSEARCH_SUBSCR_EXIST, 'form_search', 'subscription.php', 'post', true);
68
            $form->setExtra('enctype="multipart/form-data"');
69
            $form->addElement(new \XoopsFormText(_AM_XNEWSLETTER_SUBSCR_EMAIL, 'subscr_email', 60, 255, '', true));
70
            $form->addElement(new \XoopsFormButton('', 'submit', _AM_XNEWSLETTER_SEARCH, 'submit'));
71
            $xoopsTpl->assign('searchSubscriberForm', $form->render());
72
        } else {
73
            $xoopsTpl->assign('searchSubscriberForm', '');
74
        }
75
        // get cat objects
76
        $catCriteria = new \CriteriaCompo();
77
        $catCriteria->setSort('cat_id');
78
        $catCriteria->setOrder('ASC');
79
        $catObjs = $helper->getHandler('Cat')->getAll($catCriteria, null, true, true);
80
        // cats table
81
        foreach ($catObjs as $cat_id => $catObj) {
82
            $permissionShowCats[$cat_id] = $grouppermHandler->checkRight('newsletter_list_cat', $cat_id, $groups, $helper->getModule()->mid());
83
            if (true === $permissionShowCats[$cat_id]) {
84
                $cat_array         = $catObj->toArray();
85
                $catsubscrCriteria = new \CriteriaCompo();
86
                $catsubscrCriteria->add(new \Criteria('catsubscr_catid', $cat_id));
87
                $cat_array['catsubscrCount'] = $helper->getHandler('Catsubscr')->getCount($catsubscrCriteria);
88
                $xoopsTpl->append('cats', $cat_array);
89
            }
90
        }
91
        // get cat_id
92
        $cat_id = \Xmf\Request::getInt('cat_id', 0);
93
        $xoopsTpl->assign('cat_id', $cat_id);
94
        if ($cat_id > 0) {
95
            $catObj = $helper->getHandler('Cat')->get($cat_id);
96
            // subscrs table
97
            if (true === $permissionShowCats[$cat_id]) {
98
                $counter = 1;
99
                $sql     = 'SELECT `subscr_sex`, `subscr_lastname`, `subscr_firstname`, `subscr_email`, `subscr_id`';
100
                $sql     .= " FROM {$xoopsDB->prefix('xnewsletter_subscr')} INNER JOIN {$xoopsDB->prefix('xnewsletter_catsubscr')} ON `subscr_id` = `catsubscr_subscrid`";
101
                $sql     .= " WHERE (((`catsubscr_catid`)={$cat_id}) AND ((`catsubscr_quited`)=0)) ORDER BY `subscr_lastname`, `subscr_email`;";
102
                if (!$subscrs = $xoopsDB->query($sql)) {
103
                    die('MySQL-Error: ' . $GLOBALS['xoopsDB']->error());
104
                }
105
                while ($subscr_array = mysqli_fetch_assoc($subscrs)) {
106
                    $subscr_array['counter'] = ++$counter;
107
                    $xoopsTpl->append('subscrs', $subscr_array);
108
                }
109
            }
110
        }
111
        break;
112
    case 'show_preview':
113
    case 'show_letter_preview':
114
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter_preview.tpl";
115
        require_once XOOPS_ROOT_PATH . '/header.php';
116
117
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
118
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
119
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
120
        // breadcrumb
121
        $breadcrumb = new Xnewsletter\Breadcrumb();
122
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
123
        $breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
124
        $breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_PREVIEW, '');
125
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
126
127
        // get letter_id
128
        $letter_id = \Xmf\Request::getInt('letter_id', 0);
129
        // get letter object
130
        $letterObj = $helper->getHandler('Letter')->get($letter_id);
131
        // subscr data
132
        $xoopsTpl->assign('sex', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW);
133
        $xoopsTpl->assign('salutation', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW); // new from v1.3
134
        $xoopsTpl->assign('firstname', _AM_XNEWSLETTER_SUBSCR_FIRSTNAME_PREVIEW);
135
        $xoopsTpl->assign('lastname', _AM_XNEWSLETTER_SUBSCR_LASTNAME_PREVIEW);
136
        $xoopsTpl->assign('subscr_email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW);
137
        $xoopsTpl->assign('email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW); // new from v1.3
138
        // letter data
139
        $xoopsTpl->assign('title', $letterObj->getVar('letter_title', 'n')); // new from v1.3
140
        $xoopsTpl->assign('content', $letterObj->getVar('letter_content', 'n'));
141
        // letter attachments as link
142
        $attachmentAslinkCriteria = new \CriteriaCompo();
143
        $attachmentAslinkCriteria->add(new \Criteria('attachment_letter_id', $letter_id));
144
        $attachmentAslinkCriteria->add(new \Criteria('attachment_mode', _XNEWSLETTER_ATTACHMENTS_MODE_ASLINK));
145
        $attachmentAslinkCriteria->setSort('attachment_id');
146
        $attachmentAslinkCriteria->setOrder('ASC');
147
        $attachmentObjs = $helper->getHandler('Attachment')->getObjects($attachmentAslinkCriteria, true);
148 View Code Duplication
        foreach ($attachmentObjs as $attachment_id => $attachmentObj) {
149
            $attachment_array                    = $attachmentObj->toArray();
150
            $attachment_array['attachment_url']  = XNEWSLETTER_URL . "/attachment.php?attachment_id={$attachment_id}";
151
            $attachment_array['attachment_link'] = XNEWSLETTER_URL . "/attachment.php?attachment_id={$attachment_id}";
152
            $xoopsTpl->append('attachments', $attachment_array);
153
        }
154
        // extra data
155
        $xoopsTpl->assign('date', time()); // new from v1.3
156
        $xoopsTpl->assign('unsubscribe_url', XOOPS_URL . '/modules/xnewsletter/');
157
        $xoopsTpl->assign('catsubscr_id', '0');
158
159
        $letter_array = $letterObj->toArray();
160
161
        preg_match('/db:([0-9]*)/', $letterObj->getVar('letter_template'), $matches);
162 View Code Duplication
        if (isset($matches[1]) && ($templateObj = $helper->getHandler('Template')->get((int)$matches[1]))) {
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...
163
            // get template from database
164
            $htmlBody = $xoopsTpl->fetchFromData($templateObj->getVar('template_content', 'n'));
165
        } else {
166
            // get template from filesystem
167
            $template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/' . $GLOBALS['xoopsConfig']['language'] . '/templates/';
168
            if (!is_dir($template_path)) {
169
                $template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/english/templates/';
170
            }
171
            $template = $template_path . $letterObj->getVar('letter_template') . '.tpl';
172
            $htmlBody = $xoopsTpl->fetch($template);
173
        }
174
    try {
175
        $textBody = xnewsletter_html2text($htmlBody);
176
    }
177
    catch (Html2TextException $e) {
178
    } // new from v1.3
179
180
        $letter_array['letter_content_templated']      = $htmlBody;
181
        $letter_array['letter_content_templated_html'] = $htmlBody;
182
        $letter_array['letter_content_templated_text'] = $textBody; // new from v1.3
183
        $letter_array['letter_created_formatted']      = formatTimestamp($letterObj->getVar('letter_created'), $helper->getConfig('dateformat'));
184
        $letter_array['letter_submitter_name']         = \XoopsUserUtility::getUnameFromId($letterObj->getVar('letter_submitter'));
185
        $xoopsTpl->assign('letter', $letter_array);
186
        break;
187
    case 'print_letter':
188
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter_print.tpl";
189
        require_once XOOPS_ROOT_PATH . '/header.php';
190
191
        //$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
192
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
193
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
194
195
        // get letter_id
196
        $letter_id = \Xmf\Request::getInt('letter_id', 0);
197
        // get letter object
198
        $letterObj = $helper->getHandler('Letter')->get($letter_id);
199
        // subscr data
200
        $xoopsTpl->assign('sex', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW);
201
        $xoopsTpl->assign('salutation', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW); // new from v1.3
202
        $xoopsTpl->assign('firstname', _AM_XNEWSLETTER_SUBSCR_FIRSTNAME_PREVIEW);
203
        $xoopsTpl->assign('lastname', _AM_XNEWSLETTER_SUBSCR_LASTNAME_PREVIEW);
204
        $xoopsTpl->assign('subscr_email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW);
205
        $xoopsTpl->assign('email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW); // new from v1.3
206
        // letter data
207
        $xoopsTpl->assign('title', $letterObj->getVar('letter_title', 'n')); // new from v1.3
208
        $xoopsTpl->assign('content', $letterObj->getVar('letter_content', 'n'));
209
        // extra data
210
        $xoopsTpl->assign('date', time()); // new from v1.3
211
        $xoopsTpl->assign('unsubscribe_url', XOOPS_URL . '/modules/xnewsletter/');
212
        $xoopsTpl->assign('catsubscr_id', '0');
213
214
        $letter_array = $letterObj->toArray();
215
216
        preg_match('/db:([0-9]*)/', $letterObj->getVar('letter_template'), $matches);
217 View Code Duplication
        if (isset($matches[1]) && ($templateObj = $helper->getHandler('Template')->get((int)$matches[1]))) {
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...
218
            // get template from database
219
            $htmlBody = $xoopsTpl->fetchFromData($templateObj->getVar('template_content', 'n'));
220
        } else {
221
            // get template from filesystem
222
            $template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/' . $GLOBALS['xoopsConfig']['language'] . '/templates/';
223
            if (!is_dir($template_path)) {
224
                $template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/english/templates/';
225
            }
226
            $template = $template_path . $letterObj->getVar('letter_template') . '.tpl';
227
            $htmlBody = $xoopsTpl->fetch($template);
228
        }
229
        try {
230
            $textBody = xnewsletter_html2text($htmlBody);
231
        }
232
        catch (Html2TextException $e) {
233
        } // new from v1.3
234
235
        $letter_array['letter_content_templated']      = $htmlBody;
236
        $letter_array['letter_content_templated_html'] = $htmlBody;
237
        $letter_array['letter_content_templated_text'] = $textBody; // new from v1.3
238
        $letter_array['letter_created_formatted']      = formatTimestamp($letterObj->getVar('letter_created'), $helper->getConfig('dateformat'));
239
        $letter_array['letter_submitter_name']         = \XoopsUserUtility::getUnameFromId($letterObj->getVar('letter_submitter'));
240
        $xoopsTpl->assign('letter', $letter_array);
241
        break;
242
    case 'list_letters':
243
    default:
244
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter_list_letters.tpl";
245
        require_once XOOPS_ROOT_PATH . '/header.php';
246
247
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
248
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
249
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
250
        // breadcrumb
251
        $breadcrumb = new Xnewsletter\Breadcrumb();
252
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
253
        $breadcrumb->addLink(_MD_XNEWSLETTER_LIST, '');
254
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
255
256
        // get letters array
257
        $letterCriteria = new \CriteriaCompo();
258
        $letterCriteria->setSort('letter_id');
259
        $letterCriteria->setOrder('DESC');
260
        $letterCount = $helper->getHandler('Letter')->getCount();
261
        $start       = \Xmf\Request::getInt('start', 0);
262
        $limit       = $helper->getConfig('adminperpage');
263
        $letterCriteria->setStart($start);
264
        $letterCriteria->setLimit($limit);
265
        $letterObjs = $helper->getHandler('Letter')->getAll($letterCriteria, null, true, true);
266
267
        // pagenav
268
        $pagenav = new \XoopsPageNav($letterCount, $limit, $start, 'start', "op={$op}");
269
        $xoopsTpl->assign('pagenav', $pagenav->renderNav());
270
271
        // letters table
272
        $showAdminColumns = false;
273
        if ($letterCount > 0) {
274
            foreach ($letterObjs as $letter_id => $letterObj) {
275
                $userPermissions = xnewsletter_getUserPermissionsByLetter($letter_id);
276
                if (($userPermissions['read'] && $letterObj->getVar('letter_sent') > 0)
277
                    || (true === $userPermissions['send'])) {
278
                    $letter_array                             = $letterObj->toArray();
279
                    $letter_array['letter_created_formatted'] = formatTimestamp($letterObj->getVar('letter_created'), $helper->getConfig('dateformat'));
280
                    $letter_array['letter_submitter_name']    = \XoopsUserUtility::getUnameFromId($letterObj->getVar('letter_submitter'));
281
                    $letter_array['letter_sent_formatted']    = 0 != $letterObj->getVar('letter_sent') ? formatTimestamp($letterObj->getVar('letter_sent'), $helper->getConfig('dateformat')) : '';
282
                    $letter_array['letter_sender_name']       = \XoopsUserUtility::getUnameFromId($letterObj->getVar('letter_sender'));
283
284
                    preg_match('/db:([0-9]*)/', $letter_array['letter_template'], $matches);
285
                    if (isset($matches[1])
286
                        && ($templateObj = $helper->getHandler('Template')->get((int)$matches[1]))) {
287
                        $letter_array['letter_template'] = 'db:' . $templateObj->getVar('template_title');
288
                    } else {
289
                        $letter_array['letter_template'] = 'file:' . $letter_array['letter_template'];
290
                    }
291
292
                    $letter_cat_ids = explode('|', $letterObj->getVar('letter_cats'));
293
                    // skip letter
294
                    if ((0 != $cat_id) && !in_array($cat_id, $letter_cat_ids)) {
295
                        continue;
296
                    }
297
                    // get categories
298
                    $catsAvailableCount = 0;
299
                    unset($letter_array['letter_cats']); // IN PROGRESS
300
                    foreach ($letter_cat_ids as $letter_cat_id) {
301
                        $catObj = $helper->getHandler('Cat')->get($letter_cat_id);
302
                        if ($grouppermHandler->checkRight('newsletter_read_cat', $catObj->getVar('cat_id'), $groups, $helper->getModule()->mid())) {
303
                            ++$catsAvailableCount;
304
                            $letter_array['letter_cats'][] = $catObj->toArray();
305
                        }
306
                        unset($catObj);
307
                    }
308
                    if ($catsAvailableCount > 0) {
309
                        $letters_array[] = $letter_array;
310
                    }
311
                    // count letter attachements
312
                    $attachmentCriteria = new \CriteriaCompo();
313
                    $attachmentCriteria->add(new \Criteria('attachment_letter_id', $letterObj->getVar('letter_id')));
314
                    $letter_array['attachmentCount'] = $helper->getHandler('Attachment')->getCount($attachmentCriteria);
315
                    // get protocols
316
                    if ($userPermissions['edit']) {
317
                        // take last item protocol_subscriber_id=0 from table protocol as actual status
318
                        $protocolCriteria = new \CriteriaCompo();
319
                        $protocolCriteria->add(new \Criteria('protocol_letter_id', $letterObj->getVar('letter_id')));
320
                        //$criteria->add(new \Criteria('protocol_subscriber_id', '0'));
321
                        $protocolCriteria->setSort('protocol_id');
322
                        $protocolCriteria->setOrder('DESC');
323
                        $protocolCriteria->setLimit(1);
324
                        $protocolObjs       = $helper->getHandler('Protocol')->getAll($protocolCriteria);
325
                        $protocol_status    = '';
326
                        $protocol_letter_id = 0;
327
                        foreach ($protocolObjs as $protocolObj) {
328
                            $letter_array['protocols'][] = [
329
                                'protocol_status'    => $protocolObj->getVar('protocol_status'),
330
                                'protocol_letter_id' => $protocolObj->getVar('protocol_letter_id'),
331
                            ];
332
                        }
333
                    }
334
                    // check if table show admin columns
335
                    if ((true === $userPermissions['edit']) || (true === $userPermissions['delete'])
336
                        || (true === $userPermissions['create'])
337
                        || (true === $userPermissions['send'])) {
338
                        $showAdminColumns = true;
339
                    }
340
                    $letter_array['userPermissions'] = $userPermissions;
341
                    $xoopsTpl->append('letters', $letter_array);
342
                }
343
            }
344
        }
345
        $xoopsTpl->assign('showAdminColumns', $showAdminColumns);
346
        break;
347 View Code Duplication
    case 'new_letter':
348
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter.tpl"; // IN PROGRESS
349
        require_once XOOPS_ROOT_PATH . '/header.php';
350
351
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
352
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
353
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
354
        // breadcrumb
355
        $breadcrumb = new Xnewsletter\Breadcrumb();
356
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
357
        $breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_CREATE, '');
358
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
359
360
        $letterObj = $helper->getHandler('Letter')->create();
361
        $form      = $letterObj->getForm();
362
        $content   = $form->render();
363
        $xoopsTpl->assign('content', $content);
364
        break;
365 View Code Duplication
    case 'edit_letter':
366
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter.tpl";
367
        require_once XOOPS_ROOT_PATH . '/header.php';
368
369
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
370
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
371
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
372
        // breadcrumb
373
        $breadcrumb = new Xnewsletter\Breadcrumb();
374
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
375
        $breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
376
        $breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_EDIT, '');
377
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
378
379
        $letterObj = $helper->getHandler('Letter')->get($letter_id);
380
        $form      = $letterObj->getForm();
381
        $content   = $form->render();
382
        $xoopsTpl->assign('content', $content);
383
        break;
384
    case 'delete_attachment':
385
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter.tpl";
386
        require_once XOOPS_ROOT_PATH . '/header.php';
387
388
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
389
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
390
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
391
        // breadcrumb
392
        $breadcrumb = new Xnewsletter\Breadcrumb();
393
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
394
        $breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
395
        $breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_EDIT, '');
396
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
397
398
        // update existing_attachments
399
        $existing_attachments_mode = \Xmf\Request::getArray('existing_attachments_mode', []);
400
        foreach ($existing_attachments_mode as $attachment_id => $attachment_mode) {
401
            $attachmentObj = $helper->getHandler('Attachment')->get($attachment_id);
402
            $attachmentObj->setVar('attachment_mode', $attachment_mode);
403
            $helper->getHandler('Attachment')->insert($attachmentObj);
404
        }
405
406
        $attachment_id = \Xmf\Request::getInt('deleted_attachment_id', 0, 'POST');
407
        if (0 == $attachment_id) {
408
            redirect_header($currentFile, 3, _AM_XNEWSLETTER_LETTER_ERROR_INVALID_ATT_ID);
409
        }
410
        $attachmentObj   = $helper->getHandler('Attachment')->get($attachment_id);
411
        $attachment_name = $attachmentObj->getVar('attachment_name');
412
413
        if ($helper->getHandler('Attachment')->delete($attachmentObj, true)) {
414
            $letterObj = $helper->getHandler('Letter')->get($letter_id);
415
            $letterObj->setVar('letter_title', \Xmf\Request::getString('letter_title', ''));
416
            $letterObj->setVar('letter_content', $_REQUEST['letter_content']);
417
            $letterObj->setVar('letter_template', $_REQUEST['letter_template']);
418
            $letterObj->setVar('letter_cats', implode('|', \Xmf\Request::getArray('letter_cats', [])));
419
            $letterObj->setVar('letter_account', $_REQUEST['letter_account']);
420
            $letterObj->setVar('letter_email_test', $_REQUEST['letter_email_test']);
421
422
            $form    = $letterObj->getForm(false, true);
423
            $content = $form->render();
424
            $xoopsTpl->assign('content', $content);
425
        } else {
426
            $content = $attachmentObj->getHtmlErrors();
427
            $xoopsTpl->assign('content', $content);
428
        }
429
        break;
430
    case 'save_letter':
431
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_empty.tpl";
432
        require_once XOOPS_ROOT_PATH . '/header.php';
433
434
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
435
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
436
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
437
        // breadcrumb
438
        $breadcrumb = new Xnewsletter\Breadcrumb();
439
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
440
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
441
442
        if (!$GLOBALS['xoopsSecurity']->check()) {
443
            redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
444
        }
445
        $letterObj = $helper->getHandler('Letter')->get($letter_id); // create if doesn't exist
446
        $letterObj->setVar('letter_title', \Xmf\Request::getString('letter_title', ''));
447
        $letterObj->setVar('letter_content', $_REQUEST['letter_content']);
448
        $letterObj->setVar('letter_template', $_REQUEST['letter_template']);
449
        $letterObj->setVar('letter_cats', implode('|', \Xmf\Request::getArray('letter_cats', [])));
450
        $letterObj->setVar('letter_account', $_REQUEST['letter_account']);
451
        $letterObj->setVar('letter_email_test', $_REQUEST['letter_email_test']);
452
        $letterObj->setVar('letter_submitter', \Xmf\Request::getInt('letter_submitter', 0));
453
        $letterObj->setVar('letter_created', \Xmf\Request::getInt('letter_created', time()));
454
455 View Code Duplication
        if ($helper->getHandler('Letter')->insert($letterObj)) {
456
            $letter_id = $letterObj->getVar('letter_id');
457
            // update existing_attachments
458
            $existing_attachments_mode = \Xmf\Request::getArray('existing_attachments_mode', []);
459
            foreach ($existing_attachments_mode as $attachment_id => $attachment_mode) {
460
                $attachmentObj = $helper->getHandler('Attachment')->get($attachment_id);
461
                $attachmentObj->setVar('attachment_mode', $attachment_mode);
462
                $helper->getHandler('Attachment')->insert($attachmentObj);
463
            }
464
            // upload attachments
465
            $uploadedFiles = [];
466
            require_once XOOPS_ROOT_PATH . '/class/uploader.php';
467
            $uploaddir = XOOPS_UPLOAD_PATH . $helper->getConfig('xn_attachment_path') . $letter_id . '/';
468
            // check upload_dir
469
            if (!is_dir($uploaddir)) {
470
                $indexFile = XOOPS_UPLOAD_PATH . '/index.html';
471
                if (!mkdir($uploaddir, 0777) && !is_dir($uploaddir)) {
472
                    throw new \RuntimeException(sprintf('Directory "%s" was not created', $uploaddir));
473
                }
474
                chmod($uploaddir, 0777);
475
                copy($indexFile, $uploaddir . 'index.html');
476
            }
477
            $new_attachments_mode = \Xmf\Request::getArray('new_attachments_mode', []);
478
            for ($upl = 0; $upl < $helper->getConfig('xn_maxattachments'); ++$upl) {
479
                $uploader = new \XoopsMediaUploader($uploaddir, $helper->getConfig('xn_mimetypes'), $helper->getConfig('xn_maxsize'), null, null);
480
                if ($uploader->fetchMedia(@$_POST['xoops_upload_file'][$upl])) {
481
                    //$uploader->setPrefix("xn_") ; keep original name
482
                    $uploader->fetchMedia($_POST['xoops_upload_file'][$upl]);
483
                    if (!$uploader->upload()) {
484
                        $errors = $uploader->getErrors();
485
                        redirect_header('<script>javascript:history.go(-1)</script>', 3, $errors);
486
                    } else {
487
                        preg_match('/ne\w_attachment_index=([0-9]+)/', $_POST['xoops_upload_file'][$upl], $matches);
488
                        $index           = $matches[1];
489
                        $uploadedFiles[] = [
490
                            'name' => $uploader->getSavedFileName(),
491
                            'type' => $uploader->getMediaType(),
492
                            'size' => $uploader->getMediaSize(),
493
                            'mode' => $new_attachments_mode[$index],
494
                        ];
495
                    }
496
                }
497
            }
498
            // create items in attachments
499
            foreach ($uploadedFiles as $file) {
500
                $attachmentObj = $helper->getHandler('Attachment')->create();
501
                $attachmentObj->setVar('attachment_letter_id', $letter_id);
502
                $attachmentObj->setVar('attachment_name', $file['name']);
503
                $attachmentObj->setVar('attachment_type', $file['type']);
504
                $attachmentObj->setVar('attachment_submitter', $xoopsUser->uid());
505
                $attachmentObj->setVar('attachment_created', time());
506
                $attachmentObj->setVar('attachment_size', $file['size']);
507
                $attachmentObj->setVar('attachment_mode', $file['mode']);
508
509
                $helper->getHandler('Attachment')->insert($attachmentObj);
510
            }
511
            // create item in protocol
512
            $protocolObj = $helper->getHandler('Protocol')->create();
513
            $protocolObj->setVar('protocol_letter_id', $letter_id);
514
            $protocolObj->setVar('protocol_subscriber_id', 0);
515
            $protocolObj->setVar('protocol_success', true);
516
            $action = \Xmf\Request::getInt('letter_action', _XNEWSLETTER_LETTER_ACTION_VAL_NO);
517
            switch ($action) {
518
                case _XNEWSLETTER_LETTER_ACTION_VAL_PREVIEW:
519
                    $redirectUrl = "?op=show_preview&letter_id={$letter_id}";
520
                    break;
521
                case _XNEWSLETTER_LETTER_ACTION_VAL_SEND:
522
                    $redirectUrl = "sendletter.php?op=send_letter&letter_id={$letter_id}";
523
                    break;
524
                case _XNEWSLETTER_LETTER_ACTION_VAL_SENDTEST:
525
                    $redirectUrl = "sendletter.php?op=send_test&letter_id={$letter_id}";
526
                    break;
527
                default:
528
                    $redirectUrl = '?op=list_letters';
529
                    break;
530
            }
531
            $protocolObj->setVar('protocol_status', _AM_XNEWSLETTER_LETTER_ACTION_SAVED);
532
            $protocolObj->setVar('protocol_status_str_id', _XNEWSLETTER_PROTOCOL_STATUS_SAVED); // new from v1.3
533
            $protocolObj->setVar('protocol_status_vars', []); // new from v1.3
534
            $protocolObj->setVar('protocol_submitter', $xoopsUser->uid());
535
            $protocolObj->setVar('protocol_created', time());
536
537
            if ($helper->getHandler('Protocol')->insert($protocolObj)) {
538
                // create protocol is ok
539
                redirect_header($redirectUrl, 3, _AM_XNEWSLETTER_FORMOK);
540
            } else {
541
                echo 'Error create protocol: ' . $protocolObj->getHtmlErrors();
542
            }
543
        } else {
544
            echo 'Error create letter: ' . $letterObj->getHtmlErrors();
545
        }
546
        break;
547
    case 'copy_letter':
548
    case 'clone_letter':
549
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter.tpl";
550
        require_once XOOPS_ROOT_PATH . '/header.php';
551
552
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
553
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
554
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
555
        // breadcrumb
556
        $breadcrumb = new Xnewsletter\Breadcrumb();
557
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
558
        $breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
559
        $breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_COPY, '');
560
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
561
562
        $oldLetterObj = $helper->getHandler('Letter')->get($letter_id);
563
        $newLetterObj = $helper->getHandler('Letter')->create();
564
        $newLetterObj->setVar('letter_title', sprintf(_AM_XNEWSLETTER_LETTER_CLONED, $oldLetterObj->getVar('letter_title')));
565
        $newLetterObj->setVar('letter_content', $oldLetterObj->getVar('letter_content', 'n'));
566
        $newLetterObj->setVar('letter_template', $oldLetterObj->getVar('letter_template'));
567
        $newLetterObj->setVar('letter_cats', $oldLetterObj->getVar('letter_cats'));
568
        $newLetterObj->setVar('letter_account', $oldLetterObj->getVar('letter_account'));
569
        $newLetterObj->setVar('letter_email_test', $oldLetterObj->getVar('letter_email_test'));
570
        unset($oldLetterObj);
571
        $action  = XOOPS_URL . "/modules/xnewsletter/{$currentFile}?op=copy_letter";
572
        $form    = $newLetterObj->getForm($action);
573
        $content = $form->render();
574
        $xoopsTpl->assign('content', $content);
575
        break;
576
    case 'delete_letter':
577
        $GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_empty.tpl";
578
        require_once XOOPS_ROOT_PATH . '/header.php';
579
580
        $xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
581
        $xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
582
        $xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
583
        // breadcrumb
584
        $breadcrumb = new Xnewsletter\Breadcrumb();
585
        $breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
586
        $breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
587
        $breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_DELETE, '');
588
        $xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
589
590
        // IN PROGRESS FROM HERE
591
592
        $letterObj = $helper->getHandler('Letter')->get($letter_id);
593 View Code Duplication
        if (true === \Xmf\Request::getBool('ok', false, 'POST')) {
594
            if (!$GLOBALS['xoopsSecurity']->check()) {
595
                redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
596
            }
597
            if ($helper->getHandler('Letter')->delete($letterObj)) {
598
                //delete protocols
599
                $sql = 'DELETE';
600
                $sql .= " FROM `{$xoopsDB->prefix('xnewsletter_protocol')}`";
601
                $sql .= " WHERE `protocol_letter_id`={$letter_id}";
602
                if (!$result = $xoopsDB->query($sql)) {
603
                    die('MySQL-Error: ' . $GLOBALS['xoopsDB']->error());
604
                }
605
                // delete attachments
606
                $attachmentCriteria = new \Criteria('attachment_letter_id', $letter_id);
607
                $helper->getHandler('Attachment')->deleteAll($attachmentCriteria, true, true);
608
                redirect_header($currentFile, 3, _AM_XNEWSLETTER_FORMDELOK);
609
            } else {
610
                echo $letterObj->getHtmlErrors();
611
            }
612
        } else {
613
            xoops_confirm(['ok' => true, 'letter_id' => $letter_id, 'op' => 'delete_letter'], $_SERVER['REQUEST_URI'], sprintf(_AM_XNEWSLETTER_FORMSUREDEL, $letterObj->getVar('letter_title')));
614
        }
615
        break;
616
}
617
618
require_once __DIR__ . '/footer.php';
619