/* projecttool.c * The Project Control Tool * for the admtool *Shaydz 3 Apr '00 */ #include <colors.h> inherit COMMAND_BASE; private mapping return_mapping = ([ ]); private string main_menu_template = @END ------------------------------------------------------------------------- %s ------------------------------------------------------------------------- %sCommand Status%s [1] Create new Project %s [2] Delete Project %s [3] List Projects %s [4] Add Leader to Project %s [5] Add Member to Project %s [6] Remove Leader from Project %s [7] Remove Member from Project %s END; private string main_prompt = "Enter your command [1-7], or [Q] to quit: "; private string main_prompt2 = "Enter your command [1-7], [B] to go back, or [Q] to quit: "; // Function prototypes mixed cmd(string args); private void get_command(string str); private void create_project(); private void create_project2(string str); private void create_project3(string str, string project); private void delete_project(); private void delete_project2(string str); private void delete_project3(string str, string project); private void list_projects(); private void add_leader(); private void add_leader2(string str); private void add_leader3(string str, string project); private void add_member(); private void add_member2(string str); private void add_member3(string str, string project); private void remove_leader(); private void remove_leader2(string str); private void remove_leader3(string str, string project); private void remove_member(); private void remove_member2(string str); private void remove_member3(string str, string project); private void display_menu() { string title, s1, s2, s3, s4, s5, s6, s7; title = sprintf("%s%|72s%s", YELLOW, mud_name()+" Projects Control Tool v1.5", RESET); s1 = s2 = s3 = s4 = s5 = s6 = s7 = RED+"Unavailable"+RESET; if (PROJECT_H->query_leader(TP->query_name())){ s5 = s7 = MAGENTA+"Limited"+RESET; s3 = GREEN+"Available"+RESET; } if (creatorp(TP)) { s3 = GREEN+"Available"+RESET; } if (adminp(TP)) { s1 = s2 = s3 = s4 = s5 = s6 = s7 = GREEN+"Available"+RESET; } tell_object(TP, sprintf(main_menu_template, title, BOLD, RESET, s1, s2, s3, s4, s5, s6, s7)); } /*display_menu()*/ private void create_project() { if(!DOMAIN_H->query_leader("project",TP->query_name()) && !adminp(TP)){ tell_object(TP,RED+"\nYou are not authorised to use this option.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the NEW Project: "); input_to((: create_project2 :)); } /*create_project()*/ private void create_project2(string str) { if (!str || str == "") { tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the Project leader or press return to use yourself: "); input_to((: create_project3($1, $(str)) :)); } /*create_project2()*/ private void create_project3(string str, string project){ string err; if (!str || str == "") { str = TP->query_name(); } if (err = PROJECT_H -> add_project(project)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if (err = PROJECT_H -> add_member(project,str)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; }else if (err = PROJECT_H -> add_leader(project,str)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP,GREEN+"\nCreated project " + CAP(project) + " with leader " + CAP(str) + ".\n\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); } /*create_project3()*/ private void delete_project() { if(!DOMAIN_H->query_leader("project",TP->query_name()) && !adminp(TP)){ tell_object(TP,RED+"\nYou are not authorised to use this option.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the project to DELETE: "); input_to((: delete_project2 :)); } /*delete_project()*/ private void delete_project2(string str) { if (!str || str == "") { tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!PROJECT_H->query_project(str)){ tell_object(TP,RED+"The project "+CAP(str)+" doesn't exist.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Are you sure you wish to delete the "+str+" project? : "); input_to((: delete_project3($1, $(str)) :)); } /*delete_project2()*/ private void delete_project3(string str, string project){ string err; str = lower_case(str); if(!str||str==""){ tell_object(TP,"\nThe project "+CAP(project)+" has NOT been deleted.\n"); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(str!="y"&&str!="yes"){ tell_object(TP,"\nThe project "+CAP(project)+" has NOT been deleted.\n"); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if (err = PROJECT_H -> remove_project(project)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP,GREEN+"\nRemoved project " + CAP(project) + ".\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); } /*delete_projects3()*/ private void list_projects(){ tell_object(TP, create_table( ({ "Projects", "project" }), map(PROJECT_H -> query_projects(), (: CAP($1) :) ), 0)); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); } /*list_projects()*/ private void add_leader() { if(!DOMAIN_H->query_leader("project",TP->query_name()) && !adminp(TP)){ tell_object(TP,RED+"\nYou are not authorised to use this option.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the Project to add a leader to: "); input_to((: add_leader2 :)); } /*add_leader()*/ private void add_leader2(string str) { if (!str || str == "") { tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!PROJECT_H->query_project(str)){ tell_object(TP,RED+"The project "+CAP(str)+" doesn't exist.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the Project leader to add or press return to use yourself: "); input_to((: add_leader3($1, $(str)) :)); } /*add_leader2()*/ private void add_leader3(string str, string project){ string err; if (!str || str == "") { str = TP->query_name(); } if(PROJECT_H->query_leader(project,str)){ tell_object(TP,RED+CAP(str)+" is already a leader of "+CAP(project)+".\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!PROJECT_H->query_member(project,str)){ if (err = PROJECT_H -> add_member(project,str)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } } if (err = PROJECT_H -> add_leader(project,str)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP,GREEN+"\nAdded " + CAP(str) + " as leader of Project " + CAP(project) + ".\n\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); } /*add_leader3()*/ private void add_member() { tell_object(TP, "Enter the name of the Project to add a member to: "); input_to((: add_member2 :)); } /*add_member()*/ private void add_member2(string str) { if (!str || str == "") { tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!PROJECT_H->query_project(str)){ tell_object(TP,RED+"The project "+CAP(str)+" doesn't exist.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!adminp(TP)&&!PROJECT_H->query_leader(str,TP->query_name())){ tell_object(TP,RED+"\nYou are not authorised to do that.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the member to add or press return to use yourself: "); input_to((: add_member3($1, $(str)) :)); } /*add_member2()*/ private void add_member3(string str, string project){ string err; if (!str || str == "") { str = TP->query_name(); } if(PROJECT_H->query_member(project,str)){ tell_object(TP,RED+CAP(str)+" is already a member of "+CAP(project)+".\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if (err = PROJECT_H -> add_member(project,str)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP,GREEN+"\nAdded " + CAP(str) + " as a member of " + CAP(project) + ".\n\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); } /*add_member3()*/ private void remove_leader() { if(!DOMAIN_H->query_leader("project",TP->query_name()) && !adminp(TP)){ tell_object(TP,RED+"\nYou are not authorised to use this option.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the Project to remove a Leader from: "); input_to((: remove_leader2 :)); } /*remove_leader()*/ private void remove_leader2(string str) { if (!str || str == "") { tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!PROJECT_H->query_project(str)){ tell_object(TP,RED+"The project "+CAP(str)+" doesn't exist.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the Project leader to remove or press return to use yourself: "); input_to((: remove_leader3($1, $(str)) :)); } /*remove_leader2()*/ private void remove_leader3(string str, string project){ string err; if (!str || str == "") { str = TP->query_name(); } if(!PROJECT_H->query_leader(project,str)){ tell_object(TP,RED+CAP(str)+" isn't a Leader of "+CAP(project)+".\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if (err = PROJECT_H -> remove_leader(project,str)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP,GREEN+"\nRemoved " + CAP(str) + " as leader from " + CAP(project) + ".\n"+RESET); tell_object(TP,GREEN+"\nIf you wish to remove "+CAP(str)+" as a member use the remove member option.\n\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); } /*remove_leader3()*/ private void remove_member() { tell_object(TP, "Enter the name of the Project to remove member from: "); input_to((: remove_member2 :)); } /*remove_member()*/ private void remove_member2(string str) { if (!str || str == "") { tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!PROJECT_H->query_project(str)){ tell_object(TP,RED+"The project "+CAP(str)+" doesn't exist.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!adminp(TP)&&!PROJECT_H->query_leader(str,TP->query_name())){ tell_object(TP,RED+"\nYou are not authorised to do that.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP, "Enter the name of the Project member to remove or press return to use yourself: "); input_to((: remove_member3($1, $(str)) :)); } /*remove_member2()*/ private void remove_member3(string str, string project){ string err; if (!str || str == "") { str = TP->query_name(); } if(PROJECT_H->query_leader(project,str)){ tell_object(TP,RED+CAP(str)+" is a Leader of "+CAP(project)+" use the remove leader option.\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if(!PROJECT_H->query_member(project,str)){ tell_object(TP,RED+CAP(str)+" isn't a member of "+CAP(project)+".\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } if (err = PROJECT_H -> remove_member(project,str)){ tell_object(TP,RED+"\n"+err+"\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return; } tell_object(TP,GREEN+"\nRemoved " + CAP(str) + " as member of " + CAP(project) + ".\n\n"+RESET); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); } /*remove_member3()*/ private void get_command(string str) { if (!str) { display_menu(); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); } switch(str) { case "1": create_project(); break; case "2": delete_project(); break; case "3": list_projects(); break; case "4": add_leader(); break; case "5": add_member(); break; case "6": remove_leader(); break; case "7": remove_member(); break; case "B": case "b": if (!return_mapping[TP]) { display_menu(); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); break; } if (return_mapping[TP]) { return_mapping[TP]->cmd(""); map_delete(return_mapping, TP); } break; case "Q": case "q": break; default: display_menu(); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); break; } } /*get_command()*/ mixed cmd(string args) { if (file_name(previous_object()) == "/secure/cmds/creator/admtools") return_mapping[TP] = previous_object(); seteuid(geteuid(TP)); display_menu(); tell_object(TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2); input_to((: get_command :)); return 1; } /*cmd()*/