aboutsummaryrefslogtreecommitdiff
path: root/src/cgi-bin/nea.scm4
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-06-14 23:56:45 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-06-14 23:56:45 +0300
commit1ffd88231386c104474103fe641cad7fa535f3ec (patch)
treefab5115a97e63cc59d9bf5bfd38b6d60cf9509c6 /src/cgi-bin/nea.scm4
parent8c1de36d1f8b27fb946dac15e725c93ec57c1538 (diff)
downloadellinika-1ffd88231386c104474103fe641cad7fa535f3ec.tar.gz
ellinika-1ffd88231386c104474103fe641cad7fa535f3ec.tar.bz2
Use (ellinika sql) in dict and nea.
* src/cgi-bin/dict.scm4: Use (ellinika sql) * src/cgi-bin/nea.scm4: Likewise * src/ellinika/sql.scm: Re-export sql-catch-failure and sql-ignore-failure.
Diffstat (limited to 'src/cgi-bin/nea.scm4')
-rw-r--r--src/cgi-bin/nea.scm4192
1 files changed, 86 insertions, 106 deletions
diff --git a/src/cgi-bin/nea.scm4 b/src/cgi-bin/nea.scm4
index e7f14a4..9c940f6 100644
--- a/src/cgi-bin/nea.scm4
+++ b/src/cgi-bin/nea.scm4
@@ -1,5 +1,5 @@
;;;; News page for Ellinika
-;;;; Copyright (C) 2004, 2005, 2006, 2007, 2010 Sergey Poznyakoff
+;;;; Copyright (C) 2004, 2005, 2006, 2007, 2010, 2011 Sergey Poznyakoff
;;;;
;;;; This program is free software; you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
@@ -20,8 +20,9 @@
(use-modules ifelse(IFACE,[CGI],(www cgi),(guile-user))
(ice-9 rdelim)
- (gamma sql)
(xmltools dict)
+ (ellinika elmorph)
+ (ellinika sql)
(ellinika xlat)
(ellinika cgi)
(ellinika i18n))
@@ -35,7 +36,6 @@ ifelse(IFACE,[CGI],(cgi:init))
(ellinika-cgi-init tmpl)
-(define conn #f)
(define article #f)
(define accepted-lang (map
(lambda (s)
@@ -86,16 +86,14 @@ ifelse(IFACE,[CGI],(cgi:init))
(string-append "(" str ")")
(loop (string-append str
(if (string-null? str) "'" ",'")
- (car input-list) "'")
+ (utf8-escape (car input-list)) "'")
(cdr input-list)))))
-(define (get-sql-lang conn ident langlist)
- (let ((res (map car (sql-query conn
- (string-append
- "SELECT lang "
- "FROM newsart "
- "WHERE ident=" ident " "
- "AND lang in " (make-sql-list langlist))))))
+(define (get-sql-lang ident langlist)
+ (let ((res (map car
+ (ellinika:sql-query
+ "SELECT lang FROM newsart WHERE ident=~N AND lang in ~N"
+ ident (make-sql-list langlist)))))
(cond
((null? res)
#f)
@@ -123,11 +121,9 @@ ifelse(IFACE,[CGI],(cgi:init))
(set! start 0))))
(call-with-current-continuation
(lambda (return)
- (let ((tuples (sql-query
- conn
- (format #f
- "SELECT date,ident FROM news ORDER BY 1 DESC LIMIT ~A,~A"
- start nea-max-rows))))
+ (let ((tuples (ellinika:sql-query
+ "SELECT date,ident FROM news ORDER BY 1 DESC LIMIT ~N,~N"
+ start nea-max-rows)))
(cond
((null? tuples)
(cons start (if fwd (reverse result) result)))
@@ -137,16 +133,14 @@ ifelse(IFACE,[CGI],(cgi:init))
(ctr 0))
(for-each
(lambda (entry)
- (let ((lang (get-sql-lang conn (list-ref entry 1) langlist)))
+ (let ((lang (get-sql-lang (list-ref entry 1) langlist)))
(set! ctr (1+ ctr))
(if lang
- (let ((hdr (sql-query conn
- (string-append
- "SELECT header,lang "
- "FROM newsart "
- "WHERE ident=" (list-ref entry 1) " "
- "AND lang='" lang "' "
- "LIMIT 1"))))
+ (let ((hdr (ellinika:sql-query
+ "SELECT header,lang\
+ FROM newsart\
+ WHERE ident=~N AND lang=~Q LIMIT 1"
+ (list-ref entry 1) lang)))
(cond
(hdr
(set! result (cons
@@ -177,7 +171,8 @@ ifelse(IFACE,[CGI],(cgi:init))
(let* ((count (catch #t
(lambda ()
(string->number
- (caar (sql-query conn "SELECT count(*) FROM news"))))
+ (caar (ellinika:sql-query
+ "SELECT count(*) FROM news"))))
(lambda args
0)))
(from (catch #t
@@ -374,74 +369,63 @@ ifelse(IFACE,[CGI],(cgi:init))
(display " </channel>
</rss>"))
-(define (nea-sql-connect)
- (let ((conn (sql-open-connection ellinika-sql-connection)))
- (sql-query conn "SET NAMES utf8")
- conn))
-
(define (nea-rss)
(nea-rss-header)
(catch 'gsql-error
(lambda ()
- (let ((conn (nea-sql-connect)))
- (for-each
- (lambda (tuple)
- (display "<item>\n")
- (display "<pubDate>")
- (display (list-ref tuple 0))
- (display "</pubDate>\n")
- (display "<title>")
- (let ((title (sql-query conn
- (string-append
- "SELECT header "
- "FROM newsart "
- "WHERE ident=" (list-ref tuple 2) " "
- "AND lang='"
- (get-sql-lang conn
- (list-ref tuple 2)
- (make-my-lang-list))
- "' "
- "LIMIT 1"))))
- (display (if (not (null? title))
- (caar title)
- (list-ref tuple 0))))
- (display "</title>\n")
- (display "<link>")
- (display (string-append
- (string-downcase cgi-server-protocol-name)
- "://"
- cgi-server-hostname
- "/"
- (make-cgi-name cgi-script-name
- "timestamp" (list-ref tuple 1))))
- (display "</link>\n")
- (display "</item>\n"))
- (sql-query
- conn
- (string-append
- "SELECT date,unix_timestamp(date),ident "
- "FROM news "
- "ORDER BY 1 DESC LIMIT 10")))))
+ (ellinika:sql-connect ellinika-sql-connection)
+ (for-each
+ (lambda (tuple)
+ (display "<item>\n")
+ (display "<pubDate>")
+ (display (list-ref tuple 0))
+ (display "</pubDate>\n")
+ (display "<title>")
+ (let ((title (ellinika:sql-query
+ "SELECT header\
+ FROM newsart\
+ WHERE ident=~N AND lang=~Q LIMIT 1"
+ (list-ref tuple 2)
+ (get-sql-lang (list-ref tuple 2)
+ (make-my-lang-list)))))
+ (display (if (not (null? title))
+ (caar title)
+ (list-ref tuple 0))))
+ (display "</title>\n")
+ (display "<link>")
+ (display (string-append
+ (string-downcase cgi-server-protocol-name)
+ "://"
+ cgi-server-hostname
+ "/"
+ (make-cgi-name cgi-script-name
+ "timestamp" (list-ref tuple 1))))
+ (display "</link>\n")
+ (display "</item>\n"))
+ (ellinika:sql-query
+ "SELECT date,unix_timestamp(date),ident\
+ FROM news\
+ ORDER BY 1 DESC LIMIT 10")))
(lambda (key err descr)
(sql-error-handler err descr)))
(nea-rss-footer))
(define (get-article-by-timestamp ts)
- (let ((tuples (sql-query
- conn
- "SELECT date,unix_timestamp(date),ident FROM news WHERE unix_timestamp(date)=" ts)))
+ (let ((tuples (ellinika:sql-query
+ "SELECT date,unix_timestamp(date),ident FROM news\
+ WHERE unix_timestamp(date)=~Q" ts)))
(cond
(tuples
(let* ((res (car tuples))
- (lang (get-sql-lang conn (list-ref res 2) (make-my-lang-list)))
- (art (sql-query conn
- (string-append
- "SELECT header,text,lang "
- "FROM newsart "
- "WHERE ident=" (list-ref res 2) " "
- "AND lang='" lang "' "
- "LIMIT 1"))))
+ (lang (get-sql-lang (list-ref res 2) (make-my-lang-list)))
+ (art (ellinika:sql-query
+ "SELECT header,text,lang\
+ FROM newsart\
+ WHERE ident=~N\
+ AND lang=~Q\
+ LIMIT 1"
+ (list-ref res 2) lang)))
(append
(list (list-ref res 0)
(list-ref res 1))
@@ -461,36 +445,32 @@ ifelse(IFACE,[CGI],(cgi:init))
(lambda ()
ifelse(IFACE,[CGI],dnl
(display ["Content-type: text/html; charset=utf-8\r\n\r\n"]))
- (set! conn (nea-sql-connect))
+ (ellinika:sql-connect ellinika-sql-connection)
(cond
((or (cgi:value "timestamp") (cgi:value "id"))
- (let ((tuples (sql-query
- conn
- (string-append
- "SELECT date,unix_timestamp(date),ident "
- "FROM news "
- "WHERE "
- (cond
- ((cgi:value "timestamp") =>
- (lambda (ts)
- (string-append "unix_timestamp(date)=" ts)))
- ((cgi:value "id") =>
- (lambda (id)
- (string-append "ident=" id))))))))
-
+ (let ((tuples
+ (cond
+ ((cgi:value "timestamp") =>
+ (lambda (ts)
+ (ellinika:sql-query
+ "SELECT date,unix_timestamp(date),ident\
+ FROM news WHERE unix_timestamp(date)=~Q" ts)))
+ ((cgi:value "id") =>
+ (lambda (id)
+ (ellinika:sql-query
+ "SELECT date,unix_timestamp(date),ident\
+ FROM news WHERE ident=~N" id))))))
+
(if (not (null? tuples))
(let* ((res (car tuples))
- (lang (get-sql-lang conn
- (list-ref res 2)
+ (lang (get-sql-lang (list-ref res 2)
(make-my-lang-list)))
- (art (sql-query
- conn
- (string-append
- "SELECT header,text,lang "
- "FROM newsart "
- "WHERE ident=" (list-ref res 2) " "
- "AND lang='" lang "' "
- "LIMIT 1"))))
+ (art (ellinika:sql-query
+ "SELECT header,text,lang\
+ FROM newsart\
+ WHERE ident=~N AND lang=~Q LIMIT 1"
+ (list-ref res 2)
+ lang)))
(set! article (append
(list (list-ref res 0)
(list-ref res 1))
@@ -500,7 +480,7 @@ ifelse(IFACE,[CGI],(cgi:init))
(template-file target-language tmpl)
nea-html)
- (sql-close-connection conn))
+ (ellinika:sql-disconnect))
(lambda (key err descr)
(with-input-from-file

Return to:

Send suggestions and report system problems to the System administrator.