| inherit "std/thing"; |
| |
| #include <properties.h> |
| #include <language.h> |
| #include <config.h> |
| #include <news.h> |
| #include <defines.h> |
| |
| #define UA PL->_unparsed_args() |
| |
| void create() |
| { |
| string str; |
| if (!clonep(this_object())) return; |
| ::create(); |
| SetProp(P_LONG,"Ein News-Gruppen-Tool.\n\ |
| Befehle: addg <grname> <ownername> : Gruppe erzeugen\n\ |
| removeg <grname> : Gruppe loeschen\n\ |
| addw <grname> <username> : Schreibberechtigten eintragen\n\ |
| removew <grname> <username> : Schreibberechtigten austragen\n\ |
| addd <grname> <username> : Loeschberechtigten eintragen\n\ |
| removed <grname> <username> : Loeschberechtigten austragen\n\ |
| addr <grname> <username> : Leseberechtigten eintragen\n\ |
| remover <grname> <username> : Leseberechtigten austragen\n\ |
| ginfo <grname> : Info ueber Gruppe abfragen\n\ |
| setexpire <grname> <tage> : Expiretime setzen\n\ |
| setmaxmsg <grname> <anz> : Maxmsg setzen\n\ |
| setg <grname> <loeschlev> <schreiblev> <leselev> <maxmsg> <expire>\n"); |
| str=capitalize(((str=getuid(this_player()))[<1]=='s'||str[<1]=='x'|| |
| str[<1]=='z')?str+="'":str+="s"); |
| SetProp(P_SHORT,str+" NewsTool"); |
| SetProp(P_NAME,str+" NewsTool"); |
| SetProp(P_GENDER,NEUTER); |
| SetProp(P_ARTICLE,0); |
| AddId("newstool"); |
| AddId("newsgruppentool"); |
| AddId("news-gruppen-tool"); |
| SetProp(P_AUTOLOADOBJ,1); |
| SetProp(P_NODROP,1); |
| } |
| |
| void init() |
| { |
| add_action("addg","addg"); |
| add_action("removeg","removeg"); |
| add_action("addw","addw"); |
| add_action("removew","removew"); |
| add_action("addd","addd"); |
| add_action("removed","removed"); |
| add_action("addr","addr"); |
| add_action("remover","remover"); |
| add_action("setg","setg"); |
| add_action("setexpire","setexpire"); |
| add_action("expire","expire"); |
| add_action("ginfo","ginfo"); |
| add_action("setmaxmsg","setmaxmsg"); |
| } |
| |
| int addr(string str) |
| { |
| mixed *arr; |
| string st1, st2; |
| |
| if ((str=UA)=="" || sscanf(str,"%s %s",st1,st2) !=2){ |
| write("addr <groupname> <username>\nAnschliessend darf der User unabhaengig vom Wizlevel die Gruppe lesen.\n"); |
| return 1; |
| } |
| |
| arr=old_explode(st2," ")-({""}); |
| switch ("/secure/news"->AddAllowed(st1,({}),({}),arr)){ |
| case 0: write("Param err\n"); break; |
| case 1: write("Ok.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such board\n"); break; |
| } |
| return 1; |
| } |
| |
| int remover(string str) |
| { |
| mixed *arr; |
| string st1, st2; |
| |
| if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| write("remover <gruppenname> <username>\nDanach darf der User die Gruppe nur noch lesen, wenn sein Wizlevel dies erlaubt.\n"); |
| return 1; |
| } |
| |
| arr=old_explode(st2," ")-({""}); |
| switch ("/secure/news"->RemoveAllowed(st1,({}),({}),arr)){ |
| case 0: write("Param err\n"); break; |
| case 1: write("Ok.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such board\n"); break; |
| } |
| return 1; |
| } |
| |
| int addd(string str) |
| { |
| mixed *arr; |
| string st1, st2; |
| |
| if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| write("addd <gruppe> <user>\nUser darf Artikel loeschen (unabh vom Wizlevel)\n"); |
| return 1; |
| } |
| |
| arr=old_explode(st2," ")-({""}); |
| switch ("/secure/news"->AddAllowed(st1,arr,({}),({}))){ |
| case 0: write("Param err\n"); break; |
| case 1: write("Ok.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such board\n"); break; |
| } |
| return 1; |
| } |
| |
| int removed(string str) |
| { |
| mixed *arr; |
| string st1, st2; |
| |
| if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| write("removed <gruppe> <user>\nUser darf nur noch Artikel loeschen, wenn sein Wizlevel das erlaubt.\n"); |
| return 1; |
| } |
| |
| arr=old_explode(st2," ")-({""}); |
| switch ("/secure/news"->RemoveAllowed(st1,arr,({}),({}))){ |
| case 0: write("Param err\n"); break; |
| case 1: write("Ok.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such board\n"); break; |
| } |
| return 1; |
| } |
| |
| int addw(string str) |
| { |
| mixed *arr; |
| string st1, st2; |
| |
| if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| write("addw <gruppe> <user>\nUser darf Artikel schreiben (unabh vom Wizlevel)\n"); |
| return 1; |
| } |
| |
| arr=old_explode(st2," ")-({""}); |
| switch ("/secure/news"->AddAllowed(st1,({}),arr,({}))){ |
| case 0: write("Param err\n"); break; |
| case 1: write("Ok.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such board\n"); break; |
| } |
| return 1; |
| } |
| |
| int removew(string str) |
| { |
| mixed *arr; |
| string st1, st2; |
| |
| if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){ |
| write("removew <gruppe> <user>\nUser darf nur noch Artikel schreiben, wenn sein Wizlevel dies erlaubt.\n"); |
| return 1; |
| } |
| |
| arr=old_explode(st2," ")-({""}); |
| switch ("/secure/news"->RemoveAllowed(st1,({}),arr,({}))){ |
| case 0: write("Param err\n"); break; |
| case 1: write("Ok.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such board\n"); break; |
| } |
| return 1; |
| } |
| |
| int setg(string str) |
| { |
| string name; |
| int dlevel, wlevel, rlevel, maxmessages, expire; |
| |
| if (!(str=UA) || |
| sscanf(str,"%s %d %d %d %d %d",name,dlevel,wlevel,rlevel,maxmessages,expire) != 6) { |
| write("setg <gruppe> <loeschlevel> <schreiblevel> <leselevel> <maxmessages> <expire>\nGruppenparameter setzen, Bedeutung (Defaultwerte in Klammern):\n\ |
| name : Der Name der Newsgroup\n\ |
| loeschlevel (20) : Wizlevel, ab dem User Artikel loeschen koennen\n\ |
| schreiblevel ( 0) : Wizlevel, ab dem User Artikel schreiben koennen\n\ |
| leselevel ( 0) : Wizlevel, ab dem User Artikel lesen koennen\n\ |
| maxmessages (40) : Maximale Anzahl Artikel in einer Newsgruppe\n\ |
| expire (-1) : Expiretime in Tagen, -1 = nie\n"); |
| return 1; |
| } |
| expire=86400*expire; |
| switch("/secure/news"->SetGroup(name, dlevel, wlevel, rlevel, maxmessages,expire)){ |
| case 1: write("Ok\n"); break; |
| case 0: write("Param error.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such group\n"); break; |
| } |
| return 1; |
| } |
| |
| int setexpire(string str) |
| { |
| string name; |
| int expire; |
| mixed *gr; |
| |
| if (!(str=UA)||sscanf(str,"%s %d",name,expire)!=2) |
| { |
| write("setexpire <gruppe> <tage>\n"); |
| return 1; |
| } |
| expire=86400*expire; |
| if (!pointerp((gr="/secure/news"->GetGroup(name)))) |
| { |
| write("Get group error\n"); |
| return 1; |
| } |
| switch("/secure/news"->SetGroup(name, gr[G_DLEVEL], gr[G_WLEVEL], gr[G_RLEVEL], gr[G_MAX_MSG],expire)){ |
| case 1: write("Ok\n"); break; |
| case 0: write("Param error.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such group\n"); break; |
| } |
| return 1; |
| } |
| |
| int setmaxmsg(string str) |
| { |
| string name; |
| int maxmsg; |
| mixed *gr; |
| |
| if (!(str=UA)||sscanf(str,"%s %d",name,maxmsg)!=2) |
| { |
| write("setexpire <gruppe> <tage>\n"); |
| return 1; |
| } |
| if (!pointerp((gr="/secure/news"->GetGroup(name)))) |
| { |
| write("Get group error\n"); |
| return 1; |
| } |
| switch("/secure/news"->SetGroup(name, gr[G_DLEVEL], gr[G_WLEVEL], gr[G_RLEVEL], maxmsg, gr[G_EXPIRE])){ |
| case 1: write("Ok\n"); break; |
| case 0: write("Param error.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such group\n"); break; |
| } |
| return 1; |
| } |
| |
| int ginfo(string str) |
| { |
| mixed *gr; |
| int i; |
| |
| if (!(str=UA)) |
| { |
| write("Usage: ginfo <gname>\n"); |
| return 1; |
| } |
| if (!pointerp((gr="/secure/news"->GetGroup(str)))) |
| { |
| write("Get group error\n"); |
| return 1; |
| } |
| if (gr[11]==-1) |
| { |
| write("Group \""+gr[0]+"\" does not exist.\n"); |
| return 1; |
| } |
| // 1 2 3 4 5 6 7 |
| //123456789012345678901234567890123456789012345678901234567890123456789012345678 |
| printf("------------------------------------------------------------------------------\n"); |
| |
| printf("Rubrik : %s (%s) Savefile: %s\n\n",gr[0],capitalize(gr[1]),gr[2]); |
| printf("Messages: %i/%i Expire: %i Tage.\n\n", |
| (pointerp(gr[11])?sizeof(gr[11]):0),gr[10],gr[3]/86400); |
| |
| printf( break_string((sizeof(gr[6])?"("+(CountUp(map(gr[6],#'capitalize)))+")":" "), 78, "Readers : "+gr[9]+" ",16)); |
| |
| printf( break_string((sizeof(gr[5])?"("+(CountUp(map(gr[5],#'capitalize)))+")":" "), 78, "Writers : "+gr[8]+" ",16)); |
| |
| printf( break_string((sizeof(gr[4])?"("+(CountUp(map(gr[4],#'capitalize)))+")":" "), 78, "Deleters: "+gr[7]+" ",16)); |
| |
| printf("------------------------------------------------------------------------------\n"); |
| return 1; |
| } |
| |
| int removeg(string str) |
| { |
| if (!(str=UA)) |
| { |
| write("removeg <gruppenname>\nGruppe LOESCHEN.\n"); |
| return 0; |
| } |
| switch("/secure/news"->RemoveGroup(str)){ |
| case 1: write("Ok. Bitte nicht vergessen, das Savefile der Newsgroup von Hand zu entfernen !\n"); break; |
| case 0: write("Param error.\n"); break; |
| case -1: write("No permission\n"); break; |
| case -2: write("No such group"); break; |
| } |
| return 1; |
| } |
| |
| int addg(string str) |
| { |
| string name, owner; |
| |
| if (!(str=UA) || sscanf(str,"%s %s",name,owner)!=2) |
| { |
| write("addg <gruppe> <user>\nGruppe anlegen, <user> wird Besitzer der Gruppe\n"); |
| return 1; |
| } |
| switch ("secure/news"->AddGroup(name, owner)){ |
| case 1: write("Ok.\n"); break; |
| case 0: write("Param error.\n"); break; |
| case -1: write("No permission.\n"); break; |
| case -2: write("Group already there\n"); break; |
| case -3: write("Owner not found.\n"); break; |
| case -4: write("Savefile already in use.\n"); break; |
| } |
| return 1; |
| } |
| |
| int expire() |
| { |
| "/secure/news"->expire_all(); |
| write("Expiring startet.\n"); |
| return 1; |
| } |