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":"1","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=1\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":"1","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=1\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":"1","headerText":"","footerText":""}'; } else { $defaultParams = "show=all\ndisplay_style=div\nmanufacturers_per_row=1\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; $db = JFactory::getDBO(); $query='SHOW TABLES LIKE "%'.str_replace('#__','',$tablename).'"' ; $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 '.$tablename); 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 '.$error); } } 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