@@ -1124,11 +1124,18 @@
1124 1124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ %s(iClosed ? " forumClosed" : "")\
1125 1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ %s(p->pEditTail ? " forumObs" : "")' \
1126 1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iIndent && iIndentScale ){
1127 1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ style='margin-left:%d(iIndent*iIndentScale)ex;' \
1128 1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ data-fpid="%s(p->zUuid)">
1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* These data-X fields are used by the JS editor. */
1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->pIrt ){
1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ data-firt="%s(p->pIrt->zUuid)" \
1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->pEditHead ){
1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ data-fedithead="%s(p->pEditHead->zUuid)" \
1135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ data-fpid="%s(p->zUuid)">\
1130 1137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1131 1138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this is the first post (or an edit thereof), emit the thread title. */
1132 1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pManifest->zThreadTitle ){
1133 1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h1>%h(pManifest->zThreadTitle)</h1>
1134 1141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1647,19 +1654,10 @@
1647 1654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.WrTForum ) return 0;
1648 1655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.ModForum ) return 0;
1649 1656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
1650 1657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1651 1658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
1653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return true if the string is white-space only.
1654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
1655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int whitespace_only(const char *z){
1656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z==0 ) return 1;
1657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( z[0] && fossil_isspace(z[0]) ){ z++; }
1658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return z[0]==0;
1659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
1661 1659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Flags for use with forum_post() */
1662 1660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FPOST_NO_ALERT 1 /* do not send any alerts */
1663 1661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FPOST_DRYRUN 2 /* do not save the artifact */
1664 1662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1665 1663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -1703,11 +1701,11 @@
1703 1701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.Admin && (iEdit || iInReplyTo)
1704 1702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& forum_rid_is_tagged(iEdit ? iEdit : iInReplyTo, "closed", 1) ){
1705 1703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forumpost_error_closed();
1706 1704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
1707 1705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iEdit==0 && whitespace_only(zContent) ){
1706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iEdit==0 && fossil_all_whitespace(zContent) ){
1709 1707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
1710 1708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1711 1709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iInReplyTo==0 && iEdit>0 ){
1712 1710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iBasis = iEdit;
1713 1711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iInReplyTo = db_int(0, "SELECT firt FROM forumpost WHERE fpid=%d", iEdit);
@@ -1988,11 +1986,11 @@
1988 1986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ it.</div>
1989 1987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1990 1988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1991 1989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1992 1990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** WEBPAGE: forume1
1991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WEBPAGE: forume1 hidden
1994 1992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1995 1993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Start a new forum thread.
1996 1994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1997 1995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void forumnew_page(void){
1998 1996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTitle = PDT("title","");
@@ -2007,11 +2005,11 @@
2007 2005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2008 2006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("submit") && cgi_csrf_safe(2) ){
2009 2007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( forum_post(zTitle, 0, 0, 0, zMimetype, zContent,
2010 2008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_post_flags()) ) return;
2011 2009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( P("preview") && !whitespace_only(zContent) ){
2010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("preview") && !fossil_all_whitespace(zContent) ){
2013 2011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h1>Preview:</h1>
2014 2012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_render(zTitle, zMimetype, zContent, "forumEdit", 1);
2015 2013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2016 2014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_set_current_feature("forum");
2017 2015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_header("New Forum Thread");
@@ -2023,11 +2021,11 @@
2023 2021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h1>New Thread:</h1>
2024 2022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_from_line();
2025 2023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_post_widget(zTitle, zMimetype, zContent);
2026 2024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" name="preview" value="Preview">
2027 2025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="hidden" name="legacy" value="1">
2028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( P("preview") && !whitespace_only(zContent) ){
2026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("preview") && !fossil_all_whitespace(zContent) ){
2029 2027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" name="submit" value="Submit">
2030 2028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2031 2029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" name="submit" value="Submit" disabled>
2032 2030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2033 2031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_render_debug_options();
@@ -2048,11 +2046,11 @@
2048 2046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_emit_js();
2049 2047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_finish_page();
2050 2048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2051 2049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2052 2050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** WEBPAGE: forume2
2051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WEBPAGE: forume2 hidden
2054 2052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2055 2053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Edit an existing forum message.
2056 2054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Query parameters:
2057 2055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2058 2056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** fpid=X Hash of the post to be edited. REQUIRED
@@ -2143,11 +2141,11 @@
2143 2141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_set_current_feature("forum");
2144 2142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete = P("nullout")!=0;
2145 2143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("submit")
2146 2144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& isCsrfSafe
2147 2145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (zContent = PDT("content",""))!=0
2148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (!whitespace_only(zContent) || isDelete)
2146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (isDelete || !fossil_all_whitespace(zContent))
2149 2147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
2150 2148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int done = 1;
2151 2149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zMimetype = PD("mimetype",DEFAULT_FORUM_MIMETYPE);
2152 2150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bReply ){
2153 2151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
done = forum_post(0, fpid, 0, 0, zMimetype, zContent,
@@ -2221,11 +2219,11 @@
2221 2219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDisplayName = display_name_from_login(pPost->zUser);
2222 2220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h3 class='forumPostHdr'>By %s(zDisplayName) on %h(zDate)</h3>
2223 2221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(zDisplayName);
2224 2222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(zDate);
2225 2223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_render(0, pPost->zMimetype, pPost->zWiki, "forumEdit", 1);
2226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( bPreview && !whitespace_only(zContent) ){
2224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bPreview && !fossil_all_whitespace(zContent) ){
2227 2225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h2>Preview:</h2>
2228 2226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_render(0, zMimetype,zContent, "forumEdit", 1);
2229 2227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2230 2228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h2>Enter Reply:</h2>
2231 2229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <form action="%R/forume2" method="POST">
@@ -2237,11 +2235,11 @@
2237 2235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isDelete ){
2238 2236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" name="preview" value="Preview">
2239 2237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2240 2238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="hidden" name="legacy" value="1">
2241 2239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" name="cancel" value="Cancel">
2242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (bPreview && !whitespace_only(zContent)) || isDelete ){
2240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isDelete || (bPreview && !fossil_all_whitespace(zContent)) ){
2243 2241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !iClosed || g.perm.Admin ) {
2244 2242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" name="submit" value="Submit">
2245 2243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2246 2244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2247 2245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
forum_render_debug_options();
@@ -2807,16 +2805,26 @@
2807 2805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2808 2806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Returns the new artifact's RID on success, 0 if no changes were
2809 2807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** necessary (e.g. an empty new post or dry-run mode), and a negative
2810 2808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value on error. If it returns a negative value then it will have
2811 2809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** populated the ajax response state with an error object.
2810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zTitle must be NULL if iInReplyTo>0 and must be non-empty if
2812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** iInReplyTo==0.
2812 2813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2813 2814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The caller must have started a transaction and must roll it back if
2814 2815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this call returns <=0, noting that only the negative-value case is
2815 2816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an error.
2817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Maintenance reminders:
2819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - iInReplyTo==0 && iEdit==0: new thread
2821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - iInReplyTo==0 && iEdit>0 : edit top post or response
2822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - iInReplyTo>0 && iEdit==0: new response
2823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - iInReplyTo>0 && iEdit>0 : edit response
2816 2824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int forum_post_ajax(
2825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int forum_post_ajax(
2818 2826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTitle, /* Title. NULL for replies */
2819 2827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iInReplyTo, /* Post replying to. 0 for new threads */
2820 2828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iEdit, /* Post being edited, or zero for a new post */
2821 2829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUser, /* Username. NULL means use login name */
2822 2830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zMimetype, /* Mimetype of content. */
@@ -2834,18 +2842,18 @@
2834 2842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nContent = zContent ? (int)strlen(zContent) : 0;
2835 2843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = 0;
2836 2844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2837 2845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db_transaction_nesting_depth()>0 );
2838 2846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
schema_forum();
2839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iEdit==0 && whitespace_only(zContent) ){
2847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iEdit==0 && fossil_all_whitespace(zContent) ){
2840 2848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
2841 2849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2842 2850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.Admin && (iEdit || iInReplyTo)
2843 2851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& forum_rid_is_tagged(iEdit ? iEdit : iInReplyTo, "closed", 1) ){
2844 2852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return -ajax_route_error(400, "Thread is closed.");
2845 2853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==iInReplyTo && whitespace_only(zTitle) ){
2854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==iInReplyTo && fossil_all_whitespace(zTitle) ){
2847 2855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return -ajax_route_error(400, "Empty title is not permitted.");
2848 2856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2849 2857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2850 2858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zUser==0 ){
2851 2859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( login_is_nobody() ){
@@ -2865,11 +2873,16 @@
2865 2873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iBasis = iEdit;
2866 2874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iInReplyTo = db_int(0, "SELECT firt FROM forumpost WHERE fpid=%d",
2867 2875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iEdit);
2868 2876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2869 2877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iBasis = iInReplyTo;
2878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* TODO (2026-06-008) If (iInReplyTo>0 && iEdit>0), validate that
2879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** iInReplyTo is connected to iEdit properly, else we risk
2880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** reparenting the new edit and having unrepredictable downstream
2881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** side effects. */
2870 2882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0!=zTitle && 0==zTitle[0] ) zTitle = 0;
2871 2884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
webpage_assert( (zTitle==0)+(iInReplyTo==0)==1 );
2872 2885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&x, 0, 0);
2873 2886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&x, "D %z\n", date_in_standard_format("now"));
2874 2887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zG = db_text(
2875 2888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0,
@@ -2960,18 +2973,19 @@
2960 2973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zIrt;
2961 2974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zMimetype;
2962 2975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zContent;
2963 2976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zStatus;
2964 2977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int bHasAttachment = P("file1")!=0;
2978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Manifest *pPost = 0;
2965 2979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zNewUuid = 0;
2966 2980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int goodCaptcha = 1;
2967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iIrt = 0; /* In-reply-to rid or 0 */
2968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iEditRid = 0; /* Post rid being edited or 0 */
2969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = 0;
2970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nrid = 0;
2971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iPostFlags;
2972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bRollback = 1; /* True = roll back. */
2981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int firt = 0; /* In-reply-to rid or 0 */
2982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fpid = 0; /* Post rid being edited or 0 */
2983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = 0; /* Result code. */
2984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nrid = 0; /* New artifact rid. */
2985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPostFlags; /* forum_post_flags() (after perms check) */
2986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bRollback; /* True = roll back. */
2973 2987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2974 2988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !ajax_route_bootstrap(0, 1) ){
2975 2989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
2976 2990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( !g.perm.WrForum
2977 2991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (bHasAttachment && !g.perm.AttachForum) ){
@@ -2983,35 +2997,48 @@
2983 2997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( 0==(goodCaptcha = captcha_is_correct(0)) ){
2984 2998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ajax_route_error_captcha();
2985 2999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
2986 3000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2987 3001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iPostFlags = forum_post_flags();
3002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iPostFlags = forum_post_flags(/*must come after permissions init*/);
2989 3003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bRollback = (FPOST_DRYRUN & iPostFlags);
2990 3004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFpid = P("fpid");
2991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zTitle = P("title");
2992 3005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIrt = P("firt");
2993 3006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zMimetype = P("mimetype");
2994 3007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zContent = P("content");
2995 3008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zStatus = P("status");
2996 3009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_transaction();
2997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zFpid ){
2998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iEditRid = symbolic_name_to_rid(zFpid, "f");
2999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iEditRid<0 ){
3010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zFpid && zFpid[0] ){
3011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpid = symbolic_name_to_rid(zFpid, "f");
3012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fpid<0 ){
3000 3013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = -ajax_route_error(400, "Ambiguous forum ID.");
3001 3014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( 0==iEditRid ){
3015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( 0==fpid
3016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || 0==(pPost = manifest_get(fpid, CFTYPE_FORUM, 0)) ){
3003 3017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = -ajax_route_error(404, "Cannot resolve forum post ID.");
3004 3018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3005 3019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3006 3020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zIrt ){
3008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iIrt = symbolic_name_to_rid(zIrt, "f");
3009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iIrt<0 ){
3021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
3022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Problem: if we derive firt from fpid/pPost then there's a race
3023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** condition where the IRT post is edited between the time that this
3024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** edit was initiated and when it is posted: the new edit's IRT will
3025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** point to the edit which was made in the meantime, not the one the
3026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** user intended to respond to. However, if we accept firt from the
3027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** enviornment, we "really should" validate that it's actually in
3028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the current chain, to prohibit that malicious posts could move
3029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** posts around.
3030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** forum_post_ajax() will, if fpid>0 && !firt, select fpid's current
3032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** firt.
3033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
3034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zIrt && zIrt[0] ){
3035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ firt = symbolic_name_to_rid(zIrt, "f");
3036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( firt<0 ){
3010 3037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = -ajax_route_error(400, "Ambiguous in-reply-do ID.");
3011 3038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( 0==iIrt ){
3039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( 0==firt ){
3013 3040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = -ajax_route_error(404, "Cannot resolve in-reply-do ID.");
3014 3041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3015 3042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3016 3043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3017 3044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -3020,11 +3047,12 @@
3020 3047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"iPostFlags=%d debug=%d",
3021 3048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iPostFlags, g.perm.Debug);
3022 3049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3023 3050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3024 3051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nrid = forum_post_ajax(zTitle, iIrt, iEditRid, 0, zMimetype,
3052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTitle = firt ? 0 : P("title");
3053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nrid = forum_post_ajax(zTitle, firt, fpid, 0, zMimetype,
3026 3054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zContent, iPostFlags);
3027 3055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nrid<0 ){
3028 3056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = nrid;
3029 3057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3030 3058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( nrid==0 ){
@@ -3034,21 +3062,26 @@
3034 3062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
3035 3063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CX("{\"message\": \"Rolled back for dry-run.\","
3036 3064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"\"iPostFlags\":%d}\n", iPostFlags);
3037 3065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3038 3066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nrid>0 ){
3067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
3068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int bNeedsModeration = forum_need_moderation();
3069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int fpRoot = forumpost_head_rid(nrid);
3070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nrid>0 );
3041 3071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zNewUuid = rid_to_uuid(nrid);
3042 3072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0!=P("file1") ){
3043 3073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Attachments */
3044 3074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.Admin && !g.perm.AttachForum ){
3045 3075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = -ajax_route_error(403, "No permission no attach files.");
3046 3076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3047 3077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
3078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zRoot = (nrid==fpRoot) ? 0 : rid_to_uuid(fpRoot);
3048 3079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int atRc =
3049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- attachments_ajax_from_POST(zNewUuid, forum_need_moderation());
3080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ attachments_ajax_from_POST(zRoot ? zRoot : zNewUuid,
3081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bNeedsModeration);
3082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free(zRoot);
3050 3083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( atRc<0 ){
3051 3084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = atRc;
3052 3085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3053 3086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3054 3087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( atRc>0
@@ -3055,12 +3088,12 @@
3055 3088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (iPostFlags & FPOST_NO_ALERT)!=0
3056 3089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& db_table_exists("repository","pending_alert") ){
3057 3090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Unqueue any alerts for these attachments. Recall that
3058 3091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** they're attached to the first version of the post, which
3059 3092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** means we actually risk cancelling _other_ pending
3060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** notifications for attachments on this same post. */
3061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const int fpRoot = forumpost_head_rid(nrid);
3093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** notifications for attachments on this same post. C'est la
3094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** vie.*/
3062 3095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
3063 3096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"WITH x(id) AS (\n"
3064 3097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT 'f%d'\n"
3065 3098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" UNION ALL\n"
3066 3099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT 'f'||a.attachid FROM blob b, attachment a\n"
@@ -3070,11 +3103,15 @@
3070 3103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fpRoot, fpRoot
3071 3104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
3072 3105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3073 3106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3074 3107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zStatus!=0 && zStatus[0]!=0
3108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==bNeedsModeration
3109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* ^^^ Do not allow a status tag on a pending-moderation post
3110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** because it will introduce a reference to an artifact which
3111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will become a phantom if it is rejected by a moderator. */
3112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && zStatus!=0 && zStatus[0]!=0
3076 3113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& forum_may_set_status(nrid)
3077 3114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& forumpost_tag(nrid, 1, "status", zStatus)<0 ){
3078 3115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = -ajax_route_error(500, "Tagging failed: %s", g.zErrMsg);
3079 3116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto ajax_save_end;
3080 3117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -3084,8 +3121,9 @@
3084 3121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zNewUuid );
3085 3122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CX("{\"uuid\": %!j, \"dryrun\": %s, \"iPostFlags\":%d}\n",
3086 3123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zNewUuid, bRollback ? "true" : "false", iPostFlags);
3087 3124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3088 3125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ajax_save_end:
3126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ manifest_destroy(pPost);
3089 3127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(zNewUuid);
3090 3128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(rc || bRollback);
3091 3129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
3092 3130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!