@@ -195,21 +195,27 @@
195 195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
196 196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
197 197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
198 198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Save an attachment control artifact into the repository
199 199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void attach_put(Blob *pAttach, int attachRid, int needMod){
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void attach_put(
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *pAttach, /* Text of the Attachment record */
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int attachRid, /* RID for the file that is being attached */
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int needMod /* True if the attachment is subject to moderation */
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
201 205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
202 206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( needMod ){
203 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = content_put_ex(pAttach, 0, 0, 0, 1);
204 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
moderation_table_create();
205 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
206 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"INSERT INTO modreq(objid,attachRid) VALUES(%d,%d);",
207 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid, attachRid
208 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
209 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- content_put(pAttach);
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = content_put(pAttach);
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d);", rid);
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec("INSERT OR IGNORE INTO unclustered VALUES(%d);", rid);
211 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
212 218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_crosslink(rid, pAttach);
213 219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
214 220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
215 221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -268,11 +274,11 @@
268 274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zDate;
269 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
270 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, n;
271 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addCompress = 0;
272 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Manifest *pManifest;
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isModerator;
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int needModerator;
274 280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
275 281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_transaction();
276 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&content, aContent, szContent);
277 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pManifest = manifest_parse(&content, 0, 0);
278 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_destroy(pManifest);
@@ -279,12 +285,14 @@
279 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&content, aContent, szContent);
280 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pManifest ){
281 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_compress(&content, &content);
282 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addCompress = 1;
283 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- isModerator = (zTkt!=0 && g.perm.ModTkt) || (zPage!=0 && g.perm.ModWiki);
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = content_put_ex(&content, 0, 0, 0, !isModerator);
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ needModerator =
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (zTkt!=0 && g.perm.ModTkt==0 && db_get_boolean("modreq-tkt",0)==1) ||
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (zPage!=0 && g.perm.ModWiki==0 && db_get_boolean("modreq-wiki",0)==1);
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = content_put_ex(&content, 0, 0, 0, needModerator);
286 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zUUID = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
287 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&manifest);
288 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=n=0; zName[i]; i++){
289 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zName[i]=='/' || zName[i]=='\\' ) n = i;
290 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -302,11 +310,11 @@
302 310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDate = date_in_standard_format("now");
303 311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&manifest, "D %s\n", zDate);
304 312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&manifest, "U %F\n", g.zLogin ? g.zLogin : "nobody");
305 313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
md5sum_blob(&manifest, &cksum);
306 314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&manifest, "Z %b\n", &cksum);
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- attach_put(&manifest, rid, !isModerator);
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ attach_put(&manifest, rid, needModerator);
308 316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( blob_is_reset(&manifest) );
309 317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(0);
310 318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_redirect(zFrom);
311 319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
312 320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_header("Add Attachment");
@@ -327,50 +335,77 @@
327 335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <input type="submit" name="cancel" value="Cancel" />
328 336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </div></form>
329 337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_footer();
330 338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
331 339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** WEBPAGE: attachdelete
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** tkt=TICKETUUID
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** page=WIKIPAGE
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** file=FILENAME
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** "Delete" an attachment. Because objects in Fossil are immutable
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the attachment isn't really deleted. Instead, we change the content
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the attachment to NULL, which the system understands as being
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** deleted. Historical values of the attachment are preserved.
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void attachdel_page(void){
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zPage = P("page");
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zTkt = P("tkt");
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zFile = P("file");
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zFrom = P("from");
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zTarget;
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zPage && zTkt ) fossil_redirect_home();
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zPage==0 && zTkt==0 ) fossil_redirect_home();
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zFile==0 ) fossil_redirect_home();
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WEBPAGE: ainfo
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** URL: /ainfo?name=ARTIFACTID
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Show the details of an attachment artifact.
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void ainfo_page(void){
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid; /* RID for the control artifact */
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ridSrc; /* RID for the attached file */
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zDate; /* Date attached */
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zUuid; /* UUID of the control artifact */
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Manifest *pAttach; /* Parse of the control artifact */
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTarget; /* Wiki or ticket attached to */
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zSrc; /* UUID of the attached file */
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName; /* Name of the attached file */
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zDesc; /* Description of the attached file */
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zWikiName = 0; /* Wiki page name when attached to Wiki */
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTktUuid = 0; /* Ticket ID when attached to a ticket */
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int modPending; /* True if awaiting moderation */
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zModAction; /* Moderation action or NULL */
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isModerator; /* TRUE if user is the moderator */
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zMime; /* MIME Type */
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob attach; /* Content of the attachment */
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int wantToDelete = P("del")!=0;/* Want to delete */
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
355 365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_check_credentials();
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zPage ){
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.perm.WrWiki==0 || g.perm.Attach==0 ) login_needed();
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zTarget = zPage;
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.perm.WrTkt==0 || g.perm.Attach==0 ) login_needed();
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zTarget = zTkt;
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zFrom==0 ) zFrom = mprintf("%s/home", g.zTop);
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( P("cancel") ){
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cgi_redirect(zFrom);
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( P("confirm") ){
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !g.perm.Attach ){ login_needed(); return; }
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = name_to_rid_www("name");
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rid==0 ){ fossil_redirect_home(); }
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid);
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if 0
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Shunning here needs to get both the attachment control artifact and
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the object that is attached. */
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.Admin ){
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db_exists("SELECT 1 FROM shun WHERE uuid='%s'", zUuid) ){
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_submenu_element("Unshun","Unshun", "%s/shun?uuid=%s&sub=1",
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zTop, zUuid);
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_submenu_element("Shun","Shun", "%s/shun?shun=%s#addshun",
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zTop, zUuid);
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAttach = manifest_get(rid, CFTYPE_ATTACHMENT);
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pAttach==0 ) fossil_redirect_home();
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTarget = pAttach->zAttachTarget;
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zSrc = pAttach->zAttachSrc;
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ridSrc = db_int(0,"SELECT rid FROM blob WHERE uuid='%s'", zSrc);
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zName = pAttach->zAttachName;
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDesc = pAttach->zComment;
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( validate16(zTarget, strlen(zTarget))
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && db_exists("SELECT 1 FROM ticket WHERE tkt_uuid='%s'", zTarget)
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTktUuid = zTarget;
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( db_exists("SELECT 1 FROM tag WHERE tagname='wiki-%q'",zTarget) ){
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zWikiName = zTarget;
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDate = db_text(0, "SELECT datetime(%.12f)", pAttach->rDate);
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("confirm")
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && ((zTktUuid && g.perm.WrTkt) || (zWikiName && g.perm.WrWiki))
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
368 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, n, rid;
369 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zDate;
370 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob manifest;
371 405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob cksum;
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zFile = zName;
372 407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
373 408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_transaction();
374 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&manifest);
375 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=n=0; zFile[i]; i++){
376 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zFile[i]=='/' || zFile[i]=='\\' ) n = i;
@@ -384,24 +419,158 @@
384 419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
md5sum_blob(&manifest, &cksum);
385 420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&manifest, "Z %b\n", &cksum);
386 421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = content_put(&manifest);
387 422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_crosslink(rid, &manifest);
388 423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(0);
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cgi_redirect(zFrom);
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- style_header("Delete Attachment");
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <form action="%s(g.zTop)/attachdelete" method="post"><div>
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <p>Confirm that you want to delete the attachment named
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ "%h(zFile)" on %s(zTkt?"ticket":"wiki page") %h(zTarget):<br /></p>
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zTkt ){
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <input type="hidden" name="tkt" value="%h(zTkt)" />
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <p>The attachment below has been deleted.</p>
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( P("del")
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && ((zTktUuid && g.perm.WrTkt) || (zWikiName && g.perm.WrWiki))
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <form method="post" action="%R/ainfo/%s(zUuid)">
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <p>Confirm you want to delete the attachment shown below.
432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="submit" name="confirm" value="Confirm">
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </form>
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isModerator = (zTktUuid && g.perm.ModTkt) || (zWikiName && g.perm.ModWiki);
437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isModerator && (zModAction = P("modaction"))!=0 ){
438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(zModAction,"delete")==0 ){
439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ moderation_disapprove(rid);
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zTktUuid ){
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_redirectf("%R/tktview/%s", zTktUuid);
442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_redirectf("%R/wiki?name=%t", zWikiName);
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(zModAction,"approve")==0 ){
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ moderation_approve(rid);
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_header("Attachment Details");
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_submenu_element("Raw", "Raw", "%R/artifact/%S", zUuid);
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <div class="section">Overview</div>
455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <p><table class="label-value">
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th>Artifact ID:</th>
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <td>%z(href("%R/artifact/%s",zUuid))%s(zUuid)</a>
458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.Setup ){
459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ (%d(rid))
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ modPending = moderation_pending(rid);
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( modPending ){
463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <span class="modpending">*** Awaiting Moderator Approval ***</span>
464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zTktUuid ){
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th>Ticket:</th>
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <td>%z(href("%R/tktview/%s",zTktUuid))%s(zTktUuid)</a></td></tr>
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.WrTkt ){
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_submenu_element("Delete","Delete","%R/ainfo/%s?del", zUuid);
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zWikiName ){
473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th>Wiki Page:</th>
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <td>%z(href("%R/wiki?name=%t",zWikiName))%h(zWikiName)</a></td></tr>
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.WrWiki ){
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_submenu_element("Delete","Delete","%R/ainfo/%s?del", zUuid);
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th>Date:</th><td>
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hyperlink_to_date(zDate, "</td></tr>");
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(zDate);
482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th>User:</th><td>
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hyperlink_to_user(pAttach->zUser, zDate, "</td></tr>");
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th>Artifact Attached:</th>
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <td>%z(href("%R/artifact/%s",zSrc))%s(zSrc)</a>
486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.Setup ){
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ (%d(ridSrc))
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th>Filename:</th><td>%h(zName)</td></tr>
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zMime = mimetype_from_name(zName);
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.Setup ){
492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th>MIME-Type:</th><td>%h(zMime)</td></tr>
493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <tr><th valign="top">Description:</th><td valign="top">%h(zDesc)</td></tr>
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </table>
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isModerator && modPending ){
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <div class="section">Moderation</div>
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <blockquote>
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <form method="POST" action="%R/ainfo/%s(zUuid)">
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <label><input type="radio" name="modaction" value="delete">
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ Delete this change</label><br />
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <label><input type="radio" name="modaction" value="approve">
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ Approve this change</label><br />
505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <input type="submit" value="Submit">
506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </form>
507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </blockquote>
508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <div class="section">Content Appended</div>
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <blockquote>
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_zero(&attach);
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zMime==0 || strncmp(zMime,"text/", 5)==0 ){
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z;
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zLn = P("ln");
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ content_get(ridSrc, &attach);
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_strip_bom(&attach, 0);
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = blob_str(&attach);
519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zLn ){
520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ output_text_with_line_numbers(z, zLn);
521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <pre>
523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %h(z)
524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </pre>
525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( strncmp(zMime, "image/", 6)==0 ){
527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <img src="%R/raw?name=%s(zSrc)&m=%s(zMime)"></img>
397 528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <input type="hidden" name="page" value="%h(zPage)" />
529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sz = db_int(0, "SELECT sz FROM blob WHERE rid=%d", ridSrc);
530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <i>(file is %d(sz) bytes of binary data)</i>
399 531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <input type="hidden" name="file" value="%h(zFile)" />
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <input type="hidden" name="from" value="%h(zFrom)" />
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <input type="submit" name="confirm" value="Delete" />
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <input type="submit" name="cancel" value="Cancel" />
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ </div></form>
532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </blockquote>
533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ manifest_destroy(pAttach);
534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&attach);
405 535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_footer();
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
406 537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Output HTML to show a list of attachments.
540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void attachment_list(
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTarget, /* Object that things are attached to */
543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zHeader /* Header to display with attachments */
544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cnt = 0;
546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Stmt q;
547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_prepare(&q,
548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT datetime(mtime,'localtime'), filename, user,"
549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " (SELECT uuid FROM blob WHERE rid=attachid)"
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " FROM attachment"
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE isLatest AND src!='' AND target=%Q"
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " ORDER BY mtime DESC",
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTarget
554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( db_step(&q)==SQLITE_ROW ){
556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zDate = db_column_text(&q, 0);
557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zFile = db_column_text(&q, 1);
558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zUser = db_column_text(&q, 2);
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zUuid = db_column_text(&q, 3);
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cnt==0 ){
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %s(zHeader)
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cnt++;
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <li>
565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %z(href("%R/artifact/%s",zUuid))%h(zFile)</a>
566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ added by %h(zUser) on
567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hyperlink_to_date(zDate, ".");
568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ [%z(href("%R/ainfo/%s",zUuid))details</a>]
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </li>
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cnt ){
572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </ul>
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_finalize(&q);
575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
407 576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
408 577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!