name = 'lgcomments'; $this->tab = 'advertising_marketing'; $this->version = '1.6.0'; $this->author = 'Línea Gráfica'; $this->need_instance = 0; $this->ps_versions_compliancy = array('min' => '1.7'); $this->module_key = '7a311a563a0daa4a8636f6a5ec27c0e6'; $this->bootstrap = true; $this->is_configurable = true; $this->initContext(); parent::__construct(); $this->displayName = $this->l('Store Reviews, Product Reviews and Google Rich Snippets'); $this->description = $this->l('Get your own system of reviews about your store and products.'); $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); $this->id_lang = (int)Context::getContext()->language->id; $this->id_lang = (int)Context::getContext()->language->id; $this->iso_lang = pSQL(Language::getIsoById($this->id_lang)); $this->stars = LGUtils::getStarsConfig($this); $this->store_widget = LGUtils::getStoreWidgetConfig($this); if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { $this->context->smarty->assign(array( 'content_dir' => _MODULE_DIR_ . $this->name, )); } } /* Retrocompatibility 1.4/1.5 */ private function initContext() { $this->context = Context::getContext(); } public function install() { include(dirname(__FILE__) . '/sql/install.php'); if (substr_count(_PS_VERSION_, '1.6') > 0) { $tab_type = 1; } else { $tab_type = 2; } // Default value $default_values = array( 'tab_type' => $tab_type, 'extraright_css_config' => LGUtils::getExtraRightCSSConfig('vertical'), 'subject_cron' => $this->l('The opinion requests have been sent correctly'), 'subject_newreviews' => $this->l('You have received new reviews'), ); if (!parent::install() || !$this->registerHook('header') || !$this->registerHook('backOfficeHeader') || !$this->registerHook('footer') || !$this->registerHook('productTab') || !$this->registerHook('productTabContent') || !$this->registerHook('displayFooterProduct') || !$this->registerHook('extraRight') || !$this->registerHook('displayProductListReviews') || !$this->registerHook('displayHome') || !$this->registerHook('displayCustomerAccount') || !$this->registerHook('displayLgStoreCommentSlider') || !$this->installModuleTab('AdminLGCommentsStore', $this->l('Store reviews')) || !$this->installModuleTab('AdminLGCommentsProducts', $this->l('Products reviews')) || !LGUtils::createDefaultConfig($default_values) || !LGUtils::createDefaultData() || !LGUtils::createDefaultMetas() ) { return false; } if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { if (!$this->registerHook('actionFrontControllerSetMedia')) { return false; } } return true; } public function hookCustomerAccount() { if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { return $this->display(__FILE__, 'views/templates/front/account_button_17.tpl'); } else { return $this->display(__FILE__, 'views/templates/front/account_button.tpl'); } } public function uninstall() { include(dirname(__FILE__) . '/sql/uninstall.php'); $sql = 'SELECT `id_tab` FROM `' . _DB_PREFIX_ . 'tab` WHERE `module` = "' . pSQL($this->name) . '"'; $result = Db::getInstance()->ExecuteS($sql); if ($result && count($result)) { foreach ($result as $tabData) { $tab = new Tab($tabData['id_tab']); if (Validate::isLoadedObject($tab)) { $tab->delete(); } } } if (substr_count(_PS_VERSION_, '1.6') > 0) { $id_meta = Db::getInstance()->getValue( 'SELECT id_meta ' . 'FROM ' . _DB_PREFIX_ . 'meta ' . 'WHERE page = "module-lgcomments-reviews"' ); Db::getInstance()->Execute( 'DELETE FROM ' . _DB_PREFIX_ . 'meta WHERE id_meta = ' . (int)$id_meta ); Db::getInstance()->Execute( 'DELETE FROM ' . _DB_PREFIX_ . 'meta_lang WHERE id_meta = ' . (int)$id_meta ); Db::getInstance()->Execute( 'DELETE FROM ' . _DB_PREFIX_ . 'theme_meta WHERE id_meta = ' . (int)$id_meta ); } return parent::uninstall(); } private function installModuleTab($class, $name) { $sql = 'SELECT `id_tab` FROM `' . _DB_PREFIX_ . 'tab` WHERE `class_name` = "AdminCatalog"'; $tabParent = (int)(Db::getInstance()->getValue($sql)); if (!is_array($name)) { $name = self::getMultilangField($name); } $tab = new Tab(); $tab->name = $name; $tab->class_name = $class; $tab->module = $this->name; $tab->id_parent = $tabParent; return $tab->save(); } private static function getMultilangField($field) { $languages = Language::getLanguages(); $res = array(); foreach ($languages as $lang) { $res[$lang['id_lang']] = $field; } return $res; } private function formatBootstrap($text) { $text = str_replace('
', '
', $text); $text = str_replace( '
', '
', $text ); $text = str_replace('
', '
', $text); $text = str_replace('', '

', $text); $text = str_replace('', '

', $text); return $text; } /* CONFIGURATION MODULE */ private function getLGCommentsOrderStatus($id_state) { $estado = Db::getInstance()->ExecuteS( 'SELECT * ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_status ' . 'WHERE id_order_status = ' . (int)$id_state ); return $estado; } private function checkIfEmptyStore() { $checkS = Db::getInstance()->getValue( 'SELECT COUNT(*) ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_storecomments' ); return $checkS; } private function checkIfEmptyProduct() { $checkP = Db::getInstance()->getValue( 'SELECT COUNT(*) ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_productcomments' ); return $checkP; } private function checkIfEmptyStatus() { $checkE = Db::getInstance()->getValue( 'SELECT COUNT(*) ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_status' ); return $checkE; } private function checkIfEmptyGroup() { $checkG = Db::getInstance()->getValue( 'SELECT COUNT(*) ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_customergroups' ); return $checkG; } private function checkIfEmptyMultistore() { $checkM = Db::getInstance()->getValue( 'SELECT COUNT(*) ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_multistore' ); return $checkM; } private function getHookList() { $hookList = Db::getInstance()->ExecuteS( 'SELECT h.name ' . 'FROM ' . _DB_PREFIX_ . 'hook h ' . 'INNER JOIN ' . _DB_PREFIX_ . 'hook_module hm ' . 'ON h.id_hook = hm.id_hook ' . 'INNER JOIN ' . _DB_PREFIX_ . 'module m ' . 'ON hm.id_module = m.id_module ' . 'WHERE m.name = "lgcomments" ' . 'AND hm.id_shop = ' . (int)$this->context->shop->id ); return $hookList; } private function getCustomerGroupsByGroup($id_group) { $grupog = Db::getInstance()->ExecuteS( 'SELECT * ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_customergroups ' . 'WHERE id_customer_group = ' . (int)$id_group ); return $grupog; } private function getCustomerGroupsByCustomer($customer_id) { $groups = Db::getInstance()->ExecuteS( 'SELECT DISTINCT lcg.*, gl.name ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_customergroups lcg ' . 'INNER JOIN ' . _DB_PREFIX_ . 'group_lang gl ON lcg.id_customer_group = gl.id_group ' . 'RIGHT JOIN ' . _DB_PREFIX_ . 'customer_group cg ON gl.id_group = cg.id_group ' . 'WHERE gl.id_lang = ' . (int)$this->context->language->id . ' ' . 'AND cg.id_customer = ' . (int)$customer_id ); return $groups; } private function getSelectedShops($id_shop) { $shop = Db::getInstance()->ExecuteS( 'SELECT * ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_multistore ' . 'WHERE id_shop = ' . (int)$id_shop ); return $shop; } private function getShopsByCustomer($id_customer) { $cshop = Db::getInstance()->ExecuteS( 'SELECT DISTINCT lm.*, s.name ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_multistore lm ' . 'LEFT JOIN ' . _DB_PREFIX_ . 'customer c ON lm.id_shop = c.id_shop ' . 'LEFT JOIN ' . _DB_PREFIX_ . 'shop s ON lm.id_shop = s.id_shop ' . 'WHERE c.id_customer = ' . (int)$id_customer ); return $cshop; } public function getCorrespondingOrders($date1, $date2) { if (Configuration::get('PS_LGCOMMENTS_BOXES') == 2) { $boxes_checked = 'AND c.newsletter = 1 '; } elseif (Configuration::get('PS_LGCOMMENTS_BOXES') == 3) { $boxes_checked = 'AND c.optin = 1 '; } elseif (Configuration::get('PS_LGCOMMENTS_BOXES') == 4) { $boxes_checked = 'AND c.newsletter = 1 AND c.optin = 1 '; } else { $boxes_checked = ''; } $orderList = Db::getInstance()->ExecuteS( 'SELECT DISTINCT o.id_order, o.id_customer, o.reference, o.date_add, osl.name as statusname, ' . 'lo.date_email, lo.voted, lo.sent, lo.date_email2, os.color, c.newsletter, c.optin, ' . 'CONCAT(c.firstname, " ", (SUBSTRING(c.lastname,1,1)), ".") as customer ' . 'FROM ' . _DB_PREFIX_ . 'orders o ' . 'INNER JOIN ' . _DB_PREFIX_ . 'lgcomments_status ek ON o.current_state = ek.id_order_status ' . 'INNER JOIN ' . _DB_PREFIX_ . 'order_state_lang osl ON o.current_state = osl.id_order_state ' . 'INNER JOIN ' . _DB_PREFIX_ . 'order_state os ON osl.id_order_state = os.id_order_state ' . 'LEFT JOIN ' . _DB_PREFIX_ . 'lgcomments_orders lo ON o.id_order = lo.id_order ' . 'RIGHT JOIN ' . _DB_PREFIX_ . 'customer_group cg ON o.id_customer = cg.id_customer ' . 'RIGHT JOIN ' . _DB_PREFIX_ . 'customer c ON o.id_customer = c.id_customer ' . 'INNER JOIN ' . _DB_PREFIX_ . 'lgcomments_customergroups lcg ON cg.id_group = lcg.id_customer_group ' . 'INNER JOIN ' . _DB_PREFIX_ . 'group_lang gl ON cg.id_group = gl.id_group ' . 'RIGHT JOIN ' . _DB_PREFIX_ . 'lgcomments_multistore lm ON o.id_shop = lm.id_shop ' . 'WHERE o.date_add >= DATE_SUB(NOW(),INTERVAL ' . (int)$date1 . ' DAY) ' . 'AND o.date_add <= DATE_SUB(NOW(),INTERVAL ' . (int)$date2 . ' DAY) ' . 'AND osl.id_lang = ' . (int)$this->context->language->id . ' ' . 'AND gl.id_lang = ' . (int)$this->context->language->id . ' ' . $boxes_checked . 'ORDER BY o.id_order DESC' ); return $orderList; } public function getCorrespondingStatus() { $statusList = Db::getInstance()->ExecuteS( 'SELECT osl.name, os.color ' . 'FROM ' . _DB_PREFIX_ . 'order_state_lang osl ' . 'INNER JOIN ' . _DB_PREFIX_ . 'lgcomments_status lgs ON osl.id_order_state = lgs.id_order_status ' . 'INNER JOIN ' . _DB_PREFIX_ . 'order_state os ON osl.id_order_state = os.id_order_state ' . 'WHERE osl.id_lang = ' . (int)$this->context->language->id . '' ); return $statusList; } public function getCorrespondingGroups() { $groupList = Db::getInstance()->ExecuteS( 'SELECT DISTINCT lcg.*, gl.name ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_customergroups lcg ' . 'INNER JOIN ' . _DB_PREFIX_ . 'group_lang gl ON lcg.id_customer_group = gl.id_group ' . 'WHERE gl.id_lang = ' . (int)$this->context->language->id . '' ); return $groupList; } public function getCorrespondingShops() { $shopList = Db::getInstance()->ExecuteS( 'SELECT DISTINCT lm.*, s.name ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_multistore lm ' . 'INNER JOIN ' . _DB_PREFIX_ . 'shop s ON lm.id_shop = s.id_shop ' ); return $shopList; } private function getCronUrl($secure_key) { $link = new Link(); $ssl = Configuration::get('PS_SSL_ENABLED_EVERYWHERE') && Configuration::get('PS_SSL_ENABLED'); return $link->getModuleLink( $this->name, 'cron', array( 'secureKey' => $secure_key ), $ssl ); } /* PRODUCT COMMENTS */ public function getProdComments($id_product, $order) { $comments = Db::getInstance()->executeS( 'SELECT pc.*, CONCAT(c.firstname, " ", (SUBSTRING(c.lastname,1,1)), ".") as customer ' . 'FROM ' . _DB_PREFIX_ . 'lgcomments_productcomments pc ' . 'LEFT JOIN ' . _DB_PREFIX_ . 'customer as c ON pc.id_customer = c.id_customer ' . 'WHERE pc.id_product = ' . (int)$id_product . ' ' . 'AND pc.active = 1 ' . 'ORDER BY pc.position ' . pSQL($order) ); return $comments; } private function getProductRewrite($id_product) { $rewrite = Db::getInstance()->getValue( 'SELECT link_rewrite ' . 'FROM ' . _DB_PREFIX_ . 'product_lang ' . 'WHERE id_product = ' . (int)$id_product . ' AND id_lang = ' . (int)$this->context->language->id ); return $rewrite; } /* SHOP COMMENTS */ public function getSliderShopComments($number) { $slider = Db::getInstance()->executeS( 'SELECT st.*, CONCAT(c.firstname, " ", (SUBSTRING(c.lastname,1,1)), ".") as customer ' . 'FROM `' . _DB_PREFIX_ . 'lgcomments_storecomments` st ' . 'LEFT JOIN `' . _DB_PREFIX_ . 'customer` c ON st.`id_customer` = c.`id_customer` ' . 'WHERE st.active = 1 ' . 'ORDER BY st.date DESC ' . 'LIMIT ' . (int)$number ); return $slider; } public function getSliderShopCommentsByLang($number) { $sliderL = Db::getInstance()->executeS( 'SELECT st.*, CONCAT(c.firstname, " ", (SUBSTRING(c.lastname,1,1)), ".") as customer ' . 'FROM `' . _DB_PREFIX_ . 'lgcomments_storecomments` st ' . 'LEFT JOIN `' . _DB_PREFIX_ . 'customer` c ON st.`id_customer` = c.`id_customer` ' . 'WHERE st.active = 1 ' . 'AND st.id_lang = ' . (int)$this->context->language->id . ' ' . 'ORDER BY st.date DESC ' . 'LIMIT ' . (int)$number ); return $sliderL; } public function getDateFormatFull() { $format = Db::getInstance()->getValue( 'SELECT date_format_full ' . 'FROM ' . _DB_PREFIX_ . 'lang ' . 'WHERE id_lang = ' . (int)$this->context->language->id ); return $format; } /* BANNER */ private function getP() { $default_lang = $this->context->language->id; $lang = Language::getIsoById($default_lang); $pl = array('es', 'fr'); if (!in_array($lang, $pl)) { $lang = 'en'; } $this->context->controller->addCSS(_MODULE_DIR_ . $this->name . '/views/css/publi/style.css'); $base = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 'https://' . $this->context->shop->domain_ssl : 'http://' . $this->context->shop->domain); if (version_compare(_PS_VERSION_, '1.5.0', '>')) { $uri = $base . $this->context->shop->getBaseURI(); } else { $uri = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 'https://' . _PS_SHOP_DOMAIN_SSL_DOMAIN_ : 'http://' . _PS_SHOP_DOMAIN_) . __PS_BASE_URI__; } $path = _PS_MODULE_DIR_ . $this->name . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'publi' . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR . 'index.php'; $object = Tools::file_get_contents($path); $object = str_replace('src="/modules/', 'src="' . $uri . 'modules/', $object); return $object; } public function getContent() { $tokenC = Tools::getAdminTokenLite('AdminCustomers'); $tokenO = Tools::getAdminTokenLite('AdminOrders'); $tokenL = Tools::getAdminTokenLite('AdminLanguages'); $tokenPC = Tools::getAdminTokenLite('AdminLGCommentsProducts'); $tokenSC = Tools::getAdminTokenLite('AdminLGCommentsStore'); $tokenPe = Tools::getAdminTokenLite('AdminPerformance'); $tokenPr = Tools::getAdminTokenLite('AdminProducts'); $tokenM = Tools::getAdminTokenLite('AdminModulesPositions'); $tokenE = Tools::getAdminTokenLite('AdminEmails'); $secureKey = md5(_COOKIE_KEY_ . Configuration::get('PS_SHOP_NAME')); $this->html = $this->getP(); // Saving rating config if (Tools::isSubmit('submitLGCommentsGeneral')) { if (LGUtils::saveRatingsConfig()) { $this->html .= $this->displayConfirmation($this->l('Rating configuration updated')); } else { $this->html .= $this->displayError($this->l('Rating configuration cannot be updated')); } } // Saving widget config if (Tools::isSubmit('submitLGCommentsWidget')) { if (LGUtils::saveStoreWidgetConfig()) { $this->html .= $this->displayConfirmation($this->l('Widget configuration updated')); } else { $this->html .= $this->displayError($this->l('Widget configuration cannot be updated')); } } // Saving home page slider config if (Tools::isSubmit('submitLGCommentsHomepage')) { if (LGUtils::saveHomeSliderConfig()) { $this->html .= $this->displayConfirmation($this->l('Homepage configuration updated')); } else { $this->html .= $this->displayError($this->l('Homepage configuration cannot be updated')); } } // Saving store page review config if (Tools::isSubmit('submitLGCommentsStore')) { if (LGUtils::saveStorePageReviewConfig()) { $this->html .= $this->displayConfirmation($this->l('Store review configuration updated')); } else { $this->html .= $this->displayError($this->l('Store review configuration cannot be updated')); } } if (Tools::isSubmit('submitLGCommentsProducts')) { if (LGUtils::saveProductReviewConfig()) { $this->html .= $this->displayConfirmation($this->l('Product review configuration updated')); } else { $this->html .= $this->displayError($this->l('Product review configuration cannot be updated')); } } if (Tools::isSubmit('submitLGCommentsSnippets')) { if (LGUtils::saveRichSnippetsConfig()) { $this->html .= $this->displayConfirmation($this->l('Rich Snippets configuration updated')); } else { $this->html .= $this->displayError($this->l('Rich Snippets configuration cannot be updated')); } } if (Tools::isSubmit('submitLGCommentsSend')) { if (LGUtils::saveSendEmails()) { $this->html .= $this->displayConfirmation($this->l('Send emails configuration updated')); } else { $this->html .= $this->displayError($this->l('Send emails configuration cannot be updated')); } } if (Tools::isSubmit('submitLGCommentsConfigure')) { if (LGUtils::saveConfigureEmails()) { $this->html .= $this->displayConfirmation($this->l('Emails configuration updated')); } else { $this->html .= $this->displayError($this->l('Emails configuration cannot be updated')); } } if (Tools::isSubmit('submitLGCommentsManage')) { // Opinion form Configuration::updateValue( 'PS_LGCOMMENTS_OPINION_FORM', (int)Tools::getValue('PS_LGCOMMENTS_OPINION_FORM', 1) ); // Validation Configuration::updateValue( 'PS_LGCOMMENTS_VALIDATION', (int)Tools::getValue('lgcomments_validation', 1) ); $this->html .= $this->displayConfirmation($this->l('General review configuration updated')); } // Import product comments if (Tools::isSubmit('productCSV')) { $this->html .= LGCSV::importProductComments($this); } // Import store comments if (Tools::isSubmit('storeCSV')) { $this->html .= LGCSV::importStorecomments($this); } // Export product comments if (Tools::isSubmit('exportProductCSV')) { $this->html .= LGCSV::exportProductComments($this); } // Export store comments if (Tools::isSubmit('exportStoreCSV')) { $this->html .= LGCSV::exportStoreComments($this); } // Display error messages if ((int)Configuration::get('PS_DISABLE_NON_NATIVE_MODULE') > 0) { $this->html .= $this->displayError( $this->l('Non PrestaShop modules are currently disabled on your store.') . ' ' . $this->l('Please change the configuration') . ' '. $this->getAnchor( array( 'lgcomments_warning_link_href' => 'index.php?tab=AdminPerformance&token='.$tokenPe, 'lgcomments_warning_link_target' => '_blank', 'lgcomments_warning_link_message' => $this->l('here'), ) ) ); } $checkIfEmpty = $this->checkIfEmptyStore(); if ($checkIfEmpty == false) { $this->html .= $this->displayError( $this->getAnchor( array( 'lgcomments_warning_link_href' => 'index.php?controller=AdminLGCommentsStore&token=' .$tokenSC, 'lgcomments_warning_link_target' => '_blank', 'lgcomments_warning_link_class' => 'redtext', 'lgcomments_warning_link_message' => $this->l( 'You haven\'t received any store reviews at the moment.' ) ) ) . ' ' . $this->l('Please take a look at our') . ' '. $this->getAnchor( array( 'lgcomments_warning_link_href' => '../modules/' .$this->name.'/readme/readme_'.$this->l('en').'.pdf#page=11', 'lgcomments_warning_link_target' => '_blank', 'lgcomments_warning_link_message' => $this->l('PDF documentation') ) ) . ' ' . $this->l('to see how to send opinion requests to your customers.') ); } $checkIfEmpty2 = $this->checkIfEmptyProduct(); if ($checkIfEmpty2 == false) { $this->html .= $this->displayError( $this->getAnchor( array( 'lgcomments_warning_link_href' => 'index.php?controller=AdminLGCommentsProducts&token=' .$tokenPC, 'lgcomments_warning_link_target' => '_blank', 'lgcomments_warning_link_message' => $this->l( 'You haven\'t received any product reviews at the moment.' ) ) ) . ' ' . $this->l('Please take a look at our') . ' '. $this->getAnchor( array( 'lgcomments_warning_link_href' => '../modules/' .$this->name.'/readme/readme_'.$this->l('en').'.pdf#page=11', 'lgcomments_warning_link_target' => '_blank', 'lgcomments_warning_link_message' => $this->l('PDF documentation') ) ) . ' ' . $this->l('to see how to send opinion requests to your customers.') ); } $checkIfEmpty3 = $this->checkIfEmptyStatus(); if ($checkIfEmpty3 == false) { $this->html .= $this->displayError( $this->l('You must select at least one order status') . ' ' . $this->l('to be able to send opinion requests to your customers.') ); } $checkIfEmpty4 = $this->checkIfEmptyGroup(); if ($checkIfEmpty4 == false) { $this->html .= $this->displayError( $this->l('You must select at least one group of customers') . ' ' . $this->l('to be able to send opinion requests to your customers.') ); } $checkIfEmpty5 = $this->checkIfEmptyMultistore(); if ($checkIfEmpty5 == false) { $this->html .= $this->displayError( $this->l('You must select at least one shop') . ' ' . $this->l('to be able to send opinion requests to your customers.') ); } // Check if the widget is inserted into several hooks at the time $moduleHook = $this->getHookList(); $hookFooter = 0; $hookLeft = 0; $hookRight = 0; foreach ($moduleHook as $mHook) { if (in_array('displayFooter', $mHook)) { $hookFooter++; } if (in_array('displayLeftColumn', $mHook)) { $hookLeft++; } if (in_array('displayRightColumn', $mHook)) { $hookRight++; } } $widgetHook = $hookFooter + $hookLeft + $hookRight; if ($hookFooter) { $hookFooterName = ' - displayFooter'; } else { $hookFooterName = ''; } if ($hookLeft) { $hookLeftName = ' - displayLeftColumn'; } else { $hookLeftName = ''; } if ($hookRight) { $hookRightName = ' - displayRightColumn'; } else { $hookRightName = ''; } if ($widgetHook > 1) { $this->html .= $this->displayError( $this->l('The store widget is called in several hooks at once') . ' (' . $hookFooterName . $hookLeftName . $hookRightName . '). ' . $this->l('Please remove it from the extra hooks') . $this->getAnchor( array( 'lgcomments_warning_link_href' => 'index.php?tab=AdminModulesPositions&token=' . $tokenM, 'lgcomments_warning_link_target' => '_blank', 'lgcomments_warning_link_message' => $this->l('here'), ) ). ' ' . $this->l('(the widget can only be called in one hook at once).') ); } /* common vars */ $this->context->smarty->assign( array( 'module_path' => $this->getPathUri(), 'iso_lang' => $this->iso_lang, 'tokenPC' => $tokenPC, ) ); /* menubar.tpl vars */ $this->context->smarty->assign( array( 'LGCOMMENTS_SELECTED_MENU' => pSQL( Tools::getValue( 'LGCOMMENTS_SELECTED_MENU', 'general-config' ) ), ) ); /* ratings.tpl vars */ $this->context->smarty->assign( array( 'stars' => $this->stars, 'selected_star_design' => Configuration::get('PS_LGCOMMENTS_STARDESIGN1'), 'selected_star_colour' => Configuration::get('PS_LGCOMMENTS_STARDESIGN2'), 'selected_star_size' => Configuration::get('PS_LGCOMMENTS_STARSIZE'), 'selected_star_scale' => Configuration::get('PS_LGCOMMENTS_SCALE'), 'zero_star' => Configuration::get('PS_LGCOMMENTS_DISPLAY_ZEROSTAR'), 'cat_top_margin' => Configuration::get('PS_LGCOMMENTS_CATTOPMARGIN'), 'cat_bottom_margin' => Configuration::get('PS_LGCOMMENTS_CATBOTMARGIN'), 'pro_top_margin' => Configuration::get('PS_LGCOMMENTS_PRODTOPMARGIN'), 'pro_bottom_margin' => Configuration::get('PS_LGCOMMENTS_PRODBOTMARGIN'), ) ); /* store_widget.tpl vars */ $this->context->smarty->assign( array( 'store_widget' => $this->store_widget, 'PS_LGCOMMENTS_DISPLAY' => Configuration::get('PS_LGCOMMENTS_DISPLAY'), 'display_type' => Configuration::get('PS_LGCOMMENTS_DISPLAY_TYPE'), 'display_side' => Configuration::get('PS_LGCOMMENTS_DISPLAY_SIDE'), 'moduleHook' => $this->getHookList(), 'bg_design' => Configuration::get('PS_LGCOMMENTS_BGDESIGN1'), 'bg_color' => Configuration::get('PS_LGCOMMENTS_BGDESIGN2'), 'display' => Configuration::get('PS_LGCOMMENTS_DISPLAYpSQL'), 'cross' => Configuration::get('PS_LGCOMMENTS_CROSS'), 'text_color' => Configuration::get('PS_LGCOMMENTS_TEXTCOLOR2'), // REFACTORIZAR: Poner esto como constante o algo 'tokenM' => $tokenM, ) ); /* homepage.tpl vars*/ $this->context->smarty->assign( array( 'display_slider' => Configuration::get('PS_LGCOMMENTS_DISPLAY_SLIDER'), 'slider_blocks' => Configuration::get('PS_LGCOMMENTS_SLIDER_BLOCKS'), 'slider_total' => Configuration::get('PS_LGCOMMENTS_SLIDER_TOTAL'), ) ); /* store_reviews.tpl vars*/ $this->context->smarty->assign( array( 'store_form' => Configuration::get('PS_LGCOMMENTS_STORE_FORM'), 'PS_LGCOMMENTS_STORE_FILTER' => Configuration::get('PS_LGCOMMENTS_STORE_FILTER'), 'PS_LGCOMMENTS_DISPLAY_LANGUAGE' => Configuration::get('PS_LGCOMMENTS_DISPLAY_LANGUAGE'), 'PS_LGCOMMENTS_TEXTCOLOR2' => Configuration::get('PS_LGCOMMENTS_TEXTCOLOR2'), 'PS_LGCOMMENTS_BACKCOLOR2' => Configuration::get('PS_LGCOMMENTS_BACKCOLOR2'), 'PS_LGCOMMENTS_PER_PAGE' => Configuration::get('PS_LGCOMMENTS_PER_PAGE'), 'PS_LGCOMMENTS_DISPLAY_ORDER' => Configuration::get('PS_LGCOMMENTS_DISPLAY_ORDER'), ) ); /* store_reviews.tpl vars */ $this->context->smarty->assign( array( 'PS_LGCOMMENTS_DISPLAY_COMMENTS' => Configuration::get('PS_LGCOMMENTS_DISPLAY_COMMENTS'), 'PS_LGCOMMENTS_TAB_CONTENT' => Configuration::get('PS_LGCOMMENTS_TAB_CONTENT'), 'PS_LGCOMMENTS_PRODUCT_FORM' => Configuration::get('PS_LGCOMMENTS_PRODUCT_FORM'), 'PS_LGCOMMENTS_PRODUCT_FILTER' => Configuration::get('PS_LGCOMMENTS_PRODUCT_FILTER'), 'PS_LGCOMMENTS_PRODUCT_FILTER_NB' => Configuration::get('PS_LGCOMMENTS_PRODUCT_FILTER_NB'), 'PS_LGCOMMENTS_DISPLAY_DEFAULT' => Configuration::get('PS_LGCOMMENTS_DISPLAY_DEFAULT'), 'PS_LGCOMMENTS_DISPLAY_MORE' => Configuration::get('PS_LGCOMMENTS_DISPLAY_MORE'), 'PS_LGCOMMENTS_DISPLAY_ORDER2' => Configuration::get('PS_LGCOMMENTS_DISPLAY_ORDER2'), 'PS_LGCOMMENTS_DISPLAY_LANGUAGE2' => Configuration::get('PS_LGCOMMENTS_DISPLAY_LANGUAGE2'), ) ); /* google_ritch_snippets.tpl vars */ $this->context->smarty->assign( array( 'PS_LGCOMMENTS_DISPLAY_SNIPPETS2' => Configuration::get('PS_LGCOMMENTS_DISPLAY_SNIPPETS2'), 'PS_LGCOMMENTS_DISPLAY_SNIPPETS' => Configuration::get('PS_LGCOMMENTS_DISPLAY_SNIPPETS'), 'PS_LGCOMMENTS_PRICE_RANGE' => Configuration::get('PS_LGCOMMENTS_PRICE_RANGE'), 'currency' => $this->context->currency->getSign(), ) ); /* send_emails.tpl vars */ $this->context->smarty->assign( array( 'tokenSC' => $tokenSC, 'tokenE' => $tokenE, 'cron_url' => $this->getCronUrl($secureKey), 'PS_LGCOMMENTS_SUBJECT_NEWREVIEWS' => Configuration::get('PS_LGCOMMENTS_SUBJECT_NEWREVIEWS'), 'PS_LGCOMMENTS_SUBJECT_CRON' => Configuration::get('PS_LGCOMMENTS_SUBJECT_CRON'), 'PS_LGCOMMENTS_EMAIL_ALERTS' => Configuration::get('PS_LGCOMMENTS_EMAIL_ALERTS'), 'PS_LGCOMMENTS_EMAIL_CRON' => Configuration::get('PS_LGCOMMENTS_EMAIL_CRON'), ) ); /* configure_emails.tpl vars */ $customerGroupsChecked = LGUtils::getCustomerGroups(); foreach ($customerGroupsChecked as $index => $cGroup) { $customerGroupsChecked[$index]['checked'] = (bool)$this->getCustomerGroupsByGroup($cGroup['id_group']); } $subjects = array(); $langs = LanguageCore::getLanguages(); foreach ($langs as $lang) { $subjects[$lang['iso_code']]['PS_LGCOMMENTS_SUBJECT'] = Configuration::get( 'PS_LGCOMMENTS_SUBJECT' . $lang['iso_code'] ); $subjects[$lang['iso_code']]['PS_LGCOMMENTS_SUBJECT2'] = Configuration::get( 'PS_LGCOMMENTS_SUBJECT2' . $lang['iso_code'] ); $subjects[$lang['iso_code']]['PS_LGCOMMENTS_SUBJECT3'] = Configuration::get( 'PS_LGCOMMENTS_SUBJECT3' . $lang['iso_code'] ); } $orderStatus = LGUtils::getOrdersStatus(); foreach ($orderStatus as $index => $estado) { $orderStatus[$index]['checked'] = (bool)$this->getLGCommentsOrderStatus($estado['id_order_state']); } $shopList = LGUtils::getShops(); foreach ($shopList as $index => $shop) { $shopList[$index]['checked'] = (bool)$this->getSelectedShops($shop['id_shop']); } $this->context->smarty->assign( array( 'langs' => $langs, 'customerGroups' => $customerGroupsChecked, 'subjects' => $subjects, 'orderStatus' => $orderStatus, 'shopList' => $shopList, ) ); /* corresponding_orders.tpl vars */ // Check orders $days1 = Configuration::get('PS_LGCOMMENTS_DIAS'); $days2 = Configuration::get('PS_LGCOMMENTS_DIAS2'); $days3 = Configuration::get('PS_LGCOMMENTS_DAYS_AFTER'); $orderList = $this->getCorrespondingOrders($days1, $days2); $days4 = $days2 + $days3; $date1 = new DateTime('now'); $date2 = new DateTime('now'); $date3 = new DateTime('now'); $date1->sub(new DateInterval('P' . $days1 . 'D')); $date2->sub(new DateInterval('P' . $days2 . 'D')); $date3->sub(new DateInterval('P' . $days4 . 'D')); foreach ($orderList as $io => $order) { $orderList[$io]['shops'] = $this->getShopsByCustomer($order['id_customer']); $orderList[$io]['groups'] = $this->getCustomerGroupsByCustomer($order['id_customer']); $orderList[$io]['date_email_formated'] = date("d/m/Y H:i", strtotime($order['date_email'])); $orderList[$io]['date_email2_formated'] = date("d/m/Y H:i", strtotime($order['date_email2'])); } $this->context->smarty->assign( array( 'allGroups' => $this->getCorrespondingGroups(), 'allShops' => $this->getCorrespondingShops(), 'allStatus' => $this->getCorrespondingStatus(), 'orderList' => $orderList, 'date1' => $date1->format($this->getDateFormatFull()), 'date2' => $date2->format($this->getDateFormatFull()), 'date3' => $date3->format($this->getDateFormatFull()), 'date_format_full' => $this->getDateFormatFull(), ) ); /* import_store_comments.tpl vars */ $this->context->smarty->assign( array( 'tokenC' => $tokenC, 'tokenO' => $tokenO, 'tokenL' => $tokenL, ) ); /* import_product_comments.tpl vars */ $this->context->smarty->assign( array( 'tokenC' => $tokenC, 'tokenPr' => $tokenPr, 'tokenL' => $tokenL, ) ); /* manage_reviews.tpl vars */ $this->context->smarty->assign( array( 'tokenSC' => $tokenSC, 'tokenPC' => $tokenPC, 'PS_LGCOMMENTS_VALIDATION' => Configuration::get('PS_LGCOMMENTS_VALIDATION'), 'PS_LGCOMMENTS_OPINION_FORM' => Configuration::get('PS_LGCOMMENTS_OPINION_FORM'), ) ); $this->html .= $this->context->smarty->fetch( _PS_MODULE_DIR_ . $this->name . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . 'admin' . DIRECTORY_SEPARATOR . 'configuration.tpl' ); if ($this->bootstrap == true) { $this->html = $this->formatBootstrap($this->html); } return $this->html; } public function getMedia() { $path = LGUtils::getMediaBasePath($this); LGUtils::addJS($path . 'views/js/store_widget.js', 'lgcomments_store_widget_js'); LGUtils::addCSS($path . 'views/css/store_widget.css', 'lgcomments_store_widget_Css', $this->context); if ($this->context->controller instanceof ProductController) { $this->context->controller->addJqueryPlugin('fancybox'); LGUtils::addJS($path . 'views/js/form_review.js', 'form_review'); LGUtils::addJS($path . 'views/js/product_reviews.js', 'product_reviews'); LGUtils::addCSS($path . 'views/css/form_review.css', 'form_review'); if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { LGUtils::addCSS($path . 'views/css/product_reviews_17.css', 'product_reviews_17'); } else { LGUtils::addCSS($path . 'views/css/product_reviews.css', 'product_reviews'); } } elseif ($this->context->controller instanceof LGCommentsReviewsModuleFrontController) { LGUtils::addCSS($path . 'views/css/form_review.css', 'form_review'); LGUtils::addJS($path . 'views/js/form_review.js', 'form_review'); LGUtils::addCSS($path . 'views/css/form_review.css', 'form_review'); LGUtils::addCSS($path . 'views/css/store_reviews.css', 'store_reviews'); if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { LGUtils::addJS($path . 'views/js/store_reviews.js', 'store_reviews_17'); LGUtils::addCSS($path . 'views/css/store_reviews_17.css', 'store_reviews_17'); } else { LGUtils::addJS($path . 'views/js/store_reviews.js', 'store_reviews'); LGUtils::addCSS($path . 'views/css/store_reviews.css', 'store_reviews'); } } elseif ($this->context->controller instanceof IndexController) { LGUtils::addCSS($path . 'views/css/jquery.lgslider.css', 'jquery.lgslider'); if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { LGUtils::addJS($path . 'views/js/jquery.lgslider17.js', 'jquery.lgslider'); } else { LGUtils::addJS($path . 'views/js/jquery.lgslider.js', 'jquery.lgslider'); } LGUtils::addJS($path . 'views/js/home_reviews.js', 'home_reviews'); } elseif ($this->context->controller instanceof LGCommentsAccountModuleFrontController) { LGUtils::addJS($path . 'views/js/account.js', 'account'); } if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { LGUtils::addCSS($path . 'views/css/product_list_17.css', 'product_list_17'); } else { LGUtils::addCSS($path . 'views/css/product_list.css', 'product_list'); } } public function hookActionFrontControllerSetMedia($params) { $this->getMedia(); } public function hookDisplayBackOfficeHeader() { if ($this->context->controller instanceof AdminModulesController && pSQL(Tools::getValue('configure')) == $this->name ) { $this->context->controller->addJquery(); $this->context->controller->addCSS($this->_path . 'views/css/lgcomments.css'); $this->context->controller->addJS($this->_path . 'views/js/jscolor.js'); $this->context->controller->addJS($this->_path . 'views/js/menu.js'); // Carlos Utrera: Agragamos validaciones por JQuery // Todo: Comprobar compatibilidad en 1.5 y 1.7 $this->context->controller->addjQueryPlugin('validate'); $this->context->controller->addJS( _PS_JS_DIR_.'jquery/plugins/validate/localization/messages_' .$this->context->language->iso_code.'.js' ); $this->context->controller->addJS($this->_path . 'views/js/jquery.validate-integer.js'); $this->context->controller->addJS($this->_path . 'views/js/jquery.validate-hexadecimal.js'); $this->context->controller->addJS($this->_path . 'views/js/jquery.validate-nonempty.js'); $this->context->controller->addCSS($this->_path . 'views/css/admin.css'); $this->context->controller->addJS($this->_path . 'views/js/admin.js'); if (version_compare(_PS_VERSION_, '1.6.0', '<')) { $this->context->controller->addJS(_MODULE_DIR_ . $this->name . 'views/js/bootstrap.js'); $this->context->controller->addJS(_MODULE_DIR_ . $this->name . 'views/js/admin15.js'); $this->context->controller->addCSS(_MODULE_DIR_ . $this->name . 'views/css/admin15.css'); } } } public function hookHeader() { if (version_compare(_PS_VERSION_, '1.7.0', '<')) { $this->context->controller->addJQuery(); } $ssl = Configuration::get('PS_SSL_ENABLED_EVERYWHERE') && Configuration::get('PS_SSL_ENABLED'); $link = Context::getContext()->link; $values = array( 'lgcomments_products_default_display' => Configuration::get('PS_LGCOMMENTS_DISPLAY_DEFAULT'), 'lgcomments_products_extra_display' => Configuration::get('PS_LGCOMMENTS_DISPLAY_MORE'), 'module_dir' => $this->_path, 'star_style' => Configuration::get('PS_LGCOMMENTS_STARDESIGN1'), 'star_color' => Configuration::get('PS_LGCOMMENTS_STARDESIGN2'), 'comment_tab' => Configuration::get('PS_LGCOMMENTS_TAB_CONTENT'), 'sliderblocks' => Configuration::get('PS_LGCOMMENTS_SLIDER_BLOCKS'), 'send_successfull_msg' => $this->l('The review has been correctly sent.'), 'review_controller_link' => $link->getModuleLink( 'lgcomments', 'reviews', array( 'action' => 'sendReview', 'ajax' => '1' ), $ssl ), ); $this->getMedia(); $this->context->smarty->assign($values); if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { Media::addJsDef($values); } else { return ($this->display(__FILE__, '/views/templates/front/header.tpl')); } } /** * display Rating on Product page right column * * @return mixed */ public function hookExtraRight() { if (Configuration::get('PS_LGCOMMENTS_DISPLAY_COMMENTS')) { return LGProductComment::render(LGProductComment::PRODUCT_EXTRA_RIGHT); } } public function hookProductTab() { if (Configuration::get('PS_LGCOMMENTS_DISPLAY_COMMENTS')) { if (Configuration::get('PS_LGCOMMENTS_TAB_CONTENT') == 2) { return LGProductComment::render(LGProductComment::PRODUCT_REVIEW_TAB); } } } public function hookProductTabContent() { if (Configuration::get('PS_LGCOMMENTS_DISPLAY_COMMENTS')) { return LGProductComment::render(LGProductComment::PRODUCT_REVIEW_CONTENT); } } public function hookDisplayFooterProduct() { if (version_compare(_PS_VERSION_, '1.7.0', '>=')) { return $this->hookProductTabContent(); } } public function hookDisplayLgStoreCommentSlider() { return $this->hookDisplayHome(); } /** * Display product rating on products lists * * @param $params * @return mixed */ public function hookDisplayProductListReviews($params) { if (Configuration::get('PS_LGCOMMENTS_DISPLAY_COMMENTS')) { $id_product = (int)$params['product']['id_product']; $number_of_reviews = LGProductComment::getNummberOfReviews($id_product); if ($number_of_reviews || (!$number_of_reviews && Configuration::get('PS_LGCOMMENTS_DISPLAY_ZEROSTAR')) ) { if (!$this->isCached('product_list.tpl', $this->getCacheId($id_product))) { $this->context->smarty->assign( array( 'path_lgcomments' => _MODULE_DIR_ . $this->name, 'number_of_reviews' => $number_of_reviews, 'starstyle' => Configuration::get('PS_LGCOMMENTS_STARDESIGN1'), 'starcolor' => Configuration::get('PS_LGCOMMENTS_STARDESIGN2'), 'starsize' => Configuration::get('PS_LGCOMMENTS_STARSIZE'), 'zerostar' => Configuration::get('PS_LGCOMMENTS_DISPLAY_ZEROSTAR'), 'cattopmargin' => Configuration::get('PS_LGCOMMENTS_CATTOPMARGIN'), 'catbotmargin' => Configuration::get('PS_LGCOMMENTS_CATBOTMARGIN'), 'productlink' => $this->context->link->getProductLink( $id_product, $this->getProductRewrite($id_product) ), ) ); if ($number_of_reviews > 0) { $sum_of_reviews = LGProductComment::getSumOfReviews($id_product); $averagecomments = @round($sum_of_reviews / $number_of_reviews); $this->context->smarty->assign(array( 'sumcomments' => $sum_of_reviews, 'averagecomments' => $averagecomments, )); } return $this->display(__FILE__, '/views/templates/front/product_list.tpl'); } } } } /** * displays Reviews Widget * * @return mixed */ public function hookFooter() { // Línea Gráfica - Carlos Utrera: // Extraemos la lógica de la carga del widget a una clase if (version_compare(_PS_VERSION_, '1.7.0', '<')) { $this->context->controller->addJQuery(); } if (Configuration::get('PS_LGCOMMENTS_DISPLAY') && LGCommentsWidget::isActive() ) { $this->context->smarty->assign(LGCommentsWidget::getTemplateVars($this)); return ($this->display(__FILE__, LGCommentsWidget::getTemplate())); } } public function hookLeftColumn($params) { return $this->hookFooter($params); } public function hookRightColumn($params) { return $this->hookFooter($params); } /** * displays reviews carusel on home page * * @return mixed */ public function hookDisplayHome() { $slidertotal = Configuration::get('PS_LGCOMMENTS_SLIDER_TOTAL'); if (version_compare(_PS_VERSION_, '1.6.0', '>')) { $ps16 = true; } else { $ps16 = false; } $base = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 'https://' . $this->context->shop->domain_ssl : 'http://' . $this->context->shop->domain); if (Configuration::get('PS_LGCOMMENTS_DISPLAY_LANGUAGE') == 1) { $totalcomentarios = LGStoreComment::getSumShopCommentsByLang(); $numerocomentarios = LGStoreComment::getCountShopCommentsByLang(); $mediacomentarios = @round($totalcomentarios / $numerocomentarios); $mediacomentarios2 = @round($totalcomentarios / $numerocomentarios, 1); $allreviews = $this->getSliderShopCommentsByLang($slidertotal); } else { $totalcomentarios = LGStoreComment::getSumShopComments(); $numerocomentarios = LGStoreComment::getCountShopComments(); $mediacomentarios = @round($totalcomentarios / $numerocomentarios); $mediacomentarios2 = @round($totalcomentarios / $numerocomentarios, 1); $allreviews = $this->getSliderShopComments($slidertotal); } $this->context->smarty->assign(array( 'numerocomentarios' => $numerocomentarios, 'mediacomentarios' => $mediacomentarios, 'mediacomentarios2' => $mediacomentarios2, 'allreviews' => $allreviews, 'ps16' => $ps16, 'displaysnippets' => Configuration::get('PS_LGCOMMENTS_DISPLAY_SNIPPETS'), 'storename' => Configuration::get('PS_SHOP_NAME'), 'address_street1' => Configuration::get('PS_SHOP_ADDR1'), 'address_street2' => Configuration::get('PS_SHOP_ADDR2'), 'address_zip' => Configuration::get('PS_SHOP_CODE'), 'address_city' => Configuration::get('PS_SHOP_CITY'), 'address_state' => Configuration::get('PS_SHOP_STATE'), 'address_country' => Configuration::get('PS_SHOP_COUNTRY'), 'address_phone' => Configuration::get('PS_SHOP_PHONE'), 'price_range' => Configuration::get('PS_LGCOMMENTS_PRICE_RANGE'), 'starstyle' => Configuration::get('PS_LGCOMMENTS_STARDESIGN1'), 'starcolor' => Configuration::get('PS_LGCOMMENTS_STARDESIGN2'), 'starsize' => Configuration::get('PS_LGCOMMENTS_STARSIZE'), 'ratingscale' => Configuration::get('PS_LGCOMMENTS_SCALE'), 'displayslider' => Configuration::get('PS_LGCOMMENTS_DISPLAY_SLIDER'), 'base_url' => $base, 'dateformat' => LGUtils::getDateFormat(), 'module_name' => $this->name )); return $this->display(__FILE__, '/views/templates/front/home_reviews.tpl'); } public function getAnchor($array) { $this->context->smarty->assign($array); return $this->context->smarty->fetch( _PS_MODULE_DIR_.$this->name .DIRECTORY_SEPARATOR.'views' .DIRECTORY_SEPARATOR.'templates' .DIRECTORY_SEPARATOR.'admin' .DIRECTORY_SEPARATOR.'_partials' .DIRECTORY_SEPARATOR.'warningLink.tpl' ); } }