@@ -126,39 +126,34 @@
126 126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_check_credentials();
127 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.RdForum ){
128 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_needed(g.anon.RdForum);
129 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
130 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_header("Forum");
132 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zName==0 ){
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <p class='generalError'>Missing name= query parameter</p>
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_footer();
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ webpage_error("Missing \"name=\" query parameter");
136 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
137 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fpid = symbolic_name_to_rid(zName, "f");
138 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fpid<=0 ){
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <p class='generalError'>Unknown or ambiguous forum id in the "name="
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ query parameter</p>
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_footer();
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ webpage_error("Unknown or ambiguous forum id: \"%s\"", zName);
143 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_header("Forum");
144 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
froot = db_int(0, "SELECT froot FROM forumpost WHERE fpid=%d", fpid);
145 140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( froot==0 ){
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <p class='generalError'>Invalid forum id in the "name="
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ query parameter</p>
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_footer();
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ webpage_error("Not a forum post: \"%s\"", zName);
150 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_thread_chronological(froot);
152 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_footer();
153 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
154 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
155 147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
156 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if a forum post should be moderated.
157 149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
158 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int forum_need_moderation(void){
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return !g.perm.WrTForum && !g.perm.ModForum && P("domod")==0;
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("domod") ) return 1;
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.WrTForum ) return 0;
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.ModForum ) return 0;
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
160 155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161 156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
162 157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
163 158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add a new Forum Post artifact to the repository.
164 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -235,13 +230,11 @@
235 230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_copy(&formatCheck, &x);
236 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPost = manifest_parse(&formatCheck, 0, &errMsg);
237 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPost==0 ){
238 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
webpage_error("malformed forum post artifact - %s", blob_str(&errMsg));
239 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pPost->type!=CFTYPE_FORUM ){
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- webpage_error("forum post artifact malformed");
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ webpage_assert( pPost->type==CFTYPE_FORUM );
243 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_destroy(pPost);
244 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
245 238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("dryrun") ){
246 239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <div class='debug'>
247 240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ This is the artifact that would have been generated:
@@ -330,10 +323,12 @@
330 323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fpid;
331 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Manifest *pPost;
332 325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zMimetype = 0;
333 326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zContent = 0;
334 327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTitle = 0;
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isCsrfSafe;
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isDelete = 0;
335 330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
336 331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_check_credentials();
337 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.WrForum ){
338 333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_needed(g.anon.WrForum);
339 334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
@@ -340,57 +335,81 @@
340 335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
341 336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fpid = symbolic_name_to_rid(PD("fpid",""), "f");
342 337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fpid<=0 || (pPost = manifest_get(fpid, CFTYPE_FORUM, 0))==0 ){
343 338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
webpage_error("Missing or invalid fpid query parameter");
344 339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.perm.ModForum ){
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("cancel") ){
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_redirectf("%R/forumthread/%S",P("fpid"));
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isCsrfSafe = cgi_csrf_safe(1);
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.ModForum && isCsrfSafe ){
346 346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("approve") ){
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- webpage_not_yet_implemented();
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ moderation_approve(fpid);
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_redirectf("%R/forumthread/%S",P("fpid"));
348 349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
349 350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
350 351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("reject") ){
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- webpage_not_yet_implemented();
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ moderation_disapprove(fpid);
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_redirectf("%R/forumthread/%S",P("fpid"));
352 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
353 355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
354 356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( P("submit") && cgi_csrf_safe(1) ){
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isDelete = P("nullout")!=0;
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("submit") && isCsrfSafe ){
356 359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int done = 1;
357 360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zMimetype = PD("mimetype","text/x-fossil-wiki");
358 361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zContent = PDT("content","");
359 362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("reply") ){
360 363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
done = forum_post(0, fpid, 0, 0, zMimetype, zContent);
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( P("edit") ){
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( P("edit") || isDelete ){
362 365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
done = forum_post(P("title"), 0, fpid, 0, zMimetype, zContent);
363 366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
364 367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
webpage_error("Missing 'reply' query parameter");
365 368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
366 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( done ) return;
367 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( P("edit") ){
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isDelete ){
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zMimetype = "text/x-fossil-wiki";
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zContent = "<i>Deleted</i>";
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pPost->zThreadTitle ) zTitle = "<i>Deleted</i>";
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <h1>Original Post:</h1>
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ forum_render(pPost->zThreadTitle, pPost->zMimetype, pPost->zWiki);
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <h1>Change Into:</h1>
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ forum_render(zTitle, zMimetype, zContent);
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <form action="%R/forumedit" method="POST">
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="hidden" name="fpid" value="%h(P("fpid"))">
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="hidden" name="nullout" value="1">
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="hidden" name="mimetype" value="%h(zMimetype)">
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="hidden" name="content" value="%h(zContent)">
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zTitle ){
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="hidden" name="title" value="%h(zTitle)">
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( P("edit") ){
369 388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Provide an edit to the fpid post */
370 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zMimetype = P("mimetype");
371 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zContent = PT("content");
372 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTitle = P("title");
373 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zContent==0 ) zContent = fossil_strdup(pPost->zWiki);
374 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zMimetype==0 ) zMimetype = fossil_strdup(pPost->zMimetype);
375 394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zTitle==0 && pPost->zThreadTitle!=0 ){
376 395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTitle = fossil_strdup(pPost->zThreadTitle);
377 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_header("Forum Edit");
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_header("Edit Forum Post");
379 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h1>Original Post:</h1>
380 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_render(pPost->zThreadTitle, pPost->zMimetype, pPost->zWiki);
381 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("preview") ){
382 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h1>Preview Of Editted Post:</h1>
383 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_render(zTitle, zMimetype, zContent);
384 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <h1>
386 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h1>Enter A Reply:</h1>
387 405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <form action="%R/forumedit" method="POST">
388 406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="hidden" name="fpid" value="%h(P("fpid"))">
389 407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="hidden" name="edit" value="1">
390 408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_entry_widget(zTitle, zMimetype, zContent);
391 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Reply */
392 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zMimetype = PD("mimetype","text/x-fossil-wiki");
393 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zContent = PDT("content","");
394 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_header("Forum Reply");
395 414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h1>Replying To:</h1>
396 415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_render(0, pPost->zMimetype, pPost->zWiki);
@@ -402,12 +421,15 @@
402 421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <form action="%R/forumedit" method="POST">
403 422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="hidden" name="fpid" value="%h(P("fpid"))">
404 423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="hidden" name="reply" value="1">
405 424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_entry_widget(0, zMimetype, zContent);
406 425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <input type="submit" name="preview" value="Preview">
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( P("preview") ){
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !isDelete ){
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="submit" name="preview" value="Preview">
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="submit" name="cancel" value="Cancel">
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("preview") || isDelete ){
409 431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" name="submit" value="Submit">
410 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
411 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.Debug ){
412 434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* For the test-forumnew page add these extra debugging controls */
413 435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <div class="debug">
414 436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!