/* Do not remove the headers from this file! see /USAGE for more info. */
// Rust Aug 15 1994
#include <security.h>
#include <ports.h>
inherit M_ACCESS;
inherit M_GRAMMAR;
inherit CLASS_FINGER;
void create() {
set_privilege(1);
}
/* pass a USER_OB or a userid */
private nomask string get_level(mixed m)
{
return adminp(m) ? "admin" : wizardp(m) ? "wizard" : "player";
}
private nomask string get_idle(object o)
{
int i;
i = query_idle(o);
if ( i > 3600 )
return (i/3600) + "h";
if ( i > 60 )
return (i/60) + "m";
return "";
}
class finger get_finger_data(string userid)
{
class finger result;
object user;
string * info;
mixed last;
object mbox;
string connect_from;
// Modified by Aziz to add marriage functions.
info = unguarded(1, (: call_other, USER_D, "query_variable",
userid, ({ "real_name",
"email",
"nickname",
"url",
"spouse",
#ifdef USE_WIZ_POSITION
"wiz_position",
#endif
#ifdef USE_TITLES
"title",
#endif
#ifdef EVERYONE_HAS_A_PLAN
"plan",
#endif
}) :));
if ( !info )
return 0;
result = new(class finger,
// Modified again (spouse: info[4])
//### the visname should be queried from somewhere...
visname: capitalize(userid),
real_name: info[0],
email: info[1],
nickname: info[2],
home_page: info[3],
spouse: info[4],
level: get_level(userid)
);
if ( result->real_name == "" )
result->real_name = 0;
if ( result->email == "" )
result->email = 0;
if ( result->nickname == "" )
result->nickname = 0;
if ( result->home_page == "" )
result->home_page = 0;
if ( result->spouse=="")
result->spouse=0;
#ifdef USE_WIZ_POSITION
result->position = info[5];
if ( result->position == "" )
result->position = 0;
#endif
if ( !this_user() ||
(userid != this_user()->query_userid() && !check_privilege(1) ))
{
#ifdef PLAYER_INFO_IS_PUBLIC
if ( result->email && result->email[0] == '#' )
result->email = 0;
if ( result->real_name && result->real_name[0] == '#' )
result->real_name = 0;
if ( result->home_page && result->home_page[0] == '#' )
result->home_page = 0;
#else
result->email =
result->real_name =
result->home_page = 0;
#endif
}
#ifdef USE_TITLES
# ifdef USE_WIZ_POSITION
result->title = info[6];
# else
result->title = info[5];
# endif
#endif
mbox = MAILBOX_D->get_mailbox(userid);
result->mail_count = mbox->query_message_count();
result->mail_unread = mbox->query_unread_count();
last = LAST_LOGIN_D->query_last(userid);
user = find_user(userid, 1); /* find even linkdead users */
if ( !user )
result->idle = -1;
else if ( !interactive(user) )
result->idle = -2;
else
result->idle = query_idle(user);
#ifdef PLAYER_INFO_IS_PUBLIC
//### a person can get this info via I3 as a player... let it thru here
if ( 1 /* wizardp(this_user()) */ )
#else
if ( check_privilege(1) )
#endif
result->connect_from = last ? last[1] : 0;
result->last_login = last ? last[0] : 0;
if ( is_file(WIZ_DIR + "/" + userid + "/.plan") )
result->plan = read_file(WIZ_DIR + "/" + userid + "/.plan");
#ifdef EVERYONE_HAS_A_PLAN
else if ( info[<1] )
result->plan = info[<1];
#endif
return result;
}
string show_big_finger()
{
object * u = users();
return implode(u,
(: $1 + sprintf("%-15s%-12s%-5s%s\n",
find_body( $2->query_userid()) ? capitalize( $2->query_userid()):"Login",
get_level($2),
get_idle($2),
query_ip_name($2)) :),
sprintf("\n[%s] %d user%s presently connected (%s)\n%s\n",
mud_name(),
sizeof(u),
sizeof(u) == 1 ? "" : "s",
ctime(time()),
repeat_string("-", 75)));
}
string show_big_html_finger()
{
object * u = users();
string retval;
retval = sprintf("<META HTTP-EQUIV=\"Refresh\" CONTENT=30><center><TABLE BORDER=5><caption><font size=+2>%s</font></caption>"
"<TR><TH>Name</TH><TH>Position</TH><TH>Idle</TH><TH>On From</TH></TR>",
mud_name());
foreach (object user in u)
{
retval += sprintf("<TR><TD>%s</TD><TD>%s</TD><TD>%s</TD><TD>%s</TD></TR>",
find_body( user->query_userid()) ?
sprintf("<font size=+2><a href=http://%s:%d/cgi/who.c?=%s>%s</a></font>",
__HOST__, PORT_HTTP,
user->query_userid(), capitalize( user->query_userid())) :"Login",
get_level(user),
get_idle(user),
query_ip_name(user));
}
return retval + "</TABLE></center>";
}
void clean_up() {
destruct(this_object());
}