Changeset 85 for all-keywords/trunk/all-keywords.pl
- Timestamp:
- 06/16/05 12:33:16 (4 years ago)
- Files:
-
- 1 modified
-
all-keywords/trunk/all-keywords.pl (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
all-keywords/trunk/all-keywords.pl
r83 r85 1 1 # A plugin for adding keywords-handling tags 2 2 # 3 # Release 0.13 (Jun 11, 2005)3 # $Id$ 4 4 # 5 5 # This software is provided as-is. You may use it for commercial or … … 22 22 }; 23 23 24 #if (MT->can('add_callback')) { 25 # my $mt = MT->instance; 26 # MT->add_callback((ref $mt eq 'MT::App::CMS' ? 'AppPostEntrySave' : 'MT::Entry::post_save'), 27 # 10, $plugin, \&update_entry_tags); 28 #} 29 24 30 MT::Template::Context->add_container_tag('AllKeywords' => \&all_keywords); 25 31 MT::Template::Context->add_container_tag('EntryAllKeywords' => \&entry_all_keywords); … … 31 37 MT::Template::Context->add_container_tag('MostRelatedEntries' => \&most_related_entries); 32 38 33 sub split_ keywords {39 sub split_args { 34 40 my ($string, $delimiter, $case_sensitive) = @_; 35 41 return unless $string; 36 42 my @keywords; 37 $string =~ s/^\s+//; 38 $string =~ s/\s+$//; 43 $string =~ s/(^\s+|\s+$)//g; 39 44 $string = lc $string unless $case_sensitive; 40 return $delimiter ? 41 map { s/^\s+//; s/\s+$//; $_ } split($delimiter, $string) : 42 split(/\s+/, $string); 45 46 return split(/\s+/, $string) unless $delimiter; 47 48 foreach my $keyword (split($delimiter, $string)) { 49 $keyword =~ s/(^\s+|\s+$)//g; 50 push @keywords, $keyword if $keyword; 51 } 52 @keywords; 53 } 54 55 sub split_keywords { 56 my ($string, $case_sensitive) = @_; 57 return unless $string; 58 my @keywords; 59 $string =~ s/(^\s+|\s+$)//g; 60 $string = lc $string unless $case_sensitive; 61 62 # keywords w/o whitespaces 63 return split(/\s+/, $string) unless $string =~ m/[[]"';,|]?/; 64 65 # keywords w/ whitespaces 66 while ($string =~ m/(\[[^]]+\]|"[^"]+"|'[^']+'|[^;,|]+)/g) { 67 my $keyword = $1; 68 $keyword =~ s/(^[\["'\s;,|]+|[\]"'\s;,|]+$)//g; 69 push @keywords, $keyword if $keyword; 70 } 71 @keywords; 43 72 } 44 73 … … 52 81 # lastn option (default = 0, no cutoff) 53 82 my $lastn = $args->{lastn} || 0; 54 # delimiter option (default = space characters)55 my $delimiter = $args->{delimiter} || '';56 83 # case_sensitive option (0/1, default = 1) 57 84 my $case_sensitive = defined $args->{case_sensitive} ? … … 65 92 while (my $e = $iter->()) { 66 93 next unless $e->keywords; 67 my @keywords = split_keywords($e->keywords, $ delimiter, $case_sensitive);94 my @keywords = split_keywords($e->keywords, $case_sensitive); 68 95 foreach my $keyword (@keywords) { 69 96 if (exists($all_keywords{$keyword})) { … … 121 148 return '' unless $e->keywords; 122 149 123 # delimiter option (default = space characters)124 my $delimiter = $args->{delimiter} || '';125 150 # case_sensitive option (0/1, default = 1) 126 151 my $case_sensitive = defined $args->{case_sensitive} ? 127 152 $args->{case_sensitive} : 1; 128 153 129 my @keywords = split_keywords($e->keywords, $ delimiter, $case_sensitive);154 my @keywords = split_keywords($e->keywords, $case_sensitive); 130 155 my $total = scalar(@keywords); 131 156 $ctx->stash('all_keywords_total', $total); … … 185 210 direction => $sort_order }); 186 211 my @entries; 187 my @patterns = split_ keywords($keywords, $delimiter, $case_sensitive);212 my @patterns = split_args($keywords, $delimiter, $case_sensitive); 188 213 my $i = 0; 189 214 while (my $e = $iter->()) { 190 215 last if $lastn && $i >= $lastn; 191 216 next unless $e->keywords; 192 my @keywords = split_keywords($e->keywords, $ delimiter, $case_sensitive);217 my @keywords = split_keywords($e->keywords, $case_sensitive); 193 218 my $check = 1; 194 219 foreach my $pattern (@patterns) { … … 235 260 return '' unless $entry->keywords; 236 261 237 # delimiter option (default = space characters)238 my $delimiter = $args->{delimiter} || '';239 262 # case_sensitive option (0/1, default = 0) 240 263 my $case_sensitive = $args->{case_sensitive} || 0; … … 242 265 my $lastn = $args->{lastn} || 0; 243 266 244 my @patterns = split_keywords($entry->keywords, $ delimiter, $case_sensitive);267 my @patterns = split_keywords($entry->keywords, $case_sensitive); 245 268 246 269 my $blog_id = $ctx->stash('blog_id'); … … 255 278 next unless $e->keywords; 256 279 next if $e->id == $entry->id; 257 my @keywords = split_keywords($e->keywords, $ delimiter, $case_sensitive);280 my @keywords = split_keywords($e->keywords, $case_sensitive); 258 281 my $count = 0; 259 282 foreach my $pattern (@patterns) { … … 294 317 } 295 318 296 eval ("use MT::XSearch;");297 if (!$@) { 319 eval { 320 require MT::XSearch; 298 321 MT::XSearch->add_search_plugin('AllKeywords', { 299 322 label => 'Keyword Search', … … 301 324 on_execute => \&xsearch_on_execute, 302 325 on_stash => \&xsearch_on_stash }); 303 } 326 }; 304 327 305 328 sub xsearch_on_stash { … … 319 342 my $case_sensitive = $args->{case_sensitive} || 0; 320 343 321 my @patterns = split_ keywords($args->{search}, $delimiter, $case_sensitive);344 my @patterns = split_args($args->{search}, $delimiter, $case_sensitive); 322 345 my $iter = MT::Entry->load_iter({ blog_id => $blog_id, 323 346 status => MT::Entry::RELEASE() }, … … 327 350 while (my $e = $iter->()) { 328 351 next unless $e->keywords; 329 my @keywords = split_keywords($e->keywords, $ delimiter, $case_sensitive);352 my @keywords = split_keywords($e->keywords, $case_sensitive); 330 353 my $check = 1; 331 354 foreach my $pattern (@patterns) {
![(please configure the [header_logo] section in trac.ini)](/public/chrome/common/trac_banner.png)