Completed
Pull Request — master (#27)
by Michael
01:42
created

admin/letter.php (4 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
30
$currentFile = basename(__FILE__);
31
require_once __DIR__ . '/admin_header.php';
32
xoops_cp_header();
33
34
// We recovered the value of the argument op in the URL$
35
$op        = \Xmf\Request::getString('op', 'list');
36
$letter_id = \Xmf\Request::getInt('letter_id', 0);
37
38
switch ($op) {
39
    case 'show_preview':
40
    case 'show_letter_preview':
41
        global $XoopsTpl;
42
43
        $adminObject->displayNavigation($currentFile);
44
        $adminObject->addItemButton(_AM_XNEWSLETTER_LETTERLIST, '?op=list', 'list');
45
        $adminObject->displayButton('left');
46
47
        $letterTpl = new \XoopsTpl();
48
49
        $letterObj = $helper->getHandler('Letter')->get($letter_id);
50
        // subscr data
51
        $letterTpl->assign('sex', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW);
52
        $letterTpl->assign('salutation', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW); // new from v1.3
53
        $letterTpl->assign('firstname', _AM_XNEWSLETTER_SUBSCR_FIRSTNAME_PREVIEW);
54
        $letterTpl->assign('lastname', _AM_XNEWSLETTER_SUBSCR_LASTNAME_PREVIEW);
55
        $letterTpl->assign('subscr_email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW);
56
        $letterTpl->assign('email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW); // new from v1.3
57
        // letter data
58
        $letterTpl->assign('title', $letterObj->getVar('letter_title', 'n')); // new from v1.3
59
        $letterTpl->assign('content', $letterObj->getVar('letter_content', 'n'));
60
        // letter attachments as link
61
        $attachmentAslinkCriteria = new \CriteriaCompo();
62
        $attachmentAslinkCriteria->add(new \Criteria('attachment_letter_id', $letter_id));
63
        $attachmentAslinkCriteria->add(new \Criteria('attachment_mode', _XNEWSLETTER_ATTACHMENTS_MODE_ASLINK));
64
        $attachmentAslinkCriteria->setSort('attachment_id');
65
        $attachmentAslinkCriteria->setOrder('ASC');
66
        $attachmentObjs = $helper->getHandler('Attachment')->getObjects($attachmentAslinkCriteria, true);
67 View Code Duplication
        foreach ($attachmentObjs as $attachment_id => $attachmentObj) {
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...
68
            $attachment_array                    = $attachmentObj->toArray();
69
            $attachment_array['attachment_url']  = XNEWSLETTER_URL . "/attachment.php?attachment_id={$attachment_id}";
70
            $attachment_array['attachment_link'] = XNEWSLETTER_URL . "/attachment.php?attachment_id={$attachment_id}";
71
            $letterTpl->append('attachments', $attachment_array);
72
        }
73
        // extra data
74
        $letterTpl->assign('date', time()); // new from v1.3
75
        $letterTpl->assign('unsubscribe_url', '#');
76
        $letterTpl->assign('catsubscr_id', '0');
77
78
        preg_match('/db:([0-9]*)/', $letterObj->getVar('letter_template'), $matches);
79 View Code Duplication
        if (isset($matches[1]) && ($templateObj = $helper->getHandler('Template')->get((int)$matches[1]))) {
80
            // get template from database
81
            $htmlBody = $letterTpl->fetchFromData($templateObj->getVar('template_content', 'n'));
82
        } else {
83
            // get template from filesystem
84
            $template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/' . $GLOBALS['xoopsConfig']['language'] . '/templates/';
85
            if (!is_dir($template_path)) {
86
                $template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/english/templates/';
87
            }
88
            $template = $template_path . $letterObj->getVar('letter_template') . '.tpl';
89
            $htmlBody = $letterTpl->fetch($template);
90
        }
91
    try {
92
        $textBody = xnewsletter_html2text($htmlBody);
93
    }
94
    catch (Html2TextException $e) {
95
    } // new from v1.3
96
97
        echo "<h2>{$letterObj->getVar('letter_title')}</h2>";
98
        echo "<div style='clear:both'>";
99
        echo "<div style='padding:10px;border:1px solid black'>";
100
        echo $htmlBody;
101
        echo '</div>';
102
        echo "<div style='padding:10px;border:1px solid black; font-family: monospace;'>";
103
        echo nl2br(utf8_encode($textBody));
104
        echo '</div>';
105
        echo '</div>';
106
        break;
107
    case 'list_letters':
108
    default:
109
        $adminObject->displayNavigation($currentFile);
110
        $adminObject->addItemButton(_AM_XNEWSLETTER_NEWLETTER, '?op=new_letter', 'add');
111
        $adminObject->displayButton('left');
112
113
        $limit          = $helper->getConfig('adminperpage');
114
        $letterCriteria = new \CriteriaCompo();
115
        $letterCriteria->setSort('letter_id');
116
        $letterCriteria->setOrder('DESC');
117
        $letterCount = $helper->getHandler('Letter')->getCount();
118
        $start       = \Xmf\Request::getInt('start', 0);
119
        $letterCriteria->setStart($start);
120
        $letterCriteria->setLimit($limit);
121
        $letterObjs = $helper->getHandler('Letter')->getObjects($letterCriteria, true);
122
123
        // pagenav
124
        require_once XOOPS_ROOT_PATH . '/class/pagenav.php';
125
        $pagenav = new \XoopsPageNav($letterCount, $limit, $start, 'start', 'op=list');
126
        $pagenav = $pagenav->renderNav();
127
128
        // View Table
129
        echo "<table class='outer' cellspacing='1'>
130
            <tr>
131
                <th>" . _AM_XNEWSLETTER_LETTER_ID . '</th>
132
                <th>' . _AM_XNEWSLETTER_LETTER_TITLE . '</th>
133
                <th>' . _AM_XNEWSLETTER_LETTER_CATS . "</th>
134
                <th style='white-space: nowrap'>" . _AM_XNEWSLETTER_LETTER_SUBMITTER . '<br>' . _AM_XNEWSLETTER_LETTER_CREATED . "</th>
135
                <th style='white-space: nowrap'>" . _AM_XNEWSLETTER_LETTER_SENDER . '<br>' . _AM_XNEWSLETTER_LETTER_SENT . '</th>
136
                <th>' . _AM_XNEWSLETTER_LETTER_TEMPLATE . '</th>
137
                <th>' . _AM_XNEWSLETTER_LETTER_ATTACHMENT . '<br>' . _AM_XNEWSLETTER_LETTER_SIZE . '</th>
138
                <th>' . _AM_XNEWSLETTER_LETTER_ACCOUNT . '</th>
139
                <th>' . _AM_XNEWSLETTER_LETTER_EMAIL_TEST . '</th>
140
                <th>' . _AM_XNEWSLETTER_PROTOCOL_LAST_STATUS . '</th>
141
                <th>' . _AM_XNEWSLETTER_FORMACTION . '</th>
142
            </tr>';
143
        if ($letterCount > 0) {
144
            $class = 'odd';
145
            foreach ($letterObjs as $letter_id => $letterObj) {
146
                echo "<tr class='{$class}'>";
147
                $class = ('even' === $class) ? 'odd' : 'even';
148
149
                echo "<td>{$letter_id}</td>";
150
151
                echo "<td>{$letterObj->getVar('letter_title')}</td>";
152
153
                echo "<td style='white-space: nowrap'>";
154
                $letter_cat_ids = explode('|', $letterObj->getVar('letter_cats'));
155
                foreach ($letter_cat_ids as $letter_cat_id) {
156
                    $catObj = $helper->getHandler('Cat')->get($letter_cat_id);
157
                    if (is_object($catObj)) {
158
                        echo $catObj->getVar('cat_name') . " <a href='cat.php?op=edit_cat&cat_id={$catObj->getVar('cat_id')}'><img src=" . XNEWSLETTER_ICONS_URL . "/xn_edit.png alt='" . _EDIT . "' title='" . _EDIT . "' style='padding:1px'></a>";
159
                    } else {
160
                        $letter_cats .= 'Invalid cat_name';
161
                    }
162
                    echo '<br>';
163
                }
164
                echo '</td>';
165
166
                echo '<td>' . \XoopsUser::getUnameFromId($letterObj->getVar('letter_submitter'), 's') . '<br>' . formatTimestamp($letterObj->getVar('letter_created'), 's') . '</td>';
167
168
                echo '<td>';
169
                if (0 < $letterObj->getVar('letter_sender')) {
170
                    echo \XoopsUser::getUnameFromId($letterObj->getVar('letter_sender'), 's');
171
                }
172
                echo '<br>';
173
                if (0 < $letterObj->getVar('letter_sent')) {
174
                    echo formatTimestamp($letterObj->getVar('letter_sent'), 's');
175
                }
176
                echo '</td>';
177
178
                echo '<td>';
179
                preg_match('/db:([0-9]*)/', $letterObj->getVar('letter_template'), $matches);
180
                if (isset($matches[1])
181
                    && ($templateObj = $helper->getHandler('Template')->get((int)$matches[1]))) {
182
                    echo 'db:' . $templateObj->getVar('template_title');
183
                    echo " <a href='template.php?op=edit_template&template_id={$templateObj->getVar('template_id')}'><img src=" . XNEWSLETTER_ICONS_URL . "/xn_edit.png alt='" . _EDIT . "' title='" . _EDIT . "' style='padding:1px'></a>";
184
                } else {
185
                    echo 'file:' . $letterObj->getVar('letter_template');
186
                }
187
                echo '</td>';
188
189
                $attachmentCriteria = new \CriteriaCompo();
190
                $attachmentCriteria->add(new \Criteria('attachment_letter_id', $letter_id));
191
                $attachmentCount = $helper->getHandler('Attachment')->getCount($attachmentCriteria);
192
                $attachmentObjs  = $helper->getHandler('Attachment')->getObjects($attachmentCriteria, true);
193
                echo "<td style='white-space: nowrap'>";
194
                //echo "({$attachmentCount})";
195
                $attachmentsSize = 0;
196
                if ($attachmentCount > 0) {
197
                    $attachmentsSize = 0;
198
                    echo '<ul>';
199
                    foreach ($attachmentObjs as $attachment_id => $attachmentObj) {
200
                        $attachmentsSize = $attachmentsSize + $attachmentObj->getVar('attachment_size');
201
                        $size            = xnewsletter_bytesToSize1024($attachmentObj->getVar('attachment_size'));
202
                        echo "<li><span title='" . $attachmentObj->getVar('attachment_type') . ' ' . $size . "'>{$attachmentObj->getVar('attachment_name')}</span></li>";
203
                    }
204
                    echo '</ul>';
205
                    echo _AM_XNEWSLETTER_LETTER_ATTACHMENT_TOTALSIZE . ": <span title='" . $attachmentsSize . " Bytes'>" . xnewsletter_bytesToSize1024($attachmentsSize) . '</span>';
206
                    echo '<br>';
207
                }
208
                try {
209
                    $emailSize = xnewsletter_emailSize($letter_id);
210
                }
211
                catch (Html2TextException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
212
                }
213
                echo _AM_XNEWSLETTER_LETTER_EMAIL_SIZE . ": <span title='" . $emailSize . ' Bytes (' . _AM_XNEWSLETTER_LETTER_EMAIL_SIZE_DESC . ")'>" . xnewsletter_bytesToSize1024($emailSize) . '</span>';
214
                echo '</td>';
215
216
                $accountCriteria = new \CriteriaCompo();
217
                $accountCriteria->setSort('accounts_id');
218
                $accountCriteria->setOrder('ASC');
219
                $accountObj     = $helper->getHandler('Accounts')->get($letterObj->getVar('letter_account'));
220
                $letter_account = $accountObj ? $accountObj->getVar('accounts_name') : _NONE;
221
                echo "<td>{$letter_account}</td>";
222
223
                echo "<td>{$letterObj->getVar('letter_email_test')}&nbsp;</td>";
224
225
                // take last item protocol_subscriber_id=0 from table protocol as actual status
226
                $protocolCriteria = new \CriteriaCompo();
227
                $protocolCriteria->add(new \Criteria('protocol_letter_id', $letter_id));
228
                $protocolCriteria->add(new \Criteria('protocol_subscriber_id', '0'));
229
                $protocolCriteria->setSort('protocol_id');
230
                $protocolCriteria->setOrder('DESC');
231
                $protocolCriteria->setLimit(1);
232
                $protocolObjs       = $helper->getHandler('Protocol')->getAll($protocolCriteria);
233
                $protocol_status    = '';
234
                $protocol_letter_id = 0;
235
                foreach ($protocolObjs as $protocolObj) {
236
                    $protocol_status    .= $protocolObj->getVar('protocol_status');
237
                    $protocol_letter_id = $protocolObj->getVar('protocol_letter_id');
238
                }
239
                echo "<td class='center'><a href=' protocol.php?op=list_letter&letter_id={$protocol_letter_id}'>{$protocol_status}</a></td>";
240
241
                echo "<td class='center'>";
242
                echo "    <a href='?op=edit_letter&letter_id={$letter_id}'><img src='" . XNEWSLETTER_ICONS_URL . "/xn_edit.png' alt='" . _EDIT . "' title='" . _EDIT . "' style='padding:1px'></a>";
243
                echo "    <a href='?op=clone_letter&letter_id={$letter_id}'><img src='" . XNEWSLETTER_ICONS_URL . "/xn_clone.png' alt='" . _CLONE . "' title='" . _CLONE . "' style='padding:1px'></a>";
244
                echo "    <a href='?op=delete_letter&letter_id={$letter_id}'><img src='" . XNEWSLETTER_ICONS_URL . "/xn_delete.png' alt='" . _DELETE . "' title='" . _DELETE . "'  style='padding:1px'></a>";
245
                echo '    <br>';
246
                echo "    <a href='sendletter.php?op=send_test&letter_id={$letter_id}'><img src='" . XNEWSLETTER_ICONS_URL . "/xn_sendtest.png' alt='" . _AM_XNEWSLETTER_LETTER_ACTION_SENDTEST . "' title='" . _AM_XNEWSLETTER_LETTER_ACTION_SENDTEST . "' style='padding:1px'></a>";
247
                echo "    <a href='sendletter.php?op=send_letter&letter_id={$letter_id}'><img src='" . XNEWSLETTER_ICONS_URL . "/xn_send.png' alt='" . _AM_XNEWSLETTER_LETTER_ACTION_SEND . "' title='" . _AM_XNEWSLETTER_LETTER_ACTION_SEND . "' style='padding:1px'></a>";
248
                echo "    <a href='sendletter.php?op=resend_letter&letter_id={$letter_id}'><img src='" . XNEWSLETTER_ICONS_URL . "/xn_resend.png' alt='" . _AM_XNEWSLETTER_LETTER_ACTION_RESEND . "' title='" . _AM_XNEWSLETTER_LETTER_ACTION_RESEND . "' style='padding:1px'></a>";
249
                echo '    <br>';
250
                echo "    <a href='?op=show_preview&letter_id={$letter_id}'><img src='" . XNEWSLETTER_ICONS_URL . "/xn_preview.png' alt='" . _AM_XNEWSLETTER_LETTER_ACTION_PREVIEW . "' title='" . _AM_XNEWSLETTER_LETTER_ACTION_PREVIEW . "' style='padding:1px'></a>";
251
                echo "    <a href='" . XNEWSLETTER_URL . "/print.php?letter_id={$letter_id}' target='_BLANK' ><img src='" . XNEWSLETTER_ICONS_URL . "/printer.png' alt='" . _AM_XNEWSLETTER_LETTER_ACTION_PRINT . "' title='" . _AM_XNEWSLETTER_LETTER_ACTION_PRINT . "' style='padding:1px'></a>";
252
                echo '</td>';
253
                echo '</tr>';
254
            }
255
        }
256
        echo '</table>';
257
        echo '<br>';
258
        echo "<div>{$pagenav}</div>";
259
        echo '<br>';
260
        break;
261
    case 'new_letter':
262
        $adminObject->displayNavigation($currentFile);
263
        $adminObject->addItemButton(_AM_XNEWSLETTER_LETTERLIST, '?op=list', 'list');
264
        $adminObject->displayButton('left');
265
266
        $letterObj = $helper->getHandler('Letter')->create();
267
        $form      = $letterObj->getForm(false, true);
268
        $form->display();
269
        break;
270
    case 'edit_letter':
271
        $adminObject->displayNavigation($currentFile);
272
        $adminObject->addItemButton(_AM_XNEWSLETTER_NEWLETTER, '?op=new_letter', 'add');
273
        $adminObject->addItemButton(_AM_XNEWSLETTER_LETTERLIST, '?op=list', 'list');
274
        $adminObject->displayButton('left');
275
276
        $letterObj = $helper->getHandler('Letter')->get($letter_id);
277
        $form      = $letterObj->getForm(false, true);
278
        $form->display();
279
        break;
280
    case 'delete_attachment':
281
        $adminObject->displayNavigation($currentFile);
282
        $adminObject->addItemButton(_AM_XNEWSLETTER_NEWLETTER, '?op=new_letter', 'add');
283
        $adminObject->addItemButton(_AM_XNEWSLETTER_LETTERLIST, '?op=list', 'list');
284
        $adminObject->displayButton('left');
285
        //
286
        // update existing_attachments
287
        $existing_attachments_mode = \Xmf\Request::getArray('existing_attachments_mode', []);
288
        foreach ($existing_attachments_mode as $existing_attachment_id => $existing_attachment_mode) {
289
            $attachmentObj = $helper->getHandler('Attachment')->get($existing_attachment_id);
290
            $attachmentObj->setVar('attachment_mode', $existing_attachment_mode);
291
            $helper->getHandler('Attachment')->insert($attachmentObj);
292
        }
293
294
        $attachment_id = \Xmf\Request::getInt('deleted_attachment_id', 0, 'POST');
295
        if (0 == $attachment_id) {
296
            redirect_header($currentFile, 3, _AM_XNEWSLETTER_LETTER_ERROR_INVALID_ATT_ID);
297
        }
298
        $attachmentObj   = $helper->getHandler('Attachment')->get($attachment_id);
299
        $attachment_name = $attachmentObj->getVar('attachment_name');
300
301
        if ($helper->getHandler('Attachment')->delete($attachmentObj, true)) {
302
            $letterObj = $helper->getHandler('Letter')->get($letter_id);
303
            $letterObj->setVar('letter_title', \Xmf\Request::getString('letter_title', ''));
304
            $letterObj->setVar('letter_content', $_REQUEST['letter_content']);
305
            $letterObj->setVar('letter_template', $_REQUEST['letter_template']);
306
            $letterObj->setVar('letter_cats', implode('|', \Xmf\Request::getArray('letter_cats', [])));
307
            $letterObj->setVar('letter_account', $_REQUEST['letter_account']);
308
            $letterObj->setVar('letter_email_test', $_REQUEST['letter_email_test']);
309
310
            $form = $letterObj->getForm(false, true);
311
            $form->display();
312
        } else {
313
            echo $attachmentObj->getHtmlErrors();
314
        }
315
        break;
316
    case 'save_letter':
317
        if (!$GLOBALS['xoopsSecurity']->check()) {
318
            redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
319
        }
320
        $letterObj = $helper->getHandler('Letter')->get($letter_id); // create if doesn't exist
321
        $letterObj->setVar('letter_title', \Xmf\Request::getString('letter_title', ''));
322
        $letterObj->setVar('letter_content', $_REQUEST['letter_content']);
323
        $letterObj->setVar('letter_template', $_REQUEST['letter_template']);
324
        $letterObj->setVar('letter_cats', implode('|', \Xmf\Request::getArray('letter_cats', [])));
325
        $letterObj->setVar('letter_account', $_REQUEST['letter_account']);
326
        $letterObj->setVar('letter_email_test', $_REQUEST['letter_email_test']);
327
        $letterObj->setVar('letter_submitter', \Xmf\Request::getInt('letter_submitter', 0));
328
        $letterObj->setVar('letter_created', \Xmf\Request::getInt('letter_created', time()));
329
330 View Code Duplication
        if ($helper->getHandler('Letter')->insert($letterObj)) {
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...
331
            $letter_id = $letterObj->getVar('letter_id');
332
            // update existing_attachments
333
            $existing_attachments_mode = \Xmf\Request::getArray('existing_attachments_mode', []);
334
            foreach ($existing_attachments_mode as $attachment_id => $attachment_mode) {
335
                $attachmentObj = $helper->getHandler('Attachment')->get($attachment_id);
336
                $attachmentObj->setVar('attachment_mode', $attachment_mode);
337
                $helper->getHandler('Attachment')->insert($attachmentObj);
338
            }
339
            // upload attachments
340
            $uploadedFiles = [];
341
            require_once XOOPS_ROOT_PATH . '/class/uploader.php';
342
            $uploaddir = XOOPS_UPLOAD_PATH . $helper->getConfig('xn_attachment_path') . $letter_id . '/';
343
            // check upload_dir
344
            if (!is_dir($uploaddir)) {
345
                $indexFile = XOOPS_UPLOAD_PATH . '/index.html';
346
                if (!mkdir($uploaddir, 0777) && !is_dir($uploaddir)) {
347
                    throw new \RuntimeException(sprintf('Directory "%s" was not created', $uploaddir));
348
                }
349
                chmod($uploaddir, 0777);
350
                copy($indexFile, $uploaddir . 'index.html');
351
            }
352
            $new_attachments_mode = \Xmf\Request::getArray('new_attachments_mode', []);
353
            for ($upl = 0; $upl < $helper->getConfig('xn_maxattachments'); ++$upl) {
354
                $uploader = new \XoopsMediaUploader($uploaddir, $helper->getConfig('xn_mimetypes'), $helper->getConfig('xn_maxsize'), null, null);
355
                if ($uploader->fetchMedia(@$_POST['xoops_upload_file'][$upl])) {
356
                    //$uploader->setPrefix("xn_") ; keep original name
357
                    $uploader->fetchMedia($_POST['xoops_upload_file'][$upl]);
358
                    if (!$uploader->upload()) {
359
                        $errors = $uploader->getErrors();
360
                        redirect_header('<script>javascript:history.go(-1)</script>', 3, $errors);
361
                    } else {
362
                        preg_match('/ne\w_attachment_index=([0-9]+)/', $_POST['xoops_upload_file'][$upl], $matches);
363
                        $index           = $matches[1];
364
                        $uploadedFiles[] = [
365
                            'name' => $uploader->getSavedFileName(),
366
                            'type' => $uploader->getMediaType(),
367
                            'size' => $uploader->getMediaSize(),
368
                            'mode' => $new_attachments_mode[$index],
369
                        ];
370
                    }
371
                }
372
            }
373
            // create items in attachments
374
            foreach ($uploadedFiles as $file) {
375
                $attachmentObj = $helper->getHandler('Attachment')->create();
376
                $attachmentObj->setVar('attachment_letter_id', $letter_id);
377
                $attachmentObj->setVar('attachment_name', $file['name']);
378
                $attachmentObj->setVar('attachment_type', $file['type']);
379
                $attachmentObj->setVar('attachment_submitter', $xoopsUser->uid());
380
                $attachmentObj->setVar('attachment_created', time());
381
                $attachmentObj->setVar('attachment_size', $file['size']);
382
                $attachmentObj->setVar('attachment_mode', $file['mode']);
383
384
                $helper->getHandler('Attachment')->insert($attachmentObj);
385
            }
386
            // create item in protocol
387
            $protocolObj = $helper->getHandler('Protocol')->create();
388
            $protocolObj->setVar('protocol_letter_id', $letter_id);
389
            $protocolObj->setVar('protocol_subscriber_id', 0);
390
            $protocolObj->setVar('protocol_success', true);
391
            $action = \Xmf\Request::getInt('letter_action', _XNEWSLETTER_LETTER_ACTION_VAL_NO);
392
            switch ($action) {
393
                case _XNEWSLETTER_LETTER_ACTION_VAL_PREVIEW:
394
                    $redirectUrl = "?op=show_preview&letter_id={$letter_id}";
395
                    break;
396
                case _XNEWSLETTER_LETTER_ACTION_VAL_SEND:
397
                    $redirectUrl = "sendletter.php?op=send_letter&letter_id={$letter_id}";
398
                    break;
399
                case _XNEWSLETTER_LETTER_ACTION_VAL_SENDTEST:
400
                    $redirectUrl = "sendletter.php?op=send_test&letter_id={$letter_id}";
401
                    break;
402
                default:
403
                    $redirectUrl = '?op=list_letters';
404
                    break;
405
            }
406
            $protocolObj->setVar('protocol_status', _AM_XNEWSLETTER_LETTER_ACTION_SAVED); // old style
407
            $protocolObj->setVar('protocol_status_str_id', _XNEWSLETTER_PROTOCOL_STATUS_SAVED); // new from v1.3
408
            $protocolObj->setVar('protocol_status_vars', []); // new from v1.3
409
            $protocolObj->setVar('protocol_submitter', $xoopsUser->uid());
410
            $protocolObj->setVar('protocol_created', time());
411
412
            if ($helper->getHandler('Protocol')->insert($protocolObj)) {
413
                // create protocol is ok
414
                redirect_header($redirectUrl, 3, _AM_XNEWSLETTER_FORMOK);
415
            } else {
416
                echo 'Error create protocol: ' . $protocolObj->getHtmlErrors();
417
            }
418
        } else {
419
            echo 'Error create letter: ' . $letterObj->getHtmlErrors();
420
        }
421
        break;
422
    case 'clone_letter':
423
    case 'copy_letter':
424
        $adminObject->displayNavigation($currentFile);
425
        $adminObject->addItemButton(_AM_XNEWSLETTER_NEWLETTER, '?op=new_letter', 'add');
426
        $adminObject->addItemButton(_AM_XNEWSLETTER_LETTERLIST, '?op=list', 'list');
427
        $adminObject->displayButton('left');
428
429
        $letterObj = $helper->getHandler('Letter')->get($letter_id);
430
        $letterObj->setNew();
431
        $letterObj->setVar('letter_id', 0);
432
        $letterObj->setVar('letter_title', sprintf(_AM_XNEWSLETTER_LETTER_CLONED, $letterObj->getVar('letter_title')));
433
        $form = $letterObj->getForm($currentFile, true);
434
        $form->display();
435
        break;
436
    case 'delete_letter':
437
        $letterObj = $helper->getHandler('Letter')->get($letter_id);
438 View Code Duplication
        if (true === \Xmf\Request::getBool('ok', false, 'POST')) {
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...
439
            if (!$GLOBALS['xoopsSecurity']->check()) {
440
                redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
441
            }
442
            if ($helper->getHandler('Letter')->delete($letterObj)) {
443
                //delete protocols
444
                $sql = 'DELETE';
445
                $sql .= " FROM `{$xoopsDB->prefix('xnewsletter_protocol')}`";
446
                $sql .= " WHERE `protocol_letter_id`={$letter_id}";
447
                if (!$result = $xoopsDB->query($sql)) {
448
                    die('MySQL-Error: ' . $GLOBALS['xoopsDB']->error());
449
                }
450
                // delete attachments
451
                $attachmentCriteria = new \Criteria('attachment_letter_id', $letter_id);
452
                $helper->getHandler('Attachment')->deleteAll($attachmentCriteria, true, true);
453
                redirect_header($currentFile, 3, _AM_XNEWSLETTER_FORMDELOK);
454
            } else {
455
                echo $letterObj->getHtmlErrors();
456
            }
457
        } else {
458
            xoops_confirm(['ok' => true, 'letter_id' => $letter_id, 'op' => 'delete_letter'], $_SERVER['REQUEST_URI'], sprintf(_AM_XNEWSLETTER_FORMSUREDEL, $letterObj->getVar('letter_title')));
459
        }
460
        break;
461
}
462
require_once __DIR__ . '/admin_footer.php';
463