Files
zaufane.pl/autoload/front/factory/class.Search.php
2024-11-04 19:13:57 +01:00

75 lines
4.0 KiB
PHP

<?php
namespace front\factory;
class Search
{
public static function search_results( $search_txt, $lang_id )
{
global $mdb, $cache;
if ( strlen( $search_txt ) < 3 )
return false;
if ( !$articles = \Cache::fetch( "search_results:$search_txt:$lang_id" ) )
{
$results = $mdb -> query( 'SELECT * FROM ( '
. 'SELECT '
. 'a.id, '
. '( CASE '
. 'WHEN copy_from IS NULL THEN title '
. 'WHEN copy_from IS NOT NULL THEN ( '
. 'SELECT '
. 'title '
. 'FROM '
. 'pp_articles_langs '
. 'WHERE '
. 'lang_id = al.copy_from AND article_id = a.id '
. ') '
. 'END ) AS title, '
. '( CASE '
. 'WHEN copy_from IS NULL THEN entry '
. 'WHEN copy_from IS NOT NULL THEN ( '
. 'SELECT '
. 'entry '
. 'FROM '
. 'pp_articles_langs '
. 'WHERE '
. 'lang_id = al.copy_from AND article_id = a.id '
. ') '
. 'END ) AS entry, '
. '( CASE '
. 'WHEN copy_from IS NULL THEN text '
. 'WHEN copy_from IS NOT NULL THEN ( '
. 'SELECT '
. 'text '
. 'FROM '
. 'pp_articles_langs '
. 'WHERE '
. 'lang_id = al.copy_from AND article_id = a.id '
. ') '
. 'END ) AS text '
. 'FROM '
. 'pp_articles AS a '
. 'INNER JOIN pp_articles_langs AS al ON a.id = al.article_id '
. 'WHERE '
. 'status = 1 AND lang_id = \'' . $lang_id . '\' '
. ') AS q1 '
. 'WHERE '
. 'q1.title IS NOT NULL '
. 'AND '
. '( '
. 'LOWER( title ) LIKE \'%' . \S::escape( strtolower( $search_txt ) ) . '%\' '
. 'OR '
. 'LOWER( entry ) LIKE \'%' . \S::escape( strtolower( $search_txt ) ) . '%\' '
. 'OR '
. 'LOWER( text ) LIKE \'%' . \S::escape( strtolower( $search_txt ) ) . '%\' '
. ')' ) -> fetchAll();
if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row )
$articles[] = \front\factory\Articles::article_details( $row['id'], $lang_id );
\Cache::store( "search_results:$search_txt:$lang_id", $articles );
}
return $articles;
}
}