setMainTable('paymentmethods'); $this->_validOrderingFieldName = array(); $this->_validOrderingFieldName = array('i.virtuemart_paymentmethod_id','i.virtuemart_vendor_id', 'l.payment_name','l.payment_desc','i.currency_id','i.ordering','i.shared', 'i.published'); $this->_selectedOrdering = 'i.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 = JFactory::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 = null){ if(isset($id)){ $this->_id = $this->setId($id); } else if(empty($this->_id)){ $this->setIdByRequest(); } 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[$this->_id]->virtuemart_vendor_id)){ $this->_cache[$this->_id]->virtuemart_vendor_id = vmAccess::getVendorId('paymentmethod.edit'); } if($this->_cache[$this->_id]->payment_jplugin_id){ vDispatcher::importVMPlugins('vmpayment'); $retValue = vDispatcher::directTrigger ('vmpayment',$this->_cache[$this->_id]->payment_element,'plgVmDeclarePluginParamsPaymentVM3', array(&$this->_cache[$this->_id]), false); } if(!empty($this->_cache[$this->_id]->_varsToPushParam)){ $this->_cache[$this->_id]->_xParams = 'payment_params'; 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(isset($this->_cache[$this->_id]->modified_on)){ $date = JFactory::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); } } } $this->_cache[$this->_id]->virtuemart_shoppergroup_ids = $this->getPaymentShopperGrps($this->_id); } return $this->_cache[$this->_id]; } /** * Retireve a list of calculation rules from the database. * * @author Max Milbers * @param string $onlyPublished 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(); $langFields = array('payment_name','payment_desc'); $select = 'i.*, '.implode(', ',self::joinLangSelectFields($langFields)); $joins = ' FROM `#__virtuemart_paymentmethods` as i '; $joins .= implode(' ',self::joinLangTables($this->_maintable,'i','virtuemart_paymentmethod_id')); if ($onlyPublished) { $where[] = ' `published` = 1'; } /*stAn search mod*/ $option = 'com_virtuemart'; $view = vRequest::getCmd('view',''); $keyword = JFactory::getApplication()->getUserStateFromRequest( $option.'.'.$view.'.search', 'search', '', 'string' ); if (!empty($keyword)) { $whereOr = array(); $db = JFactory::getDBO(); $keyword = $db->escape( $keyword, true ); $keyword = '"%' .str_replace(array(' ','-'),'%', $keyword). '%"'; //$keyword = $db->escape( $keyword, true ); $fields = self::joinLangLikeFields($langFields,$keyword); if (!empty($fields)) { $whereOr = array_merge($whereOr, $fields); if (!empty($whereOr)) { $where[] = ' ('.implode(' or ', $whereOr).') '; } } } /*end - stAn search mod*/ if(!VmConfig::isSite()){ $this->virtuemart_vendor_id = JFactory::getApplication()->getUserStateFromRequest( $option.'.'.$view.'.virtuemart_vendor_id', 'virtuemart_vendor_id', '', 'int' ); if(empty($this->virtuemart_vendor_id) and !vmAccess::manager('managevendors')){ $this->virtuemart_vendor_id = vmAccess::isSuperVendor(); } if(!empty($this->virtuemart_vendor_id)){ $where[] = ' `virtuemart_vendor_id` = '.(int)$this->virtuemart_vendor_id; } } $whereString = ''; if (count($where) > 0) $whereString = ' WHERE '.implode(' AND ', $where) ; $datas =$this->exeSortSearchListQuery(0,$select,$joins,$whereString,' ',$this->_getOrdering() ); if(isset($datas)){ foreach ($datas as &$data){ /* Add the paymentmethod shoppergroups */ $data->virtuemart_shoppergroup_ids = $this->getPaymentShopperGrps($data->virtuemart_paymentmethod_id); } } return $datas; } public function getPaymentShopperGrps($id){ static $cache = array(); if(!isset($cache[$id])){ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_paymentmethod_shoppergroups WHERE `virtuemart_paymentmethod_id` = "'.(int)$id.'"'; $db = JFactory::getDBO(); $db->setQuery($q); $cache[$id] = $db->loadColumn(); if(empty($cache[$id])) $cache[$id] = array(); } return $cache[$id]; } /** * 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'])){ $data['virtuemart_vendor_id'] = vmAccess::isSuperVendor(); } else { $data['virtuemart_vendor_id'] = (int) $data['virtuemart_vendor_id']; } $table = $this->getTable('paymentmethods'); vDispatcher::importVMPlugins('vmpayment'); if(isset($data['payment_jplugin_id'])){ $q = 'SELECT `element` FROM `#__extensions` WHERE `extension_id` = "'.$data['payment_jplugin_id'].'"'; $db = JFactory::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(); $retValue = vDispatcher::directTrigger( 'vmpayment', $data['payment_element'], 'plgVmSetOnTablePluginParamsPayment',array( $data['payment_element'],$data['payment_jplugin_id'],&$table)); //$retValue = vDispatcher::trigger('plgVmSetOnTablePluginPayment',array( &$data,&$table)); } $table->bindChecknStore($data); $xrefTable = $this->getTable('paymentmethod_shoppergroups'); $xrefTable->bindChecknStore($data); vDispatcher::directTrigger('vmpayment', $data['payment_element'], 'OnStoreInstallPluginTable', 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)) { vmError('createClone '. $payment->getError(),'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); } }