tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
 
// 	File	:  /cmds/adm/_student.c
//	Creator	:  Watcher@TMI-2  (5/93)
//
//	This command allows Admins to add a wizard to the Institute
//	domain as a student (access to the /student directory)
 
#include <uid.h>
#include <mudlib.h>
#include <config.h>
#include <daemons.h>

inherit DAEMON ;
 
#define SYNTAX 	"Syntax: student [-r] [user]\n"
 
int cmd_student(string str) {
   mapping domain;
   object act_ob, link, player;
   int i, remove;
  string  sponsor;

   act_ob = previous_object();
 
   seteuid(getuid(this_object()));

   notify_fail( SYNTAX );
   if(!str || str == "")  return 0;

   //	Check for admin or teacher permissions in user
 
   if(!adminp(geteuid(this_player(1))) &&
	!member_group(geteuid(this_player(1)), "teachers")) {
   write("Student: Only teachers may give student status to a user.\n");
   return 1; }

   //	Check for student removal flag in command line

   if(sscanf(str, "-r %s", str) == 1)  remove = 1;
  if(adminp(geteuid(this_player(1)))) 
	sscanf( str, "%s %s", str, sponsor );
  sscanf( str, "%s %s",str, sponsor );
 
   //	Check to see if there are already a maximum number of students.

   if(!remove && sizeof(get_dir(STUDENT_DIR)) > MAX_STUDENT_NUM) {
   write("Student: There are no more student positions available.\n");
   return 1; }
 
   str = lower_case(str);
 
   //	Check to see if the target user actually exists
 
   if(!user_exists(str)) {
   write("Student: No such user exists.\n");
   return 1; }
 
   //	Check to see if the user is presently online
 
   player = find_player(str) ;
 
   if(player)  link = player->query_link();
 
   //	Otherwise create the user's connection object 
 
   if(!link) {
   link = new(CONNECTION);
   seteuid(str);
   export_uid(link);
   seteuid(ROOT_UID);
   link->set("name", str);
   link->restore();
   }

   //	Get the user's domain mapping.
 
   domain = link->query("domains");
 
   if(!domain)  domain = ([]);
 
 
   //	Is a student priviledge removal or addition requested...

   if(!remove) {
 
   //	Check to see if the user is already a student
 
   if(domain["institute"]) {
   write("Student: " + capitalize((string)link->query("name")) +
	 " is already a student.\n");
   return 1; }
   
   //	Set the domain flag
 
   domain["institute"] = ([ "level" : "student", "sponsor" : 
sponsor ? sponsor : (string)this_player()->query("name") ]);
   domain["primary"] = "institute";
   }

   else {

   if(!domain["institute"]) {
   write("Student: " + capitalize((string)link->query("name")) +
	 " is not presently a student.\n");
   return 1; }
 
   //	Remove the domain flag

   if(domain["primary"] && domain["primary"] == "institute")
	domain["primary"] = 0;

   map_delete(domain, "institute");
   }
 
   link->set("domains", domain);
 
   //	Save the connection data
 
   link->save_data();
 
   //	If the player isn't online ... toast the connection object.
 
   if(!player)  destruct(link);
 
 
   //	Give correct action responses to the admin and user if online.
 
   if(!remove) {
 
   write("You have given student status to " + capitalize(str) + ".\n");
 
   if(player) 
   tell_object(player, 
	"You have been given student status by " +
	(string)previous_object()->query("cap_name") + ".\n");
 

   //   Make the student directory...if it doesn't already exist.

   if(!directory_exists(STUDENT_DIR + str)) {
	write(STUDENT_DIR + str + "/ and " + STUDENT_DIR + str +
	      "/workroom.c created.\n");
	
	if(player)
	tell_object(player, STUDENT_DIR + str + "/ and " + STUDENT_DIR +
		    str + "/workroom.c created.\n");
 
        mkdir(STUDENT_DIR + str);
        write_file(STUDENT_DIR + str + "/workroom.c",
                   read_file("/obj/workroom.c"));
   }
   }

   else {

   write("You remove " + capitalize(str) + "'s student priviledges.\n");

   if(player)
   tell_object(player, "Your student priviledges have been removed by " +
	(string)this_player()->query("cap_name") + ".\n");
   }
 
   //	Update the student status in the student daemon.
 
   if(!remove)  STUDENT_D->add_student( str, sponsor );
   else STUDENT_D->remove_student( str );
 
return 1; }

string help() {
 
   return( SYNTAX + "\n" +
     "This command allows an Admin to give student status in the institute\n"+
     "domain to a selected user. This will set the user's domain settings,\n"+
     "as well as create a working directory within the student directory\n"+
     "tree for the user. There are a maximum of " + MAX_STUDENT_NUM + 
     " positions available.\nA user's student priviledges may be removed " +
     "with the \"r\" flag. Note\nthat this will not remove the user's " +
     "student directory.\n");
 
}