OSDN Git Service

next. master
authorvisor <visor@users.sourceforge.jp>
Sun, 7 Jun 2009 22:15:19 +0000 (07:15 +0900)
committervisor <visor@users.sourceforge.jp>
Sun, 7 Jun 2009 22:15:19 +0000 (07:15 +0900)
_initialize/db.hml
i/wiki.js
lib-wikifunc.ml
lib.ml
proj/page/wiki.html

index 8dac84f..f9e086d 100644 (file)
@@ -16,26 +16,31 @@ ml_debug
 
        (sql "create table CategoryList(CID integer primary key autoincrement,PID integer,CName text,unique(PID,CName) on conflict ignore)")
        (sql "create table WikiCategory(PID integer,IID integer,CID integer,unique(PID,IID,CID) on conflict ignore)")
-
-       (sql "create table Project(PID integer primary key autoincrement,Proj text,PublicProj text)")
-
-       (sql "create table Member(UID integer primary key autoincrement unique on conflict replace,Login text,CPW text,Name text,Pron text,Org text,Mail text)")
-       (sql "create table Admin(UID integer unique on conflict ignore)")
-
-       (sql "create table ProjectMember(PID integer,UID integer,Reader text,Writer text,unique(PID,UID) on conflict ignore)")
+;;
+       (sql "create table Project(PID integer primary key autoincrement,Proj text,PublicProj text,ProjOwner integer)")
+       (sql "create table ProjectMember(PID integer,UID integer,Realm text,unique(PID,UID,Realm) on conflict ignore)")
+;;
+       (sql "create table Member(UID integer primary key autoincrement unique on conflict replace,Login text unique on conflict ignore,CPW text,Name text,Pron text,Org text,Mail text)")
+       (sql "create table Permission(UID integer,Realm text,unique(UID,Realm))")
 
        (sql "end")
 )
 
 ($sqlite3 'database
+;
        (sql "insert into Member(Login,Name,CPW) values(:login,:name,:cpw)"
                :bind ':login "admin" :bind ':name "administrator" :bind ':cpw (password-crypt "admin"))
        (setvar 'uid (rowid))
-       (sql "insert into Admin(UID) select UID from Member where Login=:login"
-               :bind ':login "admin")
-
+; Admin
+       (sql "insert into Permission(UID,Realm) values(:uid,'Admin')"
+               :bind ':uid uid)
+;
+       (sql "insert into Member(Login,Name,CPW) values(:login,:name,:cpw)"
+               :bind ':login "user" :bind ':name "test user" :bind ':cpw (password-crypt "user"))
+       (setvar 'uid (rowid))
+;
        (sql "insert into Project(Proj,PublicProj) values('Main','1')")
        (setvar 'pid (rowid))
-       (sql "insert into ProjectMember(PID,UID,Reader,Writer) values(:pid,:uid,'1','1')"
-               :bind (list ':pid pid ':uid uid))
+       (sql "insert into ProjectMember(PID,UID,Realm) select :pid,UID,'Admin' from Member where Login='admin'"
+               :bind (list ':pid pid))
 )
index fc44bc6..d18004b 100644 (file)
--- a/i/wiki.js
+++ b/i/wiki.js
@@ -58,7 +58,8 @@ function callWiki(page,data,func){
 //
 function readWiki(page,data,target){
        var f=function(r){
-               $(target).update(r.responseText);
+//             $(target).update(r.responseText);
+               showWikiPane(r.responseXML.documentElement,target);
        };
        callWiki(page,data,f);
 }
@@ -71,6 +72,11 @@ function showWiki(xml){
        if(html) $('WikiPane').innerHTML=html.stringValue();
        if(lu&&lu.value.size()>0) $('LastUpdate').innerHTML=lu.stringValue();
 }
+function showWikiPane(xml,target){
+       var ctx=new ExprContext(xml);
+       var html=xpathParse('/WikiText/Html/text()').evaluate(ctx);
+       if(target) $(target).innerHTML=html.stringValue();
+}
 function showWikiHandler(r){
        showWiki(r.responseXML.documentElement);
 }
@@ -169,7 +175,7 @@ function opEditSel(sel){
        case '3':
                $('EditWikiPane').style.display='none';
                $('EditOprPane').style.display='block';
-               readWiki('special-Diff',undefined,'EditOprPane');
+               readWiki('special-Diff',{'Target':Page},'EditOprPane');
                break;
        }
 }
index ba9309e..db3de0a 100644 (file)
 (defun-wiki-command WikiSearch (key vpage vtitle vsp)
        (wiki-search key (wikivar vpage) (wikivar vtitle) (wikivar vsp))
 )
+
+(defun-wiki-command WikiHistory (page vdate)
+       (if Reader
+                       ($sqlite3 'database
+                               (wiki-page-backup-list page (wikivar vdate))
+                       )
+       )
+)
+
+(defun-wiki-command WikiDiff (page otime ntime vo1 vo2 vn1 vn2)
+       (if Reader
+                       (wiki-diff page otime ntime vo1 vo2 vn1 vn2)
+       )
+)
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))
        )
 )
index db59600..1cca858 100644 (file)
@@ -18,7 +18,7 @@ var Page='[[js:Page]]';
 <body>
 <div class="Wiki [[Edit?1:MainPaneS||MainPane]]" id="MainPane">
 <div id="WikiPane">[[wiki:WikiText]]</div>
-<div id="LastUpdate">Last Update: [[yy]].[[mm]].[[dd]]</div>
+<div id="LastUpdate">[[Date!?:Last Update: [[yy]].[[mm]].[[dd]]]]</div>
 </div>
 <div id="TopMenuPane">[[wiki:TopMenuText]]</div>
 <div id="SideMenuPane">[[wiki:SideMenuText]]</div>