123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- {% from 'macro/form.twig' import checked, selected %}
-
- <div class="thin">
- <form class="search_form" name="users" action="user.php" method="get">
- <input type="hidden" name="action" value="search" />
-
- <table class="layout"><tr>
- <td style="vertical-align:top;"><table class="layout">
- <tr>
- <td class="label nobr">Username:</td>
- <td>
- <input type="text" name="username" size="20" value="{{ username }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Email address:</td>
- <td>
- <input type="text" name="email" size="20" value="{{ email }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label tooltip nobr" title="To fuzzy search (default) for a block of addresses
- (e.g. 55.66.77.*), enter "55.66.77." withou'] ?? '')?>t the quotes">Site IP:</td>
- <td>
- <input type="text" name="ip" size="20" value="{{ ip }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Tracker IP:<br />
- <div style="padding-left: 20px; text-align: left;">
- <input type="radio" name="tracker-src" id="tracker-src-live" value="live"{{ checked(tracker_live_source) }} />
- <label class="tooltip" for="tracker-src" title="Search for client ip addresses currently connecting to the tracker" for="tracker-src-live">Live</label><br />
- <input type="radio" name="tracker-src" id="tracker-src-hist" value="hist"{{ checked(not tracker_live_source) }} />
- <label class="tooltip" for="tracker-src" title="Search for ip addresses that have been seen by the tracker (but may be not connected at this time)" for="tracker-src-hist">Historical</label>
- </div>
- </td>
- <td>
- <input type="text" name="tracker_ip" size="20" value="{{ tracker_ip }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Staff notes:</td>
- <td>
- <input type="text" name="comment" size="20" value="{{ comment }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Passkey:</td>
- <td>
- <input type="text" name="passkey" size="20" value="{{ passkey }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label tooltip nobr" title="Supports partial URL matching, e.g. entering
- "|https://ptpimg.me" will search for avatars hosted on https://phpimg.me">Avatar URL:</td>
- <td>
- <input type="text" name="avatar" size="20" value="{{ avatar }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Last.fm username:</td>
- <td>
- <input type="text" name="lastfm" size="20" value="{{ lastfm }}" />
- </td>
- </tr>
- </table></td>
-
- {# new column #}
-
- <td style="vertical-align:top;"><table class="layout">
- <tr>
- <td class="label nobr">Joined:</td>
- <td style="white-space: nowrap;">
- <select name="joined">
- <option value="on"{{ selected(joined_op == 'on') }}>On</option>
- <option value="before"{{ selected(joined_op == 'before') }}>Before</option>
- <option value="after"{{ selected(joined_op == 'after') }}>After</option>
- <option value="between"{{ selected(joined_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="join1" size="10" value="{{ joined_min }}" placeholder="YYYY-MM-DD" />
- <input type="text" name="join2" size="10" value="{{ joined_max }}" placeholder="YYYY-MM-DD" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Last active:</td>
- <td style="white-space: nowrap;">
- <select name="lastactive">
- <option value="on"{{ selected(last_active_op == 'on') }}>On</option>
- <option value="before"{{ selected(last_active_op == 'before') }}>Before</option>
- <option value="after"{{ selected(last_active_op == 'after') }}>After</option>
- <option value="between"{{ selected(last_active_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="lastactive1" size="10" value="{{ last_active_min }}" placeholder="YYYY-MM-DD" />
- <input type="text" name="lastactive2" size="10" value="{{ last_active_max }}" placeholder="YYYY-MM-DD" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr" title="The number of releases downloaded (may be greater than snatched">Downloads:</td>
- <td width="30%">
- <select name="downloads">
- <option value="off"{{ selected(downloads_op == 'off') }}>Off</option>
- <option value="equal"{{ selected(downloads_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(downloads_op == 'above') }}>Above</option>
- <option value="below"{{ selected(downloads_op == 'below') }}>Below</option>
- <option value="between"{{ selected(downloads_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="downloads1" size="6" value="{{ downloads_min }}" />
- <input type="text" name="downloads2" size="6" value="{{ downloads_max }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Snatched:</td>
- <td width="30%">
- <select name="snatched">
- <option value="off"{{ selected(snatched_op == 'off') }}>Off</option>
- <option value="equal"{{ selected(snatched_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(snatched_op == 'above') }}>Above</option>
- <option value="below"{{ selected(snatched_op == 'below') }}>Below</option>
- <option value="between"{{ selected(snatched_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="snatched1" size="6" value="{{ snatched_min }}" />
- <input type="text" name="snatched2" size="6" value="{{ snatched_max }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Seeding:</td>
- <td width="30%">
- <select name="seeding">
- <option value="off"{{ selected(seeding_op == 'off') }}>Off</option>
- <option value="equal"{{ selected(seeding_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(seeding_op == 'above') }}>Above</option>
- <option value="below"{{ selected(seeding_op == 'below') }}>Below</option>
- <option value="between"{{ selected(seeding_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="seeding1" size="6" value="{{ seeding_min }}" />
- <input type="text" name="seeding2" size="6" value="{{ seeding_max }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label tooltip nobr" title="Units are GiB">Data Uploaded:</td>
- <td width="30%">
- <select name="uploaded">
- <option value="equal"{{ selected(downloaded_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(downloaded_op == 'above') }}>Above</option>
- <option value="below"{{ selected(downloaded_op == 'below') }}>Below</option>
- <option value="between"{{ selected(downloaded_op == 'between') }}>Between</option>
- <option value="buffer"{{ selected(downloaded_op == 'buffer') }}>buffer</option>
- </select>
- <input type="text" name="uploaded1" size="6" value="{{ uploaded_min }}" />
- <input type="text" name="uploaded2" size="6" value="{{ uploaded_max }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label tooltip nobr" title="Units are GiB">Data Downloaded:</td>
- <td width="30%">
- <select name="downloaded">
- <option value="equal"{{ selected(downloaded_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(downloaded_op == 'above') }}>Above</option>
- <option value="below"{{ selected(downloaded_op == 'below') }}>Below</option>
- <option value="between"{{ selected(downloaded_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="downloaded1" size="6" value="{{ downloaded_min }}" />
- <input type="text" name="downloaded2" size="6" value="{{ downloaded_max }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label tooltip nobr" title="Units are GiB">Request Bounty:</td>
- <td width="30%">
- <select name="bounty">
- <option value="equal"{{ selected(bounty_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(bounty_op == 'above') }}>Above</option>
- <option value="below"{{ selected(bounty_op == 'below') }}>Below</option>
- <option value="between"{{ selected(bounty_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="bounty1" size="6" value="{{ bounty_min }}" />
- <input type="text" name="bounty2" size="6" value="{{ bounty_max }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Ratio:</td>
- <td width="30%">
- <select name="ratio">
- <option value="equal"{{ selected(ratio_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(ratio_op == 'above') }}>Above</option>
- <option value="below"{{ selected(ratio_op == 'below') }}>Below</option>
- <option value="between"{{ selected(ratio_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="ratio1" size="6" value="{{ ratio_min }}" />
- <input type="text" name="ratio2" size="6" value="{{ ratio_max }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr"># of invites:</td>
- <td>
- <select name="invites">
- <option value="equal"{{ selected(invites_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(invites_op == 'above') }}>Above</option>
- <option value="below"{{ selected(invites_op == 'below') }}>Below</option>
- <option value="between"{{ selected(invites_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="invites1" size="6" value="{{ invites_min }}" />
- <input type="text" name="invites2" size="6" value="{{ invites_max }}" />
- </td>
- </tr>
-
- <tr>
- <td width="30%" class="label nobr"># invited:</td>
- <td>
- <select name="invited">
- <option value="off"{{ selected(invited_op == 'off') }}>Off</option>
- <option value="equal"{{ selected(invited_op == 'equal') }}>Equal</option>
- <option value="above"{{ selected(invited_op == 'above') }}>Above</option>
- <option value="below"{{ selected(invited_op == 'below') }}>Below</option>
- <option value="between"{{ selected(invited_op == 'between') }}>Between</option>
- </select>
- <input type="text" name="invited1" size="6" value="{{ invited_min }}" />
- <input type="text" name="invited2" size="6" value="{{ invited_max }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr"># of emails:</td>
- <td>
- <select name="emails_opt">
- <option value="equal"{{ selected(email_op == 'any') }}>Equal</option>
- <option value="above"{{ selected(email_op == 'locked') }}>Above</option>
- <option value="below"{{ selected(email_op == 'unlocked') }}>Below</option>
- </select>
- <input type="text" name="email_cnt" size="6" value="{{ email_value }}" />
- </td>
- </tr>
- </table></td>
-
- {# new column #}
-
- <td style="vertical-align:top;"><table class="layout">
- <tr>
- <td class="label nobr">Primary class:</td>
- <td>
- <select name="class[]" size="3" multiple="multiple">
- {% for c in primary_class %}
- <option value="{{ c.ID }}"{{ selected(c.ID in primary_current) }}>{{ c.Name|shorten(12) }} ({{ c.Level }})</option>
- {% endfor %}
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Secondary class:</td>
- <td>
- <select name="secclass">
- <option value=""{{ selected(sec_current == '') }}>Don't Care</option>
- {% for c in secondary_class %}
- <option value="{{ c.ID }}"{{ selected(sec_current == c.ID) }}>{{ c.Name|shorten(20) }}</option>
- {% endfor %}
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Enabled:</td>
- <td>
- <select name="enabled">
- <option value=""{{ selected(enabled == '') }}>Don't Care</option>
- <option value="0"{{ selected(enabled == '0') }}>Unconfirmed</option>
- <option value="1"{{ selected(enabled == '1') }}>Enabled</option>
- <option value="2"{{ selected(enabled == '2') }}>Disabled</option>
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Donor:</td>
- <td>
- <select name="donor">
- <option value=""{{ selected(donor == '') }}>Don't Care</option>
- <option value="yes"{{ selected(donor == 'yes') }}>Yes</option>
- <option value="no"{{ selected(donor == 'no') }}>No</option>
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Warned:</td>
- <td>
- <select name="warned">
- <option value=""{{ selected(warned == '') }}>Don't Care</option>
- <option value="isnotnull"{{ selected(warned == 'isnotnull') }}>Yes</option>
- <option value="isnull"{{ selected(warned == 'isnull') }}>No</option>
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Locked Account:</td>
- <td>
- <select name="lockedaccount">
- <option value="any"{{ selected(locked_account == 'any') }}>Don't Care</option>
- <option value="locked"{{ selected(locked_account == 'locked') }}>Locked</option>
- <option value="unlocked"{{ selected(locked_account == 'unlocked') }}>Unlocked</option>
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Disabled invites:</td>
- <td>
- <select name="disabled_invites">
- <option value=""{{ selected(disabled_invites == '') }}>Don't Care</option>
- <option value="yes"{{ selected(disabled_invites == 'yes') }}>Yes</option>
- <option value="no"{{ selected(disabled_invites == 'no') }}>No</option>
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Disabled uploads:</td>
- <td>
- <select name="disabled_uploads">
- <option value=""{{ selected(disabled_uploads == '') }}>Don't Care</option>
- <option value="yes"{{ selected(disabled_uploads == 'yes') }}>Yes</option>
- <option value="no"{{ selected(disabled_uploads == 'no') }}>No</option>
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Stylesheet:</td>
- <td>
- <select name="stylesheet" id="stylesheet">
- <option value="">Don't Care</option>
- {% for s in stylesheet %}
- <option value="{{ s.ID }} "{{ selected(style_current == s.ID) }}>{{ s.ProperName }}</option>
- {% endfor %}
- </select>
- </td>
- </tr>
-
- <tr>
- <td class="label tooltip nobr" title="Two-letter codes as defined in ISO 3166-1 alpha-2">Country code:</td>
- <td width="30%">
- <select name="cc_op">
- <option value="equal"{{ selected(ccode_op == 'equal') }}>Equals</option>
- <option value="not_equal"{{ selected(ccode_op == 'not_equal') }}>Not equal</option>
- </select>
- <input type="text" name="cc" size="2" value="{{ ccode }}" />
- </td>
- </tr>
-
- <tr>
- <td class="label nobr">Search type:</td>
- <td>
- <ul class="options_list nobullet">
- <li>
- <input type="radio" name="matchtype" id="strict_match_type" value="strict"{{ checked(match_mode == 'strict') }} />
- <label class="tooltip" title="A "strict" search uses no wildcards in search fields,
- and it is analogous to `grep -E "ˆSEARCHTERM$"`" for="strict_match_type">Strict</label>
- </li>
- <li>
- <input type="radio" name="matchtype" id="fuzzy_match_type" value="fuzzy"{{ checked(match_mode == 'fuzzy') }} />
- <label class="tooltip" title="A "fuzzy" search automatically prepends and appends wildcards to
- search strings, except for IP address searches, unless the search string begins or ends with a
- "|" (pipe). It is analogous to a vanilla grep search (except for the pipe stuff)." for="fuzzy_match_type">Fuzzy</label>
- </li>
- <li>
- <input type="radio" name="matchtype" id="regexp_match_type" value="regexp"{{ checked(match_mode == 'regexp') }} />
- <label class="tooltip" title="A "regexp" search uses MySQL's regular expression syntax." for="regexp_match_type">Regexp</label>
- </li>
- </ul>
- </td>
- </tr>
- </table></td>
- </tr>
- </table>
-
- {# end last column #}
-
- Results ordered <select name="order">
- {% for field in field_by %}
- <option value="{{ field }}"{{ selected(field == field_current)}}>{{ field }}</option>
- {% endfor %}
- </select>
-
- <select name="way">
- {% for dir in order_by %}
- <option value="{{ dir }}"{{ selected(dir == order_current) }}>{{ dir }}</option>
- {% endfor %}
- </select>
- <input type="submit" value=" Search " />
-
- </form>
- </div>
-
- {{ paginator.linkbox|raw }}
- <div class="box pad center">
- <h2>{{ total|number_format }} result{{ total|plural }}</h2>
- <table width="100%">
- <tr class="colhead">
- <td>Username</td>
- <td>Email</td>
- <td>Joined</td>
- <td>Last seen</td>
- <td>Upload</td>
- <td>Download</td>
- <td>Ratio</td>
- <td>Bounty</td>
- <td>Downloads</td>
- <td>Snatched</td>
- <td>Seeding</td>
- <td>Invites</td>
- {% if show_invited %}
- <td>Invited</td>
- {% endif %}
- </tr>
- {% for u in page %}
- <tr class="row{{ cycle(['a', 'b'], loop.index0) }}">
- <td>{{ u.user_id|user_full }}</td>
- <td>{{ u.email }}</td>
- <td>{{ u.join_date|time_diff }}</td>
- <td>{{ u.last_access|time_diff }}</td>
- <td>{{ u.uploaded|octet_size }}</td>
- <td>{{ u.downloaded|octet_size }}</td>
- <td>{{ ratio(u.uploaded, u.downloaded) }}</td>
- <td>{{ u.bounty|octet_size }}</td>
- <td>{{ u.downloads|number_format }}</td>
- <td>{% if u.snatches is numeric %}{{ u.snatches|number_format }}{% else %}{{ u.snatches }}{% endif %}</td>
- <td>{% if u.seeding is numeric %}{{ u.seeding|number_format }}{% else %}{{ u.seeding }}{% endif %}</td>
- <td>{{ u.invites|number_format }}{% if u.disable_invites %}<span title="Invites are disabled"> 🚫</span>{% endif %}</td>
- {% if show_invited %}
- <td>{{ u.invited|number_format }}</td>
- {% endif %}
- </tr>
- {% endfor %}
- </table>
- </div>
- {{ paginator.linkbox|raw }}
|