%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
| Server IP : 14.207.165.8 / Your IP : 216.73.216.26 Web Server : Apache/2.4.18 (Ubuntu) System : Linux 246 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : root ( 0) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/thread-self/root/var/www/html/old/administrator/components/com_jckman/event/ |
Upload File : |
<?php
/*------------------------------------------------------------------------
# Copyright (C) 2005-2012 WebxSolution Ltd. All Rights Reserved.
# @license - GPLv2.0
# Author: WebxSolution Ltd
# Websites: http://www.webxsolution.com
# Terms of Use: An extension that is derived from the JoomlaCK editor will only be allowed under the following conditions: http://joomlackeditor.com/terms-of-use
# ------------------------------------------------------------------------*/
defined( '_JEXEC' ) or die;
defined('JPATH_BASE') or die();
jimport( 'joomla.event.event' );
class JCKCpanelControllerListener extends JEvent
{
protected $canDo = false;
protected $app = false;
function __construct( &$subject )
{
parent::__construct( $subject );
$this->canDo = JCKHelper::getActions();
$this->app = JFactory::getApplication();
}
/**
* A JParameter object holding the parameters for the plugin
*
* @var A JParameter object
* @access public
* @since 1.5
*/
public function onCheck()
{
//Check System requirements for the editor
define('JCK_BASE',JPATH_CONFIGURATION .DS.'plugins'.DS.'editors'.DS.'jckeditor');
if(!JFolder::exists(JCK_BASE))
return;
$perms = fileperms(JPATH_CONFIGURATION.DS.'index.php');
$perms = (decoct($perms & 0777));
$default_fperms = '0644';
$default_dperms = '0755';
if($perms == 777 || $perms == 666)
{
$default_fperms = '0666';
$default_dperms = '0777';
}
$fperms = JCK_BASE.DS.'config.js';
if(!stristr(PHP_OS,'WIN') && JPath::canChmod(JCK_BASE) && $perms != decoct(fileperms($fperms) & 0777))
{
$path = JCK_BASE.DS.'plugins';
if(!JPath::setPermissions($path,$default_fperms,$default_dperms))
{
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_AUTO_CORRECTION_FAILED_INCORRECT_FILE_PERMISSION'),'error' );
}
}
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_SYSTEM_CHECKED_AND_UPDATED'));
}//end function
public function onSync()
{
if( !$this->canDo->get('jckman.sync') )
{
$this->app->redirect( JRoute::_( 'index.php?option=com_jckman&view=cpanel', false ), JText::_( 'COM_JCKMAN_PLUGIN_PERM_NO_SYNC' ), 'error' );
return false;
}
jimport('joomla.filesystem.file');
$src = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor' .DS. 'pluginoverrides.php';
$dest = JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'jckeditor'.DS.'includes'.DS.'ckeditor'.DS.'plugins'.DS.'editor'.DS. 'pluginoverrides.php';
if( !JFile::copy( $src, $dest) ){
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_UNABLE_MOVE_PLUGINOVERRIDES_PLUGIN') );
}
$src = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor' .DS. 'acl.php';
$dest = JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'jckeditor'.DS.'includes'.DS.'ckeditor'.DS.'plugins'.DS.'editor'.DS. 'acl.php';
if( !JFile::copy( $src, $dest) ){
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_UNABLE_MOVE_ACL_PLUGIN') );
}
$src = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor' .DS. 'components.php';
$dest = JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'jckeditor'.DS.'includes'.DS.'ckeditor'.DS.'plugins'.DS.'toolbar'.DS. 'components.php';
if( !JFile::copy( $src, $dest) ){
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_UNABLE_MOVE_COMPONENTS_PLUGIN') );
}
$src = JPATH_ADMINISTRATOR.DS .'components' .DS. 'com_jckman' .DS. 'editor'.DS.'plugins.php';
$dest = JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'jckeditor'.DS.'includes'.DS.'ckeditor'.DS.'plugins.php';
if( !JFile::copy( $src, $dest) ){
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_UNABLE_MOVE_BASE_PLUGIN') );
}
$src = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor' .DS. 'scayt.xml';
$dest = JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'plugins'.DS.'scayt'.DS. 'scayt.xml';
if( !JFile::copy( $src, $dest) ){
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_UNABLE_MOVE_SCAYT_PLUGIN') );
}
//Lets try and restore broken or removed plugins from backup
require_once( JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'helpers' .DS.'restorer.php' );
$restorer = JCKRestorer::getInstance();
$srcBase = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor' .DS.'plugins'.DS;
$destBase = JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'plugins'.DS;
$folders = JFolder::folders($srcBase);
foreach($folders as $folder)
{
$src = $srcBase.$folder;
if (!$restorer->install($src))
{
$this->app->enqueueMessage(JText::sprintf('COM_JCKMAN_CPANEL_UNABLE_RESTORE_FOLDER',$folder), 'error' );
}
else
{
$this->app->enqueueMessage(JText::sprintf('COM_JCKMAN_CPANEL_SUCESSFULLY_RESTORE_FOLDER',$folder));
}
}
//check whether plugin is not a core plugin
//if its not iterate through and see if there are files missing
//then delete the plugin if there are
$db = JFactory::getDBO();
$query = 'SELECT p.id, p.name FROM `#__jckplugins` p WHERE p.iscore = 0';
$results = $db->setQuery( $query )->loadObjectList();
if(!empty($results))
{
for($i = 0; $i < count($results);$i++)
{
if(!JFolder::exists(JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'plugins'.DS.$results[$i]->name))
{
$query = 'DELETE FROM #__jcktoolbarplugins
WHERE pluginid ='. $results[$i]->id;
$db->setQuery( $query )->query();
$query = 'DELETE FROM #__jckplugins
WHERE id ='. $results[$i]->id;
$db->setQuery( $query )->query();
}
}//end for loop
}
//check for plugins that have not been added to layout -- legacy check
$query = 'SELECT id,name FROM `#__jcktoolbars`';
$toolbars = $db->setQuery( $query )->loadObjectList();
$JCKfolder = CKEDITOR_LIBRARY.DS . 'toolbar';
$values = array();
if(!empty($toolbars))
{
require_once(CKEDITOR_LIBRARY.DS . 'toolbar.php');
//update core plugins layout if needed
foreach($toolbars as $row)
{
// get the total number of core plugin records
$sql = $db->getQuery( true );
$sql->select( 'COUNT(*)' )
->from( '#__jcktoolbarplugins tp' )
->join( 'INNER', '#__jckplugins p ON tp.pluginid = p.id' )
->where( 'tp.toolbarid ='.(int) $row->id )
->where( 'p.iscore = 1' );
$totalRows = $db->setQuery( $sql )->loadResult();
if(!$totalRows) //lets get plugins from class file
{
$filename = $JCKfolder.DS.$row->name.'.php';
require_once($filename);
$classname = 'JCK'. ucfirst($row->name);
$toolbar = new $classname();
$sql = $db->getQuery( true );
$sql->select( 'p.id, p.title' )
->from( '#__jckplugins p' )
->join( 'LEFT', '#__jckplugins parent ON parent.id = p.parentid AND parent.published = 1' )
->where( 'p.title != ""' )
->where( 'p.published = 1' )
->where( 'p.iscore = 1' )
->where( '(p.parentid IS NULL OR parent.published = 1)' );
$allplugins = $db->setQuery( $sql )->loadObjectList();
$values = array();
//fix toolbar values or they will get wiped out
$l = 1;
$n = 1;
$j = 1;
foreach (get_object_vars( $toolbar ) as $k => $v)
{
if($v)
{
$n = ($n > $v ? $n : $v);
}
if($l < $n)
{
$l = $n;
$j = 1;
}
for($m = 0; $m< count($allplugins); $m++)
{
if($k == $allplugins[$m]->title)
{
$values[] = '('.(int)$row->id.','.(int)$allplugins[$m]->id.','.$n.','.$j.',1)';
break;
}
if(strpos($k,'brk_') !== false)
{
$id = preg_match('/[0-9]+$/',$k);
$id = $id * -1;
$values[] = '('.(int)$row->id.','.$id.','.$n.','.$j.',1)';
$n++;
break;
}
}
$j++;
}
if(!empty($values))
{
$query = 'INSERT INTO #__jcktoolbarplugins(toolbarid,pluginid,row,ordering,state) VALUES ' . implode(',',$values);
$db->setQuery( $query );
if(!$db->query())
{
JCKHelper::error( $db->getErrorMsg() );
}
}
}
}
//update non core plugins layout
$values = array();
foreach($toolbars as $row)
{
$query = 'SELECT id,title FROM `#__jckplugins` p WHERE p.title != "" AND p.iscore = 0 AND p.published = 1'
.' AND NOT EXISTS(SELECT 1 FROM #__jcktoolbarplugins tp WHERE tp.pluginid = p.id AND tp.toolbarid = ' .$row->id. ')';
$plugins = $db->setQuery( $query )->loadObjectList();
$tmpfilename = $JCKfolder.DS.$row->name.'.php';
if(!file_exists($tmpfilename))
continue; //skip
require_once($tmpfilename);
$classname = 'JCK'. ucfirst($row->name);
$toolbar = new $classname();
$rowDetail = JCKHelper::getNextLayoutRow($row->id);
foreach (get_object_vars( $toolbar ) as $k => $v)
{
foreach($plugins as $plugin)
{
if($plugin->title == $k)
{
$values[] = '('.$row->id.','. $plugin->id.','.$rowDetail->rowid.','.$rowDetail->rowordering.',1)';
$rowDetail->rowordering++;
}
}
}
}
}
//Now add plugins to layouts
if(!empty($values))
{
$query = 'INSERT INTO #__jcktoolbarplugins(toolbarid,pluginid,row,ordering,state) VALUES ' . implode(',',$values)
.' ON DUPLICATE KEY UPDATE toolbarid = VALUES(toolbarid),pluginid = VALUES(pluginid)';
$db->setQuery( $query );
if(!$db->query())
{
JCKHelper::error( $db->getErrorMsg() );
}
}
//Reload Toolbar if editor is re-installed
jckimport( 'event.observable.editor' );
$obs = new JCKEditorObservable( 'toolbars' );
$handle = $obs->getEventHandler();
$query = 'SELECT * FROM `#__jcktoolbars` t WHERE exists(SELECT 1 FROM #__jcktoolbarplugins tp WHERE tp.toolbarid = t.id)';
$rowresults = $db->setQuery( $query )->loadObjectList();
foreach($rowresults as $row)
{
$id = $row->id;
$name = $row->name;
$title = $row->title;
switch( $name )
{
case 'publisher' :
case 'full':
case 'basic' :
case 'blog' :
case 'image' :
case 'mobile':
$isNew = false;
break;
default :
$isNew = true;
break;
}//end switch
$handle->onSave( $id, $name, $name, $title, $isNew );
}
//restore state of published/unpublished plugins
$obs = new JCKEditorObservable( 'list' );
$handle = $obs->getEventHandler();
$where = array();
$where[] = ' WHERE p.published = 1';
$where[] = ' WHERE p.published = 0';
$state = array(1,0);
$count = count($where);
$db = JFactory::getDBO();
for( $i = 0; $i < $count; $i++ )
{
$query = 'SELECT id FROM `#__jckplugins` p' . $where[$i] . ' AND p.iscore = 1 AND type="plugin"';
$results = $db->setQuery( $query )->loadColumn();
$handle->onPublish($results, $state[$i]);
}
//restore language overrides
$src = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor'.DS.'overrides';
$dest = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'language'.DS.'overrides';
$files = JFolder::files($src);
foreach($files as $file)
{
if($file == 'index.html')
continue;
$source = $src .'/'. $file;
$path = $dest.'/'.$file;
if(JFile::exists($file))
{
$this->app->enqueueMessage(JText::sprintf('COM_JCKMAN_CPANEL_LANGUAGE_EXISTS',$file), 'warning' );
}
elseif(!JFile::copy($source,$path))
{
$this->app->enqueueMessage(JText::sprintf('COM_JCKMAN_CPANEL_UNABLE_RESTORE_LANGUAGE',$file), 'error' );
}
else
{
$this->app->enqueueMessage(JText::sprintf('COM_JCKMAN_CPANEL_SUCESSFULLY_RESTORE_LANGUAGE',$file));
}
}
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_EDITOR_SYNCHRONIZED'));
}//end function
public function onImport()
{
}//end function
public function onExport()
{
ini_set('max_execution_time', 5000);
//require(JPATH_COMPONENT.'/helpers/archive.php');
require(JPATH_COMPONENT.'/helpers/archivefactory.php');
//copy XML file
jimport('joomla.filesystem.file');
$src = JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'jckeditor.xml';
$dest = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor'.DS.'plugins'.DS.'jckeditor.xml';
if( !JFile::copy( $src, $dest) ){
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_UNABLE_TO_COPY_MANIFEST') );
}
$src = JPATH_PLUGINS.DS.'editors'.DS.'jckeditor'.DS.'jckeditor'.DS.'includes'.DS.'ckeditor'.DS.'toolbar';
$dest = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor'.DS.'toolbar';
if( !JFolder::copy( $src, $dest,'',true) ){
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_UNABLE_TO_COPY_TOOLBARS') );
}
$src = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'language'.DS.'overrides';
$dest = JPATH_ADMINISTRATOR.DS.'components' .DS. 'com_jckman' .DS. 'editor'.DS.'overrides';
if( !JFolder::copy( $src, $dest,'',true) ){
$this->app->enqueueMessage( JText::_('COM_JCKMAN_CPANEL_UNABLE_TO_COPY_TOOLBARS') );
}
//process SQL
if($this->_createSQL())
{
// Create a new gzip file test.tgz in htdocs/test
$backup_file_name = 'bak_jckeditor'.date('dmyHis');
/*
$tgz = new gzip_file($backup_file_name);
$tgz->set_options(array('basedir' => JPATH_COMPONENT."/editor", 'overwrite' =>1,'inmemory'=>1,level=>5));
$tgz->add_files('import.xml');
$tgz->add_files('toolbar');
$tgz->add_files('plugins');
$tgz->create_archive();
$tgz->download_file();
exit;
*/
$tgz = new ArchiveFactory(JPATH_COMPONENT."/editor",$backup_file_name);
$tgz->downloadFile();
}
else
{
JCKHelper::error( JText::_("COM_JCKMAN_CPANEL_COULD_NOT_CREATE_SQL"));
}
}//end function
private function _createSQL()
{
$tables = array('#__jckplugins','#__jcktoolbars','#__jcktoolbarplugins','#__jcklanguages');
$db = JFactory::getDBO();
$sql = array();
foreach($tables as $table)
{
$sql[] = 'DROP TABLE IF EXISTS '. $table.';'.chr(13);
$query = 'SHOW CREATE TABLE '. $table;
$db->setQuery($query);
$row = $db->loadRow();
$struct = str_replace($db->getPrefix(),'#__',$row[1]);
$sql[] = $struct.';'.chr(13);
$query = 'SELECT * FROM '. $table;
$db->setQuery($query);
$rows = $db-> loadRowList();
if(!empty($rows))
{
$sql[] = 'INSERT INTO '. $table. ' VALUES ';
$fieldcount = count($rows[0]);
$rowcount = count($rows);
$fieldcount--;
$rowcount--;
foreach($rows as $k=>$row)
{
if(!$row[$fieldcount])
$row[$fieldcount] = 'NULL';
if(!$row[$fieldcount-2])
$row[$fieldcount-2] = 'NULL';
if($k < $rowcount)
$tupples = "('".implode("','",$row)."'),";
else
$tupples = "('".implode("','",$row)."');";
$tupples = str_replace("'NULL'","NULL",$tupples);
$sql[] = $tupples;
}
$sql[] = chr(13);
}
}
$query = "SELECT params FROM #__extensions WHERE folder='editors' AND element = 'jckeditor'";
$db->setQuery($query);
$result = $db-> loadResult();
$sql[] = "UPDATE #__extensions";
$sql[] = "SET params = '".$db->escape($result)."'";
$sql[] = "WHERE folder='editors' AND element = 'jckeditor'";
$sql[] = chr(13);
$buffer = implode(chr(13),$sql);
$file = JPATH_COMPONENT.'/editor/plugins/sql.sql';
return JFile::write($file, $buffer);
}//end function
}//end class