%PDF- %PDF-
Direktori : /home1/lightco1/www/lightingrepublic.com.au/plugins/search/virtuemart/ |
Current File : //home1/lightco1/www/lightingrepublic.com.au/plugins/search/virtuemart/virtuemart.php |
<?php /** * * a special type of 'cash on delivey': * * @author Valérie Isaksen * @version $Id: authorize.php 5122 2011-12-18 22:24:49Z alatak $ * @package VirtueMart * @subpackage payment * @copyright Copyright (C) 2004-2008 soeren - All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details. * * http://virtuemart.net */ // no direct access defined ('_JEXEC') or die('Restricted access'); if (!version_compare (JVERSION, '1.6.0', 'ge')) { $app = JFactory::getApplication (); $app->registerEvent ('onSearch', 'plgSearchVirtuemart'); $app->registerEvent ('onSearchAreas', 'plgSearchVirtuemartAreas'); } else { /** * @return array An array of search areas */ class plgSearchVirtuemart extends JPlugin { function onContentSearchAreas () { $this->loadLanguage (); static $areas = array( 'virtuemart' => 'PLG_SEARCH_VIRTUEMART_PRODUCTS' ); return $areas; } function getTableSQLFields () { return array(); } /** * virtuemart Products Search method * * The sql must return the following fields that are used in a common display * routine: href, title, section, created, text, browsernav * * @param string Target search string * @param string mathcing option, exact|any|all * @param string ordering option, newest|oldest|popular|alpha|category */ function onContentSearch ($text, $phrase = '', $ordering = '', $areas = NULL) { $db = JFactory::getDbo (); $app = JFactory::getApplication (); $user = JFactory::getUser (); $groups = implode (',', $user->getAuthorisedViewLevels ()); $tag = JFactory::getLanguage ()->getTag (); $searchText = $text; if (is_array ($areas)) { if (!array_intersect ($areas, array_keys ($this->onContentSearchAreas ()))) { return array(); } } // load plugin params info // $plugin = & JPluginHelper::getPlugin('search', 'virtuemart'); // $pluginParams = new JParameter($plugin->params); // $limit = $pluginParams->def('search_limit', 50); $limit = $this->params->def ('search_limit', 50); if (!class_exists ('VmConfig')) { require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'config.php'); } VmConfig::loadConfig (); /* TO do it work with date $nullDate = $db->getNullDate(); $date = JFactory::getDate(); $now = $date->toMySQL(); */ $text = trim ($text); if ($text == '') { return array(); } $section = JText::_ ('Products'); $wheres = array(); switch ($phrase) { case 'exact': $text = $db->Quote ('%' . $db->getEscaped ($text, TRUE) . '%', FALSE); $wheres2 = array(); $wheres2[] = 'p.product_sku LIKE ' . $text; $wheres2[] = 'a.product_name LIKE ' . $text; $wheres2[] = 'a.product_s_desc LIKE ' . $text; $wheres2[] = 'a.product_desc LIKE ' . $text; $wheres2[] = 'b.category_name LIKE ' . $text; $where = '(' . implode (') OR (', $wheres2) . ')'; break; case 'all': case 'any': default: $words = explode (' ', $text); $wheres = array(); foreach ($words as $word) { $word = $db->Quote ('%' . $db->getEscaped ($word, TRUE) . '%', FALSE); $wheres2 = array(); $wheres2[] = 'p.product_sku LIKE ' . $word; $wheres2[] = 'a.product_name LIKE ' . $word; $wheres2[] = 'a.product_s_desc LIKE ' . $word; $wheres2[] = 'a.product_desc LIKE ' . $word; $wheres2[] = 'b.category_name LIKE ' . $word; $wheres[] = implode (' OR ', $wheres2); } $where = '(' . implode (($phrase == 'all' ? ') AND (' : ') OR ('), $wheres) . ')'; break; } switch ($ordering) { case 'alpha': $order = 'a.product_name ASC'; break; case 'category': $order = 'b.category_name ASC, a.product_name ASC'; break; case 'popular': $order = 'a.product_name ASC'; break; case 'newest': $order = 'p.created_on DESC'; break; case 'oldest': $order = 'p.created_on ASC'; break; default: $order = 'a.product_name DESC'; } $where_shopper_group=""; $usermodel = VmModel::getModel ('user'); $currentVMuser = $usermodel->getUser (); $virtuemart_shoppergroup_ids = (array)$currentVMuser->shopper_groups; if (is_array ($virtuemart_shoppergroup_ids)) { $sgrgroups = array(); foreach ($virtuemart_shoppergroup_ids as $virtuemart_shoppergroup_id) { $sgrgroups[] = 'psgr.`virtuemart_shoppergroup_id`= "' . (int)$virtuemart_shoppergroup_id . '" '; } $sgrgroups[] = 'psgr.`virtuemart_shoppergroup_id` IS NULL '; $where_shopper_group = "AND ( " . implode (' OR ', $sgrgroups) . " ) "; } // search product //TODO b.virtuemart_category_id>0 should be configurable $text = $db->Quote ('%' . $db->getEscaped ($text, TRUE) . '%', FALSE); $query = "SELECT DISTINCT CONCAT( a.product_name,' (',p.product_sku,')' ) AS title, a.virtuemart_product_id , b.virtuemart_category_id , a.product_s_desc AS text, b.category_name as section, p.created_on as created, '2' AS browsernav FROM `#__virtuemart_products_" . VMLANG . "` AS a JOIN #__virtuemart_products as p using (`virtuemart_product_id`) LEFT JOIN `#__virtuemart_product_categories` AS xref ON xref.`virtuemart_product_id` = a.`virtuemart_product_id` LEFT JOIN `#__virtuemart_categories_" . VMLANG . "` AS b ON b.`virtuemart_category_id` = xref.`virtuemart_category_id` LEFT JOIN `#__virtuemart_product_shoppergroups` as `psgr` on (`psgr`.`virtuemart_product_id`=`a`.`virtuemart_product_id`) " . ' WHERE ' . $where . ' and p.published=1 ' .$where_shopper_group . (VmConfig::get ('show_uncat_child_products') ? '' : ' and b.virtuemart_category_id>0 ') . ' ORDER BY ' . $order; $db->setQuery ($query, 0, $limit); $rows = $db->loadObjectList (); if ($rows) { foreach ($rows as $key => $row) { $rows[$key]->href = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $row->virtuemart_product_id . '&virtuemart_category_id=' . $row->virtuemart_category_id; // $rows[$key]->text = $text; } } return $rows; } } } /** * @return array An array of search areas */ function &plgSearchVirtuemartAreas () { $this->loadLanguage (); static $areas = array( 'virtuemart' => 'PLG_SEARCH_VIRTUEMART_PRODUCTS' ); return $areas; } /** * virtuemart Products Search method * * The sql must return the following fields that are used in a common display * routine: href, title, section, created, text, browsernav * * @param string Target search string * @param string mathcing option, exact|any|all * @param string ordering option, newest|oldest|popular|alpha|category */ function plgSearchVirtuemart ($text, $phrase = '', $ordering = '', $areas = NULL) { $db = JFactory::getDBO (); $user = JFactory::getUser (); if (is_array ($areas)) { if (!array_intersect ($areas, array_keys (plgSearchVirtuemartAreas ()))) { return array(); } } // load plugin params info $plugin = & JPluginHelper::getPlugin ('search', 'virtuemart'); $pluginParams = new JParameter($plugin->params); if (!class_exists ('VmConfig')) { require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'config.php'); } VmConfig::loadConfig (); $limit = $pluginParams->def ('search_limit', 50); $text = trim ($text); if ($text == '') { return array(); } $section = JText::_ ('Products'); $wheres = array(); switch ($phrase) { case 'exact': $text = $db->Quote ('%' . $db->getEscaped ($text, TRUE) . '%', FALSE); $wheres2 = array(); $wheres2[] = 'p.product_sku LIKE ' . $text; $wheres2[] = 'a.product_name LIKE ' . $text; $wheres2[] = 'a.product_s_desc LIKE ' . $text; $wheres2[] = 'a.product_desc LIKE ' . $text; $wheres2[] = 'b.category_name LIKE ' . $text; $where = '(' . implode (') OR (', $wheres2) . ')'; break; case 'all': case 'any': default: $words = explode (' ', $text); $wheres = array(); foreach ($words as $word) { $word = $db->Quote ('%' . $db->getEscaped ($word, TRUE) . '%', FALSE); $wheres2 = array(); $wheres2[] = 'p.product_sku LIKE ' . $word; $wheres2[] = 'a.product_name LIKE ' . $word; $wheres2[] = 'a.product_s_desc LIKE ' . $word; $wheres2[] = 'a.product_desc LIKE ' . $word; $wheres2[] = 'b.category_name LIKE ' . $word; $wheres[] = implode (' OR ', $wheres2); } $where = '(' . implode (($phrase == 'all' ? ') AND (' : ') OR ('), $wheres) . ')'; break; } switch ($ordering) { case 'alpha': $order = 'a.product_name ASC'; break; case 'category': $order = 'b.category_name ASC, a.product_name ASC'; break; case 'popular': $order = 'a.product_name ASC'; break; case 'newest': $order = 'p.created_on DESC'; break; case 'oldest': $order = 'p.created_on ASC'; break; default: $order = 'a.product_name DESC'; } $text = $db->Quote ('%' . $db->getEscaped ($text, TRUE) . '%', FALSE); $query = "SELECT DISTINCT CONCAT( a.product_name,' (',p.product_sku,')' ) AS title, a.virtuemart_product_id , b.virtuemart_category_id , a.product_s_desc AS text, b.category_name as section, p.created_on as created, '2' AS browsernav FROM `#__virtuemart_products_" . VMLANG . "` AS a JOIN `#__virtuemart_products` as p using (`virtuemart_product_id`) LEFT JOIN `#__virtuemart_product_categories` AS xref ON xref.virtuemart_product_id = a.virtuemart_product_id LEFT JOIN `#__virtuemart_categories_" . VMLANG . "` AS b ON b.virtuemart_category_id = xref.virtuemart_category_id" . ' WHERE ' . $where . ' and p.published=1 and b.virtuemart_category_id>0 ' . ' ORDER BY ' . $order; $db->setQuery ($query, 0, $limit); $rows = $db->loadObjectList (); if ($rows) { foreach ($rows as $key => $row) { $rows[$key]->href = 'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $row->virtuemart_product_id . '&virtuemart_category_id=' . $row->virtuemart_category_id; // $rows[$key]->text = $text; } } return $rows; }