Fossil SCM

Enhancements to administrator access to the subscriber list.

drh 2018-06-25 14:45 trunk
Commit b7b877ef4928572c63029857d5c5ea3634cbeab34988e93d08fe0fafa0d34049
1 file changed +36 -14
+36 -14
--- src/email.c
+++ src/email.c
@@ -1096,10 +1096,12 @@
10961096
int sdigest, sdonotcall, sverified;
10971097
const char *ssub;
10981098
const char *semail;
10991099
const char *smip;
11001100
const char *suname;
1101
+ char *smtime;
1102
+ char *sctime;
11011103
int eErr = 0;
11021104
char *zErr = 0;
11031105
11041106
if( email_webpages_disabled() ) return;
11051107
login_check_credentials();
@@ -1171,17 +1173,19 @@
11711173
return;
11721174
}
11731175
}
11741176
db_prepare(&q,
11751177
"SELECT"
1176
- " semail,"
1177
- " sverified,"
1178
- " sdonotcall,"
1179
- " sdigest,"
1180
- " ssub,"
1181
- " smip,"
1182
- " suname"
1178
+ " semail," /* 0 */
1179
+ " sverified," /* 1 */
1180
+ " sdonotcall," /* 2 */
1181
+ " sdigest," /* 3 */
1182
+ " ssub," /* 4 */
1183
+ " smip," /* 5 */
1184
+ " suname," /* 6 */
1185
+ " datetime(smtime)," /* 7 */
1186
+ " datetime(sctime)" /* 8 */
11831187
" FROM subscriber WHERE subscriberCode=hextoblob(%Q)", zName);
11841188
if( db_step(&q)!=SQLITE_ROW ){
11851189
db_finalize(&q);
11861190
cgi_redirect("subscribe");
11871191
return;
@@ -1196,10 +1200,12 @@
11961200
sc = strchr(ssub,'c')!=0;
11971201
st = strchr(ssub,'t')!=0;
11981202
sw = strchr(ssub,'w')!=0;
11991203
smip = db_column_text(&q, 5);
12001204
suname = db_column_text(&q, 6);
1205
+ smtime = db_column_text(&q, 7);
1206
+ sctime = db_column_text(&q, 8);
12011207
if( !g.perm.Admin && !sverified ){
12021208
db_multi_exec(
12031209
"UPDATE subscriber SET sverified=1 WHERE subscriberCode=hextoblob(%Q)",
12041210
zName);
12051211
@ <h1>Your email alert subscription has been verified!</h1>
@@ -1216,10 +1222,18 @@
12161222
@ <tr>
12171223
@ <td class="form_label">Email&nbsp;Address:</td>
12181224
@ <td>%h(semail)</td>
12191225
@ </tr>
12201226
if( g.perm.Admin ){
1227
+ @ <tr>
1228
+ @ <td class='form_label'>Created:</td>
1229
+ @ <td>%h(sctime)</td>
1230
+ @ </tr>
1231
+ @ <tr>
1232
+ @ <td class='form_label'>Last Modified:</td>
1233
+ @ <td>%h(smtime)</td>
1234
+ @ </tr>
12211235
@ <tr>
12221236
@ <td class='form_label'>IP Address:</td>
12231237
@ <td>%h(smip)</td>
12241238
@ </tr>
12251239
@ <tr>
@@ -1429,10 +1443,11 @@
14291443
** modified.
14301444
*/
14311445
void subscriber_list_page(void){
14321446
Blob sql;
14331447
Stmt q;
1448
+ double rNow;
14341449
if( email_webpages_disabled() ) return;
14351450
login_check_credentials();
14361451
if( !g.perm.Admin ){
14371452
fossil_redirect_home();
14381453
return;
@@ -1439,35 +1454,43 @@
14391454
}
14401455
email_submenu_common();
14411456
style_header("Subscriber List");
14421457
blob_init(&sql, 0, 0);
14431458
blob_append_sql(&sql,
1444
- "SELECT hex(subscriberCode),"
1445
- " semail,"
1446
- " ssub,"
1447
- " suname,"
1448
- " sverified,"
1449
- " sdigest"
1459
+ "SELECT hex(subscriberCode)," /* 0 */
1460
+ " semail," /* 1 */
1461
+ " ssub," /* 2 */
1462
+ " suname," /* 3 */
1463
+ " sverified," /* 4 */
1464
+ " sdigest," /* 5 */
1465
+ " date(sctime)," /* 6 */
1466
+ " smtime" /* 7 */
14501467
" FROM subscriber"
14511468
);
14521469
db_prepare_blob(&q, &sql);
1470
+ rNow = db_double(0.0,"SELECT julianday('now')");
14531471
@ <table border="1">
14541472
@ <tr>
14551473
@ <th>Email
14561474
@ <th>Events
14571475
@ <th>Digest-Only?
14581476
@ <th>User
14591477
@ <th>Verified?
1478
+ @ <th>Last change
1479
+ @ <th>Created
14601480
@ </tr>
14611481
while( db_step(&q)==SQLITE_ROW ){
1482
+ double rAge = rNow - db_column_double(&q, 7);
14621483
@ <tr>
14631484
@ <td><a href='%R/alerts/%s(db_column_text(&q,0))'>\
14641485
@ %h(db_column_text(&q,1))</a></td>
14651486
@ <td>%h(db_column_text(&q,2))</td>
14661487
@ <td>%s(db_column_int(&q,5)?"digest":"")</td>
14671488
@ <td>%h(db_column_text(&q,3))</td>
14681489
@ <td>%s(db_column_int(&q,4)?"yes":"pending")</td>
1490
+ @ <td>%z(human_readable_age(rAge)) ago</td>
1491
+ @ <td>%h(db_column_text(&q,6))</td>
14691492
@ </tr>
14701493
}
14711494
@ </table>
14721495
db_finalize(&q);
14731496
style_footer();
@@ -1779,11 +1802,10 @@
17791802
return;
17801803
}
17811804
db_begin_transaction();
17821805
if( !email_tables_exist() ) goto autoexec_done;
17831806
if( !db_get_boolean("email-autoexec",0) ) goto autoexec_done;
1784
- if( !db_exists("SELECT 1 FROM pending_alert") ) goto autoexec_done;
17851807
email_send_alerts(0);
17861808
iJulianDay = db_int(0, "SELECT julianday('now')");
17871809
if( iJulianDay>db_get_int("email-last-digest",0) ){
17881810
if( db_transaction_nesting_depth()!=1 ){
17891811
fossil_warning("Transaction nesting error prior to digest processing");
17901812
--- src/email.c
+++ src/email.c
@@ -1096,10 +1096,12 @@
1096 int sdigest, sdonotcall, sverified;
1097 const char *ssub;
1098 const char *semail;
1099 const char *smip;
1100 const char *suname;
 
 
1101 int eErr = 0;
1102 char *zErr = 0;
1103
1104 if( email_webpages_disabled() ) return;
1105 login_check_credentials();
@@ -1171,17 +1173,19 @@
1171 return;
1172 }
1173 }
1174 db_prepare(&q,
1175 "SELECT"
1176 " semail,"
1177 " sverified,"
1178 " sdonotcall,"
1179 " sdigest,"
1180 " ssub,"
1181 " smip,"
1182 " suname"
 
 
1183 " FROM subscriber WHERE subscriberCode=hextoblob(%Q)", zName);
1184 if( db_step(&q)!=SQLITE_ROW ){
1185 db_finalize(&q);
1186 cgi_redirect("subscribe");
1187 return;
@@ -1196,10 +1200,12 @@
1196 sc = strchr(ssub,'c')!=0;
1197 st = strchr(ssub,'t')!=0;
1198 sw = strchr(ssub,'w')!=0;
1199 smip = db_column_text(&q, 5);
1200 suname = db_column_text(&q, 6);
 
 
1201 if( !g.perm.Admin && !sverified ){
1202 db_multi_exec(
1203 "UPDATE subscriber SET sverified=1 WHERE subscriberCode=hextoblob(%Q)",
1204 zName);
1205 @ <h1>Your email alert subscription has been verified!</h1>
@@ -1216,10 +1222,18 @@
1216 @ <tr>
1217 @ <td class="form_label">Email&nbsp;Address:</td>
1218 @ <td>%h(semail)</td>
1219 @ </tr>
1220 if( g.perm.Admin ){
 
 
 
 
 
 
 
 
1221 @ <tr>
1222 @ <td class='form_label'>IP Address:</td>
1223 @ <td>%h(smip)</td>
1224 @ </tr>
1225 @ <tr>
@@ -1429,10 +1443,11 @@
1429 ** modified.
1430 */
1431 void subscriber_list_page(void){
1432 Blob sql;
1433 Stmt q;
 
1434 if( email_webpages_disabled() ) return;
1435 login_check_credentials();
1436 if( !g.perm.Admin ){
1437 fossil_redirect_home();
1438 return;
@@ -1439,35 +1454,43 @@
1439 }
1440 email_submenu_common();
1441 style_header("Subscriber List");
1442 blob_init(&sql, 0, 0);
1443 blob_append_sql(&sql,
1444 "SELECT hex(subscriberCode),"
1445 " semail,"
1446 " ssub,"
1447 " suname,"
1448 " sverified,"
1449 " sdigest"
 
 
1450 " FROM subscriber"
1451 );
1452 db_prepare_blob(&q, &sql);
 
1453 @ <table border="1">
1454 @ <tr>
1455 @ <th>Email
1456 @ <th>Events
1457 @ <th>Digest-Only?
1458 @ <th>User
1459 @ <th>Verified?
 
 
1460 @ </tr>
1461 while( db_step(&q)==SQLITE_ROW ){
 
1462 @ <tr>
1463 @ <td><a href='%R/alerts/%s(db_column_text(&q,0))'>\
1464 @ %h(db_column_text(&q,1))</a></td>
1465 @ <td>%h(db_column_text(&q,2))</td>
1466 @ <td>%s(db_column_int(&q,5)?"digest":"")</td>
1467 @ <td>%h(db_column_text(&q,3))</td>
1468 @ <td>%s(db_column_int(&q,4)?"yes":"pending")</td>
 
 
1469 @ </tr>
1470 }
1471 @ </table>
1472 db_finalize(&q);
1473 style_footer();
@@ -1779,11 +1802,10 @@
1779 return;
1780 }
1781 db_begin_transaction();
1782 if( !email_tables_exist() ) goto autoexec_done;
1783 if( !db_get_boolean("email-autoexec",0) ) goto autoexec_done;
1784 if( !db_exists("SELECT 1 FROM pending_alert") ) goto autoexec_done;
1785 email_send_alerts(0);
1786 iJulianDay = db_int(0, "SELECT julianday('now')");
1787 if( iJulianDay>db_get_int("email-last-digest",0) ){
1788 if( db_transaction_nesting_depth()!=1 ){
1789 fossil_warning("Transaction nesting error prior to digest processing");
1790
--- src/email.c
+++ src/email.c
@@ -1096,10 +1096,12 @@
1096 int sdigest, sdonotcall, sverified;
1097 const char *ssub;
1098 const char *semail;
1099 const char *smip;
1100 const char *suname;
1101 char *smtime;
1102 char *sctime;
1103 int eErr = 0;
1104 char *zErr = 0;
1105
1106 if( email_webpages_disabled() ) return;
1107 login_check_credentials();
@@ -1171,17 +1173,19 @@
1173 return;
1174 }
1175 }
1176 db_prepare(&q,
1177 "SELECT"
1178 " semail," /* 0 */
1179 " sverified," /* 1 */
1180 " sdonotcall," /* 2 */
1181 " sdigest," /* 3 */
1182 " ssub," /* 4 */
1183 " smip," /* 5 */
1184 " suname," /* 6 */
1185 " datetime(smtime)," /* 7 */
1186 " datetime(sctime)" /* 8 */
1187 " FROM subscriber WHERE subscriberCode=hextoblob(%Q)", zName);
1188 if( db_step(&q)!=SQLITE_ROW ){
1189 db_finalize(&q);
1190 cgi_redirect("subscribe");
1191 return;
@@ -1196,10 +1200,12 @@
1200 sc = strchr(ssub,'c')!=0;
1201 st = strchr(ssub,'t')!=0;
1202 sw = strchr(ssub,'w')!=0;
1203 smip = db_column_text(&q, 5);
1204 suname = db_column_text(&q, 6);
1205 smtime = db_column_text(&q, 7);
1206 sctime = db_column_text(&q, 8);
1207 if( !g.perm.Admin && !sverified ){
1208 db_multi_exec(
1209 "UPDATE subscriber SET sverified=1 WHERE subscriberCode=hextoblob(%Q)",
1210 zName);
1211 @ <h1>Your email alert subscription has been verified!</h1>
@@ -1216,10 +1222,18 @@
1222 @ <tr>
1223 @ <td class="form_label">Email&nbsp;Address:</td>
1224 @ <td>%h(semail)</td>
1225 @ </tr>
1226 if( g.perm.Admin ){
1227 @ <tr>
1228 @ <td class='form_label'>Created:</td>
1229 @ <td>%h(sctime)</td>
1230 @ </tr>
1231 @ <tr>
1232 @ <td class='form_label'>Last Modified:</td>
1233 @ <td>%h(smtime)</td>
1234 @ </tr>
1235 @ <tr>
1236 @ <td class='form_label'>IP Address:</td>
1237 @ <td>%h(smip)</td>
1238 @ </tr>
1239 @ <tr>
@@ -1429,10 +1443,11 @@
1443 ** modified.
1444 */
1445 void subscriber_list_page(void){
1446 Blob sql;
1447 Stmt q;
1448 double rNow;
1449 if( email_webpages_disabled() ) return;
1450 login_check_credentials();
1451 if( !g.perm.Admin ){
1452 fossil_redirect_home();
1453 return;
@@ -1439,35 +1454,43 @@
1454 }
1455 email_submenu_common();
1456 style_header("Subscriber List");
1457 blob_init(&sql, 0, 0);
1458 blob_append_sql(&sql,
1459 "SELECT hex(subscriberCode)," /* 0 */
1460 " semail," /* 1 */
1461 " ssub," /* 2 */
1462 " suname," /* 3 */
1463 " sverified," /* 4 */
1464 " sdigest," /* 5 */
1465 " date(sctime)," /* 6 */
1466 " smtime" /* 7 */
1467 " FROM subscriber"
1468 );
1469 db_prepare_blob(&q, &sql);
1470 rNow = db_double(0.0,"SELECT julianday('now')");
1471 @ <table border="1">
1472 @ <tr>
1473 @ <th>Email
1474 @ <th>Events
1475 @ <th>Digest-Only?
1476 @ <th>User
1477 @ <th>Verified?
1478 @ <th>Last change
1479 @ <th>Created
1480 @ </tr>
1481 while( db_step(&q)==SQLITE_ROW ){
1482 double rAge = rNow - db_column_double(&q, 7);
1483 @ <tr>
1484 @ <td><a href='%R/alerts/%s(db_column_text(&q,0))'>\
1485 @ %h(db_column_text(&q,1))</a></td>
1486 @ <td>%h(db_column_text(&q,2))</td>
1487 @ <td>%s(db_column_int(&q,5)?"digest":"")</td>
1488 @ <td>%h(db_column_text(&q,3))</td>
1489 @ <td>%s(db_column_int(&q,4)?"yes":"pending")</td>
1490 @ <td>%z(human_readable_age(rAge)) ago</td>
1491 @ <td>%h(db_column_text(&q,6))</td>
1492 @ </tr>
1493 }
1494 @ </table>
1495 db_finalize(&q);
1496 style_footer();
@@ -1779,11 +1802,10 @@
1802 return;
1803 }
1804 db_begin_transaction();
1805 if( !email_tables_exist() ) goto autoexec_done;
1806 if( !db_get_boolean("email-autoexec",0) ) goto autoexec_done;
 
1807 email_send_alerts(0);
1808 iJulianDay = db_int(0, "SELECT julianday('now')");
1809 if( iJulianDay>db_get_int("email-last-digest",0) ){
1810 if( db_transaction_nesting_depth()!=1 ){
1811 fossil_warning("Transaction nesting error prior to digest processing");
1812

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button