286 lines
10 KiB
PHP
286 lines
10 KiB
PHP
<?php
|
|
/**
|
|
* @name Page Builder CK
|
|
* @copyright Copyright (C) since 2011. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
* @author Cedric Keiflin - https://www.template-creator.com - https://www.joomlack.fr
|
|
*/
|
|
namespace Pagebuilderck;
|
|
|
|
// No direct access
|
|
defined('_JEXEC') or die;
|
|
if (! defined('CK_LOADED')) define('CK_LOADED', 1);
|
|
|
|
require_once 'ckinput.php';
|
|
require_once 'cktext.php';
|
|
// require_once 'ckpath.php';
|
|
require_once 'ckfile.php';
|
|
require_once 'ckfolder.php';
|
|
require_once 'ckfof.php';
|
|
//use Joomla\CMS\Language\Text as CKText;
|
|
use Joomla\CMS\Uri\Uri as CKUri;
|
|
|
|
use Pagebuilderck\CKFof;
|
|
|
|
/**
|
|
* Front Edition helper
|
|
*/
|
|
class FrontEdition {
|
|
|
|
public static function init() {
|
|
// return; // TODO remove to enable front edition
|
|
if (! self::canUseFrontendEdition()) return;
|
|
|
|
$pagebuilderckParams = \JComponentHelper::getParams('com_pagebuilderck');
|
|
// check if the front edition is enabled from the options
|
|
$enableFrontedition = $pagebuilderckParams->get('frontedition', '1', 'int');
|
|
if ($enableFrontedition == 0) return;
|
|
|
|
// load language file
|
|
$lang = \JFactory::getLanguage();
|
|
$lang->load('com_pagebuilderck', JPATH_SITE . '/components/com_pagebuilderck', $lang->getTag(), false);
|
|
|
|
global $pagebuilderckEditionLoaded, $ckFrontEditionLoaded;
|
|
$pagebuilderckEditionLoaded = true;
|
|
|
|
$input = CKFof::getInput();
|
|
$user = CKFof::getUser();
|
|
if ($user->id && $input->get('tckedition', 0, 'int') === 1) {
|
|
if (! $ckFrontEditionLoaded) echo self::renderMenu();
|
|
|
|
$editor = \JFactory::getConfig()->get('editor') == 'jce' ? 'jce' : 'tinymce';
|
|
$editor = \JEditor::getInstance($editor);
|
|
$editor->display('ckeditor', $html = '', $width = '', $height = '200px', $col='', $row='', $buttons = true, $id = 'ckeditor');
|
|
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/views/page/tmpl/include.php');
|
|
include_once(JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/views/page/tmpl/menu.php');
|
|
include_once(JPATH_ADMINISTRATOR . '/components/com_pagebuilderck/views/page/tmpl/toolbar.php');
|
|
?>
|
|
<link rel="stylesheet" href="<?php echo PAGEBUILDERCK_MEDIA_URI ?>/assets/frontedition.css" type="text/css" />
|
|
<script src="<?php echo PAGEBUILDERCK_MEDIA_URI ?>/assets/frontedition.js" type="text/javascript"></script>
|
|
<?php
|
|
} else {
|
|
if ($user->id) {
|
|
$buttons = self::getActivationButton();
|
|
$html = self::getEmptyMenu($buttons);
|
|
echo $html;
|
|
?>
|
|
<link rel="stylesheet" href="<?php echo PAGEBUILDERCK_MEDIA_URI ?>/assets/ckframework.css" type="text/css" />
|
|
<link rel="stylesheet" href="<?php echo PAGEBUILDERCK_MEDIA_URI ?>/assets/frontedition.css" type="text/css" />
|
|
<?php
|
|
}
|
|
}
|
|
|
|
// check if modules manager ck is used and if the correct version is insalled
|
|
self::checkModulesmanagerckCompatibility();
|
|
|
|
$ckFrontEditionLoaded = true;
|
|
/*$user = CKFof::getUser();
|
|
$input = CKFof::getInput();
|
|
// if user logged in
|
|
if ($user->id && $input->get('tckedition', 0, 'int') === 1) {
|
|
// self::renderMenu();
|
|
// get current uri
|
|
$uri = JFactory::getURI();
|
|
$current_url = $uri->toString();
|
|
// CKFof::redirect(JUri::root(true) . '/index.php?option=com_pagebuilderck&view=frontedition&url=' . urlencode($current_url));
|
|
|
|
// $this->callTemplateEdition();
|
|
}*/
|
|
// self::callTemplateEdition();
|
|
}
|
|
|
|
public static function getEmptyMenu($buttons = '') {
|
|
ob_start();
|
|
?>
|
|
<div id="ckheader">
|
|
<div class="ckheaderlogo"><a href="https://www.joomlack.fr" target="_blank"><img width="35" height="35" title="JoomlaCK" src="https://media.joomlack.fr/images/logo_ck_white.png" /></a></div>
|
|
<div class="ckheadermenu">
|
|
<?php echo $buttons; ?>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
echo self::getCssForEdition();
|
|
$html = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
return $html;
|
|
}
|
|
|
|
/* load only if page builder ck is not already loaded */
|
|
public static function renderMenu() {
|
|
$current_url = self::getCurrentUri();
|
|
ob_start();
|
|
$mmckbuttons = '';
|
|
$editionfilemmck = JPATH_SITE . '/components/com_modulesmanagerck/helpers/frontedition.php';
|
|
if (file_exists($editionfilemmck)) {
|
|
require_once $editionfilemmck;
|
|
if (\Modulesmanagerck\FrontEdition::canUseFrontendEdition()) {
|
|
$mmckbuttons = \Modulesmanagerck\FrontEdition::getMenuButtons();
|
|
echo \Modulesmanagerck\FrontEdition::getCssForEdition();
|
|
}
|
|
}
|
|
?>
|
|
<a href="<?php echo str_replace('tckedition=1', '', $current_url); ?>" class="ckheadermenuitem ckcancel" >
|
|
<span class="fa fa-times cktip" data-placement="bottom" title="<?php echo CKText::_('CK_EXIT'); ?>"></span>
|
|
<span class="ckheadermenuitemtext"><?php echo CKText::_('CK_EXIT') ?></span>
|
|
</a>
|
|
<a href="javascript:void(0);" class="ckheadermenuitem cksave" onclick="ckPagebuilderFrontEditionSave()">
|
|
<span class="fa fa-check cktip" data-placement="bottom" title="<?php echo CKText::_('CK_SAVE'); ?>"></span>
|
|
<span class="ckheadermenuitemtext"><?php echo CKText::_('CK_SAVE') ?></span>
|
|
</a>
|
|
<?php
|
|
echo self::getCssForEdition();
|
|
$buttons = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
$html = self::getEmptyMenu($mmckbuttons . $buttons);
|
|
|
|
return $html;
|
|
}
|
|
|
|
/*
|
|
* Function that can be called by others like Page Builder CK to integrate the buttons in another toolbar
|
|
*/
|
|
public static function getActivationButton() {
|
|
$link = (CKURI::getInstance()->getQuery() ? self::getCurrentUri() . '&tckedition=1' : self::getCurrentUri() . '?tckedition=1');
|
|
|
|
ob_start();
|
|
?>
|
|
<a href="<?php echo $link ?>" class="ckheadermenuitem">
|
|
<span class="fa fa-toggle-on cktip" title="<?php echo CKText::_('CK_ENABLE'); ?> <?php echo CKText::_('CK_FRONT_EDITION'); ?>"></span>
|
|
<span class="ckheadermenuitemtext"><?php echo CKText::_('CK_ENABLE'); ?> <?php echo CKText::_('CK_FRONT_EDITION'); ?></span>
|
|
</a>
|
|
<?php
|
|
$html = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
return $html;
|
|
}
|
|
|
|
private static function getCurrentUri() {
|
|
// $uri = \JFactory::getURI();
|
|
$uri = \Juri::getInstance();
|
|
return $uri->toString();
|
|
}
|
|
|
|
public static function getCssForEdition() {
|
|
ob_start();
|
|
?>
|
|
<style>
|
|
.menuck {
|
|
top: 65px !important;
|
|
}
|
|
|
|
#ckheader .ckheadermenu .ckheadermenuitem {
|
|
font-size: 13px;
|
|
line-height: 20px;
|
|
}
|
|
|
|
|
|
html {
|
|
padding-top: 66px! important;
|
|
}
|
|
|
|
body.tck-edition-body #ckheader {
|
|
z-index: 10000;
|
|
}
|
|
|
|
body.tck-edition-body .tab_fullscreen {
|
|
top:65px;
|
|
}
|
|
|
|
div.menuck > .inner {
|
|
height: calc(100vh - 115px);
|
|
}
|
|
</style>
|
|
<?php
|
|
$html = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
return $html;
|
|
}
|
|
|
|
public static function canUseFrontendEdition() {
|
|
// check that the user has the rights to edit
|
|
$user = \JFactory::getUser();
|
|
$app = \JFactory::getApplication();
|
|
$authorised = ($user->authorise('core.edit', 'com_pagebuilderck'));
|
|
// check the ACL from the component config
|
|
$canusefrontedition = $user->authorise('core.frontedition', 'com_pagebuilderck');
|
|
if (! $canusefrontedition) return false;
|
|
|
|
if ($authorised !== true)
|
|
{
|
|
return false;
|
|
// if ($user->guest === 1)
|
|
// {
|
|
// $return = base64_encode(CKUri::getInstance());
|
|
// $login_url_with_return = \JRoute::_('index.php?option=com_users&return=' . $return);
|
|
// $app->enqueueMessage(CKText::_('JERROR_ALERTNOAUTHOR'), 'notice');
|
|
// $app->redirect($login_url_with_return, 403);
|
|
// }
|
|
// else
|
|
// {
|
|
// $app->enqueueMessage(CKText::_('JERROR_ALERTNOAUTHOR'), 'error');
|
|
// $app->setHeader('status', 403, true);
|
|
// return;
|
|
// }
|
|
}
|
|
|
|
// check that the template is compatible
|
|
$app = \JFactory::getApplication();
|
|
$template = $app->getTemplate();
|
|
|
|
// load xml file from the template
|
|
$xml = simplexml_load_file(JPATH_SITE . '/templates/' . $template . '/templateDetails.xml');
|
|
|
|
// check that the template is made with a compatible version of Template Creator CK
|
|
if ($xml->generator != 'Template Creator CK') {
|
|
// JError::raiseWarning(403, CKText::_('The template you are trying to edit has not been created with Template Creator CK, or not the latest version of if. You can download Template Creator CK on <a href="https://www.template-creator.com">https://www.template-creator.com</a>'));
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private static function checkModulesmanagerckCompatibility() {
|
|
if (! file_exists(JPATH_ROOT . '/components/com_modulesmanagerck/modulesmanagerck.php')) return true;
|
|
$xmlData = self::getXmlData(JPATH_ROOT . '/administrator/components/com_modulesmanagerck/modulesmanagerck.xml');
|
|
$installedVersion = ((string)($xmlData->version));
|
|
|
|
// if the installed version is the V1
|
|
if(version_compare($installedVersion, '1.3.1', '<')) {
|
|
// if the params is also installed
|
|
if (\JPluginHelper::isEnabled('system', 'modulesmanagersystemck')) {
|
|
// throw new \RuntimeException('Slideshow CK Light cannot be installed over Slideshow CK V1 + Params. Please install Slideshow CK Pro to get the same features as previously, else you may loose your existing settings. To downgrade, please first uninstall Slideshow CK Params. <a href="https://www.joomlack.fr/en/documentation/48-slideshow-ck/246-migration-from-slideshow-ck-version-1-to-version-2" target="_blank">Read more</a>');
|
|
echo '<p style="color:red;font-size: 20px">WARNING : Modules Manager CK has been detected but its version is not up to date. You must set up your system correctly or it will not work.<br/> <a href="https://www.joomlack.fr/documentation/page-builder-ck/250-front-edtion" target="_blank">Please check the documentation</a></p>';
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static function getXmlData($file) {
|
|
if ( ! is_file($file))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$xml = simplexml_load_file($file);
|
|
|
|
if ( ! $xml || ! isset($xml['version']))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
return $xml;
|
|
}
|
|
}
|
|
|
|
// autoload the edition
|
|
//PBCK_FrontEdition::init();
|