Changeset 1761 for trunk/gregarius/cls

Show
Ignore:
Timestamp:
10/13/07 01:13:32 (12 months ago)
Author:
cfriesen
Message:

Keep existing functionality by making it an option to search within words (feel free to move the checkbox).

Location:
trunk/gregarius/cls
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/gregarius/cls/search.php

    r1760 r1761  
    3030define ('QUERY_PRM','rss_query'); 
    3131define ('QUERY_MATCH_MODE', 'rss_query_match'); 
     32define ('QUERY_MATCH_TYPE', 'rss_query_match_type'); 
    3233define ('QUERY_CHANNEL', 'rss_query_channel'); 
    3334define ('QUERY_RESULTS','rss_query_res_per_page'); 
     
    4243define ('QUERY_MATCH_AND','and'); 
    4344define ('QUERY_MATCH_EXACT','exact'); 
     45define ('QUERY_MATCH_WITHIN', 'within'); 
    4446 
    4547// This is needed for some constants 
     
    5052    var $searchTerms = array(); 
    5153    var $matchMode; 
     54    var $matchType; 
    5255    var $regMatch = ""; 
    5356 
     
    9598                reset($this->searchTerms); 
    9699                $match = ($this->matchMode == QUERY_MATCH_AND || $this->matchMode == QUERY_MATCH_EXACT); 
     100 
    97101                foreach ($this->searchTerms as $term) { 
    98                     if ($this->matchMode == QUERY_MATCH_AND) { 
    99                         $match = ((stristr($descr_noTags, $term) || stristr($title_noTags, $term)) && $match); 
    100                     } else if ($this->matchMode == QUERY_MATCH_EXACT) { 
    101                             $match = (preg_match("/\b" . $term . "\b/i", $descr_noTags) || preg_match("/\b" . $term . "\b/i", $title_noTags)); 
     102                    if ($this->matchMode == QUERY_MATCH_AND || $this->matchMode == QUERY_MATCH_EXACT) { 
     103                            if($this->matchType == QUERY_MATCH_WITHIN) { 
     104                            $match = ((stristr($descr_noTags, $term) || stristr($title_noTags, $term)) && $match); 
     105                        } else { 
     106                            $match = ((preg_match("/\b" . $term . "\b/i", $descr_noTags) || preg_match("/\b" . $term . "\b/i", $title_noTags)) && $match); 
     107                                                } 
    102108                    } else { 
    103                         $match = ($match || (stristr($descr_noTags, $term) || stristr($title_noTags, $term))); 
    104                     } 
     109                            if($this->matchType == QUERY_MATCH_WITHIN) { 
     110                            $match = ($match || (stristr($descr_noTags, $term) || stristr($title_noTags, $term))); 
     111                        } else { 
     112                                                    $match = ($match || (preg_match("/\b" . $term . "\b/i", $descr_noTags) || preg_match("/\b" . $term . "\b/i", $title_noTags))); 
     113                                                } 
     114                    }    
    105115                } 
    106116 
     
    132142                (!array_key_exists(QUERY_MATCH_MODE, $_REQUEST) ? QUERY_MATCH_AND : $_REQUEST[QUERY_MATCH_MODE]),  
    133143            RSS_SANITIZER_CHARACTERS_EXT); 
    134              
     144         
     145        $this->matchType = sanitize( 
     146            (!array_key_exists(QUERY_MATCH_TYPE, $_REQUEST) ? "" : $_REQUEST[QUERY_MATCH_TYPE]), 
     147            RSS_SANITIZER_CHARACTERS_EXT); 
     148 
    135149        $this->channelId = sanitize( 
    136150            ((array_key_exists(QUERY_CHANNEL, $_REQUEST)) ? $_REQUEST[QUERY_CHANNEL] : ALL_CHANNELS_ID), 
  • trunk/gregarius/cls/wrappers/searchform.php

    r1561 r1761  
    6464    return ((array_key_exists(QUERY_ORDER_BY,$_REQUEST) && 
    6565     $_REQUEST[QUERY_ORDER_BY] == QUERY_ORDER_BY_CHANNEL)?" checked=\"checked\"":""); 
     66} 
     67 
     68function rss_search_within() { 
     69    return ((array_key_exists(QUERY_MATCH_TYPE, $_REQUEST) && 
     70        $_REQUEST[QUERY_MATCH_TYPE] == QUERY_MATCH_WITHIN)?" checked=\"checked\"":"");   
    6671} 
    6772