vmInstall();
}
public function install(){
//$this->vmInstall();
}
public function discover_install(){
//$this->vmInstall();
}
public function postflight () {
$this->vmInstall();
}
public function vmInstall () {
jimport('joomla.filesystem.file');
jimport('joomla.installer.installer');
$this->createIndexFolder(JPATH_ROOT .DS. 'plugins'.DS.'vmcalculation');
$this->createIndexFolder(JPATH_ROOT .DS. 'plugins'.DS.'vmcustom');
$this->createIndexFolder(JPATH_ROOT .DS. 'plugins'.DS.'vmpayment');
$this->createIndexFolder(JPATH_ROOT .DS. 'plugins'.DS.'vmshipment');
$this->path = JInstaller::getInstance()->getPath('extension_administrator');
$this->updateShipperToShipment();
$this->installPlugin('VM - Payment, Standard', 'plugin','standard', 'vmpayment');
$this->installPlugin('VM - Payment, Payzen', 'plugin','payzen', 'vmpayment');
$this->installPlugin('VM - Payment, SystemPay', 'plugin','systempay', 'vmpayment');
//moneybookers
$src = $this->path . DS . 'plugins' . DS . 'vmpayment' . DS . 'moneybookers';
$dst = JPATH_ROOT . DS . 'plugins' . DS . 'vmpayment' . DS . 'moneybookers';
$this->recurse_copy($src, $dst, 'plugins');
$this->installPlugin('VM - Payment, Moneybookers Credit Cards', 'plugin', 'moneybookers_acc', 'vmpayment');
$this->installPlugin('VM - Payment, Moneybookers Lastschrift', 'plugin', 'moneybookers_did', 'vmpayment');
$this->installPlugin('VM - Payment, Moneybookers iDeal', 'plugin', 'moneybookers_idl', 'vmpayment');
$this->installPlugin('VM - Payment, Moneybookers Giropay', 'plugin', 'moneybookers_gir', 'vmpayment');
$this->installPlugin('VM - Payment, Moneybookers Sofortüberweisung', 'plugin', 'moneybookers_sft', 'vmpayment');
$this->installPlugin('VM - Payment, Moneybookers Przelewy24', 'plugin', 'moneybookers_pwy', 'vmpayment');
$this->installPlugin('VM - Payment, Moneybookers Online Bank Transfer', 'plugin', 'moneybookers_obt', 'vmpayment');
$this->installPlugin('VM - Payment, Moneybookers Skrill Digital Wallet', 'plugin', 'moneybookers_wlt', 'vmpayment');
$this->installPlugin('VM - Payment, Authorize.net', 'plugin','authorizenet', 'vmpayment');
$this->installPlugin('VM - Payment, Paypal', 'plugin', 'paypal', 'vmpayment');
//$this->installPlugin('VM - Payment, Klarna', 'plugin', 'klarna', 'vmpayment');
$this->installPlugin('VM - Shipment, By weight, ZIP and countries','plugin', 'weight_countries', 'vmshipment');
$this->installPlugin('VM - Custom, customer text input','plugin', 'textinput', 'vmcustom');
$this->installPlugin('VM - Custom, product specification','plugin', 'specification', 'vmcustom');
$this->installPlugin('VM - Custom, stockable variants','plugin', 'stockable', 'vmcustom');
// $table = '#__virtuemart_customs';
// $fieldname = 'field_type';
// $fieldvalue = 'G';
// $this->addToRequired($table,$fieldname,$fieldvalue,"INSERT INTO `#__virtuemart_customs`
// (`custom_parent_id`, `admin_only`, `custom_title`, `custom_tip`, `custom_value`, `custom_field_desc`,
// `field_type`, `is_list`, `is_hidden`, `is_cart_attribute`, `published`) VALUES
// (0, 0, 'COM_VIRTUEMART_STOCKABLE_PRODUCT', 'COM_VIRTUEMART_STOCKABLE_PRODUCT_TIP', NULL,
// 'COM_VIRTUEMART_STOCKABLE_PRODUCT_DESC', 'G', 0, 0, 0, 1 );");
$this->installPlugin('VM - Search, Virtuemart Product', 'plugin', 'virtuemart', 'search');
$task = JRequest::getCmd('task');
if($task!='updateDatabase'){
// modules auto move
$src= $this->path .DS."modules" ;
$dst= JPATH_ROOT . DS . "modules" ;
$this->recurse_copy( $src ,$dst);
echo " VirtueMart2 modules moved to the joomla modules folder
" ;
if(version_compare(JVERSION,'1.6.0','ge')) {
$defaultParams = '{"text_before":"","product_currency":"","cache":"1","moduleclass_sfx":"","class_sfx":""}';
} else {
$defaultParams = "text_before=\nproduct_currency=\ncache=1\nmoduleclass_sfx=\nclass_sfx=\n";
}
$this->installModule('VM - Currencies Selector','mod_virtuemart_currencies',4,$defaultParams);
if(version_compare(JVERSION,'1.6.0','ge')) {
$defaultParams = '{"product_group":"featured","max_items":"1","products_per_row":"","display_style":"list","show_price":"1","show_addtocart":"1","headerText":"Best products","footerText":"","filter_category":"0","virtuemart_category_id":"0","cache":"0","moduleclass_sfx":"","class_sfx":""}';
} else {
$defaultParams = "product_group=featured\nmax_items=1\nproducts_per_row=\ndisplay_style=list\nshow_price=1\nshow_addtocart=1\nheaderText=Best products\nfooterText=\nfilter_category=0\ncategory_id=1\ncache=0\nmoduleclass_sfx=\nclass_sfx=\n";
}
$this->installModule('VM - Featured products', 'mod_virtuemart_product',3,$defaultParams);
if(version_compare(JVERSION,'1.6.0','ge')) {
$defaultParams = '{"product_group":"topten","max_items":"1","products_per_row":"","display_style":"list","show_price":"1","show_addtocart":"1","headerText":"","footerText":"","filter_category":"0","virtuemart_category_id":"0","cache":"0","moduleclass_sfx":"","class_sfx":""}';
} else {
$defaultParams = "product_group=topten\nmax_items=1\nproducts_per_row=\ndisplay_style=list\nshow_price=1\nshow_addtocart=1\nheaderText=\nfooterText=\nfilter_category=0\ncategory_id=1\ncache=0\nmoduleclass_sfx=\nclass_sfx=\n";
}
$this->installModule('VM - Best Sales','mod_virtuemart_product',1,$defaultParams);
if(version_compare(JVERSION,'1.6.0','ge')) {
$defaultParams = '{"width":"20","text":"","button":"","button_pos":"right","imagebutton":"","button_text":""}';
} else {
$defaultParams = "width=20\ntext=\nbutton=\nbutton_pos=right\nimagebutton=\nbutton_text=\nmoduleclass_sfx=\ncache=1\ncache_time=900\n";
}
$this->installModule('VM - Search in Shop','mod_virtuemart_search',2,$defaultParams);
if(version_compare(JVERSION,'1.6.0','ge')) {
$defaultParams = '{"show":"all","display_style":"list","manufacturers_per_row":"","headerText":"","footerText":""}';
} else {
$defaultParams = "show=all\ndisplay_style=div\nmanufacturers_per_row=\nheaderText=\nfooterText=\ncache=0\nmoduleclass_sfx=\nclass_sfx=";
}
$this->installModule('VM - Manufacturer','mod_virtuemart_manufacturer',5,$defaultParams);
if(version_compare(JVERSION,'1.6.0','ge')) {
$defaultParams = '{"moduleclass_sfx":"","show_price":"1","show_product_list":"1"}';
} else {
$defaultParams = "moduleclass_sfx=\nshow_price=1\nshow_product_list=1\n";
}
$this->installModule('VM - Shopping cart','mod_virtuemart_cart',0,$defaultParams);
if(version_compare(JVERSION,'1.6.0','ge')) {
$defaultParams = '{"Parent_Category_id":"0","layout":"default","cache":"0","moduleclass_sfx":"","class_sfx":""}';
} else {
$defaultParams = "moduleclass_sfx=\nclass_sfx=\ncategory_name=default\ncache=no\n";
}
$this->installModule('VM - Category','mod_virtuemart_category',6,$defaultParams);
// language auto move
$src= $this->path .DS."languageFE" ;
$dst= JPATH_ROOT . DS . "language" ;
$this->recurse_copy( $src ,$dst );
echo " VirtueMart2 language moved to the joomla language FE folder
" ;
// language auto move
$src= $this->path .DS."languageBE" ;
$dst= JPATH_ADMINISTRATOR . DS . "language" ;
$this->recurse_copy( $src ,$dst );
echo " VirtueMart2 language moved to the joomla language BE folder
" ;
// libraries auto move
$src= $this->path .DS."libraries" ;
$dst= JPATH_ROOT . DS . "libraries" ;
$this->recurse_copy( $src ,$dst );
echo " VirtueMart2 pdf moved to the joomla libraries folder
" ;
//update plugins, make em loggable
/* $loggables = array( 'created_on' => 'DATETIME NOT NULL DEFAULT "0000-00-00 00:00:00"',
'created_by' => 'INT(11) NOT NULL DEFAULT "0"',
'modified_on'=> 'DATETIME NOT NULL DEFAULT "0000-00-00 00:00:00"',
'modified_by'=> 'INT(11) NOT NULL DEFAULT "0"',
'locked_on' =>'DATETIME NOT NULL DEFAULT "0000-00-00 00:00:00"',
'locked_by' =>'INT(11) NOT NULL DEFAULT "0"'
);
foreach($loggables as $key => $value){
$this->checkAddFieldToTable('#__virtuemart_payment_paypal',$key,$value);
$this->checkAddFieldToTable('#__virtuemart_payment_standard',$key,$value);
$this->checkAddFieldToTable('#__virtuemart_shipment_weight_countries',$key,$value);
}*/
echo "
Installing Virtuemart Plugins and modules Success.
";
echo "You may directly uninstall this component. Your plugins will remain
";
echo "Ignore the message ".JText::_('JLIB_INSTALLER_ABORT_COMP_BUILDADMINMENUS_FAILED')."
";
} else {
echo "Updated Virtuemart Plugin tables
";
}
return true;
}
/**
* Installs a vm plugin into the database
*
*/
private function installPlugin($name, $type, $element, $group){
$task = JRequest::getCmd('task');
if($task!='updateDatabase'){
$data = array();
if(version_compare(JVERSION,'1.7.0','ge')) {
// Joomla! 1.7 code here
$table = JTable::getInstance('extension');
$data['enabled'] = 1;
$data['access'] = 1;
$tableName = '#__extensions';
$idfield = 'extension_id';
} elseif(version_compare(JVERSION,'1.6.0','ge')) {
// Joomla! 1.6 code here
$table = JTable::getInstance('extension');
$data['enabled'] = 1;
$data['access'] = 1;
$tableName = '#__extensions';
$idfield = 'extension_id';
} else {
// Joomla! 1.5 code here
$table = JTable::getInstance('plugin');
$data['published'] = 1;
$data['access'] = 0;
$tableName = '#__plugins';
$idfield = 'id';
}
$data['name'] = $name;
$data['type'] = $type;
$data['element'] = $element;
$data['folder'] = $group;
$data['client_id'] = 0;
$src= $this->path .DS. 'plugins' .DS. $group .DS.$element;
$db = JFactory::getDbo();
$q = 'SELECT '.$idfield.' FROM `'.$tableName.'` WHERE `name` = "'.$name.'" ';
$db->setQuery($q);
$count = $db->loadResult();
//We write only in the table, when it is not installed already
if(empty($count)){
// $table->load($count);
if(version_compare(JVERSION,'1.6.0','ge')) {
$data['manifest_cache'] = json_encode(JApplicationHelper::parseXMLInstallFile($src.DS.$element.'.xml'));
}
if(!$table->bind($data)){
$app = JFactory::getApplication();
$app -> enqueueMessage('VMInstaller table->bind throws error for '.$name.' '.$type.' '.$element.' '.$group);
}
if(!$table->check($data)){
$app = JFactory::getApplication();
$app -> enqueueMessage('VMInstaller table->check throws error for '.$name.' '.$type.' '.$element.' '.$group);
}
if(!$table->store($data)){
$app = JFactory::getApplication();
$app -> enqueueMessage('VMInstaller table->store throws error for '.$name.' '.$type.' '.$element.' '.$group);
}
$errors = $table->getErrors();
foreach($errors as $error){
$app = JFactory::getApplication();
$app -> enqueueMessage( get_class( $this ).'::store '.$error);
}
}
}
if(version_compare(JVERSION,'1.7.0','ge')) {
// Joomla! 1.7 code here
$dst= JPATH_ROOT . DS . 'plugins' .DS. $group.DS.$element;
} elseif(version_compare(JVERSION,'1.6.0','ge')) {
// Joomla! 1.6 code here
$dst= JPATH_ROOT . DS . 'plugins' .DS. $group.DS.$element;
} else {
// Joomla! 1.5 code here
$dst= JPATH_ROOT . DS . 'plugins' .DS. $group;
}
if($task!='updateDatabase'){
$this->recurse_copy( $src ,$dst );
}
if($group!='search') {
$this->updatePluginTable($name, $type, $element, $group, $dst);
} else {
if(version_compare(JVERSION,'1.6.0','ge')){
$this->updatePluginTable($name, $type, $element, $group, $dst);
}
}
}
public function updatePluginTable($name, $type, $element, $group, $dst){
$app = JFactory::getApplication();
//Update Tables
if (!class_exists( 'VmConfig' )) require(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_virtuemart'.DS.'helpers'.DS.'config.php');
if (class_exists( 'VmConfig' )){
$pluginfilename = $dst.DS.$element.'.php';
require ($pluginfilename);
//plgVmpaymentPaypal
$pluginClassname = 'plg'.ucfirst($group).ucfirst($element);
//Let's get the global dispatcher
$dispatcher = JDispatcher::getInstance();
$config = array('type'=>$group,'name'=>$group,'params'=>'');
$plugin = new $pluginClassname($dispatcher,$config);;
// $updateString = $plugin->getVmPluginCreateTableSQL();
//if(function_exists($plugin->getTableSQLFields)){
$_psType = substr($group, 2);
$tablename = '#__virtuemart_'.$_psType .'_plg_'. $element;
$app = JFactory::getApplication();
$dbPrefix= $app->getCfg('dbprefix', '');
$db = JFactory::getDbo();
$tableNamePrefix=str_replace('#__',$dbPrefix,$tablename);
$query='SHOW TABLES LIKE "'.$tableNamePrefix.'"' ;
$db->setQuery($query);
$result = $db->loadResult();
//$app -> enqueueMessage( get_class( $this ).':: '.$query.' '.$result);
if ( $result) {
$SQLfields = $plugin->getTableSQLFields();
$loggablefields = $plugin->getTableSQLLoggablefields();
$tablesFields=array_merge($SQLfields,$loggablefields);
$update[$tablename]= array($tablesFields, array(),array());
$app -> enqueueMessage( get_class( $this ).':: VirtueMart2 update '.$tableNamePrefix);
if(!class_exists('GenericTableUpdater')) require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'tableupdater.php');
$updater = new GenericTableUpdater();
$updater->updateMyVmTables($update);
}
//}
// } else {
// $app = JFactory::getApplication();
// $app -> enqueueMessage( get_class( $plugin ).':: VirtueMart2 function getTableSQLFields not found');
// }
} else {
$app = JFactory::getApplication();
$app -> enqueueMessage( get_class( $this ).':: VirtueMart2 must be installed, or the tables cant be updated ' );
}
}
public function installModule($title,$module,$ordering,$params){
$params = '';
$table = JTable::getInstance('module');
$db = $table->getDbo();
$q = 'SELECT id FROM `#__modules` WHERE `title` = "'.$title.'" ';
$db->setQuery($q);
$id = $db->loadResult();
$src= JPATH_ROOT .DS. 'modules' .DS. $module ;
if(!empty($id)){
$table->load($id);
}
if(version_compare(JVERSION,'1.7.0','ge')) {
// Joomla! 1.7 code here
$position = 'position-4';
$access = 1;
} else if(version_compare(JVERSION,'1.6.0','ge')) {
// Joomla! 1.6 code here
$access = 1;
} else {
// Joomla! 1.5 code here
$position ='left';
$access = 0;
}
if(empty($table->title)) $table->title = $title;
if(empty($table->ordering)) $table->ordering = $ordering;
if(empty($table->published)) $table->published = 1;
if(empty($table->module)) $table->module = $module;
if(empty($table->params)) $table->params = $params;
if(empty($table->access)) $table->access = $access;
if(empty($table->position)) $table->position = $position;
if(empty($table->client_id)) $table->client_id = $client_id = 0;
// $data['manifest_cache'] ='';
// if(!empty($id)){
// unset($data['manifest_cache']);
// $table->load($id);
// if(empty($table->manifest_cache)){
// if(version_compare(JVERSION,'1.6.0','ge')) {
// $data['manifest_cache'] = json_encode(JApplicationHelper::parseXMLInstallFile($src.DS.$module.'.xml'));
// }
// }
// }
// if(empty($count)){
// if(!$table->bind($data)){
// $app = JFactory::getApplication();
// $app -> enqueueMessage('VMInstaller table->bind throws error for '.$title.' '.$module.' '.$params);
// }
if(!$table->check()){
$app = JFactory::getApplication();
$app -> enqueueMessage('VMInstaller table->check throws error for '.$title.' '.$module.' '.$params);
}
if(!$table->store()){
$app = JFactory::getApplication();
$app -> enqueueMessage('VMInstaller table->store throws error for for '.$title.' '.$module.' '.$params);
}
$errors = $table->getErrors();
foreach($errors as $error){
$app = JFactory::getApplication();
$app -> enqueueMessage( get_class( $this ).'::store '.$error);
}
// }
$lastUsedId = $table->id;
$q = 'SELECT moduleid FROM `#__modules_menu` WHERE `moduleid` = "'.$lastUsedId.'" ';
$db->setQuery($q);
$moduleid = $db->loadResult();
$action = '';
if(empty($moduleid)){
$q = 'INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES( "'.$lastUsedId.'" , "0");';
} else {
//$q = 'UPDATE `#__modules_menu` SET `menuid`= "0" WHERE `moduleid`= "'.$moduleid.'" ';
}
$db->setQuery($q);
$db->query();
if(version_compare(JVERSION,'1.6.0','ge')) {
$q = 'SELECT extension_id FROM `#__extensions` WHERE `element` = "'.$module.'" ';
$db->setQuery($q);
$ext_id = $db->loadResult();
// $manifestCache = str_replace('"', '\'', $data["manifest_cache"]);
$action = '';
if(empty($ext_id)){
if(version_compare(JVERSION,'1.6.0','ge')) {
$manifest_cache = json_encode(JApplicationHelper::parseXMLInstallFile($src.DS.$module.'.xml'));
}
$q = 'INSERT INTO `#__extensions` (`name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `ordering`) VALUES
( "'.$module.'" , "module", "'.$module.'", "", "0", "1","'.$access.'", "0", "'.$db->getEscaped($manifest_cache).'", "'.$params.'","'.$ordering.'");';
} else {
/* $q = 'UPDATE `#__extensions` SET `name`= "'.$module.'",
`type`= "module",
`element`= "'.$module.'",
`folder`= "",
`client_id`= "'.$client_id.'",
`enabled`= "1",
`access`= "'.$access.'",
`protected`= "0",
`ordering`= "'.$ordering.'"
WHERE `extension_id`= "'.$ext_id.'" ';*/
}
$db->setQuery($q);
if(!$db->query()){
$app = JFactory::getApplication();
$app -> enqueueMessage( get_class( $this ).':: '.$db->getErrorMsg());
}
}
}
/**
* @author Max Milbers
* @param string $tablename
* @param string $fields
* @param string $command
*/
private function alterTable($tablename,$fields,$command='CHANGE'){
if(empty($this->db)){
$this->db = JFactory::getDbo();
}
$query = 'SHOW COLUMNS FROM `'.$tablename.'` ';
$this->db->setQuery($query);
$columns = $this->db->loadResultArray(0);
foreach($fields as $fieldname => $alterCommand){
if(in_array($fieldname,$columns)){
$query = 'ALTER TABLE `'.$tablename.'` '.$command.' COLUMN `'.$fieldname.'` '.$alterCommand;
$this->db->setQuery($query);
$this->db->query();
}
}
}
/**
*
* @author Max Milbers
* @param string $table
* @param string $field
* @param string $fieldType
* @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->loadResultArray(0);
if(!in_array($field,$columns)){
$query = 'ALTER TABLE `'.$table.'` ADD '.$field.' '.$fieldType;
$this->db->setQuery($query);
if(!$this->db->query()){
$app = JFactory::getApplication();
$app->enqueueMessage('Install checkAddFieldToTable '.$this->db->getErrorMsg() );
return false;
} else {
return true;
}
}
return false;
}
private function updateShipperToShipment() {
if(empty($this->db)){
$this->db = JFactory::getDbo();
}
if(version_compare(JVERSION,'1.6.0','ge')) {
// Joomla! 1.6 code here
$table = JTable::getInstance('extension');
$tableName = '#__extensions';
$idfield = 'extension_id';
} else {
// Joomla! 1.5 code here
$table = JTable::getInstance('plugin');
$tableName = '#__plugins';
$idfield = 'id';
}
$q = 'SELECT '.$idfield.' FROM '.$tableName.' WHERE `folder` = "vmshipper" ';
$this->db->setQuery($q);
$result = $this->db->loadResult();
if($result){
$q = 'UPDATE `'.$tableName.'` SET `folder`="vmshipment" WHERE `extension_id`= '.$result;
$this->db->setQuery($q);
$this->db->query();
}
}
/**
* 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 = opendir($src);
$this->createIndexFolder($dst);
if(is_resource($dir)){
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src .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);
} else {
$app = JFactory::getApplication();
$app -> enqueueMessage('Couldnt read dir '.$dir.' source '.$src);
}
}
public function uninstall() {
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(JPATH_ROOT.DS.'components'.DS.'index.html', $path .DS. 'index.html');
}
return true;
}
return false;
}
}
// PLZ look in #vminstall.php# to add your plugin and module
function com_install(){
if(!version_compare(JVERSION,'1.6.0','ge')) {
$vmInstall = new com_virtuemart_allinoneInstallerScript();
$vmInstall->vmInstall();
}
return true;
}
function com_uninstall(){
return true;
}
} //if defined
// pure php no tag