예제 #1
0
       /**
	 * Content 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
	 * @param mixed An array if the search it to be restricted to areas, null if search all
	 */
	function onContentSearch($text, $phrase='', $ordering='', $areas=null, $categories =null, $fieldsfilter=null, $limit=50)
	{
              
                
                if(is_array($categories)) $categories=implode(",", $categories);
                
		$db		= JFactory::getDbo();
		$app	= JFactory::getApplication();
		$user	= JFactory::getUser();
		$groups	= implode(',', $user->getAuthorisedViewLevels());
		$tag = JFactory::getLanguage()->getTag();
 
		require_once JPATH_SITE.'/components/com_content/helpers/route.php';
		require_once JPATH_SITE.'/administrator/components/com_search/helpers/search.php';
 

		$sContent		= $this->params->get('search_content',		1);
		$sArchived		= $this->params->get('search_archived',		1); 
                $limit			= $this->params->def('search_limit2',		50);
                //echo $limit;
               // $this->setState('limit', $app->getUserStateFromRequest('com_fieldsattach.limit', 'limit', $config->get('list_limit'), 'int'));
		
                //echo "STATE LIMIT::".$this->params->def('limit', 32);
                //$limit			= $this->params->def('search_limit',		50);

		$nullDate		= $db->getNullDate();
		$date = JFactory::getDate();
		$now = $date->toMySQL();
                 
		 
		$wheres = array();
                //$wheres2[]	= ' ';
                //$wheres[]	= implode(' OR ', $wheres2);
                //$where = '(' . implode(($phrase == 'all' ? ') AND (' : ') OR ('), $wheres) . ')';
		 

		$morder = '';
		switch ($ordering) {
			case 'oldest':
				$order = 'a.created ASC';
				break;

			case 'popular':
				$order = 'a.hits DESC';
				break;

			case 'alpha':
				$order = 'a.title ASC';
				break;

			case 'category':
				$order = 'c.title ASC, a.title ASC';
				$morder = 'a.title ASC';
				break;

			case 'newest':
			default:
				$order = 'a.created DESC';
				break;
		}

		$rows = array();
		$query	= $db->getQuery(true);

		// search articles
		if (  $limit > 0)
		{
                         
			$query->clear();
                        
                        //All without filter
                        
                        /*if(count($fieldsfilter))
                        {
                            $whereextra = "";
                            $cont_field=0;
                            $arrayfieldsid = explode(",",$fieldsfilter);
                            foreach ($arrayfieldsid as $fieldsid)
                            {
                                $tmp1= explode("_",$fieldsid);
                                $tmpfieldid= $tmp1[0];
                                $valuefieldid="";
                                if(count($tmp1)>1) {
                                    $valuefieldid = $tmp1[1];
                                }
                                $valuefieldid = plgAdvancedsearchfieldsattachment::getValue($tmpfieldid, $valuefieldid);
                                //$where .= " ( d.fieldsid = ". $fieldsid. ' AND  d.value LIKE '.$text .')';
                                
                                $valuefieldid = $db->Quote('%'.$db->getEscaped($valuefieldid, true).'%', false);
                                $querytmp = plgAdvancedsearchfieldsattachment::getQuery($text, $phrase, $order, $areas, $categories, $fieldsfilter, $limit, $tmpfieldid, $valuefieldid);
                                //echo "".$query;
                                $query .= $querytmp ;
                                if($cont_field < count($arrayfieldsid)-1) $query .= " UNION  ";
                                $cont_field++;
                            }
                        }else{
                            //Without filter extrafield
                             $query = plgAdvancedsearchfieldsattachment::getQuery($text, $phrase, $order, $areas, $categories, $fieldsfilter, $limit);
                               
                        }*/
                        //echo "FILTER::".$fieldsfilter;
                        $query = plgAdvancedsearchfieldsattachment::getQuery($text, $phrase, $order, $areas, $categories, $fieldsfilter, $limit);
                      
                       // echo $query."<br><br>";
                                //echo "LIMIT:: ".$limit;
                        //$db->setQuery($query, 0, $limit);
                        $db->setQuery($query);
                        
                        $list = $db->loadObjectList();
                         
                        //TODO --> Repasar lista i escoger cuales son los IDS correctos 
                        $arrayfieldsid = explode(",",$fieldsfilter);
                        $numero_filtros = 0; 
                        //$numero_filtros = count($arrayfieldsid);
                        $cuantos = 0;
                        
                        foreach ($arrayfieldsid as $fieldsid)
                            {
                                $tmp1= explode("_",$fieldsid);
                                $tmpfieldid= $tmp1[0];
                                $valuefieldid="";
                                if(count($tmp1)>1) {
                                    $valuefieldid = $tmp1[1];
                                }  
                                //echo "<br />AAA".count($arrayfieldsid).">".($cont_field+1);
                                if(!empty($tmpfieldid) && !empty( $tmp1[1])){
                                    
                                    $numero_filtros++;
                                    
                                }
                                
                            }
                      //  echo "<br>Numero de filtros: ".$numero_filtros;
                        
                        
                        
                        $lstids = Array();
                        $newfields = Array();
                        $cont = 0;
                        $elidpasado = -1;
                        if(count($list)>0){
                            foreach($list as $unidad)
                            {
                                //PAsamos al siguiente ID
                            if($elidpasado != $unidad->id)
                            {
                                //echo "<br>Pasamos al siguiente ID:".$unidad->id." -- cuantos: ".$cuantos;
                                $elidpasado = $unidad->id;
                                $cuantos=0 ;
                            }else
                            {
                                //echo "<br> DE moemtno ".$cuantos;

                            }
                                //Comptrobamos si encontramos el id en nuestra tabla temporal
                                //echo "<br><br><br>EMPIEZA EL FOR DE ID:".$unidad->id;
                                $cuantos++;
                                $found=false;
                                foreach($lstids as $tmpids)
                                {
                                    if($tmpids == $unidad->id){ 
                                        $found=true;
                                        } 
                                }


                                //Si no encontrado miramos si es necesario añadirlo a la nueva talba de filtrados
                                if(!$found){
                                        //echo "<br>No tronbat ID:".$unidad->id." -- <br>";
                                        //echo "<br>Cuantos: ".$cuantos."  num filtros::".($numero_filtros)." -- <br>";

                                        if($cuantos == ($numero_filtros)){

                                            //Añadimos a $lstids
                                            $lstids[count($lstids)] = $unidad->id;
                                            //echo "<br>AÑADIMOSSS:".$unidad->id." NUMEOR DE VECES:".$cuantos;;
                                            $newfields[count($newfields)] = $unidad;

                                        }
                                        $cont++;

                                    }
                            // echo "Comparando ids: ".$elidpasado."!=". $unidad->id;

                            }
                        }
                        //echo "<br>LIST::: ".count($lstids);
                        
                        
                        $tmplistids = implode(",",$lstids);
                        
                        //echo "IDSARTICLE:: ".$tmplistids;
                        
                        $query->clear();
                        
                        
                        if(!empty($tmplistids) || ($numero_filtros==0)) 
                        {
                            $query = plgAdvancedsearchfieldsattachment::getQuery($text, $phrase, $order, $areas, $categories, $fieldsfilter, $limit, "", "", $tmplistids);
                      
                            $query->order($order);
                            $query->order("a.id"); 
                            $query->group('a.id');

                           // echo " <br>LIMIT:: ".$query;
                            $db->setQuery($query, 0, $limit);
                                    //$db->setQuery($query);

                            $list = $db->loadObjectList();
                        }else{ 
                            //Not exist only
                            $list =   Array();
                            
                            }


                        //echo $query;
                        
                        //$list = $newfields; 
                        //Realizar otro SQL con los id's directamente, así conseguimos el paginador 
                        
                        
                        /*
                        $numero_filtros = 0;
                         
                        $tmp = explode(" ", $searchword);
                        $numero_filtros = count($tmp);
                        $cuantos = 0;
                        
                       // echo "<br>Numero de filtros: ".$numero_filtros;
                        
                        $lstids = Array();
                        $newfields = Array();
                        $cont = 0;
                        $elidpasado = -1;
                        if(count($list)>0){
                            foreach($list as $unidad)
                            {
                                //PAsamos al siguiente ID
                            if($elidpasado != $unidad->id)
                            {
                                //echo "<br>Pasamos al siguiente ID:".$unidad->id." -- cuantos: ".$cuantos;
                                $elidpasado = $unidad->id;
                                $cuantos=0 ;
                            }else
                            {
                                //echo "<br> DE moemtno ".$cuantos;

                            }
                                //Comptrobamos si encontramos el id en nuestra tabla temporal
                                //echo "<br><br><br>EMPIEZA EL FOR DE ID:".$unidad->id;
                                $cuantos++;
                                $found=false;
                                foreach($lstids as $tmpids)
                                {
                                    if($tmpids == $unidad->id){ 
                                        $found=true;
                                        } 
                                }


                                //Si no encontrado miramos si es necesario añadirlo a la nueva talba de filtrados
                                if(!$found){
                                        //echo "<br>No tronbat ID:".$unidad->id." -- <br>";
                                        //echo "<br>Cuantos: ".$cuantos."  num filtros::".($numero_filtros)." -- <br>";

                                        if($cuantos == ($numero_filtros)){

                                            //Añadimos a $lstids
                                            $lstids[count($lstids)] = $unidad->id;
                                        // echo "<br>AÑADIMOSSS:".$unidad->id." NUMEOR DE VECES:".$cuantos;;
                                            $newfields[count($newfields)] = $unidad;

                                        }
                                        $cont++;

                                    }
                            // echo "Comparando ids: ".$elidpasado."!=". $unidad->id;

                            }
                        }
                       // echo "<br>LIST::: ".count($list);
                       // echo "<br>";
                         * 
                         */
                        
                        
                        //$list = $newfields;
                       /* $query->clear();
                        //Create new select with pagination
                        $query->select('a.id, a.title AS title, a.metadesc, a.metakey, a.created AS created, a.catid, a.publish_up , '
						.'CONCAT(a.introtext, a.fulltext) AS text, a.introtext, c.title AS section,  '
						.'CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END as slug, '
						.'CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(":", c.id, c.alias) ELSE c.id END as catslug  ');
						//.'"2" AS browsernav');
			$query->from('#__content AS a');
                        
			$query->innerJoin('#__categories AS c ON c.id=a.catid'); 
                        
                        $ids = "";$cont=0;
                        foreach($list as $unidad)
                        {
                            //Comptrobamos si encontramos el id en nuestra tabla temporal
                          //  echo "<br>ID:".$unidad->id;
                            $ids .= $unidad->id ;
                            if(($cont+1)<count($list)){ $ids .= ",";}
                            $cont++;
                        }
                        $query->where( 'a.id  IN ( '. $ids .')');
                         //$query->group('a.id');
			$query->order($order);
                        $query->order("a.id");
                        
                        $query->group('a.id');
                        
                        //echo $query;
                        $db->setQuery($query); 
			$list = $db->loadObjectList(); */
                         
			$limit -= count($list); 
			if (isset($list))
			{
				foreach($list as $key => $item)
				{
					$list[$key]->href = ContentHelperRoute::getArticleRoute($item->slug, $item->catslug); 
				}
			}

			$rows[] = $list;
		}
               // JError::raiseWarning( 100, $query  );
                //echo $query;
		$results = array();
		if (count($rows))
		{ 
			foreach($rows as $row)
			{

				$new_row = array();

                                if(count($row)>0){
					foreach($row AS $key => $article) {

		                                $new_row[] = $article;
					} 
					$results = array_merge($results, (array) $new_row);
				}
			}
		}
                
                JRequest::setVar("option", "com_content");
                
		return $results;
	}