name */ protected $customs; function __construct (& $subject, $config) { parent::__construct ($subject, $config); $this->_tablepkey = 'virtuemart_product_id'; $this->_tablename = '#__virtuemart_product_' . $this->_psType . '_plg_' . $this->_name; $this->_idName = 'virtuemart_custom_id'; $this->_configTableFileName = $this->_psType . 's'; $this->_configTableFieldName = 'custom_params'; $this->_configTableClassName = 'Table' . ucfirst ($this->_psType) . 's'; //TablePaymentmethods $this->_configTable = '#__virtuemart_customs'; } function onDisplayEditBECustom ($virtuemart_custom_id, &$customPlugin) { //if($this->plugin = $this->selectedThisByMethodId($this->_psType,$virtuemart_custom_id)){ if ($this->plugin = $this->selectedThisByMethodId ($virtuemart_custom_id)) { if (empty($this->plugin)) { $this->plugin->custom_jplugin_id = NULL; return $this->plugin; } //Must use here the table to get valid params $this->plugin = $this->getVmPluginMethod ($this->plugin->virtuemart_custom_id); if (empty($this->plugin->virtuemart_vendor_id)) { $this->plugin->virtuemart_vendor_id = vmAccess::isSuperVendor(); } $customPlugin = $this->plugin; // return $this->plugin; return TRUE; } } /* * helper to parse plugin parameters as object * */ public function parseCustomParams (&$field, $xParams = 'customfield_params') { VmTable::bindParameterable ($field, $xParams, $this->_varsToPushParam); if (empty($field->custom_element)) { return 0; } if (!empty($field->customfield_params) && is_string ($field->customfield_params)) { $custom_params = vmJsApi::safe_json_decode ($field->customfield_params, TRUE); foreach ($custom_params as $k => $v) { if (!empty($v)) { $field->{$k} = $v; } } } } /* * helper to get plugin parameters as object * All params are added to $this->params plugin * @deprecated */ public function getCustomParams (&$field) { VmTable::bindParameterable ($field, 'customfield_params', $this->_varsToPushParam); //Why do we have this? if (empty($field->custom_element)) { return 0; } //Why do we have this, when bindParameterable could already doing it //And why we do it here, when we do it later again? foreach ($this->_varsToPushParam as $k => $v) { if (!isset($this->params->{$k})) { $this->params->{$k} = $field->{$k}; } // vmdebug('fields org '.$this->_name,$this->params); } $this->virtuemart_custom_id = $field->virtuemart_custom_id; if (!empty($field->custom_params) && is_string ($field->custom_params)) { $this->params = vmJsApi::safe_json_decode ($field->custom_params, false); } else { return; } //$field->custom_params = $custom_params; //vmdebug('$this->_varsToPushParam '.$this->_name,$this->_varsToPushParam ); foreach ($this->_varsToPushParam as $k => $v) { if (!isset($this->params->{$k}) and isset($field->{$k})) { $this->params->{$k} = $field->{$k}; } } } /** * Helper to add all params of specific product of this custom to an object * * @param object $field * @param int $product_id */ protected function getPluginProductDataCustom (&$field, $product_id) { $id = $this->getIdForCustomIdProduct ($product_id, $field->virtuemart_custom_id); $datas = $this->getPluginInternalData ($id)->loadFieldValues(); if ($datas) { //vmdebug('getPluginProductDataCustom datas',$datas); foreach ($datas as $k=> $v) { if($k=='virtuemart_product_id' or $k=='virtuemart_custom_id') continue; $field->{$k} = $v; } } } /** * helper to get plugin table as object * All params are added to $this->params plugin * * @param unknown_type $field * @param unknown_type $product_id */ protected function getPluginCustomData (&$field, $product_id) { $id = $this->getIdForCustomIdProduct ($product_id, $field->virtuemart_custom_id); $datas = $this->getPluginInternalData ($id)->loadFieldValues(false); if ($datas) { foreach ($this->_varsToPushParam as $k => $v) { if (!isset($datas->{$k})) { continue; } if (isset($this->params->{$k}) && $datas->{$k} == 0) { continue; } $this->params->{$k} = $datas->{$k}; } } } /** * This is the actions which take place, when a product gets stored * * @param string $type atm valid 'product' * @param array $data form data * @param int $id virtuemart_product_id */ function OnStoreProduct ($data, $plugin_param, $old_customfield_ids = array(), $key = -1) { if($key == -1) { vmdebug ('OnStoreProduct '.get_class($this), $key, $data, $plugin_param ); vmError('Plugin '.get_class($this).' must be updated, called in vmcustomplugin.php OnStoreProduct '); return false; } if ($data['field'][$key]['custom_element'] !== $this->_name) { vmdebug('OnStoreProduct return because key '.$data['field'][$key]['custom_element'].'!== '. $this->_name); return; } $pluginName = key ($plugin_param); // $this->id = $this->getIdForCustomIdProduct($data['virtuemart_product_id'],$plugin_param[$key]['virtuemart_custom_id']); $this->storePluginInternalDataProduct ($plugin_param[$pluginName], 'id', $data['virtuemart_product_id']); } /** * This stores the data of the plugin, attention NOT the configuration of the pluginmethod,OnStoreProduct return because * this function should never be triggered only called from triggered functions. * * @author Max Milbers * @param array $values array or object with the data to store * @param string $tableName When different then the default of the plugin, provid it here * @param string $tableKey an additionally unique key */ protected function storePluginInternalDataProduct (&$values, $primaryKey = 0, $product_id = 0) { if(!isset($values['virtuemart_product_id'])){ $values['virtuemart_product_id'] = $product_id; } if(!empty($values['virtuemart_custom_id']) and !empty($values['virtuemart_product_id'])){ $db = JFactory::getDBO (); $_qry = 'SELECT `id` FROM `#__virtuemart_product_custom_plg_' . $this->_name . '` WHERE `virtuemart_product_id`=' . (int)$product_id . ' and `virtuemart_custom_id`=' . (int)$values['virtuemart_custom_id']; $db->setQuery ($_qry); $id = $db->loadResult (); $values['id'] = $id ? $id : 0; $this->storePluginInternalData ($values); } else { vmdebug('storePluginInternalDataProduct customId or productId missing to store plugin internal data '.$this->_name,$values['virtuemart_custom_id'],$values['virtuemart_product_id']); } return $values; } /** * convert param for render and * display The plugin in cart * return null if not $this->_name */ public function GetPluginInCart ($product) { //$plgName = $productCustom->value; if (!empty($product->param)) { if (!is_array ($product->param)) { return FALSE; } $param = array(); // vmdebug('$product->param',$product->param); foreach ($product->param as $k => $plg) { if (is_array ($plg) and key ($plg) == $this->_name) { $param[$k] = $plg[$this->_name]; } } if ($param) { return $param; } } return NULL; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function selectSearchableCustom (&$selectList) { return NULL; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ /* public function plgVmAddToSearch (&$where, $searchplugin) { }*/ /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function GetNameByCustomId ($custom_id) { static $custom_element; if (isset($custom_element)) { return $custom_element; } $db = JFactory::getDBO (); $q = 'SELECT `custom_element` FROM `#__virtuemart_customs` WHERE `virtuemart_custom_id`=' . (int)$custom_id; $db->setQuery ($q); $custom_element = $db->loadResult (); return $custom_element; } /** * render the plugin with param to display on product edit * called by customfields inputTypePlugin * */ public function getIdForCustomIdProduct ($product_id, $custom_id) { $db = JFactory::getDBO (); $q = 'SELECT `id` FROM `#__virtuemart_product_custom_plg_' . $this->_name . '` WHERE `virtuemart_product_id`=' . (int)$product_id . ' and `virtuemart_custom_id`=' . (int)$custom_id; $db->setQuery ($q); return $db->loadResult (); } }