letter.php
<?php
/**
* ****************************************************************************
* - A Project by Developers TEAM For Xoops - ( https://xoops.org )
* ****************************************************************************
* XNEWSLETTER - MODULE FOR XOOPS
* Copyright (c) 2007 - 2012
* Goffy ( wedega.com )
*
* You may not change or alter any portion of this comment or credits
* of supporting developers from this source code or any supporting
* source code which is considered copyrighted (c) material of the
* original comment or credit authors.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ---------------------------------------------------------------------------
* @copyright Goffy ( wedega.com )
* @license GPL 2.0
* @package xnewsletter
* @author Goffy ( webmaster@wedega.com )
*
* ****************************************************************************
*/
use Xmf\Request;
use XoopsModules\Xnewsletter;
$currentFile = basename(__FILE__);
require_once __DIR__ . '/header.php';
$helper = Xnewsletter\Helper::getInstance();
$uid = (is_object($xoopsUser) && isset($xoopsUser)) ? $xoopsUser->uid() : 0;
$groups = is_object($xoopsUser) ? $xoopsUser->getGroups() : [0 => XOOPS_GROUP_ANONYMOUS];
$op = Request::getString('op', 'list_letters');
$letter_id = Request::getInt('letter_id', 0);
$cat_id = Request::getInt('cat_id', 0);
switch ($op) {
case 'list_subscrs':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter_list_subscrs.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$breadcrumb->addLink(_MD_XNEWSLETTER_LIST_SUBSCR, '');
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
// check right to edit/delete subscription of other persons
$permissionChangeOthersSubscriptions = false;
foreach ($groups as $group) {
if (in_array($group, $helper->getConfig('xn_groups_change_other')) || XOOPS_GROUP_ADMIN == $group) {
$permissionChangeOthersSubscriptions = true;
break;
}
}
$xoopsTpl->assign('permissionChangeOthersSubscriptions', $permissionChangeOthersSubscriptions);
// get search subscriber form
if ($permissionChangeOthersSubscriptions) {
$subscrObj = $helper->getHandler('Subscr')->create();
$xoopsTpl->assign('searchSubscriberForm', $subscrObj->getSearchForm('subscription.php')->render());
} else {
$xoopsTpl->assign('searchSubscriberForm', '');
}
// get cat objects
$catCriteria = new \CriteriaCompo();
$catCriteria->setSort('cat_id');
$catCriteria->setOrder('ASC');
$catObjs = $helper->getHandler('Cat')->getAll($catCriteria, null, true, true);
// cats table
foreach ($catObjs as $cat_id => $catObj) {
$permissionShowCats[$cat_id] = $grouppermHandler->checkRight('newsletter_list_cat', $cat_id, $groups, $helper->getModule()->mid());
if (true === $permissionShowCats[$cat_id]) {
$cat_array = $catObj->toArray();
$catsubscrCriteria = new \CriteriaCompo();
$catsubscrCriteria->add(new \Criteria('catsubscr_catid', $cat_id));
$cat_array['catsubscrCount'] = $helper->getHandler('Catsubscr')->getCount($catsubscrCriteria);
$xoopsTpl->append('cats', $cat_array);
}
}
// get cat_id
$cat_id = Request::getInt('cat_id', 0);
$xoopsTpl->assign('cat_id', $cat_id);
if ($cat_id > 0) {
$catObj = $helper->getHandler('Cat')->get($cat_id);
$xoopsTpl->assign('cat_name', $catObj->getVar('cat_name'));
// subscrs table
if (true === $permissionShowCats[$cat_id]) {
$counter = 0;
$sql = 'SELECT `subscr_sex`, `subscr_lastname`, `subscr_firstname`, `subscr_email`, `subscr_id`';
$sql .= " FROM {$xoopsDB->prefix('xnewsletter_subscr')} INNER JOIN {$xoopsDB->prefix('xnewsletter_catsubscr')} ON `subscr_id` = `catsubscr_subscrid`";
$sql .= " WHERE (((`catsubscr_catid`)={$cat_id}) AND ((`catsubscr_quited`)=0)) ORDER BY `subscr_lastname`, `subscr_email`;";
if (!$subscrs = $xoopsDB->query($sql)) {
die('MySQL-Error: ' . $GLOBALS['xoopsDB']->error());
}
while (null !== ($subscr_array = mysqli_fetch_assoc($subscrs))) {
$subscr_array['counter'] = ++$counter;
$xoopsTpl->append('subscrs', $subscr_array);
}
}
}
break;
case 'show_preview':
case 'show_letter_preview':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter_preview.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
$breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_PREVIEW, '');
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
// get letter_id
$letter_id = Request::getInt('letter_id', 0);
// get letter object
$letterObj = $helper->getHandler('Letter')->get($letter_id);
// subscr data
$xoopsTpl->assign('sex', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW);
$xoopsTpl->assign('salutation', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW); // new from v1.3
$xoopsTpl->assign('firstname', _AM_XNEWSLETTER_SUBSCR_FIRSTNAME_PREVIEW);
$xoopsTpl->assign('lastname', _AM_XNEWSLETTER_SUBSCR_LASTNAME_PREVIEW);
$xoopsTpl->assign('subscr_email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW);
$xoopsTpl->assign('email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW); // new from v1.3
// letter data
$xoopsTpl->assign('title', $letterObj->getVar('letter_title', 'n')); // new from v1.3
$xoopsTpl->assign('content', $letterObj->getVar('letter_content', 'n'));
// letter attachments as link
$attachmentAslinkCriteria = new \CriteriaCompo();
$attachmentAslinkCriteria->add(new \Criteria('attachment_letter_id', $letter_id));
$attachmentAslinkCriteria->add(new \Criteria('attachment_mode', _XNEWSLETTER_ATTACHMENTS_MODE_ASLINK));
$attachmentAslinkCriteria->setSort('attachment_id');
$attachmentAslinkCriteria->setOrder('ASC');
$attachmentObjs = $helper->getHandler('Attachment')->getObjects($attachmentAslinkCriteria, true);
foreach ($attachmentObjs as $attachment_id => $attachmentObj) {
$attachment_array = $attachmentObj->toArray();
$attachment_array['attachment_url'] = XNEWSLETTER_URL . "/attachment.php?attachment_id={$attachment_id}";
$attachment_array['attachment_link'] = XNEWSLETTER_URL . "/attachment.php?attachment_id={$attachment_id}";
$xoopsTpl->append('attachments', $attachment_array);
}
// extra data
$xoopsTpl->assign('date', time()); // new from v1.3
$xoopsTpl->assign('unsubscribe_url', XOOPS_URL . '/modules/xnewsletter/');
$xoopsTpl->assign('catsubscr_id', '0');
$letter_array = $letterObj->toArray();
$templateObj = $helper->getHandler('Template')->get($letterObj->getVar('letter_templateid'));
if (is_object($templateObj)) {
if ( (int)$templateObj->getVar('template_type') === _XNEWSLETTER_MAILINGLIST_TPL_CUSTOM_VAL) {
// get template from database
$htmlBody = $xoopsTpl->fetchFromData($templateObj->getVar('template_content', 'n'));
} else {
// get template from filesystem
$template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/' . $GLOBALS['xoopsConfig']['language'] . '/templates/';
if (!is_dir($template_path)) {
$template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/english/templates/';
}
$template = $template_path . $templateObj->getVar('template_title') . '.tpl';
$htmlBody = $xoopsTpl->fetch($template);
}
try {
$textBody = xnewsletter_html2text($htmlBody);
}
catch (Html2TextException $e) {
$helper->addLog($e);
}
} else {
$htmlBody = _AM_XNEWSLETTER_TEMPLATE_ERR;
}
$letter_array['letter_content_templated'] = $htmlBody;
$letter_array['letter_content_templated_html'] = $htmlBody;
$letter_array['letter_content_templated_text'] = $textBody; // new from v1.3
$letter_array['letter_created_formatted'] = formatTimestamp($letterObj->getVar('letter_created'), $helper->getConfig('dateformat'));
$letter_array['letter_submitter_name'] = \XoopsUserUtility::getUnameFromId($letterObj->getVar('letter_submitter'));
$xoopsTpl->assign('letter', $letter_array);
break;
case 'print_letter':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter_print.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
//$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// get letter_id
$letter_id = Request::getInt('letter_id', 0);
// get letter object
$letterObj = $helper->getHandler('Letter')->get($letter_id);
// subscr data
$xoopsTpl->assign('sex', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW);
$xoopsTpl->assign('salutation', _AM_XNEWSLETTER_SUBSCR_SEX_PREVIEW); // new from v1.3
$xoopsTpl->assign('firstname', _AM_XNEWSLETTER_SUBSCR_FIRSTNAME_PREVIEW);
$xoopsTpl->assign('lastname', _AM_XNEWSLETTER_SUBSCR_LASTNAME_PREVIEW);
$xoopsTpl->assign('subscr_email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW);
$xoopsTpl->assign('email', _AM_XNEWSLETTER_SUBSCR_EMAIL_PREVIEW); // new from v1.3
// letter data
$xoopsTpl->assign('title', $letterObj->getVar('letter_title', 'n')); // new from v1.3
$xoopsTpl->assign('content', $letterObj->getVar('letter_content', 'n'));
// extra data
$xoopsTpl->assign('date', time()); // new from v1.3
$xoopsTpl->assign('unsubscribe_url', XOOPS_URL . '/modules/xnewsletter/');
$xoopsTpl->assign('catsubscr_id', '0');
$letter_array = $letterObj->toArray();
$templateObj = $helper->getHandler('Template')->get($letterObj->getVar('letter_templateid'));
if (is_object($templateObj)) {
if ( (int)$templateObj->getVar('template_type') === _XNEWSLETTER_MAILINGLIST_TPL_CUSTOM_VAL) {
// get template from database
$htmlBody = $xoopsTpl->fetchFromData($templateObj->getVar('template_content', 'n'));
} else {
// get template from filesystem
$template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/' . $GLOBALS['xoopsConfig']['language'] . '/templates/';
if (!is_dir($template_path)) {
$template_path = XOOPS_ROOT_PATH . '/modules/xnewsletter/language/english/templates/';
}
$template = $template_path . $templateObj->getVar('template_title') . '.tpl';
$htmlBody = $xoopsTpl->fetch($template);
}
try {
$textBody = xnewsletter_html2text($htmlBody);
}
catch (Html2TextException $e) {
$helper->addLog($e);
}
} else {
$htmlBody = _AM_XNEWSLETTER_TEMPLATE_ERR;
}
$letter_array['letter_content_templated'] = $htmlBody;
$letter_array['letter_content_templated_html'] = $htmlBody;
$letter_array['letter_content_templated_text'] = $textBody; // new from v1.3
$letter_array['letter_created_formatted'] = formatTimestamp($letterObj->getVar('letter_created'), $helper->getConfig('dateformat'));
$letter_array['letter_submitter_name'] = \XoopsUserUtility::getUnameFromId($letterObj->getVar('letter_submitter'));
$xoopsTpl->assign('letter', $letter_array);
break;
case 'list_letters':
default:
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter_list_letters.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$breadcrumb->addLink(_MD_XNEWSLETTER_LIST, '');
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
// get letters array with right to read
$letterCount = $helper->getHandler('Letter')->getCount();
$letterObjs = $helper->getHandler('Letter')->getAll();
$letter_filter = [];
if ($letterCount > 0) {
foreach ($letterObjs as $letter_id => $letterObj) {
$userPermissions = xnewsletter_getUserPermissionsByLetter($letter_id);
if (($userPermissions['read'] && $letterObj->getVar('letter_sent') > 0)
|| (true === $userPermissions['send'])) {
$letter_cat_ids = explode('|', $letterObj->getVar('letter_cats'));
// skip letter
if ((0 != $cat_id) && !in_array($cat_id, $letter_cat_ids)) {
continue;
}
// get categories
foreach ($letter_cat_ids as $letter_cat_id) {
$catObj = $helper->getHandler('Cat')->get($letter_cat_id);
if ($grouppermHandler->checkRight('newsletter_read_cat', $catObj->getVar('cat_id'), $groups, $helper->getModule()->mid())) {
$letter_filter[] = $letterObj->getVar('letter_id');
}
unset($catObj);
}
}
}
}
// get letters array
$letterCriteria = new \CriteriaCompo();
$letterCriteria->add(new \Criteria('letter_id', '(' . implode(',', $letter_filter) . ')', 'IN'));
$letterCriteria->setSort('letter_id');
$letterCriteria->setOrder('DESC');
$letterCount = $helper->getHandler('Letter')->getCount($letterCriteria);
$start = Request::getInt('start', 0);
$limit = $helper->getConfig('adminperpage');
$letterCriteria->setStart($start);
$letterCriteria->setLimit($limit);
$letterObjs = $helper->getHandler('Letter')->getAll($letterCriteria, null, true, true);
// pagenav
if ($letterCount > $limit) {
$pagenav = new \XoopsPageNav($letterCount, $limit, $start, 'start', "op={$op}");
$xoopsTpl->assign('pagenav', $pagenav->renderNav());
}
// letters table
$showAdminColumns = false;
if ($letterCount > 0) {
foreach ($letterObjs as $letter_id => $letterObj) {
$userPermissions = xnewsletter_getUserPermissionsByLetter($letter_id);
$letter_array = $letterObj->toArray();
$letter_array['letter_created_formatted'] = formatTimestamp($letterObj->getVar('letter_created'), $helper->getConfig('dateformat'));
$letter_array['letter_submitter_name'] = \XoopsUserUtility::getUnameFromId($letterObj->getVar('letter_submitter'));
$letter_array['letter_sent_formatted'] = 0 != $letterObj->getVar('letter_sent') ? formatTimestamp($letterObj->getVar('letter_sent'), $helper->getConfig('dateformat')) : '';
$letter_array['letter_sender_name'] = \XoopsUserUtility::getUnameFromId($letterObj->getVar('letter_sender'));
$letter['template_title'] = $helper->getHandler('Template')->get($letterObj->getVar('letter_templateid'))->getVar('template_title');
$letter_cat_ids = explode('|', $letterObj->getVar('letter_cats'));
// skip letter
if ((0 != $cat_id) && !in_array($cat_id, $letter_cat_ids)) {
continue;
}
// get categories
unset($letter_array['letter_cats']); // IN PROGRESS
foreach ($letter_cat_ids as $letter_cat_id) {
$catObj = $helper->getHandler('Cat')->get($letter_cat_id);
if ($grouppermHandler->checkRight('newsletter_read_cat', $catObj->getVar('cat_id'), $groups, $helper->getModule()->mid())) {
$letter_array['letter_cats'][] = $catObj->toArray();
}
unset($catObj);
}
// count letter attachements
$attachmentCriteria = new \CriteriaCompo();
$attachmentCriteria->add(new \Criteria('attachment_letter_id', $letterObj->getVar('letter_id')));
$letter_array['attachmentCount'] = $helper->getHandler('Attachment')->getCount($attachmentCriteria);
// get protocols
if ($userPermissions['edit']) {
// take last item protocol_subscriber_id=0 from table protocol as actual status
$protocolCriteria = new \CriteriaCompo();
$protocolCriteria->add(new \Criteria('protocol_letter_id', $letterObj->getVar('letter_id')));
//$criteria->add(new \Criteria('protocol_subscriber_id', '0'));
$protocolCriteria->setSort('protocol_id');
$protocolCriteria->setOrder('DESC');
$protocolCriteria->setLimit(1);
$protocolObjs = $helper->getHandler('Protocol')->getAll($protocolCriteria);
$protocol_status = '';
$protocol_letter_id = 0;
foreach ($protocolObjs as $protocolObj) {
$letter_array['protocols'][] = [
'protocol_status' => $protocolObj->getVar('protocol_status'),
'protocol_letter_id' => $protocolObj->getVar('protocol_letter_id'),
];
}
}
// check if table show admin columns
if ((true === $userPermissions['edit']) || (true === $userPermissions['delete'])
|| (true === $userPermissions['create'])
|| (true === $userPermissions['send'])) {
$showAdminColumns = true;
}
$letter_array['userPermissions'] = $userPermissions;
$xoopsTpl->append('letters', $letter_array);
}
}
$xoopsTpl->assign('showAdminColumns', $showAdminColumns);
break;
case 'new_letter':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter.tpl"; // IN PROGRESS
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_CREATE, '');
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
/** @var Xnewsletter\Letter $letterObj */
$letterObj = $helper->getHandler('Letter')->create();
/** @var \XoopsThemeForm $form */
$form = $letterObj->getForm();
$content = $form->render();
$xoopsTpl->assign('content', $content);
break;
case 'edit_letter':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
$breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_EDIT, '');
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
$letterObj = $helper->getHandler('Letter')->get($letter_id);
$form = $letterObj->getForm();
$content = $form->render();
$xoopsTpl->assign('content', $content);
break;
case 'delete_attachment':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
$breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_EDIT, '');
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
// update existing_attachments
$existing_attachments_mode = Request::getArray('existing_attachments_mode', []);
foreach ($existing_attachments_mode as $attachment_id => $attachment_mode) {
$attachmentObj = $helper->getHandler('Attachment')->get($attachment_id);
$attachmentObj->setVar('attachment_mode', $attachment_mode);
$helper->getHandler('Attachment')->insert($attachmentObj);
}
$attachment_id = Request::getInt('deleted_attachment_id', 0, 'POST');
if (0 == $attachment_id) {
redirect_header($currentFile, 3, _AM_XNEWSLETTER_LETTER_ERROR_INVALID_ATT_ID);
}
$attachmentObj = $helper->getHandler('Attachment')->get($attachment_id);
$attachment_name = $attachmentObj->getVar('attachment_name');
if ($helper->getHandler('Attachment')->delete($attachmentObj, true)) {
$letterObj = $helper->getHandler('Letter')->get($letter_id);
$letterObj->setVar('letter_title', Request::getString('letter_title', ''));
$letterObj->setVar('letter_content', Request::getText('letter_content', ''));
$letterObj->setVar('letter_templateid', Request::getInt('letter_templateid', 0));
$letterObj->setVar('letter_cats', implode('|', Request::getArray('letter_cats', [])));
$letterObj->setVar('letter_account', Request::getInt('letter_account', 0));
$letterObj->setVar('letter_email_test', Request::getString('letter_email_test', ''));
$form = $letterObj->getForm(false, true);
$content = $form->render();
$xoopsTpl->assign('content', $content);
} else {
$content = $attachmentObj->getHtmlErrors();
$xoopsTpl->assign('content', $content);
}
break;
case 'save_letter':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_empty.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
if (!$GLOBALS['xoopsSecurity']->check()) {
redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
}
$letterObj = $helper->getHandler('Letter')->get($letter_id); // create if doesn't exist
$letterObj->setVar('letter_title', Request::getString('letter_title', ''));
$letterObj->setVar('letter_content', Request::getText('letter_content', ''));
$letterObj->setVar('letter_templateid', Request::getInt('letter_templateid', 0));
$letterObj->setVar('letter_cats', implode('|', Request::getArray('letter_cats', [])));
$letterObj->setVar('letter_account', Request::getInt('letter_account', 0));
$letterObj->setVar('letter_email_test', Request::getString('letter_email_test', ''));
$letterObj->setVar('letter_submitter', Request::getInt('letter_submitter', 0));
$letterObj->setVar('letter_created', Request::getInt('letter_created', time()));
if ($helper->getHandler('Letter')->insert($letterObj)) {
$letter_id = $letterObj->getVar('letter_id');
// update existing_attachments
$existing_attachments_mode = Request::getArray('existing_attachments_mode', []);
foreach ($existing_attachments_mode as $attachment_id => $attachment_mode) {
$attachmentObj = $helper->getHandler('Attachment')->get($attachment_id);
$attachmentObj->setVar('attachment_mode', $attachment_mode);
$helper->getHandler('Attachment')->insert($attachmentObj);
}
// upload attachments
$uploadedFiles = [];
require_once XOOPS_ROOT_PATH . '/class/uploader.php';
$uploaddir = XOOPS_UPLOAD_PATH . $helper->getConfig('xn_attachment_path') . $letter_id . '/';
// check upload_dir
if (!is_dir($uploaddir)) {
$indexFile = XOOPS_UPLOAD_PATH . '/index.html';
if (!mkdir($uploaddir, 0777) && !is_dir($uploaddir)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $uploaddir));
}
chmod($uploaddir, 0777);
copy($indexFile, $uploaddir . 'index.html');
}
$new_attachments_mode = Request::getArray('new_attachments_mode', []);
for ($upl = 0; $upl < $helper->getConfig('xn_maxattachments'); ++$upl) {
$uploader = new \XoopsMediaUploader($uploaddir, $helper->getConfig('xn_mimetypes'), $helper->getConfig('xn_maxsize'), null, null);
if ($uploader->fetchMedia(@$_POST['xoops_upload_file'][$upl])) {
//$uploader->setPrefix("xn_") ; keep original name
$uploader->fetchMedia($_POST['xoops_upload_file'][$upl]);
if (!$uploader->upload()) {
$errors = $uploader->getErrors();
redirect_header('<script>javascript:history.go(-1)</script>', 3, $errors);
} else {
preg_match('/ne\w_attachment_index=([0-9]+)/', $_POST['xoops_upload_file'][$upl], $matches);
$index = $matches[1];
$uploadedFiles[] = [
'name' => $uploader->getSavedFileName(),
'type' => $uploader->getMediaType(),
'size' => $uploader->getMediaSize(),
'mode' => $new_attachments_mode[$index],
];
}
}
}
// create items in attachments
foreach ($uploadedFiles as $file) {
$attachmentObj = $helper->getHandler('Attachment')->create();
$attachmentObj->setVar('attachment_letter_id', $letter_id);
$attachmentObj->setVar('attachment_name', $file['name']);
$attachmentObj->setVar('attachment_type', $file['type']);
$attachmentObj->setVar('attachment_submitter', $xoopsUser->uid());
$attachmentObj->setVar('attachment_created', time());
$attachmentObj->setVar('attachment_size', $file['size']);
$attachmentObj->setVar('attachment_mode', $file['mode']);
$helper->getHandler('Attachment')->insert($attachmentObj);
}
// create item in protocol
$protocolObj = $helper->getHandler('Protocol')->create();
$protocolObj->setVar('protocol_letter_id', $letter_id);
$protocolObj->setVar('protocol_subscriber_id', 0);
$protocolObj->setVar('protocol_success', true);
$action = Request::getInt('letter_action', _XNEWSLETTER_LETTER_ACTION_VAL_NO);
switch ($action) {
case _XNEWSLETTER_LETTER_ACTION_VAL_PREVIEW:
$redirectUrl = "?op=show_preview&letter_id={$letter_id}";
break;
case _XNEWSLETTER_LETTER_ACTION_VAL_SEND:
$redirectUrl = "sendletter.php?op=send_letter&letter_id={$letter_id}";
break;
case _XNEWSLETTER_LETTER_ACTION_VAL_SENDTEST:
$redirectUrl = "sendletter.php?op=send_test&letter_id={$letter_id}";
break;
default:
$redirectUrl = '?op=list_letters';
break;
}
$protocolObj->setVar('protocol_status', _AM_XNEWSLETTER_LETTER_ACTION_SAVED);
$protocolObj->setVar('protocol_status_str_id', _XNEWSLETTER_PROTOCOL_STATUS_SAVED); // new from v1.3
$protocolObj->setVar('protocol_status_vars', []); // new from v1.3
$protocolObj->setVar('protocol_submitter', $xoopsUser->uid());
$protocolObj->setVar('protocol_created', time());
if ($helper->getHandler('Protocol')->insert($protocolObj)) {
// create protocol is ok
redirect_header($redirectUrl, 3, _AM_XNEWSLETTER_FORMOK);
} else {
$GLOBALS['xoopsTpl']->assign('error', 'Error create protocol: ' . $protocolObj->getHtmlErrors());
}
} else {
$GLOBALS['xoopsTpl']->assign('error', 'Error create letter: ' . $protocolObj->getHtmlErrors());
}
break;
case 'copy_letter':
case 'clone_letter':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_letter.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
$breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_COPY, '');
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
$oldLetterObj = $helper->getHandler('Letter')->get($letter_id);
$newLetterObj = $helper->getHandler('Letter')->create();
$newLetterObj->setVar('letter_title', sprintf(_AM_XNEWSLETTER_LETTER_CLONED, $oldLetterObj->getVar('letter_title')));
$newLetterObj->setVar('letter_content', $oldLetterObj->getVar('letter_content', 'n'));
$newLetterObj->setVar('letter_template', $oldLetterObj->getVar('letter_template'));
$newLetterObj->setVar('letter_cats', $oldLetterObj->getVar('letter_cats'));
$newLetterObj->setVar('letter_account', $oldLetterObj->getVar('letter_account'));
$newLetterObj->setVar('letter_email_test', $oldLetterObj->getVar('letter_email_test'));
unset($oldLetterObj);
$action = XOOPS_URL . "/modules/xnewsletter/{$currentFile}?op=copy_letter";
$form = $newLetterObj->getForm($action);
$content = $form->render();
$xoopsTpl->assign('content', $content);
break;
case 'delete_letter':
$GLOBALS['xoopsOption']['template_main'] = "{$helper->getModule()->dirname()}_empty.tpl";
require_once XOOPS_ROOT_PATH . '/header.php';
$xoTheme->addStylesheet(XNEWSLETTER_URL . '/assets/css/module.css');
$xoTheme->addMeta('meta', 'keywords', $helper->getConfig('keywords')); // keywords only for index page
$xoTheme->addMeta('meta', 'description', strip_tags(_MA_XNEWSLETTER_DESC)); // description
// breadcrumb
$breadcrumb = new Xnewsletter\Breadcrumb();
$breadcrumb->addLink($helper->getModule()->getVar('name'), XNEWSLETTER_URL);
$breadcrumb->addLink(_MD_XNEWSLETTER_LIST, 'javascript:history.go(-1)');
$breadcrumb->addLink(_MD_XNEWSLETTER_LETTER_DELETE, '');
$xoopsTpl->assign('xnewsletter_breadcrumb', $breadcrumb->render());
// IN PROGRESS FROM HERE
$letterObj = $helper->getHandler('Letter')->get($letter_id);
if (true === Request::getBool('ok', false, 'POST')) {
if (!$GLOBALS['xoopsSecurity']->check()) {
redirect_header($currentFile, 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
}
if ($helper->getHandler('Letter')->delete($letterObj)) {
//delete protocols
$sql = 'DELETE';
$sql .= " FROM `{$xoopsDB->prefix('xnewsletter_protocol')}`";
$sql .= " WHERE `protocol_letter_id`={$letter_id}";
if (!$result = $xoopsDB->query($sql)) {
die('MySQL-Error: ' . $GLOBALS['xoopsDB']->error());
}
// delete attachments
$attachmentCriteria = new \Criteria('attachment_letter_id', $letter_id);
$helper->getHandler('Attachment')->deleteAll($attachmentCriteria, true, true);
redirect_header($currentFile, 3, _AM_XNEWSLETTER_FORMDELOK);
} else {
$GLOBALS['xoopsTpl']->assign('error', $letterObj->getHtmlErrors());
}
} else {
xoops_confirm(['ok' => true, 'letter_id' => $letter_id, 'op' => 'delete_letter'], $_SERVER['REQUEST_URI'], sprintf(_AM_XNEWSLETTER_FORMSUREDEL, $letterObj->getVar('letter_title')));
}
break;
}
require_once __DIR__ . '/footer.php';