Spade

Mini Shell

Directory:~$ /home/lmsyaran/www/administrator/components/com_phocacart/layouts/
Upload File

[Home] [System Details] [Kill Me]
Current File:~$ /home/lmsyaran/www/administrator/components/com_phocacart/layouts/product_export.php

<?php
/* @package Joomla
 * @copyright Copyright (C) Open Source Matters. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
 * @extension Phoca Extension
 * @copyright Copyright (C) Jan Pavelka www.phoca.cz
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
 */
defined('_JEXEC') or die();


// Specific function for CSV
if (!function_exists('str_putcsv')) {
	function str_putcsv($input, $delimiter = ';', $enclosure =
'"') {
		$fp = fopen('php://temp', 'r+b');
		fputcsv($fp, $input, $delimiter, $enclosure);
		rewind($fp);
		$data = rtrim(stream_get_contents($fp), "\n");
		fclose($fp);
		return $data;
	}
}

// Params of component
$db 							= JFactory::getDBO();
$user							= JFactory::getUser();
$paramsC 						= PhocacartUtils::getComponentParameters();
$import_export_type				= $paramsC->get( 'import_export_type',
0 );
$export_attributes				= $paramsC->get( 'export_attributes', 1
);
$export_advanced_stock_options	= $paramsC->get(
'export_advanced_stock_options', 0 );
$export_specifications			= $paramsC->get(
'export_specifications', 1 );
$export_discounts				= $paramsC->get( 'export_discounts', 1
);
$export_downloads				= $paramsC->get( 'export_downloads', 0
);
$export_add_title				= $paramsC->get( 'export_add_title', 0);
$export_parameters				= $paramsC->get( 'export_parameters',
0);
/*
*
* Unfortunately, add attributes to xml tags can be very problematic
*  - it takes a lot of memory when managing (importing) it
*  - and it takes a lot of place in exporting file
* Problems when importing XML:
* Because of bind columns when importing ( xml-> joomla database), we
need to remove '@attribute' array from xml
* The problem is, this action can stop server working when using simple xml
methods
*
<field name="export_add_title" class="btn-group"
type="radio" default="0"
label="COM_PHOCACART_FIELD_ADD_TITLE_ATTRIBUTE_EXPORT_LABEL"
description="COM_PHOCACART_FIELD_ADD_TITLE_ATTRIBUTE_EXPORT_DESC">
	<option value="0">COM_PHOCACART_NO</option>
	<option value="1">COM_PHOCACART_YES</option>
</field>
* To enable it
* 1) uncomment in config.xml
* 2) comment "$export_add_title = 0;" here
* 3) ucomment foreach in
components\com_phocacart\layouts\product_import.php
*/
$export_add_title		= 0;

$xml = false;
$csv = false;
if ($import_export_type == 1) {
	$xml = true;
	$csv = false;
} else if ($import_export_type == 0) {
	$csv = true;
	$xml = false;
}


$d 	= $displayData;

$iP = array();// Products rows
$iA	= array();// Products formated to database
$iCN= array();// Product column name
$iCV= array();// Product column title (translated name)
$iO = array();// Final output

// Tabs for XML
$t0 = "\t";
$t1 = "\t\t";
$t2 = "\t\t\t";
$t3 = "\t\t\t\t";
$t4 = "\t\t\t\t\t";
$t5 = "\t\t\t\t\t\t";



// COLUMNS OF PRODUCTS
// Here you can comment columns you don't need to export
//



$a = array();
$a[] = array('id', 'JGLOBAL_FIELD_ID_LABEL');
$a[] = array('title',
'COM_PHOCACART_FIELD_TITLE_LABEL');
$a[] = array('alias',
'COM_PHOCACART_FIELD_ALIAS_LABEL');

$a[] = array('sku', 'COM_PHOCACART_FIELD_SKU_LABEL');
$a[] = array('ean', 'COM_PHOCACART_FIELD_EAN_LABEL');

$a[] = array('price',
'COM_PHOCACART_FIELD_PRICE_LABEL');
$a[] = array('price_original',
'COM_PHOCACART_FIELD_ORIGINAL_PRICE_LABEL');

$a[] = array('price_groups',
'COM_PHOCACART_FIELD_PRICE_GROUPS_LABEL');

$a[] = array('price_histories',
'COM_PHOCACART_FIELD_PRICE_HISTORY_LABEL');


// TAX***
//$a[] = array('tax_id',
'COM_PHOCACART_FIELD_TAX_LABEL');
$a[] = array('tax', 'COM_PHOCACART_FIELD_TAX_LABEL');

// CATEGORIES (not exist in query)
$a[] = array('categories',
'COM_PHOCACART_CATEGORIES');

// MANUFACTURER***
//$a[] = array('manufacturer_id',
'COM_PHOCACART_FIELD_MANUFACTURER_LABEL');
$a[] = array('manufacturer',
'COM_PHOCACART_FIELD_MANUFACTURER_LABEL');

$a[] = array('upc', 'COM_PHOCACART_FIELD_UPC_LABEL');
$a[] = array('jan', 'COM_PHOCACART_FIELD_JAN_LABEL');
$a[] = array('isbn',
'COM_PHOCACART_FIELD_ISBN_LABEL');
$a[] = array('mpn', 'COM_PHOCACART_FIELD_MPN_LABEL');

$a[] = array('serial_number',
'COM_PHOCACART_FIELD_SERIAL_NUMBER_LABEL');
$a[] = array('registration_key',
'COM_PHOCACART_FIELD_REGISTRATION_KEY_LABEL');

$a[] = array('external_id',
'COM_PHOCACART_FIELD_EXTERNAL_PRODUCT_ID_LABEL');
$a[] = array('external_key',
'COM_PHOCACART_FIELD_EXTERNAL_PRODUCT_KEY_LABEL');
$a[] = array('external_link',
'COM_PHOCACART_FIELD_EXTERNAL_LINK_LABEL');
$a[] = array('external_text',
'COM_PHOCACART_FIELD_EXTERNAL_TEXT_LABEL');

$a[] = array('external_link2',
'COM_PHOCACART_FIELD_EXTERNAL_LINK_2_LABEL');//-
$a[] = array('external_text2',
'COM_PHOCACART_FIELD_EXTERNAL_TEXT_2_LABEL');//-


$a[] = array('access', 'JFIELD_ACCESS_LABEL');
$a[] = array('groups',
'COM_PHOCACART_FIELD_GROUPS_LABEL');

$a[] = array('featured',
'COM_PHOCACART_FIELD_FEATURED_LABEL');

$a[] = array('video',
'COM_PHOCACART_FIELD_VIDEO_URL_LABEL');
$a[] = array('public_download_file',
'COM_PHOCACART_FIELD_PUBLIC_DOWNLOAD_FILE_LABEL');
$a[] = array('public_download_text',
'COM_PHOCACART_FIELD_PUBLIC_DOWNLOAD_FILE_TEXT_LABEL');

$a[] = array('public_play_file',
'COM_PHOCACART_FIELD_PUBLIC_FILE_PLAY_LABEL');//-
$a[] = array('public_play_text',
'COM_PHOCACART_FIELD_PUBLIC_FILE_PLAY_TEXT_LABEL');//-

$a[] = array('condition',
'COM_PHOCACART_FIELD_PRODUCT_CONDITION_LABEL');
$a[] = array('type_feed',
'COM_PHOCACART_FIELD_PRODUCT_TYPE_FEED_LABEL');
$a[] = array('type_category_feed',
'COM_PHOCACART_FIELD_PRODUCT_CATEGORY_TYPE_FEED_LABEL');

$a[] = array('description',
'COM_PHOCACART_FIELD_DESCRIPTION_LABEL');
$a[] = array('description_long',
'COM_PHOCACART_FIELD_DESCRIPTION_LONG_LABEL');
$a[] = array('features',
'COM_PHOCACART_FIELD_FEATURES_LABEL');//-

$a[] = array('image',
'COM_PHOCACART_FIELD_IMAGE_LABEL');

// IMAGES (not exist in query)
$a[] = array('images',
'COM_PHOCACART_ADDITIONAL_IMAGES');

if ($export_attributes == 1) {
	// ATTRIBUTES (not exist in query)
	$a[] = array('attributes',
'COM_PHOCACART_ATTRIBUTES');
}

if ($export_advanced_stock_options == 1) {
	// ATTRIBUTES (not exist in query)
	$a[] = array('advanced_stock_options',
'COM_PHOCACART_ADVANCED_STOCK_OPTIONS');
}

if ($export_specifications == 1) {
	// SPECIFICATIONS (not exist in query)
	$a[] = array('specifications',
'COM_PHOCACART_SPECIFICATIONS');
}

if ($export_discounts == 1) {
	// DISCOUNTS (not exist in query)
	$a[] = array('discounts', 'COM_PHOCACART_DISCOUNTS');
}

// RELATED_PRODUCTS (not exist in query)
$a[] = array('related',
'COM_PHOCACART_RELATED_PRODUCTS');

$a[] = array('stock',
'COM_PHOCACART_FIELD_IN_STOCK_LABEL');
$a[] = array('stock_calculation',
'COM_PHOCACART_FIELD_PRODUCT_STOCK_CALCULATION_LABEL');
$a[] = array('stockstatus_a_id',
'COM_PHOCACART_FIELD_STOCK_STATUS_A_LABEL');
$a[] = array('stockstatus_n_id',
'COM_PHOCACART_FIELD_STOCK_STATUS_B_LABEL');
$a[] = array('min_quantity',
'COM_PHOCACART_FIELD_MIN_ORDER_QUANTITY_LABEL');
$a[] = array('min_multiple_quantity',
'COM_PHOCACART_FIELD_MIN_MULTIPLE_ORDER_QUANTITY_LABEL');
$a[] = array('min_quantity_calculation',
'COM_PHOCACART_FIELD_MINIMUM_QUANTITY_CALCULATION_LABEL');

$a[] = array('delivery_date',
'COM_PHOCACART_FIELD_PRODUCT_DELIVERY_DATE_LABEL');//-

//$a[] = array('availability',
'COM_PHOCACART_FIELD_AVAILABILITY_LABEL');

if ($export_downloads == 1) {
	$a[] = array('download_token',
'COM_PHOCACART_FIELD_DOWNLOAD_TOKEN_LABEL');
	$a[] = array('download_folder',
'COM_PHOCACART_FIELD_DOWNLOAD_FOLDER_LABEL');
	$a[] = array('download_file',
'COM_PHOCACART_FIELD_DOWNLOAD_FILE_LABEL');
	$a[] = array('download_hits',
'COM_PHOCACART_FIELD_DOWNLOAD_HITS_LABEL');
	$a[] = array('download_days',
'COM_PHOCACART_FIELD_DOWNLOAD_EXPIRATION_DATE_DAYS_LABEL');//-

    // IMAGES (not exist in query)
    $a[] = array('additional_download_files',
'COM_PHOCACART_ADDITIONAL_DOWNLOAD_FILES');//-
}
$a[] = array('type',
'COM_PHOCACART_FIELD_PRODUCT_TYPE_LABEL');
//$a[] = array('delivery_date',
'COM_PHOCACART_FIELD_PRODUCT_DELIVERY_DATE_LABEL');

$a[] = array('length',
'COM_PHOCACART_FIELD_LENGTH_LABEL');
$a[] = array('width',
'COM_PHOCACART_FIELD_WIDTH_LABEL');
$a[] = array('height',
'COM_PHOCACART_FIELD_HEIGHT_LABEL');

//$a[] = array('unit_size',
'COM_PHOCACART_FIELD_UNIT_SIZE_LABEL');
$a[] = array('weight',
'COM_PHOCACART_FIELD_WEIGHT_LABEL');
//$a[] = array('unit_weight',
'COM_PHOCACART_FIELD_UNIT_WEIGHT_LABEL');
$a[] = array('volume',
'COM_PHOCACART_FIELD_VOLUME_LABEL');
//$a[] = array('unit_volume',
'COM_PHOCACART_FIELD__LABEL');
$a[] = array('unit_amount',
'COM_PHOCACART_FIELD_UNIT_AMOUNT_LABEL');
$a[] = array('unit_unit',
'COM_PHOCACART_FIELD_UNIT_UNIT_LABEL');

$a[] = array('points_needed',
'COM_PHOCACART_FIELD_POINTS_NEEDED_LABEL');
$a[] = array('points_received',
'COM_PHOCACART_FIELD_POINTS_RECEIVED_LABEL');
$a[] = array('point_groups',
'COM_PHOCACART_FIELD_POINT_GROUPS_LABEL');

$a[] = array('published',
'COM_PHOCACART_FIELD_PUBLISHED_LABEL');
$a[] = array('language', 'JFIELD_LANGUAGE_LABEL');

$a[] = array('date',
'COM_PHOCACART_FIELD_DATE_LABEL');
$a[] = array('date_update',
'COM_PHOCACART_FIELD_UPDATE_DATE_LABEL');//-

$a[] = array('created_by',
'COM_PHOCACART_FIELD_CREATED_BY_LABEL');//-
$a[] = array('created',
'COM_PHOCACART_FIELD_CREATED_DATE_LABEL');//-
$a[] = array('modified_by',
'COM_PHOCACART_FIELD_MODIFIED_BY_LABEL');//-
$a[] = array('modified',
'COM_PHOCACART_FIELD_UPDATE_DATE_LABEL');//-





// TAGS (not exist in query)
$a[] = array('tags', 'COM_PHOCACART_TAGS');
$a[] = array('taglabels', 'COM_PHOCACART_LABELS');//-

if($export_parameters == 1){
    $a[] = array('items_parameter',
'COM_PHOCACART_PARAMETERS');//-
    $parameters = PhocacartParameter::getAllParameters();
}


$a[] = array('metakey', 'JFIELD_META_KEYWORDS_LABEL');
$a[] = array('metadesc',
'JFIELD_META_DESCRIPTION_LABEL');
$a[] = array('metatitle',
'COM_PHOCACART_FIELD_META_TITLE_LABEL');//-
$a[] = array('metadata',
'COM_PHOCACART_METADATA_LABEL');//-
$a[] = array('sales',
'COM_PHOCACART_FIELD_SALES_LABEL');//-


//$a[] = array('allow_upload',
'COM_PHOCACART_FIELD_ALLOW_UPLOAD_LABEL');
//$a[] = array('custom_text',
'COM_PHOCACART_FIELD_CUSTOM_TEXT_LABEL');

//$a[] = array('checked_out',
'COM_PHOCACART_FIELD__LABEL');
//$a[] = array('checked_out_time',
'COM_PHOCACART_FIELD__LABEL');
// Not used
//$a[] = array('hits',
'COM_PHOCACART_FIELD_HITS_LABEL');
//$a[] = array('sales', 'COM_PHOCACART_FIELD__LABEL');
//$a[] = array('params',
'COM_PHOCACART_FIELD__LABEL');
//$a[] = array('metadata',
'COM_PHOCACART_FIELD__LABEL');


$d['productcolumns'] = $a;
unset($a);


// RENDERING
// Header
if (!empty($d['productcolumns'])){
	foreach($d['productcolumns'] as $k => $v) {
		$iCN[] = JText::_($v[0]);
		$iCV[] = JText::_($v[1]);

	}
}

if (!empty($d['products'])){

	foreach($d['products'] as $k => $v) {

		if (!empty($d['productcolumns'])) {
			$iP = array();

			if ($xml) { $iP[] =  $t0 . '<product>';}



			foreach($d['productcolumns'] as $k2 => $v2) {

				$col = $v2[0];



				if (isset($v[$col])) {
					// COLUMNS FROM PRODUCT TABLE

					//$iP[] = $qT . $v[$col] . $qT;

					$l 	= '';
					$r 	= '';

					switch($iCN[$k2]) {

						case 'description':
						case 'description_long':
                        case 'features':
						case 'type_feed':
						case 'type_category_feed':
							if ($xml) {
								$l = '<![CDATA[';
								$r = ']]>';
							} else {
								// CSV
								$v[$col] = str_replace("\n", '', $v[$col]);
								$v[$col] = str_replace("\r", '', $v[$col]);

							}
						break;


						default:
						break;

					}

					if ($xml) {

						$title = '';
						if ($export_add_title == 1) {
							$title = '
title="'.strip_tags(JText::_($iCV[$k2])).'"';
						}

						if (isset($v[$col])) {
							$iP[] = $t1 .
'<'.strip_tags($iCN[$k2]).$title.'>' . $l .
$v[$col] . $r. '</'.strip_tags($iCN[$k2]).'>';
						}
					} else {
						$iP[] = $v[$col];
					}

				} else {


					// COLUMNS DYNAMICALLY CREATED BY OTHER TABLES
					switch($col) { // we select col, so here we don't need to check:
if (isset($v[$col])) {

						case 'categories':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartProduct::getCategoriesByProductId((int)$v['id']);
								if (!empty($items)) {

									if ($xml) {

										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}

										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();
									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<category>';
											$iP[] = $t3 .
'<id>'.$vX['category_id'].':'.$vX['alias'].'</id>';
											$iP[] = $t3 .
'<ordering>'.$vX['ordering'].'</ordering>';
											$iP[] = $t2 . '</category>';
										} else {
											$x[$kX]['id'] 			=
$vX['category_id'].':'.$vX['alias'];
											$x[$kX]['ordering'] 	= $vX['ordering'];

										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);
										$iP[] = json_encode($x);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'images':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartProduct::getImagesByProductId((int)$v['id']);
								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();
									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 .
'<image>'.$vX['image'].'</image>';
										} else {
											$x[] = $vX['image'];
										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										$iP[] = implode('|', $x);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'attributes':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartAttribute::getAttributesAndOptions((int)$v['id']);

								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();
									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<attribute>';
											$iP[] = $t3 .
'<id>'.$vX->id.'</id>';
											$iP[] = $t3 .
'<title>'.$vX->title.'</title>';
											$iP[] = $t3 .
'<alias>'.$vX->alias.'</alias>';
											$iP[] = $t3 .
'<required>'.$vX->required.'</required>';
											$iP[] = $t3 .
'<type>'.$vX->type.'</type>';
											if (!empty($vX->options)) {
												$iP[] = $t3 . '<options>';
												foreach($vX->options as $kX2 => $vX2) {
													$iP[] = $t4 . '<option>';
													$iP[] = $t5 .
'<id>'.$vX2->id.'</id>';
													$iP[] = $t5 .
'<title>'.$vX2->title.'</title>';
													$iP[] = $t5 .
'<alias>'.$vX2->alias.'</alias>';
													$iP[] = $t5 .
'<amount>'.$vX2->amount.'</amount>';
													$iP[] = $t5 .
'<operator>'.$vX2->operator.'</operator>';
													$iP[] = $t5 .
'<stock>'.$vX2->stock.'</stock>';
													//$iP[] = $t5 .
'<stock_calculation>'.$vX2->stock_calculation.'</stock_calculation>';
													$iP[] = $t5 .
'<operator_weight>'.$vX2->operator_weight.'</operator_weight>';
													$iP[] = $t5 .
'<weight>'.$vX2->weight.'</weight>';
													$iP[] = $t5 .
'<image>'.$vX2->image.'</image>';
													$iP[] = $t5 .
'<image_medium>'.$vX2->image_medium.'</image_medium>';
													$iP[] = $t5 .
'<image_small>'.$vX2->image_small.'</image_small>';
													$iP[] = $t5 .
'<download_folder>'.$vX2->download_folder.'</download_folder>';
													$iP[] = $t5 .
'<download_token>'.$vX2->download_token.'</download_token>';
													$iP[] = $t5 .
'<download_file>'.$vX2->download_file.'</download_file>';
													$iP[] = $t5 .
'<color>'.$vX2->color.'</color>';
													$iP[] = $t5 .
'<default_value>'.$vX2->image.'</default_value>';
													$iP[] = $t4 .'</option>';
												}
												$iP[] = $t3 . '</options>';
											}
											$iP[] = $t2 . '</attribute>';
										} else {
											//$x[] = $vX['image'];
										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);
										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'specifications':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartSpecification::getSpecificationsById((int)$v['id'], 1);

								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();

									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<specification>';
											$iP[] = $t3 .
'<id>'.$vX['id'].'</id>';
											$iP[] = $t3 .
'<group_id>'.$vX['group_id'].'</group_id>';
											$iP[] = $t3 .
'<title>'.$vX['title'].'</title>';
											$iP[] = $t3 .
'<alias>'.$vX['alias'].'</alias>';
											$iP[] = $t3 .
'<value>'.$vX['value'].'</value>';
											$iP[] = $t3 .
'<alias_value>'.$vX['alias_value'].'</alias_value>';
											$iP[] = $t3 .
'<image>'.$vX['image'].'</image>';
											$iP[] = $t3 .
'<image_medium>'.$vX['image_medium'].'</image_medium>';
											$iP[] = $t3 .
'<image_small>'.$vX['image_small'].'</image_small>';
											$iP[] = $t3 .
'<color>'.$vX['color'].'</color>';
											$iP[] = $t2 . '</specification>';
										} else {
											//$x[] = $vX['image'];
										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);
										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'discounts':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartDiscountProduct::getDiscountsById((int)$v['id'], 1);

								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();

									foreach($items as $kX => $vX) {

										$groups = PhocacartGroup::getGroupsById((int)$vX['id'],
4, 2, (int)$v['id']);


										if ($xml) {
											$iP[] = $t2 . '<discount>';
											$iP[] = $t3 .
'<id>'.$vX['id'].'</id>';
											$iP[] = $t3 .
'<title>'.$vX['title'].'</title>';
											$iP[] = $t3 .
'<alias>'.$vX['alias'].'</alias>';
											$iP[] = $t3 .
'<discount>'.$vX['discount'].'</discount>';
											$iP[] = $t3 .
'<access>'.$vX['access'].'</access>';
											$iP[] = $t3 .
'<calculation_type>'.$vX['calculation_type'].'</calculation_type>';
											$iP[] = $t3 .
'<quantity_from>'.$vX['quantity_from'].'</quantity_from>';
											$iP[] = $t3 .
'<valid_from>'.$vX['valid_from'].'</valid_from>';
											$iP[] = $t3 .
'<valid_to>'.$vX['valid_to'].'</valid_to>';



											if (!empty($groups)) {
												$iP[] = $t3 . '<groups>';

												foreach($groups as $kY => $vY) {
													$iP[] = $t4 . '<group>';
													$iP[] = $t5 .
'<id>'.$vY['id'].'</id>';
													$iP[] = $t5 .
'<title>'.$vY['title'].'</title>';
													$iP[] = $t4 . '</group>';
												}

												$iP[] = $t3 . '</groups>';

											}

											$iP[] = $t2 . '</discount>';
										} else {
											//$x[] = $vX['image'];
											if (!empty($groups)) {
												foreach($groups as $kY => $vY) {
													unset($groups[$kY]['alias']);
													unset($groups[$kY]['type']);
												}
											}
											$items[$kX]['groups'] = $groups;// set it for CSV
										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);
										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;


						case 'advanced_stock_options':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartAttribute::getCombinationsStockById((int)$v['id'], 1);

								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();

									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<advanced_stock_option>';
											$iP[] = $t3 .
'<id>'.$vX['id'].'</id>';
											$iP[] = $t3 .
'<product_id>'.$vX['product_id'].'</product_id>';
											$iP[] = $t3 .
'<product_key>'.$vX['product_key'].'</product_key>';
											$iP[] = $t3 .
'<stock>'.$vX['stock'].'</stock>';
											$iP[] = $t2 . '</advanced_stock_option>';
										} else {
											//$x[] = $vX['image'];
										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);
										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'related':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartRelated::getRelatedItemsById((int)$v['id'], 2, 1);

								if (!empty($items)) {
									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();
									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 .
'<related_product>'.$vX->id.':'.$vX->alias.'</related_product>';
										} else {
											$x[] = $vX->id.':'.$vX->alias;
										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										$iP[] = implode('|', $x);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'tags':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items = PhocacartTag::getTags((int)$v['id'], 2);
								if (!empty($items)) {
									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();
									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 .
'<tag>'.$vX->id.':'.$vX->alias.'</tag>';
										} else {
											$x[] = $vX->id.':'.$vX->alias;
										}
									}


									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										$iP[] = implode('|', $x);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

                        case 'taglabels':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items = PhocacartTag::getTagLabels((int)$v['id'], 2);
								if (!empty($items)) {
									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();
									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 .
'<label>'.$vX->id.':'.$vX->alias.'</label>';
										} else {
											$x[] = $vX->id.':'.$vX->alias;
										}
									}


									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										$iP[] = implode('|', $x);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

                        case 'items_parameter':

							if (isset($v['id']) && (int)$v['id']
> 0) {

                                // $parameters = Parameters defined at
start
                                if (!empty($parameters)) {

                                    if ($xml) {
                                        $title = '';
                                        if ($export_add_title == 1) {
                                            $title = '
title="'.strip_tags(JText::_($v2[1])).'"';
                                        }
                                        $iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
                                    }


                                    $items = array();
                                    foreach($parameters as $kX => $vX)
{

                                        $idP = (int)$vX->id;
                                        $items[$idP] = array();
										if ($xml) {
											$pA =
PhocacartParameter::getParameterValues((int)$v['id'], $idP,0);
											if (!empty($pA)) {
											    $iP[] = $t2 . '<parameter>';
											    $iP[] = $t3 .
'<id>'.$vX->id.'</id>';
											    $iP[] = $t3 .
'<title>'.$vX->title.'</title>';
											    $iP[] = $t3 .
'<alias>'.$vX->alias.'</alias>';
												$iP[] = $t3 . '<values>';
												foreach($pA as $kX2 => $vX2) {
													$iP[] = $t4 . '<value>';
													$iP[] = $t5 .
'<id>'.$vX2->id.'</id>';
													$iP[] = $t5 .
'<title>'.$vX2->title.'</title>';
													$iP[] = $t5 .
'<alias>'.$vX2->alias.'</alias>';
													$iP[] = $t4 .'</value>';
												}
												$iP[] = $t3 . '</values>';
												$iP[] = $t2 . '</parameter>';
											}

										} else {
										    $items[$idP]	=
PhocacartParameter::getParameterValues((int)$v['id'], $idP,2);//
CSV
                                        }
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);
										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'groups':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items = PhocacartGroup::getGroupsById((int)$v['id'], 3,
2);

								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();

									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<group>';
											$iP[] = $t3 .
'<id>'.$vX['id'].'</id>';
											$iP[] = $t3 .
'<title>'.$vX['title'].'</title>';
											$iP[] = $t2 . '</group>';
										} else {
											//$x[] = $vX['image'];
											unset($items[$kX]['alias']);
											unset($items[$kX]['type']);
										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);

										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'price_groups':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartGroup::getProductPriceGroupsById((int)$v['id']);


								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();

									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<price_group>';
											$iP[] = $t3 .
'<id>'.$vX['id'].'</id>';
											$iP[] = $t3 .
'<product_id>'.$vX['product_id'].'</product_id>';
											$iP[] = $t3 .
'<group_id>'.$vX['group_id'].'</group_id>';
											$iP[] = $t3 .
'<price>'.$vX['price'].'</price>';
											$iP[] = $t2 . '</price_group>';
										} else {
											//$x[] = $vX['image'];

										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);

										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						case 'point_groups':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartGroup::getProductPointGroupsById((int)$v['id']);


								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();

									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<point_group>';
											$iP[] = $t3 .
'<id>'.$vX['id'].'</id>';
											$iP[] = $t3 .
'<product_id>'.$vX['product_id'].'</product_id>';
											$iP[] = $t3 .
'<group_id>'.$vX['group_id'].'</group_id>';
											$iP[] = $t3 .
'<points_received>'.$vX['points_received'].'</points_received>';
											$iP[] = $t2 . '</point_group>';
										} else {
											//$x[] = $vX['image'];

										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);

										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						// Price history
						case 'price_histories':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartPriceHistory::getPriceHistoryById((int)$v['id'], 0, 1);


								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();

									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<price_history>';
											$iP[] = $t3 .
'<id>'.$vX['id'].'</id>';
											$iP[] = $t3 .
'<product_id>'.$vX['product_id'].'</product_id>';
											$iP[] = $t3 .
'<date>'.$vX['date'].'</date>';
											$iP[] = $t3 .
'<price>'.$vX['price'].'</price>';
											$iP[] = $t2 . '</price_history>';
										} else {
											//$x[] = $vX['image'];

										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);

										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;


                        case 'additional_download_files':

							if (isset($v['id']) && (int)$v['id']
> 0) {
								$items =
PhocacartFileAdditional::getProductFilesByProductId((int)$v['id'],
1);

								if (!empty($items)) {

									if ($xml) {
										$title = '';
										if ($export_add_title == 1) {
											$title = '
title="'.strip_tags(JText::_($v2[1])).'"';
										}
										$iP[] = $t1 .
'<'.strip_tags($v2[0]).$title.'>';
									}

									$x = array();

									foreach($items as $kX => $vX) {
										if ($xml) {
											$iP[] = $t2 . '<additional_download_file>';
											$iP[] = $t3 .
'<id>'.$vX['id'].'</id>';
											$iP[] = $t3 .
'<download_file>'.$vX['download_file'].'</download_file>';
											$iP[] = $t3 .
'<download_token>'.$vX['download_token'].'</download_token>';
											$iP[] = $t3 .
'<download_days>'.$vX['download_days'].'</download_days>';
											$iP[] = $t2 . '</additional_download_file>';
										} else {
											//$x[] = $vX['image'];
										}
									}

									if ($xml) {
										$iP[] = $t1 .
'</'.strip_tags($v2[0]).'>';
									} else {
										//$iP[] = implode('|', $x);
										$iP[] = json_encode($items);
									}
								} else {
									if ($csv) {$iP[] = '';}// CSV set right column count
								}
							}
						break;

						default:

						break;

					}
				}
			}

			if ($xml) { $iP[] = $t0 . '</product>'; }


			if (!empty($iP)) {
				//$iA[] = ' ('.(int)$user->id .', '.
$db->quote(implode($sP, $iP)).', 0)';
				//$iA[] = ' ('.(int)$user->id .', '.
$db->quote(serialize($iP)).'), 0';
				if ($xml) {
					$iA[] = ' ('.(int)$user->id .', '.
$db->quote(implode("\n", $iP)).', 0)';
				} else {
					$iA[] = ' ('.(int)$user->id .', '.
$db->quote(str_putcsv($iP)).', 0)';
				}
			}
		}
	}
}

// First Row Head - column name (ID) CSV
if (!empty($iCN) && $d['page'] == 1 && !$xml) {
	$iO[] = ' ('.(int)$user->id .', '.
$db->quote(str_putcsv($iCN)).', 1)';
}
// Second Row Head - column name translated CSV
if (!empty($iCV) && $d['page'] == 1 && !$xml) {
	$iO[] = ' ('.(int)$user->id .', '.
$db->quote(str_putcsv($iCV)).', 1)';
}

// First and second Row Head - XML
if ($d['page'] == 1 && $xml) {
	$iO[] = ' ('.(int)$user->id .', '.
$db->quote('<?xml version="1.0"
encoding="utf-8"?>').', 1)';
	$iO[] = ' ('.(int)$user->id .', '.
$db->quote('<products>').', 1)';
}


// All product rows
if (!empty($iA)) {
	$iO[] =  implode(", ", $iA);
}


// Last Row - XML
if (($d['last_page'] == $d['page']) && $xml) {
	$iO[] = ' ('.(int)$user->id .', '.
$db->quote('</products>').', 2)';
}

if (!empty($iO)) {
	echo implode(", ", $iO);
}