From 3e2ae6ca365f880a3a35bd9e69c6607fb69c15fb Mon Sep 17 00:00:00 2001
From: piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>
Date: Wed, 13 Feb 2008 16:39:32 +0000
Subject: - improved user searching

git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3914 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
---
 mbbsd/admin.c | 72 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 51 insertions(+), 21 deletions(-)

(limited to 'mbbsd')

diff --git a/mbbsd/admin.c b/mbbsd/admin.c
index 1e5b515c..a49bed21 100644
--- a/mbbsd/admin.c
+++ b/mbbsd/admin.c
@@ -97,12 +97,25 @@ search_key_user(const char *passwdfile, int mode)
     int             coun = 0;
     FILE            *fp1 = fopen(passwdfile, "r");
     char            friendfile[128]="", key[22], *keymatch;
-
+    int		    keytype = 0;
 
     assert(fp1);
     clear();
-    getdata(0, 0, mode ? "�п�J�ϥΪ�����r[�q��|�a�}|�m�W|�W���a�I|"
-	    "email|�p��id] :" : "�п�Jid :", key, sizeof(key), DOECHO);
+    if (!mode)
+    {
+	getdata(0, 0, "�п�Jid :", key, sizeof(key), DOECHO);
+    } else {
+	// improved search
+	getdata(0, 0, "�j�M�������?"
+		"([0]���� 1.ID 2.�m�W 3.�ʺ� 4.�a�} 5.email 6.IP 7.�{��/�q��) ",
+		key, 2, DOECHO);
+	if (isascii(key[0]) && isdigit(key[0]))
+	    keytype = key[0] - '0';
+	if (keytype < 0 || keytype > 7)
+	    keytype = 0;
+	getdata(0, 0, "�п�J����r: ", key, sizeof(key), DOECHO);
+    }
+
     if(!key[0]) {
 	fclose(fp1);
 	return 0;
@@ -113,30 +126,47 @@ search_key_user(const char *passwdfile, int mode)
 	if (!user.userid[0])
 	    continue;
 
-	if (!(++coun & 15)) {
+	if (!(++coun & 0xFF)) {
 	    move(1, 0);
 	    prints("�� [%d] �����\n", coun);
 	    refresh();
 	}
+
         keymatch = NULL;
-	if (!strcasecmp(user.userid, key))
-             keymatch = user.userid; 
-        else if(mode) {
-             if(strstr(user.realname, key))
-                 keymatch = user.realname; 
-             else if(strstr(user.nickname, key))
-                 keymatch = user.nickname; 
-             else if(strstr(user.lasthost, key))
-                 keymatch = user.lasthost; 
-             else if(strcasestr(user.email, key))
-                 keymatch = user.email; 
-             else if(strstr(user.address, key))
-                 keymatch = user.address; 
-             else if(strstr(user.justify, key))
-                 keymatch = user.justify; 
-             else if(strstr(user.mychicken.name, key))
-                 keymatch = user.mychicken.name; 
+
+	if (!mode)
+	{
+	    // only verify id
+	    if (!strcasecmp(user.userid, key))
+		keymatch = user.userid; 
+	} else {
+	    // search by keytype
+	    if ((!keytype || keytype == 1) &&
+		strcasestr(user.userid, key))
+		keymatch = user.userid;
+	    else if ((!keytype || keytype == 2) &&
+		strcasestr(user.realname, key))
+		keymatch = user.realname;
+	    else if ((!keytype || keytype == 3) &&
+		strcasestr(user.nickname, key))
+		keymatch = user.nickname;
+	    else if ((!keytype || keytype == 4) &&
+		strcasestr(user.address, key))
+		keymatch = user.address;
+	    else if ((!keytype || keytype == 5) &&
+		strcasestr(user.email, key))
+		keymatch = user.email;
+	    else if ((!keytype || keytype == 6) &&
+		strcasestr(user.lasthost, key))
+		keymatch = user.lasthost;
+	    else if ((!keytype || keytype == 7) &&
+		strcasestr(user.justify, key))
+		keymatch = user.justify;
+	    else if ((!keytype) &&
+		strcasestr(user.mychicken.name, key))
+		keymatch = user.mychicken.name; 
 	}
+
         if(keymatch) {
 	    move(1, 0);
 	    prints("�� [%d] �����\n", coun);
-- 
cgit v1.2.3