$customfield){
if(!isset($customfield->display))$customfield->display = '';
$calculator->_product = $product;
if (!class_exists ('vmCustomPlugin')) {
require(VMPATH_PLUGINLIBS . DS . 'vmcustomplugin.php');
}
if ($customfield->field_type == "E") {
JPluginHelper::importPlugin ('vmcustom');
$dispatcher = JDispatcher::getInstance ();
$ret = $dispatcher->trigger ('plgVmOnDisplayProductFEVM3', array(&$product, &$customfields[$k]));
continue;
}
$fieldname = 'field['.$product->virtuemart_product_id.'][' . $customfield->virtuemart_customfield_id . '][customfield_value]';
$customProductDataName = 'customProductData['.$product->virtuemart_product_id.']['.$customfield->virtuemart_custom_id.']';
//This is a kind of fallback, setting default of custom if there is no value of the productcustom
$customfield->customfield_value = empty($customfield->customfield_value) ? $customfield->custom_value : $customfield->customfield_value;
$type = $customfield->field_type;
$idTag = 'customProductData_'.(int)$product->virtuemart_product_id.'_'.$customfield->virtuemart_customfield_id;
$idTag = VmHtml::ensureUniqueId($idTag);
$emptyOption = new stdClass();
$emptyOption->text = vmText::_ ('COM_VIRTUEMART_ADDTOCART_CHOOSE_VARIANT');
$emptyOption->value = 0;
switch ($type) {
case 'C':
$html = '';
$dropdowns = array();
if(isset($customfield->options->{$product->virtuemart_product_id})){
$productSelection = $customfield->options->{$product->virtuemart_product_id};
} else {
$productSelection = false;
}
$stockhandle = VmConfig::get('stockhandle_products', false) && $product->product_stockhandle ? $product->product_stockhandle : VmConfig::get('stockhandle','none');
$q = 'SELECT `virtuemart_product_id` FROM #__virtuemart_products WHERE product_parent_id = "'.$customfield->virtuemart_product_id.'" and ( published = "1" ';
if($stockhandle == 'disableit_children'){
$q .= ' AND (`product_in_stock` - `product_ordered`) > "0" ';
}
$q .= ');';
$db = JFactory::getDbo();
$db->setQuery($q);
$avail = $db->loadColumn();
if(!in_array($customfield->virtuemart_product_id,$avail)){
array_unshift($avail,$customfield->virtuemart_product_id);
}
foreach($customfield->options as $product_id=>$variants){
static $counter = 0;
if(!in_array($product_id,$avail)){
vmdebug('$customfield->options Product to ignore, continue ',$product_id);
continue;
}
foreach($variants as $k => $variant){
if(!isset($dropdowns[$k]) or !is_array($dropdowns[$k])) $dropdowns[$k] = array();
if(!in_array($variant,$dropdowns[$k]) ){
if($k==0 or !$productSelection){
$dropdowns[$k][] = $variant;
} else{
if($productSelection[$k-1] == $variants[$k-1]) {
$break = false;
for( $h = 1; $h<=$k; $h++ ) {
if($productSelection[$h - 1] != $variants[$h - 1]) {
$break = true;
}
}
if(!$break) {
$dropdowns[$k][] = $variant;
}
}
}
}
}
}
$class = 'vm-chzn-select';
$selectType = 'select.genericlist';
if(!empty($customfield->selectType)){
$selectType = 'select.radiolist';
$class = '';
$dom = '';
} else {
vmJsApi::chosenDropDowns();
$dom = 'select';
}
$attribs = array('class'=>$class.' cvselection no-vm-bind','style'=>'min-width:70px;');
$view = 'productdetails';
$attribs['reload'] = '1';
if(VmConfig::get ('jdynupdate', TRUE)){
$view = vRequest::getCmd('view','productdetails');
if($view == 'productdetails' or ($customfield->browseajax and $view == 'category')){
$attribs['data-dynamic-update'] = '1';
unset($attribs['reload']);
} else {
$view = 'productdetails';
}
}
foreach($customfield->selectoptions as $k => $soption){
$options = array();
$selected = false;
if(isset($dropdowns[$k])){
foreach($dropdowns[$k] as $i=> $elem){
$elem = trim((string)$elem);
$text = $elem;
if($soption->clabel!='' and in_array($soption->voption,VirtueMartModelCustomfields::$dimensions) ){
$rd = $soption->clabel;
if(is_numeric($rd) and is_numeric($elem)){
$text = number_format(round((float)$elem,(int)$rd),$rd);
}
//vmdebug('($dropdowns[$k] in DIMENSION value = '.$elem.' r='.$rd.' '.$text);
} else if ($soption->voption === 'clabels' and $soption->clabel!='') {
$text = vmText::_($elem);
}
if(empty($elem)){
$text = vmText::_('COM_VIRTUEMART_LIST_EMPTY_OPTION');
}
$o = new stdClass();
$o->value = $elem;
$o->text = $text;
$options[] = $o;
if($productSelection and $productSelection[$k] == $elem){
$selected = $elem;
}
}
}
if(empty($selected)){
$product->orderable=false;
}
//$idTagK = $idTag.'cvard'.$k;
if($customfield->showlabels){
if( in_array($soption->voption,VirtueMartModelCustomfields::$dimensions) ){
$soption->slabel = vmText::_('COM_VIRTUEMART_'.strtoupper($soption->voption));
} else if(!empty($soption->clabel) and !in_array($soption->voption,VirtueMartModelCustomfields::$dimensions) ){
$soption->slabel = vmText::_($soption->clabel);
}
if(isset($soption->slabel)){
$html .= ''.$soption->slabel.'';
}
}
$idTagK = '['; //Joomla workaround to get a list without id
$attribs['data-cvsel'] = 'field' . $customfield->virtuemart_customfield_id ;
$fname = $fieldname.'['.$k.']';
$html .= JHtml::_ ($selectType, $options, $fname, $attribs , "value", "text", $selected,$idTagK);
}
$Itemid = vRequest::getInt('Itemid',''); // '&Itemid=127';
if(!empty($Itemid)){
$Itemid = '&Itemid='.$Itemid;
}
//create array for js
$jsArray = array();
$url = '';
foreach($customfield->options as $product_id=>$variants){
if(!in_array($product_id,$avail)){continue;}
$url = JRoute::_('index.php?option=com_virtuemart&view='.$view.'&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id='.$product_id.$Itemid,false);
$jsArray[] = '["'.$url.'","'.implode('","',$variants).'"]';
}
vmJsApi::addJScript('cvfind');
$BrowserNewState = '';
if($view != 'productdetails'){
$BrowserNewState = 'Virtuemart.setBrowserState = false;';
}
$jsVariants = implode(',',$jsArray);
$selector = $dom."[data-cvsel=\"".$attribs['data-cvsel']."\"]";
$hash = md5($selector);
$j = "jQuery(document).ready(function($) {
".$BrowserNewState."
$('".$selector."').off('change',Virtuemart.cvFind);
$('".$selector."').on('change', { variants:[".$jsVariants."] },Virtuemart.cvFind);
});";
vmJsApi::addJScript('cvselvars'.$hash,$j,true,false,false,$hash);
//Now we need just the JS to reload the correct product
$customfield->display = $html;
break;
case 'A':
$html = '';
$productModel = VmModel::getModel ('product');
//Note by Jeremy Magne (Daycounts) 2013-08-31
//Previously the the product model is loaded but we need to ensure the correct product id is set because the getUncategorizedChildren does not get the product id as parameter.
//In case the product model was previously loaded, by a related product for example, this would generate wrong uncategorized children list
$productModel->setId($customfield->virtuemart_product_id);
$uncatChildren = $productModel->getUncategorizedChildren ($customfield->withParent);
$options = array();
$selected = vRequest::getInt ('virtuemart_product_id',0);
$selectedFound = false;
$view = 'productdetails';
$attribs['reload'] = '1';
if(VmConfig::get ('jdynupdate', TRUE)){
$view = vRequest::getCmd('view','productdetails');
if($view == 'productdetails' or ($customfield->browseajax and $view == 'category')){
$attribs['data-dynamic-update'] = '1';
unset($attribs['reload']);
} else {
$view = 'productdetails';
}
}
$Itemid = vRequest::getInt('Itemid',''); // '&Itemid=127';
if(!empty($Itemid)){
$Itemid = '&Itemid='.$Itemid;
}
if(!$customfield->withParent){
$options[0] = $emptyOption;
$options[0]->value = JRoute::_ ('index.php?option=com_virtuemart&view='.$view.'&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $customfield->virtuemart_product_id,FALSE);
//$options[0] = array('value' => JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $customfield->virtuemart_product_id,FALSE), 'text' => vmText::_ ('COM_VIRTUEMART_ADDTOCART_CHOOSE_VARIANT'));
}
$parentStock = 0;
if($uncatChildren){
foreach ($uncatChildren as $k => $child) {
/*if(!isset($child[$customfield->customfield_value])){
vmdebug('The child has no value at index '.$customfield->customfield_value,$customfield,$child);
} else {*/
$productChild = $productModel->getProduct((int)$child,true);
if(!$productChild) continue;
if(!isset($productChild->{$customfield->customfield_value})){
vmdebug('The child has no value at index '.$child);
continue;
}
$available = $productChild->product_in_stock - $productChild->product_ordered;
if(VmConfig::get('stockhandle','none')=='disableit_children' and $available <= 0){
continue;
}
$parentStock += $available;
$priceStr = '';
if($customfield->wPrice){
//$product = $productModel->getProductSingle((int)$child['virtuemart_product_id'],false);
$productPrices = $calculator->getProductPrices ($productChild);
$priceStr = ' (' . $currency->priceDisplay ($productPrices['salesPrice']) . ')';
}
$options[] = array('value' => JRoute::_ ('index.php?option=com_virtuemart&view='.$view.'&virtuemart_category_id=' . $virtuemart_category_id . '&virtuemart_product_id=' . $productChild->virtuemart_product_id,false), 'text' => $productChild->{$customfield->customfield_value}.$priceStr);
if($selected==$child){
$selectedFound = true;
vmdebug($customfield->virtuemart_product_id.' $selectedFound by vRequest '.$selected);
}
//vmdebug('$child productId ',$child['virtuemart_product_id'],$customfield->customfield_value,$child);
//}
}
}
if(!$selectedFound){
$pos = array_search($customfield->virtuemart_product_id, $product->allIds);
if(isset($product->allIds[$pos-1])){
$selected = $product->allIds[$pos-1];
//vmdebug($customfield->virtuemart_product_id.' Set selected to - 1 allIds['.($pos-1).'] = '.$selected.' and count '.$dynChilds);
//break;
} elseif(isset($product->allIds[$pos])){
$selected = $product->allIds[$pos];
//vmdebug($customfield->virtuemart_product_id.' Set selected to allIds['.$pos.'] = '.$selected.' and count '.$dynChilds);
} else {
$selected = $customfield->virtuemart_product_id;
//vmdebug($customfield->virtuemart_product_id.' Set selected to $customfield->virtuemart_product_id ',$selected,$product->allIds);
}
}
$url = 'index.php?option=com_virtuemart&view='.$view.'&virtuemart_category_id='.
$virtuemart_category_id .'&virtuemart_product_id='. $selected;
$attribs['option.key.toHtml'] = false;
$attribs['id'] = '[';//$idTag;
$och = '';
if(!empty($attribs['reload'])){
$och = ' onchange="window.top.location.href=this.options[this.selectedIndex].value" reload=1';
unset($attribs['reload']);
} else {
$och = ' data-dynamic-update="1"';
unset($attribs['data-dynamic-update']);
}
$attribs['list.attr'] = 'size="1" class="vm-chzn-select no-vm-bind avselection"'.$och;
$attribs['list.translate'] = false;
$attribs['option.key'] = 'value';
$attribs['option.text'] = 'text';
$attribs['list.select'] = JRoute::_ ($url,false);
$html .= JHtml::_ ('select.genericlist', $options, $fieldname, $attribs);
//vmdebug('My view $attribs',$attribs,$html);
vmJsApi::chosenDropDowns();
if($customfield->parentOrderable==0){
if($product->virtuemart_product_id==$customfield->virtuemart_product_id){
$product->orderable = false;
$product->product_in_stock = $parentStock;
}
}
$dynChilds++;
$customfield->display = $html;
vmJsApi::addJScript('cvfind');
$BrowserNewState = '';
if($view != 'productdetails'){
$BrowserNewState = 'Virtuemart.setBrowserState = false;';
}
if($customfield->browseajax){
$j = "jQuery(document).ready(function($) {
".$BrowserNewState."
$('select.avselection').off('change',Virtuemart.avFind);
$('select.avselection').on('change',{},Virtuemart.avFind);
});";
vmJsApi::addJScript('avselvars',$j,true);
}
break;
/*Date variant*/
case 'D':
if(empty($customfield->custom_value)) $customfield->custom_value = 'LC2';
//Customer selects date
if($customfield->is_input){
$date = '';
if(!empty($customfield->customfield_value)){
try{
$date = new DateTime();
$date->add(new DateInterval($customfield->customfield_value));
$date = $date->format('Y-m-d');
} catch (Exception $e){
$date = $customfield->customfield_value;
}
}
$yearRange = '';
if(!empty($customfield->yearRangeStart)){
$d = new DateTime();
$d->add(new DateInterval($customfield->yearRangeStart));
$d = $d->format('Y');
$yearRange = $d;
} else {
$yearRange = date('Y');
}
if(!empty($customfield->yearRangePeriod)){
$d = new DateTime();
$d->add(new DateInterval($customfield->yearRangePeriod));
$d = $d->format('Y');
$yearRange .= ':'.$d;
} else {
$yearRange .= ':1';
}
vmdebug('Date my yearrange',$yearRange);
//$yearRange = '2018:2020';
$customfield->display = '' . vmJsApi::jDate ($date,$customProductDataName.'[' . $customfield->virtuemart_customfield_id . ']', NULL, TRUE, $yearRange) . ''; //vmJsApi::jDate($field->custom_value, 'field['.$row.'][custom_value]','field_'.$row.'_customvalue').$priceInput;
}
//Customer just sees a date
else {
$customfield->display = '' . vmJsApi::date ($customfield->customfield_value, $customfield->custom_value, TRUE) . '';
}
break;
/* text area or editor No vmText, only displayed in BE */
case 'X':
case 'Y':
$customfield->display = $customfield->customfield_value;
break;
/* string or integer */
case 'B':
case 'S':
case 'M':
//vmdebug('Example for params ',$customfield);
if(isset($customfield->selectType)){
if(empty($customfield->selectType)){
$selectType = 'select.genericlist';
if(!empty($customfield->is_input)){
vmJsApi::chosenDropDowns();
$class = 'class="vm-chzn-select"';
$idTag = '[';
}
} else {
$selectType = 'select.radiolist';
$class = '';
}
} else {
if($type== 'M'){
$selectType = 'select.radiolist';
$class = '';
} else {
$selectType = 'select.genericlist';
if(!empty($customfield->is_input)){
vmJsApi::chosenDropDowns();
$class = 'class="vm-chzn-select"';
$idTag = '[';
}
}
}
if($customfield->is_list and $customfield->is_list!=2){
if(!empty($customfield->is_input)){
$options = array();
if($customfield->addEmpty){
$options[0] = $emptyOption;
}
$values = explode (';', $customfield->custom_value);
foreach ($values as $key => $val) {
//if($val == 0 and $customfield->addEmpty){
//continue;
//}
if($type == 'M'){
$tmp = array('value' => $val, 'text' => VirtueMartModelCustomfields::displayCustomMedia ($val,'product',$customfield->width,$customfield->height));
} else {
$tmp = array('value' => $val, 'text' => vmText::_($val));
}
$options[] = (object)$tmp;
}
$currentValue = $customfield->customfield_value;
$customfield->display = JHtml::_ ($selectType, $options, $customProductDataName.'[' . $customfield->virtuemart_customfield_id . ']', $class, 'value', 'text', $currentValue,$idTag);
} else {
if($type == 'M'){
$customfield->display = VirtueMartModelCustomfields::displayCustomMedia ($customfield->customfield_value,'product',$customfield->width,$customfield->height);
} else {
$customfield->display = vmText::_ ($customfield->customfield_value);
}
}
} else {
if(!empty($customfield->is_input)){
if(!isset($selectList[$customfield->virtuemart_custom_id])) {
$selectList[$customfield->virtuemart_custom_id] = $k;
if($customfield->addEmpty){
if(empty($customfields[$selectList[$customfield->virtuemart_custom_id]]->options)){
$customfields[$selectList[$customfield->virtuemart_custom_id]]->options[0] = $emptyOption;
$customfields[$selectList[$customfield->virtuemart_custom_id]]->options[0]->virtuemart_customfield_id = $emptyOption->value;
//$customfields[$selectList[$customfield->virtuemart_custom_id]]->options['nix'] = array('virtuemart_customfield_id' => 'none', 'text' => vmText::_ ('COM_VIRTUEMART_ADDTOCART_CHOOSE_VARIANT'));
}
}
$tmpField = clone($customfield);
$tmpField->options = null;
$customfield->options[$customfield->virtuemart_customfield_id] = $tmpField;
$customfield->customProductDataName = $customProductDataName;
} else {
$customfields[$selectList[$customfield->virtuemart_custom_id]]->options[$customfield->virtuemart_customfield_id] = $customfield;
unset($customfields[$k]);
}
$default = reset($customfields[$selectList[$customfield->virtuemart_custom_id]]->options);
foreach ($customfields[$selectList[$customfield->virtuemart_custom_id]]->options as &$productCustom) {
if(!isset($productCustom->customfield_price)) $productCustom->customfield_price = 0.0;
if(!isset($productCustom->customfield_value)) $productCustom->customfield_value = '';
$price = VirtueMartModelCustomfields::renderCustomfieldPrice($productCustom, $product, $calculator);
if($type == 'M'){
$productCustom->text = VirtueMartModelCustomfields::displayCustomMedia ($productCustom->customfield_value,'product',$customfield->width,$customfield->height).' '.$price;
} else {
$trValue = vmText::_($productCustom->customfield_value);
if($productCustom->customfield_value!=$trValue and strpos($trValue,'%1')!==false){
$productCustom->text = vmText::sprintf($productCustom->customfield_value,$price);
} else {
$productCustom->text = $trValue.' '.$price;
}
}
}
$customfields[$selectList[$customfield->virtuemart_custom_id]]->display = JHtml::_ ($selectType, $customfields[$selectList[$customfield->virtuemart_custom_id]]->options,
$customfields[$selectList[$customfield->virtuemart_custom_id]]->customProductDataName,
$class, 'virtuemart_customfield_id', 'text', $default->customfield_value,$idTag); //*/
} else {
if($type == 'M'){
$customfield->display = VirtueMartModelCustomfields::displayCustomMedia ($customfield->customfield_value,'product',$customfield->width,$customfield->height);
} else {
$customfield->display = vmText::_ ($customfield->customfield_value);
}
}
}
break;
// Property
case 'P':
//$customfield->display = vmText::_ ('COM_VIRTUEMART_'.strtoupper($customfield->customfield_value));
$attr = $customfield->customfield_value;
$lkey = 'COM_VIRTUEMART_'.strtoupper($customfield->customfield_value).'_FE';
$trValue = vmText::_ ($lkey);
$options[] = array('value' => 'product_length', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_LENGTH'));
$options[] = array('value' => 'product_width', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_WIDTH'));
$options[] = array('value' => 'product_height', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_HEIGHT'));
$options[] = array('value' => 'product_weight', 'text' => vmText::_ ('COM_VIRTUEMART_PRODUCT_WEIGHT'));
$dim = '';
if($attr == 'product_length' or $attr == 'product_width' or $attr == 'product_height'){
$dim = $product->product_lwh_uom;
} else if($attr == 'product_weight') {
$dim = $product->product_weight_uom;
}
if(!isset($product->$attr)){
logInfo('customfield.php: case P, property '.$attr.' does not exists. virtuemart_custom_id: '.$customfield->virtuemart_custom_id);
break;
}
$val = $product->$attr;
if($customfield->round!=0){
if(empty($customfield->digits)) $customfield->digits = 0;
$val = $currency->getFormattedNumber($val,$customfield->digits);
}
if($lkey!=$trValue and strpos($trValue,'%1')!==false) {
$customfield->display = vmText::sprintf( $customfield->customfield_value, $val , $dim );
} else if($lkey!=$trValue) {
$customfield->display = $trValue.' '.$val;
} else {
$customfield->display = vmText::_ ('COM_VIRTUEMART_'.strtoupper($customfield->customfield_value)).' '.$val.$dim;
}
break;
case 'Z':
if(empty($customfield->customfield_value)) break;
$html = '';
$q = 'SELECT * FROM `#__virtuemart_categories_' . VmConfig::$vmlang . '` as l INNER JOIN `#__virtuemart_categories` AS c ON (l.`virtuemart_category_id`=c.`virtuemart_category_id`) WHERE `published`=1 AND l.`virtuemart_category_id`= "' . (int)$customfield->customfield_value . '" ';
$db = JFactory::getDBO();
$db->setQuery ($q);
if ($category = $db->loadObject ()) {
if(empty($category->virtuemart_category_id)) break;
$q = 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias`WHERE `virtuemart_category_id`= "' . $category->virtuemart_category_id . '" ';
$db->setQuery ($q);
$thumb = '';
if ($media_id = $db->loadResult ()) {
$thumb = VirtueMartModelCustomfields::displayCustomMedia ($media_id,'category',$customfield->width,$customfield->height);
}
$customfield->display = 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,'target'=>'_blank'));
}
break;
case 'R':
if(empty($customfield->customfield_value)){
$customfield->display = 'customfield related product has no value';
break;
}
$pModel = VmModel::getModel('product');
$related = $pModel->getProduct((int)$customfield->customfield_value,TRUE,$customfield->wPrice,TRUE,1);
if(!$related) break;
$thumb = '';
if($customfield->wImage) {
if(!empty( $related->virtuemart_media_id[0] )) {
$thumb = VirtueMartModelCustomfields::displayCustomMedia( $related->virtuemart_media_id[0], 'product', $customfield->width, $customfield->height ).' ';
} else {
$thumb = VirtueMartModelCustomfields::displayCustomMedia( 0, 'product', $customfield->width, $customfield->height ).' ';
}
}
if($customfield->waddtocart){
if (!empty($related->customfields)) {
if (!class_exists ('vmCustomPlugin')) {
require(VMPATH_PLUGINLIBS . DS . 'vmcustomplugin.php');
}
$customfieldsModel = VmModel::getModel ('customfields');
if(empty($customfield->from)) {
$customfield->from = $related->virtuemart_product_id;
$customfieldsModel -> displayProductCustomfieldFE ($related, $related->customfields);
} else if($customfield->from!=$related->virtuemart_product_id){
$customfieldsModel -> displayProductCustomfieldFE ($related, $related->customfields);
}
}
$isCustomVariant = false;
if (!empty($related->customfields)) {
foreach ($related->customfields as $k => $custom) {
if($custom->field_type == 'C' and $custom->virtuemart_product_id != (int)$customfield->customfield_value){
$isCustomVariant = $custom;
}
if (!empty($custom->layout_pos)) {
$related->customfieldsSorted[$custom->layout_pos][] = $custom;
} else {
$related->customfieldsSorted['normal'][] = $custom;
}
unset($related->customfields);
}
}
}
$customfield->display = shopFunctionsF::renderVmSubLayout('related',array('customfield'=>$customfield,'related'=>$related, 'thumb'=>$thumb));
break;
}
$viewData['customfields'][$k] = $customfield;
//vmdebug('my customfields '.$type,$viewData['customfields'][$k]->display);
}
}
static function renderCustomfieldsCart($product, $html, $trigger){
if(isset($product->param)){
vmTrace('param found, seek and destroy');
return false;
}
$row = 0;
if (!class_exists ('shopFunctionsF'))
require(VMPATH_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php');
$variantmods = isset($product -> customProductData)?$product -> customProductData:$product -> product_attribute;
if(!is_array($variantmods)){
$variantmods = json_decode($variantmods,true);
}
//We let that here as Fallback
if(empty($product->customfields)){
$productDB = VmModel::getModel('product')->getProduct($product->virtuemart_product_id);
if($productDB and !empty($productDB->customfields)){
$product->customfields = $productDB->customfields;
} else {
$product->customfields = array();
}
}
//vmdebug('renderCustomfieldsCart $variantmods',$variantmods);
$productCustoms = array();
foreach( (array)$product->customfields as $prodcustom){
//We just add the customfields to be shown in the cart to the variantmods
if(is_object($prodcustom)){
//We need this here to ensure that broken customdata of order items is shown updated info, or at least displayed,
if($prodcustom->is_cart_attribute or $prodcustom->is_input){
//The problem here is that a normal value and an array can be valid. The function should complement, or update the product. So we are not allowed
//to override existing values. When the $variantmods array is not set for the key, then we add an array, when the customproto is used more than one time
//the missing values are added with an own key.
if(!isset($variantmods[$prodcustom->virtuemart_custom_id]) or (is_array($variantmods[$prodcustom->virtuemart_custom_id]) and !isset($variantmods[$prodcustom->virtuemart_custom_id][$prodcustom->virtuemart_customfield_id])) ){
$variantmods[$prodcustom->virtuemart_custom_id][$prodcustom->virtuemart_customfield_id] = $prodcustom->virtuemart_customfield_id;
//vmdebug('foreach $variantmods $customfield_id ', $prodcustom->virtuemart_custom_id, $prodcustom->virtuemart_customfield_id,$variantmods);
}
}
$productCustoms[$prodcustom->virtuemart_customfield_id] = $prodcustom;
}
}
foreach ( (array)$variantmods as $i => $customfield_ids) {
if(!is_array($customfield_ids)){
$customfield_ids = array( $customfield_ids =>false);
}
foreach($customfield_ids as $customfield_id=>$params){
if(empty($productCustoms) or !isset($productCustoms[$customfield_id])){
//vmdebug('displayProductCustomfieldSelected continue',$customfield_id,$productCustoms);
continue;
}
$productCustom = $productCustoms[$customfield_id];
//vmdebug('displayProductCustomfieldSelected ',$customfield_id,$productCustom);
//The stored result in vm2.0.14 looks like this {"48":{"textinput":{"comment":"test"}}}
//and now {"32":[{"invala":"100"}]}
if (!empty($productCustom)) {
$otag = ' ';
$tmp = '';
if ($productCustom->field_type == "E") {
if (!class_exists ('vmCustomPlugin'))
require(VMPATH_PLUGINLIBS . DS . 'vmcustomplugin.php');
JPluginHelper::importPlugin ('vmcustom');
$dispatcher = JDispatcher::getInstance ();
$dispatcher->trigger ($trigger.'VM3', array(&$product, &$productCustom, &$tmp));
}
else {
$value = '';
if (($productCustom->field_type == 'G')) {
$db = JFactory::getDBO ();
$db->setQuery ('SELECT `product_name` FROM `#__virtuemart_products_' . VmConfig::$vmlang . '` WHERE virtuemart_product_id=' . (int)$productCustom->customfield_value);
$child = $db->loadObject ();
$value = $child->product_name;
}
elseif (($productCustom->field_type == 'M')) {
$customFieldModel = VmModel::getModel('customfields');
$value = $customFieldModel->displayCustomMedia ($productCustom->customfield_value,'product',$productCustom->width,$productCustom->height,VirtueMartModelCustomfields::$useAbsUrls);
}
elseif (($productCustom->field_type == 'S')) {
if($productCustom->is_list and $productCustom->is_input){
if($productCustom->is_list==2){
$value = vmText::_($productCustom->customfield_value);
} else {
$value = vmText::_($params);
}
} else {
$value = vmText::_($productCustom->customfield_value);
}
}
elseif (($productCustom->field_type == 'A')) {
if(!property_exists($product,$productCustom->customfield_value)){
$productDB = VmModel::getModel('product')->getProduct($product->virtuemart_product_id);
if($productDB){
$attr = $productCustom->customfield_value;
$product->$attr = $productDB->$attr;
}
}
$value = vmText::_( $product->{$productCustom->customfield_value} );
}
elseif (($productCustom->field_type == 'C')) {
foreach($productCustom->options->{$product->virtuemart_product_id} as $k=>$option){
$value .= ' ';
if(!empty($productCustom->selectoptions[$k]->clabel) and in_array($productCustom->selectoptions[$k]->voption,VirtueMartModelCustomfields::$dimensions)){
$value .= vmText::_('COM_VIRTUEMART_'.$productCustom->selectoptions[$k]->voption);
$rd = $productCustom->selectoptions[$k]->clabel;
if(is_numeric($rd) and is_numeric($option)){
$value .= ' '.number_format(round((float)$option,(int)$rd),$rd);
}
} else {
if(!empty($productCustom->selectoptions[$k]->clabel)) $value .= vmText::_($productCustom->selectoptions[$k]->clabel);
$value .= ' '.vmText::_($option).' ';
}
$value .= '
';
}
$value = trim($value);
if(!empty($value)){
$html .= $otag.$value.'
';
}
continue;
}
elseif (($productCustom->field_type == 'D')) {
vmdebug('my date product customfield',$productCustom);
$value = $params;
}
else {
$value = vmText::_($productCustom->customfield_value);
}
$trTitle = vmText::_($productCustom->custom_title);
$tmp = '';
if($productCustom->custom_title!=$trTitle and strpos($trTitle,'%1')!==false){
$tmp .= vmText::sprintf($productCustom->custom_title,$value);
} else {
$tmp .= $trTitle.' '.$value;
}
}
if(!empty($tmp)){
$html .= $otag.$tmp.'
';
}
}
else {
foreach ((array)$customfield_id as $key => $value) {
$html .= '
Couldnt find customfield' . ($key ? '' . $key . ' ' : '') . $value;
}
vmdebug ('customFieldDisplay, $productCustom is EMPTY '.$customfield_id);
}
}
}
return $html . '';
}
}