This commit is contained in:
Christian Paminger
2006-11-27 16:54:42 +00:00
parent bee9fab1cf
commit 64f61faa47
4 changed files with 589 additions and 565 deletions
+450
View File
@@ -0,0 +1,450 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0040)http://www.fh-wedel.de/~herbert/html/vi/ -->
<HTML><HEAD><TITLE>Herbert's Homepage: VI-Kurzreferenz</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1252">
<META content=HTML-Files name=keywords>
<META
content="vi, Elvis, Kurzeinführung,&#10; Kurzreferenz, Einführung, Referenz"
name=keywords>
<META content=Herbert name=Author><!--
Copyright (c): Herbert, FH Wedel
Note that this document is provided "as is",
WITHOUT WARRANTY of any kind either expressed or implied.
-->
<META content="MSHTML 5.50.4807.2300" name=GENERATOR></HEAD>
<BODY>
<h1>VI Einführung und Kurzreferenz</h1>
<DIV align=right><A href="http://www.fh-wedel.de/~herbert/html/index.html"
POSITION="">[eine Ebene höher]</A>&nbsp;<A
href="http://www.fh-wedel.de/~herbert/htdig/index.html" POSITION="">[Suchen]</A>
</DIV>
<P>
<TABLE width="100%">
<TBODY>
<TR>
<TD vAlign=top>
<H2>Inhalt</H2></TD>
<TD vAlign=top width="30%">
<DIV align=right><A name=at000
href="http://www.fh-wedel.de/~herbert/html/vi/#at001">[weiter]</A>
</DIV></TD></TR></TBODY></TABLE>
<UL>
<LI><A
href="http://www.fh-wedel.de/~herbert/html/vi/#einfuehrung">Einführung</A>
<UL>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#betriebsarten">VI
Betriebsarten</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#visualmode">Der Visual
Mode</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#exmode">Der Ex
Mode</A> </LI></UL>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#kommandos">Wichtige VI
Kommandos</A>
<UL>
<LI><A
href="http://www.fh-wedel.de/~herbert/html/vi/#konvention">Konvention</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#starten">Starten des
VI</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#beenden">Beenden des
VI</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#laden">Dateien
laden</A>
<LI><A
href="http://www.fh-wedel.de/~herbert/html/vi/#cursorbewegungen">Cursorbewegungen</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#eingeben">Text
eingeben</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#aendern">Text
ändern</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#loeschen">Text
löschen</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#zwischenablagen">Die
Zwischenablagen im VI</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#suchenersetzen">Suchen
und Ersetzen</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#bookmarks">Bookmarks
im VI</A>
<LI><A href="http://www.fh-wedel.de/~herbert/html/vi/#goodies">Sonstige
Goodies</A> </LI></UL></LI></UL><A name=einfuehrung>
<P>
<HR width="100%" noShade SIZE=1>
<TABLE width="100%">
<TBODY>
<TR>
<TD vAlign=top>
<H2>Einführung</H2></TD>
<TD vAlign=top width="30%">
<DIV align=right><A href="http://www.fh-wedel.de/~herbert/html/vi/#attop"
POSITION="">[Seitenanfang]</A> <A name=at001
href="http://www.fh-wedel.de/~herbert/html/vi/#at002">[weiter]</A>
</DIV></TD></TR></TBODY></TABLE></A><A name=betriebsarten>
<P>
<H3>VI Betriebsarten</H3></A>Der vi kennt drei Betriebsarten:
<OL>
<LI>Der <EM>visual mode</EM>, in dem jeder Tastendruck als Kommando
interpretiert wird. Dies ist die Standardbetriebsart des vi!
<LI>Der <EM>ex mode</EM>, in dem über die Kommandozeile komplexe Befehle, wie
z.B. Suchen und Ersetzen eingegeben werdne können.
<LI>Der <EM>input mode</EM>, in dem Text eingegeben werden kann. </LI></OL><A
name=visualmode>
<P>
<H3>Der Visual Mode</H3></A>Der Visual Mode ist wie gesagt die
Standardbetriebsart des vi, d.h., man befindet sich direkt nach dem Start des vi
darin. Aus allen anderen Betriebsarten kommt man jederzeit durch Drücken der
<EM>Escape</EM> Taste zurück.
<P>Die Idee dahinter ist, daß man, solange kein Text eingegeben wird, ohne Hilfe
von Maus oder erweiterter Tastatur (Pfeiltasten usw.) in der editierten Datei
durch Bewegen des Cursors, Springen und mit Hilfe von Bookmarks navigieren kann.
Das ermöglicht Arbeit mit einem sehr hohen Tempo und auch auf Terminals ohne
erweiterte Tastatur.
<P><A name=exmode>
<P>
<H3>Der Ex Mode</H3></A>Der Ex Mode dient dazu, auch komplexere Kommandos oder
Makros eingeben zu können, die durch jeweils einfache Tastendrücke im Visual
Mode so nicht möglich wären.
<P>Man erreicht den Ex Mode aus dem Visual Mode heraus und zwar durch Drücken
von ":". Ein Kommando im Ex Mode wird abgebrochen durch <EM>Escape</EM> oder
beendet durch <EM>Enter</EM>. <A name=inputmode>
<P>
<H3>Der Input Mode</H3></A>Der Input Mode dient zum Eingeben von Text. Hier
werden die normalen Tasten als einzugebende Buchstaben interpretiert. Andere
Befehle aus dem Visual Mode, die auf Tasten liegen, die so nicht druckbar sind,
wie z.B. <EM>Ctrl-F</EM> und <EM>Ctrl-B</EM> (<EM>PageDown</EM>und
<EM>PageUp</EM>), stehen weiterhin zur Verfügung.
<P>Der Input Mode kann durch verschiedene Visual Kommandos eingeleitet werden.
Mehr dazu unter <A href="http://www.fh-wedel.de/~herbert/html/vi/#eingeben">Text
eingeben</A>.
<P>Der Input Mode wird verlassen durch <EM>Escape</EM>, man landet somit wieder
im Visual Mode.
<P><A name=kommandos>
<P>
<HR width="100%" noShade SIZE=1>
<TABLE width="100%">
<TBODY>
<TR>
<TD vAlign=top>
<H2>Wichtige VI Kommandos</H2></TD>
<TD vAlign=top width="30%">
<DIV align=right><A href="http://www.fh-wedel.de/~herbert/html/vi/#attop"
POSITION="">[Seitenanfang]</A> <A name=at002
href="http://www.fh-wedel.de/~herbert/html/vi/#at003">[weiter]</A>
</DIV></TD></TR></TBODY></TABLE></A><A name=konvention>
<P>
<H3>Konvention</H3></A>Im Folgenden werden einige oft benutzte VI-Kommandos
aufgelistet. Fast alle dieser Kommandos sind <EM>Visual</EM> Kommandos.
<EM>Ex</EM> Kommandos werden durch das <EM>":"</EM> am Anfang gekennzeichnet.
<P>Manche (meist <EM>Visual</EM>) Kommandos haben noch ein <EM>[Count]</EM>
vorangestellt. Das heißt, daß das Kommando normalerweise einmal, bei einer
vorher gedrückten Zahl <EM>n</EM> aber <EM>n</EM>-mal ausgeführt wird. <A
name=starten>
<P>
<H3>Starten des VI</H3></A>Der VI kann mit oder ohne Angabe eines Dateinamen
gestartet werden. Wird ein Dateiname angegeben, wird die Datei geladen oder,
falls sie noch nicht existiert, neu erzeugt. Aufrufe können sein:
<P>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE>vi </CODE></TD>
<TD>Aufruf von vi mit leerem Text-Puffer. </TD></TR>
<TR>
<TD vAlign=top><CODE>vi <EM>Dateiname</EM> </CODE></TD>
<TD>Datei wird geladen und der Cursor bei der ersten Zeile plaziert.
</TD></TR>
<TR>
<TD vAlign=top><CODE>vi <EM>+ Dateiname</EM> </CODE></TD>
<TD>Datei wird geladen und der Cursor bei der letzten Zeile plaziert.
</TD></TR>
<TR>
<TD vAlign=top><CODE>vi <EM>+n Dateiname</EM> </CODE></TD>
<TD>Datei wird geladen und der Cursor bei der <EM>n</EM>-ten Zeile
plaziert. </TD></TR>
<TR>
<TD vAlign=top><CODE>vi <EM>+/Zeichenkette Dateiname</EM> </CODE></TD>
<TD>Datei wird geladen und der Cursor bei der Zeile mit
<EM>Zeichenkette</EM> plaziert. </TD></TR></TBODY></TABLE>
<P>Hinweis: Die meisten vi-Versionen beherrschen auch das Bearbeiten mehrerer
Dateien, allerdings unterscheiden sich die Implementierungen meistens.
<P>Moderne Implementierungen wie z.B. <EM>Elvis</EM> können auch den Bildschirm
in Fenster unterteilen. Hierzu verweise ich aber auf die Dokumentation des
jeweiligen vi-Clones! <A name=beenden>
<P>
<H3>Beenden des VI</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE>:wq </CODE></TD>
<TD>Speichern und vi verlassen. </TD></TR>
<TR>
<TD vAlign=top><CODE>:q </CODE></TD>
<TD>vi verlassen, falls Datei unverändert </TD></TR>
<TR>
<TD vAlign=top><CODE>:q! </CODE></TD>
<TD>vi verlassen, egal ob Datei verändert oder nicht. </TD></TR>
<TR>
<TD vAlign=top><CODE>:w </CODE></TD>
<TD>Datei speichern </TD></TR></TBODY></TABLE><A name=laden>
<P>
<H3>Dateien laden</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE>e <EM>Datei</EM> </CODE></TD>
<TD><EM>Datei</EM> wird geladen, wenn sie existiert, ansonsten erzeugt.
</TD></TR>
<TR>
<TD vAlign=top><CODE>:next </CODE></TD>
<TD>Die nächste Datei wird geladen, falls vi mit mehreren Dateien
aufgerufen wurde. </TD></TR>
<TR>
<TD vAlign=top><CODE>:prev </CODE></TD>
<TD>Die vorherige Datei wird geladen, falls vi mit mehreren Dateien
aufgerufen wurde. </TD></TR></TBODY></TABLE><A name=cursorbewegungen>
<P>
<H3>Cursorbewegungen</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>j </CODE></TD>
<TD>Den Cursor um eine (bzw. <EM>Count</EM>) Zeile runter. usw.). </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>k </CODE></TD>
<TD>Den Cursor um eine (bzw. <EM>Count</EM>) Zeile rauf. usw.). </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>l </CODE></TD>
<TD>Den Cursor um ein (bzw. <EM>Count</EM>) Zeichen rechts. usw.). </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>h </CODE></TD>
<TD>Den Cursor um ein (bzw. <EM>Count</EM>) Zeichen links. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>w </CODE></TD>
<TD>Den Cursor um ein (bzw. <EM>Count</EM>) Wort rechts. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>b </CODE></TD>
<TD>Den Cursor um ein (bzw. <EM>Count</EM>) Wort links. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>h </CODE></TD>
<TD>Den Cursor um ein (bzw. <EM>Count</EM>) Zeichen links. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>h </CODE></TD>
<TD>Den Cursor um ein (bzw. <EM>Count</EM>) Zeichen links. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>G </CODE></TD>
<TD>Springe zum Ende der Datei oder, falls <EM>Count</EM> gegeben, zu
Zeile <EM>Count</EM>. </TD></TR>
<TR>
<TD vAlign=top><EM>Ctrl-f </EM></TD>
<TD>Page-Down. </TD></TR>
<TR>
<TD vAlign=top><EM>Ctrl-b </EM></TD>
<TD>Page-Up. </TD></TR>
<TR>
<TD vAlign=top><CODE>^ </CODE></TD>
<TD>Springe zum Anfang der aktuellen Zeile. </TD></TR>
<TR>
<TD vAlign=top><CODE>$ </CODE></TD>
<TD>Springe zum Ende der aktuellen Zeile. </TD></TR></TBODY></TABLE><A
name=eingeben>
<P>
<H3>Text eingeben</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE>i </CODE></TD>
<TD>(insert), Eingabe vor dem aktuellen Zeichen. </TD></TR>
<TR>
<TD vAlign=top><CODE>a </CODE></TD>
<TD>(append), Eingabe nach dem aktuellen Zeichen. </TD></TR>
<TR>
<TD vAlign=top><CODE>I </CODE></TD>
<TD>(Insert), Eingabe am Anfang der aktuellen Zeile. </TD></TR>
<TR>
<TD vAlign=top><CODE>A </CODE></TD>
<TD>(Append), Eingabe am Ende der aktuellen Zeile. </TD></TR>
<TR>
<TD vAlign=top><CODE>o </CODE></TD>
<TD>neue Zeile und Eingabe nach der aktuellen Zeile. </TD></TR>
<TR>
<TD vAlign=top><CODE>O </CODE></TD>
<TD>neue Zeile und Eingabe vor der aktuellen Zeile. </TD></TR>
<TR>
<TD vAlign=top><EM>Ctrl-v </EM></TD>
<TD>Eingabe eines Steuerzeichens. </TD></TR></TBODY></TABLE><A name=aendern>
<P>
<H3>Text ändern</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>r<EM>Zeichen</EM> </CODE></TD>
<TD>(replace), Änderung des aktuellen Buchstaben in <EM>Zeichen</EM>.
</TD></TR>
<TR>
<TD vAlign=top><CODE>R </CODE></TD>
<TD>(Replace), Überschreibemodus vom aktuellen Buchstaben aus. </TD></TR>
<TR>
<TD vAlign=top><CODE>cw<EM>Wort</EM> </CODE></TD>
<TD>ersetzt das Wort vor dem Cursor durch <EM>Wort</EM>. </TD></TR>
<TR>
<TD vAlign=top><CODE>cc<EM>Zeichenkette</EM> </CODE></TD>
<TD>ersetzt die aktuelle oder nächste Zeile durch <EM>Zeichenkette</EM>
</TD></TR>
<TR>
<TD vAlign=top><CODE>J </CODE></TD>
<TD>hängt die der aktuellen folgende Zeile an die aktuelle an und
positioniert den Cursor "dazwischen". </TD></TR></TBODY></TABLE><A
name=loeschen>
<P>
<H3>Text löschen</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE><EM>[Count]<EM>x </em></em></CODE></TD>
<TD>1 (bzw. <EM>Count</EM>) Zeichen unter dem Cursor (nach rechts) wird
gelöscht. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]<EM>X </em></em></CODE></TD>
<TD>1 (bzw. <EM>Count</EM>) Zeichen links vom dem Cursor wird gelöscht.
</TD></TR>
<TR>
<TD vAlign=top><CODE>D </CODE></TD>
<TD>löscht von der Cursorposition bis zum Zeilenende. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>dd </CODE></TD>
<TD>1 (bzw. <EM>Count</EM>) Zeilen werden gelöscht. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>d<EM>[Richtung]</EM> </CODE></TD>
<TD>1 (bzw. <EM>Count</EM>) mal wird in <EM>Richtung</EM> (rechts, links,
oben, unten, wortweise, was es eben so gibt!) gelöscht.
</TD></TR></TBODY></TABLE><A name=zwischenablagen>
<P>
<H3>Die Zwischenablagen im VI</H3></A>Der VI hat ziemlich viele Zwischenablagen.
Zum Einen sind das die, die beim Löschen automatisch gefüllt werden (man kann
auch ohne zu löschen Text in diese Ablagen schieben), zum Anderen gibt es noch
26 weitere, die man selbst belegen kann.
<P>Die sogenannten <EM>Delete Buffer</EM>, also die Zwischenablagen, die durch
das Löschen (z.B. durch <CODE>dd</CODE>) gefüllt werden, sind wie ein Stack
organisiert, d.h., nach jedem Löschen verschiebt sich der Inhalt der Ablagen um
Einen nach hinten. Diese Ablagen werden adressiert über die Zifferntasten 1 bis
0, es gibt also 10 Stück.
<P>Außerdem kann noch beliebig Text in die anderen 26 Ablagen schmeißen, die
durch die Tasten a-z adressiert sind. Die Vorgehensweise bei beiden Arten ist
identisch: Zwischenablage auswählen und dann kopieren, einfügen oder was auch
immer.
<P>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE>"<EM>1..0, a..z</EM> </CODE></TD>
<TD>Die Ablage <EM>1..0</EM> bzw. <EM>a..z</EM> für die nächste Aktion
auswälen. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>y<EM>[Richtung]</EM> </CODE></TD>
<TD>1 (bzw. <EM>Count</EM>) mal wird in <EM>Richtung</EM> (rechts, links,
oben, unten, wortweise, was es eben so gibt!) in die aktuelle
Zwischenablage kopiert. </TD></TR>
<TR>
<TD vAlign=top><CODE><EM>[Count]</EM>yy </CODE></TD>
<TD>1 (bzw. <EM>Count</EM>) Zeilen werden in die aktuelle Zwischenablage
kopiert. </TD></TR>
<TR>
<TD vAlign=top><EM>Beliebige <A
href="http://www.fh-wedel.de/~herbert/html/vi/#loeschen">Löschaktion</A>
</EM></TD>
<TD>Gelöschter Text wird in die aktuelle Zwischenablage kopiert. </TD></TR>
<TR>
<TD vAlign=top><CODE>p </CODE></TD>
<TD>Der Inhalt der aktuellen Zwischenablage wird hinter dem Cursor
eingefügt. </TD></TR>
<TR>
<TD vAlign=top><CODE>P </CODE></TD>
<TD>Der Inhalt der aktuellen Zwischenablage wird vor dem Cursor eingefügt.
</TD></TR></TBODY></TABLE><A name=suchenersetzen>
<P>
<H3>Suchen und Ersetzen</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE>/<EM>Regex</EM> </CODE></TD>
<TD>Suche vorwärts nach dem regulären Ausdruck <EM>Regex</EM>. </TD></TR>
<TR>
<TD vAlign=top><CODE>?<EM>Regex</EM> </CODE></TD>
<TD>Suche rückwärts nach dem regulären Ausdruck <EM>Regex</EM>. </TD></TR>
<TR>
<TD vAlign=top><CODE>n </CODE></TD>
<TD>Wiederholt das letzte Suchkommando. </TD></TR>
<TR>
<TD vAlign=top><CODE>N </CODE></TD>
<TD>Wiederholt das letzte Suchkommando in die jeweils andere Richtung.
</TD></TR>
<TR>
<TD vAlign=top><CODE>f<EM>Zeichen</EM> </CODE></TD>
<TD>Sucht nach <EM>Zeichen</EM> in der aktuellen Zeile vorwärts. </TD></TR>
<TR>
<TD vAlign=top><CODE>F<EM>Zeichen</EM> </CODE></TD>
<TD>Sucht nach <EM>Zeichen</EM> in der aktuellen Zeile rückwärts. </TD></TR>
<TR>
<TD vAlign=top><CODE>:%s/<EM>Quelle</EM>/<EM>Ziel</EM>/ </CODE></TD>
<TD>Ersetzt <EM>Quelle</EM> im Text <EM>einmal</EM> durch <EM>Ziel</EM>.
</TD></TR>
<TR>
<TD vAlign=top><CODE>:%s/<EM>Quelle</EM>/<EM>Ziel</EM>/g </CODE></TD>
<TD>Ersetzt <EM>Quelle</EM> im Text <EM>überall</EM> durch <EM>Ziel</EM>.
</TD></TR></TBODY></TABLE><A name=bookmarks>
<P>
<H3>Bookmarks im VI</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE>m<EM>Key</EM> </CODE></TD>
<TD>Setzt eine Marke an der aktuellen Stelle unter dem Namen der Taste
<EM>Key</EM>. </TD></TR>
<TR>
<TD vAlign=top><CODE>'<EM>Key</EM> </CODE></TD>
<TD>Springt zu der <EM>Zeile</EM> mit der Marke <EM>Key</EM>. </TD></TR>
<TR>
<TD vAlign=top><CODE>`<EM>Key</EM> </CODE></TD>
<TD>Springt zu der <EM>Stelle</EM> mit der Marke <EM>Key</EM>.
</TD></TR></TBODY></TABLE><A name=goodies>
<P>
<H3>Sonstige Goodies</H3></A>
<TABLE width="95%" border=1>
<TBODY>
<TR>
<TD vAlign=top><CODE>. </CODE></TD>
<TD>Wiederholt die letzte Editieraktion, z.B. die Texteingabe seit das
letzte Mal der <EM>Visual Mode</EM> verlassen wurde, Suchen und Ersetzen
oder was auch immer. </TD></TR>
<TR>
<TD vAlign=top><CODE>%</CODE> über einer Klammer </TD>
<TD>Springt mit dem Cursor auf die korrespondierende öffnende bzw.
schließende Klammer. </TD></TR>
<TR>
<TD vAlign=top><CODE>:tag </CODE><EM>C-Identifier</EM>
<BR><CODE>Ctrl-]</CODE> (auf <EM>C-Identifier</EM>) </TD>
<TD>Sucht in der aktuellen C-Tags-Datei nach <EM>C-Identifier</EM> und
öffnet bei Erfolg einen Buffer mit der entsprechenden Quelltextdatei an
der entsprechenden Stelle. Siehe hierzu das Utility <EM>ctags</EM>, das
mit jedem VI installiert wird. </TD></TR></TBODY></TABLE>
<P><A name=at003></A>
<DIV align=right><A href="http://www.fh-wedel.de/~herbert/html/vi/#attop"
POSITION="">[Seitenanfang]</A> <A
href="http://www.fh-wedel.de/~herbert/html/index.html" POSITION="">[eine Ebene
höher]</A> <A
href="http://www.fh-wedel.de/cgi-bin/xml2html/~herbert/html/vi/index.html?DEFSTYLE=multilingual.style&amp;LANGUAGE=schwob"
POSITION="">[nach Schwäbisch übersetzen]</A></DIV>
<HR width="100%" noShade SIZE=1>
<TABLE width="100%">
<TBODY>
<TR>
<TD vAlign=top>
<DIV align=left>Letzte Änderung: 30.04.2001 </DIV></TD>
<TD vAlign=top>
<DIV align=right>
<ADDRESS>© <A href="mailto:herbert@fh-wedel.de">Herbert</A> &nbsp;&nbsp;<A
href="http://www.fh-wedel.de/~herbert">[seine Homepage]</A> &nbsp;&nbsp;<A
href="http://www.fh-wedel.de/~herbert/htdig/index.html">[durchsuchen]</A>
</ADDRESS></DIV></TD></TR></TBODY></TABLE></BODY></HTML>
+14
View File
@@ -33,6 +33,20 @@
<UL>
<LI><A href="sync/sync_ects_lvinfo.php" class="linkblue">LV INFO - ECTS</A></LI>
</UL>
<H3>VileSci-Syncs</H3>
<UL>
<LI><!-- <A href="sync/sync_fas_lva.php" class="linkblue">Lehrveranstaltungen vom FAS</A>--></LI>
</UL>
<UL>
<LI><A href="sync/sync_vilesci_stg.php" class="linkblue">Studiengaenge</A><BR>
<!-- <A href="sync/sync_stpldev_stpl.php?sendmail=false" class="linkblue">Ohne Mails</A> -->
</LI>
</UL>
<UL>
<LI>
<!-- <A href="sync/sync_ects_lvinfo.php" class="linkblue">LV INFO - ECTS</A> -->
</LI>
</UL>
</BODY>
</HTML>
+104
View File
@@ -0,0 +1,104 @@
<?php
/**
* Liste der in FAS geloeschten Lehrveranstaltungen
*/
include('../vilesci/config.inc.php');
include('../include/functions.inc.php');
if (!$conn = @pg_pconnect(CONN_STRING))
die("Es konnte keine Verbindung zum Server aufgebaut werden.");
//Variablen laden
$error_msg.=loadVariables($conn,$REMOTE_USER);
if ($type=='new')
{
$sql_query="INSERT INTO tbl_personmailgrp (uid, mailgrp_kurzbz) VALUES ('".$_POST['personid']."','".$_POST['mailgrpid']."')";
//echo $sql_query;
if(!$result=pg_exec($conn, $sql_query))
$error=pg_errormessage($conn);
}
elseif ($type=='del')
{
$sql_query='DELETE FROM tbl_lehrveranstaltung WHERE lehrveranstaltung_id='.$_GET['lva_id'];
if(!$result=pg_exec($conn, $sql_query))
$error=pg_errormessage($conn);
}
elseif ($type=='delall')
{
$sql_query='DELETE FROM tbl_stundenplan WHERE lehrveranstaltung_id='.$_GET['lva_id'];
$sql_query.=';DELETE FROM tbl_stundenplandev WHERE lehrveranstaltung_id='.$_GET['lva_id'];
$sql_query.=';DELETE FROM tbl_lehrveranstaltung WHERE lehrveranstaltung_id='.$_GET['lva_id'];
if(!$result=pg_exec($conn, $sql_query))
$error=pg_errormessage($conn);
}
$sql_query="SELECT * FROM tbl_lehrveranstaltung WHERE fas_id NOT IN
(SELECT fas_id FROM vw_fas_lehrveranstaltung WHERE (studiensemester_kurzbz='$semester_aktuell' ) ) AND (fas_id!=0 OR fas_id IS NOT NULL) AND ( (studiensemester_kurzbz='$semester_aktuell' ) )";
if(!$result=pg_exec($conn, $sql_query))
die (pg_errormessage($conn));
$num_rows=pg_numrows($result);
?>
<html>
<head>
<title>Detail Studenten</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<LINK rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
</head>
<body class="background_main">
<?php
if (isset($error))
echo $error;
elseif ($type=='del')
echo 'Lehrveranstaltung wurde gel&ouml;scht!';
?>
<h2><a href="index.html">Admin</a> Lehrveranstaltungen (im FAS geloescht)</h2>
Anzahl:<?php echo $num_rows; ?>
<br>
<br>
<table border="0">
<tr bgcolor="<?php echo $cfgThBgcolor; ?>">
<th></th><th></th><th>ID</th><th>lvnr</th><th>unr</th><th>lektor</th><th>Lehrfach</th>
<th>KZ</th><th>FB</th><th>S</th><th>V</th><th>G</th><th>Einheit</th>
<th>Raumtyp</th><th>RaumtypA</th><th>SS</th><th>SB</th>
<th>WR</th><th>KW</th><th>Semester</th><th>Anmerkung</th>
<th>fas_id</th></tr>
<?php
for ($i=0; $i<$num_rows; $i++)
{
$row=pg_fetch_object($result,$i);
?>
<tr class="liste<?php echo ($i%2); ?>">
<td><a href="stdplan_lva_del.php?type=del&lva_id=<?php echo $row->lehrveranstaltung_id; ?>" class="linkblue">Delete</a></td>
<td><a href="stdplan_lva_del.php?type=delall&lva_id=<?php echo $row->lehrveranstaltung_id; ?>" class="linkblue">DeleteAll</a></td>
<td><?php echo $row->lehrveranstaltung_id; ?></td>
<td><?php echo $row->lvnr; ?></td>
<td><?php echo $row->unr; ?></td>
<td><?php echo $row->lektor; ?></td>
<td><?php echo $row->lehrfach_nr; ?></td>
<td><?php echo $row->studiengang_kz; ?></td>
<td><?php echo $row->fachbereich_id; ?></td>
<td><?php echo $row->semester; ?></td>
<td><?php echo $row->verband; ?></td>
<td><?php echo $row->gruppe; ?></td>
<td><?php echo $row->einheit_kurzbz; ?></td>
<td><?php echo $row->raumtyp; ?></td>
<td><?php echo $row->raumtypalternativ; ?></td>
<td><?php echo $row->semesterstunden; ?></td>
<td><?php echo $row->stundenblockung; ?></td>
<td><?php echo $row->wochenrythmus; ?></td>
<td><?php echo $row->start_kw; ?></td>
<td><?php echo $row->studiensemester_kurzbz; ?></td>
<td><?php echo $row->anmerkung; ?></td>
<td><?php echo $row->fas_id; ?></td>
</tr>
<?php
}
?>
</table>
</body>
</html>
+21 -565
View File
@@ -1,579 +1,39 @@
<?php
include('../../vilesci/config.inc.php');
include('../../include/functions.inc.php');
include('../../include/lehrstunde.class.php');
include('../../include/studiengang.class.php');
$conn=pg_connect(CONN_STRING);
$conn_fas=pg_connect(CONN_STRING_FAS);
$adress='fas_sync@technikum-wien.at';
//$adress='pam@technikum-wien.at';
$adress_stpl='stpl@technikum-wien.at';
$adress_fas='pam@technikum-wien.at';
$conn_vilesci=pg_connect(CONN_STRING_VILESCI);
$adress='pam@technikum-wien.at';
// error log für jeden Studiengang
$error_log=array();
$missing_lehrfaecher=array();
$missing_einheit=array();
$missing_raumtyp=array();
$missing_lehrform=array();
function printLVA($row)
// Encoding fuer VileSci
$qry = "SET CLIENT_ENCODING TO 'UNICODE';";
if(!pg_query($conn_vilesci,$qry))
{
return 'lvnr='.$row->lvnr.' '.$row->bezeichnung;
}
function getSemesterWhereClause()
{
global $conn;
$qry="select * from tbl_studiensemester where ende>now()";
$result=pg_exec($conn, $qry);
$where='';
while ($row=pg_fetch_object($result))
{
$where.= ((strlen($where)>0)?' or ':'')."studiensemester_kurzbz='".$row->studiensemester_kurzbz."' ";
}
if (strlen($where)>0) $where=" ($where) ";
return $where;
}
function validate($row)
{
global $error_log,$einheit,$missing_einheit,$missing_raumtyp,$missing_lehrform,$raumtyp,$lehrform;
$valid=true;
if ($row->raumtyp==null)
{
$error_log[$row->studiengang_kz][]=printLVA($row).': Raumtyp fehlt';
$valid=false;
}
if ($row->semester>8 || $row->semester<1)
{
$error_log[$row->studiengang_kz][]=printLVA($row).': Semester bei '.$row->semester.$row->verband.$row->gruppe.' größer als 8';
$valid=false;
}
if (!($row->verband==null || $row->verband=='' || $row->verband=='A' || $row->verband=='B' || $row->verband=='C' || $row->verband=='D'))
{
$error_log[$row->studiengang_kz][]=printLVA($row).': Verband bei '.$row->semester.$row->verband.$row->gruppe.' außerhalb des gültigen Bereichs (A bis D)';
//print_r($row);
$valid=false;
}
if (!($row->gruppe==null || $row->gruppe=='' || $row->gruppe=='1' || $row->gruppe=='2' || $row->gruppe=='3' || $row->gruppe=='4'))
{
$error_log[$row->studiengang_kz][]=printLVA($row).': Gruppe bei '.$row->semester.$row->verband.$row->gruppe.' außerhalb des gültigen Bereichs (1 bis 4)';
$valid=false;
}
if (!$row->stundenblockung>0) {
$error_log[$row->studiengang_kz][]=printLVA($row).': Stundenblockung ist nicht größer 0';
$valid=false;
}
if (!$row->semesterstunden>0) {
$error_log[$row->studiengang_kz][]=printLVA($row).': Semesterstunden sind nicht größer 0';
$valid=false;
}
if (!$row->wochenrythmus>0)
{
$error_log[$row->studiengang_kz][]=printLVA($row).': Wochenrythmus ist nicht größer 0';
$valid=false;
}
if ($row->start_kw<=0 || $row->start_kw>53)
{
$error_log[$row->studiengang_kz][]=printLVA($row).': Start-KW außerhalb des gültigen Bereichs (1 bis 53)';
$valid=false;
}
if (strlen($row->einheit_kurzbz)>0 && !isset($einheit[$row->einheit_kurzbz]) && !isset($missing_einheit[$row->einheit_kurzbz]))
{
$missing_einheit[$row->einheit_kurzbz]=1;
}
if (strlen($row->raumtyp)>0 && !isset($raumtyp[$row->raumtyp]) && !isset($missing_raumtyp[$row->raumtyp]))
{
$missing_raumtyp[$row->raumtyp]=1;
$valid=false;
}
if (strlen($row->raumtypalternativ)>0 && !isset($raumtyp[$row->raumtypalternativ]) && !isset($missing_raumtyp[$row->raumtypalternativ])) {
$missing_raumtyp[$row->raumtypalternativ]=1;
}
if (!ereg("^[A-Za-z]{1,5}[0-9]{0,1}$",$row->raumtyp))
{
$error_log[$row->studiengang_kz][]=$row->raumtyp.': Raumtyp bei LVNR:'.$row->lvnr.' ist nicht plausibel.';
$valid=false;
}
if (!ereg("^[A-Za-z]{1,5}[0-9]{0,1}$",$row->raumtypalternativ))
{
$error_log[$row->studiengang_kz][]=$row->raumtypalternativ.': Raumtypalternative bei LVNR:'.$row->lvnr.' ist nicht plausibel.';
$valid=false;
}
if (strlen($row->lehrform)>0 && !isset($lehrform[$row->lehrform]) && !isset($missing_lehrform[$row->lehrform])) {
$missing_lehrform[$row->lehrform]=1;
}
if (!ereg("^[A-Z]{1,5}[0-9]{0,1}$",$row->lehrfach_kurzbz))
{
$error_log[$row->studiengang_kz][]=$row->lehrfach_kurzbz.'-'.$row->lehrform.'/'.$row->studiengang_kz.'-'.$row->semester.': Lehrfach-Kuerzel bei LVNR:'.$row->lvnr.' ist nicht plausibel.';
$valid=false;
}
if (!ereg("^[A-Z]{1,3}$",$row->lehrform))
{
$error_log[$row->studiengang_kz][]=$row->lehrfach_kurzbz.'-'.$row->lehrform.'/'.$row->studiengang_kz.'-'.$row->semester.': Lehrform bei LVNR:'.$row->lvnr.' ist nicht plausibel.';
$valid=false;
}
return $valid;
}
/**
* FAS-Lehrfach auf interne Lehrfach-Nr übersetzen
*/
function getLehrfachNr($kurzbz,$studiengang_kz,$semester,$lehrfach_bezeichnung, $fachbereich_id, $ects, $conn)
{
global $lehrfach;
global $text;
if (isset($lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_nr']))
{
//echo 'Nummer:'.$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_nr'].'Bez: '.$lehrfach_bezeichnung.'<BR>';
// Nebenbei die Lehrfachbezeichnung kontrollieren
if ($lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_bezeichnung']!=$lehrfach_bezeichnung)
{
// Update
$qry="UPDATE tbl_lehrfach SET bezeichnung='$lehrfach_bezeichnung' WHERE lehrfach_nr=".$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_nr'];
if (!$result=pg_query($conn, $qry))
echo $qry.' fehlgeschlagen!<BR>';
else
{
echo 'Lehrfach '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.' wurde von '.$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_bezeichnung'].' auf '.$lehrfach_bezeichnung.' geaendert!<BR>';
$text.='Lehrfach '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.' wurde von '.$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_bezeichnung'].' auf '.$lehrfach_bezeichnung.' geaendert!\n';
$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_bezeichnung']=$lehrfach_bezeichnung;
}
}
// Nebenbei die ECTS Punkte kontrollieren
if ($lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['ects']!=$ects)
{
if ($ects!='') //ereg("[0-9]{1,4}[\.|,][0-9]{0,2}$",$ects)
{
// Update
$qry="UPDATE tbl_lehrfach SET ects='$ects' WHERE lehrfach_nr=".$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_nr'];
//echo $qry.'<BR>';
if (!$result=pg_query($conn, $qry))
echo $qry.' fehlgeschlagen!<BR>';
else
{
echo ' Bei Lehrfach '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.' wurden die ECTS-Punkte von '.$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['ects'].' auf '.$ects.' geaendert!<BR>';
$text.='Bei Lehrfach '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.' wurden die ECTS-Punkte von '.$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['ects'].' auf '.$ects.' geaendert!\n';
$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['ects']=$ects;
}
}
else
{
echo 'Bei Lehrfach '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.' sind die ECTS-Punkte von '.$ects.' nicht Plausibel!<BR>';
$text.='Bei Lehrfach '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.' sind die ECTS-Punkte von '.$ects.' nicht Plausibel!\n';
}
}
// Nebenbei die FachbereichID kontrollieren
if ($lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['fachbereich_id']!=$fachbereich_id)
{
// Update
$qry="UPDATE tbl_lehrfach SET fachbereich_id=$fachbereich_id WHERE lehrfach_nr=".$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_nr'];
if (!$result=@pg_query($conn, $qry))
echo $qry.' fehlgeschlagen!<BR>';
else
{
echo 'Bei Lehrfach '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.' wurde die FachbereichID von '.$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['fachbereich_id'].' auf '.$fachbereich_id.' geaendert!<BR>';
$text.='Bei Lehrfach '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.' wurde die FachbereichID von '.$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['fachbereich_id'].' auf '.$fachbereich_id.' geaendert!\n';
$lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['fachbereich_id']=$fachbereich_id;
}
}
return $lehrfach[$kurzbz.'/'.$studiengang_kz.'/'.$semester]['lehrfach_nr'];
}
//echo 'missing getLehrfachNr: '.$kurzbz.'/'.$studiengang_kz.'/'.$semester.'<br>';
return -1;
$this->errormsg = "Encoding konnte nicht gesetzt werden";
return false;
}
// Erhalter anlegen
$result=pg_exec($conn, "INSERT INTO tbl_erhalter VALUES(5,'TW','Technikum Wien')");
/*************************
* FAS-Synchronisation
* VileSci-Synchronisation
*/
//Studiengaenge vom VileSci holen
$sql_query='SELECT * FROM tbl_studiengang';
//echo $sql_query.'<br>';
$stg_vilesci=pg_exec($conn_vilesci, $sql_query);
// E-Mails der Studiengänge
$stg_mail=array();
$qry="select studiengang_kz,email,kurzbz from tbl_studiengang";
$result=pg_exec($conn, $qry);
while ($row=pg_fetch_object($result))
while ($stg=pg_fetch_object($stg_vilesci))
{
$stg_mail[$row->studiengang_kz] = $row->email;
$stg_kurzbz[$row->studiengang_kz]=$row->kurzbz;
}
// Anzahl der LVA in VileSci
$sql_query="SELECT count(*) AS anz FROM tbl_lehrveranstaltung";
//echo $sql_query."<br>";
$result=pg_exec($conn, $sql_query);
$vil_anz_lva=pg_fetch_result($result,0,'anz');
// Lehrfächer holen und in Array speichern (Key ist kurzbz + '/' + lehform_kurzbz)
$sql_query="SELECT lehrfach_nr,kurzbz,studiengang_kz,semester, bezeichnung, fachbereich_id, ects FROM tbl_lehrfach";
$result=pg_exec($conn, $sql_query);
while ($row=pg_fetch_object($result))
{
$lehrfach[$row->kurzbz.'/'.$row->studiengang_kz.'/'.$row->semester]['lehrfach_nr'] = $row->lehrfach_nr;
$lehrfach[$row->kurzbz.'/'.$row->studiengang_kz.'/'.$row->semester]['fachbereich_id'] = $row->fachbereich_id;
$lehrfach[$row->kurzbz.'/'.$row->studiengang_kz.'/'.$row->semester]['lehrfach_bezeichnung'] = $row->bezeichnung;
$lehrfach[$row->kurzbz.'/'.$row->studiengang_kz.'/'.$row->semester]['ects'] = $row->ects;
}
//print_r($lehrfach);
// Einheiten holen
$sql_query="SELECT einheit_kurzbz,bezeichnung FROM tbl_einheit";
$result=pg_exec($conn, $sql_query);
while ($row=pg_fetch_object($result))
$einheit[$row->einheit_kurzbz] = $row->bezeichnung;
// Raumtypen holen
$sql_query="SELECT raumtyp_kurzbz,beschreibung FROM tbl_raumtyp";
$result=pg_exec($conn, $sql_query);
while ($row=pg_fetch_object($result))
$raumtyp[$row->raumtyp_kurzbz] = $row->beschreibung;
// Lehformen holen
$sql_query="SELECT lehrform_kurzbz,bezeichnung FROM tbl_lehrform";
$result=pg_exec($conn, $sql_query);
while ($row=pg_fetch_object($result))
$lehrform[$row->lehrform_kurzbz] = $row->bezeichnung;
//print_r($lehrfach);
echo 'FAS-Datenbank wird abgefragt!<BR><i>';
flush();
// Start Lehrveranstaltungen Synchro
$sql_query="SELECT DISTINCT fas_id,trim(lvnr) AS lvnr,trim(unr)::int8 AS unr,einheit_kurzbz,lektor,trim(upper(lehrfach_kurzbz)) AS lehrfach_kurzbz,
trim(upper(lehrform)) AS lehrform, lehrfach_bezeichnung,
studiengang_kz,fachbereich_id,semester,verband,gruppe,raumtyp,raumtypalternativ,
round(semesterstunden) AS semesterstunden,stundenblockung,wochenrythmus,start_kw,anmerkung,studiensemester_kurzbz, ects
FROM fas_view_alle_lehreinheiten_vilesci ".
"where ".getSemesterWhereClause();
//echo $sql_query."</i><br>";
$result=pg_exec($conn_fas, $sql_query);
$num_rows=pg_numrows($result);
$text="Dies ist eine automatische eMail!\r\r";
$text.="Es wurde eine Synchronisation mit FAS durchgeführt.\r";
$text.="Anzahl der LVA vom FAS-Import: $num_rows \r";
$text.="Anzahl der LVA in der VileSci: $vil_anz_lva \r\r";
$plausi_error=0;
$update_error=0;
$insert_error=0;
$double_error=0;
$anz_update=0;
$anz_insert=0;
echo $num_rows.' Datensaetze<BR>';
for ($i=0;$i<$num_rows;$i++)
{
if ($i%100==0)
{
echo '-';
flush();
}
$row=pg_fetch_object($result,$i);
// Kennzahl der Studiengangs bei ehemaligen bTec auf TW aendern.
if ($row->studiengang_kz==203)
$row->studiengang_kz=0;
// Lehrfach-Nr übersetzen (-1 wenn nicht vorhanden)
$row->lehrfach_nr=getLehrfachNr($row->lehrfach_kurzbz,$row->studiengang_kz,$row->semester, $row->lehrfach_bezeichnung, $row->fachbereich_id, $row->ects, $conn);
// Einheit vollstaendiger Name
if (count($row->einheit_kurzbz)>0)
$row->einheit_kurzbz=$stg_kurzbz[$row->studiengang_kz].'-'.$row->einheit_kurzbz;
// Plausibilitaetscheck
//if ($row->gruppe==NULL)
// $row->gruppe='1';
//
if (!$row->stundenblockung>0)
$row->stundenblockung=1;
if (!$row->start_kw>0)
$row->start_kw=1;
if (!$row->wochenrythmus>0)
$row->wochenrythmus=1;
if ($row->lehrfach_nr==-1)
{
//$error_log[$row->studiengang_kz][]=printLVA($row).': Lehrfach (Kurzbz='".$row->lehrfach_kurzbz."',Lehrform".$row->lehrform) existiert noch nicht. Stundenplanabteilung wurde benachrichtigt.';
if (!isset($missing_lehrfaecher[$row->lehrfach_kurzbz.'/'.$row->studiengang_kz.'/'.$row->semester])) $missing_lehrfaecher[$row->lehrfach_kurzbz.'/'.$row->studiengang_kz.'/'.$row->semester]=1;
$valid=false;
}
if (validate($row) && $row->lehrfach_nr>-1)
{
// SQL vorbereiten (jede LVA vom FAS im VileSci suchen)
$sql_query="SELECT * from tbl_lehrveranstaltung where fas_id=".$row->fas_id;
//echo $sql_query;
$res_lva=pg_query($conn, $sql_query);
$num_rows_lva=pg_numrows($res_lva);
// neue LVA
if ($num_rows_lva==0)
{
$text.="Die LVA fas-id=$row->fas_id lvnr=$row->lvnr unr=$row->unr wird neu angelegt.\r";
$sql_query="INSERT INTO tbl_lehrveranstaltung (lvnr,unr,einheit_kurzbz,lektor,lehrfach_nr,lehrform_kurzbz,";
$sql_query.="studiengang_kz,fachbereich_id,semester,verband,gruppe,raumtyp,".
"raumtypalternativ,semesterstunden,stundenblockung,".
"wochenrythmus,start_kw,studiensemester_kurzbz,fas_id,anmerkung) ".
"VALUES('$row->lvnr'".
",$row->unr,".
(strlen($row->einheit_kurzbz)>0?"'".$row->einheit_kurzbz."'":'NULL').",".
"'$row->lektor',".
"'$row->lehrfach_nr',".
"'$row->lehrform',".
"'$row->studiengang_kz',".
"$row->fachbereich_id,".
"$row->semester,";
if ($row->verband==null)
$sql_query.='NULL,';
else
$sql_query.="'$row->verband',";
if ($row->gruppe==null)
$sql_query.='NULL,';
else
$sql_query.="'$row->gruppe',";
$sql_query.="'$row->raumtyp',".
"'$row->raumtypalternativ',".
"$row->semesterstunden,".
"$row->stundenblockung,".
"$row->wochenrythmus,".
"$row->start_kw,".
"'$row->studiensemester_kurzbz'," .
"$row->fas_id,'$row->anmerkung')";
//echo $sql_query.'<BR>';
if(!$res_insert=@pg_exec($conn, $sql_query))
{
$text.=$sql_query;
$text.="\nFehler: ".pg_errormessage($conn)."\n";
$insert_error++;
}
else
$anz_insert++;
}
// bestehende LVA
elseif ($num_rows_lva==1)
{
$update_sql='';
$row_lva=pg_fetch_object($res_lva,0);
//var_dump($row_lva);
//if ($row->gruppe==NULL)
// $row->gruppe=1;
//echo '-'.$row->lvnr.'-'.$row_lva->lvnr.'-<BR>';
if ($row->lvnr!=$row_lva->lvnr)
$update_sql.="lvnr='".$row->lvnr."'";
elseif ($row->unr!=$row_lva->unr)
$update_sql.="unr=".$row->unr;
elseif ($row->einheit_kurzbz!=$row_lva->einheit_kurzbz)
$update_sql.=(strlen($update_sql)>0?',':'').'einheit_kurzbz='.(strlen($row->einheit_kurzbz)>0?"'".$row->einheit_kurzbz."'":'NULL');
elseif ($row->lektor!=$row_lva->lektor)
$update_sql.=(strlen($update_sql)>0?',':'')."lektor='".$row->lektor."'";
elseif ($row->lehrfach_nr!=$row_lva->lehrfach_nr)
$update_sql.=(strlen($update_sql)>0?',':'')."lehrfach_nr=".$row->lehrfach_nr;
elseif ($row->lehrform!=$row_lva->lehrform_kurzbz)
$update_sql.=(strlen($update_sql)>0?',':'')."lehrform_kurzbz='".$row->lehrform."'";
elseif ($row->studiengang_kz!=$row_lva->studiengang_kz)
$update_sql.=(strlen($update_sql)>0?',':'')."studiengang_kz=".$row->studiengang_kz;
elseif ($row->fachbereich_id!=$row_lva->fachbereich_id)
$update_sql.=(strlen($update_sql)>0?',':'')."fachbereich_id=".$row->fachbereich_id;
elseif ($row->semester!=$row_lva->semester)
$update_sql.=(strlen($update_sql)>0?',':'')."semester=".$row->semester;
elseif ($row->verband!=$row_lva->verband)
$update_sql.=(strlen($update_sql)>0?',':'')."verband=".(strlen($row->verband)>0?"'".$row->verband."'":'NULL');
elseif ($row->gruppe!=$row_lva->gruppe)
$update_sql.=(strlen($update_sql)>0?',':'')."gruppe=".(strlen($row->gruppe)>0?"'".$row->gruppe."'":'NULL');
elseif ($row->raumtyp!=$row_lva->raumtyp)
$update_sql.=(strlen($update_sql)>0?',':'')."raumtyp='".$row->raumtyp."'";
elseif ($row->raumtypalternativ!=$row_lva->raumtypalternativ)
$update_sql.=(strlen($update_sql)>0?',':'')."raumtypalternativ='".$row->raumtypalternativ."'";
elseif ($row->semesterstunden!=$row_lva->semesterstunden)
$update_sql.=(strlen($update_sql)>0?',':'')."semesterstunden=".$row->semesterstunden;
elseif ($row->stundenblockung!=$row_lva->stundenblockung)
$update_sql.=(strlen($update_sql)>0?',':'')."stundenblockung=".$row->stundenblockung;
elseif ($row->wochenrythmus!=$row_lva->wochenrythmus)
$update_sql.=(strlen($update_sql)>0?',':'')."wochenrythmus=".$row->wochenrythmus;
elseif ($row->start_kw!=$row_lva->start_kw)
$update_sql.=(strlen($update_sql)>0?',':'')."start_kw=".(strlen($row->start_kw)>0?$row->start_kw:'NULL');
elseif ($row->studiensemester_kurzbz!=$row_lva->studiensemester_kurzbz)
$update_sql.=(strlen($update_sql)>0?',':'')."studiensemester_kurzbz='".$row->studiensemester_kurzbz."'";
elseif ($row->anmerkung!=$row_lva->anmerkung)
$update_sql.=(strlen($update_sql)>0?',':'')."anmerkung='".$row->anmerkung."'";
if (strlen($update_sql)>0)
{
$text.="Die LVA fas-id=$row->fas_id lvnr=$row->lvnr unr=$row->unr wird upgedatet.\r";
$sql_query="UPDATE tbl_lehrveranstaltung SET ".
$update_sql.
" where fas_id=".$row->fas_id;
//echo $sql_query.'<BR>';
if(!$res_update=@pg_query($conn, $sql_query))
{
$text.=$sql_query;
$text.="\rFehler: ".pg_errormessage($conn)."\r";
$update_error++;
}
else
$anz_update++;
// ****************
// Auch in tbl_stundenplandev updaten
$sql_query="SELECT * FROM tbl_stundenplandev WHERE
lehrveranstaltung_id=$row_lva->lehrveranstaltung_id AND datum>=now()";
//echo $sql_query.'<BR>';
if(!$res_upd_stpl=@pg_query($conn, $sql_query))
{
$text.=$sql_query;
$text.="\rFehler: ".pg_errormessage($conn)."\r";
}
else
{
if (!pg_query($conn,"BEGIN;"))
$text.="\rFehler: ".pg_errormessage($conn)."\r";
$kollision=false;
while ($row_upd_stpl=pg_fetch_object($res_upd_stpl))
{
// Lehrstunde auf Kollisionen checken
$lehrstunde=new lehrstunde($conn);
//echo '<BR>STPL-ID:'.$row_upd_stpl->stundenplandev_id.'<BR>';
if (!$lehrstunde->load($row_upd_stpl->stundenplandev_id))
echo $lehrstunde->errormsg;
$lehrstunde->lektor_uid=$row->lektor;
if (!$lehrstunde->kollision())
{
if (!$lehrstunde->save('sync_fas_lva'))
echo $lehrstunde->errormsg;
}
else
{
$error_log[$row->studiengang_kz][]=$lehrstunde->errormsg;
$text.="\rKollision: ".$lehrstunde->errormsg."\r";
$kollision=true;
echo "Kollision: ".$lehrstunde->errormsg."<BR>";
}
}
if ($kollision)
{
if (!pg_query($conn,"ROLLBACK;"))
$text.="\rFehler: ".pg_errormessage($conn)."\r";
}
else
if (!pg_query($conn,"COMMIT;"))
$text.="\rFehler: ".pg_errormessage($conn)."\r";
}
}
}
// LVA kommt mehrmals vor ->Warnung
elseif ($num_rows_lva>1)
{
$text.="\r!!! Die LVA fas_id=$row->fas_id kommt mehrfach vor!\r";
$double_error++;
}
}
else
$plausi_error++;
}
// ****************
// Ueberfluessige Datensaetze loeschen
$whereClause=getSemesterWhereClause();
$sql_query="DELETE FROM tbl_lehrveranstaltung WHERE fas_id NOT IN
(SELECT fas_id FROM vw_fas_lehrveranstaltung WHERE $whereClause) AND (fas_id!=0 OR fas_id IS NOT NULL) AND ($whereClause)";
echo $sql_query.'<BR>';
if(!$res_delete=@pg_query($conn, $sql_query))
{
$text.='\n'.$sql_query;
$text.="\rFehler: ".pg_errormessage($conn)."\r";
$text.="\rSolution: DELETE FROM tbl_stundenplandev WHERE lehrveranstaltung_id IN (SELECT lehrveranstaltung_id FROM tbl_lehrveranstaltung WHERE fas_id NOT IN (SELECT fas_id FROM vw_fas_lehrveranstaltung WHERE $whereClause) AND (fas_id!=0 OR fas_id IS NOT NULL) AND ($whereClause))\r";
}
else
{
$anz_delete=pg_numrows($res_delete);
}
//Ausgabe Zusammenfassung
$text.="\n$anz_delete Lehrveranstaltungen wurden geloescht!\n";
$text.="$plausi_error Fehler beim Plausibilitaetscheck!\n";
$text.="$update_error Fehler bei LVA-Update!\n";
$text.="$insert_error Fehler bei LVA-Insert!\n";
$text.="$double_error LVA kommen in VileSci doppelt vor!\n\n";
$text.="$anz_update LVA wurden upgedatet.\n";
$text.="$anz_insert LVA wurden neu angelegt.\n\n";
$text.="\nEND OF SYNCHRONISATION\n";
// Validation error hinzufügen
while(list($k,$v)=each($error_log))
{
$text.="\n\nStudiengang $k:\n";
foreach($v as $txt)
$text.=" $txt\n";
}
// fehlende lehrfächer
$text.="\n\nFehlende Lehrfächer: \n";
while(list($k,$v)=each($missing_lehrfaecher))
{
$text.=" $k\n";
}
// fehlende einheiten
$text.="\n\nFehlende Einheiten: \n";
while(list($k,$v)=each($missing_einheit))
{
$text.=" $k\n";
}
// fehlende raumtypen
$text.="\n\nFehlende Raumtypen: \n";
while(list($k,$v)=each($missing_raumtyp))
{
$text.=" $k\n";
}
// fehlende lehrformen
$text.="\n\nFehlende Lehrformen: \n";
while(list($k,$v)=each($missing_lehrform))
{
$text.=" $k\n";
}
if (mail($adress,"FAS Synchro mit VileSci (Lehrveranstaltungen)",$text,"From: vilesci@technikum-wien.at"))
$sendmail=true;
else
$sendmail=false;
//print "debug: ";print_r($stg_mail);
// Einzelnen Mails an Studiengänge verschicken
reset($error_log);
while(list($k,$v)=each($error_log))
{
echo "<br>Mail an Studiengang $k ".$stg_mail[$k].":<br>";
$stg_text="Dies ist eine automatische Mail!\nFolgende Fehler sind bei der Synchronisation der Lehrveranstaltungen aufgetreten:\n\n";
foreach($v as $txt)
$stg_text.="$txt\n";
echo $stg_text.'<br>';
// Studiengang
if (!mail($stg_mail[$k],"FAS Synchro mit VileSci (Lehrveranstaltungen) $k",$stg_text,"From: vilesci@technikum-wien.at"))
echo "Mail an '".$stg_mail[$k]."' konnte nicht verschickt werden!<br>";
// Stundenplanstelle
echo "<br>Mail an Studiengang $k ($adress_stpl)<br>";
if (!mail($adress_stpl,"FAS Synchro mit VileSci (Lehrveranstaltungen) $k",$stg_text,"From: vilesci@technikum-wien.at"))
echo 'Mail an "'.$adress_stpl.'" konnte nicht verschickt werden!<br>';
$sql_query="INSERT INTO tbl_studiengang VALUES ($stg->studiengang_kz,'$stg->kurzbz','$stg->kurzbzlang','$stg->bezeichnung',
'$stg->typ','$stg->farbe','$stg->email',$stg->max_semester,'$stg->max_verband','$stg->max_gruppe',5)";
if (!$result=@pg_exec($conn, $sql_query))
echo pg_last_error($conn).'<br>--'.$sql_query.'<br>';
}
// Doppelte IDs im FAS prüfen
$sql_query="SELECT count(*) AS anzahl, fas_id FROM fas_view_alle_lehreinheiten_vilesci
GROUP BY fas_id HAVING count(*)>1";
//echo $sql_query."</i><br>";
$result=pg_query($conn_fas, $sql_query);
$num_rows=pg_numrows($result);
$mail_text="Folgende $num_rows IDs kommen in der View fas_view_alle_lehreinheiten_vilesci (fas_id) mehrfach vor:\n\n";
$mail_text_false='';
if ($num_rows>0)
while ($row=pg_fetch_object($result))
$mail_text_false.=$row->fas_id.'->'.$row->anzahl."x\n";
$mail_text.=$mail_text_false."\n\nBitte überprüfen die Daten im FAS!!!";
if ($mail_text_false!='')
if (!mail($adress_fas,"FAS Synchro mit VileSci (Lehrveranstaltungen)",$mail_text,"From: vilesci@technikum-wien.at"))
echo "Mail an '".$adress_fas."' konnte nicht verschickt werden!<br>";
else
echo 'Mail wurde verschickt an '.$adress_fas.'!<br>';
?>
<html>
@@ -582,12 +42,8 @@ if ($mail_text_false!='')
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<h3>Studiengaenge werden synchronisiert!</h3>
<?php
if ($sendmail)
echo 'Mail wurde verschickt an '.$adress.'!<br>';
else
echo "Mail konnte nicht verschickt werden!<br>";
echo nl2br($text);
?>
</body>