PageRenderTime 56ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/classes/Manufacturer.php

https://github.com/vincent/theinvertebrates
PHP | 327 lines | 238 code | 41 blank | 48 comment | 24 complexity | 54ff3afd7e2e2de288452de40be24ffc MD5 | raw file
  1. <?php
  2. /**
  3. * Manufacturer class, Manufacturer.php
  4. * Manufacturers management
  5. * @category classes
  6. *
  7. * @author PrestaShop <support@prestashop.com>
  8. * @copyright PrestaShop
  9. * @license http://www.opensource.org/licenses/osl-3.0.php Open-source licence 3.0
  10. * @version 1.3
  11. *
  12. */
  13. class Manufacturer extends ObjectModel
  14. {
  15. public $id;
  16. /** @var integer manufacturer ID */
  17. public $id_manufacturer;
  18. /** @var string Name */
  19. public $name;
  20. /** @var string A description */
  21. public $description;
  22. /** @var string A short description */
  23. public $short_description;
  24. /** @var int Address */
  25. public $id_address;
  26. /** @var string Object creation date */
  27. public $date_add;
  28. /** @var string Object last modification date */
  29. public $date_upd;
  30. /** @var string Friendly URL */
  31. public $link_rewrite;
  32. /** @var string Meta title */
  33. public $meta_title;
  34. /** @var string Meta keywords */
  35. public $meta_keywords;
  36. /** @var string Meta description */
  37. public $meta_description;
  38. protected $fieldsRequired = array('name');
  39. protected $fieldsSize = array('name' => 64);
  40. protected $fieldsValidate = array('name' => 'isCatalogName');
  41. protected $fieldsSizeLang = array('short_description' => 100, 'meta_title' => 128, 'meta_description' => 255, 'meta_description' => 255);
  42. protected $fieldsValidateLang = array('description' => 'isString', 'short_description' => 'isString', 'meta_title' => 'isGenericName', 'meta_description' => 'isGenericName', 'meta_keywords' => 'isGenericName');
  43. protected $table = 'manufacturer';
  44. protected $identifier = 'id_manufacturer';
  45. public function __construct($id = NULL, $id_lang = NULL)
  46. {
  47. parent::__construct($id, $id_lang);
  48. /* Get the manufacturer's id_address */
  49. $this->id_address = $this->getManufacturerAddress();
  50. $this->link_rewrite = $this->getLink();
  51. }
  52. public function getFields()
  53. {
  54. parent::validateFields();
  55. if (isset($this->id))
  56. $fields['id_manufacturer'] = intval($this->id);
  57. $fields['name'] = pSQL($this->name);
  58. $fields['date_add'] = pSQL($this->date_add);
  59. $fields['date_upd'] = pSQL($this->date_upd);
  60. return $fields;
  61. }
  62. public function getTranslationsFieldsChild()
  63. {
  64. $fieldsArray = array('description', 'short_description', 'meta_title', 'meta_keywords', 'meta_description');
  65. $fields = array();
  66. $languages = Language::getLanguages();
  67. $defaultLanguage = Configuration::get('PS_LANG_DEFAULT');
  68. foreach ($languages as $language)
  69. {
  70. $fields[$language['id_lang']]['id_lang'] = $language['id_lang'];
  71. $fields[$language['id_lang']][$this->identifier] = intval($this->id);
  72. $fields[$language['id_lang']]['description'] = (isset($this->description[$language['id_lang']])) ? pSQL($this->description[$language['id_lang']], true) : '';
  73. $fields[$language['id_lang']]['short_description'] = (isset($this->short_description[$language['id_lang']])) ? pSQL($this->short_description[$language['id_lang']], true) : '';
  74. foreach ($fieldsArray as $field)
  75. {
  76. if (!Validate::isTableOrIdentifier($field))
  77. die(Tools::displayError());
  78. /* Check fields validity */
  79. if (isset($this->{$field}[$language['id_lang']]) AND !empty($this->{$field}[$language['id_lang']]))
  80. $fields[$language['id_lang']][$field] = pSQL($this->{$field}[$language['id_lang']], true);
  81. elseif (in_array($field, $this->fieldsRequiredLang))
  82. $fields[$language['id_lang']][$field] = pSQL($this->{$field}[$defaultLanguage]);
  83. else
  84. $fields[$language['id_lang']][$field] = '';
  85. }
  86. }
  87. return $fields;
  88. }
  89. public function delete()
  90. {
  91. $address = new Address($this->id_address);
  92. if (!$address->delete())
  93. return false;
  94. return parent::delete();
  95. }
  96. /**
  97. * Delete several objects from database
  98. *
  99. * return boolean Deletion result
  100. */
  101. public function deleteSelection($selection)
  102. {
  103. if (!is_array($selection) OR !Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table))
  104. die(Tools::displayError());
  105. $result = true;
  106. foreach ($selection AS $id)
  107. {
  108. $this->id = intval($id);
  109. $this->id_address = self::getManufacturerAddress();
  110. $result = $result AND $this->delete();
  111. }
  112. return $result;
  113. }
  114. protected function getManufacturerAddress()
  115. {
  116. if (!intval($this->id))
  117. return false;
  118. $result = Db::GetInstance()->getRow('SELECT `id_address` FROM '._DB_PREFIX_.'address WHERE `id_manufacturer` = '.intval($this->id));
  119. if (!$result)
  120. return false;
  121. return $result['id_address'];
  122. }
  123. /**
  124. * Return manufacturers
  125. *
  126. * @param boolean $getNbProducts [optional] return products numbers for each
  127. * @return array Manufacturers
  128. */
  129. static public function getManufacturers($getNbProducts = false, $id_lang = 0, $active = false, $p = false, $n = false)
  130. {
  131. global $cookie;
  132. if (!$id_lang)
  133. $id_lang = Configuration::get('PS_LANG_DEFAULT');
  134. $sql = 'SELECT m.*, ml.`description`';
  135. $sql.= ' FROM `'._DB_PREFIX_.'manufacturer` as m
  136. LEFT JOIN `'._DB_PREFIX_.'manufacturer_lang` ml ON (m.`id_manufacturer` = ml.`id_manufacturer` AND ml.`id_lang` = '.intval($id_lang).')';
  137. $sql.= ' ORDER BY m.`name` ASC'.($p ? ' LIMIT '.((intval($p) - 1) * intval($n)).','.intval($n) : '');
  138. $manufacturers = Db::getInstance()->ExecuteS($sql);
  139. if ($manufacturers === false)
  140. return false;
  141. if ($getNbProducts)
  142. foreach ($manufacturers as $key => $manufacturer)
  143. {
  144. $sql = '
  145. SELECT p.`id_product`
  146. FROM `'._DB_PREFIX_.'product` p
  147. LEFT JOIN `'._DB_PREFIX_.'manufacturer` as m ON (m.`id_manufacturer`= p.`id_manufacturer`)
  148. WHERE m.`id_manufacturer` = '.intval($manufacturer['id_manufacturer']).'
  149. AND p.`id_product` IN (
  150. SELECT cp.`id_product`
  151. FROM `'._DB_PREFIX_.'category_group` cg
  152. LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
  153. WHERE cg.`id_group` '.(!$cookie->id_customer ? '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
  154. )';
  155. $result = Db::getInstance()->ExecuteS($sql);
  156. $manufacturers[$key]['nb_products'] = sizeof($result);
  157. }
  158. for ($i = 0; $i < sizeof($manufacturers); $i++)
  159. if (intval(Configuration::get('PS_REWRITING_SETTINGS')))
  160. $manufacturers[$i]['link_rewrite'] = Tools::link_rewrite($manufacturers[$i]['name'], false);
  161. else
  162. $manufacturers[$i]['link_rewrite'] = 0;
  163. return $manufacturers;
  164. }
  165. static public function getManufacturersWithoutAddress()
  166. {
  167. $sql = 'SELECT m.* FROM `'._DB_PREFIX_.'manufacturer` m
  168. LEFT JOIN `'._DB_PREFIX_.'address` a ON (a.`id_manufacturer` = m.`id_manufacturer` AND a.`deleted` = 0)
  169. WHERE a.`id_manufacturer` IS NULL';
  170. return Db::getInstance()->ExecuteS($sql);
  171. }
  172. /**
  173. * Return name from id
  174. *
  175. * @param integer $id_manufacturer Manufacturer ID
  176. * @return string name
  177. */
  178. static public function getNameById($id_manufacturer)
  179. {
  180. $result = Db::getInstance()->getRow('
  181. SELECT `name`
  182. FROM `'._DB_PREFIX_.'manufacturer`
  183. WHERE `id_manufacturer` = '.intval($id_manufacturer));
  184. if (isset($result['name']))
  185. return $result['name'];
  186. return false;
  187. }
  188. static public function getIdByName($name)
  189. {
  190. $result = Db::getInstance()->getRow('
  191. SELECT `id_manufacturer`
  192. FROM `'._DB_PREFIX_.'manufacturer`
  193. WHERE `name` = \''.pSQL($name).'\'');
  194. if (isset($result['id_manufacturer']))
  195. return intval($result['id_manufacturer']);
  196. return false;
  197. }
  198. public function getLink()
  199. {
  200. return Tools::link_rewrite($this->name, false);
  201. }
  202. static public function getProducts($id_manufacturer, $id_lang, $p, $n, $orderBy = NULL, $orderWay = NULL, $getTotal = false, $active = true)
  203. {
  204. global $cookie;
  205. if ($p < 1) $p = 1;
  206. if (empty($orderBy) ||$orderBy == 'position') $orderBy = 'name';
  207. if (empty($orderWay)) $orderWay = 'ASC';
  208. if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
  209. die (Tools::displayError());
  210. /* Return only the number of products */
  211. if ($getTotal)
  212. {
  213. $sql = '
  214. SELECT p.`id_product`
  215. FROM `'._DB_PREFIX_.'product` p
  216. WHERE p.id_manufacturer = '.intval($id_manufacturer)
  217. .($active ? ' AND p.`active` = 1' : '').'
  218. AND p.`id_product` IN (
  219. SELECT cp.`id_product`
  220. FROM `'._DB_PREFIX_.'category_group` cg
  221. LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
  222. WHERE cg.`id_group` '.(!$cookie->id_customer ? '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
  223. )';
  224. $result = Db::getInstance()->ExecuteS($sql);
  225. return intval(sizeof($result));
  226. }
  227. $sql = '
  228. SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new,
  229. (p.`price` * ((100 + (t.`rate`))/100) - IF((DATEDIFF(`reduction_from`, CURDATE()) <= 0 AND DATEDIFF(`reduction_to`, CURDATE()) >=0) OR `reduction_from` = `reduction_to`, IF(`reduction_price` > 0, `reduction_price`, (p.`price` * ((100 + (t.`rate`))/100) * `reduction_percent` / 100)),0)) AS orderprice
  230. FROM `'._DB_PREFIX_.'product` p
  231. LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($id_lang).')
  232. LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
  233. LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.intval($id_lang).')
  234. LEFT JOIN `'._DB_PREFIX_.'tax` t ON t.`id_tax` = p.`id_tax`
  235. LEFT JOIN `'._DB_PREFIX_.'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = '.intval($id_lang).')
  236. LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`
  237. WHERE p.`id_manufacturer` = '.intval($id_manufacturer).($active ? ' AND p.`active` = 1' : '').'
  238. AND p.`id_product` IN (
  239. SELECT cp.`id_product`
  240. FROM `'._DB_PREFIX_.'category_group` cg
  241. LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
  242. WHERE cg.`id_group` '.(!$cookie->id_customer ? '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
  243. )
  244. ORDER BY '.(($orderBy == 'id_product') ? 'p.' : '').'`'.pSQL($orderBy).'` '.pSQL($orderWay).'
  245. LIMIT '.((intval($p) - 1) * intval($n)).','.intval($n);
  246. $result = Db::getInstance()->ExecuteS($sql);
  247. if (!$result)
  248. return false;
  249. if ($orderBy == 'price')
  250. Tools::orderbyPrice($result, $orderWay);
  251. return Product::getProductsProperties($id_lang, $result);
  252. }
  253. public function getProductsLite($id_lang)
  254. {
  255. return Db::getInstance()->ExecuteS('
  256. SELECT p.`id_product`, pl.`name`
  257. FROM `'._DB_PREFIX_.'product` p
  258. LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($id_lang).')
  259. WHERE p.`id_manufacturer` = '.intval($this->id));
  260. }
  261. /*
  262. * Specify if a manufacturer already in base
  263. *
  264. * @param $id_manufacturer Manufacturer id
  265. * @return boolean
  266. */
  267. static public function manufacturerExists($id_manufacturer)
  268. {
  269. $row = Db::getInstance()->getRow('
  270. SELECT `id_manufacturer`
  271. FROM '._DB_PREFIX_.'manufacturer m
  272. WHERE m.`id_manufacturer` = '.intval($id_manufacturer));
  273. return isset($row['id_manufacturer']);
  274. }
  275. public function getAddresses($id_lang)
  276. {
  277. return Db::getInstance()->ExecuteS('
  278. SELECT a.*, cl.name AS `country`, s.name AS `state`
  279. FROM `'._DB_PREFIX_.'address` AS a
  280. LEFT JOIN `'._DB_PREFIX_.'country_lang` AS cl ON (cl.`id_country` = a.`id_country` AND cl.`id_lang` = '.intval($id_lang).')
  281. LEFT JOIN `'._DB_PREFIX_.'state` AS s ON (s.`id_state` = a.`id_state`)
  282. WHERE `id_manufacturer` = '.intval($this->id).'
  283. AND a.`deleted` = 0');
  284. }
  285. }
  286. ?>