* @copyright 2007-2015 Leotheme * @license http://leotheme.com - prestashop template provider */ if (!defined('_PS_VERSION_')) { # module validation exit; } class LeoWidgetLinks extends LeoWidgetBase { public $name = 'link'; public $for_module = 'all'; public function getWidgetInfo() { return array('label' => $this->l('Block Links'), 'explain' => $this->l('Create List Block Links')); } public function renderForm($args, $data) { # validate module $id_lang = Context::getContext()->language->id; unset($args); $helper = $this->getFormHelper(); $languages = Language::getLanguages(); $list_id_lang = array(); foreach ($languages as $languages_val) { array_push($list_id_lang, $languages_val['id_lang']); } $categories = LeoBtmegamenuHelper::getCategories(); $manufacturers = Manufacturer::getManufacturers(false, $id_lang, true); $suppliers = Supplier::getSuppliers(false, $id_lang, true); $cmss = CMS::listCms($id_lang, false, true); $page_controller = array(); foreach (Meta::getPages() as $page) { if (strpos($page, 'module') === false) { $array_tmp = array(); $array_tmp['link'] = $page; $array_tmp['name'] = $page; array_push($page_controller, $array_tmp); } } //get list link id if (isset($data['params']['list_id_link'])) { $list_id_link = array_filter(explode(',', $data['params']['list_id_link'])); } else { $list_id_link = array(); } $this->fields_form[1]['form'] = array( 'legend' => array( 'title' => $this->l('Widget Form.'), ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Text Link'), 'name' => 'text_link_0', 'default' => '', 'lang' => true, 'class' => 'tmp', 'required' => true, ), array( 'type' => 'select', 'label' => $this->l('Link Type'), 'name' => 'link_type_0', 'id' => 'link_type_0', 'desc' => $this->l('Select a link type and fill data for following input'), 'options' => array('query' => array( array('id' => 'url', 'name' => $this->l('Url')), array('id' => 'category', 'name' => $this->l('Category')), array('id' => 'product', 'name' => $this->l('Product')), array('id' => 'manufacture', 'name' => $this->l('Manufacture')), array('id' => 'supplier', 'name' => $this->l('Supplier')), array('id' => 'cms', 'name' => $this->l('Cms')), array('id' => 'controller', 'name' => $this->l('Page Controller')) ), 'id' => 'id', 'name' => 'name'), 'default' => 'url', 'class' => 'tmp', ), array( 'type' => 'text', 'label' => $this->l('Product ID'), 'name' => 'product_type_0', 'id' => 'product_type_0', 'class' => 'link_type_group tmp', 'default' => '', ), array( 'type' => 'select', 'label' => $this->l('CMS Type'), 'name' => 'cms_type_0', 'id' => 'cms_type_0', 'options' => array('query' => $cmss, 'id' => 'id_cms', 'name' => 'meta_title'), 'default' => '', 'class' => 'link_type_group tmp', ), array( 'type' => 'text', 'label' => $this->l('URL'), 'name' => 'url_type_0', 'id' => 'url_type_0', 'lang' => true, 'class' => 'url-type-group-lang tmp', 'default' => '#', ), array( 'type' => 'select', 'label' => $this->l('Category Type'), 'name' => 'category_type_0', 'id' => 'category_type_0', 'options' => array('query' => $categories, 'id' => 'id_category', 'name' => 'name'), 'default' => '', 'class' => 'link_type_group tmp', ), array( 'type' => 'select', 'label' => $this->l('Manufacture Type'), 'name' => 'manufacture_type_0', 'id' => 'manufacture_type_0', 'options' => array('query' => $manufacturers, 'id' => 'id_manufacturer', 'name' => 'name'), 'default' => '', 'class' => 'link_type_group tmp', ), array( 'type' => 'select', 'label' => $this->l('Supplier Type'), 'name' => 'supplier_type_0', 'id' => 'supplier_type_0', 'options' => array('query' => $suppliers, 'id' => 'id_supplier', 'name' => 'name'), 'default' => '', 'class' => 'link_type_group tmp', ), array( 'type' => 'select', 'label' => $this->l('List Page Controller'), 'name' => 'controller_type_0', 'id' => 'controller_type_0', 'options' => array('query' => $page_controller, 'id' => 'link', 'name' => 'name'), 'default' => '', 'class' => 'link_type_group tmp', ), array( 'type' => 'text', 'label' => $this->l('Parameter of page controller'), 'name' => 'controller_type_parameter_0', 'id' => 'controller_type_parameter_0', 'default' => '', 'lang' => true, 'class' => 'controller-type-group-lang tmp', 'desc' => 'Eg: ?a=1&b=2', ), array( 'type' => 'html', 'name' => 'add-new-link', 'html_content' => '', 'default' => '', ), array( 'type' => 'hidden', 'name' => 'total_link', 'default' => count($list_id_link), ), array( 'type' => 'hidden', 'name' => 'list_field', 'default' => '', ), array( 'type' => 'hidden', 'name' => 'list_field_lang', 'default' => '', ), array( 'type' => 'hidden', 'name' => 'list_id_link', 'default' => '', ), array( 'type' => 'html', 'name' => 'default_html', 'html_content' => "", 'default' => '', ), ), 'buttons' => array( array( 'title' => $this->l('Save And Stay'), 'icon' => 'process-icon-save', 'class' => 'pull-right', 'type' => 'submit', 'name' => 'saveandstayleowidget' ), array( 'title' => $this->l('Save'), 'icon' => 'process-icon-save', 'class' => 'pull-right', 'type' => 'submit', 'name' => 'saveleowidget' ), ) ); if (count($list_id_link) > 0) { foreach ($list_id_link as $list_id_link_val) { $text_link = array( 'type' => 'text', 'label' => $this->l('Text Link'), 'name' => 'text_link_'.$list_id_link_val, 'default' => '', 'lang' => true, 'class' => 'tmp element element-lang', 'required' => true, ); $link_type = array( 'type' => 'select', 'label' => $this->l('Link Type'), 'name' => 'link_type_'.$list_id_link_val, 'id' => 'link_type_'.$list_id_link_val, 'desc' => $this->l('Select a link type and fill data for following input'), 'options' => array( 'query' => array( array('id' => 'url', 'name' => $this->l('Url')), array('id' => 'category', 'name' => $this->l('Category')), array('id' => 'product', 'name' => $this->l('Product')), array('id' => 'manufacture', 'name' => $this->l('Manufacture')), array('id' => 'supplier', 'name' => $this->l('Supplier')), array('id' => 'cms', 'name' => $this->l('Cms')), array('id' => 'controller', 'name' => $this->l('Page Controller')) ), 'id' => 'id', 'name' => 'name'), 'default' => '', 'class' => 'tmp element', ); $product_type = array( 'type' => 'text', 'label' => $this->l('Product ID'), 'name' => 'product_type_'.$list_id_link_val, 'id' => 'product_type_'.$list_id_link_val, 'class' => 'link_type_group_'.$list_id_link_val.' tmp element', 'default' => '', ); $cms_type = array( 'type' => 'select', 'label' => $this->l('CMS Type'), 'name' => 'cms_type_'.$list_id_link_val, 'id' => 'cms_type_'.$list_id_link_val, 'options' => array('query' => $cmss, 'id' => 'id_cms', 'name' => 'meta_title'), 'default' => '', 'class' => 'link_type_group_'.$list_id_link_val.' tmp element', ); $url_type = array( 'type' => 'text', 'label' => $this->l('URL'), 'name' => 'url_type_'.$list_id_link_val, 'id' => 'url_type_'.$list_id_link_val, 'lang' => true, 'class' => 'url-type-group-lang tmp element element-lang', 'default' => '#', ); $category_type = array( 'type' => 'select', 'label' => $this->l('Category Type'), 'name' => 'category_type_'.$list_id_link_val, 'id' => 'category_type_'.$list_id_link_val, 'options' => array( 'query' => $categories, 'id' => 'id_category', 'name' => 'name'), 'default' => '', 'class' => 'link_type_group_'.$list_id_link_val.' tmp element', ); $manufacture_type = array( 'type' => 'select', 'label' => $this->l('Manufacture Type'), 'name' => 'manufacture_type_'.$list_id_link_val, 'id' => 'manufacture_type_'.$list_id_link_val, 'options' => array( 'query' => $manufacturers, 'id' => 'id_manufacturer', 'name' => 'name'), 'default' => '', 'class' => 'link_type_group_'.$list_id_link_val.' tmp element', ); $supplier_type = array( 'type' => 'select', 'label' => $this->l('Supplier Type'), 'name' => 'supplier_type_'.$list_id_link_val, 'id' => 'supplier_type_'.$list_id_link_val, 'options' => array( 'query' => $suppliers, 'id' => 'id_supplier', 'name' => 'name'), 'default' => '', 'class' => 'link_type_group_'.$list_id_link_val.' tmp element', ); $controller_type = array( 'type' => 'select', 'label' => $this->l('List Page Controller'), 'name' => 'controller_type_'.$list_id_link_val, 'id' => 'controller_type_'.$list_id_link_val, 'options' => array( 'query' => $page_controller, 'id' => 'link', 'name' => 'name'), 'default' => '', 'class' => 'link_type_group_'.$list_id_link_val.' tmp element', ); $controller_type_parameter = array( 'type' => 'text', 'label' => $this->l('Parameter of page controller'), 'name' => 'controller_type_parameter_'.$list_id_link_val, 'id' => 'controller_type_parameter_'.$list_id_link_val, 'default' => '', 'lang' => true, 'class' => 'controller-type-group-lang tmp element element-lang', 'desc' => 'Eg: ?a=1&b=2', ); array_push($this->fields_form[1]['form']['input'], $text_link, $link_type, $product_type, $cms_type, $url_type, $category_type, $manufacture_type, $supplier_type, $controller_type, $controller_type_parameter); } } $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFieldsValues($data), 'languages' => Context::getContext()->controller->getLanguages(), 'id_language' => $default_lang ); return $helper->generateForm($this->fields_form); } public function renderContent($args, $setting) { # validate module unset($args); $t = array( 'name' => '', 'html' => '', ); $setting = array_merge($t, $setting); $ac = array(); $languageID = Context::getContext()->language->id; $text_link = $link = ''; // for ($i = 1; $i <= 10; $i++) { // if (isset($setting['text_link_'.$i.'_'.$languageID]) && trim($setting['text_link_'.$i.'_'.$languageID])) { // $text_link = isset($setting['text_link_'.$i.'_'.$languageID]) ? html_entity_decode($setting['text_link_'.$i.'_'.$languageID], ENT_QUOTES, 'UTF-8') : 'No Link Title'; // if (isset($setting['link_'.$i.'_'.$languageID])) { // $link = trim($setting['link_'.$i.'_'.$languageID]); // } else { // $link = trim($setting['link_'.$i]); // } // $ac[] = array('text' => Tools::stripslashes($text_link), 'link' => $link); // } // } $list_id_link = array_filter(explode(',', $setting['list_id_link'])); if (count($list_id_link) > 0) { foreach ($list_id_link as $list_id_link_val) { if (isset($setting['text_link_'.$list_id_link_val.'_'.$languageID]) && trim($setting['text_link_'.$list_id_link_val.'_'.$languageID])) { $text_link = isset($setting['text_link_'.$list_id_link_val.'_'.$languageID]) ? html_entity_decode($setting['text_link_'.$list_id_link_val.'_'.$languageID], ENT_QUOTES, 'UTF-8') : 'No Link Title'; // if (isset($setting['link_'.$i.'_'.$languageID])) { // $link = trim($setting['link_'.$i.'_'.$languageID]); // } else { // $link = trim($setting['link_'.$i]); // } $link = $this->getLink($setting, $list_id_link_val); $ac[] = array('text' => Tools::stripslashes($text_link), 'link' => $link); } } } $setting['id'] = rand(); $setting['links'] = $ac; $output = array('type' => 'links', 'data' => $setting); return $output; } //get link from link type public function getLink($setting, $id_link = null) { // $value = (int)$menu['item']; $result = ''; $link = new Link(); $id_lang = Context::getContext()->language->id; $id_shop = Context::getContext()->shop->id; switch ($setting['link_type_'.$id_link]) { case 'product': $value = $setting['product_type_'.$id_link]; if (Validate::isLoadedObject($obj_pro = new Product($value, true, $id_lang))) { # validate module $result = $link->getProductLink((int)$obj_pro->id, $obj_pro->link_rewrite, null, null, $id_lang, null, (int)Product::getDefaultAttribute((int)$obj_pro->id), false, false, true); } break; case 'category': $value = $setting['category_type_'.$id_link]; if (Validate::isLoadedObject($obj_cate = new Category($value, $id_lang))) { # validate module $result = $link->getCategoryLink((int)$obj_cate->id, $obj_cate->link_rewrite, $id_lang); } break; case 'cms': $value = $setting['cms_type_'.$id_link]; if (Validate::isLoadedObject($obj_cms = new CMS($value, $id_lang))) { # validate module $result = $link->getCMSLink((int)$obj_cms->id, $obj_cms->link_rewrite, $id_lang); } break; case 'url': // MENU TYPE : URL if (preg_match('/http:\/\//', $setting['url_type_'.$id_link.'_'.$id_lang]) || preg_match('/https:\/\//', $setting['url_type_'.$id_link.'_'.$id_lang])) { // ABSOLUTE LINK : default } else { // RELATIVE LINK : auto insert host $host_name = LeoBtmegamenuHelper::getBaseLink().LeoBtmegamenuHelper::getLangLink(); $setting['url_type_'.$id_link.'_'.$id_lang] = $host_name.$setting['url_type_'.$id_link.'_'.$id_lang]; } $value = $setting['url_type_'.$id_link.'_'.$id_lang]; $regex = '((https?|ftp)\:\/\/)?'; // SCHEME $regex .= '([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?'; // User and Pass $regex .= '([a-z0-9-.]*)\.([a-z]{2,3})'; // Host or IP $regex .= '(\:[0-9]{2,5})?'; // Port $regex .= '(\/([a-z0-9+\$_-]\.?)+)*\/?'; // Path $regex .= '(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?'; // GET Query $regex .= '(#[a-z_.-][a-z0-9+\$_.-]*)?'; // Anchor if ($value == 'index' || $value == 'index.php') { $result = $link->getPageLink('index.php', false, $id_lang); break; } elseif ($value == '#' || preg_match("/^$regex$/", $value)) { $result = $value; break; } else { $result = $value; } break; case 'manufacture': $value = $setting['manufacture_type_'.$id_link]; if (Validate::isLoadedObject($obj_manu = new Manufacturer($value, $id_lang))) { # validate module $result = $link->getManufacturerLink((int)$obj_manu->id, $obj_manu->link_rewrite, $id_lang); } break; case 'supplier': $value = $setting['supplier_type_'.$id_link]; if (Validate::isLoadedObject($obj_supp = new Supplier($value, $id_lang))) { # validate module $result = $link->getSupplierLink((int)$obj_supp->id, $obj_supp->link_rewrite, $id_lang); } break; case 'controller': //getPageLink('history', true, Context::getContext()->language->id, null, false, $id_shop); $value = $setting['controller_type_'.$id_link]; $result = $link->getPageLink($value, null, $id_lang, null, false, $id_shop); if ($setting['controller_type_parameter_'.$id_link.'_'.$id_lang] != '') { $result .= $setting['controller_type_parameter_'.$id_link.'_'.$id_lang]; } break; default: $result = '#'; break; } return $result; } /** * 0 no multi_lang * 1 multi_lang follow id_lang * 2 multi_lnag follow code_lang */ public function getConfigKey($multi_lang = 0) { if ($multi_lang == 0) { return array( ); } elseif ($multi_lang == 1) { // $number_html = 10; // $array = array(); // for ($i = 1; $i <= $number_html; $i++) { // $array[] = 'text_link_'.$i; // $array[] = 'link_'.$i; // } // return $array; return array( ); } elseif ($multi_lang == 2) { return array( ); } } }