setMainTable('paymentmethods'); $this->_selectedOrdering = 'ordering'; $this->setToggleName('shared'); } /** * Gets the virtuemart_paymentmethod_id with a plugin and vendorId * * @author Max Milbers */ public function getIdbyCodeAndVendorId($jpluginId,$vendorId=1){ if(!$jpluginId) return 0; $q = 'SELECT `virtuemart_paymentmethod_id` FROM #__virtuemart_paymentmethods WHERE `payment_jplugin_id` = "'.$jpluginId.'" AND `virtuemart_vendor_id` = "'.$vendorId.'" '; $db = vFactory::getDbo(); $db->setQuery($q); return $db->loadResult(); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author Max Milbers */ public function getPayment($id = 0){ if(!empty($id)) $this->_id = (int)$id; if (empty($this->_cache[$this->_id])) { $this->_cache[$this->_id] = $this->getTable('paymentmethods'); $this->_cache[$this->_id]->load((int)$this->_id); if(empty($this->_cache->virtuemart_vendor_id)){ if(!class_exists('VirtueMartModelVendor')) require(VMPATH_ADMIN.DS.'models'.DS.'vendor.php'); $this->_cache[$this->_id]->virtuemart_vendor_id = VirtueMartModelVendor::getLoggedVendor(); } if($this->_cache[$this->_id]->payment_jplugin_id){ vPluginHelper::importPlugin('vmpayment'); $dispatcher = vDispatcher::getInstance(); $retValue = $dispatcher->trigger ('plgVmDeclarePluginParamsPaymentVM3', array(&$this->_cache[$this->_id])); } if(!empty($this->_cache[$this->_id]->_varsToPushParam)){ VmTable::bindParameterable($this->_cache[$this->_id],'payment_params',$this->_cache[$this->_id]->_varsToPushParam); } //We still need this, because the table is already loaded, but the keys are set later if($this->_cache[$this->_id]->getCryptedFields()){ if(!class_exists('vmCrypt')){ require(VMPATH_ADMIN.DS.'helpers'.DS.'vmcrypt.php'); } if(isset($this->_cache[$this->_id]->modified_on)){ $date = vFactory::getDate($this->_cache[$this->_id]->modified_on); $date = $date->toUnix(); } else { $date = 0; } foreach($this->_cache[$this->_id]->getCryptedFields() as $field){ if(isset($this->_cache[$this->_id]->$field)){ $this->_cache[$this->_id]->$field = vmCrypt::decrypt($this->_cache[$this->_id]->$field,$date); } } } $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_paymentmethod_shoppergroups WHERE `virtuemart_paymentmethod_id` = "'.$this->_id.'"'; $this->_db->setQuery($q); $this->_cache[$this->_id]->virtuemart_shoppergroup_ids = $this->_db->loadColumn(); if(empty($this->_cache[$this->_id]->virtuemart_shoppergroup_ids)) $this->_cache[$this->_id]->virtuemart_shoppergroup_ids = 0; } return $this->_cache[$this->_id]; } /** * Retireve a list of calculation rules from the database. * * @author Max Milbers * @param string $onlyPuiblished True to only retreive the publish Calculation rules, false otherwise * @param string $noLimit True if no record count limit is used, false otherwise * @return object List of calculation rule objects */ public function getPayments($onlyPublished=false, $noLimit=false) { $where = array(); if ($onlyPublished) { $where[] = ' `published` = 1'; } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $joins = ' FROM `#__virtuemart_paymentmethods` as i '; if(VmConfig::$defaultLang!=VmConfig::$vmlang and Vmconfig::$langCount>1){ $langFields = array('payment_name','payment_desc'); $useJLback = false; if(VmConfig::$defaultLang!=VmConfig::$jDefLang){ $joins .= ' LEFT JOIN `#__virtuemart_paymentmethods_'.VmConfig::$jDefLang.'` as ljd'; $useJLback = true; } $select = ' i.*'; foreach($langFields as $langField){ $expr2 = 'ld.'.$langField; if($useJLback){ $expr2 = 'IFNULL(ld.'.$langField.',ljd.'.$langField.')'; } $select .= ', IFNULL(l.'.$langField.','.$expr2.') as '.$langField.''; } $joins .= ' LEFT JOIN `#__virtuemart_paymentmethods_'.VmConfig::$defaultLang.'` as ld using (`virtuemart_paymentmethod_id`)'; $joins .= ' LEFT JOIN `#__virtuemart_paymentmethods_'.VmConfig::$vmlang.'` as l using (`virtuemart_paymentmethod_id`)'; } else { $select = ' * '; $joins .= ' LEFT JOIN `#__virtuemart_paymentmethods_'.VmConfig::$vmlang.'` as l USING (`virtuemart_paymentmethod_id`) '; } $datas =$this->exeSortSearchListQuery(0,$select,$joins,$whereString,' ',$this->_getOrdering() ); if(isset($datas)){ if(!class_exists('shopfunctions')) require(VMPATH_ADMIN.DS.'helpers'.DS.'shopfunctions.php'); foreach ($datas as &$data){ /* Add the paymentmethod shoppergroups */ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_paymentmethod_shoppergroups WHERE `virtuemart_paymentmethod_id` = "'.$data->virtuemart_paymentmethod_id.'"'; $db = vFactory::getDbo(); $db->setQuery($q); $data->virtuemart_shoppergroup_ids = $db->loadColumn(); } } return $datas; } /** * Bind the post data to the paymentmethod tables and save it * * @author Max Milbers * @return boolean True is the save was successful, false otherwise. */ public function store(&$data){ if ($data) { $data = (array)$data; } if(!vmAccess::manager('paymentmethod.edit')){ vmWarn('Insufficient permissions to store paymentmethod'); return false; } else if( empty($data['virtuemart_payment_id']) and !vmAccess::manager('paymentmethod.create')){ vmWarn('Insufficient permission to create paymentmethod'); return false; } if(!empty($data['params'])){ foreach($data['params'] as $k=>$v){ $data[$k] = $v; } } if(empty($data['virtuemart_vendor_id'])){ if(!class_exists('VirtueMartModelVendor')) require(VMPATH_ADMIN.DS.'models'.DS.'vendor.php'); $data['virtuemart_vendor_id'] = VirtueMartModelVendor::getLoggedVendor(); } $tCon = array('min_amount','max_amount','cost_per_transaction','cost_min_transaction','cost_percent_total'); foreach($tCon as $f){ if(!empty($data[$f])){ $data[$f] = str_replace(array(',',' '),array('.',''),$data[$f]); } } $table = $this->getTable('paymentmethods'); if(isset($data['payment_jplugin_id'])){ $q = 'SELECT `element` FROM `#__extensions` WHERE `extension_id` = "'.$data['payment_jplugin_id'].'"'; $db = vFactory::getDbo(); $db->setQuery($q); $data['payment_element'] = $db->loadResult(); $q = 'UPDATE `#__extensions` SET `enabled`= 1 WHERE `extension_id` = "'.$data['payment_jplugin_id'].'"'; $db->setQuery($q); $db->execute(); vPluginHelper::importPlugin('vmpayment'); $dispatcher = vDispatcher::getInstance(); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsPayment',array( $data['payment_element'],$data['payment_jplugin_id'],&$table)); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginPayment',array( &$data,&$table)); } $table->bindChecknStore($data); $xrefTable = $this->getTable('paymentmethod_shoppergroups'); $xrefTable->bindChecknStore($data); if (!class_exists('vmPSPlugin')) require(VMPATH_PLUGINLIBS . DS . 'vmpsplugin.php'); vPluginHelper::importPlugin('vmpayment'); //Add a hook here for other payment methods, checking the data of the choosed plugin $dispatcher = vDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnStoreInstallPaymentPluginTable', array( $data['payment_jplugin_id'])); return $table->virtuemart_paymentmethod_id; } /** * Due the new plugin system this should be obsolete * function to render the payment plugin list * * @author Max Milbers * * @param radio list of creditcards * @return html */ public function renderPaymentList($selectedPaym=0){ $payms = self::getPayments(false,true); $listHTML=''; foreach($payms as $item){ $checked=''; if($item->virtuemart_paymentmethod_id==$selectedPaym){ $checked='"checked"'; } $listHTML .= ''.$item->payment_name.'
'; $listHTML .= '
'; } return $listHTML; } public function createClone ($id) { if(!vmAccess::manager('paymentmethod.create')){ vmWarn('Insufficient permissions to store paymentmethod'); return false; } $this->setId ($id); $payment = $this->getPayment(); $payment->virtuemart_paymentmethod_id = 0; $payment->payment_name = $payment->payment_name.' Copy'; if (!$clone = $this->store($payment)) { JError::raiseError(500, 'createClone '. $payment->getError() ); } return $clone; } function remove($ids){ if(!vmAccess::manager('paymentmethod.delete')){ vmWarn('Insufficient permissions to remove paymentmethod'); return false; } return parent::remove($ids); } }