/****** MausMitglied.intui ************************************************************

    NAME
      $VER: MausMitglied.intui 1.4 (27.6.95) by Olaf Peters

          *** This script is only useful in the german MausNet (R) ***

    AUTHOR
      Olaf Peters
      Kulmer Str. 7
      28237 Bremen

      op@hb2.maus.de / olf@informatik.uni-bremen.de

    SYNOPSIS
      Unterstützt die Mitglieder-/Chefverwaltung in Mausgruppen.

    FUNCTION
      Dieses Script ermöglicht es aus IntuiNews' Nachrichtenfenster heraus
      ein Mitglied in einer Mausgruppe einzutragen bzw. auszutragen oder
      auch als Chef zu setzen (Vorausgesetzt man ist Sysop in der Maus).

      Das Script ist dabei so flexibel, daß es die nötigen Angaben
      weitestgehend automatisch erkennt. Das neue Mitglied (bzw. der neue
      Chef) muß dabei immer der Absender der gerade im Nachrichtenfenster
      angezeigten Mitteilung sein, dabei spielt es keine Rolle, ob es sich
      um eine PM oder um eine Nachricht in einer Gruppe handelt. Bei
      Gruppenmitteilungen fragt das Script, ob es für den Absender auch um
      jene Gruppe handelt (wichtig bei Austragen/Chef setzen) und erlaubt
      ggf. eine Änderung der Gruppe.

      Das Script fragt - nach eventueller Vervollständigung der Angaben -
      welche Aktion ausgeführt werden soll (Eintragen, Austragen, Chef
      setzen) und schreibt danach die Mauscontrol-Mitteilung an den
      Exporter aus dessen Maus das neue Mitglied schreibt. Z.B. schreibt
      "Heike Musterfrau, hb2.maus", daß sie gerne in BIETE aufgenommen
      werden möchte. Das Script schickt die Mauscontrol-Nachricht dann
      (entsprechende Bestätigung vorausgesetzt) an "maus.hb2, hb2.maus".

    NEEDS
      Für die Benutzung des Scripts muß folgendes installiert sein:

      · mindestens IntuiNews v1.3 beta 6 (wegen des ARexx-Ports)
      · mindestens UMSServer v11.20+ (wegen des UMSDupAccount Tricks für
        normale Logins)
      · reqtools.library und reqrexxtools.library (für die Requester)

    BUGS
      Keine bekannt. Sollten welche auftauchen, bitte mailen (s.o.)

    $HISTORY:

     27.6.95  1.4   : INFO SCREEN statt GetPubScreenName -> IN 1.3b9
     27.3.95  1.3   : PubScreenname wird jetzt von IntuiNews geholt (beta 6)
     25.3.95  1.2   : · Anpassung an IntuiNews v1.3b5
                      · Bug beseitigt, der die ///mauscontrol im Infile
                        verhunzte: ein LF hinter dem 'G'-Kommando hat's
                        gebracht.
                      · es wird überprüft, ob es den Alias 'maus.xy' gibt.
                        Damit sollten Unfugmails eingeschränkt werden?
     16.3.95  1.1   : Mitglied eintragen funktionierte irgendwie nicht?!
     14.3.95  1.0   : initial

******************************************************************************
*
*/

ProgramName = "MausMitglied.rexx"
lf = '0a'x

eztags = "rtez_flags=ezreqf_centertext"
rstags = "rtgs_flags=gsreqf_centertext"

/*** Startup ***/

options results

RC = 0
account = 0

signal on BREAK_C
signal on BREAK_D
signal on BREAK_E
signal on BREAK_F
signal on ERROR
signal on HALT
signal on IOERR
signal on SYNTAX

/*/// "Libs einbinden" */

if ~show(l, "rexxreqtools.library") then
  if ~addlib("rexxreqtools.library", 0, -30, 0) then do
    say "rexxreqtools.library konnte nicht geöffnet werden!" ;
    exit(20) ;
  end

libname = "ums.library"
if ~show("L", "ums.library") then do
  if ~addlib("ums.library", 0, -210, 8) then do
    say "ums.library not found!"
    exit(20)
  end
end
call UMSInitConsts

/*\\\*/

/*/// "Login duplizieren" */

'info screen'
screen = result

eztags = eztags "rt_pubscrname='" || screen || "'"
rstags = rstags "rt_pubscrname='" || screen || "'"

'status'

if result ~= "MESSAGE" then do
    rtezrequest("Du mußt im Nachrichtenfenster sein,"|| lf || "um dieses Script auszuführen!", "_Abbruch", ProgramName, eztags)
    call HALT
end

'getaccount'

if (result = "RESULT") | (result = 0) then do
    rtezrequest("Script konnte keinen Account bekommen!", "_Abbruch", ProgramName, eztags)
    call HALT
end ; else
    login = result

account = UMSLogin("", login, "")
if account = 0 then do
    rtezrequest("Konnte Account nicht duplizieren!", "_Abbruch", ProgramName, eztags)
    call HALT
end

/*\\\*/

'getmsgnum'

if result = "RESULT" then do
    rtezrequest("No message no fun! :-)", "_Abbruch", ProgramName, eztags)
    call HALT
end ; else
    msgnum = result

drop msg.
if ~UMSReadMsgHeader(account, msgnum, msg., true) then do
    rtezrequest("Nachricht konnte nicht gelesen werden!", "_Abbruch", ProgramName, eztags)
    call HALT
end

if upper(right(msg.UMSCODE_FromAddr, 5)) ~= ".MAUS" then do
    rtezrequest(msg.UMSCODE_FromName "hat keine Mausadresse.", "_Abbruch", ProgramName, eztags)
    call HALT
end

parse var msg.UMSCODE_FromAddr maus ".maus"
if UMSReadConfigUserName(account, "maus." || maus) = "" then do
    rtezrequest("Für die Maus" maus "gibt's hier keinen Exporter!", "_Abbruch", ProgramName, eztags)
    call HALT
end

if msg.UMSCODE_Group = "MSG." || UMSCODE_Group then do
    parse var msg.UMSCODE_ToName Chef Gruppe .
    reqgrp =  (upper(Chef) ~= "CHEF")
end ; else do
    parse var msg.UMSCODE_Group "maus." . "." gruppe
    if gruppe = "" then do
        reqgrp = true
    end ; else
        reqgrp = (rtezrequest("Nachricht in Gruppe" gruppe || "." || lf || "Geht's auch um diese Gruppe?", "_Ja|_Nein", ProgramName, eztags) = 0)
end

if reqgrp then do
    gruppe = rtgetstring("", "User:" msg.UMSCODE_FromName || lf || lf || "Um welche Gruppe geht's?", ProgramName, "_Okay|_Abbruch", rstags, rtres)
    if rtres = 0 then
        call HALT
end

wahl = rtezrequest("Gruppe:" gruppe || lf || lf || "Was soll mit" msg.UMSCODE_FromName "passieren?", "_Eintragen|A_ustragen|Als _Chef|_Abbruch", ProgramName, eztags)

select
    when wahl = 1 then
        op = ">"
    when wahl = 2 then
        op = "<"
    when wahl = 3 then
        op = "="
    otherwise
        call HALT
end

drop ctrl.
ctrl.UMSCODE_ToName = "maus." || maus
ctrl.UMSCODE_ToAddr = maus || ".maus"
ctrl.UMSCODE_Subject = "///mauscontrol"
ctrl.UMSCODE_MsgText = "GU" || msg.UMSCODE_FromName || op || gruppe || lf

if UMSWriteMsg(account, ctrl.) = 0 then do
    rtezrequest("Mauscontrol-Nachricht konnte nicht geschrieben werden:" || lf || "UMS Error #" || UMSErrNum(account) || ":" UMSErrTxt(account), "_Abbruch", ProgramName, eztags)
end ; else
    rtezrequest("Mauscontrol-Nachricht erfolgreich geschrieben.", "_Okay", ProgramName, eztags)

/*/// "Final cleanup" */

BREAK_C:
BREAK_D:
BREAK_E:
BREAK_F:
ERROR:
HALT:
IOERR:
SYNTAX:

/*** Logout ***/

if account ~= 0 then do
  call UMSLogout(account)
  account = 0
end

exit 0

/*** Support ***/

CheckErr: procedure expose account
  err = UMSErrNum(account)
  if err ~= 0 then do
    rtezrequest("UMS Error #" || err || ": " || UMSErrTxt(account))
  end
return

/*\\\*/

