OSDN Git Service

next.
[hmh/wiki.git] / lib.ml
diff --git a/lib.ml b/lib.ml
index 7fbed08..dd5fce1 100644 (file)
--- a/lib.ml
+++ b/lib.ml
@@ -1,52 +1,70 @@
 (defun authorize (proj)
-       (setvar 'uid (remote-user))
-       (sql "select a.UID,Login,Name,case when b.UID notNull then '1' else '' end from Member a left join Admin b where a.UID=:uid"
-               :bind ':uid uid
-               :answer '(UID Login Name Admin))
-
-       (sql "select PID,PublicProj from Project where Proj=:proj"
-               :bind ':proj proj
-               :answer '(PID Public))
-       (if (emptyp PID)
-                       (sql "select PID,Proj,PublicProj from Project where Proj='Main'"
-                               :answer '(PID Proj Public))
-       )
-       (if (not-emptyp Public)
-                       (setvar 'Reader "1")
-       )
-       (if (not-emptyp UID)
-                       (progn
-                               (if (not-emptyp Public)
-                                               (setvar 'Reader "1"
-                                                               'Writer "1")
-                                       (sql "select Reader,Writer from ProjectMember where PID=:pid and UID=:uid"
-                                               :bind (list ':pid PID ':uid UID)
-                                               :answer '(Reader Writer))
-                               )
+       (sql "begin")
+       (progn
+               (sql "select PID,Proj,PublicProj from Project where Proj=:proj"
+                       :bind ':proj proj
+                       :answer '(PID Proj Public))
+               (if (emptyp PID)
+                               (sql "select PID,Proj,PublicProj from Project where Proj='Main'"
+                                       :answer '(PID Proj Public))
+               )
+;
+               (if (not-emptyp Public)
+                               (setvar 'Reader "1")
+               )
+;
+               (set-wikivar 'PID 'Proj 'Public 'Reader)
+;
+               (setvar 'uid (remote-user))
+               (sql "select UID,Login,Name,Pron,Org,Mail from Member where UID=:uid"
+                       :bind ':uid uid
+                       :answer '(UID Login Name Pron Org Mail))
+               (set-wikivar 'UID 'Login 'Name 'Pron 'Org 'Mail)
+               (if (emptyp UID)
+                               (break)
+               )
+;
+               (sql "select '1' from Permission where UID=:uid and Realm='Admin'"
+                       :bind ':uid UID
+                       :answer '(Admin))
+;
+               (if (not-emptyp Public)
+                               (setvar 'Reader "1"
+                                               'Writer "1")
+                       (sql "select Realm from ProjectMember where PID=:pid and UID=:uid"
+                               :bind (list ':pid PID ':uid UID)
+                               :@answer '(realm))
+                       (doarray '(realm)
+                               (setvar 'v (concat "Auth_" realm)
+                                               v "1")
+                               (set-wikivar v)
                        )
+                       (setvar 'Reader (getvar "Auth_Reader")
+                                       'Writer (getvar "Auth_Writer"))
+               )
+;
+               (set-wikivar 'Admin 'Reader 'Writer)
        )
-       (set-wikivar 'UID 'Login 'Name 'Admin 'PID 'Public 'Reader 'Writer)
+       (sql "end")
 )
 
 (defun wiki-page (pid page)
-       (if Reader
-               (let (wid date title text)
-                       (sql "select a.WID,a.Title,a.WikiText,b.Date from Wiki a,WikiIndex b using(WID) where b.PID=:pid and b.Page=:page"
-                               :bind (list ':pid pid ':page page)
-                               :answer '(wid title text date))
-                       (if (and        (emptyp wid)
-                                               (regex "^-special-" page))
-                                       (sql "select a.WID,a.Title,a.WikiText,b.Date from Wiki a,WikiIndex b using(WID),Project c using(PID) where c.Proj='Main' and b.Page=:page"
-                                               :bind (list ':page page)
-                                               :answer '(wid title text date))
-                       )
+       (let (wid date title text)
+               (sql "select a.WID,a.Title,a.WikiText,b.Date from Wiki a,WikiIndex b using(WID) where b.PID=:pid and b.Page=:page"
+                       :bind (list ':pid pid ':page page)
+                       :answer '(wid title text date))
+               (if (and        (emptyp wid)
+                                       (regex "^-special-" page))
+                               (sql "select a.WID,a.Title,a.WikiText,b.Date from Wiki a,WikiIndex b using(WID),Project c using(PID) where c.Proj='Main' and b.Page=:page"
+                                       :bind (list ':page page)
+                                       :answer '(wid title text date))
+               )
 
-                       (if (and (emptyp wid) Edit)
-                                       (setvar 'title page
-                                                       'text (concat "=" page "=\n"))
-                       )
-                       (list date title text)
+               (if (and (emptyp wid) Edit)
+                               (setvar 'title page
+                                               'text (concat "=" page "=\n"))
                )
+               (list date title text)
        )
 )
 
 )
 
 (defun wiki-diff (page otime ntime vo1 vo2 vn1 vn2)
-       (let (to tn)
-               ($sqlite3 'database
-                       (sql
-               )
+       (let (otitle otext ntitle ntext)
+               (setvar '(otitle otext) (wiki-page-date page otime)
+                       '(ntitle ntext) (wiki-page-date page ntime)
+                       (list (concat '@ vo1) (concat '@ vo2) (concat '@ vn1) (concat '@ vn2)) (diff otext ntext))
        )
 )