Files
redline.com.pl/modules/tinymcepro/tinymcepro.php
2024-11-11 18:46:54 +01:00

1025 lines
52 KiB
PHP

<?php
/**
* PrestaShop module created by VEKIA, a guy from official PrestaShop community ;-)
*
* @author VEKIA https://www.prestashop.com/forums/user/132608-vekia/
* @copyright 2010-2020 VEKIA
* @license This program is not free software and you can't resell and redistribute it
*
* CONTACT WITH DEVELOPER http://mypresta.eu
* support@mypresta.eu
*/
class tinymcepro extends Module
{
public $htmlTemplatesManager;
function __construct()
{
//@ini_set('display_errors', 'on');
//@error_reporting(E_ALL | E_STRICT);
$this->name = 'tinymcepro';
$this->tab = 'admin_tools';
$this->author = 'MyPresta.eu';
$this->module_key = '44873542187effe440a9606087efd6e7';
$this->mypresta_link = 'https://mypresta.eu/modules/administration-tools/tinymce-pro-extended-rich-text-editor.html';
$this->version = '2.3.4';
$this->bootstrap = true;
$this->tinyplugins = array(
'image',
'imagetools',
'fontawesome',
'powerpaste',
'youtube',
'smileys',
'ecpicker',
'bs_alert',
'paragraph',
'editattributes',
'bootstrapaccordion',
'bs_images',
'addiframe',
'bootstraplite',
'lineheight',
'toc',
'tinyplusBootstrapTools',
'tinyplusinclude',
);
$this->tinypluginsalter = array(
'lineheight' => 'plugin.js',
'link' => 'plugin.min.js',
'table' => 'plugin.min.js',
'contextmenu' => 'plugin.min.js'
);
$this->path_module_plugins = "../modules/tinymcepro/lib/plugins/";
$this->path_module_files = "../modules/tinymcepro/lib/";
$this->path_original_js_files = "../js/admin/";
$this->path_original_tinymce = "../js/tiny_mce/";
$this->path_original_tinymce_plugins = "../js/tiny_mce/plugins/";
$tinymceproFontsDefault = Configuration::get('tinymceproFontsDefault');
$tinymceproSizesDefault = Configuration::get('tinymceproSizesDefault');
$tinymcepro_lineheight = Configuration::get('tinymcepro_lineheight');
if ($tinymceproFontsDefault != false && $tinymceproFontsDefault != "" && $tinymceproFontsDefault != NULL) {
$this->tinymceproFontsDefault = $tinymceproFontsDefault;
} else {
$this->tinymceproFontsDefault = 'Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Open Sans=Open Sans,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';
}
if ($tinymceproFontsDefault != false && $tinymceproFontsDefault != "" && $tinymceproFontsDefault != NULL) {
$this->tinymceproSizesDefault = $tinymceproSizesDefault;
} else {
$this->tinymceproSizesDefault = "8pt 10pt 12pt 14pt 18pt 24pt 36pt 42pt 48pt 52pt 58pt 62pt 68pt 72pt 86px 100px 116px 132px 148px";
}
//Media::addJsDef(array('tinymcepro_lineheight' => (($tinymcepro_lineheight != false && $tinymcepro_lineheight != "" && $tinymcepro_lineheight != NULL) ? $tinymcepro_lineheight : $this->tinymceproLineheightDefault)));
if ($tinymcepro_lineheight != false && $tinymcepro_lineheight != "" && $tinymcepro_lineheight != NULL) {
$this->tinymceproLineheightDefault = $tinymcepro_lineheight;
} else {
$this->tinymceproLineheightDefault = "8pt 10pt 12pt 14pt 18pt 24pt 36pt 42pt 48pt 52pt 58pt 62pt 68pt 72pt 86px 100px 116px 132px 148px";
}
parent::__construct();
$this->displayName = $this->l('TinyMCE Pro (rich text editor pro)');
$this->description = $this->l('Most extended version of tinyMCE editor for your PrestaShop!');
$this->availablehtmlTemplateVars = array();
$this->htmlTemplatesManager = new tinymceprohtmlTemplatesManager($this->name, $this->availablehtmlTemplateVars);
$this->checkforupdates();
}
public function inconsistency($ret)
{
return;
}
public function hookActionAdminControllerSetMedia($params)
{
$template_files = $this->gethtmlFilesArrayForBackOffice();
$tinymceproSizes = Configuration::get('tinymceproSizes');
$tinymceproFonts = Configuration::get('tinymceproFonts');
$tinymcepro_lineheight = Configuration::get('tinymcepro_lineheight');
$tinymcepro_contentstyle = Configuration::get('tinymcepro_contentstyle');
Media::addJsDef(array('tinymcepro_sizes' => (($tinymceproSizes != false && $tinymceproSizes != "" && $tinymceproSizes != NULL) ? $tinymceproSizes : $this->tinymceproSizesDefault)));
Media::addJsDef(array('tinymcepro_fonts' => (($tinymceproFonts != false && $tinymceproFonts != "" && $tinymceproFonts != NULL) ? $tinymceproFonts : $this->tinymceproFontsDefault)));
Media::addJsDef(array('tinymcepro_lineheight' => (($tinymcepro_lineheight != false && $tinymcepro_lineheight != "" && $tinymcepro_lineheight != NULL) ? $tinymcepro_lineheight : $this->tinymceproLineheightDefault)));
Media::addJsDef(array('tinymcepro_fullpage' => (Tools::getValue('controller') == 'AdminTranslations') ? 'fullpage,' : ''));
Media::addJsDef(array('tinymcepro_contextmenu' => (Configuration::get('tinymcepro_contextmenu') == 1 ? 'contextmenu' : '')));
Media::addJsDef(array('tinymcepro_adv_bootstrap' => (Configuration::get('tinymcepro_adv_bootstrap') == 1 ? 'tinyplusinclude, tinyplusBootstrapTools,' : '')));
Media::addJsDef(array('tinymcepro_adv_bootstrap_toolbar' => (Configuration::get('tinymcepro_adv_bootstrap') == 1 ? 'tinyplusShowBlocks tinyplusBootstrapToolsContainerEdit tinyplusBootstrapToolsContainerAdd tinyplusBootstrapToolsContainerAddBefore tinyplusBootstrapToolsContainerAddAfter tinyplusBootstrapToolsContainerDelete tinyplusBootstrapToolsContainerMoveUp tinyplusBootstrapToolsContainerMoveDown | tinyplusBootstrapToolsRowEdit tinyplusBootstrapToolsRowAdd tinyplusBootstrapToolsRowAddBefore tinyplusBootstrapToolsRowAddAfter tinyplusBootstrapToolsRowDelete tinyplusBootstrapToolsRowMoveUp tinyplusBootstrapToolsRowMoveDown | tinyplusBootstrapToolsColEdit tinyplusBootstrapToolsColAdd tinyplusBootstrapToolsColAddBefore tinyplusBootstrapToolsColAddAfter tinyplusBootstrapToolsColDelete tinyplusBootstrapToolsColMoveLeft tinyplusBootstrapToolsColMoveRight' : '')));
Media::addJsDef(array('tinymcepro_adv_bootstrap' => (Configuration::get('tinymcepro_adv_bootstrap') == 1 ? 'tinyplusinclude, tinyplusBootstrapTools,' : '')));
Media::addJsDef(array('tinymcepro_adv_bootstrap_toolbar' => (Configuration::get('tinymcepro_adv_bootstrap') == 1 ? 'tinyplusShowBlocks tinyplusBootstrapToolsContainerEdit tinyplusBootstrapToolsContainerAdd tinyplusBootstrapToolsContainerAddBefore tinyplusBootstrapToolsContainerAddAfter tinyplusBootstrapToolsContainerDelete tinyplusBootstrapToolsContainerMoveUp tinyplusBootstrapToolsContainerMoveDown | tinyplusBootstrapToolsRowEdit tinyplusBootstrapToolsRowAdd tinyplusBootstrapToolsRowAddBefore tinyplusBootstrapToolsRowAddAfter tinyplusBootstrapToolsRowDelete tinyplusBootstrapToolsRowMoveUp tinyplusBootstrapToolsRowMoveDown | tinyplusBootstrapToolsColEdit tinyplusBootstrapToolsColAdd tinyplusBootstrapToolsColAddBefore tinyplusBootstrapToolsColAddAfter tinyplusBootstrapToolsColDelete tinyplusBootstrapToolsColMoveLeft tinyplusBootstrapToolsColMoveRight' : '')));
Media::addJsDef(array('tinymcepro_contentstyle' => (($tinymcepro_contentstyle != '' || $tinymcepro_contentstyle != false) ? $tinymcepro_contentstyle : '')));
Media::addJsDef(array('tinymcepro_templates' => (Configuration::get('tinymcepro_templates') == 1 ? 'template, ' : '')));
Media::addJsDef(array('tinymcepro_templates' => (Configuration::get('tinymcepro_templates') == 1 ? 'template, ' : '')));
Media::addJsDef(array('tinymcepro_template_files' => $template_files));
Media::addJsDef(array('tinymcepro_force_p_newlines' => (Configuration::get('tinymcepro_force_p_newlines') == 1 ? true : false)));
Media::addJsDef(array('tinymcepro_force_br_newlines' => (Configuration::get('tinymcepro_force_br_newlines') == 1 ? true : false)));
Media::addJsDef(array('tinymcepro_newlines_to_brs' => (Configuration::get('tinymcepro_newlines_to_brs') == 1 ? true : false)));
Media::addJsDef(array('tinymcepro_minifycode' => (Configuration::get('tinymcepro_minifycode') == 1 ? 1 : 0)));
Media::addJsDef(array('tinymcepro_autoresize' => (Configuration::get('tinymcepro_autoresize') == 1 ? 'autoresize, ':'')));
Media::addJsDef(array('tinymceproHeight' => (Configuration::get('tinymceproHeight') ? Configuration::get('tinymceproHeight') : 400)));
$tinymceproImgClassesConfig = Configuration::get('tinymceproImgClasses');
$tinymceproImgClasses = explode(',', $tinymceproImgClassesConfig);
$tinymceproImgClassArray = array();
$tinymceproImgClassArray[] = array('text' => $this->l('None'), 'value' => ' ');
$tinymceproImgClassArray[] = array('text' => $this->l('Thumbnail'), 'value' => 'img-thumbnail');
$tinymceproImgClassArray[] = array('text' => $this->l('Circle'), 'value' => 'img-circle');
$tinymceproImgClassArray[] = array('text' => $this->l('Rounded'), 'value' => 'img-rounded');
if (Configuration::get('tinymceproImgClasses') != "" && Configuration::get('tinymceproImgClasses') != false) {
if (is_array($tinymceproImgClasses)) {
if (count($tinymceproImgClasses) > 0) {
foreach ($tinymceproImgClasses AS $class) {
$tinymceproImgClassArray[] = array('text' => trim($class), 'value' => trim($class));
}
}
}
}
Media::addJsDef(array('tinymceproImgClassArray' => $tinymceproImgClassArray));
$this->context->controller->addJqueryPlugin('fancybox');
$this->context->controller->addJS(_PS_JS_DIR_ . 'admin/tinymce.inc.js');
//for update purposes
}
public function checkforupdates($display_msg = 0, $form = 0)
{
// ---------- //
// ---------- //
// VERSION 16 //
// ---------- //
// ---------- //
$this->mkey = "nlc";
if (@file_exists('../modules/' . $this->name . '/key.php')) {
@require_once('../modules/' . $this->name . '/key.php');
} else {
if (@file_exists(dirname(__FILE__) . $this->name . '/key.php')) {
@require_once(dirname(__FILE__) . $this->name . '/key.php');
} else {
if (@file_exists('modules/' . $this->name . '/key.php')) {
@require_once('modules/' . $this->name . '/key.php');
}
}
}
if ($form == 1) {
return '
<div class="panel" id="fieldset_myprestaupdates" style="margin-top:20px;">
' . ($this->psversion() == 6 || $this->psversion() == 7 ? '<div class="panel-heading"><i class="icon-wrench"></i> ' . $this->l('MyPresta updates') . '</div>' : '') . '
<div class="form-wrapper" style="padding:0px!important;">
<div id="module_block_settings">
<fieldset id="fieldset_module_block_settings">
' . ($this->psversion() == 5 ? '<legend style="">' . $this->l('MyPresta updates') . '</legend>' : '') . '
<form action="' . $_SERVER['REQUEST_URI'] . '" method="post">
<label>' . $this->l('Check updates') . '</label>
<div class="margin-form">' . (Tools::isSubmit('submit_settings_updates_now') ? ($this->inconsistency(0) ? '' : '') . $this->checkforupdates(1) : '') . '
<button style="margin: 0px; top: -3px; position: relative;" type="submit" name="submit_settings_updates_now" class="button btn btn-default" />
<i class="process-icon-update"></i>
' . $this->l('Check now') . '
</button>
</div>
<label>' . $this->l('Updates notifications') . '</label>
<div class="margin-form">
<select name="mypresta_updates">
<option value="-">' . $this->l('-- select --') . '</option>
<option value="1" ' . ((int)(Configuration::get('mypresta_updates') == 1) ? 'selected="selected"' : '') . '>' . $this->l('Enable') . '</option>
<option value="0" ' . ((int)(Configuration::get('mypresta_updates') == 0) ? 'selected="selected"' : '') . '>' . $this->l('Disable') . '</option>
</select>
<p class="clear">' . $this->l('Turn this option on if you want to check MyPresta.eu for module updates automatically. This option will display notification about new versions of this addon.') . '</p>
</div>
<label>' . $this->l('Module page') . '</label>
<div class="margin-form">
<a style="font-size:14px;" href="' . $this->mypresta_link . '" target="_blank">' . $this->displayName . '</a>
<p class="clear">' . $this->l('This is direct link to official addon page, where you can read about changes in the module (changelog)') . '</p>
</div>
<div class="panel-footer">
<button type="submit" name="submit_settings_updates"class="button btn btn-default pull-right" />
<i class="process-icon-save"></i>
' . $this->l('Save') . '
</button>
</div>
</form>
</fieldset>
<style>
#fieldset_myprestaupdates {
display:block;clear:both;
float:inherit!important;
}
</style>
</div>
</div>
</div>';
} else {
if (defined('_PS_ADMIN_DIR_')) {
if (Tools::isSubmit('submit_settings_updates')) {
Configuration::updateValue('mypresta_updates', Tools::getValue('mypresta_updates'));
}
if (Configuration::get('mypresta_updates') != 0 || (bool)Configuration::get('mypresta_updates') != false) {
if (Configuration::get('update_' . $this->name) < (date("U") - 259200)) {
$actual_version = tinymceproUpdate::verify($this->name, (isset($this->mkey) ? $this->mkey : 'nokey'), $this->version);
}
if (tinymceproUpdate::version($this->version) < tinymceproUpdate::version(Configuration::get('updatev_' . $this->name)) && Tools::getValue('ajax', 'false') == 'false') {
$this->context->controller->warnings[] = '<strong>' . $this->displayName . '</strong>: ' . $this->l('New version available, check http://MyPresta.eu for more informations') . ' <a href="' . $this->mypresta_link . '">' . $this->l('More details in changelog') . '</a>';
$this->warning = $this->context->controller->warnings[0];
}
} else {
if (Configuration::get('update_' . $this->name) < (date("U") - 259200)) {
$actual_version = tinymceproUpdate::verify($this->name, (isset($this->mkey) ? $this->mkey : 'nokey'), $this->version);
}
}
if ($display_msg == 1) {
if (tinymceproUpdate::version($this->version) < tinymceproUpdate::version(tinymceproUpdate::verify($this->name, (isset($this->mkey) ? $this->mkey : 'nokey'), $this->version))) {
return "<span style='color:red; font-weight:bold; font-size:16px; margin-right:10px;'>" . $this->l('New version available!') . "</span>";
} else {
return "<span style='color:green; font-weight:bold; font-size:16px; margin-right:10px;'>" . $this->l('Module is up to date!') . "</span>";
}
}
}
}
}
public function install()
{
if (parent::install() == false ||
Configuration::updateValue('tinymceproSizesDefault', $this->tinymceproSizesDefault) == false ||
Configuration::updateValue('tinymceproFontsDefault', $this->tinymceproFontsDefault) == false ||
$this->install_tinymcepro(0) == false ||
$this->registerHook('header') == false ||
$this->alterCleanHtml() == false ||
$this->registerHook('ActionAdminControllerSetMedia') == false) {
return false;
}
return true;
}
public function alterCleanHtml()
{
$file = '../src/Core/ConstraintValidator/CleanHtmlValidator.php';
if (file_exists($file)) {
$data = file($file);
if (!function_exists('replace_aline')) {
function replace_aline($data)
{
if (stristr($data, '$containsScriptTags = preg_match(\'/<[\s]*script/ims\', $value) || preg_match(\'/.*script\:/ims\', $value);')) {
return '$containsScriptTags = false;' . "\n";
}
return $data;
}
}
$data = array_map('replace_aline', $data);
file_put_contents($file, implode('', $data));
if (!function_exists('replace_a_line_two')) {
function replace_a_line_two($data)
{
if (stristr($data, '$containsJavascriptEvents = preg_match(\'/(\' . $this->getJavascriptEvents() . \')[\s]*=/ims\', $value);')) {
return '$containsJavascriptEvents = false;' . "\n";
}
return $data;
}
}
$data = array_map('replace_a_line_two', $data);
file_put_contents($file, implode('', $data));
}
return true;
}
public function uninstall()
{
parent::uninstall();
foreach ($this->tinyplugins AS $plugin) {
if (file_exists($this->path_original_tinymce_plugins . $plugin)) {
$this->move_plugin("uninstall", $plugin);
}
}
$this->restore_from_backup(0);
return true;
}
public function restore_from_backup($return = 0)
{
//RESTORE FROM BACKUP
if (file_exists($this->path_original_js_files . 'tinymce.inc.js.bkp')) {
$file = fopen($this->path_original_js_files . 'tinymce.inc.js.bkp', 'r');
$newfile = fopen($this->path_original_js_files . 'tinymce.inc.js', 'w+');
while (($line = fgets($file)) !== false) {
fputs($newfile, $line);
}
fclose($newfile);
fclose($file);
};
if (file_exists($this->path_original_tinymce . 'tinymce.min.js.bkp')) {
$file = fopen($this->path_original_tinymce . 'tinymce.min.js.bkp', 'r');
$newfile = fopen($this->path_original_tinymce . 'tinymce.min.js', 'w+');
while (($line = fgets($file)) !== false) {
fputs($newfile, $line);
}
fclose($newfile);
fclose($file);
};
if (file_exists($this->path_original_js_files . 'tinymce_loader.js.bkp')) {
$file = fopen($this->path_original_js_files . 'tinymce_loader.js.bkp', 'r');
$newfile = fopen($this->path_original_js_files . 'tinymce_loader.js', 'w+');
while (($line = fgets($file)) !== false) {
fputs($newfile, $line);
}
fclose($newfile);
fclose($file);
};
//RESTORE PLUGINS
//INSTALL MODIFICATION OF PLUGINS
foreach ($this->tinypluginsalter AS $plugin => $file) {
if (file_exists($this->path_original_tinymce_plugins . $plugin . '/' . $file)) {
$this->move_modification("uninstall", $plugin, $file);
}
}
if ($return == 1) {
return " <span style='color:green; font-weight:bold; font-size:16px;'>" . $this->l('Restored!') . "</span>";
}
}
public function configurationForm()
{
return $this->display(__FILE__, 'views/admin/form.tpl');
}
public function generateFormEditor()
{
$fields_form_1 = array(
'form' => array(
'legend' => array(
'title' => $this->l('Editor settings'),
'icon' => 'icon-cogs',
),
'input' => array(
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Predefined templates'),
'desc' => $this->l('Turn this option on if you want to allow to use and create predefined templates of contents') . '<br/>' . $this->htmlTemplatesManager->generatehtmlTemplatesManagerButton(),
'name' => 'tinymcepro_templates',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Minify code'),
'desc' => $this->l('Minify code of contents'),
'name' => 'tinymcepro_minifycode',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Enable Context menu'),
'desc' => $this->l('Context menu is a special plugin that creates special menu options when you will right-click inside the editor.') . ' ' . '<a href="https://i.imgur.com/3QGjEfn.png" class="tinymcepro_fancybox">[screenshot]</a>',
'name' => 'tinymcepro_contextmenu',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Enable advanced bootstrap tool'),
'desc' => $this->l('This option activates features in rich text editor to support bootstrap content edit process'),
'name' => 'tinymcepro_adv_bootstrap',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Force new line as <br>'),
'desc' => $this->l('Each "enter" will be replaced with <br> code'),
'name' => 'tinymcepro_force_br_newlines',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Force new line as <p>'),
'desc' => $this->l('Each "enter" will be replaced with <p> code'),
'name' => 'tinymcepro_force_p_newlines',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Convert all new lines to <br>'),
'desc' => $this->l('Option when active will change all new lines to <br> code'),
'name' => 'tinymcepro_newlines_to_brs',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'text',
'label' => $this->l('Editor height'),
'name' => 'tinymceproHeight',
'prefix' => 'px',
'desc' => $this->l('Setup the height of the editor, default value: 400'),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Activate autoresize plugin'),
'desc' => $this->l('Autoresize plugin changes the size of the editor (height) automatically depending on contents size. Option when active will disable "height" param.'),
'name' => 'tinymcepro_autoresize',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'text',
'label' => $this->l('Additional image classes'),
'name' => 'tinymceproImgClasses',
'desc' => $this->l('Module will add some new image classes to classes that exists by default: ') . '<a target="blank" href="https://i.imgur.com/4i9UGrB.png" class="tinymcepro_fancybox">thumbnail, circle, rounded</a>' . '<br/>' . $this->l('Separate new classes by comma'),
),
array(
'type' => 'text',
'label' => $this->l('Font sizes'),
'name' => 'tinymceproSizesDefault',
),
array(
'type' => 'text',
'label' => $this->l('Line heights'),
'name' => 'tinymcepro_lineheight',
),
array(
'type' => 'text',
'label' => $this->l('Fonts'),
'name' => 'tinymceproFontsDefault',
'desc' => $this->context->smarty->fetch(_PS_MODULE_DIR_ . 'tinymcepro/views/admin/fonts.tpl'),
),
array(
'type' => 'textarea',
'label' => $this->l('Additional css style'),
'name' => 'tinymcepro_contentstyle',
'desc' => $this->l('Add here styles that will be applicable to the editor contents (these styles will be used in back office only)') . ' ' . $this->l('Thanks to this option you can @import your theme css styles into the editor'),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitEditorSettings',
),
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->default_form_language = $this->context->language->id;
$helper->module = $this;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$helper->submit_action = 'submitFosConfiguration';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) . '&configure=' . $this->name . '&tab_module=' . $this->tab . '&module_name=' . $this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFieldsValues(),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm(array($fields_form_1));
}
public function generateFormFos()
{
$fields_form_1 = array(
'form' => array(
'legend' => array(
'title' => $this->l('Configuration'),
'icon' => 'icon-cogs',
),
'input' => array(
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Include latest Font Awesome library'),
'name' => 'tpro_fa_new',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Include internal accordion library'),
'name' => 'tpro_accordion',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Include fancybox library to all pages'),
'name' => 'tpro_fancybox',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
array(
'type' => 'switch',
'is_bool' => true,
'label' => $this->l('Include "read more" library'),
'name' => 'tpro_readmore',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled'),
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled'),
),
),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitPrrs',
),
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->default_form_language = $this->context->language->id;
$helper->module = $this;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$helper->submit_action = 'submitFosConfiguration';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) . '&configure=' . $this->name . '&tab_module=' . $this->tab . '&module_name=' . $this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFieldsValues(),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm(array($fields_form_1));
}
public function getConfigFieldsValues()
{
return array(
'tinymcepro_templates' => Tools::getValue('tinymcepro_templates', Configuration::get('tinymcepro_templates')),
'tinymcepro_contextmenu' => Tools::getValue('tinymcepro_contextmenu', Configuration::get('tinymcepro_contextmenu')),
'tpro_accordion' => Tools::getValue('tpro_accordion', Configuration::get('tpro_accordion')),
'tpro_fa_new' => Tools::getValue('tpro_fa_new', Configuration::get('tpro_fa_new')),
'tpro_fancybox' => Tools::getValue('tpro_fancybox', Configuration::get('tpro_fancybox')),
'tpro_readmore' => Tools::getValue('tpro_readmore', Configuration::get('tpro_readmore')),
'tinymceproFontsDefault' => Tools::getValue('tinymceproFontsDefault', Configuration::get('tinymceproFontsDefault')),
'tinymceproSizesDefault' => Tools::getValue('tinymceproSizesDefault', Configuration::get('tinymceproSizesDefault')),
'tinymcepro_lineheight' => Tools::getValue('tinymcepro_lineheight', $this->tinymceproLineheightDefault),
'tinymceproImgClasses' => Tools::getValue('tinymceproImgClasses', Configuration::get('tinymceproImgClasses')),
'tinymcepro_contentstyle' => Tools::getValue('tinymcepro_contentstyle', Configuration::get('tinymcepro_contentstyle')),
'tinymcepro_newlines_to_brs' => (bool)Tools::getValue('tinymcepro_newlines_to_brs', Configuration::get('tinymcepro_newlines_to_brs')),
'tinymcepro_force_p_newlines' => (bool)Tools::getValue('tinymcepro_force_p_newlines', Configuration::get('tinymcepro_force_p_newlines')),
'tinymcepro_force_br_newlines' => (bool)Tools::getValue('tinymcepro_force_br_newlines', Configuration::get('tinymcepro_force_br_newlines')),
'tinymcepro_adv_bootstrap' => (bool)Tools::getValue('tinymcepro_adv_bootstrap', Configuration::get('tinymcepro_adv_bootstrap')),
'tinymcepro_minifycode' => (bool)Tools::getValue('tinymcepro_minifycode', Configuration::get('tinymcepro_minifycode')),
'tinymcepro_adv_bootstrap' => (bool)Tools::getValue('tinymcepro_adv_bootstrap', Configuration::get('tinymcepro_adv_bootstrap')),
'tinymcepro_autoresize' => (bool)Tools::getValue('tinymcepro_autoresize', Configuration::get('tinymcepro_autoresize')),
'tinymceproHeight' => Tools::getValue('tinymceproHeight', (Configuration::get('tinymceproHeight') ? Configuration::get('tinymceproHeight'):400)),
);
}
public function _postProcess()
{
if (Tools::isSubmit('tpro_fa_new')) {
Configuration::updateValue('tpro_fa_new', Tools::getValue('tpro_fa_new'));
Configuration::updateValue('tpro_accordion', Tools::getValue('tpro_accordion'));
Configuration::updateValue('tpro_fancybox', Tools::getValue('tpro_fancybox'));
Configuration::updateValue('tpro_readmore', Tools::getValue('tpro_readmore'));
}
if (Tools::isSubmit('submitEditorSettings')) {
Configuration::updateValue('tinymcepro_minifycode', trim(Tools::getValue('tinymcepro_minifycode')));
Configuration::updateValue('tinymcepro_templates', trim(Tools::getValue('tinymcepro_templates')));
Configuration::updateValue('tinymcepro_contentstyle', trim(Tools::getValue('tinymcepro_contentstyle')));
Configuration::updateValue('tinymcepro_contextmenu', trim(Tools::getValue('tinymcepro_contextmenu')));
Configuration::updateValue('tinymceproSizesDefault', trim(Tools::getValue('tinymceproSizesDefault')));
Configuration::updateValue('tinymceproFontsDefault', trim(Tools::getValue('tinymceproFontsDefault')));
Configuration::updateValue('tinymcepro_lineheight', trim(Tools::getValue('tinymcepro_lineheight')));
Configuration::updateValue('tinymceproImgClasses', trim(Tools::getValue('tinymceproImgClasses')));
Configuration::updateValue('tinymcepro_force_p_newlines', trim(Tools::getValue('tinymcepro_force_p_newlines')));
Configuration::updateValue('tinymcepro_force_br_newlines', trim(Tools::getValue('tinymcepro_force_br_newlines')));
Configuration::updateValue('tinymcepro_newlines_to_brs', trim(Tools::getValue('tinymcepro_newlines_to_brs')));
Configuration::updateValue('tinymcepro_adv_bootstrap', trim(Tools::getValue('tinymcepro_adv_bootstrap')));
Configuration::updateValue('tinymcepro_autoresize', trim(Tools::getValue('tinymcepro_autoresize')));
Configuration::updateValue('tinymceproHeight', trim(Tools::getValue('tinymceproHeight')));
}
if (Tools::isSubmit('submit_settings_reinstall')) {
$this->context->controller->confirmations[] = $this->install_tinymcepro(1);
}
if (Tools::isSubmit('submit_settings_restore_backup')) {
$this->context->controller->confirmations[] = $this->restore_from_backup(1);
}
}
public function getContent()
{
$token = Tools::getAdminTokenLite('AdminModules');
$module_link = $this->context->link->getAdminLink('AdminModules', false);
$url = $module_link . '&configure=tinymcepro&token=' . $token . '&tab_module=administration&module_name=tinymcepro';
$this->context->smarty->assign('tinymcepro_updates', $this->checkforupdates(0, 1));
$this->context->smarty->assign('tinymcepro_restore', $this->config_check_backup());
$this->context->smarty->assign('tinymcepro_form_fos', $this->generateFormFos());
$this->context->smarty->assign('tinymcepro_form_editor', $this->generateFormEditor());
$this->context->smarty->assign('tinymcepro_url', $url);
$this->_postProcess();
return $this->configurationForm();
}
public function psversion()
{
$version = _PS_VERSION_;
$exp = $explode = explode(".", $version);
return $exp[1];
}
public function config_check_backup()
{
if (file_exists($this->path_original_js_files . 'tinymce.inc.js.bkp')) {
return true;
} else {
return false;
}
}
public function recurse_copy($src, $dst)
{
$dir = opendir($src);
@mkdir($dst);
while (false !== ($file = readdir($dir))) {
if (($file != '.') && ($file != '..')) {
if (is_dir($src . '/' . $file)) {
$this->recurse_copy($src . '/' . $file, $dst . '/' . $file);
} else {
copy($src . '/' . $file, $dst . '/' . $file);
}
}
}
closedir($dir);
}
public function copy_modification($source, $target)
{
$new_file_contents = file_get_contents($source);
$file = fopen($target, 'w');
fwrite($file, $new_file_contents);
fclose($file);
}
public function move_modification($what_to_do = null, $plugin, $file)
{
if ($what_to_do == "install") {
if (!file_exists($this->path_original_tinymce_plugins . $plugin . '/' . $file . '.bkp')) {
$this->copy_modification($this->path_original_tinymce_plugins . $plugin . '/' . $file, $this->path_original_tinymce_plugins . $plugin . '/' . $file . '.bkp');
}
$this->copy_modification($this->path_module_plugins . $plugin . '/' . $file, $this->path_original_tinymce_plugins . $plugin . '/' . $file);
} elseif ($what_to_do == "uninstall") {
if (file_exists($this->path_original_tinymce_plugins . $plugin . '/' . $file . '.bkp')) {
$this->copy_modification($this->path_original_tinymce_plugins . $plugin . '/' . $file . '.bkp', $this->path_original_tinymce_plugins . $plugin . '/' . $file);
}
}
}
public function move_plugin($what_to_do = null, $plugin)
{
if ($what_to_do == "install") {
$this->recurse_copy($this->path_module_plugins . $plugin, $this->path_original_tinymce_plugins . $plugin);
} elseif ($what_to_do == "uninstall") {
if (file_exists($this->path_original_tinymce_plugins . $plugin)) {
$this->deletePlugin($this->path_original_tinymce_plugins . $plugin);
}
}
}
public function deletePlugin($dir)
{
if (!file_exists($dir)) {
return true;
}
if (!is_dir($dir)) {
return unlink($dir);
}
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') {
continue;
}
if (!$this->deletePlugin($dir . DIRECTORY_SEPARATOR . $item)) {
return false;
}
}
return rmdir($dir);
}
public function install_tinymcepro($return = 0)
{
$this->alterCleanHtml();
//BACKUP
if (!file_exists($this->path_original_js_files . 'tinymce.inc.js.bkp')) {
$file = fopen($this->path_original_js_files . 'tinymce.inc.js', 'r');
$newfile = fopen($this->path_original_js_files . 'tinymce.inc.js.bkp', 'w+');
while (($line = fgets($file)) !== false) {
fputs($newfile, $line);
}
fclose($newfile);
fclose($file);
}
if (!file_exists($this->path_original_tinymce . 'tinymce.min.js.bkp')) {
$file = fopen($this->path_original_tinymce . 'tinymce.min.js', 'r');
$newfile = fopen($this->path_original_tinymce . 'tinymce.min.js.bkp', 'w+');
while (($line = fgets($file)) !== false) {
fputs($newfile, $line);
}
fclose($newfile);
fclose($file);
}
if (!file_exists($this->path_original_js_files . 'tinymce_loader.js.bkp')) {
$file = fopen($this->path_original_js_files . 'tinymce_loader.js', 'r');
$newfile = fopen($this->path_original_js_files . 'tinymce_loader.js.bkp', 'w+');
while (($line = fgets($file)) !== false) {
fputs($newfile, $line);
}
fclose($newfile);
fclose($file);
}
//INSTALL TINYMCE MODIFIED
if (file_exists($this->path_original_js_files . 'tinymce.inc.js.bkp')) {
$file_module = fopen($this->path_module_files . 'tinymce.inc.js', 'r');
$file_original = fopen($this->path_original_js_files . 'tinymce.inc.js', 'w+');
while (($line = fgets($file_module)) !== false) {
fputs($file_original, $line);
}
fclose($file_original);
fclose($file_module);
}
if (file_exists($this->path_original_tinymce . 'tinymce.min.js.bkp')) {
$file_module = fopen($this->path_module_files . 'tinymce.min.js', 'r');
$file_original = fopen($this->path_original_tinymce . 'tinymce.min.js', 'w+');
while (($line = fgets($file_module)) !== false) {
fputs($file_original, $line);
}
fclose($file_original);
fclose($file_module);
}
if (file_exists($this->path_original_js_files . 'tinymce_loader.js.bkp')) {
$file_module = fopen($this->path_module_files . 'tinymce_loader.js', 'r');
$file_original = fopen($this->path_original_js_files . 'tinymce_loader.js', 'w+');
while (($line = fgets($file_module)) !== false) {
fputs($file_original, $line);
}
fclose($file_original);
fclose($file_module);
}
//INSTALL PLUGINS
foreach ($this->tinyplugins AS $plugin) {
if (!file_exists($this->path_original_tinymce_plugins . $plugin)) {
$this->move_plugin("install", $plugin);
} else {
if ($this->deletePlugin($this->path_original_tinymce_plugins . $plugin)) {
$this->move_plugin("install", $plugin);
}
}
}
//INSTALL MODIFICATION OF PLUGINS
foreach ($this->tinypluginsalter AS $plugin => $file) {
if (file_exists($this->path_original_tinymce_plugins . $plugin . '/' . $file)) {
$this->move_modification("install", $plugin, $file);
}
}
//REINSTALL MESSAGE
if ($return == 1) {
return " <span style='color:green; font-weight:bold; font-size:16px;'>" . $this->l('Reinstalled!') . "</span>";
} else {
return true;
}
}
public function hookHeader()
{
$this->context->controller->addCss($this->_path . 'lib/plugins/codesample/css/prism.css');
$this->context->controller->addCss($this->_path . 'css/tinymcepro.css');
$this->context->controller->addJS($this->_path . 'js/alerts.js');
if (Configuration::get('tpro_accordion') == 1) {
$this->context->controller->addJS($this->_path . 'js/accordion.js');
}
if (Configuration::get('tpro_fancybox') == 1) {
$this->context->controller->addJqueryPlugin('fancybox');
}
if (Configuration::get('tpro_readmore') == 1) {
$this->context->controller->addJS($this->_path . 'js/readmore.js');
}
if (Configuration::get('tpro_fa_new') == 1) {
return $this->display(__file__, 'header.tpl');
}
}
public function gethtmlFilesArrayForBackOffice()
{
$dir = "../modules/" . $this->name . "/html/";
$dh = opendir($dir);
$files = array();
$exists = array();
while (false !== ($filename = readdir($dh))) {
if ($filename != ".." && $filename != "." && $filename != "" && $filename != "index.php") {
$explode = explode(".", $filename);
if (!isset($exists[$explode[0]])) {
$exists[$explode[0]] = true;
$files[]['name'] = $explode[0];
}
}
}
$array_to_return = array();
if (count($files) > 0) {
foreach ($files as $file) {
$array_to_return[] = array('title' => $file['name'], 'url' => $this->context->shop->getBaseURL(true, true) . "modules/tinymcepro/html/" . $file['name'] . ".txt");
}
$files = json_encode($array_to_return, JSON_UNESCAPED_SLASHES);
} else {
$files = '[]';
}
return $files;
}
}
class tinymceproUpdate extends tinymcepro
{
public static function version($version)
{
$version = (int)str_replace(".", "", $version);
if (strlen($version) == 3) {
$version = (int)$version . "0";
}
if (strlen($version) == 2) {
$version = (int)$version . "00";
}
if (strlen($version) == 1) {
$version = (int)$version . "000";
}
if (strlen($version) == 0) {
$version = (int)$version . "0000";
}
return (int)$version;
}
public static function encrypt($string)
{
return base64_encode($string);
}
public static function verify($module, $key, $version)
{
if (ini_get("allow_url_fopen")) {
if (function_exists("file_get_contents")) {
$actual_version = @file_get_contents('http://dev.mypresta.eu/update/get.php?module=' . $module . "&version=" . self::encrypt($version) . "&lic=$key&u=" . self::encrypt(_PS_BASE_URL_ . __PS_BASE_URI__));
}
}
Configuration::updateValue("update_" . $module, date("U"));
Configuration::updateValue("updatev_" . $module, $actual_version);
return $actual_version;
}
}
require_once _PS_MODULE_DIR_ . 'tinymcepro/lib/htmlTemplatesManager/htmlTemplatesManager.php';
?>