267 lines
11 KiB
PHP
267 lines
11 KiB
PHP
<?php
|
|
/**
|
|
* @copyright Copyright (C) 2016 Cédric KEIFLIN alias ced1870
|
|
* https://www.joomlack.fr
|
|
* @license GNU/GPL
|
|
* */
|
|
|
|
defined('_JEXEC') or die;
|
|
//if (! defined('CK_LOADED')) define('CK_LOADED', 1);
|
|
|
|
require_once JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/helpers/ckfof.php';
|
|
use Pagebuilderck\CKFof;
|
|
|
|
/**
|
|
* Editor Pagebuilderckeditor button
|
|
*
|
|
*/
|
|
class PlgButtonPagebuilderckeditor extends JPlugin
|
|
{
|
|
/**
|
|
* Load the language file on instantiation.
|
|
*
|
|
* @var boolean
|
|
* @since 3.1
|
|
*/
|
|
protected $autoloadLanguage = true;
|
|
|
|
protected $elements;
|
|
|
|
/**
|
|
* Pagebuilderckeditor button
|
|
*
|
|
* @param string $name The name of the button to add
|
|
*
|
|
*/
|
|
public function onDisplay($name)
|
|
{
|
|
|
|
// check the name of the editor, if ckeditor then we must not load this button because we are already in the pagebuilder
|
|
if ($name == 'ckeditor') return;
|
|
|
|
$doc = JFactory::getDocument();
|
|
$app = JFactory::getApplication();
|
|
$input = $app->input;
|
|
$conf = JFactory::getConfig();
|
|
$css = "";
|
|
|
|
$user = JFactory::getUser();
|
|
|
|
// authorize only in article edition admin and front, if the page builder ck editor has been allowed, comes from the system plugin
|
|
if ($conf->get('pagebuilderck_allowed') != '1')
|
|
return;
|
|
|
|
// loads the language files from the component frontend
|
|
$lang = JFactory::getLanguage();
|
|
$lang->load('com_pagebuilderck', JPATH_SITE . '/components/com_pagebuilderck', $lang->getTag(), false);
|
|
$lang->load('com_pagebuilderck', JPATH_SITE, $lang->getTag(), false);
|
|
|
|
// for 3rd party integration
|
|
$thirdPartyIntegrations = PagebuilderckHelper::getThirdPartyIntegrations();
|
|
$attribsVar = $thirdPartyIntegrations['attribs'];
|
|
$adminForm = $thirdPartyIntegrations['adminForm'];
|
|
$fieldsname = $thirdPartyIntegrations['fieldsname'];
|
|
|
|
if ($input->get('option', '') !== 'com_content'
|
|
&& $input->get('option', '') !== 'com_flexicontent'
|
|
) {
|
|
// if the field is not allowed in the list, don't show the button
|
|
if ($name !== 'jform_' . $fieldsname) return;
|
|
// if the integration params of PBCK does not allow, don't show the button
|
|
if ($conf->get('pagebuilderck_allowed_' . $fieldsname, '1') == '0') return;
|
|
}
|
|
|
|
// if the page builder ck editor must be used
|
|
if ($input->get('pbck', '0') == '1') {
|
|
$short_name = str_replace('jform_', '', $name);
|
|
if ($conf->get('pagebuilderck_allowed_' . $short_name) != '1')
|
|
return;
|
|
|
|
$conf = JFactory::getConfig();
|
|
// Get the text filter data
|
|
$params = JComponentHelper::getParams('com_config');
|
|
$filters = CKFof::convertObjectToArray($params->get('filters'));
|
|
// check if the user has the correct rights on the filters to save the article
|
|
if (! in_array('8', $user->groups)) { // checks for super user group
|
|
foreach($user->groups as $g) {
|
|
if (isset($filters[$g])) {
|
|
$filters[$g] = CKFof::convertObjectToArray($filters[$g]);
|
|
if ($filters[$g]['filter_type'] === 'BL') $app->enqueueMessage('PAGE BUILDER CK : ' . JText::_('CK_WARNING_USERGROUP_FILTERTYPE_BLACKLIST'), 'error');
|
|
}
|
|
// if ($filters[$g]['filter_type'] === 'WL' && strpos($filters[$g]['filter_tags'], 'style') === false) $app->enqueueMessage('PAGE BUILDER CK : ' . JText::_('CK_WARNING_USERGROUP_FILTERTYPE_WHITELIST_NOSTYLE'), 'error');
|
|
}
|
|
}
|
|
|
|
include_once JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/helpers/menustyles.php';
|
|
include_once JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/helpers/stylescss.php';
|
|
// include_once JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/helpers/ckeditor.php';
|
|
include_once JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/helpers/pagebuilderck.php';
|
|
include_once JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/helpers/ckmodel.php';
|
|
|
|
// get instance of the editor to load the css / js in the page
|
|
// $this->ckeditor = PagebuilderckHelper::loadEditor();
|
|
// need the tinymce instance for the items edition
|
|
// Load the editor Tinymce or JCE
|
|
$editor = $conf->get('pagebuilderck_replaced_editor') == 'jce' ? 'jce' : 'tinymce';
|
|
$editor = JEditor::getInstance($editor);
|
|
$editor->display('ckeditor', $html = '', $width = '', $height = '200px', $col='', $row='', $buttons = true, $id = 'ckeditor');
|
|
// Get an instance of the model
|
|
// JModelLegacy::addIncludePath(JPATH_SITE . '/administrator/components/com_pagebuilderck/models', 'PagebuilderckModel');
|
|
$model = Pagebuilderck\CKModel::getInstance('Elements', 'Pagebuilderck');
|
|
// $model = $this->getModel('Elements', '', array());
|
|
$this->elements = $model->getItems();
|
|
|
|
str_replace('"', '\"', include_once(JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/views/page/tmpl/include.php'));
|
|
str_replace('"', '\"', include_once(JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/views/page/tmpl/submitform.php'));
|
|
str_replace('"', '\"', include_once(JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/views/page/tmpl/menu.php'));
|
|
str_replace('"', '\"', include_once(JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/views/page/tmpl/toolbar.php'));
|
|
str_replace('"', '\"', include_once(JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/views/page/tmpl/contextmenu.php'));
|
|
|
|
// force the inclusion of the field with the value 1
|
|
echo '<input id="jform_attribs_pagebuilderck_editor" type="hidden" value="1" name="jform[attribs][pagebuilderck_editor]">';
|
|
|
|
// section specific to content types
|
|
$iscontenttype = $input->get('iscontenttype', 0, 'int');
|
|
// force state with url variable, for debugging purposes
|
|
$iscontenttype = isset($_GET['iscontenttype']) ? $_GET['iscontenttype'] : $iscontenttype;
|
|
|
|
echo '<input id="jform_attribs_pagebuilderck_iscontenttype" type="hidden" value="' . $iscontenttype . '" name="jform[attribs][pagebuilderck_iscontenttype]">';
|
|
$contenttype = $input->get('contenttype', '', 'string');
|
|
/*if ($iscontenttype === 1) {
|
|
JPluginHelper::importPlugin( 'pagebuilderck' );
|
|
ob_start();
|
|
Pagebuilderck\CKFof::triggerEvent( 'onPagebuilderckLoadItemContent' . ucfirst($contenttype) );
|
|
$contenttypehtml = ob_get_contents();
|
|
ob_end_clean();
|
|
$contenttypehtml = str_replace("'", "\'", $contenttypehtml);
|
|
$contenttypehtml = str_replace("\n", "", $contenttypehtml);
|
|
$contenttypehtml = str_replace("\r", "", $contenttypehtml);
|
|
} else {
|
|
$contenttypehtml = '';
|
|
}*/
|
|
|
|
$js1 = "
|
|
function pbckeditorLoadEditor(name) {
|
|
var cont = jQuery(name).parent();
|
|
// cont.css('display', 'none');
|
|
var html = '<div id=\"workspaceparentck\">'
|
|
+'<div id=\"workspaceck\" class=\"pagebuilderck workspaceck" . ($input->get('iscontenttype', 0, 'int') === 1 ? ' ckiscontenttype' : '') ."\">'
|
|
+'</div>'
|
|
+'</div>';
|
|
// load the page builder workspace and hide the textarea
|
|
//cont.children().hide();
|
|
cont.append(html);
|
|
|
|
// fix for RSFirewall
|
|
jQuery(name).val(jQuery(name).val().replace(/<s-tyle/g, '<style'));
|
|
jQuery(name).val(jQuery(name).val().replace(/s-tyle>/g, 'style>'));
|
|
|
|
var injectContentToPbck = false;
|
|
// test if this is a new content or already created with page builder
|
|
if (jQuery(name).length && ! jQuery(name).val().includes('rowck')) {
|
|
injectContentToPbck = true;
|
|
}
|
|
|
|
jQuery('#workspaceparentck').prepend(jQuery('#context-menu-ck'));
|
|
if (jQuery(name).length && ! injectContentToPbck) {
|
|
jQuery('#workspaceck').html(jQuery(name).val().replace(/\|URIROOT\|/g, '" . JUri::root(true) . "'));
|
|
}
|
|
|
|
ckInitWorkspace();
|
|
// manage content creation if is a content type
|
|
if (PAGEBUILDERCK.ISCONTENTTYPE == '1' && injectContentToPbck) {
|
|
var workspace = ckGetWorkspace();
|
|
var newrowid = ckGetUniqueId('row_');
|
|
var newrow = ckHtmlRow(newrowid);
|
|
workspace.append(newrow);
|
|
var newblockid = ckGetUniqueId('block_');
|
|
var newblock = ckHtmlBlock(newblockid);
|
|
jQuery('> .inner', newrow).append(newblock);
|
|
ckInitBlocksSize(newrow);
|
|
|
|
jQuery('#workspaceck .blockck > .inner > .innercontent').addClass('ckfocus');
|
|
ckAddItem('" . $contenttype . "');
|
|
}
|
|
// manage content creation for a standard article
|
|
else if (injectContentToPbck) {
|
|
jQuery('#workspaceck .blockck > .inner > .innercontent').addClass('ckfocus');
|
|
ckAddItem('text');
|
|
|
|
// Override to get the appended text ID and update the data
|
|
/*function ckTriggerAfterAdditem(id) {
|
|
var content = jQuery('#" . $name . "').val();
|
|
content = ckEditorToContent(content);
|
|
jQuery('#'+id+' > .inner').html(content);
|
|
}*/
|
|
}
|
|
|
|
cont.css('display', '');
|
|
|
|
// adds the settings in JS to be sure that it is at the end of the front end form
|
|
jQuery('#" . $adminForm . "').append('<input id=\"jform_" . $attribsVar . "_pagebuilderck_editor\" type=\"hidden\" value=\"1\" name=\"jform[" . $attribsVar . "][pagebuilderck_editor]\">');
|
|
jQuery('#adminForm').append('<input id=\"jform_attribs_pagebuilderck_editor\" type=\"hidden\" value=\"1\" name=\"jform[attribs][pagebuilderck_editor]\">');
|
|
jQuery('#adminForm').append('<input id=\"jform_attribs_pagebuilderck_iscontenttype\" type=\"hidden\" value=\"" . $iscontenttype . "\" name=\"jform[attribs][pagebuilderck_iscontenttype]\">');
|
|
}
|
|
|
|
|
|
// Override to get the appended text ID and update the data
|
|
function ckTriggerAfterAdditem(id) {
|
|
var content = jQuery('#" . $name . "').val();
|
|
content = ckEditorToContent(content);
|
|
jQuery('#'+id+' > .inner').html(content);
|
|
}
|
|
|
|
JoomlaCK.beforesubmitbutton = function(task) {
|
|
// check if the function exists, loads it
|
|
if (typeof ckBeforeSaveWorkspace == 'function') { ckBeforeSaveWorkspace(); }
|
|
|
|
var workspace = jQuery('#workspaceck');
|
|
|
|
jQuery('#" . $name . "').val(workspace.html());
|
|
|
|
// JoomlaCK.submitbutton(task);
|
|
}
|
|
";
|
|
|
|
echo "<script>" . $js1 . "</script>";
|
|
|
|
$css .= "#" . $name . ",
|
|
#" . $name . " + #editor-xtd-buttons,
|
|
#editor-xtd-buttons,
|
|
.editor-xtd-buttons
|
|
{
|
|
display: none;
|
|
}";
|
|
}
|
|
|
|
// construct the JS code to manage the operations
|
|
$js2 = "
|
|
jQuery(document).ready(function (){
|
|
if (" . $input->get('pbck', '0') . " != '1') pbckeditorLoadEditorButton('#" . $name . "');
|
|
if (" . $input->get('pbck', '0') . " == '1') pbckeditorLoadEditor('#" . $name . "');
|
|
});
|
|
|
|
function pbckeditorLoadEditorButton(name) {
|
|
var cont = jQuery(name).parent();
|
|
cont.before('<a class=\"btn pbckswitch btn-secondary\" onclick=\"pbckLoadPagebuilderckEditor()\"><i class=\"icon icon-loop\"></i> " . JText::_('CK_LOAD_PAGEBUILDERCK_EDITOR', true) . "</a>');
|
|
}
|
|
|
|
function pbckLoadPagebuilderckEditor() {
|
|
var beSure = confirm('" . JText::_('CK_CONFIRM_PAGEBUILDERCK_EDITOR', true) . "');
|
|
if (!beSure) return;
|
|
|
|
window.location.search += '&pbck=1';
|
|
}
|
|
";
|
|
$doc->addScriptDeclaration($js2);
|
|
|
|
$css .= ".pbckswitch {
|
|
margin: 5px 0;
|
|
}";
|
|
$doc->addStyleDeclaration($css);
|
|
|
|
if ($input->get('option', '') == 'com_flexicontent') $editor = $conf->set('editor', $conf->get('pagebuilderck_replaced_editor'));
|
|
return;
|
|
}
|
|
}
|