263 lines
7.9 KiB
PHP
263 lines
7.9 KiB
PHP
<?php
|
|
/**
|
|
* @package Joomla.Administrator
|
|
* @subpackage com_j2xml
|
|
*
|
|
* @version 3.9.229-rc1
|
|
* @since 1.5.3
|
|
*
|
|
* @author Helios Ciancio <info (at) eshiol (dot) it>
|
|
* @link https://www.eshiol.it
|
|
* @copyright Copyright (C) 2010 - 2023 Helios Ciancio. All Rights Reserved
|
|
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL v3
|
|
* J2XML is free software. This version may have been modified pursuant
|
|
* to the GNU General Public License, and as distributed it includes or
|
|
* is derivative of works licensed under the GNU General Public License
|
|
* or other free or open source software licenses.
|
|
*/
|
|
|
|
// no direct access
|
|
defined('_JEXEC') or die();
|
|
|
|
JLoader::import('eshiol.J2xml.Importer');
|
|
JLoader::import('eshiol.J2xmlpro.Importer');
|
|
|
|
require_once JPATH_ADMINISTRATOR . '/components/com_j2xml/helpers/j2xml.php';
|
|
|
|
/**
|
|
* Controller class.
|
|
*/
|
|
class J2xmlControllerCpanel extends JControllerLegacy
|
|
{
|
|
|
|
/**
|
|
* The application object.
|
|
*
|
|
* @var JApplicationBase
|
|
* @since 3.7.200
|
|
*/
|
|
protected $app;
|
|
|
|
/**
|
|
* Custom Constructor
|
|
*/
|
|
function __construct ($default = array())
|
|
{
|
|
parent::__construct($default);
|
|
|
|
$this->app = JFactory::getApplication();
|
|
}
|
|
|
|
public function display ($cachable = false, $urlparams = false)
|
|
{
|
|
$this->input->set('view', 'cpanel');
|
|
$this->input->set('layout', 'default');
|
|
parent::display($cachable, $urlparams);
|
|
}
|
|
|
|
function import ()
|
|
{
|
|
JLog::add(new JLogEntry(__METHOD__, JLOG::DEBUG, 'com_j2xml'));
|
|
|
|
$app = JFactory::getApplication('administrator');
|
|
if (isset($_SERVER["CONTENT_LENGTH"]))
|
|
{
|
|
if ($_SERVER["CONTENT_LENGTH"] > ((int) ini_get('post_max_size') * 1024 * 1024))
|
|
{
|
|
$app->enqueueMessage(JText::_('COM_J2XML_ERROR_WARNUPLOADTOOLARGE'), 'error');
|
|
$this->setRedirect('index.php?option=com_j2xml');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Check for request forgeries
|
|
JSession::checkToken() or jexit('Invalid Token');
|
|
|
|
$msg = '';
|
|
$db = JFactory::getDBO();
|
|
$date = JFactory::getDate();
|
|
$now = $date->toSQL();
|
|
$params = JComponentHelper::getParams('com_j2xml');
|
|
$this->setRedirect('index.php?option=com_j2xml');
|
|
libxml_use_internal_errors(true);
|
|
$filetype = $this->input->get('j2xml_filetype', 1);
|
|
switch ($filetype)
|
|
{
|
|
case 1:
|
|
// Retrieve file details from uploaded file, sent from upload
|
|
// form:
|
|
$file = $this->input->files->get('j2xml_local', null, 'array');
|
|
if (!isset($file))
|
|
{
|
|
$app->enqueueMessage(JText::_('COM_J2XML_MSG_UPLOAD_ERROR'), 'error');
|
|
return false;
|
|
}
|
|
elseif ($file['error'] > 0)
|
|
{
|
|
$app->enqueueMessage(JText::_('COM_J2XML_MSG_UPLOAD_ERROR'), 'error');
|
|
return false;
|
|
}
|
|
$filename = $file['tmp_name'];
|
|
$x = explode(".", $file['name']);
|
|
$extn = end($x);
|
|
break;
|
|
case 2:
|
|
if (!($filename = $this->input->get('j2xml_url', null, 'URL')))
|
|
{
|
|
$app->enqueueMessage(JText::_('COM_J2XML_MSG_UPLOAD_ERROR'), 'error');
|
|
return false;
|
|
}
|
|
$x = explode(".", $filename);
|
|
$extn = end($x);
|
|
break;
|
|
case 3:
|
|
if ($filename = $this->input->get('j2xml_server', null))
|
|
{
|
|
$filename = JPATH_ROOT . '/' . $filename;
|
|
}
|
|
else
|
|
{
|
|
$app->enqueueMessage(JText::_('COM_J2XML_MSG_UPLOAD_ERROR'), 'error');
|
|
return false;
|
|
}
|
|
$x = explode(".", $filename);
|
|
$extn = end($x);
|
|
break;
|
|
default:
|
|
$app->enqueueMessage(JText::_('COM_J2XML_MSG_UPLOAD_ERROR'), 'error');
|
|
return false;
|
|
}
|
|
if (!($data = implode(gzfile($filename))))
|
|
{
|
|
$contextOptions = array(
|
|
'ssl' => array(
|
|
'verify_peer' => false,
|
|
'verify_peer_name' => false
|
|
)
|
|
);
|
|
|
|
$data = file_get_contents($filename, false, stream_context_create($arrContextOptions));
|
|
}
|
|
$data = mb_convert_encoding($data, 'UTF-8');
|
|
|
|
$dispatcher = \JEventDispatcher::getInstance();
|
|
JPluginHelper::importPlugin('j2xml');
|
|
|
|
$results = $dispatcher->trigger('onContentPrepareData', array(
|
|
'com_j2xml.cpanel',
|
|
&$data
|
|
));
|
|
$data = strstr($data, '<?xml version="1.0" ');
|
|
|
|
$data = J2XMLHelper::stripInvalidXml($data);
|
|
if (!defined('LIBXML_PARSEHUGE'))
|
|
{
|
|
define(LIBXML_PARSEHUGE, 524288);
|
|
}
|
|
$xml = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_PARSEHUGE);
|
|
|
|
if (!$xml)
|
|
{
|
|
$errors = libxml_get_errors();
|
|
foreach ($errors as $error)
|
|
{
|
|
$msg = $error->code . ' - ' . $error->message . ' at line ' . $error->line;
|
|
switch ($error->level)
|
|
{
|
|
default:
|
|
case LIBXML_ERR_WARNING:
|
|
$app->enqueueMessage($msg, 'message');
|
|
break;
|
|
case LIBXML_ERR_ERROR:
|
|
$app->enqueueMessage($msg, 'notice');
|
|
break;
|
|
case LIBXML_ERR_FATAL:
|
|
$app->enqueueMessage($msg, 'error');
|
|
break;
|
|
}
|
|
}
|
|
libxml_clear_errors();
|
|
$this->setRedirect('index.php?option=com_j2xml');
|
|
}
|
|
|
|
if (!$xml)
|
|
{
|
|
$app->enqueueMessage(JText::sprintf('LIB_J2XML_MSG_FILE_FORMAT_UNKNOWN'), 'error');
|
|
return false;
|
|
}
|
|
|
|
$results = $dispatcher->trigger('onBeforeImport', array(
|
|
'com_j2xml.cpanel',
|
|
&$xml
|
|
));
|
|
|
|
if (!$xml)
|
|
{
|
|
$app->enqueueMessage(JText::sprintf('LIB_J2XML_MSG_FILE_FORMAT_UNKNOWN'), 'error');
|
|
}
|
|
else
|
|
{
|
|
$xmlVersion = $xml['version'];
|
|
$version = explode(".", $xmlVersion);
|
|
$xmlVersionNumber = $version[0] . substr('0' . $version[1], strlen($version[1]) - 1) . substr('0' . $version[2], strlen($version[2]) - 1);
|
|
|
|
JPluginHelper::importPlugin('j2xml');
|
|
$results = JFactory::getApplication()->triggerEvent('onValidateData', array(&$xml, $params));
|
|
|
|
$importer = class_exists('eshiol\J2xmlpro\Importer') ? new eshiol\J2xmlpro\Importer() : new eshiol\J2xml\Importer();
|
|
if ($importer->isSupported($xmlVersionNumber) || in_array(true, $results, true))
|
|
{
|
|
$iparams = new \JRegistry();
|
|
$iparams->set('filename', $filename);
|
|
$iparams->set('version', (string) $xml['version']);
|
|
|
|
$iparams->set('categories', $params->get('import_categories', 1));
|
|
$iparams->set('contacts', $params->get('import_contacts', 1));
|
|
$iparams->set('content', $params->get('import_content', 2));
|
|
$iparams->set('fields', $params->get('import_fields', 1));
|
|
$iparams->set('images', $params->get('import_images', 1));
|
|
if ($params->get('keep_category', 1) == 2)
|
|
{
|
|
$iparams->set('content_category_forceto', $params->get('category'));
|
|
}
|
|
$iparams->set('keep_access', $params->get('keep_access', 0));
|
|
$iparams->set('keep_attribs', $params->get('keep_attribs', 1));
|
|
$iparams->set('keep_author', $params->get('keep_author', 1));
|
|
$iparams->set('keep_frontpage', $params->get('keep_frontpage', 1));
|
|
$iparams->set('keep_id', $params->get('keep_id', 0));
|
|
$iparams->set('keep_metadata', $params->get('keep_metadata', 1));
|
|
$iparams->set('keep_rating', $params->get('keep_rating', 1));
|
|
$iparams->set('keep_state', $params->get('keep_state', 2));
|
|
$iparams->set('keep_user_attribs', $params->get('keep_user_attribs', 1));
|
|
$iparams->set('keep_user_id', $params->get('keep_user_id', 0));
|
|
$iparams->set('linksourcefile', $params->get('linksourcefile', 0));
|
|
$iparams->set('reduild_links', $params->get('reduild_links', 0));
|
|
$iparams->set('superusers', $params->get('import_superusers', 0));
|
|
$iparams->set('tags', $params->get('import_tags', 1));
|
|
$iparams->set('usernotes', $params->get('import_usernotes', 0));
|
|
$iparams->set('users', $params->get('import_users', 1));
|
|
$iparams->set('viewlevels', $params->get('import_viewlevels', 1));
|
|
$iparams->set('weblinks', $params->get('import_weblinks', 1));
|
|
$iparams->set('keep_data', $params->get('keep_data', 0));
|
|
|
|
// set_time_limit(120);
|
|
try
|
|
{
|
|
$importer->import($xml, $iparams);
|
|
}
|
|
catch (\Exception $ex)
|
|
{
|
|
JLog::add(JText::sprintf('LIB_J2XML_MSG_USERGROUP_ERROR', $ex->getMessage()), JLog::ERROR, 'lib_j2xml');
|
|
$this->app->redirect('index.php?option=com_j2xml');
|
|
return;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
$app->enqueueMessage(JText::sprintf('LIB_J2XML_MSG_FILE_FORMAT_NOT_SUPPORTED', $xmlVersion),'error');
|
|
}
|
|
}
|
|
$this->setRedirect('index.php?option=com_j2xml');
|
|
}
|
|
} |