Current File : /home/pacjaorg/.trash/administrator/components/com_hikashop/controllers/update.php |
<?php
/**
* @package HikaShop for Joomla!
* @version 4.4.0
* @author hikashop.com
* @copyright (C) 2010-2020 HIKARI SOFTWARE. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class updateController extends HikashopBridgeController {
function __construct($config = array()){
parent::__construct($config);
$this->modify_views[] = 'wizard';
$this->modify[] = 'wizard_save';
$this->registerDefaultTask('update');
$this->display[] = 'post_install';
$this->modify[] = 'process_data_save';
}
function install(){
hikashop_setTitle('HikaShop','heartbeat','update');
$newConfig = new stdClass();
$newConfig->installcomplete = 1;
$config = hikashop_config();
$config->save($newConfig);
$updateHelper = hikashop_get('helper.update');
$updateHelper->addJoomfishElements();
$updateHelper->addDefaultData();
$updateHelper->createUploadFolders();
$lang = JFactory::getLanguage();
$code = $lang->getTag();
$updateHelper->installMenu($code);
if($code != 'en-GB') {
$updateHelper->installMenu('en-GB');
}
$updateHelper->installTags();
$updateHelper->addUpdateSite();
$updateHelper->installExtensions();
if(!empty($updateHelper->freshinstall)){
$app = JFactory::getApplication();
$app->redirect(hikashop_completeLink('update&task=wizard', false, true));
}
$bar = JToolBar::getInstance('toolbar');
$bar->appendButton( 'Link', 'dashboard', JText::_('HIKASHOP_CPANEL'), hikashop_completeLink('dashboard') );
$this->_iframe(HIKASHOP_UPDATEURL.'install&fromversion='.hikaInput::get()->getCmd('fromversion'));
}
function update(){
$config = hikashop_config();
if(!hikashop_isAllowed($config->get('acl_update_about_view','all'))){
hikashop_display(JText::_('RESSOURCE_NOT_ALLOWED'),'error');
return false;
}
hikashop_setTitle(JText::_('UPDATE_ABOUT'),'sync','update');
$bar = JToolBar::getInstance('toolbar');
$bar->appendButton( 'Link', 'dashboard', JText::_('HIKASHOP_CPANEL'), hikashop_completeLink('dashboard') );
return $this->_iframe(HIKASHOP_UPDATEURL.'update');
}
function _iframe($url){
$app = JFactory::getApplication();
if(hikashop_isClient('administrator')){
$config =& hikashop_config();
$menu_style = $config->get('menu_style','title_bottom');
if(HIKASHOP_J30) $menu_style = 'content_top';
if($menu_style=='content_top'){
echo hikashop_getMenu('',$menu_style);
}
}
if(hikashop_isSSL())
$url = str_replace('http://', 'https://', $url);
?>
<div id="hikashop_div">
<iframe allowtransparency="true" scrolling="auto" height="450px" frameborder="0" width="100%" name="hikashop_frame" id="hikashop_frame" src="<?php echo $url.'&level='.$config->get('level').'&component=hikashop&version='.$config->get('version'); ?>"></iframe>
</div>
<?php
}
function wizard(){
$app = JFactory::getApplication();
if(!hikashop_isClient('administrator')){
return;
}
$lang = JFactory::getLanguage();
$code = $lang->getTag();
$path = hikashop_getLanguagePath(JPATH_ROOT).DS.$code.DS.$code.'.com_hikashop.ini';
jimport('joomla.filesystem.file');
if(!JFile::exists($path)){
$url = HIKASHOP_UPDATEURL.'languageload&raw=1&code='.$code;
$data = '';
if(function_exists('curl_version')){
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
}else{
$data = file_get_contents($url);
}
if(!empty($data)){
$result = JFile::write($path, $data);
if(!$result){
$updateHelper = hikashop_get('helper.update');
$updateHelper->installMenu($code);
hikashop_display(JText::sprintf('FAIL_SAVE',$path),'error');
} else {
$lang->load(HIKASHOP_COMPONENT, JPATH_SITE, $code, true);
}
}else{
hikashop_display(JText::sprintf('CANT_GET_LANGUAGE_FILE_CONTENT',$path),'error');
}
}
hikaInput::get()->set( 'layout', 'wizard' );
return parent::display();
}
function wizard_save() {
$layoutType = hikaInput::get()->getVar('layout_type');
$currency = hikaInput::get()->getVar('currency');
$taxName = hikaInput::get()->getVar('tax_name');
$taxRate = hikaInput::get()->getVar('tax_rate');
$addressCountry = hikaInput::get()->getVar('address_country');
$data = hikaInput::get()->get('data', array(), 'array');
$addressState = (!empty($data['address']['address_state'])) ? ($data['address']['address_state']) : '';
$shopAddress = hikaInput::get()->getVar('shop_address');
$paypalEmail = hikaInput::get()->getVar('paypal_email');
$productType = hikaInput::get()->getVar('product_type');
$dataExample = hikaInput::get()->getVar('data_sample');
$ratePlugin = hikashop_import('hikashop','rates');
if($ratePlugin){
$ratePlugin->updateRates();
}
$db = JFactory::getDBO();
foreach($_POST as $key => $data){
if($data == '0') continue;
if(preg_match('#menu#',$key)){ // menu
if(preg_match('#categories#',$key)){
$alias = 'hikashop-menu-for-categories-listing';
}else{
$alias = 'hikashop-menu-for-products-listing';
}
$db->setQuery('SELECT * FROM '.hikashop_table('menu',false).' WHERE `alias` = '.$db->Quote($alias));
$data = $db->loadAssoc();
$db->setQuery('SELECT `menutype` FROM '.hikashop_table('menu',false).' WHERE `home` = 1');
$menutype = $db->loadResult();
$data['menutype'] = $menutype;
$menuTable = JTable::getInstance('Menu', 'JTable', array());
if(is_object($menuTable)){
$menuTable->save($data);
if(method_exists($menuTable,'rebuild')){
$menuTable->rebuild();
}
}
}elseif(preg_match('#module#',$key)){ // module
if(preg_match('#categories#',$key)){
$db->setQuery('UPDATE '.hikashop_table('modules',false).' SET `published` = 1 WHERE `title` = '.$db->Quote('Categories on 2 levels'));
$db->execute();
}
}
}
$db->setQuery('SELECT `config_value` FROM '.hikashop_table('config').' WHERE `config_namekey` = "default_params"');
$oldDefaultParams = $db->loadResult();
$oldDefaultParams = hikashop_unserialize(base64_decode($oldDefaultParams));
$oldDefaultParams['layout_type'] = preg_replace('#listing_#','',$layoutType);
$defaultParams = base64_encode(serialize($oldDefaultParams));
if($addressCountry == 'country_United_States_of_America_223')
$main_zone = $addressState;
else
$main_zone = $addressCountry;
$zoneClass = hikashop_get('class.zone');
$zone = $zoneClass->get($main_zone);
$db->setQuery('REPLACE INTO '.hikashop_table('config').' (config_namekey, config_value) VALUES ("main_tax_zone", '.$db->Quote($zone->zone_id).'), ("store_address", '.$db->Quote($shopAddress).'), ("main_currency", '.$db->Quote($currency).'), ("default_params", '.$db->Quote($defaultParams).')');
$db->execute();
$db->setQuery('UPDATE '.hikashop_table('field').' SET `field_default` = '.$db->Quote($addressState).' WHERE field_namekey = "address_state"');
$db->execute();
$db->setQuery('UPDATE '.hikashop_table('field').' SET `field_default` = '.$db->Quote($addressCountry).' WHERE field_namekey = "address_country"');
$db->execute();
$import_language = hikaInput::get()->getVar('import_language');
if($import_language != '0'){
if(preg_match('#_#',$import_language)){
$languages = explode('_',$import_language);
}else{
$languages = array($import_language);
}
$updateHelper = hikashop_get('helper.update');
foreach($languages as $code){
$path = hikashop_getLanguagePath(JPATH_ROOT).DS.$code.DS.$code.'.com_hikashop.ini';
jimport('joomla.filesystem.file');
if(!JFile::exists($path)) {
$url = str_replace('https://','http://',HIKASHOP_UPDATEURL.'languageload&raw=1&code='.$code);
$ret = $this->retrieveFile($url, $path);
if($ret === false) {
hikashop_display(JText::sprintf('CANT_GET_LANGUAGE_FILE_CONTENT',$path),'error');
} elseif($ret === 1) {
$updateHelper->installMenu($code);
hikashop_display(JText::_('HIKASHOP_SUCC_SAVED'),'success');
} else {
hikashop_display(JText::sprintf('FAIL_SAVE',$path),'error');
}
}
}
}
$install_eu_taxes = hikaInput::get()->getVar('install_eu_taxes');
if($install_eu_taxes === '1') {
$jconfig = JFactory::getConfig();
$tmp_dest = $jconfig->get('tmp_path');
$url = str_replace('https://','http://',HIKASHOP_URL.'index.php?option=com_updateme&ctrl=download&plugin=tax_europe');
$file = JPath::clean($tmp_dest . DS .'european_taxes.zip');
$ret = $this->retrieveFile($url, $file, true);
if($ret === 1) {
if(HIKASHOP_J30)
jimport('joomla.archive.archive');
else
jimport('joomla.filesystem.archive');
if(HIKASHOP_J40)
$archiveClass = new Joomla\Archive\Archive();
else
$archiveClass = new JArchive();
$zip = $archiveClass->getAdapter('zip');
$path = JPath::clean($tmp_dest . DS . 'eu_taxes' . DS); // pathinfo(realpath($file), PATHINFO_DIRNAME);
if(!JFile::exists($path))
JFolder::create($path);
$ret = $zip->extract($file, $path);
if($ret) {
$eu_tax_file = JPath::clean($path . '/install.php');
if(!JFile::exists($eu_tax_file))
$ret = false;
}
if(!$ret) {
hikashop_display(JText::sprintf('WIZZARD_DATA_ERROR', 'unzipping', 'index.php?option=com_hikashop&ctrl=update&task=wizard'), 'error');
} else {
try {
include_once($eu_tax_file);
} catch(Exception $e) {}
if(class_exists('pkg_tax_europeInstallerScript')) {
$tax_install = new pkg_tax_europeInstallerScript();
$tax_install->redirect = false;
$tax_install->preflight(null, null);
$tax_install->setMainCountry(null);
}
}
if(JFile::exists($path) && strpos($path, 'eu_taxes') !== false)
JFolder::delete($path);
if(JFile::exists($file))
JFile::delete($file);
}
}
if(isset($taxRate) && (!empty($taxRate) || $taxRate != '0')){
$taxRate = (float)$taxRate / 100;
$db->setQuery('REPLACE INTO '.hikashop_table('tax').' (tax_namekey,tax_rate) VALUES ('.$db->Quote($taxName).','.(float)$taxRate.')');
$db->execute();
$db->setQuery('SELECT `taxation_id` FROM '.hikashop_table('taxation').' ORDER BY `taxation_id` DESC LIMIT 0,1');
$maxId = $db->loadResult();
if(is_null($maxId)){
$maxId = 1;
}else{
$maxId = (int)$maxId + 1 ;
}
$empty = $db->Quote('');
$tax = array(
'taxation_id' => (int)$maxId,
'zone_namekey' => $empty,
'category_namekey' => $db->Quote('default_tax'),
'tax_namekey' => $db->Quote($taxName),
'taxation_published' => 1,
'taxation_type' => $empty,
'taxation_access' => $db->Quote('all'),
'taxation_cumulative' => 0,
'taxation_post_code' => $empty,
'taxation_date_start' => 0,
'taxation_date_end' => 0,
'taxation_internal_code' => 0,
'taxation_note' => $empty,
);
if($addressCountry == 'country_United_States_of_America_223')
$tax['zone_namekey'] = $db->Quote($addressState);
else
$tax['zone_namekey'] = $db->Quote($addressCountry);
$query = 'INSERT INTO '.hikashop_table('taxation').' ('.implode(',',array_keys($tax)).') VALUES ('.implode(',',$tax).')';
$db->setQuery($query);
$db->execute();
}
if(isset($paypalEmail) && !empty($paypalEmail)){
$pluginData = array(
'payment' => array(
'payment_name' => 'PayPal',
'payment_published' => '1',
'payment_images' => 'MasterCard,VISA,Credit_card,PayPal',
'payment_price' => '',
'payment_params' => array(
'url' => 'https://www.paypal.com/cgi-bin/webscr',
'email' => $paypalEmail,
),
'payment_zone_namekey' => '',
'payment_access' => 'all',
'payment_id' => '0',
'payment_type' => 'paypal',
),
);
hikaInput::get()->set('name','paypal');
hikaInput::get()->set('plugin_type','payment');
hikaInput::get()->set('data',$pluginData);
$pluginsController = hikashop_get('controller.plugins');
$pluginsController->store(true);
}
if(isset($productType) && !empty($productType)){
if($productType == 'real'){
$forceShipping = 1;
}else{
$forceShipping = 0;
}
$db->setQuery('REPLACE INTO '.hikashop_table('config').' (config_namekey, config_value) VALUES ("force_shipping", '.(int)$forceShipping.')');
$db->execute();
if($productType == 'virtual'){
$product_type = 'virtual';
}else{
$product_type = 'shippable';
}
$db->setQuery('REPLACE INTO '.hikashop_table('config').' (config_namekey, config_value) VALUES ("default_product_type", '.(int)$product_type.')');
$db->execute();
}
if ($dataExample==1) //Install data sample
{
$app = JFactory::getApplication();
$app->setUserState('WIZARD_DATA_SAMPLE_PAYPAL',$paypalEmail);
$app->redirect('index.php?option=com_hikashop&ctrl=update&task=process_data_save&step=1&'.hikashop_getFormToken().'=1');
}
$url = 'index.php?option=com_hikashop&ctrl=product&task=add';
$this->setRedirect($url);
}
private function retrieveFile($url, $dest) {
$data = '';
if(function_exists('curl_version')){
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
} else {
$data = file_get_contents($url);
}
if(empty($data))
return false;
jimport('joomla.filesystem.file');
$result = JFile::write($dest, $data);
return ($result) ? 1 : 0;
}
function state(){
hikaInput::get()->set( 'layout', 'state' );
return parent::display();
}
function post_install(){
$this->_iframe(HIKASHOP_UPDATEURL.'install&fromversion='.hikaInput::get()->getCmd('fromversion'));
}
function process_data_save() {
if( !isset($_GET['step']) )
return;
$step = hikaInput::get()->getInt('step');
$url = 'index.php?option=com_hikashop&ctrl=update&task=process_data_save&'.hikashop_getFormToken().'=1&step='.$step;
$redirect = 'index.php?option=com_hikashop&ctrl=product&task=add';
$error = false;
$app = JFactory::getApplication();
$jconfig = JFactory::getConfig();
$tmp_dest = $jconfig->get('tmp_path');
$urlsrc = "http://www.hikashop.com/sampledata/dataexample.zip"; //server URL
$destination = $tmp_dest.'/dataexample.zip'; //HIKASHOP_ROOT.'tmp\dataexample.zip';
$path = pathinfo(realpath($destination), PATHINFO_DIRNAME);
switch ($step)
{
case 1: //Download zip
if(!function_exists('curl_init')){
$app = JFactory::getApplication();
$app->enqueueMessage(JText::sprintf('CURL_ERROR',$url),'error');
$error = true;
}
else
{
$getContent = false;
$curl = curl_init ();
curl_setopt($curl, CURLOPT_TIMEOUT, 50);
curl_setopt ($curl, CURLOPT_URL, $urlsrc);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_BINARYTRANSFER,1);
curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1);
$rawdata = curl_exec($curl);
$httpcode=curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($httpcode!=200)
$getContent = true;
curl_close ($curl);
if(file_exists($destination))
@unlink($destination);
$fhandle = fopen($destination, "x");
try {
fwrite($fhandle, $rawdata);
fclose($fhandle);
} catch(Exception $e) {
echo 'fail : '.$e->getMessage();
$getContent = true;
}
if ($getContent)
if(!file_put_contents($destination, file_get_contents($urlsrc)))
{
$app->enqueueMessage(JText::sprintf('WIZZARD_DATA_ERROR','downloading',$url), 'error');
$error = true;
}
}
break;
case 2 : //Unzip
if(HIKASHOP_J30){
jimport('joomla.archive.archive');
}else{
jimport('joomla.filesystem.archive');
}
if(HIKASHOP_J40)
$archiveClass = new Joomla\Archive\Archive();
else
$archiveClass = new JArchive();
$zip = $archiveClass->getAdapter('zip');
if(!$zip->extract($destination,$path))
{
$app->enqueueMessage(JText::sprintf('WIZZARD_DATA_ERROR','unzipping',$url), 'error');
$error = true;
}
break;
case 3 ://Copy
$config = hikashop_config();
jimport('joomla.filesystem.folder');
jimport( 'joomla.filesystem.file' );
$uploadSecudeFolder = str_replace('/','\\',$config->get('uploadsecurefolder','media/com_hikashop/upload/safe/'));
$src = $path.'\dataexample\upload\safe\\';
$dst = HIKASHOP_ROOT.$uploadSecudeFolder;
$files = scandir($src,1);
foreach($files as $f){
if($f!='..' && $f!='.' && !file_exists($dst.$f)){
if(is_dir($src.$f)){
$ret = JFolder::create($dst.$f);
}else{
$ret = JFile::copy($src.$f, $dst.$f, '', true); //Overwrite
}
if (!$ret)
$app->enqueueMessage(JText::sprintf('WIZZARD_DATA_ERROR_COPY',$f,$url), 'error');
}
}
$uploadFolder = str_replace('/','\\',$config->get('uploadfolder','images/com_hikashop/upload/'));
$src = $path.'\dataexample\upload\\';
$dst = HIKASHOP_ROOT.$uploadFolder;
$files = scandir($src,1);
foreach($files as $f){
if($f!='..' && $f!='.' && !file_exists($dst.$f)){
if(is_dir($src.$f)){
$ret = JFolder::create($dst.$f);
}else{
$ret = JFile::copy($src.$f, $dst.$f, '', true); //Overwrite
}
if (!$ret)
$app->enqueueMessage(JText::sprintf('WIZZARD_DATA_ERROR_COPY',$f,$url), 'error');
}
}
break;
case 4 : //exec script
$fh = fopen($tmp_dest.'/dataexample/script.sql', 'r+') or die("Can't open file tmp/dataexample/script.sql");
$data = explode("\r\n",fread($fh,filesize($tmp_dest.'/dataexample/script.sql')));
$db = JFactory::getDBO();
foreach ($data as $d)
{
if (!empty($d))
{
try {
$db->setQuery($d);
$db->execute();
} catch(Exception $e) {
echo 'Fail query : '.$e->getMessage();
$error = true;
$getContent = true;
}
}
}
$paypalEmail = $app->getUserState('WIZARD_DATA_SAMPLE_PAYPAL');
if (!empty($paypalEmail))
{
$db->setQuery("UPDATE `#__hikashop_payment` SET `payment_published` = '0'");
$db->execute();
$db->setQuery("UPDATE `#__hikashop_payment` SET `payment_published` = '1' WHERE `payment_id` = '1'");
$db->execute();
}
else
{
$db->setQuery("UPDATE `#__hikashop_payment` SET `payment_published` = '1'");
$db->execute();
}
$categoryClass = hikashop_get('class.category');
$query = 'SELECT category_namekey,category_left,category_right,category_depth,category_id,category_parent_id FROM `#__hikashop_category` ORDER BY category_left ASC';
$db->setQuery($query);
$categories = $db->loadObjectList();
$root = null;
$categoryClass->categories = array();
foreach($categories as $cat)
{
$categoryClass->categories[$cat->category_parent_id][]=$cat;
if(empty($cat->category_parent_id))
$root = $cat;
}
$categoryClass->rebuildTree($root,0,1);
break;
case 5 : //Delete everything (try catch ?)
jimport( 'joomla.filesystem.folder' );
jimport( 'joomla.filesystem.file' );
if (!JFolder::delete($path.'\dataexample\\') or !JFile::delete($path.'\dataexample.zip'))
{
$app->enqueueMessage(JText::sprintf('WIZZARD_DATA_ERROR','deleting',$url), 'error');
$error = true;
}
break;
default:
$error = true;
break;
}
$step++;
if (!$error)
$redirect = 'index.php?option=com_hikashop&ctrl=update&task=process_data_save&'.hikashop_getFormToken().'=1&step='.$step;
if ($step > 5)
$app->enqueueMessage(JText::_('WIZARD_DATA_END'));
$app->redirect($redirect);
}
}