%PDF- %PDF-
| Direktori : /home1/lightco1/www/administrator/components/com_virtuemart/install/ |
| Current File : //home1/lightco1/www/administrator/components/com_virtuemart/install/script.virtuemart.php |
<?php
/**
* VirtueMart script file
*
* This file is executed during install/upgrade and uninstall
*
* @author Max Milbers, RickG, impleri
* @package VirtueMart
*/
defined('_JEXEC') or die('Restricted access');
//Maybe it is possible to set this within the xml file note by Max Milbers
$memory_limit = (int) substr(ini_get('memory_limit'),0,-1);
if(!empty($memory_limit) and $memory_limit<128) @ini_set( 'memory_limit', '128M' );
$maxtime = (int) ini_get('max_execution_time');
if($maxtime < 140){
@ini_set( 'max_execution_time', '140' );
}
defined('DS') or define('DS', DIRECTORY_SEPARATOR);
defined('VMPATH_ROOT') or define('VMPATH_ROOT', JPATH_ROOT);
defined('VMPATH_ADMIN') or define('VMPATH_ADMIN', VMPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart');
// hack to prevent defining these twice in 1.6 installation
if (!defined('_VM_SCRIPT_INCLUDED')) {
define('_VM_SCRIPT_INCLUDED', true);
/**
* VirtueMart custom installer class
*/
class com_virtuemartInstallerScript {
/**
* method must be called after preflight
* Sets the paths and loads VMFramework config
*/
public function loadVm() {
// $this->path = JInstaller::getInstance()->getPath('extension_administrator');
if(empty($this->path)){
$this->path = VMPATH_ADMIN;
}
if(!class_exists('VmConfig')) require_once($this->path .'/helpers/config.php');
VmConfig::loadConfig(false,true);
if(!class_exists('VmTable')) require_once($this->path .'/helpers/vmtable.php');
if(!class_exists('VmModel')) require_once($this->path .'/helpers/vmmodel.php');
VmTable::addIncludePath($this->path.DS.'tables');
VmModel::addIncludePath($this->path.DS.'models');
}
public function checkIfUpdate(){
$update = false;
$this->_db = JFactory::getDBO();
$q = 'SHOW TABLES LIKE "'.$this->_db->getPrefix().'virtuemart_adminmenuentries"'; //=>jos_virtuemart_shipment_plg_weight_countries
$this->_db->setQuery($q);
if($this->_db->loadResult()){
$q = "SELECT count(id) AS idCount FROM `#__virtuemart_adminmenuentries`";
$this->_db->setQuery($q);
$result = $this->_db->loadResult();
if (empty($result)) {
$update = false;
} else {
$update = true;
}
} else {
$update = false;
}
$this->update = $update;
return $update;
}
/**
* Pre-process method (e.g. install/upgrade) and any header HTML
*
* @param string Process type (i.e. install, uninstall, update)
* @param object JInstallerComponent parent
* @return boolean True if VM exists, null otherwise
*/
public function preflight ($type, $parent=null) {
//We want disable the redirect in the installation process
if(version_compare(JVERSION,'1.6.0','ge') and version_compare(JVERSION,'3.0.0','le')) {
$this->_db = JFactory::getDbo();
$q = 'SELECT extension_id FROM #__extensions WHERE `type` = "component" AND `element` = "com_virtuemart" ';
$this->_db ->setQuery($q);
$extensionId = $this->_db->loadResult();
if($extensionId){
$q = 'DELETE FROM `#__menu` WHERE `component_id` = "'.$extensionId.'" AND `client_id`="1" ';
$this->_db -> setQuery($q);
$this->_db -> execute();
}
/*else {
$q = 'DELETE FROM `#__menu` WHERE `menutype` = "main" AND `type` = "component" AND `client_id`="1"
AND `link`="%option=com_virtuemart%" )';
}*/
}
}
/**
* Install script
* Triggers after database processing
*
* @param object JInstallerComponent parent
* @return boolean True on success
*/
public function install ($loadVm = true) {
if($loadVm) $this->loadVm();
if($this->checkIfUpdate()){
return $this->update($loadVm);
}
$_REQUEST['install'] = 1;
if(!class_exists('JFile')) require(VMPATH_LIBS.DS.'joomla'.DS.'filesystem'.DS.'file.php');
if(!class_exists('JFolder')) require(VMPATH_LIBS.DS.'joomla'.DS.'filesystem'.DS.'folder.php');
$this -> joomlaSessionDBToMediumText();
// install essential and required data
// should this be covered in install.sql (or 1.6's JInstaller::parseSchemaUpdates)?
// if(!class_exists('VirtueMartModelUpdatesMigration')) require(VMPATH_ADMIN.DS.'models'.DS.'updatesMigration.php');
$params = JComponentHelper::getParams('com_languages');
$lang = $params->get('site', 'en-GB');//use default joomla
$lang = strtolower(strtr($lang,'-','_'));
if(!class_exists('VmModel')) require $this->path.DS.'helpers'.DS.'vmmodel.php';
if(!class_exists('VirtueMartModelUpdatesMigration')) require($this->path . DS . 'models' . DS . 'updatesmigration.php');
$model = VmModel::getModel('updatesmigration');
$model->execSQLFile($this->path.DS.'install'.DS.'install.sql');
$model->execSQLFile($this->path.DS.'install'.DS.'install_essential_data.sql');
$model->execSQLFile($this->path.DS.'install'.DS.'install_required_data.sql');
$model->setStoreOwner();
//copy sampel media
$src = $this->path .DS. 'assets' .DS. 'images' .DS. 'vmsampleimages';
// if(version_compare(JVERSION,'1.6.0','ge')) {
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'shipment');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'payment');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'category');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'category'.DS.'resized');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'manufacturer');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'manufacturer'.DS.'resized');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'product');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'product'.DS.'resized');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'forSale');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'forSale'.DS.'invoices');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'forSale'.DS.'resized');
$this->createIndexFolder(VMPATH_ROOT .DS. 'images'.DS.'stories'.DS.'virtuemart'.DS.'typeless');
$dst = VMPATH_ROOT .DS. 'images' .DS. 'stories' .DS. 'virtuemart';
$this->recurse_copy($src,$dst);
if(!class_exists('GenericTableUpdater')) require($this->path . DS . 'helpers' . DS . 'tableupdater.php');
$updater = new GenericTableUpdater();
$updater->createLanguageTables();
$this->checkAddDefaultShoppergroups();
$model->updateJoomlaUpdateServer('component','com_virtuemart',$this->path.DS.'virtuemart.xml');
$this->deleteSwfUploader();
$this->displayFinished(false);
//include($this->path.DS.'install'.DS.'install.virtuemart.html.php');
// perhaps a redirect to updatesMigration here rather than the html file?
// $parent->getParent()->setRedirectURL('index.php?option=com_virtuemart&view=updatesMigration');
return true;
}
/**
* creates a folder with empty html file
*
* @author Max Milbers
*
*/
public function createIndexFolder($path){
if(JFolder::create($path)) {
/*if(!JFile::exists($path .DS. 'index.html')){
JFile::copy(VMPATH_ROOT.DS.'components'.DS.'index.html', $path .DS. 'index.html');
}*/
return true;
}
return false;
}
/**
* Update script
* Triggers after database processing
*
* @param object JInstallerComponent parent
* @return boolean True on success
*/
public function update ($loadVm = true) {
if($loadVm) $this->loadVm();
if(!$this->checkIfUpdate()){
return $this->install($loadVm);
}
if(!class_exists('JFile')) require(VMPATH_LIBS.DS.'joomla'.DS.'filesystem'.DS.'file.php');
if(!class_exists('JFolder')) require(VMPATH_LIBS.DS.'joomla'.DS.'filesystem'.DS.'folder.php');
//Delete Cache
$cache = JFactory::getCache();
$cache->clean();
$this->_db = JFactory::getDBO();
if(empty($this->path)) $this->path = VMPATH_ADMIN;
$params = JComponentHelper::getParams('com_languages');
$lang = $params->get('site', 'en-GB');//use default joomla
$lang = strtolower(strtr($lang,'-','_'));
if(!class_exists('VmModel')) require $this->path.DS.'helpers'.DS.'vmmodel.php';
if(!class_exists('VirtueMartModelUpdatesMigration')) require($this->path . DS . 'models' . DS . 'updatesmigration.php');
$model = VmModel::getModel('updatesmigration');
//$model = new VirtueMartModelUpdatesMigration(); //JModel::getInstance('updatesmigration', 'VirtueMartModel');
$model->execSQLFile($this->path.DS.'install'.DS.'install.sql');
$this -> joomlaSessionDBToMediumText();
$this->updateToVm3 = $this->isUpdateToVm3();
$this->alterTable('#__virtuemart_product_prices',
array(
'product_price_vdate' => '`product_price_publish_up` DATETIME NULL DEFAULT NULL AFTER `product_currency`',
'product_price_edate' => '`product_price_publish_down` DATETIME NULL DEFAULT NULL AFTER `product_price_publish_up`'
));
$this->alterTable('#__virtuemart_customs',array(
'custom_field_desc' => '`custom_desc` char(255) COMMENT \'description or unit\'',
));
$this->alterTable('#__virtuemart_product_customfields',array(
'custom_value' => ' `customfield_value` varchar(2500) COMMENT \'field value\'',
'custom_price' => ' `customfield_price` DECIMAL(15,6) COMMENT \'price\'',
'custom_param' => ' `customfield_params` varchar(17000) NULL DEFAULT NULL',
'idx_custom_value' => ' INDEX `idx_published` (`published`)'
));
$this->alterTable('#__virtuemart_userfields',array(
'params' => '`userfield_params` varchar(17500) NOT NULL DEFAULT "" COMMENT \'userfield params\'',
));
$this->alterTable('#__virtuemart_orders',array(
'customer_note' => '`oc_note` varchar(20000) NOT NULL DEFAULT "" COMMENT \'old customer notes\'',
));
if(!class_exists('GenericTableUpdater')) require($this->path . DS . 'helpers' . DS . 'tableupdater.php');
$updater = new GenericTableUpdater();
$updater->updateMyVmTables();
$result = $updater->createLanguageTables();
$this->checkAddDefaultShoppergroups();
//$this->adjustDefaultOrderStates();
$this->fixOrdersVendorId();
$this->updateAdminMenuEntries();
if($this->updateToVm3){
$this->migrateCustoms();
$this->checkUserfields();
}
//copy sampel media
$src = $this->path .DS. 'assets' .DS. 'images' .DS. 'vmsampleimages';
if(JFolder::exists($src)){
$dst = VMPATH_ROOT .DS. 'images' .DS. 'stories' .DS. 'virtuemart';
$this->recurse_copy($src,$dst);
}
$model->updateJoomlaUpdateServer('component','com_virtuemart', $this->path.DS.'virtuemart.xml');
//fix joomla BE menu
//$model = VmModel::getModel('updatesmigration');
//$model->checkFixJoomlaBEMenuEntries();
$this->deleteSwfUploader();
if($loadVm) $this->displayFinished(true);
return true;
}
private function deleteSwfUploader(){
if(JVM_VERSION>0){
if( JFolder::exists(VMPATH_ROOT. DS. 'media' .DS. 'system'. DS. 'swf')){
JFolder::delete(VMPATH_ROOT. DS. 'media' .DS. 'system'. DS. 'swf');
}
if( JFile::exists(VMPATH_ROOT. DS. 'administrator' .DS. 'language' .DS. 'en-GB'. DS. 'en-GB.com_virtuemart.sys.ini')){
JFile::delete(VMPATH_ROOT. DS. 'administrator' .DS. 'language' .DS. 'en-GB'. DS. 'en-GB.com_virtuemart.sys.ini');
}
}
}
private function isUpdateToVm3(){
if(empty($this->_db)) {
$this->_db = JFactory::getDBO();
}
$tablename = '#__virtuemart_product_customfields';
$this->_db->setQuery('SHOW FULL COLUMNS FROM `'.$tablename.'` ');
//$fullColumns = $this->_db->loadObjectList();
$columns = $this->_db->loadColumn(0);
if(in_array('custom_value',$columns) or in_array('custom_price',$columns)){
vmInfo('Upgrade of VM2 to VM3');
return true;
} else {
vmdebug('Update of VM3');
return false;
}
}
private function fixOrdersVendorId(){
$multix = Vmconfig::get('multix','none');
if( $multix == 'none'){
if(empty($this->_db)){
$this->_db = JFactory::getDBO();
}
$q = 'SELECT `virtuemart_user_id` FROM #__virtuemart_orders WHERE virtuemart_vendor_id = "0" ';
$this->_db->setQuery($q);
$res = $this->_db->loadResult();
if($res){
//vmdebug('fixOrdersVendorId ',$res);
$q = 'UPDATE #__virtuemart_orders SET `virtuemart_vendor_id`=1 WHERE virtuemart_vendor_id = "0" ';
$this->_db->setQuery($q);
$res = $this->_db->execute();
$err = $this->_db->getErrorMsg();
if(!empty($err)){
vmError('fixOrdersVendorId update orders '.$err);
}
$q = 'UPDATE #__virtuemart_order_items SET `virtuemart_vendor_id`=1 WHERE virtuemart_vendor_id = "0" ';
$this->_db->setQuery($q);
$res = $this->_db->execute();
$err = $this->_db->getErrorMsg();
if(!empty($err)){
vmError('fixOrdersVendorId update order_item '.$err);
}
}
}
}
private function adjustDefaultOrderStates(){
if(empty($this->_db)){
$this->_db = JFactory::getDBO();
}
$order_stock_handles = array('P'=>'R', 'C'=>'R', 'X'=>'A', 'R'=>'A', 'S'=>'O');
foreach($order_stock_handles as $k=>$v){
$q = 'SELECT `order_stock_handle` FROM `#__virtuemart_orderstates`';
$this->_db->setQuery($q);
$res = $this->_db->execute();
$err = $this->_db->getErrorMsg();
if(empty($res) and empty($err) ){
$q = 'UPDATE `#__virtuemart_orderstates` SET `order_stock_handle`="'.$v.'" WHERE `order_status_code`="'.$k.'" ;';
$this->_db->setQuery($q);
if(!$this->_db->execute()){
$app = JFactory::getApplication();
$app->enqueueMessage('Error: Install alterTable '.$this->_db->getErrorMsg() );
$ok = false;
}
}
}
}
private function updateAdminMenuEntries(){
$sqlfile = VMPATH_ADMIN .DS. 'install' .DS. 'install_essential_data.sql';
$db = JFactory::getDBO();
$queries = $db->splitSql(file_get_contents($sqlfile));
if (count($queries) == 0) {
vmError('SQL file has no queries!');
return false;
}
$query = trim($queries[0]);
$q = 'SELECT * FROM `#__virtuemart_adminmenuentries` ';
$db->setQuery($q);
$existing = $db->loadAssocList();
if($existing){
$queryLines = explode("\n",$query);
$oldIds = array();
foreach($queryLines as $n=>$line){
if(empty($line)){
unset($queryLines[$n]);
} else {
$line = trim($line);
if(empty($line) or strpos($line, '--' )===0){
unset($queryLines[$n]);
}
if(strpos($line, 'CREATE' )===0 or strpos( $line, 'INSERT')===0){
$open = strpos($line,'(')+1;
$close = strrpos($line,')') - $open;
$keyLine = substr($line,$open,$close);
//vmdebug('Update Admin menu entries define ',$length,$open,$close,$line,$keyLine);
$keys = explode(',',$keyLine);
} else if(strpos($line, '(' )===0){
$open = strpos($line,'(')+1;
$close = strrpos($line,')') - $open;
$valueLine = substr($line,$open,$close);
$values = explode(',',$valueLine);
foreach($existing as $entry){
$name = '\''.$entry['name'].'\'';
if($name==trim($values[3])){
//The entry exists, lets update it
$oldIds[$entry['id']] = $values;
unset($queryLines[$n]);
}
}
}
}
}
if(count($queryLines)>1){
$query = trim(implode("\n",$queryLines));
$query = substr($query,0,-1).';';
} else {
$query = false;
}
if(count($oldIds)>0){
$updateBase = 'UPDATE `#__virtuemart_adminmenuentries` SET ';
foreach($oldIds as $id=>$values){
$updateQuery = '';
foreach($keys as $index => $key){
if($key=='`id`'){
continue;
}
$value = trim($values[$index]);
if(strpos($value,'\'')===0){
$value = substr($value,1,-1);
}
$updateQuery .= $key . ' = "'.$value.'", ';
}
$updateQuery = substr($updateQuery,0,-2);
$updateQuery .= ' WHERE `id` = '.$id.';';
$db->setQuery($updateBase.$updateQuery);
if (!$db->execute()) {
vmWarn( 'JInstaller::install: '.$sqlfile.' '.vmText::_('COM_VIRTUEMART_SQL_ERROR')." ".$db->stderr(true));
$ok = false;
}
//vmdebug('Update Admin menu entries value $updateQuery',$updateBase.$updateQuery);
}
}
}
if(!empty($query)){
$db->setQuery($query);
if (!$db->execute()) {
vmWarn( 'JInstaller::install: '.$sqlfile.' '.vmText::_('COM_VIRTUEMART_SQL_ERROR')." ".$db->stderr(true));
}
}
}
private function checkUserfields(){
$model = VmModel::getModel('userfields');
$field = $model->getUserfield('customer_note','name');
$data = array ('type' => 'textarea'
, 'maxlength' => 2500
, 'cols' => 60
, 'rows' => 1
, 'name' => 'customer_note'
, 'title' => 'COM_VIRTUEMART_CNOTES_CART'
, 'description' => ''
, 'default' => ''
, 'required' => 0
, 'cart' => 1
, 'account' => 0
, 'shipment' => 0
, 'readonly' => 0
, 'published' => 1
);
if(!empty($field->virtuemart_userfield_id)) {
if($field->published){
$field->cart = 1;
$id = $model->store((array)$field);
}
} else {
$id = $model->store($data);
}
if($id) vmInfo('Created shopperfield customer_note');
$field = $model->getUserfield('tos','name');
$data = array ('type' => 'custom'
, 'name' => 'tos'
, 'title' => 'COM_VIRTUEMART_STORE_FORM_TOS'
, 'description' => ''
, 'required' => 1
, 'cart' => 1
, 'account' => 0
, 'shipment' => 0
, 'readonly' => 0
, 'published' => 1
);
if(!empty($field->virtuemart_userfield_id)) {
if($field->published){
$field->cart = 1;
$field->required = 1;
$id = $model->store((array)$field);
}
} else {
$id = $model->store($data);
}
if($id) vmInfo('Created shopperfield tos for cart and account');
$field = $model->getUserfield('agreed','name');
if($field){
$field ->published = 0;
$id = $model->store($field);
if($id) vmInfo('Disabled shopperfield agreed, replaced by tos');
}
}
private function migrateCustoms(){
$db = JFactory::getDBO();
$q = 'UPDATE `#__virtuemart_product_customfields` SET `published`= "1" WHERE `published`="0" ';
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished update published '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `field_type`='S',`is_cart_attribute`=1,`is_input`=1,`is_list`='0' WHERE `field_type`='V'";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `is_input`=1 WHERE `field_type`='M' AND `is_cart_attribute`=1";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `field_type`='S' WHERE `field_type`='I'";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `field_type`='S', `custom_value`='JYES;JNO',`is_list`='1' WHERE `field_type`='B'";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `layout_pos`='addtocart' WHERE `is_input`='1'";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `layout_pos`='ontop',`is_cart_attribute`=1 WHERE `field_type`='A'";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `layout_pos`='related_products' WHERE `field_type`='R'";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `layout_pos`='related_categories' WHERE `field_type`='Z'";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
$q = "UPDATE `#__virtuemart_customs` SET `field_type`='G' WHERE `field_type`='P'";
$db->setQuery($q);
$db->execute();
$err = $db->getErrorMsg();
if(!empty($err)){
vmError('updateCustomfieldsPublished migrateCustoms '.$err);
}
}
/**
* @author Max Milbers
* @param unknown_type $tablename
* @param unknown_type $fields
* @param unknown_type $command
*/
private function alterTable($tablename,$fields,$command='CHANGE'){
$ok = true;
if(empty($this->_db)){
$this->_db = JFactory::getDBO();
}
$query = 'SHOW COLUMNS FROM `'.$tablename.'` ';
$this->_db->setQuery($query);
$columns = $this->_db->loadColumn(0);
foreach($fields as $fieldname => $alterCommand){
if(in_array($fieldname,$columns)){
$query = 'ALTER TABLE `'.$tablename.'` '.$command.' COLUMN `'.$fieldname.'` '.$alterCommand;
$this->_db->setQuery($query);
if(!$this->_db->execute()){
$app = JFactory::getApplication();
$app->enqueueMessage('Error: Install alterTable '.$this->_db->getErrorMsg() );
$ok = false;
}
}
}
return $ok;
}
/**
*
* @author Max Milbers
* @param unknown_type $table
* @param unknown_type $field
* @param unknown_type $action
* @return boolean This gives true back, WHEN it altered the table, you may use this information to decide for extra post actions
*/
private function checkAddFieldToTable($table,$field,$fieldType){
$query = 'SHOW COLUMNS FROM `'.$table.'` ';
$this->_db->setQuery($query);
$columns = $this->_db->loadColumn(0);
if(!in_array($field,$columns)){
$query = 'ALTER TABLE `'.$table.'` ADD '.$field.' '.$fieldType;
$this->_db->setQuery($query);
if(!$this->_db->execute()){
$app = JFactory::getApplication();
$app->enqueueMessage('Error: Install checkAddFieldToTable '.$this->_db->getErrorMsg() );
return false;
} else {
vmdebug('checkAddFieldToTable added '.$field);
return true;
}
}
return false;
}
/**
* Checks if both types of default shoppergroups are set
* @author Max Milbers
*/
private function checkAddDefaultShoppergroups(){
$q = 'SELECT `virtuemart_shoppergroup_id` FROM `#__virtuemart_shoppergroups` WHERE `default` = "1" ';
$this->_db = JFactory::getDbo();
$this->_db->setQuery($q);
$res = $this->_db ->loadResult();
if(empty($res)){
$q = "INSERT INTO `#__virtuemart_shoppergroups` (`virtuemart_shoppergroup_id`, `virtuemart_vendor_id`, `shopper_group_name`, `shopper_group_desc`, `default`, `shared`) VALUES
(NULL, 1, '-default-', 'This is the default shopper group.', 1, 1);";
$this->_db->setQuery($q);
$this->_db->execute();
}
$q = 'SELECT `virtuemart_shoppergroup_id` FROM `#__virtuemart_shoppergroups` WHERE `default` = "2" ';
$this->_db->setQuery($q);
$res = $this->_db ->loadResult();
if(empty($res)){
$q = "INSERT INTO `#__virtuemart_shoppergroups` (`virtuemart_shoppergroup_id`, `virtuemart_vendor_id`, `shopper_group_name`, `shopper_group_desc`, `default`, `shared`) VALUES
(NULL, 1, '-anonymous-', 'Shopper group for anonymous shoppers', 2, 1);";
$this->_db->setQuery($q);
$this->_db->execute();
}
}
private function joomlaSessionDBToMediumText(){
if(version_compare(JVERSION,'1.6.0','ge')) {
$fields = array('data'=>'`data` mediumtext NULL AFTER `time`');
$this->alterTable('#__session',$fields);
}
}
/**
* Uninstall script
* Triggers before database processing
*
* @param object JInstallerComponent parent
* @return boolean True on success
*/
public function uninstall ($parent=null) {
if(empty($this->path)){
$this->path = VMPATH_ADMIN;
}
//$this->loadVm();
//include($this->path.DS.'install'.DS.'uninstall.virtuemart.html.php');
return true;
}
/**
* Post-process method (e.g. footer HTML, redirect, etc)
*
* @param string Process type (i.e. install, uninstall, update)
* @param object JInstallerComponent parent
*/
public function postflight ($type, $parent=null) {
$_REQUEST['install'] = 0;
if ($type != 'uninstall') {
$this->loadVm();
//fix joomla BE menu
$model = VmModel::getModel('updatesmigration');
// VmConfig::loadConfig(true);
if(!class_exists('VirtueMartModelConfig')) require(VMPATH_ADMIN .'/models/config.php');
$res = VirtueMartModelConfig::checkConfigTableExists();
if(!empty($res)){
vRequest::setVar(JSession::getFormToken(), '1');
$config = VmModel::getModel('config');
$config->setDangerousToolsOff();
}
}
return true;
}
/**
* copy all $src to $dst folder and remove it
*
* @author Max Milbers
* @param String $src path
* @param String $dst path
* @param String $type modules, plugins, languageBE, languageFE
*/
private function recurse_copy($src,$dst ) {
$dir = '';
if(JFolder::exists($src)){
$dir = opendir($src);
$this->createIndexFolder($dst);
if(is_resource($dir)){
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src .DS. $file) ) {
if(!JFolder::create($dst . DS . $file)){
$app = JFactory::getApplication ();
$app->enqueueMessage ('Couldnt create folder ' . $dst . DS . $file);
}
$this->recurse_copy($src .DS. $file,$dst .DS. $file);
}
else {
if(JFile::exists($dst .DS. $file)){
if(!JFile::delete($dst .DS. $file)){
$app = JFactory::getApplication();
$app -> enqueueMessage('Couldnt delete '.$dst .DS. $file);
}
}
if(!JFile::move($src .DS. $file,$dst .DS. $file)){
$app = JFactory::getApplication();
$app -> enqueueMessage('Couldnt move '.$src .DS. $file.' to '.$dst .DS. $file);
}
}
}
}
closedir($dir);
if (is_dir($src)) JFolder::delete($src);
return true;
}
}
$app = JFactory::getApplication();
$app -> enqueueMessage('Couldnt read dir '.$dir.' source '.$src);
}
public function displayFinished($update){
include(VMPATH_ADMIN.'/views/updatesmigration/tmpl/insfinished.php');
}
}
/**
* Legacy j1.5 function to use the 1.6 class install/update
*
* @return boolean True on success
* @deprecated
*/
function com_install() {
$vmInstall = new com_virtuemartInstallerScript();
$upgrade = $vmInstall->checkIfUpdate();
if(version_compare(JVERSION,'1.6.0','ge')) {
// Joomla! 1.6 code here
} else {
// Joomla! 1.5 code here
$method = ($upgrade) ? 'update' : 'install';
$vmInstall->$method();
$vmInstall->postflight($method);
}
return true;
}
/**
* Legacy j1.5 function to use the 1.6 class uninstall
*
* @return boolean True on success
* @deprecated
*/
function com_uninstall() {
$vmInstall = new com_virtuemartInstallerScript();
// $vmInstall->preflight('uninstall');
if(version_compare(JVERSION,'1.6.0','ge')) {
// Joomla! 1.6 code here
} else {
$vmInstall->uninstall();
$vmInstall->postflight('uninstall');
}
return true;
}
} // if(defined)
// pure php no tag