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 wrap: on
line diff
--- a/s4-blog.sh	Tue Oct 11 23:34:51 2016 +0859
+++ b/s4-blog.sh	Thu Oct 13 09:35:26 2016 +0859
@@ -441,13 +441,29 @@
   echo '</table>'
 }
 searchart() {
-  kwd=`getpar kwd`
+  kwd=`getpar kwd|nkf -wZ1`		# Convert Zenkaku-SPC to ASCII-SPC
+  kwdgrp=""
   if [ -z "$kwd" ]; then
     echo "検索語を指定してください" | html p; return
   fi
-  for k in `echo "$kwd" | sed "s/'/''/g"`; do
-    kc=$kc${kc:+" AND "}"s.text LIKE '%$k%'"
-  done
+  if expr x"$kwd" : 'x#[1-9][0-9]*$' >/dev/null 1>&2; then
+    # Like '#1234', assume as artID
+    rowid=$((${kwd#\#} + 0))	# Force to be a number
+    kc="a.rowid = $rowid"
+  else
+    for k in `echo "$kwd" | sed "s/'/''/g"`; do
+      if expr x"$k" : 'x@[1-9][][0-9]*-[][0-9:-]*$' >/dev/null 1>&2; then
+	# Like '@2016-10-10', expands to "s.ctime GLOB '@2016-10-10'"
+	ctime=${k#@}
+	# Not sure GROUP BY a.blogid is comfortable for searchers...?
+	kc=$kc${kc:+" AND "}"s.ctime GLOB '${ctime}*'"
+	##### kwdgrp=" GROUP BY a.blogid"
+      else
+	kc=$kc${kc:+" AND "}"s.text LIKE '%$k%'"
+      fi
+    done
+  fi
+  echo kc=$kc
   kwd=`echo "$kwd"|htmlescape`
   owner=`getpar owner`
   owner=${owner:-$1}
@@ -472,9 +488,9 @@
 		  substr(x.ctime, 0, 11) as DATE,
 		  substr(x.text, 0, 78) as TEXT
        FROM (SELECT blg.rid,blg.*,bs.val as title
-	     FROM readableblogs blg join blog_s bs
-	          ON blg.id=bs.id and bs.key='title') b
-	  join
+	     FROM readableblogs blg JOIN blog_s bs
+	          ON blg.id=bs.id AND bs.key='title') b
+	  JOIN
 	    (SELECT a.id,
 		    a.blogid,
 		    s.ctime,
@@ -485,9 +501,9 @@
 			  max(CASE key WHEN 'ctime' THEN val END) ctime,
 			  max(CASE key WHEN 'text' THEN val END) text
 		   FROM article_s GROUP BY id) s
-	       ON a.id=s.id where $kc)
-	     x on b.id=x.blogid
-	 where b.id in (select id from blog_s $cond)
+	       ON a.id=s.id WHERE $kc$kwdgrp)
+	     x ON b.id=x.blogid
+	 WHERE b.id IN (SELECT id FROM blog_s $cond)
        ORDER by x.ctime DESC;"
   sedopt="s,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\
  href=\"?replyblog+\1\">VIEW</a></TD>,"
--- a/s4-funcs.sh	Tue Oct 11 23:34:51 2016 +0859
+++ b/s4-funcs.sh	Thu Oct 13 09:35:26 2016 +0859
@@ -1459,10 +1459,13 @@
 }
 
 search_form() {
+  help="(1)空白区切りの単語で本文検索
+(2)#番号 で記事ID検索
+(3)@YYYY-MM-DD 日付け(シェルパターン可)で日付け検索"
   cat<<-EOF
 	<div class="fr">
 	<form action="$myname">
-	<input type="text" name="kwd" value=""
+	<input type="text" name="kwd" value="" title="$help"
 	 placeholder=" 全記事からの検索 " width="10">
 	<input type="hidden" name="stage" value="searchart">
 	</form>

yatex.org