@@ -1524,11 +1524,11 @@
1524 1524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to know the subscriber code.
1525 1525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1526 1526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void alert_page(void){
1527 1527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = P("name");
1528 1528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
1529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int sa, sc, sf, st, sw;
1529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sa, sc, sf, st, sw, sx;
1530 1530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int sdigest, sdonotcall, sverified;
1531 1531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isLogin; /* Logged in as an individual */
1532 1532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *ssub = 0;
1533 1533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *semail;
1534 1534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *smip;
@@ -1565,10 +1565,11 @@
1565 1565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( PB("sa") ) newSsub[nsub++] = 'a';
1566 1566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.Read && PB("sc") ) newSsub[nsub++] = 'c';
1567 1567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdForum && PB("sf") ) newSsub[nsub++] = 'f';
1568 1568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdTkt && PB("st") ) newSsub[nsub++] = 't';
1569 1569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdWiki && PB("sw") ) newSsub[nsub++] = 'w';
1570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.perm.RdForum && PB("sx") ) newSsub[nsub++] = 'x';
1570 1571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
newSsub[nsub] = 0;
1571 1572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ssub = newSsub;
1572 1573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&update, "UPDATE subscriber SET", -1);
1573 1574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&update,
1574 1575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" sdonotcall=%d,"
@@ -1646,10 +1647,11 @@
1646 1647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sa = strchr(ssub,'a')!=0;
1647 1648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sc = strchr(ssub,'c')!=0;
1648 1649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sf = strchr(ssub,'f')!=0;
1649 1650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
st = strchr(ssub,'t')!=0;
1650 1651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sw = strchr(ssub,'w')!=0;
1652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sx = strchr(ssub,'x')!=0;
1651 1653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
smip = db_column_text(&q, 5);
1652 1654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mtime = db_column_text(&q, 7);
1653 1655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sctime = db_column_text(&q, 8);
1654 1656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.Admin && !sverified ){
1655 1657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
@@ -1715,10 +1717,12 @@
1715 1717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ Check-ins</label><br>
1716 1718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1717 1719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdForum ){
1718 1720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <label><input type="checkbox" name="sf" %s(sf?"checked":"")>\
1719 1721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ Forum Posts</label><br>
1722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <label><input type="checkbox" name="sx" %s(sx?"checked":"")>\
1723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ Forum Edits</label><br>
1720 1724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1721 1725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.perm.RdTkt ){
1722 1726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <label><input type="checkbox" name="st" %s(st?"checked":"")>\
1723 1727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ Ticket changes</label><br>
1724 1728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -2004,13 +2008,21 @@
2004 2008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2005 2009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if LOCAL_INTERFACE
2006 2010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2007 2011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A single event that might appear in an alert is recorded as an
2008 2012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** instance of the following object.
2013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** type values:
2015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** c A new check-in
2017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** f An original forum post
2018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x An edit to a prior forum post
2019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** t A new ticket or a change to an existing ticket
2020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** w A change to a wiki page
2009 2021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2010 2022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct EmailEvent {
2011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int type; /* 'c', 'f', 'm', 't', 'w' */
2023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int type; /* 'c', 'f', 't', 'w', 'x' */
2012 2024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int needMod; /* Pending moderator approval */
2013 2025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob hdr; /* Header content, for forum entries */
2014 2026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob txt; /* Text description to appear in an alert */
2015 2027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFromName; /* Human name of the sender */
2016 2028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
EmailEvent *pNext; /* Next in chronological order */
@@ -2085,20 +2097,20 @@
2085 2097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->needMod = db_column_int(&q, 4);
2086 2098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zFromName = 0;
2087 2099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pNext = 0;
2088 2100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( p->type ){
2089 2101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'c': zType = "Check-In"; break;
2090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case 'f': zType = "Forum post"; break;
2102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* case 'f': -- forum posts omitted from this loop. See below */
2091 2103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 't': zType = "Ticket Change"; break;
2092 2104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'w': zType = "Wiki Edit"; break;
2093 2105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2094 2106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&p->hdr, 0, 0);
2095 2107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&p->txt, 0, 0);
2096 2108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&p->txt,"== %s %s ==\n%s\n%s/info/%.20s\n",
2097 2109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_column_text(&q,1),
2098 2110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zType,
2099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_column_text(&q,2),
2111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_column_text(&q, 2),
2100 2112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zUrl,
2101 2113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_column_text(&q,0)
2102 2114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
2103 2115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->needMod ){
2104 2116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&p->txt,
@@ -2130,11 +2142,12 @@
2130 2142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" (SELECT uuid FROM blob WHERE rid=forumpost.fpid)," /* 1 */
2131 2143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" datetime(event.mtime)," /* 2 */
2132 2144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" substr(comment,instr(comment,':')+2)," /* 3 */
2133 2145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" (SELECT uuid FROM blob WHERE rid=forumpost.firt)," /* 4 */
2134 2146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" wantalert.needMod," /* 5 */
2135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " coalesce(trim(substr(info,1,instr(info,'<')-1)),euser,user)" /* 6 */
2147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " coalesce(trim(substr(info,1,instr(info,'<')-1)),euser,user)," /* 6 */
2148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " forumpost.fprev IS NULL" /* 7 */
2136 2149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM temp.wantalert, event, forumpost"
2137 2150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" LEFT JOIN user ON (login=coalesce(euser,user))"
2138 2151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE event.objid=substr(wantalert.eventId,2)+0"
2139 2152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND eventId GLOB 'f*'"
2140 2153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND forumpost.fpid=event.objid"
@@ -2150,11 +2163,11 @@
2150 2163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z;
2151 2164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPost==0 ) continue;
2152 2165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = fossil_malloc( sizeof(EmailEvent) );
2153 2166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLast->pNext = p;
2154 2167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLast = p;
2155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->type = 'f';
2168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->type = db_column_int(&q,7) ? 'f' : 'x';
2156 2169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->needMod = db_column_int(&q, 5);
2157 2170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = db_column_text(&q,6);
2158 2171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zFromName = z && z[0] ? fossil_strdup(z) : 0;
2159 2172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pNext = 0;
2160 2173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_init(&p->hdr, 0, 0);
@@ -2482,13 +2495,13 @@
2482 2495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if the recipient is a moderator for that type of event. Setup
2483 2496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and Admin users always get notified. */
2484 2497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char xType = '*';
2485 2498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strpbrk(zCap,"as")==0 ){
2486 2499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( p->type ){
2487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case 'f': xType = '5'; break;
2488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case 't': xType = 'q'; break;
2489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case 'w': xType = 'l'; break;
2500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'x': case 'f': xType = '5'; break;
2501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 't': xType = 'q'; break;
2502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'w': xType = 'l'; break;
2490 2503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2491 2504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strchr(zCap,xType)==0 ) continue;
2492 2505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2493 2506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( strchr(zCap,'s')!=0 || strchr(zCap,'a')!=0 ){
2494 2507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Setup and admin users can get any notification that does not
@@ -2496,14 +2509,14 @@
2496 2509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2497 2510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Other users only see the alert if they have sufficient
2498 2511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** privilege to view the event itself */
2499 2512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char xType = '*';
2500 2513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( p->type ){
2501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case 'c': xType = 'o'; break;
2502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case 'f': xType = '2'; break;
2503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case 't': xType = 'r'; break;
2504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case 'w': xType = 'j'; break;
2514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'c': xType = 'o'; break;
2515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'x': case 'f': xType = '2'; break;
2516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 't': xType = 'r'; break;
2517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 'w': xType = 'j'; break;
2505 2518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2506 2519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strchr(zCap,xType)==0 ) continue;
2507 2520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2508 2521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_size(&p->hdr)>0 ){
2509 2522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This alert should be sent as a separate email */
2510 2523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!