LAMPIRAN : LISTING PROGRAM Listing Index.php

  DAFTAR PUSTAKA Baskoro,Adi, Buku Pintar Membuat Toko Online,Mediakita,Jakarta,2012.

  Ducket,Jon, Beginning Web programming with HTML, XHTML and CSS,Wiley Publishing,Inc. Raharjo,Budi, Belajar Pemrograman Web,Modula,2011. Andi, Apa dan Bagaimana E-Commerce Perusahaan Top Duni Edisi ke 1,Wahana Komputer, Yogyakarta, 2010. Wahyu,P.,Instalasi Prestashop Pada Komputer Lokal,[pdf],(http://away.web.id,

  Diakses tanggal 18 Februari 2013) Wahana Komputer. 2002. Apa dan Bagaimana E-Commerce. Edisi ke-

  2.Yogyakarta:Andi Nengkirahmat, “Komputer Source Berbagi Ilmu Arsip Tag: Normalisasi File.Pdf ”,

  From : https://nengkirahmat.wordpress.com/tag/normalisasi-file-pdf/, Diakses pada 15 april 2013.

  Meigi,Rahman, “Kumpulan Ebook Belajar Website Ebook”, From : http://megi- rahman.blogspot.com/2011/12/kumpulan-ebook-belajar-website-ebook.html, Diakses pada 25 April 2013. Muhal, “Tutorial Membuat Toko Online Dengan CMS Prestashop 1.2.5.0 “, From : http://muhal.wordpress.com/2010/05/12/tutorial-membuat-toko-online- dengan-cms-prestashop-1-2-5-0/ , Diakses pada 30 April 2013

  LAMPIRAN : LISTING PROGRAM Listing Index.php

  <?php /*

  • 2007-2011 PrestaShop
  • NOTICE OF LICENSE
  • This source file is subject to the Open Software License (OSL 3.0)
  • that is bundled with this package in the file LICENSE.txt.
  • It is also available through the world-wide-web at this URL:
  • http://opensource.org/licenses/osl-3.0.php
  • If you did not receive a copy of the license and are unable to
  • obtain it through the world-wide-web, please send an email
  • to license@prestashop.com so we can send you a copy immediately.
  • DISCLAIMER
  • Do not edit or add to this file if you wish to upgrade PrestaShop to newer
  • versions in the future. If you wish to customize PrestaShop for your
  • needs please refer to http://www.prestashop.com for more information.
  • >@author PrestaShop SA <contact@prestashop.com>
  • @copyright 2007-2011 PrestaShop SA
  • @version Release: $Revision: 7233 $
  • @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  • International Registered Trademark & Property of PrestaShop SA
  • / header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must- revalidate");
header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Location: ../"); exit;

  Listing CategoryController.php

  <?php /*

  • 2007-2011 PrestaShop
  • NOTICE OF LICENSE
  • This source file is subject to the Open Software License (OSL 3.0)
  • that is bundled with this package in the file LICENSE.txt.
  • It is also available through the world-wide-web at this URL:
  • http://opensource.org/licenses/osl-3.0.php
  • If you did not receive a copy of the license and are unable to
  • obtain it through the world-wide-web, please send an email
  • to license@prestashop.com so we can send you a copy immediately.
  • DISCLAIMER
  • Do not edit or add to this file if you wish to upgrade PrestaShop to newer
  • versions in the future. If you wish to customize PrestaShop for your
  • needs please refer to http://www.prestashop.com for more information.
  • >@author PrestaShop SA <contact@prestashop.com>
  • @copyright 2007-2011 PrestaShop SA
  • @version Release: $Revision: 9643 $
  • @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  • International Registered Trademark & Property of PrestaShop SA
  • / class CategoryControllerCore extends FrontController

  { public $php_self = 'category.php'; protected $category; public function setMedia() { parent::setMedia();

  Tools::addCSS(array( _PS_CSS_DIR_.'jquery.cluetip.css' =>

  'all', _THEME_CSS_DIR_.'scenes.css' => 'all', _THEME_CSS_DIR_.'category.css' => 'all', _THEME_CSS_DIR_.'product_list.css' =>

  'all')); if (Configuration::get('PS_COMPARATOR_MAX_ITEM') > 0)

  Tools::addJS(_THEME_JS_DIR_.'products- comparison.js'); } public function displayHeader() { parent::displayHeader();

  $this->productSort(); } public function canonicalRedirection() {

  // Automatically redirect to the canonical URL if the current in is the right one // $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain if (Validate::isLoadedObject($this->category)

  && Configuration::get('PS_CANONICAL_REDIRECT') && strtoupper($_SERVER['REQUEST_METHOD']) == 'GET' && !Tools::getValue('noredirect'))

  { $currentURL = preg_replace('/[?&].*$/',

  '', self::$link->getCategoryLink($this->category)); if (!preg_match('/^'.Tools::pRegexp($currentURL, '/').'([&?].*)?$/', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQU EST_URI']))

  { header('HTTP/1.0 301 Moved'); if (defined('_PS_MODE_DEV_') AND

  _PS_MODE_DEV_ ) die('[Debug] This page has moved<br />Please use the following URL instead: <a href="'.$currentURL.'">'.$currentURL.'</a>');

  Tools::redirectLink($currentURL); }

  } } public function preProcess() { if ($id_category =

  (int)Tools::getValue('id_category')) $this->category = new

  Category($id_category, self::$cookie->id_lang); if (!Validate::isLoadedObject($this->category)) { header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found');

  } else $this->canonicalRedirection(); parent::preProcess();

  } public function process() { parent::process(); if (!($id_category =

  (int)Tools::getValue('id_category')) OR !Validate::isUnsignedId($id_category))

  $this->errors[] = Tools::displayError('Missing category ID'); else

  { if (!Validate::isLoadedObject($this- >category))

  $this->errors[] = Tools::displayError('Category does not exist'); elseif (!$this->category- >checkAccess((int)(self::$cookie->id_customer)))

  $this->errors[] = Tools::displayError('You do not have access to this category.'); elseif (!$this->category->active) self::$smarty->assign('category',

  $this->category); else {

  $rewrited_url = self::$link- >getCategoryLink((int)$this->category->id, $this- >category->link_rewrite);

  /* Scenes (could be externalised to another controler if you need them */ self::$smarty->assign('scenes',

  Scene::getScenes((int)($this->category->id), (int)(self::$cookie->id_lang), true, false));

  /* Scenes images formats */ if ($sceneImageTypes = ImageType::getImagesTypes('scenes'))

  { foreach ($sceneImageTypes AS $sceneImageType)

  { if ($sceneImageType['name'] == 'thumb_scene')

  $thumbSceneImageType = $sceneImageType; elseif ($sceneImageType['name'] == 'large_scene')

  $largeSceneImageType = $sceneImageType;

  } self::$smarty- >assign('thumbSceneImageType', isset($thumbSceneImageType) ? $thumbSceneImageType : NULL); self::$smarty- >assign('largeSceneImageType', isset($largeSceneImageType) ? $largeSceneImageType : NULL);

  } $this->category->description = nl2br2($this->category->description); $subCategories = $this->category-

  >getSubCategories((int)self::$cookie->id_lang); self::$smarty->assign('category', $this->category); if (isset($subCategories) AND !empty($subCategories) AND $subCategories)

  { self::$smarty- >assign('subcategories', $subCategories); self::$smarty->assign(array(

  'subcategories_nb_total' => sizeof($subCategories), 'subcategories_nb_half' => ceil(sizeof($subCategories) / 2)));

  } if ($this->category->id != 1) $this->productListAssign(); self::$smarty->assign(array( 'products' => (isset($this-

  >cat_products) AND $this->cat_products) ? $this- >cat_products : NULL,

  'id_category' => (int)($this- >category->id),

  'id_category_parent' => (int)($this->category->id_parent),

  'return_category_name' => Tools::safeOutput($this->category->name),

  'path' => Tools::getPath((int)($this->category->id)),

  'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),

  'categorySize' => Image::getSize('category'),

  'mediumSize' => Image::getSize('medium'),

  'thumbSceneSize' => Image::getSize('thumb_scene'),

  'homeSize' => Image::getSize('home')

  )); if (isset(self::$cookie->id_compare)) self::$smarty-

  >assign('compareProducts', CompareProduct::getCompareProducts((int)self::$cookie- >id_compare));

  } } self::$smarty->assign(array(

  'allow_oosp' => (int)(Configuration::get('PS_ORDER_OUT_OF_STOCK')),

  'comparator_max_item' => (int)(Configuration::get('PS_COMPARATOR_MAX_ITEM')),

  'suppliers' => Supplier::getSuppliers() ));

  } public function productListAssign()

  { $hookExecuted = false; Module::hookExec('productListAssign', array('nbProducts' => &$this->nbProducts, 'catProducts'

  => &$this->cat_products, 'hookExecuted' => &$hookExecuted)); if(!$hookExecuted) // The hook was not executed, standard working

  { self::$smarty- >assign('categoryNameComplement', '');

  $this->nbProducts = $this->category- >getProducts(NULL, NULL, NULL, $this->orderBy, $this- >orderWay, true);

  $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts"

  $this->cat_products = $this->category- >getProducts((int)(self::$cookie->id_lang), (int)($this- >p), (int)($this->n), $this->orderBy, $this->orderWay);

  } else // Hook executed, use the override $this->pagination((int)$this->nbProducts);

  // Pagination must be call after "getProducts" self::$smarty->assign('nb_products', (int)$this->nbProducts);

  } public function displayContent() { parent::displayContent(); self::$smarty-

  >display(_PS_THEME_DIR_.'category.tpl'); }

  }

  Listing ProductController.php

  <?php /*

  • 2007-2011 PrestaShop
  • NOTICE OF LICENSE
  • >This source file is subject to the Open Software License (OSL 3.0)
  • that is bundled with this package in the file LICENSE.txt.

  • It is also available through the world-wide-web at this URL:
  • http://opensource.org/licenses/osl-3.0.php
  • If you did not receive a copy of the license and are unable to
  • obtain it through the world-wide-web, please send an email
  • to license@prestashop.com so we can send you a copy immediately.
  • DISCLAIMER
  • Do not edit or add to this file if you wish to upgrade PrestaShop to newer
  • versions in the future. If you wish to customize PrestaShop for your
  • needs please refer to http://www.prestashop.com for more information.
  • @author PrestaShop SA <contact@prestashop.com>
  • @copyright 2007-2011 PrestaShop SA
  • @version Release: $Revision: 10539 $
  • @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  • International Registered Trademark & Property of PrestaShop SA
  • / class ProductControllerCore extends FrontController { protected $product; public $php_self = 'product.php'; protected $canonicalURL; public function setMedia() { parent::setMedia(); Tools::addCSS(_THEME_CSS_DIR_.'product.css'); Tools::addCSS(_PS_CSS_DIR_.'jquery.fancybox-

  1.3.4.css', 'screen'); Tools::addJS(array(

  _PS_JS_DIR_.'jquery/jquery.fancybox- 1.3.4.js',

  _PS_JS_DIR_.'jquery/jquery.idTabs.modified.js', _PS_JS_DIR_.'jquery/jquery.scrollTo-1.4.2- min.js', _PS_JS_DIR_.'jquery/jquery.serialScroll-

  1.2.2-min.js',

  _THEME_JS_DIR_.'tools.js', _THEME_JS_DIR_.'product.js')); if (Configuration::get('PS_DISPLAY_JQZOOM') ==

  1) {

  Tools::addCSS(_PS_CSS_DIR_.'jqzoom.css', 'screen');

  Tools::addJS(_PS_JS_DIR_.'jquery/jquery.jqzoom.js'); }

  } public function canonicalRedirection() {

  // Automatically redirect to the canonical URL if the current in is the right one // $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain if (Validate::isLoadedObject($this->product) && strtoupper($_SERVER['REQUEST_METHOD']) == 'GET') {

  $canonicalURL = self::$link- >getProductLink($this->product); if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQU EST_URI']))

  { header('HTTP/1.0 301 Moved'); if (defined('_PS_MODE_DEV_') AND

  _PS_MODE_DEV_) die('[Debug] This page has moved<br />Please use the following URL instead: <a href="'.$canonicalURL.'">'.$canonicalURL.'</a>');

  Tools::redirectLink($canonicalURL); }

  } } public function preProcess() { if ($id_product =

  (int)Tools::getValue('id_product')) $this->product = new Product($id_product, true, self::$cookie->id_lang); if (!Validate::isLoadedObject($this->product)) { header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); } else

  $this->canonicalRedirection(); parent::preProcess(); } public function process() { global $cart, $currency; parent::process(); if (!Validate::isLoadedObject($this->product))

  $this->errors[] = Tools::displayError('Product not found'); else

  { if ((!$this->product->active AND (Tools::getValue('adtoken') != Tools::encrypt('PreviewProduct'.$this->product->id))

  || !file_exists(dirname(__FILE__).'/../'.Tools::getValue('ad ').'/ajax.php')))

  { header('HTTP/1.1 404 page not found');

  $this->errors[] = Tools::displayError('Product is no longer available.');

  } elseif (!$this->product- >checkAccess((int)self::$cookie->id_customer))

  $this->errors[] = Tools::displayError('You do not have access to this product.'); else { self::$smarty->assign('virtual',

  ProductDownload::getIdFromIdProduct((int)$this->product- >id)); if (!$this->product->active) self::$smarty-

  >assign('adminActionDisplay', true); /* Product pictures management */ require_once('images.inc.php'); if ($this->product->customizable)

  { self::$smarty- >assign('customizationFormTarget', Tools::safeOutput(urldecode($_SERVER['REQUEST_URI']))); if (Tools::isSubmit('submitCustomizedDatas'))

  { $this->pictureUpload($this-

  >product, $cart); $this->textRecord($this-

  >product, $cart); $this->formTargetFormat();

  } elseif (isset($_GET['deletePicture']) AND !$cart- >deletePictureToProduct((int)($this->product->id), (int)(Tools::getValue('deletePicture'))))

  $this->errors[] = Tools::displayError('An error occurred while deleting the selected picture');

  $files = self::$cookie- >getFamily('pictures_'.(int)($this->product->id));

  $textFields = self::$cookie- >getFamily('textFields_'.(int)($this->product->id)); foreach ($textFields as $key => $textField)

  $textFields[$key] = str_replace('<br />', "\n", $textField); self::$smarty->assign(array(

  'pictures' => $files, 'textFields' =>

  $textFields)); } /* Features / Values */ $features = $this->product-

  >getFrontFeatures((int)self::$cookie->id_lang); $attachments = ($this->product-

  >cache_has_attachments ? $this->product- >getAttachments((int)self::$cookie->id_lang) : array());

  /* Category */ $category = false; if (isset($_SERVER['HTTP_REFERER'])

  AND preg_match('!^(.*)\/([0-9]+)\- (.*[^\.])|(.*)id_category=([0-9]+)(.*)$!', $_SERVER['HTTP_REFERER'], $regs) AND !strstr($_SERVER['HTTP_REFERER'], '.html'))

  { if (isset($regs[2]) AND is_numeric($regs[2]))

  { if (Product::idIsOnCategoryId((int)($this->product->id), array('0' => array('id_category' => (int)($regs[2])))))

  $category = new Category((int)($regs[2]), (int)(self::$cookie->id_lang));

  } elseif (isset($regs[5]) AND is_numeric($regs[5]))

  { if (Product::idIsOnCategoryId((int)($this->product->id), array('0' => array('id_category' => (int)($regs[5])))))

  $category = new Category((int)($regs[5]), (int)(self::$cookie->id_lang));

  } } if (!$category)

  $category = new Category($this- >product->id_category_default, (int)(self::$cookie- >id_lang)); if (isset($category) AND Validate::isLoadedObject($category))

  { self::$smarty->assign(array( 'path' =>

  Tools::getPath((int)$category->id, $this->product->name, true), 'category' => $category, 'subCategories' =>

  $category->getSubCategories((int)self::$cookie->id_lang, true), 'id_category_current' =>

  (int)$category->id, 'id_category_parent' =>

  (int)$category->id_parent, 'return_category_name' =>

  Tools::safeOutput($category->name) ));

  } else self::$smarty->assign('path',

  Tools::getPath((int)$this->product->id_category_default, $this->product->name)); self::$smarty->assign('return_link', (isset($category->id) AND $category->id) ? Tools::safeOutput(self::$link- >getCategoryLink($category)) : 'javascript: history.back();'); if (Pack::isPack((int)$this->product-

  >id) AND !Pack::isInStock((int)$this->product->id)) $this->product->quantity = 0;

  $id_customer = (isset(self::$cookie- >id_customer) AND self::$cookie->id_customer) ? (int)(self::$cookie->id_customer) : 0;

  $id_group = $id_customer ? (int)(Customer::getDefaultGroupId($id_customer)) : _PS_DEFAULT_CUSTOMER_GROUP_;

  $id_country = (int)($id_customer ? Customer::getCurrentCountry($id_customer) : Configuration::get('PS_COUNTRY_DEFAULT'));

  $group_reduction = GroupReduction::getValueForProduct($this->product->id, $id_group); if ($group_reduction == 0)

  $group_reduction = Group::getReduction((int)self::$cookie->id_customer) / 100;

  // Tax $tax =

  (float)(Tax::getProductTaxRate((int)($this->product->id), $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); self::$smarty->assign('tax_rate', $tax);

  $productPriceWithTax = Product::getPriceStatic($this->product->id, true, NULL, 6); if (Product::$_taxCalculationMethod == PS_TAX_INC)

  $productPriceWithTax = Tools::ps_round($productPriceWithTax, 2);

  $productPriceWithoutEcoTax = (float)($productPriceWithTax - $this->product->ecotax);

  $ecotax_rate = (float) Tax::getProductEcotaxRate($cart- >{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $ecotaxTaxAmount = Tools::ps_round($this- >product->ecotax, 2); if (Product::$_taxCalculationMethod == PS_TAX_INC && (int)Configuration::get('PS_TAX'))

  $ecotaxTaxAmount = Tools::ps_round($ecotaxTaxAmount * (1 + $ecotax_rate / 100), 2); self::$smarty->assign(array(

  'quantity_discounts' => $this- >formatQuantityDiscounts(SpecificPrice::getQuantityDiscou nts((int)$this->product->id, (int)Shop::getCurrentShop(), (int)self::$cookie->id_currency, $id_country, $id_group), $this->product->getPrice(Product::$_taxCalculationMethod == PS_TAX_INC, false), (float)$tax),

  'product' => $this->product, 'ecotax_tax_inc' =>

  $ecotaxTaxAmount, 'ecotax_tax_exc' =>

  Tools::ps_round($this->product->ecotax, 2), 'ecotaxTax_rate' =>

  $ecotax_rate, 'homeSize' =>

  Image::getSize('home'), 'product_manufacturer' => new

  Manufacturer((int)$this->product->id_manufacturer, self::$cookie->id_lang), 'token' =>

  Tools::getToken(false), 'productPriceWithoutEcoTax' =>

  (float)($productPriceWithoutEcoTax), 'features' => $features, 'attachments' => $attachments, 'allow_oosp' => $this->product-

  >isAvailableWhenOutOfStock((int)($this->product- >out_of_stock)),

  'last_qties' => (int)Configuration::get('PS_LAST_QTIES'),

  'group_reduction' => (1 - $group_reduction),

  'col_img_dir' => _PS_COL_IMG_DIR_,

  )); self::$smarty->assign(array( 'HOOK_EXTRA_LEFT' =>

  Module::hookExec('extraLeft'), 'HOOK_EXTRA_RIGHT' =>

  Module::hookExec('extraRight'), 'HOOK_PRODUCT_OOS' =>

  Hook::productOutOfStock($this->product), 'HOOK_PRODUCT_FOOTER' =>

  Hook::productFooter($this->product, $category),

  'HOOK_PRODUCT_ACTIONS' => Module::hookExec('productActions'),

  } if (!isset($cover)) $cover = array('id_image' =>

  $productImages); /* Attributes / Groups & colors */

  >getAccessories((int)self::$cookie->id_lang) )); if (count($productImages)) self::$smarty->assign('images',

  Image::getSize('large'), 'accessories' => $this->product-

  Image::getSize('medium'), 'largeSize' =>

  (int)($size['width']), 'mediumSize' =>

  $size = Image::getSize('large'); self::$smarty->assign(array( 'cover' => $cover, 'imgWidth' =>

  Language::getIsoById(self::$cookie->id_lang).'-default', 'legend' => 'No picture', 'title' => 'No picture');

  } $productImages[(int)$image['id_image']] = $image;

  'HOOK_PRODUCT_TAB' => Module::hookExec('productTab'),

  $cover['id_image_only'] = (int)($image['id_image']);

  (Configuration::get('PS_LEGACY_IMAGES') ? ($this- >product->id.'-'.$image['id_image']) : $image['id_image']);

  $cover = $image; $cover['id_image'] =

  { self::$smarty- >assign('mainImage', $images[0]);

  >getImages((int)self::$cookie->id_lang); $productImages = array(); foreach ($images AS $k => $image) { if ($image['cover'])

  )); $images = $this->product-

  'HOOK_PRODUCT_TAB_CONTENT' => Module::hookExec('productTabContent')

  $colors = array();

  $attributesGroups = $this->product- >getAttributesGroups((int)(self::$cookie->id_lang)); // @todo (RM) should only get groups and not all declination ? if (is_array($attributesGroups) AND $attributesGroups)

  { $groups = array(); $combinationImages = $this-

  >product->getCombinationImages((int)(self::$cookie- >id_lang)); foreach ($attributesGroups AS $k => $row)

  { /* Color management */ if

  (((isset($row['attribute_color']) AND $row['attribute_color']) OR (file_exists(_PS_COL_IMG_DIR_.$row['id_attribute'].'.jpg' ))) AND $row['id_attribute_group'] == $this->product- >id_color_default)

  { $colors[$row['id_attribute']]['value'] =

  $row['attribute_color']; $colors[$row['id_attribute']]['name'] =

  $row['attribute_name']; if (!isset($colors[$row['id_attribute']]['attributes_quantit y']))

  $colors[$row['id_attribute']]['attributes_quantity'] = 0;

  $colors[$row['id_attribute']]['attributes_quantity']

  • = (int)($row['quantity']);

  } if (!isset($groups[$row['id_attribute_group']]))

  { $groups[$row['id_attribute_group']] = array(

  'name' => $row['public_group_name'],

  'is_color_group' => $row['is_color_group'],

  'default' =>

  • 1,

  ); }

  $groups[$row['id_attribute_group']]['attributes'][$r ow['id_attribute']] = $row['attribute_name']; if ($row['default_on'] &&

  $groups[$row['id_attribute_group']]['default'] == -1) $groups[$row['id_attribute_group']]['default'] =

  (int)($row['id_attribute']); if (!isset($groups[$row['id_attribute_group']]['attributes_q uantity'][$row['id_attribute']]))

  $groups[$row['id_attribute_group']]['attributes_quan tity'][$row['id_attribute']] = 0; $groups[$row['id_attribute_group']]['attributes_quan tity'][$row['id_attribute']] += (int)($row['quantity']); $combinations[$row['id_product_attribute']]['attribu tes_values'][$row['id_attribute_group']] =

  $row['attribute_name']; $combinations[$row['id_product_attribute']]['attribu tes'][] = (int)($row['id_attribute']); $combinations[$row['id_product_attribute']]['price']

  = (float)($row['price']); $combinations[$row['id_product_attribute']]['ecotax'

  ] = (float)($row['ecotax']); $combinations[$row['id_product_attribute']]['weight'

  ] = (float)($row['weight']); $combinations[$row['id_product_attribute']]['quantit y'] = (int)($row['quantity']); $combinations[$row['id_product_attribute']]['referen ce'] = $row['reference']; $combinations[$row['id_product_attribute']]['ean13']

  = $row['ean13']; $combinations[$row['id_product_attribute']]['unit_im pact'] = $row['unit_price_impact'];

  $combinations[$row['id_product_attribute']]['minimal _quantity'] = $row['minimal_quantity'];

  $combinations[$row['id_product_attribute']]['id_imag e'] = isset($combinationImages[$row['id_product_attribute']][0] ['id_image']) ? $combinationImages[$row['id_product_attribute']][0]['id_i mage'] : -1;

  } //wash attributes list (if some attributes are unavailables and if allowed to wash it) if

  (!Product::isAvailableWhenOutOfStock($this->product- >out_of_stock) && Configuration::get('PS_DISP_UNAVAILABLE_ATTR') == 0)

  { foreach ($groups AS &$group) foreach ($group['attributes_quantity'] AS $key => &$quantity) if (!$quantity) unset($group['attributes'][$key]); foreach ($colors AS $key =>

  $color) if (!$color['attributes_quantity']) unset($colors[$key]);

  } foreach ($groups AS &$group) natcasesort($group['attributes']); foreach ($combinations AS

  $id_product_attribute => $comb) {

  $attributeList = ''; foreach ($comb['attributes'] AS $id_attribute)

  $attributeList .= '\''.(int)($id_attribute).'\',';

  $attributeList = rtrim($attributeList, ',');

  $combinations[$id_product_attribute]['list'] = $attributeList;

  } self::$smarty->assign(array( 'groups' => $groups, 'combinaisons' =>

  $combinations, /* Kept for compatibility purpose only */ 'combinations' =>

  $combinations, 'colors' =>

  (sizeof($colors) AND $this->product->id_color_default) ? $colors : false,

  'combinationImages' => $combinationImages));

  } self::$smarty->assign(array( 'no_tax' =>

  Tax::excludeTaxeOption() OR !Tax::getProductTaxRate((int)$this->product->id, $cart- >{Configuration::get('PS_TAX_ADDRESS_TYPE')}),

  'customizationFields' => ($this- >product->customizable ? $this->product- >getCustomizationFields((int)self::$cookie->id_lang) : false)

  )); // Pack management self::$smarty->assign('packItems',

  $this->product->cache_is_pack ? Pack::getItemTable($this- >product->id, (int)(self::$cookie->id_lang), true) : array()); self::$smarty->assign('packs',

  Pack::getPacksTable($this->product->id, (int)(self::$cookie->id_lang), true, 1));

  } } self::$smarty->assign(array(

  'ENT_NOQUOTES' => ENT_NOQUOTES, 'outOfStockAllowed' =>

  (int)(Configuration::get('PS_ORDER_OUT_OF_STOCK')), 'errors' => $this->errors, 'categories' =>

  Category::getHomeCategories((int)self::$cookie->id_lang), 'have_image' => (isset($cover) ?

  (int)$cover['id_image'] : false),

  'tax_enabled' => Configuration::get('PS_TAX'),

  'display_qties' => (int)Configuration::get('PS_DISPLAY_QTIES'),

  'display_ht' => !Tax::excludeTaxeOption(), 'ecotax' => (!sizeof($this->errors) AND

  $this->product->ecotax > 0 ? Tools::convertPrice((float)($this->product->ecotax)) : 0),

  'currencySign' => $currency->sign, 'currencyRate' => $currency-

  >conversion_rate, 'currencyFormat' => $currency->format, 'currencyBlank' => $currency->blank, 'jqZoomEnabled' =>

  Configuration::get('PS_DISPLAY_JQZOOM') ));

  } public function displayContent() { parent::displayContent(); self::$smarty-

  >display(_PS_THEME_DIR_.'product.tpl'); } public function pictureUpload(Product $product, Cart

  $cart) { if (!$fieldIds = $this->product-

  >getCustomizationFieldIds()) return false; $authorizedFileFields = array(); foreach ($fieldIds AS $fieldId) if ($fieldId['type'] == _CUSTOMIZE_FILE_)

  $authorizedFileFields[(int)($fieldId['id_customizati on_field'])] = 'file'.(int)($fieldId['id_customization_field']);

  $indexes = array_flip($authorizedFileFields); foreach ($_FILES AS $fieldName => $file) if (in_array($fieldName,

  $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name']))

  { $fileName = md5(uniqid(rand(), true)); if ($error = checkImage($file,

  (int)(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE'))) )

  $this->errors[] = $error; if ($error OR (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName))) return false;

  /* Original file */ elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName))

  $this->errors[] = Tools::displayError('An error occurred during the image upload.');

  /* A smaller one */ elseif (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName.'_small', (int)(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), (int)(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT'))))

  $this->errors[] = Tools::displayError('An error occurred during the image upload.'); elseif

  (!chmod(_PS_UPLOAD_DIR_.$fileName, 0777) OR !chmod(_PS_UPLOAD_DIR_.$fileName.'_small', 0777))

  $this->errors[] = Tools::displayError('An error occurred during the image upload.'); else

  $cart- >addPictureToProduct((int)($this->product->id), $indexes[$fieldName], $fileName); unlink($tmpName);

  } return true; } public function textRecord(Product $product, Cart

  $cart) { if (!$fieldIds = $this->product-

  >getCustomizationFieldIds()) return false; $authorizedTextFields = array(); foreach ($fieldIds AS $fieldId) if ($fieldId['type'] ==

  _CUSTOMIZE_TEXTFIELD_) $authorizedTextFields[(int)($fieldId['id_customizati on_field'])] =

  'textField'.(int)($fieldId['id_customization_field']); $indexes = array_flip($authorizedTextFields); foreach ($_POST AS $fieldName => $value) if (in_array($fieldName, $authorizedTextFields) AND !empty($value))

  { if (!Validate::isMessage($value)) $this->errors[] =

  Tools::displayError('Invalid message'); else $cart-

  >addTextFieldToProduct((int)($this->product->id), $indexes[$fieldName], $value);

  } elseif (in_array($fieldName, $authorizedTextFields) AND empty($value))

  $cart- >deleteTextFieldFromProduct((int)($this->product->id), $indexes[$fieldName]);

  } public function formTargetFormat() {

  $customizationFormTarget = Tools::safeOutput(urldecode($_SERVER['REQUEST_URI'])); foreach ($_GET AS $field => $value) if (strncmp($field, 'group_', 6) == 0)

  $customizationFormTarget = preg_replace('/&group_([[:digit:]]+)=([[:digit:]]+)/', '', $customizationFormTarget); if (isset($_POST['quantityBackup'])) self::$smarty->assign('quantityBackup',

  (int)($_POST['quantityBackup'])); self::$smarty- >assign('customizationFormTarget', $customizationFormTarget);

  } public function formatQuantityDiscounts($specificPrices, $price, $taxRate)

  { foreach ($specificPrices AS $key => &$row) {

  $row['quantity'] = &$row['from_quantity']; // The price may be directly set if ($row['price'] != 0) { $cur_price =

  (Product::$_taxCalculationMethod == PS_TAX_EXC ? $row['price'] : $row['price'] * (1 + $taxRate / 100)); if ($row['reduction_type'] == 'amount')

  $cur_price = Product::$_taxCalculationMethod == PS_TAX_INC ? $cur_price - $row['reduction'] : $cur_price - ($row['reduction'] / (1 + $taxRate / 100)); else

  $cur_price = $cur_price * ( 1 - ($row['reduction']));

  $row['real_value'] = $price - $cur_price;

  } else { global $cookie;

  $id_currency = (int)$cookie->id_currency; if ($row['reduction_type'] == 'amount')

  { $reduction_amount = $row['reduction']; if (!$row['id_currency']) $reduction_amount =

  Tools::convertPrice($reduction_amount, $id_currency); $row['real_value'] =

  Product::$_taxCalculationMethod == PS_TAX_INC ? $reduction_amount : $reduction_amount / (1 + $taxRate / 100); } else {

  $row['real_value'] = $row['reduction'] * 100; }

  } $row['nextQuantity'] =

  (isset($specificPrices[$key + 1]) ? (int)($specificPrices[$key + 1]['from_quantity']) : -1);

  } return $specificPrices; }

  }

  Listing AuthController.php

  <?php /*

  • 2007-2011 PrestaShop
  • NOTICE OF LICENSE
  • This source file is subject to the Open Software License (OSL 3.0)
  • that is bundled with this package in the file LICENSE.txt.
  • It is also available through the world-wide-web at this URL:
  • http://opensource.org/licenses/osl-3.0.php
  • If you did not receive a copy of the license and are unable to
  • obtain it through the world-wide-web, please send an email
  • to license@prestashop.com so we can send you a copy immediately.

  • DISCLAIMER
  • Do not edit or add to this file if you wish to upgrade PrestaShop to newer
  • versions in the future. If you wish to customize PrestaShop for your
  • needs please refer to http://www.prestashop.com for more information.
  • @author PrestaShop SA <contact@prestashop.com>
  • @copyright 2007-2011 PrestaShop SA
  • @version Release: $Revision: 9643 $
  • @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  • International Registered Trademark & Property of PrestaShop SA
  • / class AuthControllerCore extends FrontController { public $ssl = true; public $php_self = 'authentication.php'; public function preProcess() { parent::preProcess(); if (self::$cookie->isLogged() AND

  !Tools::isSubmit('ajax')) Tools::redirect('my-account.php'); if (Tools::getValue('create_account'))

  { $create_account = 1; self::$smarty->assign('email_create', 1);

  } if (Tools::isSubmit('SubmitCreate')) { if (!Validate::isEmail($email =

  Tools::getValue('email_create')) OR empty($email)) $this->errors[] =

  Tools::displayError('Invalid e-mail address'); elseif (Customer::customerExists($email)) {

  $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.');

  $_POST['email'] = $_POST['email_create']; unset($_POST['email_create']);

  } else {

  $create_account = 1; self::$smarty->assign('email_create', Tools::safeOutput($email));

  $_POST['email'] = $email; }

  } if (Tools::isSubmit('submitAccount') OR Tools::isSubmit('submitGuestAccount'))

  { $create_account = 1; if (Tools::isSubmit('submitAccount')) self::$smarty->assign('email_create',

  1); /* New Guest customer */ if (!Tools::getValue('is_new_customer', 1)

  AND !Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) $this->errors[] =

  Tools::displayError('You cannot create a guest account.'); if (!Tools::getValue('is_new_customer',

  1)) $_POST['passwd'] = md5(time()._COOKIE_KEY_); if (isset($_POST['guest_email']) AND

  $_POST['guest_email']) $_POST['email'] =

  $_POST['guest_email'];

  /* Preparing customer */ $customer = new Customer(); $lastnameAddress = $_POST['lastname']; $firstnameAddress = $_POST['firstname']; $_POST['lastname'] =

  $_POST['customer_lastname']; $_POST['firstname'] =

  $_POST['customer_firstname']; if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile'))

  $this->errors[] = Tools::displayError('You must register at least one phone number'); if (!@checkdate(Tools::getValue('months'),

  Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))

  $this->errors[] = Tools::displayError('Invalid date of birth');

  $customer->birthday = (empty($_POST['years']) ? '' : (int)($_POST['years']).'- '.(int)($_POST['months']).'-'.(int)($_POST['days']));

  $this->errors = array_unique(array_merge($this->errors, $customer- >validateControler()));

  /* Preparing address */ $address = new Address(); $_POST['lastname'] = $lastnameAddress; $_POST['firstname'] = $firstnameAddress; $address->id_customer = 1; $this->errors = array_unique(array_merge($this->errors, $address-

  >validateControler())); /* US customer: normalize the address */ if ($address->id_country ==

  Country::getByIso('US')) { include_once(_PS_TAASC_PATH_.'AddressStandardization

  Solution.php'); $normalize = new

  AddressStandardizationSolution; $address->address1 = $normalize-

  >AddressLineStandardization($address->address1); $address->address2 = $normalize-

  >AddressLineStandardization($address->address2);

  } $zip_code_format =

  Country::getZipCodeFormat((int)(Tools::getValue('id_count ry'))); if

  (Country::getNeedZipCode((int)(Tools::getValue('id_countr y')))) { if (($postcode =

  Tools::getValue('postcode')) AND $zip_code_format) {

  $zip_regexp = '/^'.$zip_code_format.'$/ui';

  $zip_regexp = str_replace(' ', '( |)', $zip_regexp);

  $zip_regexp = str_replace('-', '(-|)', $zip_regexp);

  $zip_regexp = str_replace('N', '[0-9]', $zip_regexp);

  $zip_regexp = str_replace('L', '[a-zA-Z]', $zip_regexp);

  $zip_regexp = str_replace('C', Country::getIsoById((int)(Tools::getValue('id_country'))) , $zip_regexp); if (!preg_match($zip_regexp, $postcode))

  $this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.').'<br />'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', Country::getIsoById((int)(Tools::getValue('id_country'))) , str_replace('N', '0', str_replace('L', 'A', $zip_code_format)));

  } elseif ($zip_code_format) $this->errors[] =

  '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is required.'); elseif ($postcode AND

  !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode)) $this->errors[] =

  '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.'); } if

  (Country::isNeedDniByCountryId($address->id_country) AND (!Tools::getValue('dni') OR !Validate::isDniLite(Tools::getValue('dni'))))

  $this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.'); elseif

  (!Country::isNeedDniByCountryId($address->id_country)) $address->dni = NULL; if (!sizeof($this->errors))

  { if (Customer::customerExists(Tools::getValue('email')))

  $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.'); if (Tools::isSubmit('newsletter'))

  { $customer-

  >ip_registration_newsletter = pSQL(Tools::getRemoteAddr()); $customer->newsletter_date_add = pSQL(date('Y-m-d H:i:s'));

  } if (!sizeof($this->errors)) { if (!$country = new

  Country($address->id_country, Configuration::get('PS_LANG_DEFAULT')) OR !Validate::isLoadedObject($country)) die(Tools::displayError()); if ((int)($country-

  >contains_states) AND !(int)($address->id_state)) $this->errors[] =

  Tools::displayError('This country requires a state selection.'); else {

  $customer->active = 1; /* New Guest customer */ if

  (Tools::isSubmit('is_new_customer')) $customer->is_guest =

  !Tools::getValue('is_new_customer', 1); else $customer->is_guest =

  0; if (!$customer->add())

  $this->errors[] = Tools::displayError('An error occurred while creating your account.'); else {

  $address->id_customer = (int)($customer->id); if (!$address->add())

  $this->errors[] = Tools::displayError('An error occurred while creating your address.'); else { if (!$customer-

  >is_guest) { if

  (!Mail::Send((int)(self::$cookie->id_lang), 'account', Mail::l('Welcome!'), array('{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => Tools::getValue('passwd')), $customer->email, $customer- >firstname.' '.$customer->lastname))

  $this- >errors[] = Tools::displayError('Cannot send email');

  } self::$smarty- >assign('confirmation', 1); self::$cookie- >id_customer = (int)($customer->id); self::$cookie- >customer_lastname = $customer->lastname; self::$cookie- >customer_firstname = $customer->firstname; self::$cookie- >passwd = $customer->passwd; self::$cookie- >logged = 1; self::$cookie- >email = $customer->email; self::$cookie- >is_guest = !Tools::getValue('is_new_customer', 1);

  /* Update cart address */ self::$cart-

  >secure_key = $customer->secure_key; self::$cart- >id_address_delivery = Address::getFirstCustomerAddressId((int)($customer->id)); self::$cart- >id_address_invoice = Address::getFirstCustomerAddressId((int)($customer->id)); self::$cart- >update();

  Module::hookExec('createAccount', array( '_POST' =>

  $_POST, 'newCustomer' => $customer

  )); if (Tools::isSubmit('ajax'))

  { $return = array(

  'hasError' => !empty($this->errors), 'errors' => $this->errors, 'isSaved' => true, 'id_customer' => (int)self::$cookie->id_customer, 'id_address_delivery' => self::$cart-

  >id_address_delivery, 'id_address_invoice' => self::$cart-

  >id_address_invoice, 'token'

  => Tools::getToken(false) ); die(Tools::jsonEncode($return));

  } if ($back = Tools::getValue('back'))

  Tools::redirect($back); Tools::redirect('my-account.php');

  } }

  } }

  } if (sizeof($this->errors)) { if

  (!Tools::getValue('is_new_customer')) unset($_POST['passwd']); if (Tools::isSubmit('ajax')) {

  $return = array( 'hasError' => !empty($this-

  >errors), 'errors' => $this->errors, 'isSaved' => false, 'id_customer' => 0

  ); die(Tools::jsonEncode($return)); }

  } } if (Tools::isSubmit('SubmitLogin')) {

  Module::hookExec('beforeAuthentication'); $passwd = trim(Tools::getValue('passwd')); $email = trim(Tools::getValue('email')); if (empty($email))