setMainTable('shipmentmethods'); $this->_selectedOrdering = 'ordering'; $this->setToggleName('shared'); } /** * Retrieve the detail record for the current $id if the data has not already been loaded. * * @author RickG */ function getShipment($id = 0) { if(!empty($id)) $this->_id = (int)$id; if (empty($this->_cache[$this->_id])) { $this->_cache[$this->_id] = $this->getTable('shipmentmethods'); $this->_cache[$this->_id]->load((int)$this->_id); if(empty($this->_cache[$this->_id]->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]->shipment_jplugin_id) { vPluginHelper::importPlugin ('vmshipment'); $dispatcher = vDispatcher::getInstance (); $blind = 0; $retValue = $dispatcher->trigger ('plgVmDeclarePluginParamsShipmentVM3', array(&$this->_cache[$this->_id])); } if(!empty($this->_cache[$this->_id]->_varsToPushParam)){ VmTable::bindParameterable($this->_cache[$this->_id],'shipment_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); } } } /* Add the shipmentcarreir shoppergroups */ $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_shipmentmethod_shoppergroups WHERE `virtuemart_shipmentmethod_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 shipment from the database. * * @author RickG * @return object List of shipment objects */ public function getShipments() { $whereString = ''; $joins = ' FROM `#__virtuemart_shipmentmethods` as i '; if(VmConfig::$defaultLang!=VmConfig::$vmlang and Vmconfig::$langCount>1){ $langFields = array('shipment_name','shipment_desc'); $useJLback = false; if(VmConfig::$defaultLang!=VmConfig::$jDefLang){ $joins .= ' LEFT JOIN `#__virtuemart_shipmentmethods_'.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_shipmentmethods_'.VmConfig::$defaultLang.'` as ld using (`virtuemart_shipmentmethod_id`)'; $joins .= ' LEFT JOIN `#__virtuemart_shipmentmethods_'.VmConfig::$vmlang.'` as l using (`virtuemart_shipmentmethod_id`)'; } else { $select = ' * '; $joins .= ' LEFT JOIN `#__virtuemart_shipmentmethods_'.VmConfig::$vmlang.'` as l USING (`virtuemart_shipmentmethod_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 shipment shoppergroups $q = 'SELECT `virtuemart_shoppergroup_id` FROM #__virtuemart_shipmentmethod_shoppergroups WHERE `virtuemart_shipmentmethod_id` = "'.$data->virtuemart_shipmentmethod_id.'"'; $db = vFactory::getDbo(); $db->setQuery($q); $data->virtuemart_shoppergroup_ids = $db->loadColumn(); } } return $datas; } /** * Bind the post data to the shipment 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('shipmentmethod.edit')){ vmWarn('Insufficient permissions to store shipmentmethod'); return false; } else if( empty($data['virtuemart_shipment_id']) and !vmAccess::manager('shipmentmethod.create')){ vmWarn('Insufficient permission to create shipmentmethod'); 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(); } else { $data['virtuemart_vendor_id'] = (int) $data['virtuemart_vendor_id']; } $tb = '#__extensions'; $ext_id = 'extension_id'; $q = 'SELECT `element` FROM `' . $tb . '` WHERE `' . $ext_id . '` = "'.$data['shipment_jplugin_id'].'"'; $db = vFactory::getDbo(); $db->setQuery($q); $data['shipment_element'] = $db->loadResult(); $table = $this->getTable('shipmentmethods'); if(isset($data['shipment_jplugin_id'])){ $q = 'UPDATE `#__extensions` SET `enabled`= 1 WHERE `extension_id` = "'.$data['shipment_jplugin_id'].'"'; $db->setQuery($q); $db->execute(); vPluginHelper::importPlugin('vmshipment'); $dispatcher = vDispatcher::getInstance(); //bad trigger, we should just give it data, so that the plugins itself can check the data to be stored //so this trigger is now deprecated and will be deleted in vm2.2 $retValue = $dispatcher->trigger('plgVmSetOnTablePluginParamsShipment',array( $data['shipment_element'],$data['shipment_jplugin_id'],&$table)); $retValue = $dispatcher->trigger('plgVmSetOnTablePluginShipment',array( &$data,&$table)); } $table->bindChecknStore($data); $xrefTable = $this->getTable('shipmentmethod_shoppergroups'); $xrefTable->bindChecknStore($data); if (!class_exists('vmPSPlugin')) require(VMPATH_PLUGINLIBS . DS . 'vmpsplugin.php'); vPluginHelper::importPlugin('vmshipment'); //Add a hook here for other shipment methods, checking the data of the choosed plugin $dispatcher = vDispatcher::getInstance(); $retValues = $dispatcher->trigger('plgVmOnStoreInstallShipmentPluginTable', array( $data['shipment_jplugin_id'])); return $table->virtuemart_shipmentmethod_id; } /** * Creates a clone of a given shipmentmethod id * * @author Valérie Isaksen * @param int $virtuemart_shipmentmethod_id */ public function createClone ($id) { if(!vmAccess::manager('shipmentmethod.create')){ vmWarn('Insufficient permissions to store shipmentmethod'); return false; } $this->setId ($id); $shipment = $this->getShipment(); $shipment->virtuemart_shipmentmethod_id = 0; $shipment->shipment_name = $shipment->shipment_name.' Copy'; $clone = $this->store($shipment); return $clone; } function remove($ids){ if(!vmAccess::manager('shipmentmethod.delete')){ vmWarn('Insufficient permissions to remove shipmentmethod'); return false; } return parent::remove($ids); } } //no closing tag