*/
int CompareUserListName(const void *vUser1, const void *vUser2)
{
- UserListEntry *u1 = (UserListEntry*) vUser1;
- UserListEntry *u2 = (UserListEntry*) vUser2;
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
return strcmp(ChrPtr(u1->UserName), ChrPtr(u2->UserName));
}
int CompareUserListNameRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+ return strcmp(ChrPtr(u2->UserName), ChrPtr(u1->UserName));
+}
+int GroupchangeUserListName(const void *vUser1, const void *vUser2)
{
UserListEntry *u1 = (UserListEntry*) vUser1;
UserListEntry *u2 = (UserListEntry*) vUser2;
- return strcmp(ChrPtr(u2->UserName), ChrPtr(u1->UserName));
+ return ChrPtr(u2->UserName)[0] != ChrPtr(u1->UserName)[0];
}
/*
*/
int CompareAccessLevel(const void *vUser1, const void *vUser2)
{
- UserListEntry *u1 = (UserListEntry*) vUser1;
- UserListEntry *u2 = (UserListEntry*) vUser2;
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
return (u1->AccessLevel > u2->AccessLevel);
}
int CompareAccessLevelRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->AccessLevel > u1->AccessLevel);
+}
+int GroupchangeAccessLevel(const void *vUser1, const void *vUser2)
{
UserListEntry *u1 = (UserListEntry*) vUser1;
UserListEntry *u2 = (UserListEntry*) vUser2;
- return (u2->AccessLevel > u1->AccessLevel);
+ return u2->AccessLevel != u1->AccessLevel;
}
*/
int CompareUID(const void *vUser1, const void *vUser2)
{
- UserListEntry *u1 = (UserListEntry*) vUser1;
- UserListEntry *u2 = (UserListEntry*) vUser2;
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
return (u1->UID > u2->UID);
}
int CompareUIDRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->UID > u1->UID);
+}
+int GroupchangeUID(const void *vUser1, const void *vUser2)
{
UserListEntry *u1 = (UserListEntry*) vUser1;
UserListEntry *u2 = (UserListEntry*) vUser2;
- return (u2->UID > u1->UID);
+ return (u2->UID / 10) != (u1->UID / 10);
}
/*
*/
int CompareLastLogon(const void *vUser1, const void *vUser2)
{
- UserListEntry *u1 = (UserListEntry*) vUser1;
- UserListEntry *u2 = (UserListEntry*) vUser2;
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
return (u1->LastLogonT > u2->LastLogonT);
}
int CompareLastLogonRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->LastLogonT > u1->LastLogonT);
+}
+int GroupchangeLastLogon(const void *vUser1, const void *vUser2)
{
UserListEntry *u1 = (UserListEntry*) vUser1;
UserListEntry *u2 = (UserListEntry*) vUser2;
- return (u2->LastLogonT > u1->LastLogonT);
+ return (u2->LastLogonT != u1->LastLogonT);
}
/*
*/
int ComparenLogons(const void *vUser1, const void *vUser2)
{
- UserListEntry *u1 = (UserListEntry*) vUser1;
- UserListEntry *u2 = (UserListEntry*) vUser2;
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
return (u1->nLogons > u2->nLogons);
}
int ComparenLogonsRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->nLogons > u1->nLogons);
+}
+int GroupchangenLogons(const void *vUser1, const void *vUser2)
{
UserListEntry *u1 = (UserListEntry*) vUser1;
UserListEntry *u2 = (UserListEntry*) vUser2;
- return (u2->nLogons > u1->nLogons);
+ return (u2->nLogons / 100) != (u1->nLogons / 100);
}
/*
*/
int ComparenPosts(const void *vUser1, const void *vUser2)
{
- UserListEntry *u1 = (UserListEntry*) vUser1;
- UserListEntry *u2 = (UserListEntry*) vUser2;
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
return (u1->nPosts > u2->nPosts);
}
int ComparenPostsRev(const void *vUser1, const void *vUser2)
+{
+ UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1);
+ UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2);
+
+ return (u2->nPosts > u1->nPosts);
+}
+int GroupchangenPosts(const void *vUser1, const void *vUser2)
{
UserListEntry *u1 = (UserListEntry*) vUser1;
UserListEntry *u2 = (UserListEntry*) vUser2;
- return (u2->nPosts > u1->nPosts);
+ return (u2->nPosts / 100) != (u1->nPosts / 100);
}
HashList *iterate_load_userlist(StrBuf *Target, WCTemplputParams *TP)
{
+ CompareFunc SortIt;
HashList *Hash;
char buf[SIZ];
StrBuf *Buf;
UserListEntry* ul;
char nnn[64];
int nUsed;
- int Order;
int len;
-
+ WCTemplputParams SubTP;
+
+ memset(&TP, 0, sizeof(WCTemplputParams));
serv_puts("LIST");
serv_getln(buf, sizeof buf);
if (buf[0] == '1') {
Put(Hash, nnn, nUsed, ul, DeleteUserListEntry);
}
FreeStrBuf(&Buf);
- Order = ibstr("SortOrder");
- switch (ibstr("SortBy")){
- case 1: /*NAME*/
- SortByPayload(Hash, (Order)?
- CompareUserListName:
- CompareUserListNameRev);
- break;
- case 2: /*AccessLevel*/
- SortByPayload(Hash, (Order)?
- CompareAccessLevel:
- CompareAccessLevelRev);
- break;
- case 3: /*nLogons*/
- SortByPayload(Hash, (Order)?
- ComparenLogons:
- ComparenLogonsRev);
- break;
- case 4: /*UID*/
- SortByPayload(Hash, (Order)?
- CompareUID:
- CompareUIDRev);
- break;
- case 5: /*LastLogon*/
- SortByPayload(Hash, (Order)?
- CompareLastLogon:
- CompareLastLogonRev);
- break;
- case 6: /* nLogons */
- SortByPayload(Hash, (Order)?
- ComparenLogons:
- ComparenLogonsRev);
- break;
- case 7: /* Posts */
- SortByPayload(Hash, (Order)?
- ComparenPosts:
- ComparenPostsRev);
- break;
- }
+ SubTP.ContextType = CTX_USERLIST;
+ SortIt = RetrieveSort(&SubTP, HKEY("USER"), HKEY("user:uid"), 0);
+ if (SortIt != NULL)
+ SortByPayload(Hash, SortIt);
+ else
+ SortByPayload(Hash, CompareUID);
return Hash;
}
return NULL;
RegisterConditional(HKEY("COND:USERLIST:FLAG:USE_INTERNET"), 0, ConditionalFlagINetEmail, CTX_USERLIST);
RegisterIterator("USERLIST", 0, NULL, iterate_load_userlist, NULL, DeleteHash, CTX_USERLIST, CTX_NONE, IT_NOFLAG);
+
+
+ RegisterSortFunc(HKEY("user:name"),
+ HKEY("userlist"),
+ CompareUserListName,
+ CompareUserListNameRev,
+ GroupchangeUserListName,
+ CTX_USERLIST);
+ RegisterSortFunc(HKEY("user:accslvl"),
+ HKEY("userlist"),
+ CompareAccessLevel,
+ CompareAccessLevelRev,
+ GroupchangeAccessLevel,
+ CTX_USERLIST);
+
+ RegisterSortFunc(HKEY("user:nlogons"),
+ HKEY("userlist"),
+ ComparenLogons,
+ ComparenLogonsRev,
+ GroupchangenLogons,
+ CTX_USERLIST);
+
+ RegisterSortFunc(HKEY("user:uid"),
+ HKEY("userlist"),
+ CompareUID,
+ CompareUIDRev,
+ GroupchangeUID,
+ CTX_USERLIST);
+
+ RegisterSortFunc(HKEY("user:lastlogon"),
+ HKEY("userlist"),
+ CompareLastLogon,
+ CompareLastLogonRev,
+ GroupchangeLastLogon,
+ CTX_USERLIST);
+
+ RegisterSortFunc(HKEY("user:nmsgposts"),
+ HKEY("userlist"),
+ ComparenPosts,
+ ComparenPostsRev,
+ GroupchangenPosts,
+ CTX_USERLIST);
+
}