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");
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))