Fossil SCM
Add table sorting to the subscriber list.
Commit
988cf44ded4856e9ab453fbd3c8f097d247bfa44a27fb3e5c9a2db3fda8b3075
Parent
ec88836dd68627b…
1 file changed
+15
-9
+15
-9
| --- src/email.c | ||
| +++ src/email.c | ||
| @@ -1731,11 +1731,11 @@ | ||
| 1731 | 1731 | ** modified. |
| 1732 | 1732 | */ |
| 1733 | 1733 | void subscriber_list_page(void){ |
| 1734 | 1734 | Blob sql; |
| 1735 | 1735 | Stmt q; |
| 1736 | - double rNow; | |
| 1736 | + sqlite3_int64 iNow; | |
| 1737 | 1737 | if( email_webpages_disabled() ) return; |
| 1738 | 1738 | login_check_credentials(); |
| 1739 | 1739 | if( !g.perm.Admin ){ |
| 1740 | 1740 | login_needed(0); |
| 1741 | 1741 | return; |
| @@ -1748,45 +1748,51 @@ | ||
| 1748 | 1748 | " semail," /* 1 */ |
| 1749 | 1749 | " ssub," /* 2 */ |
| 1750 | 1750 | " suname," /* 3 */ |
| 1751 | 1751 | " sverified," /* 4 */ |
| 1752 | 1752 | " sdigest," /* 5 */ |
| 1753 | - " date(sctime,'unixepoch')," /* 6 */ | |
| 1754 | - " julianday(mtime,'unixepoch')" /* 7 */ | |
| 1753 | + " mtime," /* 6 */ | |
| 1754 | + " date(sctime,'unixepoch')" /* 7 */ | |
| 1755 | 1755 | " FROM subscriber" |
| 1756 | 1756 | ); |
| 1757 | 1757 | if( P("only")!=0 ){ |
| 1758 | 1758 | blob_append_sql(&sql, " WHERE ssub LIKE '%%%q%%'", P("only")); |
| 1759 | 1759 | style_submenu_element("Show All","%R/subscribers"); |
| 1760 | 1760 | } |
| 1761 | + blob_append_sql(&sql," ORDER BY mtime DESC"); | |
| 1761 | 1762 | db_prepare_blob(&q, &sql); |
| 1762 | - rNow = db_double(0.0,"SELECT julianday('now')"); | |
| 1763 | - @ <table border="1"> | |
| 1763 | + iNow = time(0); | |
| 1764 | + @ <table border='1' class='sortable' \ | |
| 1765 | + @ data-init-sort='6' data-column-types='tttttKt'> | |
| 1766 | + @ <thead> | |
| 1764 | 1767 | @ <tr> |
| 1765 | 1768 | @ <th>Email |
| 1766 | 1769 | @ <th>Events |
| 1767 | 1770 | @ <th>Digest-Only? |
| 1768 | 1771 | @ <th>User |
| 1769 | 1772 | @ <th>Verified? |
| 1770 | 1773 | @ <th>Last change |
| 1771 | 1774 | @ <th>Created |
| 1772 | 1775 | @ </tr> |
| 1776 | + @ </thead><tbody> | |
| 1773 | 1777 | while( db_step(&q)==SQLITE_ROW ){ |
| 1774 | - double rAge = rNow - db_column_double(&q, 7); | |
| 1778 | + sqlite3_int64 iMtime = db_column_int64(&q, 6); | |
| 1779 | + double rAge = (iNow - iMtime)/86400.0; | |
| 1775 | 1780 | @ <tr> |
| 1776 | 1781 | @ <td><a href='%R/alerts/%s(db_column_text(&q,0))'>\ |
| 1777 | 1782 | @ %h(db_column_text(&q,1))</a></td> |
| 1778 | 1783 | @ <td>%h(db_column_text(&q,2))</td> |
| 1779 | 1784 | @ <td>%s(db_column_int(&q,5)?"digest":"")</td> |
| 1780 | 1785 | @ <td>%h(db_column_text(&q,3))</td> |
| 1781 | 1786 | @ <td>%s(db_column_int(&q,4)?"yes":"pending")</td> |
| 1782 | - @ <td>%z(human_readable_age(rAge))</td> | |
| 1783 | - @ <td>%h(db_column_text(&q,6))</td> | |
| 1787 | + @ <td data-sortkey='%010llx(iMtime)'>%z(human_readable_age(rAge))</td> | |
| 1788 | + @ <td>%h(db_column_text(&q,7))</td> | |
| 1784 | 1789 | @ </tr> |
| 1785 | 1790 | } |
| 1786 | - @ </table> | |
| 1791 | + @ </tbody></table> | |
| 1787 | 1792 | db_finalize(&q); |
| 1793 | + style_table_sorter(); | |
| 1788 | 1794 | style_footer(); |
| 1789 | 1795 | } |
| 1790 | 1796 | |
| 1791 | 1797 | #if LOCAL_INTERFACE |
| 1792 | 1798 | /* |
| 1793 | 1799 |
| --- src/email.c | |
| +++ src/email.c | |
| @@ -1731,11 +1731,11 @@ | |
| 1731 | ** modified. |
| 1732 | */ |
| 1733 | void subscriber_list_page(void){ |
| 1734 | Blob sql; |
| 1735 | Stmt q; |
| 1736 | double rNow; |
| 1737 | if( email_webpages_disabled() ) return; |
| 1738 | login_check_credentials(); |
| 1739 | if( !g.perm.Admin ){ |
| 1740 | login_needed(0); |
| 1741 | return; |
| @@ -1748,45 +1748,51 @@ | |
| 1748 | " semail," /* 1 */ |
| 1749 | " ssub," /* 2 */ |
| 1750 | " suname," /* 3 */ |
| 1751 | " sverified," /* 4 */ |
| 1752 | " sdigest," /* 5 */ |
| 1753 | " date(sctime,'unixepoch')," /* 6 */ |
| 1754 | " julianday(mtime,'unixepoch')" /* 7 */ |
| 1755 | " FROM subscriber" |
| 1756 | ); |
| 1757 | if( P("only")!=0 ){ |
| 1758 | blob_append_sql(&sql, " WHERE ssub LIKE '%%%q%%'", P("only")); |
| 1759 | style_submenu_element("Show All","%R/subscribers"); |
| 1760 | } |
| 1761 | db_prepare_blob(&q, &sql); |
| 1762 | rNow = db_double(0.0,"SELECT julianday('now')"); |
| 1763 | @ <table border="1"> |
| 1764 | @ <tr> |
| 1765 | @ <th>Email |
| 1766 | @ <th>Events |
| 1767 | @ <th>Digest-Only? |
| 1768 | @ <th>User |
| 1769 | @ <th>Verified? |
| 1770 | @ <th>Last change |
| 1771 | @ <th>Created |
| 1772 | @ </tr> |
| 1773 | while( db_step(&q)==SQLITE_ROW ){ |
| 1774 | double rAge = rNow - db_column_double(&q, 7); |
| 1775 | @ <tr> |
| 1776 | @ <td><a href='%R/alerts/%s(db_column_text(&q,0))'>\ |
| 1777 | @ %h(db_column_text(&q,1))</a></td> |
| 1778 | @ <td>%h(db_column_text(&q,2))</td> |
| 1779 | @ <td>%s(db_column_int(&q,5)?"digest":"")</td> |
| 1780 | @ <td>%h(db_column_text(&q,3))</td> |
| 1781 | @ <td>%s(db_column_int(&q,4)?"yes":"pending")</td> |
| 1782 | @ <td>%z(human_readable_age(rAge))</td> |
| 1783 | @ <td>%h(db_column_text(&q,6))</td> |
| 1784 | @ </tr> |
| 1785 | } |
| 1786 | @ </table> |
| 1787 | db_finalize(&q); |
| 1788 | style_footer(); |
| 1789 | } |
| 1790 | |
| 1791 | #if LOCAL_INTERFACE |
| 1792 | /* |
| 1793 |
| --- src/email.c | |
| +++ src/email.c | |
| @@ -1731,11 +1731,11 @@ | |
| 1731 | ** modified. |
| 1732 | */ |
| 1733 | void subscriber_list_page(void){ |
| 1734 | Blob sql; |
| 1735 | Stmt q; |
| 1736 | sqlite3_int64 iNow; |
| 1737 | if( email_webpages_disabled() ) return; |
| 1738 | login_check_credentials(); |
| 1739 | if( !g.perm.Admin ){ |
| 1740 | login_needed(0); |
| 1741 | return; |
| @@ -1748,45 +1748,51 @@ | |
| 1748 | " semail," /* 1 */ |
| 1749 | " ssub," /* 2 */ |
| 1750 | " suname," /* 3 */ |
| 1751 | " sverified," /* 4 */ |
| 1752 | " sdigest," /* 5 */ |
| 1753 | " mtime," /* 6 */ |
| 1754 | " date(sctime,'unixepoch')" /* 7 */ |
| 1755 | " FROM subscriber" |
| 1756 | ); |
| 1757 | if( P("only")!=0 ){ |
| 1758 | blob_append_sql(&sql, " WHERE ssub LIKE '%%%q%%'", P("only")); |
| 1759 | style_submenu_element("Show All","%R/subscribers"); |
| 1760 | } |
| 1761 | blob_append_sql(&sql," ORDER BY mtime DESC"); |
| 1762 | db_prepare_blob(&q, &sql); |
| 1763 | iNow = time(0); |
| 1764 | @ <table border='1' class='sortable' \ |
| 1765 | @ data-init-sort='6' data-column-types='tttttKt'> |
| 1766 | @ <thead> |
| 1767 | @ <tr> |
| 1768 | @ <th>Email |
| 1769 | @ <th>Events |
| 1770 | @ <th>Digest-Only? |
| 1771 | @ <th>User |
| 1772 | @ <th>Verified? |
| 1773 | @ <th>Last change |
| 1774 | @ <th>Created |
| 1775 | @ </tr> |
| 1776 | @ </thead><tbody> |
| 1777 | while( db_step(&q)==SQLITE_ROW ){ |
| 1778 | sqlite3_int64 iMtime = db_column_int64(&q, 6); |
| 1779 | double rAge = (iNow - iMtime)/86400.0; |
| 1780 | @ <tr> |
| 1781 | @ <td><a href='%R/alerts/%s(db_column_text(&q,0))'>\ |
| 1782 | @ %h(db_column_text(&q,1))</a></td> |
| 1783 | @ <td>%h(db_column_text(&q,2))</td> |
| 1784 | @ <td>%s(db_column_int(&q,5)?"digest":"")</td> |
| 1785 | @ <td>%h(db_column_text(&q,3))</td> |
| 1786 | @ <td>%s(db_column_int(&q,4)?"yes":"pending")</td> |
| 1787 | @ <td data-sortkey='%010llx(iMtime)'>%z(human_readable_age(rAge))</td> |
| 1788 | @ <td>%h(db_column_text(&q,7))</td> |
| 1789 | @ </tr> |
| 1790 | } |
| 1791 | @ </tbody></table> |
| 1792 | db_finalize(&q); |
| 1793 | style_table_sorter(); |
| 1794 | style_footer(); |
| 1795 | } |
| 1796 | |
| 1797 | #if LOCAL_INTERFACE |
| 1798 | /* |
| 1799 |