/** * 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; }