| | @@ -215,18 +215,22 @@ |
| 215 | 215 | @ <td><i>Check-In:</i> Commit new versions in the repository</td></tr> |
| 216 | 216 | @ <tr><td valign="top"><b>j</b></td> |
| 217 | 217 | @ <td><i>Read-Wiki:</i> View wiki pages</td></tr> |
| 218 | 218 | @ <tr><td valign="top"><b>k</b></td> |
| 219 | 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> |
| 220 | 222 | @ <tr><td valign="top"><b>m</b></td> |
| 221 | 223 | @ <td><i>Append-Wiki:</i> Append to wiki pages</td></tr> |
| 222 | 224 | @ <tr><td valign="top"><b>n</b></td> |
| 223 | 225 | @ <td><i>New-Tkt:</i> Create new tickets</td></tr> |
| 224 | 226 | @ <tr><td valign="top"><b>o</b></td> |
| 225 | 227 | @ <td><i>Check-Out:</i> Check out versions</td></tr> |
| 226 | 228 | @ <tr><td valign="top"><b>p</b></td> |
| 227 | 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> |
| 228 | 232 | @ <tr><td valign="top"><b>r</b></td> |
| 229 | 233 | @ <td><i>Read-Tkt:</i> View tickets</td></tr> |
| 230 | 234 | @ <tr><td valign="top"><b>s</b></td> |
| 231 | 235 | @ <td><i>Setup/Super-user:</i> Setup and configure this website</td></tr> |
| 232 | 236 | @ <tr><td valign="top"><b>t</b></td> |
| | @@ -292,20 +296,19 @@ |
| 292 | 296 | /* |
| 293 | 297 | ** WEBPAGE: /setup_uedit |
| 294 | 298 | */ |
| 295 | 299 | void user_edit(void){ |
| 296 | 300 | 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 | 301 | const char *zGroup; |
| 301 | 302 | const char *zOldLogin; |
| 302 | | - char *inherit[128]; |
| 303 | 303 | int doWrite; |
| 304 | | - int uid; |
| 304 | + int uid, i; |
| 305 | 305 | int higherUser = 0; /* True if user being edited is SETUP and the */ |
| 306 | 306 | /* user doing the editing is ADMIN. Disallow editing */ |
| 307 | + char *inherit[128]; |
| 308 | + int a[128]; |
| 309 | + char *oa[128]; |
| 307 | 310 | |
| 308 | 311 | /* Must have ADMIN privleges to access this page |
| 309 | 312 | */ |
| 310 | 313 | login_check_credentials(); |
| 311 | 314 | if( !g.perm.Admin ){ login_needed(); return; } |
| | @@ -330,58 +333,19 @@ |
| 330 | 333 | ** modified user record. After writing the user record, redirect |
| 331 | 334 | ** to the page that displays a list of users. |
| 332 | 335 | */ |
| 333 | 336 | doWrite = cgi_all("login","info","pw") && !higherUser; |
| 334 | 337 | 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 | + } |
| 383 | 347 | |
| 384 | 348 | zCap[i] = 0; |
| 385 | 349 | zPw = P("pw"); |
| 386 | 350 | zLogin = P("login"); |
| 387 | 351 | if( strlen(zLogin)==0 ){ |
| | @@ -457,40 +421,20 @@ |
| 457 | 421 | */ |
| 458 | 422 | zLogin = ""; |
| 459 | 423 | zInfo = ""; |
| 460 | 424 | zCap = ""; |
| 461 | 425 | 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] = ""; |
| 464 | 427 | if( uid ){ |
| 465 | 428 | zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid); |
| 466 | 429 | zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid); |
| 467 | 430 | zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid); |
| 468 | 431 | 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 | + } |
| 492 | 436 | } |
| 493 | 437 | |
| 494 | 438 | /* figure out inherited permissions */ |
| 495 | 439 | memset(inherit, 0, sizeof(inherit)); |
| 496 | 440 | if( fossil_strcmp(zLogin, "developer") ){ |
| | @@ -562,59 +506,63 @@ |
| 562 | 506 | @ <td class="usetupEditLabel">Capabilities:</td> |
| 563 | 507 | @ <td> |
| 564 | 508 | #define B(x) inherit[x] |
| 565 | 509 | @ <table border=0><tr><td valign="top"> |
| 566 | 510 | 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> |
| 616 | 564 | @ </td></tr></table> |
| 617 | 565 | @ </td> |
| 618 | 566 | @ </tr> |
| 619 | 567 | @ <tr> |
| 620 | 568 | @ <td align="right">Password:</td> |
| 621 | 569 | |