Files
2025-06-24 14:14:35 +02:00

163 lines
5.1 KiB
PHP

<?php
/**
* Since 2013 Ovidiu Cimpean.
*
* Ovidiu Cimpean - Newsletter Pro © All rights reserved.
*
* DISCLAIMER
*
* Do not edit, modify or copy this file.
* If you wish to customize it, contact us at addons4prestashop@gmail.com.
*
* @author Ovidiu Cimpean <addons4prestashop@gmail.com>
* @copyright Since 2013 Ovidiu Cimpean
* @license Do not edit, modify or copy this file
*
* @version Release: 4
*/
namespace PQNP;
use Db;
use Exception;
use Language;
use NewsletterProTemplate;
use NewsletterProTemplateHistory;
class HistoryExporter
{
protected $dest;
protected $export_dest;
public function __construct()
{
$this->dest = Path::join(_NEWSLETTER_PRO_DIR_, 'mail_templates/export_newsletter_history');
$this->export_dest = Path::join(_NEWSLETTER_PRO_DIR_, 'mail_templates/export');
}
public function export()
{
$templates = $this->getTemplates(false);
foreach ($templates as $template) {
$template_info = pathinfo($template['id'].'_'.$template['name']);
$name = $template_info['basename'];
$extension = $template_info['extension'];
$dirname = $template_info['filename'];
$dest = Path::join($this->dest, $dirname);
$this->createDir($dest);
$content_lang = $template['content'];
foreach ($content_lang as $iso_code => $content) {
$iso_code_dir = Path::join($dest, $iso_code);
$this->createDir($iso_code_dir);
$template_name_path = Path::join($iso_code_dir, $name);
if (file_put_contents($template_name_path, $content) === false) {
throw new Exception(sprintf('Unable to export the template "%s". Please check the CHMOD permissions.', $template_name_path));
}
}
}
}
public function downloadByIdHistory($id_history)
{
$template = NewsletterProTemplate::newHistory($id_history)->load();
return $template->export(false);
}
protected function getTemplates($with_unknown = false)
{
$results = Db::getInstance()->executeS('
SELECT th.`id_newsletter_pro_tpl_history`, th.`template_name`, thl.`id_lang`, thl.`template`
FROM `'._DB_PREFIX_.'newsletter_pro_tpl_history` th
LEFT JOIN `'._DB_PREFIX_.'newsletter_pro_tpl_history_lang` thl ON (
th.`id_newsletter_pro_tpl_history` = thl.`id_newsletter_pro_tpl_history`
)
');
$templates = [];
$languages = $this->getLanguages();
foreach ($results as $item) {
$id = $item['id_newsletter_pro_tpl_history'];
$name = $item['template_name'];
$id_lang = $item['id_lang'];
$template = $item['template'];
if (!isset($templates[$id])) {
$templates[$id] = [];
}
if (!isset($templates[$id]['content'])) {
$templates[$id]['content'] = [];
}
$templates[$id]['id'] = $id;
$templates[$id]['name'] = $name;
$key = null;
if (isset($languages[$id_lang])) {
$key = $languages[$id_lang]['iso_code'];
$templates[$id]['content'][$key] = $template;
} else if ($with_unknown) {
// not implement thie export of this
$key = $id_lang.'_unknown';
$templates[$id]['content'][$key] = $template;
}
}
return $templates;
}
protected function getLanguages($default = false)
{
$default_language_id = Config::get('PS_LANG_DEFAULT');
$languages = [];
foreach (Language::getLanguages(false) as $lang) {
$languages[$lang['id_lang']] = [
'id_lang' => $lang['id_lang'],
'iso_code' => $lang['iso_code'],
];
}
$default_language = $languages[$default_language_id];
if ($default) {
return $default_language;
}
return $languages;
}
protected function createDir($dest)
{
if (!file_exists($dest)) {
if (!mkdir($dest, 0755)) {
throw new Exception(sprintf('Unable to create the directory "%s".', $dest));
}
}
return $this->copyIndex($dest);
}
protected function copyIndex($target)
{
if (!file_exists($target)) {
throw new Exception(sprintf('The directoy does not exits "%s".', $target));
}
$index = Path::join($this->dest, 'index.php');
if (!file_exists($index)) {
throw new Exception(sprintf('The index file "%s" does not exists.', $index));
}
$target_index = Path::join($target, 'index.php');
if (!copy($index, $target_index)) {
throw new Exception(sprintf('Unable to copy the index file "%s" to the deistionation "%s".', $index, $target_index));
}
return true;
}
}