windows8
Постоялец
- Регистрация
- 12 Июл 2012
- Сообщения
- 36
- Реакции
- 50
- Автор темы
- #1
Доброго времени суток.Требуется помощь в выводе атрибута корзины selectom, сейчас вывод работает через radio button, собственно вот Для просмотра ссылки Войди или Зарегистрируйся
Помогите пожалуйста разобраться
Сам файл customfilds.php вот
Помогите пожалуйста разобраться
Сам файл customfilds.php вот
PHP:
<?php
/**
*
* Description
*
* @package VirtueMart
* @subpackage
* @author Max Milbers
* @link http://www.virtuemart.net
* @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved by the author.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* @version $Id: custom.php 3057 2011-04-19 12:59:22Z Electrocity $
*/
// Check to ensure this file is included in Joomla!
defined ('_JEXEC') or die('Restricted access');
if (!class_exists ('VmModel')) {
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'vmmodel.php');
}
/**
* Model for VirtueMart Customs Fields
*
* @package VirtueMart
*/
class VirtueMartModelCustomfields extends VmModel {
/**
* constructs a VmModel
* setMainTable defines the maintable of the model
*
* @author Max Milbers
*/
//function __construct($modelName ='product') {
function __construct ($modelName = 'product') {
parent::__construct ('virtuemart_customfield_id');
$this->setMainTable ('product_customfields');
}
/**
* Gets a single custom by virtuemart_customfield_id
*
* @param string $type
* @param string $mime mime type of custom, use for exampel image
* @return customobject
*/
function getCustomfield () {
$this->data = $this->getTable ('product_customfields');
$this->data->load ($this->_id);
return $this;
}
// **************************************************
// Custom FIELDS
//
function getProductCustomsChilds ($childs) {
$data = array();
foreach ($childs as $child) {
$query = 'SELECT C.* , field.*
FROM `#__virtuemart_product_customfields` AS field
LEFT JOIN `#__virtuemart_customs` AS C ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
WHERE `virtuemart_product_id` =' . (int)$child->virtuemart_product_id;
$query .= ' and C.field_type = "C" ';
$this->_db->setQuery ($query);
$child->field = $this->_db->loadObject ();
$customfield = new stdClass();
$customfield->custom_value = $child->virtuemart_product_id;
$customfield->field_type = 'C';
$child->display = $this->displayProductCustomfieldFE ($child, $customfield);
if ($child->field) {
$data[] = $child;
}
}
return $data;
}
public function getCustomParentTitle ($custom_parent_id) {
$q = 'SELECT custom_title FROM `#__virtuemart_customs` WHERE virtuemart_custom_id =' . (int)$custom_parent_id;
$this->_db->setQuery ($q);
return $this->_db->loadResult ();
}
/** @return autorized Types of data **/
function getField_types () {
return array('S' => 'COM_VIRTUEMART_CUSTOM_STRING',
'I' => 'COM_VIRTUEMART_CUSTOM_INT',
'P' => 'COM_VIRTUEMART_CUSTOM_PARENT',
'B' => 'COM_VIRTUEMART_CUSTOM_BOOL',
'D' => 'COM_VIRTUEMART_DATE',
'T' => 'COM_VIRTUEMART_TIME',
'M' => 'COM_VIRTUEMART_IMAGE',
'V' => 'COM_VIRTUEMART_CUSTOM_CART_VARIANT',
'A' => 'COM_VIRTUEMART_CHILD_GENERIC_VARIANT',
'X' => 'COM_VIRTUEMART_CUSTOM_EDITOR',
'Y' => 'COM_VIRTUEMART_CUSTOM_TEXTAREA',
'E' => 'COM_VIRTUEMART_CUSTOM_EXTENSION'
);
// 'U'=>'COM_VIRTUEMART_CUSTOM_CART_USER_VARIANT',
// 'C'=>'COM_VIRTUEMART_CUSTOM_PRODUCT_CHILD',
// 'G'=>'COM_VIRTUEMART_CUSTOM_PRODUCT_CHILD_GROUP',
//'R'=>'COM_VIRTUEMART_RELATED_PRODUCT',
//'Z'=>'COM_VIRTUEMART_RELATED_CATEGORY',
}
static function setParameterableByFieldType(&$table,$type=0){
if($type===0) $type = $table->field_type;
$varsToPush = self::getVarsToPush($type);
if(!empty($varsToPush)){
$table->setParameterable('custom_param',$varsToPush,TRUE);
}
}
static function bindParameterableByFieldType(&$table,$type=0){
if($type===0) $type = $table->field_type;
$varsToPush = self::getVarsToPush($type);
if(!empty($varsToPush)){
VmTable::bindParameterable($table,'custom_param',$varsToPush);
}
}
static function getVarsToPush($type){
$varsToPush = 0;
if($type=='A'){
$varsToPush = array(
'withParent' => array(0, 'int'),
'parentOrderable' => array(0, 'int')
);
}
return $varsToPush;
}
private $_hidden = array();
/**
* Use this to adjust the hidden fields of the displaycustomHandler to your form
*
* @author Max Milbers
* @param string $name for exampel view
* @param string $value for exampel custom
*/
public function addHidden ($name, $value = '') {
$this->_hidden[$name] = $value;
}
/**
* Adds the hidden fields which are needed for the form in every case
*
* @author Max Milbers
* OBSELTE ?
*/
private function addHiddenByType ($datas) {
$this->addHidden ('virtuemart_custom_id', $datas->virtuemart_custom_id);
$this->addHidden ('option', 'com_virtuemart');
}
/**
* Displays a possibility to select created custom
*
* @author Max Milbers
* @author Patrick Kohl
*/
public function displayCustomSelection () {
$customslist = $this->getCustomsList ();
if (isset($this->virtuemart_custom_id)) {
$value = $this->virtuemart_custom_id;
}
else {
$value = JRequest::getInt ('custom_parent_id', 0);
}
return VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_PARENT', 'custom_parent_id', $customslist, $value);
}
/**
* Retrieve a list of layouts from the default and chosen templates directory.
*
* We may use here the getCustoms function of the custom model or write something simular
*
* @author Max Milbers
* @param name of the view
* @return object List of flypage objects
*/
function getCustomsList ($publishedOnly = FALSE) {
$vendorId = 1;
// get custom parents
$q = 'SELECT virtuemart_custom_id as value ,custom_title as text FROM `#__virtuemart_customs` where custom_parent_id=0
AND field_type <> "R" AND field_type <> "Z" ';
if ($publishedOnly) {
$q .= 'AND `published`=1';
}
if ($ID = JRequest::getInt ('virtuemart_custom_id', 0)) {
$q .= ' and `virtuemart_custom_id`!=' . (int)$ID;
}
//if (isset($this->virtuemart_custom_id)) $q.=' and virtuemart_custom_id !='.$this->virtuemart_custom_id;
$this->_db->setQuery ($q);
//$result = $this->_db->loadAssocList();
$result = $this->_db->loadObjectList ();
$errMsg = $this->_db->getErrorMsg ();
$errs = $this->_db->getErrors ();
if (!empty($errMsg)) {
$app = JFactory::getApplication ();
$errNum = $this->_db->getErrorNum ();
$app->enqueueMessage ('SQL-Error: ' . $errNum . ' ' . $errMsg);
}
if ($errs) {
$app = JFactory::getApplication ();
foreach ($errs as $err) {
$app->enqueueMessage ($err);
}
}
return $result;
}
/**
* This displays a custom handler.
*
* @param string $html atttributes, Just for displaying the fullsized image
*/
public function displayCustomFields ($datas) {
$identify = ''; // ':'.$this->virtuemart_custom_id;
if (!class_exists ('VmHTML')) {
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php');
}
if ($datas->field_type) {
$this->addHidden ('field_type', $datas->field_type);
}
$this->addHiddenByType ($datas);
//$html = '<div id="custom_title">'.$datas->custom_title.'</div>';
$html = "";
//$html = ' <table class="admintable"> ';
if (!class_exists ('Permissions')) {
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php');
}
if (!Permissions::getInstance ()->check ('admin')) {
$readonly = 'readonly';
}
else {
$readonly = '';
}
// only input when not set else display
if ($datas->field_type) {
$html .= VmHTML::row ('value', 'COM_VIRTUEMART_CUSTOM_FIELD_TYPE', $datas->field_types[$datas->field_type]);
}
else {
$html .= VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_FIELD_TYPE', 'field_type', $this->getOptions ($datas->field_types), $datas->field_type, VmHTML::validate ('R'));
}
$html .= VmHTML::row ('input', 'COM_VIRTUEMART_TITLE', 'custom_title', $datas->custom_title, VmHTML::validate ('S'));
$html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_PUBLISHED', 'published', $datas->published);
$html .= VmHTML::row ('select', 'COM_VIRTUEMART_CUSTOM_PARENT', 'custom_parent_id', $this->getParentList ($datas->virtuemart_custom_id), $datas->custom_parent_id, '');
$html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_CART_ATTRIBUTE', 'is_cart_attribute', $datas->is_cart_attribute);
$html .= VmHTML::row ('input', 'COM_VIRTUEMART_DESCRIPTION', 'custom_field_desc', $datas->custom_field_desc);
// change input by type
$html .= VmHTML::row ('input', 'COM_VIRTUEMART_DEFAULT', 'custom_value', $datas->custom_value);
$html .= VmHTML::row ('input', 'COM_VIRTUEMART_CUSTOM_TIP', 'custom_tip', $datas->custom_tip);
$html .= VmHTML::row ('input', 'COM_VIRTUEMART_CUSTOM_LAYOUT_POS', 'layout_pos', $datas->layout_pos);
//$html .= VmHTML::row('booleanlist','COM_VIRTUEMART_CUSTOM_PARENT','custom_parent_id',$this->getCustomsList(), $datas->custom_parent_id,'');
$html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_ADMIN_ONLY', 'admin_only', $datas->admin_only);
$html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_LIST', 'is_list', $datas->is_list);
$html .= VmHTML::row ('booleanlist', 'COM_VIRTUEMART_CUSTOM_IS_HIDDEN', 'is_hidden', $datas->is_hidden);
// $html .= '</table>'; removed
$html .= VmHTML::inputHidden ($this->_hidden);
return $html;
}
/**
* child classes can add their own options and you can get them with this function
*
* @param array $optionsarray
*/
private function getOptions ($field_types) {
$options = array();
foreach ($field_types as $optionName=> $langkey) {
$options[] = JHTML::_ ('select.option', $optionName, JText::_ ($langkey));
}
return $options;
}
/**
* Just for creating simpel rows
*
* @author Max Milbers
* @param string $descr
* @param string $name
*/
private function displayRow ($descr, $name, $readonly = '') {
$html = '<tr>
<td class="labelcell">' . JText::_ ($descr) . '</td>
<td> <input type="text" ' . $readonly . 'class="inputbox ' . $readonly . '" name="' . $name . '" size="70" value="' . $this->$name . '" /></td>
</tr>';
return $html;
}
/**
*
* Enter description here ...
*
* @param unknown_type $excludedId
* @return unknown|multitype:
*/
function getParentList ($excludedId = 0) {
$this->_db->setQuery (' SELECT virtuemart_custom_id as value,custom_title as text FROM `#__virtuemart_customs` WHERE `field_type` ="P" and virtuemart_custom_id!=' . $excludedId);
if ($results = $this->_db->loadObjectList ()) {
return $results;
}
else {
return array();
}
}
/**
*
* Enter description here ...
*/
function getProductChildCustomRelation () {
$this->_db->setQuery (' SELECT virtuemart_custom_id as value,custom_title as text FROM `#__virtuemart_customs` WHERE `field_type` ="C"');
if ($results = $this->_db->loadObjectList ()) {
return $results;
}
else {
return array();
}
}
/**
*
* Enter description here ...
*
* @param unknown_type $product_id
* @return unknown
*/
function getProductChildCustom ($product_id) {
$this->_db->setQuery (' SELECT `virtuemart_custom_id`,`custom_value` FROM `#__virtuemart_product_customfields` WHERE `virtuemart_product_id` =' . (int)$product_id);
if ($childcustom = $this->_db->loadObject ()) {
return $childcustom;
}
else {
$childcustom->virtuemart_custom_id = 0;
$childcustom->custom_value = '';
return $childcustom;
}
}
/**
*
* Enter description here ...
*
* @param unknown_type $product_id
* @return string|Ambigous <string, mixed, multitype:>
*/
function getProductParentRelation ($product_id) {
$this->_db->setQuery (' SELECT `custom_value` FROM `#__virtuemart_product_customfields` WHERE `virtuemart_product_id` =' . (int)$product_id);
if ($childcustom = $this->_db->loadResult ()) {
return '(' . $childcustom . ')';
}
else {
return JText::_ ('COM_VIRTUEMART_CUSTOM_NO_PARENT_RELATION');
}
}
/**
* AUthor Kohl Patrick
* Load all custom fields for a Single product
* return custom fields value and definition
*/
public function getproductCustomslist ($virtuemart_product_id, $parent_id = NULL) {
$query = 'SELECT C.`virtuemart_custom_id` , `custom_element`, `custom_jplugin_id`, `custom_params`, `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_cart_attribute` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`,field.`custom_param`,field.`custom_price`,field.`ordering`
FROM `#__virtuemart_customs` AS C
LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
Where `virtuemart_product_id` =' . $virtuemart_product_id . ' order by field.`ordering` ASC';
$this->_db->setQuery ($query);
$productCustoms = $this->_db->loadObjectList ();
//if (!$productCustoms ) return array();
if (!$productCustoms) {
return;
}
$row = 0;
foreach ($productCustoms as $field) {
if ($parent_id) {
$field->custom_value = "";
$field->virtuemart_customfield_id = "";
$field->custom_param = NULL;
$virtuemart_product_id = $parent_id;
}
if ($field->field_type == 'E') {
JPluginHelper::importPlugin ('vmcustom');
$dispatcher = JDispatcher::getInstance ();
$retValue = $dispatcher->trigger ('plgVmDeclarePluginParams', array('custom', $field->custom_element, $field->custom_jplugin_id, $field));
}else {
VirtueMartModelCustomfields::bindParameterableByFieldType($field);
}
//vmdebug('fields',$field);
$field->display = $this->displayProductCustomfieldBE ($field, $virtuemart_product_id, $row); //custom_param without S !!!
$row++;
}
return $productCustoms;
}
/* Save and delete from database
* all product custom_fields and xref
@ var $table: the xref table(eg. product,category ...)
@array $data: array of customfields
@int $id: The concerned id (eg. product_id)
*/
public function storeProductCustomfields($table,$datas, $id) {
//vmdebug('storeProductCustomfields',$datas);
JRequest::checkToken() or jexit( 'Invalid Token, in store customfields');
//Sanitize id
$id = (int)$id;
//Table whitelist
$tableWhiteList = array('product','category','manufacturer');
if(!in_array($table,$tableWhiteList)) return false;
// Get old IDS
$this->_db->setQuery( 'SELECT `virtuemart_customfield_id` FROM `#__virtuemart_'.$table.'_customfields` as `PC` WHERE `PC`.virtuemart_'.$table.'_id ='.$id );
$old_customfield_ids = $this->_db->loadResultArray();
if (isset ( $datas['custom_param'] )) $params = true ;
else $params = false ;
if (array_key_exists('field', $datas)) {
//vmdebug('datas save',$datas);
$customfieldIds = array();
foreach($datas['field'] as $key => $fields){
$fields['virtuemart_'.$table.'_id'] =$id;
$tableCustomfields = $this->getTable($table.'_customfields');
$tableCustomfields->setPrimaryKey('virtuemart_product_id');
if (!empty($datas['custom_param'][$key]) and !isset($datas['clone']) ) {
if (array_key_exists( $key,$datas['custom_param'])) {
$fields['custom_param'] = json_encode($datas['custom_param'][$key]);
}
}
VirtueMartModelCustomfields::setParameterableByFieldType($tableCustomfields,$fields['field_type']);
if(!isset($datas['clone'])){
VirtueMartModelCustomfields::bindParameterableByFieldType($tableCustomfields,$fields['field_type']);
}
$tableCustomfields->bindChecknStore($fields);
$errors = $tableCustomfields->getErrors();
foreach($errors as $error){
vmError($error);
}
$key = array_search($fields['virtuemart_customfield_id'], $old_customfield_ids );
if ($key !== false ) unset( $old_customfield_ids[ $key ] );
//vmdebug('datas clone',$old_customfield_ids,$fields);
}
}
if ( count($old_customfield_ids) ) {
// delete old unused Customfields
$this->_db->setQuery( 'DELETE FROM `#__virtuemart_'.$table.'_customfields` WHERE `virtuemart_customfield_id` in ("'.implode('","', $old_customfield_ids ).'") ');
$this->_db->query();
}
JPluginHelper::importPlugin('vmcustom');
$dispatcher = JDispatcher::getInstance();
if (is_array($datas['plugin_param'])) {
foreach ($datas['plugin_param'] as $key => $plugin_param ) {
$dispatcher->trigger('plgVmOnStoreProduct', array($datas, $plugin_param ));
}
}
}
/**
* Formatting admin display by roles
* input Types for product only !
* $field->is_cart_attribute if can have a price
*/
public function displayProductCustomfieldBE ($field, $product_id, $row) {
$field->custom_value = empty($field->custom_value) ? $field->value : $field->custom_value;
if ($field->is_cart_attribute) {
$priceInput = '<input type="text" value="' . (isset($field->custom_price) ? $field->custom_price : '0') . '" name="field[' . $row . '][custom_price]" />';
}
else {
$priceInput = ' ';
}
if ($field->is_list) {
$options = array();
$values = explode (';', $field->custom_value);
foreach ($values as $key => $val) {
$options[] = array('value' => $val, 'text' => $val);
}
return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]') . '</td><td>' . $priceInput;
}
else {
switch ($field->field_type) {
case 'A':
//vmdebug('displayProductCustomfieldBE $field',$field);
if(!isset($field->withParent)) $field->withParent = 0;
if(!isset($field->parentOrderable)) $field->parentOrderable = 0;
//vmdebug('displayProductCustomfieldFE',$field);
if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'html.php');
$html = JText::_('COM_VIRTUEMART_CUSTOM_WP').VmHTML::checkbox('field[' . $row . '][withParent]',$field->withParent,1,0,'').'<br />';
$html .= JText::_('COM_VIRTUEMART_CUSTOM_PO').VmHTML::checkbox('field[' . $row . '][parentOrderable]',$field->parentOrderable,1,0,'');
$options = array();
//$options[] = array( 'value' => 'product_name' ,'text' =>JText::_('COM_VIRTUEMART_PRODUCT_FORM_NAME')); Is anyway displayed there
$options[] = array('value' => 'product_sku', 'text' => JText::_ ('COM_VIRTUEMART_PRODUCT_FORM_SKU'));
$options[] = array('value' => 'slug', 'text' => JText::_ ('COM_VIRTUEMART_PRODUCT_FORM_ALIAS'));
$options[] = array('value' => 'product_length', 'text' => JText::_ ('COM_VIRTUEMART_PRODUCT_LENGTH'));
$options[] = array('value' => 'product_width', 'text' => JText::_ ('COM_VIRTUEMART_PRODUCT_WIDTH'));
$options[] = array('value' => 'product_height', 'text' => JText::_ ('COM_VIRTUEMART_PRODUCT_HEIGHT'));
$options[] = array('value' => 'product_weight', 'text' => JText::_ ('COM_VIRTUEMART_PRODUCT_WEIGHT'));
$html .= JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', '', 'value', 'text', $field->custom_value) . '</td><td>' . $priceInput;
return $html;
//return 'Automatic Childvariant creation (later you can choose here attributes to show, now product name) </td><td>';
break;
// variants
case 'V':
return '<input type="text" value="' . $field->custom_value . '" name="field[' . $row . '][custom_value]" /></td><td>' . $priceInput;
break;
/*
* Stockable (group of) child variants
* Special type setted by the plugin
*/
case 'G':
return;
break;
/*Extended by plugin*/
case 'E':
$html = '<input type="hidden" value="' . $field->value . '" name="field[' . $row . '][custom_value]" />';
if (!class_exists ('vmCustomPlugin')) {
require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php');
}
JPluginHelper::importPlugin ('vmcustom', $field->custom_element);
$dispatcher = JDispatcher::getInstance ();
$retValue = '';
$dispatcher->trigger ('plgVmOnProductEdit', array($field, $product_id, &$row, &$retValue));
return $html . $retValue . $priceInput;
break;
case 'D':
return vmJsApi::jDate ($field->custom_value, 'field[' . $row . '][custom_value]', 'field_' . $row . '_customvalue') . $priceInput;
break;
case 'T':
//TODO Patrick
return '<input type="text" value="' . $field->custom_value . '" name="field[' . $row . '][custom_value]" /></td><td>' . $priceInput;
break;
/* string or integer */
case 'S':
case 'I':
return '<input type="text" value="' . $field->custom_value . '" name="field[' . $row . '][custom_value]" /></td><td>' . $priceInput;
break;
case 'I':
return '<input type="text" value="' . $field->custom_value . '" name="field[' . $row . '][custom_value]" /></td><td>' . $priceInput;
break;
//'X'=>'COM_VIRTUEMART_CUSTOM_EDITOR',
case 'X':
return '<textarea class="mceInsertContentNew" name="field[' . $row . '][custom_value]" id="field-' . $row . '-custom_value">' . $field->custom_value . '</textarea>
<script type="text/javascript">// Creates a new editor instance
tinymce.execCommand("mceAddControl",true,"field-' . $row . '-custom_value")
</script></td><td>' . $priceInput;
//return '<input type="text" value="'.$field->custom_value.'" name="field['.$row.'][custom_value]" /></td><td>'.$priceInput;
break;
//'Y'=>'COM_VIRTUEMART_CUSTOM_TEXTAREA'
case 'Y':
return '<textarea id="field[' . $row . '][custom_value]" name="field[' . $row . '][custom_value]" class="inputbox" cols=80 rows=50 >' . $field->custom_value . '</textarea></td><td>' . $priceInput;
//return '<input type="text" value="'.$field->custom_value.'" name="field['.$row.'][custom_value]" /></td><td>'.$priceInput;
break;
case 'editorta':
jimport ('joomla.html.editor');
$editor = JFactory::getEditor ();
//TODO This is wrong!
$_return['fields'][$_fld->name]['formcode'] = $editor->display ($_prefix . $_fld->name, $_return['fields'][$_fld->name]['value'], 300, 150, $_fld->cols, $_fld->rows);
break;
/* bool */
case 'B':
return JHTML::_ ('select.booleanlist', 'field[' . $row . '][custom_value]', 'class="inputbox"', $field->custom_value) . '</td><td>' . $priceInput;
break;
/* parent */
case 'P':
return $field->custom_value . '<input type="hidden" value="' . $field->custom_value . '" name="field[' . $row . '][custom_value]" /></td><td>';
break;
/* related category*/
case 'Z':
if (!$field->custom_value) {
return '';
} // special case it's category ID !
$q = 'SELECT * FROM `#__virtuemart_categories_' . VMLANG . '` JOIN `#__virtuemart_categories` AS p using (`virtuemart_category_id`) WHERE `published`=1 AND `virtuemart_category_id`= "' . (int)$field->custom_value . '" ';
$this->_db->setQuery ($q);
//echo $this->_db->_sql;
if ($category = $this->_db->loadObject ()) {
$q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias` WHERE `virtuemart_category_id`= "' . (int)$field->custom_value . '" ';
$this->_db->setQuery ($q);
$thumb = '';
if ($media_id = $this->_db->loadResult ()) {
$thumb = $this->displayCustomMedia ($media_id);
}
$display = '<input type="hidden" value="' . $field->custom_value . '" name="field[' . $row . '][custom_value]" />';
return $display . JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=category&task=edit&virtuemart_category_id=' . (int)$field->custom_value), $thumb . ' ' . $category->category_name, array('title' => $category->category_name)) . $display;
}
else {
return 'no result';
}
/* related product*/
case 'R':
if (!$field->custom_value) {
return '';
}
$q = 'SELECT `product_name`,`product_sku`,`product_s_desc` FROM `#__virtuemart_products_' . VMLANG . '` as l JOIN `#__virtuemart_products` AS p using (`virtuemart_product_id`) WHERE `virtuemart_product_id`=' . (int)$field->custom_value;
$this->_db->setQuery ($q);
$related = $this->_db->loadObject ();
$display = $related->product_name . '(' . $related->product_sku . ')';
$display = '<input type="hidden" value="' . $field->custom_value . '" name="field[' . $row . '][custom_value]" />';
$q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_product_medias`WHERE `virtuemart_product_id`= "' . (int)$field->custom_value . '" AND (`ordering` = 0 OR `ordering` = 1)';
$this->_db->setQuery ($q);
$thumb = '';
if ($media_id = $this->_db->loadResult ()) {
$thumb = $this->displayCustomMedia ($media_id);
}
return $display . JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id=' . $field->custom_value), $thumb . '<br /> ' . $related->product_name, array('title' => $related->product_name . '<br/>' . $related->product_s_desc));
break;
/* image */
case 'M':
if (empty($product)) {
$vendorId = 1;
}
else {
$vendorId = $product->virtuemart_vendor_id;
}
$q = 'SELECT `virtuemart_media_id` as value,`file_title` as text FROM `#__virtuemart_medias` WHERE `published`=1
AND (`virtuemart_vendor_id`= "' . $vendorId . '" OR `shared` = "1")';
$this->_db->setQuery ($q);
$options = $this->_db->loadObjectList ();
return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', '', 'value', 'text', $field->custom_value) . '</td><td>' . $priceInput;
break;
/* Child product Group */
case 'G':
break;
/* Child product */
/*case 'C':
if (empty($product)){
$virtuemart_product_id = JRequest::getInt('virtuemart_product_id', 0);
} else {
$virtuemart_product_id = $product->virtuemart_product_id;
}
$html = '';
$q='SELECT concat(`product_sku`,":",`product_name`) as text ,`virtuemart_product_id`,`product_in_stock` FROM `#__virtuemart_products` WHERE `published`=1
AND `virtuemart_product_id`= "'.$field->custom_value.'"';
//$db->setQuery(' SELECT virtuemart_product_id, product_name FROM `#__virtuemart_products` WHERE `product_parent_id` ='.(int)$product_id);
$this->_db->setQuery($q);
if ($child = $this->_db->loadObject()) {
$html .= JHTML::link ( JRoute::_ ( 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$field->custom_value), $child->text.' ('.$field->custom_value.')', array ('title' => $child->text ));
$html .= ' '.JText::_('COM_VIRTUEMART_PRODUCT_FORM_IN_STOCK').':'.$child->product_in_stock ;
$html .= '<input type="hidden" value="'.$child->virtuemart_product_id.'" name="field['.$row.'][custom_value]" /></div><div>'.$priceInput;
return $html;
//return '<input type="text" value="'.$field->custom_value.'" name="field['.$row.'][custom_value]" />';
}
else return JText::_('COM_VIRTUEMART_CUSTOM_NO_CHILD_PRODUCT');
break;*/
}
}
}
public function getProductCustomsField ($product) {
$query = 'SELECT C.`virtuemart_custom_id` , `custom_element`, `custom_params`, `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden`, `layout_pos`, C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering`
FROM `#__virtuemart_customs` AS C
LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` != "G" and `field_type` != "R" and `field_type` != "Z"';
$query .= ' and is_cart_attribute = 0 order by field.`ordering`,virtuemart_custom_id';
$this->_db->setQuery ($query);
if ($productCustoms = $this->_db->loadObjectList ()) {
$row = 0;
if (!class_exists ('vmCustomPlugin')) {
require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php');
}
foreach ($productCustoms as $field) {
if ($field->field_type == "E") {
$field->display = '';
JPluginHelper::importPlugin ('vmcustom');
$dispatcher = JDispatcher::getInstance ();
$ret = $dispatcher->trigger ('plgVmOnDisplayProductFE', array($product, &$row, &$field));
}
else {
$field->display = $this->displayProductCustomfieldFE ($product, $field, $row);
}
$row++;
}
return $productCustoms;
}
else {
return array();
}
}
public function getProductCustomsFieldRelatedCategories ($product) {
$query = 'SELECT C.`virtuemart_custom_id` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering`
FROM `#__virtuemart_customs` AS C
LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` = "Z"';
$query .= ' and is_cart_attribute = 0 order by virtuemart_custom_id';
$this->_db->setQuery ($query);
if ($productCustoms = $this->_db->loadObjectList ()) {
$row = 0;
foreach ($productCustoms as & $field) {
$field->display = $this->displayProductCustomfieldFE ($product, $field, $row);
$row++;
}
return $productCustoms;
}
else {
return array();
}
}
public function getProductCustomsFieldRelatedProducts ($product) {
$query = 'SELECT C.`virtuemart_custom_id` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering`
FROM `#__virtuemart_customs` AS C
LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` = "R"';
$query .= ' and is_cart_attribute = 0 order by virtuemart_custom_id';
$this->_db->setQuery ($query);
if ($productCustoms = $this->_db->loadObjectList ()) {
$row = 0;
foreach ($productCustoms as & $field) {
$field->display = $this->displayProductCustomfieldFE ($product, $field, $row);
$row++;
}
return $productCustoms;
}
else {
return array();
}
}
/**
* Display for the cart
*
* @author Patrick Kohl
* @param obj $product product object
* @return html code
*/
public function getProductCustomsFieldCart ($product) {
// group by virtuemart_custom_id
$query = 'SELECT C.`virtuemart_custom_id`, `custom_title`, C.`custom_value`,`custom_field_desc` ,`custom_tip`,`field_type`,field.`virtuemart_customfield_id`,`is_hidden`
FROM `#__virtuemart_customs` AS C
LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id . ' and `field_type` != "G" and `field_type` != "R" and `field_type` != "Z"';
$query .= ' and is_cart_attribute = 1 group by virtuemart_custom_id ORDER BY field.`ordering`';
$this->_db->setQuery ($query);
$groups = $this->_db->loadObjectList ();
if (!class_exists ('VmHTML')) {
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'html.php');
}
$row = 0;
if (!class_exists ('CurrencyDisplay')) {
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php');
}
$currency = CurrencyDisplay::getInstance ();
if (!class_exists ('calculationHelper')) {
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php');
}
$calculator = calculationHelper::getInstance ();
if (!class_exists ('vmCustomPlugin')) {
require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php');
}
$free = JText::_ ('COM_VIRTUEMART_CART_PRICE_FREE');
// render select list
foreach ($groups as $group) {
//$query='SELECT field.`virtuemart_customfield_id` as value ,concat(field.`custom_value`," :bu ", field.`custom_price`) AS text
$query = 'SELECT field.`virtuemart_product_id`, `custom_params`,`custom_element`, field.`virtuemart_custom_id`,
field.`virtuemart_customfield_id`,field.`custom_value`, field.`custom_price`, field.`custom_param`
FROM `#__virtuemart_customs` AS C
LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
Where `virtuemart_product_id` =' . (int)$product->virtuemart_product_id;
$query .= ' and is_cart_attribute = 1 and C.`virtuemart_custom_id`=' . (int)$group->virtuemart_custom_id;
// We want the field to be ordered as the user defined
$query .= ' ORDER BY field.`ordering`';
$this->_db->setQuery ($query);
$options = $this->_db->loadObjectList ();
//vmdebug('getProductCustomsFieldCart options',$options);
$group->options = array();
foreach ($options as $option) {
$group->options[$option->virtuemart_customfield_id] = $option;
}
if ($group->field_type == 'V') {
$default = current ($group->options);
foreach ($group->options as $productCustom) {
if ((float)$productCustom->custom_price) {
$price = strip_tags ($currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price)));
}
else {
$price = ($productCustom->custom_price === '') ? '' : $free;
}
$productCustom->text = $productCustom->custom_value . ' ' . $price;
}
$group->display = VmHTML::select ('customPrice[' . $row . '][' . $group->virtuemart_custom_id . ']', $group->options, $default->custom_value, '', 'virtuemart_customfield_id', 'text', FALSE);
}
else {
if ($group->field_type == 'G') {
$group->display .= ''; // no direct display done by plugin;
}
else {
if ($group->field_type == 'E') {
$group->display = '';
foreach ($group->options as $k=> $productCustom) {
if ((float)$productCustom->custom_price) {
$price = $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price));
}
else {
$price = ($productCustom->custom_price === '') ? '' : $free;
}
$productCustom->text = $productCustom->custom_value . ' ' . $price;
$productCustom->virtuemart_customfield_id = $k;
if (!class_exists ('vmCustomPlugin')) {
require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php');
}
//legacy, it will be removed 2.2
$productCustom->value = $productCustom->virtuemart_customfield_id;
JPluginHelper::importPlugin ('vmcustom');
$dispatcher = JDispatcher::getInstance ();
$fieldsToShow = $dispatcher->trigger ('plgVmOnDisplayProductVariantFE', array($productCustom, &$row, &$group));
//$group->display .= '<input type="hidden" value="' . $k . '" name="customPrice[' . $row . '][' . $group->virtuemart_custom_id . ']" /> ';
$group->display .= '<input type="hidden" value="' . $productCustom->virtuemart_customfield_id . '" name="customPrice[' . $row . '][' . $productCustom->virtuemart_custom_id . ']" /> ';
if (!empty($currency->_priceConfig['variantModification'][0]) and $price !== '') {
$group->display .= '<div class="price-plugin">' . JText::_ ('COM_VIRTUEMART_CART_PRICE') . '<span class="price-plugin">' . $price . '</span></div>';
}
$row++;
}
$row--;
}
else {
if ($group->field_type == 'U') {
foreach ($group->options as $productCustom) {
if ((float)$productCustom->custom_price) {
$price = $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price));
}
else {
$price = ($productCustom->custom_price === '') ? '' : $free;
}
$productCustom->text = $productCustom->custom_value . ' ' . $price;
$group->display .= '<input type="text" value="' . JText::_ ($productCustom->custom_value) . '" name="customPrice[' . $row . '][' . $group->virtuemart_custom_id . '][' . $productCustom->value . ']" /> ';
if (!empty($currency->_priceConfig['variantModification'][0]) and $price !== '') {
$group->display .= '<div class="price-plugin">' . JText::_ ('COM_VIRTUEMART_CART_PRICE') . '<span class="price-plugin">' . $price . '</span></div>';
}
}
}
else {
if ($group->field_type == 'A') {
$group->display = '';
foreach ($group->options as $productCustom) {
/*if ((float)$productCustom->custom_price) {
$price = $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price));
}
else {
$price = ($productCustom->custom_price === '') ? '' : $free;
}*/
$productCustom->field_type = $group->field_type;
$productCustom->is_cart = 1;
$group->display .= $this->displayProductCustomfieldFE ($product, $productCustom, $row);
$checked = '';
}
}
else {
$group->display = '';
$checked = 'checked="checked"';
foreach ($group->options as $productCustom) {
//vmdebug('getProductCustomsFieldCart',$productCustom);
if ((float)$productCustom->custom_price) {
$price = $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price));
}
else {
$price = ($productCustom->custom_price === '') ? '' : $free;
}
$productCustom->field_type = $group->field_type;
$productCustom->is_cart = 1;
//$group->display .= '<input id="' . $productCustom->virtuemart_custom_id . '" ' . $checked . ' type="radio" value="' .
//$productCustom->virtuemart_custom_id . '" name="customPrice[' . $row . '][' . $productCustom->virtuemart_customfield_id . ']" /><label
//for="' . $productCustom->virtuemart_custom_id . '">' . $this->displayProductCustomfieldFE ($productCustom, $row) . ' ' . $price . '</label>';
//MarkerVarMods
$group->display .= '<input id="' . $productCustom->virtuemart_custom_id . '" ' . $checked . ' type="radio" value="' .
$productCustom->virtuemart_customfield_id . '" name="customPrice[' . $row . '][' . $productCustom->virtuemart_custom_id . ']" /><label
for="' . $productCustom->virtuemart_custom_id . '">' . $this->displayProductCustomfieldFE ($product, $productCustom, $row) . ' ' . $price . '</label>';
$checked = '';
}
}
}
}
}
}
$row++;
}
return $groups;
}
/**
* Formating front display by roles
* for product only !
*/
public function displayProductCustomfieldFE (&$product, $customfield, $row = '') {
$virtuemart_custom_id = isset($customfield->virtuemart_custom_id)? $customfield->virtuemart_custom_id:0;
$value = $customfield->custom_value;
$type = $customfield->field_type;
$is_list = isset($customfield->is_list)? $customfield->is_list:0;
$price = isset($customfield->custom_price)? $customfield->custom_price:0;
$is_cart = isset($customfield->is_cart)? $customfield->is_cart:0;
//vmdebug('displayProductCustomfieldFE and here is something wrong ',$customfield);
if (!class_exists ('CurrencyDisplay'))
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php');
$currency = CurrencyDisplay::getInstance ();
if ($is_list > 0) {
$values = explode (';', $value);
if ($is_cart != 0) {
$options = array();
foreach ($values as $key => $val) {
$options[] = array('value' => $val, 'text' => $val);
}
vmdebug('displayProductCustomfieldFE is a list ',$options);
return JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', NULL, 'value', 'text', FALSE, TRUE);
}
else {
$html = '';
//if($type=='M'){
//foreach ($values as $key => $val){
//$html .= '<div id="custom_'.$virtuemart_custom_id.'_'.$val.'" >'.$this->displayCustomMedia($val).'</div>';
//}
//} else {
//foreach ($values as $key => $val){
$html .= '<div id="custom_' . $virtuemart_custom_id . '_' . $value . '" >' . $value . '</div>';
//}
//}
return $html;
}
}
else {
if ($price > 0) {
$price = $currency->priceDisplay ((float)$price);
}
switch ($type) {
case 'A':
$options = array();
$session = JFactory::getSession ();
$virtuemart_category_id = $session->get ('vmlastvisitedcategoryid', 0, 'vm');
$productModel = VmModel::getModel ('product');
//parseCustomParams
VirtueMartModelCustomfields::bindParameterableByFieldType($customfield);
//Todo preselection as dropdown of children
//Note by Max Milbers: This is not necessary, in this case it is better to unpublish the parent and to give the child which should be preselected a category
//Or it is withParent, in that case there exists the case, that a parent should be used as a kind of mini category and not be orderable.
//There exists already other customs and in special plugins which wanna disable or change the add to cart button.
//I suggest that we manipulate the button with a message "choose a variant first"
//if(!isset($customfield->pre_selected)) $customfield->pre_selected = 0;
$selected = JRequest::getInt ('virtuemart_product_id',0);
$html = '';
$uncatChildren = $productModel->getUncategorizedChildren ($customfield->withParent);
foreach ($uncatChildren as $k => $child) {
$options[] = array('value' => JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $child['virtuemart_product_id']), 'text' => $child['product_name']);
}
$html .= JHTML::_ ('select.genericlist', $options, 'field[' . $row . '][custom_value]', 'onchange="window.top.location.href=this.options[this.selectedIndex].value" size="1" class="inputbox"', "value", "text",
JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $selected));
//vmdebug('$customfield',$customfield);
if($customfield->parentOrderable==0 and $product->product_parent_id==0){
//vmdebug('Should not be orderable');
$product->orderable = FALSE;
/*if(!$productModel->product_parent_id){
vmdebug('$customfield parentOrderable');
$document = JFactory::getDocument();
$document->addScriptDeclaration(
'jQuery(document).ready( function($) {
addToCartArea = jQuery(".productdetails-view .addtocart-bar");
addToCartBar = addToCartArea.find("input[name$=addtocart]");
addToCartArea.css({
padding: "0px 0px 0px 0px",
width: "auto"
}).children("span:not(:nth-child(3))").hide()
.parent().children("span::nth-child(3)").css({
margin: "0px 0px 0px 0px",
width: "auto",
float:"left"
});
addToCartButtonClassName = addToCartBar.attr("class");
addToCartBar.removeClass(addToCartButtonClassName)
.addClass(addToCartButtonClassName + "-disabled")
.attr({
disabled: "disabled",
value:"'.JText::_('COM_VIRTUEMART_ADDTOCART_CHOOSE_VARIANT').'",
});
});
');
}*/
}
return $html;
break;
/* variants*/
case 'V':
if ($price == 0)
$price = JText::_ ('COM_VIRTUEMART_CART_PRICE_FREE');
/* Loads the product price details */
return '<input type="text" value="' . JText::_ ($value) . '" name="field[' . $row . '][custom_value]" /> ' . JText::_ ('COM_VIRTUEMART_CART_PRICE') . $price . ' ';
break;
/*Date variant*/
case 'D':
return '<span class="product_custom_date">' . vmJsApi::date ($value, 'LC1', TRUE) . '</span>'; //vmJsApi::jDate($field->custom_value, 'field['.$row.'][custom_value]','field_'.$row.'_customvalue').$priceInput;
break;
/* text area or editor No JText, only displayed in BE */
case 'X':
case 'Y':
return $value;
break;
/* string or integer */
case 'S':
case 'I':
return JText::_ ($value);
break;
/* bool */
case 'B':
if ($value == 0)
return JText::_ ('COM_VIRTUEMART_NO');
return JText::_ ('COM_VIRTUEMART_YES');
break;
/* parent */
case 'P':
return '<span class="product_custom_parent">' . JText::_ ($value) . '</span>';
break;
/* related */
case 'R':
$q = 'SELECT l.`product_name`, p.`product_parent_id` , l.`product_name`, x.`virtuemart_category_id` FROM `#__virtuemart_products_' . VMLANG . '` as l
JOIN `#__virtuemart_products` AS p using (`virtuemart_product_id`)
LEFT JOIN `#__virtuemart_product_categories` as x on x.`virtuemart_product_id` = p.`virtuemart_product_id`
WHERE p.`published`=1 AND p.`virtuemart_product_id`= "' . (int)$value . '" ';
$this->_db->setQuery ($q);
$related = $this->_db->loadObject ();
if (empty ($related))
return '';
$thumb = '';
$q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_product_medias`WHERE `virtuemart_product_id`= "' . (int)$value . '" AND (`ordering` = 0 OR `ordering` = 1)';
$this->_db->setQuery ($q);
if ($media_id = $this->_db->loadResult ()) {
$thumb = $this->displayCustomMedia ($media_id);
return JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $value . '&virtuemart_category_id=' . $related->virtuemart_category_id), $thumb . ' ' . $related->product_name, array('title' => $related->product_name));
}
break;
/* image */
case 'M':
return $this->displayCustomMedia ($value);
break;
/* categorie */
case 'Z':
$q = 'SELECT * FROM `#__virtuemart_categories_' . VMLANG . '` as l JOIN `#__virtuemart_categories` AS c using (`virtuemart_category_id`) WHERE `published`=1 AND l.`virtuemart_category_id`= "' . (int)$value . '" ';
$this->_db->setQuery ($q);
if ($category = $this->_db->loadObject ()) {
$q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias`WHERE `virtuemart_category_id`= "' . $category->virtuemart_category_id . '" ';
$this->_db->setQuery ($q);
$thumb = '';
if ($media_id = $this->_db->loadResult ()) {
$thumb = $this->displayCustomMedia ($media_id);
}
return JHTML::link (JRoute::_ ('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id), $thumb . ' ' . $category->category_name, array('title' => $category->category_name));
}
else return '';
/* Child Group list
* this have no direct display , used for stockable product
*/
case 'G':
return ''; //'<input type="text" value="'.JText::_($value).'" name="field['.$row.'][custom_value]" /> '.JText::_('COM_VIRTUEMART_CART_PRICE').' : '.$price .' ';
break;
break;
}
}
}
function displayCustomMedia ($media_id, $table = 'product', $absUrl = FALSE) {
if (!class_exists ('TableMedias'))
require(JPATH_VM_ADMINISTRATOR . DS . 'tables' . DS . 'medias.php');
//$data = $this->getTable('medias');
$db = JFactory::getDBO ();
$data = new TableMedias($db);
$data->load ((int)$media_id);
if (!class_exists ('VmMediaHandler'))
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'mediahandler.php');
$media = VmMediaHandler::createMedia ($data, $table);
return $media->displayMediaThumb ('', FALSE, '', TRUE, TRUE, $absUrl);
}
/**
* There are too many functions doing almost the same for my taste
* the results are sometimes slighty different and makes it hard to work with it, therefore here the function for future proxy use
*
*/
public function customFieldDisplay ($product, $variantmods, $html, $trigger) {
//vmdebug('customFieldDisplay $variantmods',$variantmods);
$row = 0;
if (!class_exists ('shopFunctionsF'))
require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php');
//MarkerVarMods
foreach ($variantmods as $selected => $variant) {
//foreach ($variantmods as $variant=> $selected) {
//vmdebug('customFieldDisplay '.$variant.' '.$selected);
if ($selected) {
$productCustom = self::getProductCustomField ($selected);
//vmdebug('customFieldDisplay',$selected,$productCustom);
if (!empty($productCustom)) {
$html .= ' <span class="product-field-type-' . $productCustom->field_type . '">';
if ($productCustom->field_type == "E") {
$product = self::addParam ($product);
$product->productCustom = $productCustom;
//vmdebug('CustomsFieldCartDisplay $productCustom',$productCustom);
//vmdebug('customFieldDisplay $product->param selected '.$selected,$product->param);
if (!class_exists ('vmCustomPlugin'))
require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php');
JPluginHelper::importPlugin ('vmcustom');
$dispatcher = JDispatcher::getInstance ();
$dispatcher->trigger ($trigger, array($product, $row, &$html));
}
else {
//vmdebug('customFieldDisplay $productCustom by self::getProductCustomField $variant: '.$variant.' $selected: '.$selected,$productCustom);
$value = '';
if (($productCustom->field_type == "G")) {
$child = self::getChild ($productCustom->custom_value);
//$html .= $productCustom->custom_title.' '.$child->product_name;
$value = $child->product_name;
}
elseif (($productCustom->field_type == "M")) {
//$html .= $productCustom->custom_title.' '.self::displayCustomMedia($productCustom->custom_value);
$value = self::displayCustomMedia ($productCustom->custom_value);
}
elseif (($productCustom->field_type == "S")) {
//q$html .= $productCustom->custom_title.' '.JText::_($productCustom->custom_value);
$value = $productCustom->custom_value;
}
else {
//$html .= $productCustom->custom_title.' '.$productCustom->custom_value;
//vmdebug('customFieldDisplay',$productCustom);
$value = $productCustom->custom_value;
}
$html .= ShopFunctionsF::translateTwoLangKeys ($productCustom->custom_title, $value);
}
$html .= '</span><br />';
}
else {
// falldown method if customfield are deleted
foreach ((array)$selected as $key => $value) {
$html .= '<br/ >Couldnt find customfield' . ($key ? '<span>' . $key . ' </span>' : '') . $value;
}
vmdebug ('CustomsFieldOrderDisplay, $item->productCustom empty? ' . $variant);
vmdebug ('customFieldDisplay, $productCustom is EMPTY ');
}
}
$row++;
}
//vmdebug ('customFieldDisplay html begin: ' . $html . ' end');
return $html . '</div>';
}
/**
* TODO This is html and view stuff and MUST NOT be in the model, notice by Max
* render custom fields display cart module FE
*/
public function CustomsFieldCartModDisplay ($priceKey, $product) {
if (empty($calculator)) {
if (!class_exists ('calculationHelper'))
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php');
$calculator = calculationHelper::getInstance ();
}
$variantmods = $calculator->parseModifier ($priceKey);
return self::customFieldDisplay ($product, $variantmods, '<div class="vm-customfield-mod">', 'plgVmOnViewCartModule');
}
/**
* TODO This is html and view stuff and MUST NOT be in the model, notice by Max
* render custom fields display cart FE
*/
public function CustomsFieldCartDisplay ($priceKey, $product) {
if (empty($calculator)) {
if (!class_exists ('calculationHelper'))
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php');
$calculator = calculationHelper::getInstance ();
}
vmdebug('CustomsFieldCartDisplay ',$priceKey);
$variantmods = $calculator->parseModifier ($priceKey);
return self::customFieldDisplay ($product, $variantmods, '<div class="vm-customfield-cart">', 'plgVmOnViewCart');
}
/*
* render custom fields display order BE/FE
*/
public function CustomsFieldOrderDisplay ($item, $view = 'FE', $absUrl = FALSE) {
$row = 0;
//$item=(array)$item;
if (!empty($item->product_attribute)) {
$item->param = json_decode ($item->product_attribute, TRUE);
//$html = '<div class="vm-customfield-cart">';
if (!empty($item->param)) {
return self::customFieldDisplay ($item, $item->param, '<div class="vm-customfield-cart">', 'plgVmDisplayInOrder' . $view);
}
else {
vmdebug ('CustomsFieldOrderDisplay $item->param empty? ');
}
}
else {
//vmTrace('$item->product_attribut is empty');
}
return FALSE;
}
/**
*
* custom fields for cart and cart module
*/
public function getProductCustomField ($selected) {
$db = JFactory::getDBO ();
$query = 'SELECT C.`virtuemart_custom_id` , `custom_element` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` ,
C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_cart_attribute` , `is_hidden` , C.`published` ,
field.`virtuemart_customfield_id` , field.`custom_value`,field.`custom_param`,field.`custom_price`
FROM `#__virtuemart_customs` AS C
LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
WHERE `virtuemart_customfield_id` ="' . (int)$selected . '"';
//if($product_parent_id!=0){
//$query .= ' AND (`virtuemart_product_id` ="' . $product_id.'" XOR `virtuemart_product_id` ="' . $product_parent_id.'")';
//} else {
//$query .= ' AND (`virtuemart_product_id` ="' . $product_id.'"';
//}
$db->setQuery ($query);
return $db->loadObject ();
}
/*
* add parameter to product definition
*/
public function addParam ($product) {
//vmdebug('addParam? ',$product->custom_param,$product->customPlugin);
$custom_param = empty($product->custom_param) ? array() : json_decode ($product->custom_param, TRUE);
$product_param = empty($product->customPlugin) ? array() : json_decode ($product->customPlugin, TRUE);
$params = (array)$product_param + (array)$custom_param;
foreach ($params as $key => $param) {
$product->param[$key] = $param;
}
return $product;
}
public function getChild ($child) {
$db = JFactory::getDBO ();
$db->setQuery ('SELECT `product_sku`, `product_name` FROM `#__virtuemart_products_' . VMLANG . '` WHERE virtuemart_product_id=' . $child);
return $db->loadObject ();
}
static public function setEditCustomHidden ($customfield, $i) {
if (!isset($customfield->virtuemart_customfield_id))
$customfield->virtuemart_customfield_id = '0';
$html = '
<input type="hidden" value="' . $customfield->field_type . '" name="field[' . $i . '][field_type]" />
<input type="hidden" value="' . $customfield->virtuemart_custom_id . '" name="field[' . $i . '][virtuemart_custom_id]" />
<input type="hidden" value="' . $customfield->virtuemart_customfield_id . '" name="field[' . $i . '][virtuemart_customfield_id]" />
<input type="hidden" value="' . $customfield->admin_only . '" checked="checked" name="field[' . $i . '][admin_only]" />';
return $html;
}
}
// pure php no closing tag