Full Text Search of your Orders in VM2

Please post your issues and questions about One Page Checkout for Virtuemart 2 to this forum.

Full Text Search of your Orders in VM2

Postby admin » Tue Mar 17, 2015 5:56 pm

Hello friends, some of our customers wanted to search the orders per order items and any other info entered by a customer, we updated the funtion within the

\administrator\components\com_virtuemart\models\orders.php

Update the whole function to use full-text search of any items or data within your orders.

Code: Select all
/**
    * Select the products to list on the product list page
    * @param $uid integer Optional user ID to get the orders of a single user
    * @param $_ignorePagination boolean If true, ignore the Joomla pagination (for embedded use, default false)
    */
   public function getOrdersList($uid = 0, $noLimit = false)
   {
//       vmdebug('getOrdersList');
      $this->_noLimit = $noLimit;
      $select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name "
      .',u.email as order_email,pm.payment_name AS payment_method ';
      $from = $this->getOrdersListQuery();
      /*      $_filter = array();
       if ($uid > 0) {
      $_filter[] = ('u.virtuemart_user_id = ' . (int)$uid);
      }*/
         
         
      if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php');
      if(!Permissions::getInstance()->check('admin')){
   
         $myuser      =JFactory::getUser();
         $where[]= ' u.virtuemart_user_id = ' . (int)$myuser->id.' AND o.virtuemart_vendor_id = "1" ';
      } else {
         $myuser      =JFactory::getUser();
         
      
         if(empty($uid)){
            $where[]= ' o.virtuemart_vendor_id = "1" ';
         } else {
            $where[]= ' u.virtuemart_user_id = ' . (int)$uid.' AND o.virtuemart_vendor_id = "1" ';
         }
      }

      if ($search = JRequest::getString('search', false)){
         
         
         {
   $kw = $search;
   
   
   
     
  $db = JFactory::getDBO();
  $q = 'select * from #__virtuemart_orders where 1 order by virtuemart_order_id desc limit 0,1';
  $db->setQuery($q);
  $o = $db->loadAssoc();
 
  $q = 'select * from #__virtuemart_order_items where 1 order by virtuemart_order_id desc limit 0,1';
  $db->setQuery($q);
  $oi = $db->loadAssoc();
 
  $q = 'select * from #__virtuemart_order_userinfos where 1 order by virtuemart_order_id desc limit 0,1';
  $db->setQuery($q);
  $ou = $db->loadAssoc();
 
  $from .= ' LEFT JOIN #__virtuemart_order_items AS oi ON o.virtuemart_order_id = oi.virtuemart_order_id ';
  $qs = array(); $qs1 = array(); $qs2 = array(); $qs3 = array();
  foreach ($o as $key=>$v)
  {
   
   $qs3[] = ' `o`.`'.$key.'` LIKE "%'.$db->escape($kw).'" ';
  }


  foreach ($oi as $key=>$v)
  {
   
   $qs3[] = ' `oi`.`'.$key.'` LIKE "%'.$db->escape($kw).'%" ';
  }

  foreach ($ou as $key=>$v)
  {
   
   $qs3[] = ' `u`.`'.$key.'` LIKE "%'.$db->escape($kw).'%" ';
  }
 
  $qs3q = implode(' or ', $qs3);
   
   $where[] = ' ('.$qs3q.' ) ';
 
   
   
   
  }
         
      /*
         $search = '"%' . $this->_db->getEscaped( $search, true ) . '%"' ;
         $search = str_replace(' ','%',$search);

         $searchFields = array();
         $searchFields[] = 'u.first_name';
         $searchFields[] = 'u.middle_name';
         $searchFields[] = 'u.last_name';
         $searchFields[] = 'o.order_number';
         $searchFields[] = 'u.company';
         $searchFields[] = 'u.email';
         $searchFields[] = 'u.phone_1';
         $searchFields[] = 'u.address_1';
         $searchFields[] = 'u.zip';
         $where[] = implode (' LIKE '.$search.' OR ', $searchFields) . ' LIKE '.$search.' ';
         //$where[] = ' ( u.first_name LIKE '.$search.' OR u.middle_name LIKE '.$search.' OR u.last_name LIKE '.$search.' OR `order_number` LIKE '.$search.')';
         */
      }

      $order_status_code = JRequest::getString('order_status_code', false);
      if ($order_status_code and $order_status_code!=-1){
         $where[] = ' o.order_status = "'.$order_status_code.'" ';
      }

      if (count ($where) > 0) {
         $whereString = ' WHERE (' . implode (' AND ', $where) . ') ';
      }
      else {
         $whereString = '';
      }

      if ( JRequest::getCmd('view') == 'orders') {
         $ordering = $this->_getOrdering();
      } else {
         $ordering = ' order by o.modified_on DESC';
      }

      $this->_data = $this->exeSortSearchListQuery(0,$select,$from,$whereString,'',$ordering);


      return $this->_data ;
   }


Best Regards, Stan
admin
Site Admin
 
Posts: 2708
Joined: Wed Jan 06, 2010 11:43 pm

Return to One Page Checkout for Virtuemart 2