s4

changeset 301:ba0730073d6f

Add (1)article-ID search, (2)DATE search
author HIROSE Yuuji <yuuji@gentei.org>
date Thu, 13 Oct 2016 09:35:26 +0859
parents 973fb0ea5c2f
children 9edf8e87e198
files s4-blog.sh s4-funcs.sh
diffstat 2 files changed, 30 insertions(+), 11 deletions(-) [+]
line diff
     1.1 --- a/s4-blog.sh	Tue Oct 11 23:34:51 2016 +0859
     1.2 +++ b/s4-blog.sh	Thu Oct 13 09:35:26 2016 +0859
     1.3 @@ -441,13 +441,29 @@
     1.4    echo '</table>'
     1.5  }
     1.6  searchart() {
     1.7 -  kwd=`getpar kwd`
     1.8 +  kwd=`getpar kwd|nkf -wZ1`		# Convert Zenkaku-SPC to ASCII-SPC
     1.9 +  kwdgrp=""
    1.10    if [ -z "$kwd" ]; then
    1.11      echo "検索語を指定してください" | html p; return
    1.12    fi
    1.13 -  for k in `echo "$kwd" | sed "s/'/''/g"`; do
    1.14 -    kc=$kc${kc:+" AND "}"s.text LIKE '%$k%'"
    1.15 -  done
    1.16 +  if expr x"$kwd" : 'x#[1-9][0-9]*$' >/dev/null 1>&2; then
    1.17 +    # Like '#1234', assume as artID
    1.18 +    rowid=$((${kwd#\#} + 0))	# Force to be a number
    1.19 +    kc="a.rowid = $rowid"
    1.20 +  else
    1.21 +    for k in `echo "$kwd" | sed "s/'/''/g"`; do
    1.22 +      if expr x"$k" : 'x@[1-9][][0-9]*-[][0-9:-]*$' >/dev/null 1>&2; then
    1.23 +	# Like '@2016-10-10', expands to "s.ctime GLOB '@2016-10-10'"
    1.24 +	ctime=${k#@}
    1.25 +	# Not sure GROUP BY a.blogid is comfortable for searchers...?
    1.26 +	kc=$kc${kc:+" AND "}"s.ctime GLOB '${ctime}*'"
    1.27 +	##### kwdgrp=" GROUP BY a.blogid"
    1.28 +      else
    1.29 +	kc=$kc${kc:+" AND "}"s.text LIKE '%$k%'"
    1.30 +      fi
    1.31 +    done
    1.32 +  fi
    1.33 +  echo kc=$kc
    1.34    kwd=`echo "$kwd"|htmlescape`
    1.35    owner=`getpar owner`
    1.36    owner=${owner:-$1}
    1.37 @@ -472,9 +488,9 @@
    1.38  		  substr(x.ctime, 0, 11) as DATE,
    1.39  		  substr(x.text, 0, 78) as TEXT
    1.40         FROM (SELECT blg.rid,blg.*,bs.val as title
    1.41 -	     FROM readableblogs blg join blog_s bs
    1.42 -	          ON blg.id=bs.id and bs.key='title') b
    1.43 -	  join
    1.44 +	     FROM readableblogs blg JOIN blog_s bs
    1.45 +	          ON blg.id=bs.id AND bs.key='title') b
    1.46 +	  JOIN
    1.47  	    (SELECT a.id,
    1.48  		    a.blogid,
    1.49  		    s.ctime,
    1.50 @@ -485,9 +501,9 @@
    1.51  			  max(CASE key WHEN 'ctime' THEN val END) ctime,
    1.52  			  max(CASE key WHEN 'text' THEN val END) text
    1.53  		   FROM article_s GROUP BY id) s
    1.54 -	       ON a.id=s.id where $kc)
    1.55 -	     x on b.id=x.blogid
    1.56 -	 where b.id in (select id from blog_s $cond)
    1.57 +	       ON a.id=s.id WHERE $kc$kwdgrp)
    1.58 +	     x ON b.id=x.blogid
    1.59 +	 WHERE b.id IN (SELECT id FROM blog_s $cond)
    1.60         ORDER by x.ctime DESC;"
    1.61    sedopt="s,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\
    1.62   href=\"?replyblog+\1\">VIEW</a></TD>,"
     2.1 --- a/s4-funcs.sh	Tue Oct 11 23:34:51 2016 +0859
     2.2 +++ b/s4-funcs.sh	Thu Oct 13 09:35:26 2016 +0859
     2.3 @@ -1459,10 +1459,13 @@
     2.4  }
     2.5  
     2.6  search_form() {
     2.7 +  help="(1)空白区切りの単語で本文検索
     2.8 +(2)#番号 で記事ID検索
     2.9 +(3)@YYYY-MM-DD 日付け(シェルパターン可)で日付け検索"
    2.10    cat<<-EOF
    2.11  	<div class="fr">
    2.12  	<form action="$myname">
    2.13 -	<input type="text" name="kwd" value=""
    2.14 +	<input type="text" name="kwd" value="" title="$help"
    2.15  	 placeholder=" 全記事からの検索 " width="10">
    2.16  	<input type="hidden" name="stage" value="searchart">
    2.17  	</form>