(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))
)
//
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);
}
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);
}
case '3':
$('EditWikiPane').style.display='none';
$('EditOprPane').style.display='block';
- readWiki('special-Diff',undefined,'EditOprPane');
+ readWiki('special-Diff',{'Target':Page},'EditOprPane');
break;
}
}
(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)
+ )
+)
(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))
)
)
<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>