Fossil SCM
Change the /setup_ulist page to show the most recently changed users first by default, as that seems to be the most common use case.
Commit
7b0a2378952457588d7479d463c27794b5ba59220293fc01cf976679dfd4123e
Parent
75c45fd8c3651ed…
1 file changed
+6
-4
+6
-4
| --- src/setupuser.c | ||
| +++ src/setupuser.c | ||
| @@ -115,11 +115,11 @@ | ||
| 115 | 115 | } |
| 116 | 116 | if( !bUnusedOnly ){ |
| 117 | 117 | style_submenu_element("Unused", "setup_ulist?unused"); |
| 118 | 118 | } |
| 119 | 119 | @ <table border=1 cellpadding=2 cellspacing=0 class='userTable sortable' \ |
| 120 | - @ data-column-types='ktxTTKt' data-init-sort='2'> | |
| 120 | + @ data-column-types='ktxKTKt' data-init-sort='4'> | |
| 121 | 121 | @ <thead><tr> |
| 122 | 122 | @ <th>Login Name<th>Caps<th>Info<th>Date<th>Expire<th>Last Login\ |
| 123 | 123 | @ <th>Alerts</tr></thead> |
| 124 | 124 | @ <tbody> |
| 125 | 125 | db_multi_exec( |
| @@ -161,15 +161,16 @@ | ||
| 161 | 161 | " lower(login) AS sortkey, " |
| 162 | 162 | " CASE WHEN info LIKE '%%expires 20%%'" |
| 163 | 163 | " THEN substr(info,instr(lower(info),'expires')+8,10)" |
| 164 | 164 | " END AS exp," |
| 165 | 165 | "atime," |
| 166 | - " subscriber.ssub, subscriber.subscriberId" | |
| 166 | + " subscriber.ssub, subscriber.subscriberId," | |
| 167 | + " user.mtime AS sorttime" | |
| 167 | 168 | " FROM user LEFT JOIN lastAccess ON login=uname" |
| 168 | 169 | " LEFT JOIN subscriber ON login=suname" |
| 169 | 170 | " WHERE login NOT IN ('anonymous','nobody','developer','reader') %s" |
| 170 | - " ORDER BY sortkey", zWith/*safe-for-%s*/ | |
| 171 | + " ORDER BY sorttime DESC", zWith/*safe-for-%s*/ | |
| 171 | 172 | ); |
| 172 | 173 | rNow = db_double(0.0, "SELECT julianday('now');"); |
| 173 | 174 | while( db_step(&s)==SQLITE_ROW ){ |
| 174 | 175 | int uid = db_column_int(&s, 0); |
| 175 | 176 | const char *zLogin = db_column_text(&s, 1); |
| @@ -180,10 +181,11 @@ | ||
| 180 | 181 | const char *zExp = db_column_text(&s,6); |
| 181 | 182 | double rATime = db_column_double(&s,7); |
| 182 | 183 | char *zAge = 0; |
| 183 | 184 | const char *zSub; |
| 184 | 185 | int sid = db_column_int(&s,9); |
| 186 | + sqlite3_int64 sorttime = db_column_int64(&s, 10); | |
| 185 | 187 | if( rATime>0.0 ){ |
| 186 | 188 | zAge = human_readable_age(rNow - rATime); |
| 187 | 189 | } |
| 188 | 190 | if( bUbg ){ |
| 189 | 191 | @ <tr style='background-color: %h(user_color(zLogin));'> |
| @@ -192,11 +194,11 @@ | ||
| 192 | 194 | } |
| 193 | 195 | @ <td data-sortkey='%h(zSortKey)'>\ |
| 194 | 196 | @ <a href='setup_uedit?id=%d(uid)'>%h(zLogin)</a> |
| 195 | 197 | @ <td>%h(zCap) |
| 196 | 198 | @ <td>%h(zInfo) |
| 197 | - @ <td>%h(zDate?zDate:"") | |
| 199 | + @ <td data-sortkey='%09llx(sorttime)'>%h(zDate?zDate:"") | |
| 198 | 200 | @ <td>%h(zExp?zExp:"") |
| 199 | 201 | @ <td data-sortkey='%f(rATime)' style='white-space:nowrap'>%s(zAge?zAge:"") |
| 200 | 202 | if( db_column_type(&s,8)==SQLITE_NULL ){ |
| 201 | 203 | @ <td> |
| 202 | 204 | }else if( (zSub = db_column_text(&s,8))==0 || zSub[0]==0 ){ |
| 203 | 205 |
| --- src/setupuser.c | |
| +++ src/setupuser.c | |
| @@ -115,11 +115,11 @@ | |
| 115 | } |
| 116 | if( !bUnusedOnly ){ |
| 117 | style_submenu_element("Unused", "setup_ulist?unused"); |
| 118 | } |
| 119 | @ <table border=1 cellpadding=2 cellspacing=0 class='userTable sortable' \ |
| 120 | @ data-column-types='ktxTTKt' data-init-sort='2'> |
| 121 | @ <thead><tr> |
| 122 | @ <th>Login Name<th>Caps<th>Info<th>Date<th>Expire<th>Last Login\ |
| 123 | @ <th>Alerts</tr></thead> |
| 124 | @ <tbody> |
| 125 | db_multi_exec( |
| @@ -161,15 +161,16 @@ | |
| 161 | " lower(login) AS sortkey, " |
| 162 | " CASE WHEN info LIKE '%%expires 20%%'" |
| 163 | " THEN substr(info,instr(lower(info),'expires')+8,10)" |
| 164 | " END AS exp," |
| 165 | "atime," |
| 166 | " subscriber.ssub, subscriber.subscriberId" |
| 167 | " FROM user LEFT JOIN lastAccess ON login=uname" |
| 168 | " LEFT JOIN subscriber ON login=suname" |
| 169 | " WHERE login NOT IN ('anonymous','nobody','developer','reader') %s" |
| 170 | " ORDER BY sortkey", zWith/*safe-for-%s*/ |
| 171 | ); |
| 172 | rNow = db_double(0.0, "SELECT julianday('now');"); |
| 173 | while( db_step(&s)==SQLITE_ROW ){ |
| 174 | int uid = db_column_int(&s, 0); |
| 175 | const char *zLogin = db_column_text(&s, 1); |
| @@ -180,10 +181,11 @@ | |
| 180 | const char *zExp = db_column_text(&s,6); |
| 181 | double rATime = db_column_double(&s,7); |
| 182 | char *zAge = 0; |
| 183 | const char *zSub; |
| 184 | int sid = db_column_int(&s,9); |
| 185 | if( rATime>0.0 ){ |
| 186 | zAge = human_readable_age(rNow - rATime); |
| 187 | } |
| 188 | if( bUbg ){ |
| 189 | @ <tr style='background-color: %h(user_color(zLogin));'> |
| @@ -192,11 +194,11 @@ | |
| 192 | } |
| 193 | @ <td data-sortkey='%h(zSortKey)'>\ |
| 194 | @ <a href='setup_uedit?id=%d(uid)'>%h(zLogin)</a> |
| 195 | @ <td>%h(zCap) |
| 196 | @ <td>%h(zInfo) |
| 197 | @ <td>%h(zDate?zDate:"") |
| 198 | @ <td>%h(zExp?zExp:"") |
| 199 | @ <td data-sortkey='%f(rATime)' style='white-space:nowrap'>%s(zAge?zAge:"") |
| 200 | if( db_column_type(&s,8)==SQLITE_NULL ){ |
| 201 | @ <td> |
| 202 | }else if( (zSub = db_column_text(&s,8))==0 || zSub[0]==0 ){ |
| 203 |
| --- src/setupuser.c | |
| +++ src/setupuser.c | |
| @@ -115,11 +115,11 @@ | |
| 115 | } |
| 116 | if( !bUnusedOnly ){ |
| 117 | style_submenu_element("Unused", "setup_ulist?unused"); |
| 118 | } |
| 119 | @ <table border=1 cellpadding=2 cellspacing=0 class='userTable sortable' \ |
| 120 | @ data-column-types='ktxKTKt' data-init-sort='4'> |
| 121 | @ <thead><tr> |
| 122 | @ <th>Login Name<th>Caps<th>Info<th>Date<th>Expire<th>Last Login\ |
| 123 | @ <th>Alerts</tr></thead> |
| 124 | @ <tbody> |
| 125 | db_multi_exec( |
| @@ -161,15 +161,16 @@ | |
| 161 | " lower(login) AS sortkey, " |
| 162 | " CASE WHEN info LIKE '%%expires 20%%'" |
| 163 | " THEN substr(info,instr(lower(info),'expires')+8,10)" |
| 164 | " END AS exp," |
| 165 | "atime," |
| 166 | " subscriber.ssub, subscriber.subscriberId," |
| 167 | " user.mtime AS sorttime" |
| 168 | " FROM user LEFT JOIN lastAccess ON login=uname" |
| 169 | " LEFT JOIN subscriber ON login=suname" |
| 170 | " WHERE login NOT IN ('anonymous','nobody','developer','reader') %s" |
| 171 | " ORDER BY sorttime DESC", zWith/*safe-for-%s*/ |
| 172 | ); |
| 173 | rNow = db_double(0.0, "SELECT julianday('now');"); |
| 174 | while( db_step(&s)==SQLITE_ROW ){ |
| 175 | int uid = db_column_int(&s, 0); |
| 176 | const char *zLogin = db_column_text(&s, 1); |
| @@ -180,10 +181,11 @@ | |
| 181 | const char *zExp = db_column_text(&s,6); |
| 182 | double rATime = db_column_double(&s,7); |
| 183 | char *zAge = 0; |
| 184 | const char *zSub; |
| 185 | int sid = db_column_int(&s,9); |
| 186 | sqlite3_int64 sorttime = db_column_int64(&s, 10); |
| 187 | if( rATime>0.0 ){ |
| 188 | zAge = human_readable_age(rNow - rATime); |
| 189 | } |
| 190 | if( bUbg ){ |
| 191 | @ <tr style='background-color: %h(user_color(zLogin));'> |
| @@ -192,11 +194,11 @@ | |
| 194 | } |
| 195 | @ <td data-sortkey='%h(zSortKey)'>\ |
| 196 | @ <a href='setup_uedit?id=%d(uid)'>%h(zLogin)</a> |
| 197 | @ <td>%h(zCap) |
| 198 | @ <td>%h(zInfo) |
| 199 | @ <td data-sortkey='%09llx(sorttime)'>%h(zDate?zDate:"") |
| 200 | @ <td>%h(zExp?zExp:"") |
| 201 | @ <td data-sortkey='%f(rATime)' style='white-space:nowrap'>%s(zAge?zAge:"") |
| 202 | if( db_column_type(&s,8)==SQLITE_NULL ){ |
| 203 | @ <td> |
| 204 | }else if( (zSub = db_column_text(&s,8))==0 || zSub[0]==0 ){ |
| 205 |