| | @@ -156,10 +156,25 @@ |
| 156 | 156 | @ %h(blob_str(pWiki)) |
| 157 | 157 | @ </pre> |
| 158 | 158 | } |
| 159 | 159 | } |
| 160 | 160 | |
| 161 | +/* |
| 162 | +** Returns non-zero if moderation is required for wiki changes and wiki |
| 163 | +** attachments. |
| 164 | +*/ |
| 165 | +int wiki_need_moderation( |
| 166 | + int localUser /* Are we being called for a local interactive user? */ |
| 167 | +){ |
| 168 | + if( fossil_getenv("FOSSIL_FORCE_WIKI_MODERATION")!=0 ){ |
| 169 | + return 1; |
| 170 | + } |
| 171 | + if( localUser ){ |
| 172 | + return 0; |
| 173 | + } |
| 174 | + return g.perm.ModWiki==0 && db_get_boolean("modreq-wiki",0)==1; |
| 175 | +} |
| 161 | 176 | |
| 162 | 177 | /* |
| 163 | 178 | ** WEBPAGE: wiki |
| 164 | 179 | ** URL: /wiki?name=PAGENAME |
| 165 | 180 | */ |
| | @@ -282,13 +297,13 @@ |
| 282 | 297 | } |
| 283 | 298 | |
| 284 | 299 | /* |
| 285 | 300 | ** Write a wiki artifact into the repository |
| 286 | 301 | */ |
| 287 | | -static void wiki_put(Blob *pWiki, int parent){ |
| 302 | +static void wiki_put(Blob *pWiki, int parent, int needMod){ |
| 288 | 303 | int nrid; |
| 289 | | - if( g.perm.ModWiki || db_get_boolean("modreq-wiki",0)==0 ){ |
| 304 | + if( !needMod ){ |
| 290 | 305 | nrid = content_put_ex(pWiki, 0, 0, 0, 0); |
| 291 | 306 | if( parent) content_deltify(parent, nrid, 0); |
| 292 | 307 | }else{ |
| 293 | 308 | nrid = content_put_ex(pWiki, 0, 0, 0, 1); |
| 294 | 309 | moderation_table_create(); |
| | @@ -427,11 +442,11 @@ |
| 427 | 442 | } |
| 428 | 443 | blob_appendf(&wiki, "W %d\n%s\n", strlen(zBody), zBody); |
| 429 | 444 | md5sum_blob(&wiki, &cksum); |
| 430 | 445 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 431 | 446 | blob_reset(&cksum); |
| 432 | | - wiki_put(&wiki, 0); |
| 447 | + wiki_put(&wiki, 0, wiki_need_moderation(0)); |
| 433 | 448 | } |
| 434 | 449 | db_end_transaction(0); |
| 435 | 450 | cgi_redirectf("wiki?name=%T", zPageName); |
| 436 | 451 | } |
| 437 | 452 | if( P("cancel")!=0 ){ |
| | @@ -658,11 +673,11 @@ |
| 658 | 673 | appendRemark(&body, zMimetype); |
| 659 | 674 | blob_appendf(&wiki, "W %d\n%s\n", blob_size(&body), blob_str(&body)); |
| 660 | 675 | md5sum_blob(&wiki, &cksum); |
| 661 | 676 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 662 | 677 | blob_reset(&cksum); |
| 663 | | - wiki_put(&wiki, rid); |
| 678 | + wiki_put(&wiki, rid, wiki_need_moderation(0)); |
| 664 | 679 | db_end_transaction(0); |
| 665 | 680 | } |
| 666 | 681 | cgi_redirectf("wiki?name=%T", zPageName); |
| 667 | 682 | } |
| 668 | 683 | if( P("cancel")!=0 ){ |
| | @@ -961,11 +976,11 @@ |
| 961 | 976 | ** zMimeType specifies the N-card for the wiki page. If it is 0, |
| 962 | 977 | ** empty, or "text/x-fossil-wiki" (the default format) then it is |
| 963 | 978 | ** ignored. |
| 964 | 979 | */ |
| 965 | 980 | int wiki_cmd_commit(const char *zPageName, int isNew, Blob *pContent, |
| 966 | | - const char *zMimeType){ |
| 981 | + const char *zMimeType, int localUser){ |
| 967 | 982 | Blob wiki; /* Wiki page content */ |
| 968 | 983 | Blob cksum; /* wiki checksum */ |
| 969 | 984 | int rid; /* artifact ID of parent page */ |
| 970 | 985 | char *zDate; /* timestamp */ |
| 971 | 986 | char *zUuid; /* uuid for rid */ |
| | @@ -1011,11 +1026,11 @@ |
| 1011 | 1026 | blob_str(pContent) ); |
| 1012 | 1027 | md5sum_blob(&wiki, &cksum); |
| 1013 | 1028 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 1014 | 1029 | blob_reset(&cksum); |
| 1015 | 1030 | db_begin_transaction(); |
| 1016 | | - wiki_put(&wiki, 0); |
| 1031 | + wiki_put(&wiki, 0, wiki_need_moderation(localUser)); |
| 1017 | 1032 | db_end_transaction(0); |
| 1018 | 1033 | return 1; |
| 1019 | 1034 | } |
| 1020 | 1035 | |
| 1021 | 1036 | /* |
| | @@ -1119,14 +1134,14 @@ |
| 1119 | 1134 | && (pWiki->zMimetype && *pWiki->zMimetype)){ |
| 1120 | 1135 | zMimeType = pWiki->zMimetype; |
| 1121 | 1136 | } |
| 1122 | 1137 | } |
| 1123 | 1138 | if( g.argv[2][1]=='r' ){ |
| 1124 | | - wiki_cmd_commit(zPageName, 1, &content, zMimeType); |
| 1139 | + wiki_cmd_commit(zPageName, 1, &content, zMimeType, 1); |
| 1125 | 1140 | fossil_print("Created new wiki page %s.\n", zPageName); |
| 1126 | 1141 | }else{ |
| 1127 | | - wiki_cmd_commit(zPageName, 0, &content, zMimeType); |
| 1142 | + wiki_cmd_commit(zPageName, 0, &content, zMimeType, 1); |
| 1128 | 1143 | fossil_print("Updated wiki page %s.\n", zPageName); |
| 1129 | 1144 | } |
| 1130 | 1145 | manifest_destroy(pWiki); |
| 1131 | 1146 | blob_reset(&content); |
| 1132 | 1147 | }else if( strncmp(g.argv[2],"delete",n)==0 ){ |
| 1133 | 1148 | |