getVarFiltersListing('string', 'mails_search', '');
$tagFilter = $this->getVarFiltersListing('string', 'mails_tag', '');
$ordering = $this->getVarFiltersListing('string', 'mails_ordering', 'creation_date');
$orderingSortOrder = $this->getVarFiltersListing('cmd', 'mails_ordering_sort_order', 'desc');
$pagination = new PaginationHelper();
$mailsPerPage = $pagination->getListLimit();
$page = $this->getVarFiltersListing('int', 'mails_pagination_page', 1);
$mailClass = new MailClass();
$status = MailClass::TYPE_STANDARD;
$requestData = [
'ordering' => $ordering,
'search' => $searchFilter,
'elementsPerPage' => $mailsPerPage,
'offset' => ($page - 1) * $mailsPerPage,
'tag' => $tagFilter,
'status' => $status,
'ordering_sort_order' => $orderingSortOrder,
'onlyStandard' => true,
];
$matchingMails = $this->getMatchingElementsFromData($requestData, $status, $page);
$matchingMailsNb = count($matchingMails['elements']);
if (empty($matchingMailsNb) && $page > 1) {
$this->setVarFiltersListing('mails_pagination_page', 1);
$this->listing();
return;
}
$pagination->setStatus($matchingMails['total']->total, $page, $mailsPerPage);
ob_start();
require acym_getView('mails', 'listing_import', true);
$templateImportView = ob_get_clean();
$tagClass = new TagClass();
$mailsData = [
'allMails' => $matchingMails['elements'],
'allTags' => $tagClass->getAllTagsByType(TagClass::TYPE_MAIL),
'pagination' => $pagination,
'search' => $searchFilter,
'tag' => $tagFilter,
'ordering' => $ordering,
'status' => $status,
'mailNumberPerStatus' => $matchingMails['status'],
'orderingSortOrder' => $orderingSortOrder,
'templateImportView' => $templateImportView,
'mailClass' => $mailClass,
'favoriteTemplateId' => (int)$this->config->get('favorite_template', 0),
];
if (!empty($mailsData['tag'])) {
$mailsData['status_toolbar'] = [
'mails_tag' => $mailsData['tag'],
];
}
$this->prepareToolbar($mailsData);
parent::display($mailsData);
}
public function prepareToolbar(array &$data): void
{
$toolbarHelper = new ToolbarHelper();
$toolbarHelper->addSearchBar($data['search'], 'mails_search', 'ACYM_SEARCH');
$toolbarHelper->addFilterByTag($data, 'mails_tag', 'acym__templates__filter__tags acym__select');
$toolbarHelper->addButton(acym_translation('ACYM_ADD_DEFAULT_TMPL'), ['data-task' => 'installDefaultTmpl', 'id' => 'acym__mail__install-default'], 'content_copy');
$otherContent = acym_modal(
''.acym_translation('ACYM_IMPORT'),
$data['templateImportView'],
'acym__template__import__reveal',
[],
[
'class' => 'button button-secondary cell medium-6 large-shrink',
'data-reload' => 'true',
'data-ajax' => 'false',
]
);
$otherContent .= acym_modal(
''.acym_translation('ACYM_CREATE'),
'
',
'',
[],
['class' => 'acym_vcenter button cell medium-6 large-shrink'],
true,
false
);
$toolbarHelper->addOtherContent($otherContent);
$data['toolbar'] = $toolbarHelper;
}
public function doUploadTemplate(): void
{
acym_checkToken();
if (!acym_isAdmin() || !acym_isAllowed('mails')) {
die('Access denied');
}
$mailClass = new MailClass();
$mailClass->doupload();
$this->listing();
}
public function export(): void
{
acym_checkToken();
$templateId = acym_getVar('int', 'templateId', 0);
if (empty($templateId)) {
exit;
}
$mailClass = new MailClass();
$template = $mailClass->getOneById($templateId);
$exportHelper = new ExportHelper();
$exportHelper->exportTemplate($template);
exit;
}
public function installDefaultTmpl(): void
{
$updateHelper = new UpdateHelper();
$updateHelper->installTemplates();
$this->listing();
}
public function favorite(): void
{
$templateId = acym_getVar('int', 'templateId', 0);
if (empty($templateId)) {
acym_enqueueMessage(acym_translationSprintf('ACYM_NOT_FOUND', acym_translation('ACYM_TEMPLATE')), 'error');
$this->listing();
return;
}
$favoriteTemplateId = $this->config->get('favorite_template', 0);
$this->config->saveConfig(['favorite_template' => (int)$favoriteTemplateId === $templateId ? 0 : $templateId]);
$this->listing();
}
public function massDuplicate(): void
{
$ids = acym_getVar('array', 'elements_checked', []);
if (!empty($ids)) {
$this->duplicate($ids);
}
$this->listing();
}
public function oneDuplicate(): void
{
$templateId = acym_getVar('int', 'templateId', 0);
if (empty($templateId)) {
acym_enqueueMessage(acym_translation('ACYM_TEMPLATE_DUPLICATE_ERROR'), 'error');
$this->listing();
return;
}
$this->duplicate([$templateId]);
$this->listing();
}
public function duplicate(array $templates = []): void
{
$mailClass = new MailClass();
$tmplError = [];
foreach ($templates as $templateId) {
$oldTemplate = $mailClass->getOneById($templateId);
if (empty($oldTemplate)) {
$tmplError[] = $templateId;
continue;
}
$newTemplate = $oldTemplate;
$newTemplate->id = 0;
$newTemplate->name = $oldTemplate->name.'_copy';
$newTemplate->creator_id = acym_currentUserId();
unset($newTemplate->thumbnail);
$mailClass->save($newTemplate);
}
if (!empty($tmplError)) {
acym_enqueueMessage(acym_translationSprintf('ACYM_TEMPLATE_X_DUPLICATE_ERROR', implode(', ', $tmplError)), 'error');
}
}
public function delete(): void
{
parent::delete();
$returnListing = acym_getVar('string', 'return_listing', '');
if (!empty($returnListing)) {
if (acym_isAdmin()) {
acym_redirect(acym_completeLink($returnListing, false, true));
} else {
$itemId = acym_getVar('int', 'acym_itemid');
$itemId = empty($itemId) ? '' : '&Itemid='.$itemId;
$urlRedirect = acym_completeLink($returnListing.$itemId, false, true);
acym_redirect($urlRedirect);
}
}
}
public function getMailByIdAjax(): void
{
acym_checkToken();
$mailId = acym_getVar('int', 'id', 0);
if (empty($mailId)) {
acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_FIND_MAIL'), [], false);
}
$mailClass = new MailClass();
$mail = $mailClass->getOneById($mailId);
if (empty($mail)) {
acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_FIND_MAIL'), [], false);
}
if (!$mailClass->hasUserAccess($mailId)) {
die('Access denied for this mail');
}
acym_sendAjaxResponse('', ['mail' => $mail]);
}
}