Fossil SCM

Add the wiki-moderator and ticket-moderator permissions. Not yet used.

drh 2012-10-31 19:48 trunk
Commit fc0bffd995d8ee0a740d458c97f6b8e5db068a86
+4 -1
--- src/login.c
+++ src/login.c
@@ -992,17 +992,19 @@
992992
993993
case 'j': g.perm.RdWiki = 1; break;
994994
case 'k': g.perm.WrWiki = g.perm.RdWiki = g.perm.ApndWiki =1; break;
995995
case 'm': g.perm.ApndWiki = 1; break;
996996
case 'f': g.perm.NewWiki = 1; break;
997
+ case 'l': g.perm.ModWiki = 1; break;
997998
998999
case 'e': g.perm.RdAddr = 1; break;
9991000
case 'r': g.perm.RdTkt = 1; break;
10001001
case 'n': g.perm.NewTkt = 1; break;
10011002
case 'w': g.perm.WrTkt = g.perm.RdTkt = g.perm.NewTkt =
10021003
g.perm.ApndTkt = 1; break;
10031004
case 'c': g.perm.ApndTkt = 1; break;
1005
+ case 'q': g.perm.ModTkt = 1; break;
10041006
case 't': g.perm.TktFmt = 1; break;
10051007
case 'b': g.perm.Attach = 1; break;
10061008
case 'x': g.perm.Private = 1; break;
10071009
10081010
/* The "u" privileges is a little different. It recursively
@@ -1058,15 +1060,16 @@
10581060
case 'g': rc = g.perm.Clone; break;
10591061
case 'h': rc = g.perm.Hyperlink; break;
10601062
case 'i': rc = g.perm.Write; break;
10611063
case 'j': rc = g.perm.RdWiki; break;
10621064
case 'k': rc = g.perm.WrWiki; break;
1065
+ case 'l': rc = g.perm.ModWiki; break;
10631066
case 'm': rc = g.perm.ApndWiki; break;
10641067
case 'n': rc = g.perm.NewTkt; break;
10651068
case 'o': rc = g.perm.Read; break;
10661069
case 'p': rc = g.perm.Password; break;
1067
- /* case 'q': */
1070
+ case 'q': rc = g.perm.ModTkt; break;
10681071
case 'r': rc = g.perm.RdTkt; break;
10691072
case 's': rc = g.perm.Setup; break;
10701073
case 't': rc = g.perm.TktFmt; break;
10711074
/* case 'u': READER */
10721075
/* case 'v': DEVELOPER */
10731076
--- src/login.c
+++ src/login.c
@@ -992,17 +992,19 @@
992
993 case 'j': g.perm.RdWiki = 1; break;
994 case 'k': g.perm.WrWiki = g.perm.RdWiki = g.perm.ApndWiki =1; break;
995 case 'm': g.perm.ApndWiki = 1; break;
996 case 'f': g.perm.NewWiki = 1; break;
 
997
998 case 'e': g.perm.RdAddr = 1; break;
999 case 'r': g.perm.RdTkt = 1; break;
1000 case 'n': g.perm.NewTkt = 1; break;
1001 case 'w': g.perm.WrTkt = g.perm.RdTkt = g.perm.NewTkt =
1002 g.perm.ApndTkt = 1; break;
1003 case 'c': g.perm.ApndTkt = 1; break;
 
1004 case 't': g.perm.TktFmt = 1; break;
1005 case 'b': g.perm.Attach = 1; break;
1006 case 'x': g.perm.Private = 1; break;
1007
1008 /* The "u" privileges is a little different. It recursively
@@ -1058,15 +1060,16 @@
1058 case 'g': rc = g.perm.Clone; break;
1059 case 'h': rc = g.perm.Hyperlink; break;
1060 case 'i': rc = g.perm.Write; break;
1061 case 'j': rc = g.perm.RdWiki; break;
1062 case 'k': rc = g.perm.WrWiki; break;
 
1063 case 'm': rc = g.perm.ApndWiki; break;
1064 case 'n': rc = g.perm.NewTkt; break;
1065 case 'o': rc = g.perm.Read; break;
1066 case 'p': rc = g.perm.Password; break;
1067 /* case 'q': */
1068 case 'r': rc = g.perm.RdTkt; break;
1069 case 's': rc = g.perm.Setup; break;
1070 case 't': rc = g.perm.TktFmt; break;
1071 /* case 'u': READER */
1072 /* case 'v': DEVELOPER */
1073
--- src/login.c
+++ src/login.c
@@ -992,17 +992,19 @@
992
993 case 'j': g.perm.RdWiki = 1; break;
994 case 'k': g.perm.WrWiki = g.perm.RdWiki = g.perm.ApndWiki =1; break;
995 case 'm': g.perm.ApndWiki = 1; break;
996 case 'f': g.perm.NewWiki = 1; break;
997 case 'l': g.perm.ModWiki = 1; break;
998
999 case 'e': g.perm.RdAddr = 1; break;
1000 case 'r': g.perm.RdTkt = 1; break;
1001 case 'n': g.perm.NewTkt = 1; break;
1002 case 'w': g.perm.WrTkt = g.perm.RdTkt = g.perm.NewTkt =
1003 g.perm.ApndTkt = 1; break;
1004 case 'c': g.perm.ApndTkt = 1; break;
1005 case 'q': g.perm.ModTkt = 1; break;
1006 case 't': g.perm.TktFmt = 1; break;
1007 case 'b': g.perm.Attach = 1; break;
1008 case 'x': g.perm.Private = 1; break;
1009
1010 /* The "u" privileges is a little different. It recursively
@@ -1058,15 +1060,16 @@
1060 case 'g': rc = g.perm.Clone; break;
1061 case 'h': rc = g.perm.Hyperlink; break;
1062 case 'i': rc = g.perm.Write; break;
1063 case 'j': rc = g.perm.RdWiki; break;
1064 case 'k': rc = g.perm.WrWiki; break;
1065 case 'l': rc = g.perm.ModWiki; break;
1066 case 'm': rc = g.perm.ApndWiki; break;
1067 case 'n': rc = g.perm.NewTkt; break;
1068 case 'o': rc = g.perm.Read; break;
1069 case 'p': rc = g.perm.Password; break;
1070 case 'q': rc = g.perm.ModTkt; break;
1071 case 'r': rc = g.perm.RdTkt; break;
1072 case 's': rc = g.perm.Setup; break;
1073 case 't': rc = g.perm.TktFmt; break;
1074 /* case 'u': READER */
1075 /* case 'v': DEVELOPER */
1076
+2
--- src/main.c
+++ src/main.c
@@ -70,14 +70,16 @@
7070
char Clone; /* g: clone */
7171
char RdWiki; /* j: view wiki via web */
7272
char NewWiki; /* f: create new wiki via web */
7373
char ApndWiki; /* m: append to wiki via web */
7474
char WrWiki; /* k: edit wiki via web */
75
+ char ModWiki; /* l: approve and publish wiki content (Moderator) */
7576
char RdTkt; /* r: view tickets via web */
7677
char NewTkt; /* n: create new tickets */
7778
char ApndTkt; /* c: append to tickets via the web */
7879
char WrTkt; /* w: make changes to tickets via web */
80
+ char ModTkt; /* q: approve and publish ticket changes (Moderator) */
7981
char Attach; /* b: add attachments */
8082
char TktFmt; /* t: create new ticket report formats */
8183
char RdAddr; /* e: read email addresses or other private data */
8284
char Zip; /* z: download zipped artifact via /zip URL */
8385
char Private; /* x: can send and receive private content */
8486
--- src/main.c
+++ src/main.c
@@ -70,14 +70,16 @@
70 char Clone; /* g: clone */
71 char RdWiki; /* j: view wiki via web */
72 char NewWiki; /* f: create new wiki via web */
73 char ApndWiki; /* m: append to wiki via web */
74 char WrWiki; /* k: edit wiki via web */
 
75 char RdTkt; /* r: view tickets via web */
76 char NewTkt; /* n: create new tickets */
77 char ApndTkt; /* c: append to tickets via the web */
78 char WrTkt; /* w: make changes to tickets via web */
 
79 char Attach; /* b: add attachments */
80 char TktFmt; /* t: create new ticket report formats */
81 char RdAddr; /* e: read email addresses or other private data */
82 char Zip; /* z: download zipped artifact via /zip URL */
83 char Private; /* x: can send and receive private content */
84
--- src/main.c
+++ src/main.c
@@ -70,14 +70,16 @@
70 char Clone; /* g: clone */
71 char RdWiki; /* j: view wiki via web */
72 char NewWiki; /* f: create new wiki via web */
73 char ApndWiki; /* m: append to wiki via web */
74 char WrWiki; /* k: edit wiki via web */
75 char ModWiki; /* l: approve and publish wiki content (Moderator) */
76 char RdTkt; /* r: view tickets via web */
77 char NewTkt; /* n: create new tickets */
78 char ApndTkt; /* c: append to tickets via the web */
79 char WrTkt; /* w: make changes to tickets via web */
80 char ModTkt; /* q: approve and publish ticket changes (Moderator) */
81 char Attach; /* b: add attachments */
82 char TktFmt; /* t: create new ticket report formats */
83 char RdAddr; /* e: read email addresses or other private data */
84 char Zip; /* z: download zipped artifact via /zip URL */
85 char Private; /* x: can send and receive private content */
86
+75 -127
--- src/setup.c
+++ src/setup.c
@@ -215,18 +215,22 @@
215215
@ <td><i>Check-In:</i> Commit new versions in the repository</td></tr>
216216
@ <tr><td valign="top"><b>j</b></td>
217217
@ <td><i>Read-Wiki:</i> View wiki pages</td></tr>
218218
@ <tr><td valign="top"><b>k</b></td>
219219
@ <td><i>Write-Wiki:</i> Edit wiki pages</td></tr>
220
+ @ <tr><td valign="top"><b>l</b></td>
221
+ @ <td><i>Mod-Wiki:</i> Moderator for wiki pages</td></tr>
220222
@ <tr><td valign="top"><b>m</b></td>
221223
@ <td><i>Append-Wiki:</i> Append to wiki pages</td></tr>
222224
@ <tr><td valign="top"><b>n</b></td>
223225
@ <td><i>New-Tkt:</i> Create new tickets</td></tr>
224226
@ <tr><td valign="top"><b>o</b></td>
225227
@ <td><i>Check-Out:</i> Check out versions</td></tr>
226228
@ <tr><td valign="top"><b>p</b></td>
227229
@ <td><i>Password:</i> Change your own password</td></tr>
230
+ @ <tr><td valign="top"><b>q</b></td>
231
+ @ <td><i>Mod-Tkt:</i> Moderator for tickets</td></tr>
228232
@ <tr><td valign="top"><b>r</b></td>
229233
@ <td><i>Read-Tkt:</i> View tickets</td></tr>
230234
@ <tr><td valign="top"><b>s</b></td>
231235
@ <td><i>Setup/Super-user:</i> Setup and configure this website</td></tr>
232236
@ <tr><td valign="top"><b>t</b></td>
@@ -292,20 +296,19 @@
292296
/*
293297
** WEBPAGE: /setup_uedit
294298
*/
295299
void user_edit(void){
296300
const char *zId, *zLogin, *zInfo, *zCap, *zPw;
297
- char *oaa, *oas, *oar, *oaw, *oan, *oai, *oaj, *oao, *oap;
298
- char *oak, *oad, *oac, *oaf, *oam, *oah, *oag, *oae;
299
- char *oat, *oau, *oav, *oab, *oax, *oaz;
300301
const char *zGroup;
301302
const char *zOldLogin;
302
- char *inherit[128];
303303
int doWrite;
304
- int uid;
304
+ int uid, i;
305305
int higherUser = 0; /* True if user being edited is SETUP and the */
306306
/* user doing the editing is ADMIN. Disallow editing */
307
+ char *inherit[128];
308
+ int a[128];
309
+ char *oa[128];
307310
308311
/* Must have ADMIN privleges to access this page
309312
*/
310313
login_check_credentials();
311314
if( !g.perm.Admin ){ login_needed(); return; }
@@ -330,58 +333,19 @@
330333
** modified user record. After writing the user record, redirect
331334
** to the page that displays a list of users.
332335
*/
333336
doWrite = cgi_all("login","info","pw") && !higherUser;
334337
if( doWrite ){
335
- char zCap[50];
336
- int i = 0;
337
- int aa = P("aa")!=0;
338
- int ab = P("ab")!=0;
339
- int ad = P("ad")!=0;
340
- int ae = P("ae")!=0;
341
- int ai = P("ai")!=0;
342
- int aj = P("aj")!=0;
343
- int ak = P("ak")!=0;
344
- int an = P("an")!=0;
345
- int ao = P("ao")!=0;
346
- int ap = P("ap")!=0;
347
- int ar = P("ar")!=0;
348
- int as = g.perm.Setup && P("as")!=0;
349
- int aw = P("aw")!=0;
350
- int ac = P("ac")!=0;
351
- int af = P("af")!=0;
352
- int am = P("am")!=0;
353
- int ah = P("ah")!=0;
354
- int ag = P("ag")!=0;
355
- int at = P("at")!=0;
356
- int au = P("au")!=0;
357
- int av = P("av")!=0;
358
- int ax = P("ax")!=0;
359
- int az = P("az")!=0;
360
- if( aa ){ zCap[i++] = 'a'; }
361
- if( ab ){ zCap[i++] = 'b'; }
362
- if( ac ){ zCap[i++] = 'c'; }
363
- if( ad ){ zCap[i++] = 'd'; }
364
- if( ae ){ zCap[i++] = 'e'; }
365
- if( af ){ zCap[i++] = 'f'; }
366
- if( ah ){ zCap[i++] = 'h'; }
367
- if( ag ){ zCap[i++] = 'g'; }
368
- if( ai ){ zCap[i++] = 'i'; }
369
- if( aj ){ zCap[i++] = 'j'; }
370
- if( ak ){ zCap[i++] = 'k'; }
371
- if( am ){ zCap[i++] = 'm'; }
372
- if( an ){ zCap[i++] = 'n'; }
373
- if( ao ){ zCap[i++] = 'o'; }
374
- if( ap ){ zCap[i++] = 'p'; }
375
- if( ar ){ zCap[i++] = 'r'; }
376
- if( as ){ zCap[i++] = 's'; }
377
- if( at ){ zCap[i++] = 't'; }
378
- if( au ){ zCap[i++] = 'u'; }
379
- if( av ){ zCap[i++] = 'v'; }
380
- if( aw ){ zCap[i++] = 'w'; }
381
- if( ax ){ zCap[i++] = 'x'; }
382
- if( az ){ zCap[i++] = 'z'; }
338
+ char c;
339
+ char zCap[50], zNm[4];
340
+ zNm[0] = 'a';
341
+ zNm[2] = 0;
342
+ for(i=0, c='a'; c<='z'; c++){
343
+ zNm[1] = c;
344
+ a[c] = (c!='s' || g.perm.Setup) && P(zNm)!=0;
345
+ if( a[c] ) zCap[i++] = c;
346
+ }
383347
384348
zCap[i] = 0;
385349
zPw = P("pw");
386350
zLogin = P("login");
387351
if( strlen(zLogin)==0 ){
@@ -457,40 +421,20 @@
457421
*/
458422
zLogin = "";
459423
zInfo = "";
460424
zCap = "";
461425
zPw = "";
462
- oaa = oab = oac = oad = oae = oaf = oag = oah = oai = oaj = oak = oam =
463
- oan = oao = oap = oar = oas = oat = oau = oav = oaw = oax = oaz = "";
426
+ for(i='a'; i<='z'; i++) oa[i] = "";
464427
if( uid ){
465428
zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid);
466429
zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid);
467430
zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid);
468431
zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid);
469
- if( strchr(zCap, 'a') ) oaa = " checked=\"checked\"";
470
- if( strchr(zCap, 'b') ) oab = " checked=\"checked\"";
471
- if( strchr(zCap, 'c') ) oac = " checked=\"checked\"";
472
- if( strchr(zCap, 'd') ) oad = " checked=\"checked\"";
473
- if( strchr(zCap, 'e') ) oae = " checked=\"checked\"";
474
- if( strchr(zCap, 'f') ) oaf = " checked=\"checked\"";
475
- if( strchr(zCap, 'g') ) oag = " checked=\"checked\"";
476
- if( strchr(zCap, 'h') ) oah = " checked=\"checked\"";
477
- if( strchr(zCap, 'i') ) oai = " checked=\"checked\"";
478
- if( strchr(zCap, 'j') ) oaj = " checked=\"checked\"";
479
- if( strchr(zCap, 'k') ) oak = " checked=\"checked\"";
480
- if( strchr(zCap, 'm') ) oam = " checked=\"checked\"";
481
- if( strchr(zCap, 'n') ) oan = " checked=\"checked\"";
482
- if( strchr(zCap, 'o') ) oao = " checked=\"checked\"";
483
- if( strchr(zCap, 'p') ) oap = " checked=\"checked\"";
484
- if( strchr(zCap, 'r') ) oar = " checked=\"checked\"";
485
- if( strchr(zCap, 's') ) oas = " checked=\"checked\"";
486
- if( strchr(zCap, 't') ) oat = " checked=\"checked\"";
487
- if( strchr(zCap, 'u') ) oau = " checked=\"checked\"";
488
- if( strchr(zCap, 'v') ) oav = " checked=\"checked\"";
489
- if( strchr(zCap, 'w') ) oaw = " checked=\"checked\"";
490
- if( strchr(zCap, 'x') ) oax = " checked=\"checked\"";
491
- if( strchr(zCap, 'z') ) oaz = " checked=\"checked\"";
432
+ for(i=0; zCap[i]; i++){
433
+ char c = zCap[i];
434
+ if( c>='a' && c<='z' ) oa[c] = " checked=\"checked\"";
435
+ }
492436
}
493437
494438
/* figure out inherited permissions */
495439
memset(inherit, 0, sizeof(inherit));
496440
if( fossil_strcmp(zLogin, "developer") ){
@@ -562,59 +506,63 @@
562506
@ <td class="usetupEditLabel">Capabilities:</td>
563507
@ <td>
564508
#define B(x) inherit[x]
565509
@ <table border=0><tr><td valign="top">
566510
if( g.perm.Setup ){
567
- @ <label><input type="checkbox" name="as"%s(oas) />%s(B('s'))Setup
568
- @ </label><br />
569
- }
570
- @ <label><input type="checkbox" name="aa"%s(oaa) />%s(B('a'))Admin
571
- @ </label><br />
572
- @ <label><input type="checkbox" name="ad"%s(oad) />%s(B('d'))Delete
573
- @ </label><br />
574
- @ <label><input type="checkbox" name="ae"%s(oae) />%s(B('e'))Email
575
- @ </label><br />
576
- @ <label><input type="checkbox" name="ap"%s(oap) />%s(B('p'))Password
577
- @ </label><br />
578
- @ <label><input type="checkbox" name="ai"%s(oai) />%s(B('i'))Check-In
579
- @ </label><br />
580
- @ <label><input type="checkbox" name="ao"%s(oao) />%s(B('o'))Check-Out
581
- @ </label><br />
582
- @ <label><input type="checkbox" name="ah"%s(oah) />%s(B('h'))Hyperlinks
583
- @ </label><br />
584
- @ </td><td><td width="40"></td><td valign="top">
585
- @ <label><input type="checkbox" name="au"%s(oau) />%s(B('u'))Reader
586
- @ </label><br />
587
- @ <label><input type="checkbox" name="av"%s(oav) />%s(B('v'))Developer
588
- @ </label><br />
589
- @ <label><input type="checkbox" name="ag"%s(oag) />%s(B('g'))Clone
590
- @ </label><br />
591
- @ <label><input type="checkbox" name="aj"%s(oaj) />%s(B('j'))Read Wiki
592
- @ </label><br />
593
- @ <label><input type="checkbox" name="af"%s(oaf) />%s(B('f'))New Wiki
594
- @ </label><br />
595
- @ <label><input type="checkbox" name="am"%s(oam) />%s(B('m'))Append Wiki
596
- @ </label><br />
597
- @ <label><input type="checkbox" name="ak"%s(oak) />%s(B('k'))Write Wiki
598
- @ </label><br />
599
- @ <label><input type="checkbox" name="ab"%s(oab) />%s(B('b'))Attachments
600
- @ </label><br />
601
- @ </td><td><td width="40"></td><td valign="top">
602
- @ <label><input type="checkbox" name="ar"%s(oar) />%s(B('r'))Read Ticket
603
- @ </label><br />
604
- @ <label><input type="checkbox" name="an"%s(oan) />%s(B('n'))New Ticket
605
- @ </label><br />
606
- @ <label><input type="checkbox" name="ac"%s(oac) />%s(B('c'))Append Ticket
607
- @ </label><br />
608
- @ <label><input type="checkbox" name="aw"%s(oaw) />%s(B('w'))Write Ticket
609
- @ </label><br />
610
- @ <label><input type="checkbox" name="at"%s(oat) />%s(B('t'))Ticket Report
611
- @ </label><br />
612
- @ <label><input type="checkbox" name="ax"%s(oax) />%s(B('x'))Private
613
- @ </label><br />
614
- @ <label><input type="checkbox" name="az"%s(oaz) />%s(B('z'))Download Zip
615
- @ </label>
511
+ @ <label><input type="checkbox" name="as"%s(oa['s']) />%s(B('s'))Setup
512
+ @ </label><br />
513
+ }
514
+ @ <label><input type="checkbox" name="aa"%s(oa['a']) />%s(B('a'))Admin
515
+ @ </label><br />
516
+ @ <label><input type="checkbox" name="ad"%s(oa['d']) />%s(B('d'))Delete
517
+ @ </label><br />
518
+ @ <label><input type="checkbox" name="ae"%s(oa['e']) />%s(B('e'))Email
519
+ @ </label><br />
520
+ @ <label><input type="checkbox" name="ap"%s(oa['p']) />%s(B('p'))Password
521
+ @ </label><br />
522
+ @ <label><input type="checkbox" name="ai"%s(oa['i']) />%s(B('i'))Check-In
523
+ @ </label><br />
524
+ @ <label><input type="checkbox" name="ao"%s(oa['o']) />%s(B('o'))Check-Out
525
+ @ </label><br />
526
+ @ <label><input type="checkbox" name="ah"%s(oa['h']) />%s(B('h'))Hyperlinks
527
+ @ </label><br />
528
+ @ <label><input type="checkbox" name="ab"%s(oa['b']) />%s(B('b'))Attachments
529
+ @ </label><br />
530
+ @ </td><td><td width="40"></td><td valign="top">
531
+ @ <label><input type="checkbox" name="au"%s(oa['u']) />%s(B('u'))Reader
532
+ @ </label><br />
533
+ @ <label><input type="checkbox" name="av"%s(oa['v']) />%s(B('v'))Developer
534
+ @ </label><br />
535
+ @ <label><input type="checkbox" name="ag"%s(oa['g']) />%s(B('g'))Clone
536
+ @ </label><br />
537
+ @ <label><input type="checkbox" name="aj"%s(oa['j']) />%s(B('j'))Read Wiki
538
+ @ </label><br />
539
+ @ <label><input type="checkbox" name="af"%s(oa['f']) />%s(B('f'))New Wiki
540
+ @ </label><br />
541
+ @ <label><input type="checkbox" name="am"%s(oa['m']) />%s(B('m'))Append Wiki
542
+ @ </label><br />
543
+ @ <label><input type="checkbox" name="ak"%s(oa['k']) />%s(B('k'))Write Wiki
544
+ @ </label><br />
545
+ @ <label><input type="checkbox" name="al"%s(oa['l']) />%s(B('l'))Moderate
546
+ @ Wiki</label><br />
547
+ @ </td><td><td width="40"></td><td valign="top">
548
+ @ <label><input type="checkbox" name="ar"%s(oa['r']) />%s(B('r'))Read Ticket
549
+ @ </label><br />
550
+ @ <label><input type="checkbox" name="an"%s(oa['n']) />%s(B('n'))New Tickets
551
+ @ </label><br />
552
+ @ <label><input type="checkbox" name="ac"%s(oa['c']) />%s(B('c'))Append
553
+ @ To Ticket </label><br />
554
+ @ <label><input type="checkbox" name="aw"%s(oa['w']) />%s(B('w'))Write
555
+ @ Tickets </label><br />
556
+ @ <label><input type="checkbox" name="aq"%s(oa['q']) />%s(B('q'))Moderate
557
+ @ Tickets </label><br />
558
+ @ <label><input type="checkbox" name="at"%s(oa['t']) />%s(B('t'))Ticket
559
+ @ Report </label><br />
560
+ @ <label><input type="checkbox" name="ax"%s(oa['x']) />%s(B('x'))Private
561
+ @ </label><br />
562
+ @ <label><input type="checkbox" name="az"%s(oa['z']) />%s(B('z'))Download
563
+ @ Zip </label>
616564
@ </td></tr></table>
617565
@ </td>
618566
@ </tr>
619567
@ <tr>
620568
@ <td align="right">Password:</td>
621569
--- src/setup.c
+++ src/setup.c
@@ -215,18 +215,22 @@
215 @ <td><i>Check-In:</i> Commit new versions in the repository</td></tr>
216 @ <tr><td valign="top"><b>j</b></td>
217 @ <td><i>Read-Wiki:</i> View wiki pages</td></tr>
218 @ <tr><td valign="top"><b>k</b></td>
219 @ <td><i>Write-Wiki:</i> Edit wiki pages</td></tr>
 
 
220 @ <tr><td valign="top"><b>m</b></td>
221 @ <td><i>Append-Wiki:</i> Append to wiki pages</td></tr>
222 @ <tr><td valign="top"><b>n</b></td>
223 @ <td><i>New-Tkt:</i> Create new tickets</td></tr>
224 @ <tr><td valign="top"><b>o</b></td>
225 @ <td><i>Check-Out:</i> Check out versions</td></tr>
226 @ <tr><td valign="top"><b>p</b></td>
227 @ <td><i>Password:</i> Change your own password</td></tr>
 
 
228 @ <tr><td valign="top"><b>r</b></td>
229 @ <td><i>Read-Tkt:</i> View tickets</td></tr>
230 @ <tr><td valign="top"><b>s</b></td>
231 @ <td><i>Setup/Super-user:</i> Setup and configure this website</td></tr>
232 @ <tr><td valign="top"><b>t</b></td>
@@ -292,20 +296,19 @@
292 /*
293 ** WEBPAGE: /setup_uedit
294 */
295 void user_edit(void){
296 const char *zId, *zLogin, *zInfo, *zCap, *zPw;
297 char *oaa, *oas, *oar, *oaw, *oan, *oai, *oaj, *oao, *oap;
298 char *oak, *oad, *oac, *oaf, *oam, *oah, *oag, *oae;
299 char *oat, *oau, *oav, *oab, *oax, *oaz;
300 const char *zGroup;
301 const char *zOldLogin;
302 char *inherit[128];
303 int doWrite;
304 int uid;
305 int higherUser = 0; /* True if user being edited is SETUP and the */
306 /* user doing the editing is ADMIN. Disallow editing */
 
 
 
307
308 /* Must have ADMIN privleges to access this page
309 */
310 login_check_credentials();
311 if( !g.perm.Admin ){ login_needed(); return; }
@@ -330,58 +333,19 @@
330 ** modified user record. After writing the user record, redirect
331 ** to the page that displays a list of users.
332 */
333 doWrite = cgi_all("login","info","pw") && !higherUser;
334 if( doWrite ){
335 char zCap[50];
336 int i = 0;
337 int aa = P("aa")!=0;
338 int ab = P("ab")!=0;
339 int ad = P("ad")!=0;
340 int ae = P("ae")!=0;
341 int ai = P("ai")!=0;
342 int aj = P("aj")!=0;
343 int ak = P("ak")!=0;
344 int an = P("an")!=0;
345 int ao = P("ao")!=0;
346 int ap = P("ap")!=0;
347 int ar = P("ar")!=0;
348 int as = g.perm.Setup && P("as")!=0;
349 int aw = P("aw")!=0;
350 int ac = P("ac")!=0;
351 int af = P("af")!=0;
352 int am = P("am")!=0;
353 int ah = P("ah")!=0;
354 int ag = P("ag")!=0;
355 int at = P("at")!=0;
356 int au = P("au")!=0;
357 int av = P("av")!=0;
358 int ax = P("ax")!=0;
359 int az = P("az")!=0;
360 if( aa ){ zCap[i++] = 'a'; }
361 if( ab ){ zCap[i++] = 'b'; }
362 if( ac ){ zCap[i++] = 'c'; }
363 if( ad ){ zCap[i++] = 'd'; }
364 if( ae ){ zCap[i++] = 'e'; }
365 if( af ){ zCap[i++] = 'f'; }
366 if( ah ){ zCap[i++] = 'h'; }
367 if( ag ){ zCap[i++] = 'g'; }
368 if( ai ){ zCap[i++] = 'i'; }
369 if( aj ){ zCap[i++] = 'j'; }
370 if( ak ){ zCap[i++] = 'k'; }
371 if( am ){ zCap[i++] = 'm'; }
372 if( an ){ zCap[i++] = 'n'; }
373 if( ao ){ zCap[i++] = 'o'; }
374 if( ap ){ zCap[i++] = 'p'; }
375 if( ar ){ zCap[i++] = 'r'; }
376 if( as ){ zCap[i++] = 's'; }
377 if( at ){ zCap[i++] = 't'; }
378 if( au ){ zCap[i++] = 'u'; }
379 if( av ){ zCap[i++] = 'v'; }
380 if( aw ){ zCap[i++] = 'w'; }
381 if( ax ){ zCap[i++] = 'x'; }
382 if( az ){ zCap[i++] = 'z'; }
383
384 zCap[i] = 0;
385 zPw = P("pw");
386 zLogin = P("login");
387 if( strlen(zLogin)==0 ){
@@ -457,40 +421,20 @@
457 */
458 zLogin = "";
459 zInfo = "";
460 zCap = "";
461 zPw = "";
462 oaa = oab = oac = oad = oae = oaf = oag = oah = oai = oaj = oak = oam =
463 oan = oao = oap = oar = oas = oat = oau = oav = oaw = oax = oaz = "";
464 if( uid ){
465 zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid);
466 zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid);
467 zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid);
468 zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid);
469 if( strchr(zCap, 'a') ) oaa = " checked=\"checked\"";
470 if( strchr(zCap, 'b') ) oab = " checked=\"checked\"";
471 if( strchr(zCap, 'c') ) oac = " checked=\"checked\"";
472 if( strchr(zCap, 'd') ) oad = " checked=\"checked\"";
473 if( strchr(zCap, 'e') ) oae = " checked=\"checked\"";
474 if( strchr(zCap, 'f') ) oaf = " checked=\"checked\"";
475 if( strchr(zCap, 'g') ) oag = " checked=\"checked\"";
476 if( strchr(zCap, 'h') ) oah = " checked=\"checked\"";
477 if( strchr(zCap, 'i') ) oai = " checked=\"checked\"";
478 if( strchr(zCap, 'j') ) oaj = " checked=\"checked\"";
479 if( strchr(zCap, 'k') ) oak = " checked=\"checked\"";
480 if( strchr(zCap, 'm') ) oam = " checked=\"checked\"";
481 if( strchr(zCap, 'n') ) oan = " checked=\"checked\"";
482 if( strchr(zCap, 'o') ) oao = " checked=\"checked\"";
483 if( strchr(zCap, 'p') ) oap = " checked=\"checked\"";
484 if( strchr(zCap, 'r') ) oar = " checked=\"checked\"";
485 if( strchr(zCap, 's') ) oas = " checked=\"checked\"";
486 if( strchr(zCap, 't') ) oat = " checked=\"checked\"";
487 if( strchr(zCap, 'u') ) oau = " checked=\"checked\"";
488 if( strchr(zCap, 'v') ) oav = " checked=\"checked\"";
489 if( strchr(zCap, 'w') ) oaw = " checked=\"checked\"";
490 if( strchr(zCap, 'x') ) oax = " checked=\"checked\"";
491 if( strchr(zCap, 'z') ) oaz = " checked=\"checked\"";
492 }
493
494 /* figure out inherited permissions */
495 memset(inherit, 0, sizeof(inherit));
496 if( fossil_strcmp(zLogin, "developer") ){
@@ -562,59 +506,63 @@
562 @ <td class="usetupEditLabel">Capabilities:</td>
563 @ <td>
564 #define B(x) inherit[x]
565 @ <table border=0><tr><td valign="top">
566 if( g.perm.Setup ){
567 @ <label><input type="checkbox" name="as"%s(oas) />%s(B('s'))Setup
568 @ </label><br />
569 }
570 @ <label><input type="checkbox" name="aa"%s(oaa) />%s(B('a'))Admin
571 @ </label><br />
572 @ <label><input type="checkbox" name="ad"%s(oad) />%s(B('d'))Delete
573 @ </label><br />
574 @ <label><input type="checkbox" name="ae"%s(oae) />%s(B('e'))Email
575 @ </label><br />
576 @ <label><input type="checkbox" name="ap"%s(oap) />%s(B('p'))Password
577 @ </label><br />
578 @ <label><input type="checkbox" name="ai"%s(oai) />%s(B('i'))Check-In
579 @ </label><br />
580 @ <label><input type="checkbox" name="ao"%s(oao) />%s(B('o'))Check-Out
581 @ </label><br />
582 @ <label><input type="checkbox" name="ah"%s(oah) />%s(B('h'))Hyperlinks
583 @ </label><br />
584 @ </td><td><td width="40"></td><td valign="top">
585 @ <label><input type="checkbox" name="au"%s(oau) />%s(B('u'))Reader
586 @ </label><br />
587 @ <label><input type="checkbox" name="av"%s(oav) />%s(B('v'))Developer
588 @ </label><br />
589 @ <label><input type="checkbox" name="ag"%s(oag) />%s(B('g'))Clone
590 @ </label><br />
591 @ <label><input type="checkbox" name="aj"%s(oaj) />%s(B('j'))Read Wiki
592 @ </label><br />
593 @ <label><input type="checkbox" name="af"%s(oaf) />%s(B('f'))New Wiki
594 @ </label><br />
595 @ <label><input type="checkbox" name="am"%s(oam) />%s(B('m'))Append Wiki
596 @ </label><br />
597 @ <label><input type="checkbox" name="ak"%s(oak) />%s(B('k'))Write Wiki
598 @ </label><br />
599 @ <label><input type="checkbox" name="ab"%s(oab) />%s(B('b'))Attachments
600 @ </label><br />
601 @ </td><td><td width="40"></td><td valign="top">
602 @ <label><input type="checkbox" name="ar"%s(oar) />%s(B('r'))Read Ticket
603 @ </label><br />
604 @ <label><input type="checkbox" name="an"%s(oan) />%s(B('n'))New Ticket
605 @ </label><br />
606 @ <label><input type="checkbox" name="ac"%s(oac) />%s(B('c'))Append Ticket
607 @ </label><br />
608 @ <label><input type="checkbox" name="aw"%s(oaw) />%s(B('w'))Write Ticket
609 @ </label><br />
610 @ <label><input type="checkbox" name="at"%s(oat) />%s(B('t'))Ticket Report
611 @ </label><br />
612 @ <label><input type="checkbox" name="ax"%s(oax) />%s(B('x'))Private
613 @ </label><br />
614 @ <label><input type="checkbox" name="az"%s(oaz) />%s(B('z'))Download Zip
615 @ </label>
 
 
 
 
616 @ </td></tr></table>
617 @ </td>
618 @ </tr>
619 @ <tr>
620 @ <td align="right">Password:</td>
621
--- src/setup.c
+++ src/setup.c
@@ -215,18 +215,22 @@
215 @ <td><i>Check-In:</i> Commit new versions in the repository</td></tr>
216 @ <tr><td valign="top"><b>j</b></td>
217 @ <td><i>Read-Wiki:</i> View wiki pages</td></tr>
218 @ <tr><td valign="top"><b>k</b></td>
219 @ <td><i>Write-Wiki:</i> Edit wiki pages</td></tr>
220 @ <tr><td valign="top"><b>l</b></td>
221 @ <td><i>Mod-Wiki:</i> Moderator for wiki pages</td></tr>
222 @ <tr><td valign="top"><b>m</b></td>
223 @ <td><i>Append-Wiki:</i> Append to wiki pages</td></tr>
224 @ <tr><td valign="top"><b>n</b></td>
225 @ <td><i>New-Tkt:</i> Create new tickets</td></tr>
226 @ <tr><td valign="top"><b>o</b></td>
227 @ <td><i>Check-Out:</i> Check out versions</td></tr>
228 @ <tr><td valign="top"><b>p</b></td>
229 @ <td><i>Password:</i> Change your own password</td></tr>
230 @ <tr><td valign="top"><b>q</b></td>
231 @ <td><i>Mod-Tkt:</i> Moderator for tickets</td></tr>
232 @ <tr><td valign="top"><b>r</b></td>
233 @ <td><i>Read-Tkt:</i> View tickets</td></tr>
234 @ <tr><td valign="top"><b>s</b></td>
235 @ <td><i>Setup/Super-user:</i> Setup and configure this website</td></tr>
236 @ <tr><td valign="top"><b>t</b></td>
@@ -292,20 +296,19 @@
296 /*
297 ** WEBPAGE: /setup_uedit
298 */
299 void user_edit(void){
300 const char *zId, *zLogin, *zInfo, *zCap, *zPw;
 
 
 
301 const char *zGroup;
302 const char *zOldLogin;
 
303 int doWrite;
304 int uid, i;
305 int higherUser = 0; /* True if user being edited is SETUP and the */
306 /* user doing the editing is ADMIN. Disallow editing */
307 char *inherit[128];
308 int a[128];
309 char *oa[128];
310
311 /* Must have ADMIN privleges to access this page
312 */
313 login_check_credentials();
314 if( !g.perm.Admin ){ login_needed(); return; }
@@ -330,58 +333,19 @@
333 ** modified user record. After writing the user record, redirect
334 ** to the page that displays a list of users.
335 */
336 doWrite = cgi_all("login","info","pw") && !higherUser;
337 if( doWrite ){
338 char c;
339 char zCap[50], zNm[4];
340 zNm[0] = 'a';
341 zNm[2] = 0;
342 for(i=0, c='a'; c<='z'; c++){
343 zNm[1] = c;
344 a[c] = (c!='s' || g.perm.Setup) && P(zNm)!=0;
345 if( a[c] ) zCap[i++] = c;
346 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
348 zCap[i] = 0;
349 zPw = P("pw");
350 zLogin = P("login");
351 if( strlen(zLogin)==0 ){
@@ -457,40 +421,20 @@
421 */
422 zLogin = "";
423 zInfo = "";
424 zCap = "";
425 zPw = "";
426 for(i='a'; i<='z'; i++) oa[i] = "";
 
427 if( uid ){
428 zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid);
429 zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid);
430 zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid);
431 zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid);
432 for(i=0; zCap[i]; i++){
433 char c = zCap[i];
434 if( c>='a' && c<='z' ) oa[c] = " checked=\"checked\"";
435 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
436 }
437
438 /* figure out inherited permissions */
439 memset(inherit, 0, sizeof(inherit));
440 if( fossil_strcmp(zLogin, "developer") ){
@@ -562,59 +506,63 @@
506 @ <td class="usetupEditLabel">Capabilities:</td>
507 @ <td>
508 #define B(x) inherit[x]
509 @ <table border=0><tr><td valign="top">
510 if( g.perm.Setup ){
511 @ <label><input type="checkbox" name="as"%s(oa['s']) />%s(B('s'))Setup
512 @ </label><br />
513 }
514 @ <label><input type="checkbox" name="aa"%s(oa['a']) />%s(B('a'))Admin
515 @ </label><br />
516 @ <label><input type="checkbox" name="ad"%s(oa['d']) />%s(B('d'))Delete
517 @ </label><br />
518 @ <label><input type="checkbox" name="ae"%s(oa['e']) />%s(B('e'))Email
519 @ </label><br />
520 @ <label><input type="checkbox" name="ap"%s(oa['p']) />%s(B('p'))Password
521 @ </label><br />
522 @ <label><input type="checkbox" name="ai"%s(oa['i']) />%s(B('i'))Check-In
523 @ </label><br />
524 @ <label><input type="checkbox" name="ao"%s(oa['o']) />%s(B('o'))Check-Out
525 @ </label><br />
526 @ <label><input type="checkbox" name="ah"%s(oa['h']) />%s(B('h'))Hyperlinks
527 @ </label><br />
528 @ <label><input type="checkbox" name="ab"%s(oa['b']) />%s(B('b'))Attachments
529 @ </label><br />
530 @ </td><td><td width="40"></td><td valign="top">
531 @ <label><input type="checkbox" name="au"%s(oa['u']) />%s(B('u'))Reader
532 @ </label><br />
533 @ <label><input type="checkbox" name="av"%s(oa['v']) />%s(B('v'))Developer
534 @ </label><br />
535 @ <label><input type="checkbox" name="ag"%s(oa['g']) />%s(B('g'))Clone
536 @ </label><br />
537 @ <label><input type="checkbox" name="aj"%s(oa['j']) />%s(B('j'))Read Wiki
538 @ </label><br />
539 @ <label><input type="checkbox" name="af"%s(oa['f']) />%s(B('f'))New Wiki
540 @ </label><br />
541 @ <label><input type="checkbox" name="am"%s(oa['m']) />%s(B('m'))Append Wiki
542 @ </label><br />
543 @ <label><input type="checkbox" name="ak"%s(oa['k']) />%s(B('k'))Write Wiki
544 @ </label><br />
545 @ <label><input type="checkbox" name="al"%s(oa['l']) />%s(B('l'))Moderate
546 @ Wiki</label><br />
547 @ </td><td><td width="40"></td><td valign="top">
548 @ <label><input type="checkbox" name="ar"%s(oa['r']) />%s(B('r'))Read Ticket
549 @ </label><br />
550 @ <label><input type="checkbox" name="an"%s(oa['n']) />%s(B('n'))New Tickets
551 @ </label><br />
552 @ <label><input type="checkbox" name="ac"%s(oa['c']) />%s(B('c'))Append
553 @ To Ticket </label><br />
554 @ <label><input type="checkbox" name="aw"%s(oa['w']) />%s(B('w'))Write
555 @ Tickets </label><br />
556 @ <label><input type="checkbox" name="aq"%s(oa['q']) />%s(B('q'))Moderate
557 @ Tickets </label><br />
558 @ <label><input type="checkbox" name="at"%s(oa['t']) />%s(B('t'))Ticket
559 @ Report </label><br />
560 @ <label><input type="checkbox" name="ax"%s(oa['x']) />%s(B('x'))Private
561 @ </label><br />
562 @ <label><input type="checkbox" name="az"%s(oa['z']) />%s(B('z'))Download
563 @ Zip </label>
564 @ </td></tr></table>
565 @ </td>
566 @ </tr>
567 @ <tr>
568 @ <td align="right">Password:</td>
569
+4 -1
--- src/tkt.c
+++ src/tkt.c
@@ -362,11 +362,14 @@
362362
@ %h(zFile)
363363
}
364364
@ added by %h(zUser) on
365365
hyperlink_to_date(zDate, ".");
366366
if( g.perm.WrTkt && g.perm.Attach ){
367
- @ [%z(href("%R/attachdelete?tkt=%s&file=%t&from=%R/tktview%%3fname=%s",zFullName,zFile,zFullName))delete</a>]
367
+ char *zH;
368
+ zH = href("%R/attachdelete?tkt=%s&file=%t&from=%R/tktview%%3fname=%s",
369
+ zFullName, zFile, zFullName);
370
+ @ [%z(zH)delete</a>]
368371
}
369372
@ </li>
370373
}
371374
if( cnt ){
372375
@ </ul>
373376
--- src/tkt.c
+++ src/tkt.c
@@ -362,11 +362,14 @@
362 @ %h(zFile)
363 }
364 @ added by %h(zUser) on
365 hyperlink_to_date(zDate, ".");
366 if( g.perm.WrTkt && g.perm.Attach ){
367 @ [%z(href("%R/attachdelete?tkt=%s&file=%t&from=%R/tktview%%3fname=%s",zFullName,zFile,zFullName))delete</a>]
 
 
 
368 }
369 @ </li>
370 }
371 if( cnt ){
372 @ </ul>
373
--- src/tkt.c
+++ src/tkt.c
@@ -362,11 +362,14 @@
362 @ %h(zFile)
363 }
364 @ added by %h(zUser) on
365 hyperlink_to_date(zDate, ".");
366 if( g.perm.WrTkt && g.perm.Attach ){
367 char *zH;
368 zH = href("%R/attachdelete?tkt=%s&file=%t&from=%R/tktview%%3fname=%s",
369 zFullName, zFile, zFullName);
370 @ [%z(zH)delete</a>]
371 }
372 @ </li>
373 }
374 if( cnt ){
375 @ </ul>
376

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button