/*

   External KMS Command "ANTRÄGE"

   Syntax : ANTRÄGE [? | *]

   Effect : Registrieranträge neuer User bearbeiten.

*/

/*** Startup ***/

OPTIONS RESULTS
OPTIONS FAILAT 25

RC = 0

SIGNAL ON BREAK_C
SIGNAL ON BREAK_D
SIGNAL ON BREAK_E
SIGNAL ON BREAK_F
SIGNAL ON HALT
SIGNAL ON IOERR
SIGNAL ON SYNTAX
SIGNAL ON ERROR

CALL PRAGMA('W', 'Null')

/*** Main ***/

CR  = '0D'X
LF  = '0A'X
CRLF = CR||LF

'GetConfig BINDIR'
bindir = RESULT

'GetConfig DATDIR'
datdir = RESULT

/* Datei für Useranträge öffnen */

IF OPEN(indat, datdir||'KMS_NEWUSERS.DAT', 'R') = 0 THEN
   DO
   SAY "Keine Useranträge vorhanden."
   EXIT
   END

/* Alle Anträge einlesen */

anzahl = 0

nextname = READLN(indat)

DO WHILE ~EOF(indat)
   
   anzahl = anzahl + 1

   new.anzahl.username = nextname
   new.anzahl.password = READLN(indat)
   new.anzahl.realname = READLN(indat)
   new.anzahl.street   = READLN(indat)
   new.anzahl.city     = READLN(indat)
   new.anzahl.phone    = READLN(indat)
   CALL READLN(indat)

   new.anzahl.done     = 0

   nextname = READLN(indat)

   END

CALL CLOSE(indat)

/*********************************************/
/* "?" als Argument: Anzahl Anträge ausgeben */
/*********************************************/

IF ARG(1) = "?" THEN
   DO
   IF anzahl = 1 THEN
      SAY "Es liegt 1 Userantrag vor."
   ELSE IF anzahl > 1 THEN
      SAY "Es liegen "||anzahl||" Useranträge vor."
   ELSE
      SAY "Es liegen keine Useranträge vor."

   CALL Ende
   END

/*********************************************/
/* "*" als Argument: Anträge auflisten       */
/*********************************************/

IF ARG(1) = "*" THEN
   DO
   
   IF anzahl = 0 THEN
      DO
      SAY "Es liegen keine Useranträge vor."
      CALL Ende
      END

   m = 1

   DO WHILE m <= anzahl

      /* Daten ausgeben */

      SAY CRLF||"Antrag Nr. "||m||"/"||anzahl||":"
      SAY "============================================="
      SAY "Username.....: "||new.m.username
      SAY "Vor-/Nachname: "||new.m.realname
      SAY "Straße.......: "||new.m.street
      SAY "Wohnort......: "||new.m.city
      SAY "Telefon......: "||new.m.phone
      SAY "============================================="

      m = m + 1
      
      END

   CALL Ende
   
   END

/************************************************/
/* Menügeführte sequentielle Antragsbearbeitung */
/************************************************/

IF anzahl = 0 THEN
   DO
   SAY "Es liegen keine Useranträge vor."
   CALL Ende
   END

current = 1
weiter = 1
redraw = 1

DO WHILE weiter = 1

   IF redraw = 1 THEN
      DO
      IF new.current.done = 1 THEN
         donestr = " [Aufgenommen]"
      ELSE IF new.current.done = 2 THEN
         donestr = " [Gelöscht]"
      ELSE
         donestr = ""

      /* Aktuellen Antrag ausgeben */

      SAY CRLF||"Antrag Nr. "||current||"/"||anzahl||":"||donestr
      SAY "============================================="
      SAY "Username.....: "||new.current.username
      SAY "Vor-/Nachname: "||new.current.realname
      SAY "Straße.......: "||new.current.street
      SAY "Wohnort......: "||new.current.city
      SAY "Telefon......: "||new.current.phone
      SAY "============================================="

      redraw = 0
      END

   /* Menü-Auswahl */

   IF new.current.done = 0 THEN
      'InputStr PROMPT "'||CRLF||'Menü-Auswahl: [+], [-], [A]ufnehmen, [Ä]ndern, [L]öschen, [Q]uit: " LENGTH 1 UPPERCASE CHOICE "+-AÄLQ"'
   ELSE
      'InputStr PROMPT "'||CRLF||'Menü-Auswahl: [+], [-], [Q]uit: " LENGTH 1 UPPERCASE CHOICE "+-Q"'
   choice = RESULT

   IF choice = "Q" THEN
      DO
      CALL Save
      CALL Ende
      END

   IF choice = "L" THEN
      DO
      'InputStr PROMPT "Wirklich löschen (j/N)? " LENGTH 1 UPPERCASE CHOICE "JN"'
      ok = RESULT

      IF ok = "J" THEN
         DO
         SAY ""
         SAY "Antrag wurde gelöscht."

         new.current.done = 2

         IF current < anzahl THEN
            current = current + 1
         ELSE
            current = 1

         redraw = 1

         END
      END

   IF choice = "A" THEN
      DO
      SAY CRLF||"ACHTUNG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"

      'InputStr PROMPT "Haben Sie einen entsprechenden User in Ihrem ums.config angelegt (j/N)? " LENGTH 1 UPPERCASE CHOICE "JN"'
      ok = RESULT
      
      SAY ""

      IF ok = "J" THEN
         DO
         newuser.username  = new.current.username
         newuser.realname  = new.current.realname
         newuser.password  = new.current.password
         newuser.street    = new.current.street
         newuser.city      = new.current.city
         newuser.phone     = new.current.phone
         newuser.level     = 10
         newuser.diskquota = 10

         'AddUser newuser'
         
         IF RC ~= 0 THEN
            SAY "User konnte nicht angelegt werden."
         ELSE
            DO
            SAY "User wurde angelegt."
            
            'InputStr PROMPT "Soll der neue User alte Nachrichten lesen können (J/n)? " LENGTH 1 UPPERCASE CHOICE "JN"'
            ok = RESULT
            IF ok ~= "N" THEN
               DO
               ADDRESS COMMAND bindir||'FixAccess KMS "" "'||new.current.realname||'" UNREAD'
               END

            new.current.done = 1
            
            IF current < anzahl THEN
               current = current + 1
            ELSE
               current = 1

            redraw = 1
            
            END

         END

      ELSE
         DO
         SAY "Legen Sie bitte vor der Aufname in KMS in ums.config einen Eintrag"
         SAY "nach folgendem Muster an:"

         SAY CRLF||'USER'
         SAY '   name        = "'||new.current.realname||'"'
         SAY '   alias       = "'||new.current.username||'"'
         SAY '   readaccess  = #?'
         SAY '   writeaccess = #?'
         SAY '   netaccess   = #?'
         SAY 'ENDUSER'
         SAY ''
         SAY 'Bevor Sie dies tun, muß KMS allerdings über "SHUTDOWN !" heruntergefahren'
         SAY 'worden sein.'
         END

      END

   IF choice = "Ä" THEN
      DO

      SAY CRLF||"Antrag Nr. "||current||"/"||anzahl||":"
      SAY "============================================="
      'InputStr PROMPT "Username.....: " LENGTH 30 DEFTXT "'||new.current.username
      new.current.username = RESULT
      'InputStr PROMPT "Vor-/Nachname: " LENGTH 30 DEFTXT "'||new.current.realname
      new.current.realname = RESULT
      'InputStr PROMPT "Straße.......: " LENGTH 30 DEFTXT "'||new.current.street
      new.current.street = RESULT
      'InputStr PROMPT "Wohnort......: " LENGTH 30 DEFTXT "'||new.current.city
      new.current.city = RESULT
      'InputStr PROMPT "Telefon......: " LENGTH 30 DEFTXT "'||new.current.phone
      new.current.phone = RESULT
      SAY "============================================="
      
      END

   IF choice = "+" THEN
      IF current < anzahl THEN
         DO
         current = current + 1
         redraw = 1
         END
      ELSE
         SAY "Dies ist der letzte Antrag!"
   
   IF choice = "-" THEN
      IF current > 1 THEN
         DO
         current = current - 1
         redraw = 1
         END
      ELSE
         SAY "Dies ist der erste Antrag!"
   END

/* Userdaten sichern */

Save:

IF OPEN(ausdat, datdir||'KMS_NEWUSERS.DAT', 'W') = 0 THEN
   DO
   SAY "Fehler beim Öffnen der Antragsdatei zum Schreiben!"
   EXIT
   END

   m = 1

   DO WHILE m <= anzahl

      IF new.m.done = 0 THEN
         DO
         CALL WRITELN(ausdat, new.m.username)
         CALL WRITELN(ausdat, new.m.password)
         CALL WRITELN(ausdat, new.m.realname)
         CALL WRITELN(ausdat, new.m.street)
         CALL WRITELN(ausdat, new.m.city)
         CALL WRITELN(ausdat, new.m.phone)
         CALL WRITELN(ausdat, "")
         END

      m = m + 1
      
      END

   CALL CLOSE(ausdat)

RETURN

/* Ende */

Ende:

EXIT

BREAK_C:
BREAK_D:
BREAK_E:
BREAK_F:
   SAY "*** Break!"
   EXIT
ERROR:
   IF RC ~= 0 THEN SAY "KMS-Err:" KMS.LASTERROR
   EXIT
HALT:
IOERR:
SYNTAX:
   IF RC ~= 0 THEN SAY "Syntax Error:" RC ERRORTEXT(RC) "Line" SIGL
   EXIT

