From 449d4439624a7112f91fb02e4aee5d85e62c0c74 Mon Sep 17 00:00:00 2001 From: Gerald Simane Date: Thu, 9 Jul 2009 10:58:11 +0000 Subject: [PATCH] --- cis/private/kommune/Kommune.doc | Bin 287232 -> 0 bytes cis/private/kommune/Thumbs.db | Bin 7680 -> 0 bytes cis/private/kommune/index.php | 491 +--- .../kommune/kommune_funktionen.inc.php | 2456 +++-------------- cis/private/kommune/kommune_hex_img.inc.php | 63 +- .../kommune_template_pyramiden.inc.php | 25 +- .../kommune/kommune_template_start.inc.php | 78 +- cis/private/kommune/~$ommune.doc | Bin 162 -> 0 bytes cis/private/lehre/menu.php | 2 +- cis/private/lehre/upload.php | 4 +- cis/private/lvplan/stpl_detail.php | 2 +- cis/private/menu.php | 22 +- include/komune_wettbewerb.class.php | 533 ++-- .../komune_wettbewerbeinladungen.class.php | 821 ++---- include/komune_wettbewerbteam.class.php | 438 +-- include/lehreinheit.class.php | 1696 ++++++------ include/postgre_sql.class.php | 448 --- rdf/bisio.rdf.php | 7 +- vilesci/bis/checkfunktion.php | 6 +- .../lehre/abgabe_assistenz_multitermin.php | 2 +- .../lehre/import/stdplan_import_sendmail.php | 2 - vilesci/lehre/lehrfach/lehrfachpflege.php | 2 +- vilesci/lehre/lehrveranstaltung.php | 4 +- vilesci/lehre/lvplanwartung.php | 2 +- vilesci/personen/lektorzuteilung_edit.php | 14 +- .../personen/preinteressent_uebernahme.php | 2 +- vilesci/personen/student_vorrueckung.php | 4 +- .../personen/student_vorrueckung_manuell.php | 4 +- vilesci/personen/studenten_uebersicht.php | 2 +- vilesci/personen/suche.php | 2 +- vilesci/personen/zeitwunsch.php | 2 +- vilesci/personen/zeitwunsch_save.php | 4 +- vilesci/stammdaten/le_wartung.php | 2 +- vilesci/stammdaten/personen_wartung.php | 2 +- vilesci/stammdaten/reihungstestverwaltung.php | 2 +- 35 files changed, 2361 insertions(+), 4783 deletions(-) delete mode 100644 cis/private/kommune/Kommune.doc delete mode 100644 cis/private/kommune/Thumbs.db delete mode 100644 cis/private/kommune/~$ommune.doc delete mode 100644 include/postgre_sql.class.php diff --git a/cis/private/kommune/Kommune.doc b/cis/private/kommune/Kommune.doc deleted file mode 100644 index d7370e736f3b055f82d89fafd575f6d51fff430b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287232 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

3&Oa*wR-?30ov(NEEz9U)-& z!rMVy(g`v?0?py#CC8&q%QwnK2{xUsp8cOi&k&?quNeGBOGXt6x<4#E-;s@b2qM}9 zcq={sgB9O9rP`fPn=pDjJ&RsHSB=5ZyJBWosPZyJdS5gDS;-NyVBVZBNE5t{Y>}_t zGWXc-k4w<2xdplTp}c`-V2;%Cp-b5161@d@9KkLRC~?TWV~*PIUkBf@euTlIGVpn{ zMhq|P0E?U`_VHKDoFsT2mX!&qI0NPEeQmhcevMj}O~UzUI(cMQ*qp?q`HC;TJAD=k*8urvnCT1^b%7di_>ou9 zz7RxIeoB{DYMCW?&S!;;9hv9JR}bhnxD8!2Wk^NmQth5{5_dq<^p32vVU*6l?Eu5< za|zTwbe=xyF7&IFIplCq1ng@+BKwt`Hsm+(WYRja4|J;dfgq2Wk+M`gAt50mkx*)C zYWQj~E5a$8;|~H?#Dz}S1|uZ_&#~YsCK4F2!;u-;+S$3<<52nhvz7=bCboW_W_$?@ zh&2H#lu7~Iw6xgie}?zd6e1Pz{Zg$*v>-k@ypSHDixC``jwOhoe0`vDaG)x%?d zrOLri1Y)<*+-g&*-@`Qg@MyqbO{e!5|4SwC1206$fQZ#$+j8dLoFqRDBqI~BdUYp` zkYDKy9xfjd1CS!oExzi6nI(=4@}|N3t5G~86Dv6)PeUr zS%%f4CO_r%Prv?;o1L7O$GrCnKxwsOQ8LuO+K(S@0EJQwkWu^PRpbw`bgN4`{?Rs| zD>C>;LoBxiCUk#@$%i)&)~3)p@05J+N9^)1sDhA6U;t)N;=i84{}D52i|%{l^TP8> zkI1PzWwF$e&Fg-|Ymd3f9w~8(`7GA!=DO}=#y?~Q0d-3CK%U>}GENG<>Ar!1_Y<-b&^O%%T>)%qlA;;k{!yXa@PsT&q| z`6QWlD)xHzSF#&Hj}YltzT6cLvqWS6)k}cEACQThT!d$Cx^M`6+EB}79~iyoNu$HW zy1LHs+Lv|xki8U+Q}W52Ft*Ygu|>SkZ$0l);p~WmgsT5$_xBNM36ObYm>{qS#K1E? zz%zQ{*TlEMrU4~wpTvw@rf;zG8DEi4`+ZY9v!!0kkFDGPX&TH}y$^D-Fviskw)HB; zwnNdHqD@UVbwpt;B)GJK#GVKWk@J@767$ zhNOpE{6D<%Z}KWZ53t_ssrFm0fKm)PO3LJs2Q%tLmq$Cs0stHi$6(Jx5zDxXDl_zh#<3% z((jR2|GjL0w(fz0oYd$z=P&Yb2mnt${1VWQBk=z&VaESAFa4gIXExgQ&u9$53h@

#IbenY|6Bh%<6c+e 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 diff --git a/cis/private/kommune/Thumbs.db b/cis/private/kommune/Thumbs.db deleted file mode 100644 index 1a47b1ddb88ea857c9b0e9ede8cbadc1701fb100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 */ -// ---------------- Konstante - -// ---------------- Datenbank - Schema der Kommune, Wettbewerbe - - -// Max. Wettbewerbe je Zeile am Starttemplate - if (!defined('constMaxWettbwerbeZeile')) define('constMaxWettbwerbeZeile',5 ); - -// Pflichteingabefelder Defaultwert - if (!defined('constEingabeFehlt')) define('constEingabeFehlt','Eingabe !' ); - - -// HREF Parameter fuer die Include Auswahl - if (!defined('constKommuneParmSetWork')) define('constKommuneParmSetWork','userSel' ); -// ------ Anzeige - Display Include HTML Datenerzeugen - // Auswahl Kommunen Template :: Anzeigenauswahl :: Definition mit constKommuneParmSetWork - if (!defined('constKommuneAnzeigeDEFAULT')) define('constKommuneAnzeigeDEFAULT','kommune_template_start'); - // Anzeige Wettbewerb Team(s) in Pyramidenform - if (!defined('constKommuneAnzeigeWETTBEWERBTEAM')) define('constKommuneAnzeigeWETTBEWERBTEAM','kommune_template_pyramiden'); - // Neuanlage Teamspieler zu einem Wettbewerb - if (!defined('constKommuneWartungUID')) define('constKommuneWartungUID','kommune_wartung_team' ); - // Neuanlage Teamspieler zu einem Wettbewerb - if (!defined('constKommuneEinladenTEAM')) define('constKommuneEinladenTEAM','kommune_einladen_team' ); - // Bildausgabe lt.Datenbank - if (!defined('constKommuneDisplayIMAGE')) define('constKommuneDisplayIMAGE','kommune_hex_img' ); - // Statistik - Bestenliste - Sonstiges - if (!defined('constKommuneSTATISTIK')) define('constKommuneSTATISTIK','kommune_template_statistik' ); - // XML User Liste - if (!defined('constKommuneUserXML')) define('constKommuneUserXML','kommune_user_xml' ); - - // ---------------- CIS Include Dateien einbinden require_once('../../../config/cis.config.inc.php'); + +/* + require_once('../../../include/basis_db.class.php'); + if (!$db = new basis_db()) + die('

');// Datenbankverbindung +*/ require_once('../../../include/functions.inc.php'); require_once('../../../include/globals.inc.php'); // ---------------- Datenbank-Verbindung -# include_once('../../../include/postgre_sql.class.php'); - include_once('../../../include/komune_wettbewerb.class.php'); include_once('../../../include/komune_wettbewerbteam.class.php'); include_once('../../../include/komune_wettbewerbeinladungen.class.php'); @@ -68,399 +41,123 @@ // Kommunen Allg.Funktionen include_once('kommune_funktionen.inc.php'); -// ---------------- Anzeige/Ausgabe Variable Initialisieren - // Initialisieren Anzeige-Variable - $showHTML=''; +// ---------------- Konstante +// Max. Wettbewerbe je Zeile am Starttemplate + if (!defined('constMaxWettbwerbeZeile')) define('constMaxWettbwerbeZeile',3 ); +// Pflichteingabefelder Defaultwert + if (!defined('constEingabeFehlt')) define('constEingabeFehlt','Eingabe !' ); // Kommunen - Wettbewerb - Datenobjekt ----------------------------------------------------------------------------------------------------------- - // Datenobjekt - Alle Daten je Parameter werden gesammelt fuer die neachste Funktionn + + // Datenobjekt - Alle Kommunen - Daten in einem Objekt sammeln $oWettbewerb= new stdClass; - if (!$db = new basis_db()) - die('

Keine Wettbewerbe zurzeit Online.
Bitte etwas Geduld.
Danke
');// Datenbankverbindung - // DB Open - $oWettbewerb->sqlCONN=$db; - // Parameter DB Schema - $oWettbewerb->sqlSCHEMA='kommune'; -# $oWettbewerb->sqlSCHEMA='public'; - - // Parameter ClientEncode - $oWettbewerb->clientENCODE='UTF-8'; + $oWettbewerb->user='?'; + $oWettbewerb->admin=false; + $oWettbewerb->admin=true; + $oWettbewerb->errormsg=array(); + $oWettbewerb->errormsg[]='Fehleranzeige'; + +// ---------------- Anzeige/Ausgabe Variable Initialisieren + // Parameter Applikation - Template Auswahl - $oWettbewerb->workSITE = (isset($_REQUEST[constKommuneParmSetWork]) ? $_REQUEST[constKommuneParmSetWork] : constKommuneAnzeigeDEFAULT); - $oWettbewerb->workSITE = (!empty($oWettbewerb->workSITE) ? trim($oWettbewerb->workSITE):constKommuneAnzeigeDEFAULT); - + $oWettbewerb->workSITE = (isset($_REQUEST['workSITE']) ? $_REQUEST['workSITE'] : (isset($_REQUEST['userSel']) ? $_REQUEST['userSel'] : '')); + $oWettbewerb->PersonenBenutzer=array(); // Merken der Personen in eigen Array - nur einmal lesen jeden User (Performence) + // AktiverAnwender----------------------------------------------------------------------------------------------------------- - $userUID=(isset($_REQUEST['userUID']) ? $_REQUEST['userUID'] :get_uid() ); -# $userUID='pam'; -# $userUID='oesi'; -# $userUID='ruhan'; -# $userUID='kindlm'; - - $oWettbewerb->userUID=$userUID; - - $pers=kommune_funk_benutzerperson($oWettbewerb->userUID,$oWettbewerb); - if (isset($pers->nachname)) $oWettbewerb->PersonenBenutzer[$oWettbewerb->userUID]=$pers; - -// Teams ------------------------------------------------------------------------------------------------------------------- - // Parameter Team (zum Wettbewerb) - $oWettbewerb->team_kurzbz=(isset($_REQUEST['team_kurzbz']) ? $_REQUEST['team_kurzbz']:''); - $oWettbewerb->team_kurzbz=(isset($_REQUEST['team_forderer']) ? $_REQUEST['team_forderer']:$oWettbewerb->team_kurzbz); - $oWettbewerb->team_kurzbz=trim($oWettbewerb->team_kurzbz); + $user=get_uid(); +# $user='pam'; +# $user='oesi'; +# $user='ruhan'; +# $user='kindlm'; + if (!$user=get_uid()) + die('Sie sind nicht angemeldet. Es wurde keine Benutzer UID gefunden !
Zurück'); + if (!$pers=kommune_funk_benutzerperson($user,&$oWettbewerb)) + die('Sie wurden nicht als Benutzer gefunden - UID ! Zurück'); + $oWettbewerb->user=$user; - // Spieler/Team Wartung - $oWettbewerb->team_kurzbz_old=(isset($_REQUEST['team_kurzbz_old']) ? $_REQUEST['team_kurzbz_old']:'');; - $oWettbewerb->team_kurzbz_old=trim($oWettbewerb->team_kurzbz_old); - - // Einladung an Spieler/Team - $oWettbewerb->team_kurzbz_einladung=(isset($_REQUEST['einladen_team_kurzbz']) ? $_REQUEST['einladen_team_kurzbz']:''); - $oWettbewerb->team_kurzbz_einladung=(isset($_REQUEST['team_gefordert']) ? $_REQUEST['team_gefordert']:$oWettbewerb->team_kurzbz_einladung); - $oWettbewerb->team_kurzbz_einladung=(isset($_REQUEST['team_kurzbz_einladen']) ? $_REQUEST['team_kurzbz_einladen']:$oWettbewerb->team_kurzbz_einladung); - $oWettbewerb->team_kurzbz_einladung=trim($oWettbewerb->team_kurzbz_einladung); - // ------------------------------------------------------------------------------------------------------------------------- // Wettbewerb --------------------------------------------------------------------------------------------------------------- // Parameter Wettbewerb - Type - $oWettbewerb->wbtyp_kurzbz=(isset($_REQUEST['wbtyp_kurzbz']) ? $_REQUEST['wbtyp_kurzbz']:''); - $oWettbewerb->wbtyp_kurzbz=trim($oWettbewerb->wbtyp_kurzbz); + $oWettbewerb->wbtyp_kurzbz=trim((isset($_REQUEST['wbtyp_kurzbz']) ? $_REQUEST['wbtyp_kurzbz']:'')); // Parameter Wettbewerb - $oWettbewerb->wettbewerb_kurzbz=(isset($_REQUEST['wettbewerb_kurzbz']) ? $_REQUEST['wettbewerb_kurzbz']:''); - $oWettbewerb->wettbewerb_kurzbz=trim($oWettbewerb->wettbewerb_kurzbz); -// ------------------------------------------------------------------------------------------------------------------------- - $oWettbewerb->WettbewerbTyp=array(); // Alle Daten des Wettbewerb - $oWettbewerb->Wettbewerb=array(); // Alle Daten des Wettbewerb - $oWettbewerb->EigeneWettbewerbe=array(); // Eigene Wettbewerbe auf UID Basis + $oWettbewerb->wettbewerb_kurzbz=trim((isset($_REQUEST['wettbewerb_kurzbz']) ? $_REQUEST['wettbewerb_kurzbz']:'')); + + // WettbewerbTypen und Wettbewerbe + $oWettbewerb->WettbewerbTyp=array(); + $oWettbewerb->Wettbewerb=array(); -//kommune_funk_teams - $oWettbewerb->TeamGesamt=array(); // Alle Teams in diesem Wettbewerb (=wettbewerb_kurzbz), oder Alle wenn wettbewerb_kurzbz leer ist -//kommune_funk_anwenderteams - $oWettbewerb->TeamAnwender=array(); // Alle Wettbewerbe zum angemeldeten Anwende (Alle Teams der uid) -// ----------- Team Key => team_kurzbz -//kommune_funk_teambenutzer 1x Datensatz je team_kurzbz - $oWettbewerb->Team=array(); // Alle Teams (ein DatenArray je Team Key => team_kurzbz) Achtung! nur ein Benutzer im Array (verwende TeamBenutzer) ! -//kommune_funk_teambenutzer Alle Datensaetze je team_kurzbz - $oWettbewerb->TeamBenutzer=array(); // Alle Teammitglieder (ein Datensatz je Team Key => team_kurzbz) + // Team + $oWettbewerb->team_kurzbz=trim((isset($_REQUEST['team_kurzbz']) ? $_REQUEST['team_kurzbz'] : '')); -// Match ------------------------------------------------------------------------------------------------------------------- - $oWettbewerb->match_id=(isset($_REQUEST['match_id']) ? $_REQUEST['match_id']:''); - $oWettbewerb->match_id=trim($oWettbewerb->match_id); - $oWettbewerb->Einladung=array(); // Alle Daten zur Einladung - $oWettbewerb->EinladungVonTeam=array(); // Alle Teaminformation des Einladenten Teams - $oWettbewerb->EinladungAnTeam=array(); // Alle Teaminformation des Eingeladenen Teams +// Initialisieren Anzeige-Variable -------------------------------------------------------------------------------------- - $oWettbewerb->Forderungen=array(); // Forderungen an Andere Teams - $oWettbewerb->Spiele=array(); // Forderungen - - $oWettbewerb->Error=array(); // Fehlermeldungen - // Benutzer Personen Gen. ------------------------------------------------------------------------------------------------------------------- - $oWettbewerb->PersonenBenutzer=array(); // Personendaten je Spieler ( Key => userid ) + $showHTML=kommune_html_header($oWettbewerb); - // ---------------- Kommunen Standart Include Dateien einbinden - // Anzeige Templates mittels Include Laden - if (trim($oWettbewerb->workSITE)!=constKommuneAnzeigeDEFAULT) - { - $includeFILE=strtolower($oWettbewerb->workSITE.".inc.php"); - if (file_exists($includeFILE))// Check ob das Verarbeitungs-Include File vorhanden ist - include_once($includeFILE); - } - - // Fuer die Bildfunktion werden keine Datenbenoetigt, und nach Verarbeitung beenden - if (trim($oWettbewerb->workSITE)==constKommuneDisplayIMAGE) - { - createIMGfromHEX(&$oWettbewerb); - exit; - } +// Headerzeile----------------------------------------------------------------------------------------------------------- +# $showHTML.='

Kommune von '.$pers->langname.(isset($pers->foto_image)?$pers->foto_image:'').'

'; + +// Menuezeile----------------------------------------------------------------------------------------------------------- + $showHTML.='

Startseite | meine Spiele ] '; + + if ($oWettbewerb->admin) + { + $showHTML.=' Admin: [ Wettbewerbtypen | Wettbewerbe ] '; + } + $showHTML.='

'; - // Fuer die Bildfunktion werden keine Datenbenoetigt, und nach Verarbeitung beenden - if (trim($oWettbewerb->workSITE)==constKommuneUserXML) - { - if (empty($userUID)) - exit('Keine Daten '); - exit( (isset($pers->nachname)?$pers->nachname:"$userUID falsch!")); - } + switch (trim($oWettbewerb->workSITE)) + { + case 'kommune_hex_img': + @ob_end_clean(); + include_once(dirname(__FILE__)."/kommune_hex_img.inc.php"); + exit; + break; - $callURL=(isset($_SERVER["HTTP_REFERER"])?mb_eregi_replace(mb_strstr($_SERVER["HTTP_REFERER"],"?"),"",$_SERVER["HTTP_REFERER"]):""); -#exit(kommune_Test($_SERVER)); -// ------------------------------------------------------------------------------------------------------------------------- -// HTML Ausgabe Datenstrom Teil I Header - $showHTML=' - - - - Kommune '.$oWettbewerb->workSITE.' - - - - - - - - - - - - - - - - -'; - - //-------------- Datenlesen - // Daten Wettbewerb ermitteln /include kommune_funktionen.inc.php - kommune_funk_wettbewerb(&$oWettbewerb); - - kommune_funk_eigene_wettbewerb(&$oWettbewerb); - kommune_funk_team_wettbewerbe(&$oWettbewerb); - - // Daten Teams ermitteln /include kommune_funktionen.inc.php - kommune_funk_teams(&$oWettbewerb); // TeamGesamt - kommune_funk_anwenderteams(&$oWettbewerb); // TeamAnwender - kommune_funk_teambenutzer(&$oWettbewerb); // Team, TeamBenutzer - - // Daten Anzeige und Verarbeitung - $showHTML.=showMenueFunktion($oWettbewerb); - // Fehler - Error Ausgabe - - $showHTML.='
'; - for ($iTmpZehler=0;$iTmpZehlerError);$iTmpZehler++) - { - if (!empty($oWettbewerb->Error[$iTmpZehler])) - $showHTML.='

'. $oWettbewerb->Error[$iTmpZehler].'

'; + if (!empty($oWettbewerb->errormsg[$iTmpZehler])) + $showHTML.='

'. $oWettbewerb->errormsg[$iTmpZehler].'

'; } $showHTML.='
'; + echo $showHTML.''; - $showHTML.=''; - exit($showHTML); +// HTMLOutput----------------------------------------------------------------------------------------------------------- + exit(); ?> diff --git a/cis/private/kommune/kommune_funktionen.inc.php b/cis/private/kommune/kommune_funktionen.inc.php index 11c8cde8c..7bb3beb98 100644 --- a/cis/private/kommune/kommune_funktionen.inc.php +++ b/cis/private/kommune/kommune_funktionen.inc.php @@ -21,156 +21,12 @@ * Rudolf Hangl . * Gerald Simane-Sequens . */ - -#------------------------------------------------------------------------------------------- -/* -* -* @showMenueFunktion erzeugt das Top Menue , die aktuelle Auswahl muss uebergeben werden -* -* @param $oWettbewerb Objekt zum Wettbewerb, Team, Personen, Match -* @param $cTmpMenue Aktuelles Menue -* -* @return showHTML String mit HTML TopMenue -* -*/ -function showMenueFunktion($oWettbewerb) -{ - // Plausib - - // Initialisierung - $showHTML=''; - $cTmpMenue=''; - $cTmpIDausblenden="hide_layer('idWBPyramide');hide_layer('idWBWartung');hide_layer('idWBEinladung');hide_layer('idWBPyramide');hide_layer('idWBInformation');hide_layer('idWBInformation');hide_layer('idWBTermine');hide_layer('idWBListe');hide_layer('idWBUser');hide_layer('idWBEinlad');hide_layer('idWBAufford');hide_layer('idWBSpiele');"; - $cTmpFarbe=(isset($oWettbewerb->Wettbewerb[0]["farbe"]) && !empty($oWettbewerb->Wettbewerb[0]["farbe"])?' style="background-color:#'.$oWettbewerb->Wettbewerb[0]["farbe"].';text-align:center;" ':' style="text-align:center;"'); - - // - // Anzeigenauswahl - Oberesmenue - // wird nur angezeigt wenn Daten fuer die Auswahl vorhanden sind - // - - $cTmpName=$oWettbewerb->userUID; - $pers=kommune_funk_benutzerperson($cTmpName,$oWettbewerb); - if (isset($pers->langname)) - $cTmpName=$pers->langname; - - // Startseite ( Immer ) - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=kommune_funk_create_href(constKommuneAnzeigeDEFAULT,array(),array(),'Startseite','Startseite'); - - // Variable MenueEintraege - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - if (trim($oWettbewerb->workSITE)==constKommuneSTATISTIK) - { - $cTmpMenue.=''; - $cTmpMenue.='Information '; - $cTmpMenue.=''; - $showHTML.='

Information

'.kommune_funk_Statistik($oWettbewerb).'
'; - } - else - $cTmpMenue.=kommune_funk_create_href(constKommuneSTATISTIK,array(),array(),'Information','Information'); - - // Auswahl - Verteiler - Selektion - Dealer - - #$cTmpMenue=''; - switch (trim($oWettbewerb->workSITE)) - { - case constKommuneEinladenTEAM: - // Wettbewerbteam zum Wettbewerb anzeigen - $cTmpMenue.=(!empty($cTmpMenue)?' |':''); - $cTmpMenue.=''; - - $cTmpMenue.='Einladungbearbeiten '; - $cTmpMenue.=''; - $showHTML.='
'.showTeamEinladung($oWettbewerb).'
'; - break; - case constKommuneWartungUID: - // Wettbewer UID User Warten/Neuanlage - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=''; - $cTmpMenue.='WartungTeam / Spieler Wartung '; - $cTmpMenue.=''; - $showHTML.='
'.showTeamWartung($oWettbewerb).'
'; - break; - case constKommuneAnzeigeWETTBEWERBTEAM: - // User-Teams zu einem Wettbewerb anzeigen ( Pyramide = Rang ) - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=''; - $cTmpMenue.='Wettbewerbpyramide '; - $cTmpMenue.=''; - $showHTML.='
'.showPyramide($oWettbewerb).'
'; - break; - } - - - $iTmpAnzahl=(!is_array($oWettbewerb->EigeneWettbewerbe) || count($oWettbewerb->EigeneWettbewerbe)<1?0:count($oWettbewerb->EigeneWettbewerbe)); - if ($iTmpAnzahl!=0) - { - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=''; - $cTmpMenue.='Wettbewerbe ('.$iTmpAnzahl.') '; - $cTmpMenue.=''; - $showHTML.='
workSITE==constKommuneAnzeigeDEFAULT?'':' style="display:none"').' >

Wettbewerbe

'.kommune_funk_showWettbewerbe($oWettbewerb).'
'; - } - - $iTmpAnzahl=(!is_array($oWettbewerb->EigeneWettbewerbe) || count($oWettbewerb->EigeneWettbewerbe)<1?0:count($oWettbewerb->EigeneWettbewerbe)); - if ($iTmpAnzahl!=0) - { - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=''; - $cTmpMenue.='meine Wettbewerbe ('.$iTmpAnzahl.') '; - $cTmpMenue.=''; - $showHTML.=''; - } - - $iTmpAnzahl=(!is_array($oWettbewerb->Einladung) || count($oWettbewerb->Einladung)<1?0:count($oWettbewerb->Einladung)); - $iTmpAnzahl=$iTmpAnzahl+(!is_array($oWettbewerb->Forderungen) || count($oWettbewerb->Forderungen)<1?0:count($oWettbewerb->Forderungen)); - if ($iTmpAnzahl!=0) - { - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=''; - $cTmpMenue.='Terminekontrolle ('.$iTmpAnzahl.') '; - $cTmpMenue.=''; - $showHTML.=''; - } - - $iTmpAnzahl=(!is_array($oWettbewerb->Einladung) || count($oWettbewerb->Einladung)<1?0:count($oWettbewerb->Einladung)); - if ($iTmpAnzahl!=0) - { - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=''; - $cTmpMenue.='Forderung ('.$iTmpAnzahl.') '; - $cTmpMenue.=''; - $showHTML.=''; - } - - $iTmpAnzahl=(!is_array($oWettbewerb->Forderungen) || count($oWettbewerb->Forderungen)<1?0:count($oWettbewerb->Forderungen)); - if ($iTmpAnzahl!=0) - { - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=''; - $cTmpMenue.='Gefordert ('.$iTmpAnzahl.') '; - $cTmpMenue.=''; - $showHTML.=''; - } - - $iTmpAnzahl=(!is_array($oWettbewerb->Spiele) || count($oWettbewerb->Spiele)<1?0:count($oWettbewerb->Spiele)); - if ($iTmpAnzahl!=0) - { - $cTmpMenue.=(!empty($cTmpMenue)?' | ':''); - $cTmpMenue.=''; - $cTmpMenue.='Ergebnisse ('.$iTmpAnzahl.') '; - $cTmpMenue.=''; - $showHTML.=''; - } - - if (empty($cTmpMenue)) - return '

Keine Wettbewerbe zurzeit Online.
Bitte etwas Geduld.
Danke
'; - - $showHTML='
 ['.$cTmpMenue.' ]
'.$showHTML; - return $showHTML; -} -#------------------------------------------------------------------------------------------- + + + + + #------------------------------------------------------------------------------------------- /* * * @showMeineWettbewerbSpiele Aufbau einer bisher gespielten Wettbewerbe @@ -182,53 +38,69 @@ function showMenueFunktion($oWettbewerb) */ function kommune_funk_wettbewerb($oWettbewerb) { - $Wettbewerb= new komune_wettbewerb($oWettbewerb->sqlCONN,$oWettbewerb->wbtyp_kurzbz,$oWettbewerb->wettbewerb_kurzbz); - - $Wettbewerb->setEncodingSQL($oWettbewerb->clientENCODE); - $Wettbewerb->setSchemaSQL($oWettbewerb->sqlSCHEMA); - // WettbewerbTypen + $Wettbewerb= new komune_wettbewerb(); + + $Wettbewerb->InitWettbewerb(); + $Wettbewerb->wbtyp_kurzbz=$oWettbewerb->wbtyp_kurzbz; $oWettbewerb->WettbewerbTyp=array(); - if ($Wettbewerb->loadWettbewerbTyp()) - $oWettbewerb->WettbewerbTyp=$Wettbewerb->getWettbewerb(); + if ($Wettbewerb->loadWettbewerbTyp($oWettbewerb->wbtyp_kurzbz)) + $oWettbewerb->WettbewerbTyp=$Wettbewerb->result; else - $oWettbewerb->Error[]=$Wettbewerb->getError(); + $oWettbewerb->errormsg[]=$Wettbewerb->errormsg; if (!isset($oWettbewerb->WettbewerbTyp[0])) return false; - + // WettbewerbTypen und Wettbewerbe + + $Wettbewerb->InitWettbewerb(); + $Wettbewerb->wbtyp_kurzbz=$oWettbewerb->wbtyp_kurzbz; + $Wettbewerb->wettbewerb_kurzbz=$oWettbewerb->wettbewerb_kurzbz; + $oWettbewerb->Wettbewerb=array(); - if ($Wettbewerb->loadWettbewerb()) - $oWettbewerb->Wettbewerb=$Wettbewerb->getWettbewerb(); + if ($Wettbewerb->loadWettbewerb($oWettbewerb->wbtyp_kurzbz,$oWettbewerb->wettbewerb_kurzbz)) + $oWettbewerb->Wettbewerb=$Wettbewerb->result; else - $oWettbewerb->Error[]=$Wettbewerb->getError(); + $oWettbewerb->errormsg[]=$Wettbewerb->errormsg; if (!isset($oWettbewerb->Wettbewerb[0])) return false; - unset($Wettbewerb); + // Wettbewerbstyp wenn nicht uebergeben wurde ermitteln zu einem Wettbewerb if (empty($oWettbewerb->wbtyp_kurzbz) && !empty($oWettbewerb->wettbewerb_kurzbz) ) - $oWettbewerb->wbtyp_kurzbz=$oWettbewerb->Wettbewerb[0]["wbtyp_kurzbz"]; + $oWettbewerb->wbtyp_kurzbz=$oWettbewerb->Wettbewerb[0]->wbtyp_kurzbz; // Moderator,Bild-Icon ermitteln und Leerzeichen aus den KeyWords entfernen reset($oWettbewerb->Wettbewerb); for ($iTmpZehler=0;$iTmpZehlerWettbewerb);$iTmpZehler++) { // Check Space - $oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]=trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]); - $oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]=trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]); - $oWettbewerb->Wettbewerb[$iTmpZehler]["uid"]=trim($oWettbewerb->Wettbewerb[$iTmpZehler]["uid"]); - $oWettbewerb->Wettbewerb[$iTmpZehler]["icon_image"]=''; + $oWettbewerb->Wettbewerb[$iTmpZehler]->wbtyp_kurzbz=trim($oWettbewerb->Wettbewerb[$iTmpZehler]->wbtyp_kurzbz); + $oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerb_kurzbz=trim($oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerb_kurzbz); + $oWettbewerb->Wettbewerb[$iTmpZehler]->uid=trim($oWettbewerb->Wettbewerb[$iTmpZehler]->uid); + $oWettbewerb->Wettbewerb[$iTmpZehler]->icon_image=''; + $oWettbewerb->Wettbewerb[$iTmpZehler]->bereits_eingetragen=""; + $oWettbewerb->Wettbewerb[$iTmpZehler]->daten_eingetragen=""; // Create IMG - if (!empty($oWettbewerb->Wettbewerb[$iTmpZehler]["icon"])) + if (!empty($oWettbewerb->Wettbewerb[$iTmpZehler]->icon)) { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneDisplayIMAGE.'&timecheck'.time().'&wettbewerb_kurzbz='.$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"].'&wbtyp_kurzbz='.$oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"].(strlen($oWettbewerb->Wettbewerb[$iTmpZehler]["icon"])<2000?'&heximg='.$oWettbewerb->Wettbewerb[$iTmpZehler]["icon"]:''); - $oWettbewerb->Wettbewerb[$iTmpZehler]["icon_image"]=''.$oWettbewerb->Wettbewerb[$iTmpZehler]['; + $paramURL=$_SERVER['PHP_SELF'].'?userSel=kommune_hex_img&timecheck'.time().'&wettbewerb_kurzbz='.$oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerb_kurzbz.'&wbtyp_kurzbz='.$oWettbewerb->Wettbewerb[$iTmpZehler]->wbtyp_kurzbz.(strlen($oWettbewerb->Wettbewerb[$iTmpZehler]->icon)<1000?'&heximg='.$oWettbewerb->Wettbewerb[$iTmpZehler]->icon:''); + $oWettbewerb->Wettbewerb[$iTmpZehler]->icon_image=''.$oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerb_kurzbz.''; } + // Moderator lesen zu jedem Wettbewerb : Moderator - Person-Benutzer - $pers=kommune_funk_benutzerperson($oWettbewerb->Wettbewerb[$iTmpZehler]["uid"],$oWettbewerb); + $cShowImage=''; + if (!empty($oWettbewerb->Wettbewerb[$iTmpZehler]->uid)) + { + $pers=kommune_funk_benutzerperson($oWettbewerb->Wettbewerb[$iTmpZehler]->uid,$oWettbewerb); + if (isset($pers->foto_image) && !empty($pers->foto_image)) + $cShowImage=$pers->foto_image; + $oWettbewerb->Wettbewerb[$iTmpZehler]->pers=$pers; + } + $oWettbewerb->Wettbewerb[$iTmpZehler]->foto_image=$cShowImage; } return true; } + #------------------------------------------------------------------------------------------- /* * @@ -242,1535 +114,208 @@ function kommune_funk_wettbewerb($oWettbewerb) function kommune_funk_eigene_wettbewerb($oWettbewerb) { // --- Wettbewerbe zum angemeldeten User (EINGETRAGEN) - $Wettbewerb=new komune_wettbewerbteam($oWettbewerb->sqlCONN,$oWettbewerb->userUID,$oWettbewerb->team_kurzbz,$oWettbewerb->wettbewerb_kurzbz); - $Wettbewerb->setEncodingSQL($oWettbewerb->clientENCODE); - $Wettbewerb->setSchemaSQL($oWettbewerb->sqlSCHEMA); - + $Wettbewerb=new komune_wettbewerbteam($oWettbewerb->team_kurzbz,$oWettbewerb->wettbewerb_kurzbz,$oWettbewerb->user); $oWettbewerb->EigeneWettbewerbe=array(); if ($Wettbewerb->loadWettbewerbteam()) - $oWettbewerb->EigeneWettbewerbe=$Wettbewerb->getWettbewerbteam(); + $oWettbewerb->EigeneWettbewerbe=$Wettbewerb->result; else - return $oWettbewerb->Error[]=$Wettbewerb->getError(); - unset($WettbewerbTeam); + return $oWettbewerb->errormsg[]=$Wettbewerb->errormsg; + @reset($oWettbewerb->EigeneWettbewerbe); for ($iTmpZehler=0;$iTmpZehlerEigeneWettbewerbe);$iTmpZehler++) { - $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["team_kurzbz"]=trim($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["team_kurzbz"]); - $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["wettbewerb_kurzbz"]=trim($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["wettbewerb_kurzbz"]); + $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->team_kurzbz=trim($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->team_kurzbz); + $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->wettbewerb_kurzbz=trim($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->wettbewerb_kurzbz); - $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["logo_image"]=''; - if (!empty($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["logo"])) + $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->logo_image=''; + if (!empty($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->logo)) { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneDisplayIMAGE.'&timecheck'.time().'&team_kurzbz='.$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["team_kurzbz"].'&wettbewerb_kurzbz='.$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["wettbewerb_kurzbz"].(strlen($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["logo"])<2000?'&heximg='.$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["logo"]:''); - $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["logo_image"]=''.$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]['; + $paramURL=$_SERVER['PHP_SELF'].'?'.'userSel'.'='.'kommune_hex_img'.'&timecheck'.time().'&team_kurzbz='.$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->team_kurzbz.'&wettbewerb_kurzbz='.$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->wettbewerb_kurzbz.(strlen($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->logo)<1000?'&heximg='.$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->logo:''); + $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->logo_image=''.$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->team_kurzbz.''; } // Anwender lesen zu jedem Wettbewerb : UID - Person-Benutzer - $pers=kommune_funk_benutzerperson($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["uid"],$oWettbewerb); + $cShowImage=''; + if (!empty($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->uid)) + $pers=kommune_funk_benutzerperson($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->uid,$oWettbewerb); + else + $pers=array(); + if (isset($pers->foto_image) && !empty($pers->foto_image)) + $cShowImage=$pers->foto_image; + $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->foto_image=$cShowImage; + $oWettbewerb->EigeneWettbewerbe[$iTmpZehler]->pers=$pers; + } + + // Suchen Wettbewerb wo der Angemeldeten Anwender (uid) angemeldet ist @reset($oWettbewerb->Wettbewerb); for ($iTmpZehler=0;$iTmpZehlerWettbewerb);$iTmpZehler++) { - $oWettbewerb->Wettbewerb[$iTmpZehler]["bereits_eingetragen"]=""; - $oWettbewerb->Wettbewerb[$iTmpZehler]["daten_eingetragen"]=""; + $oWettbewerb->Wettbewerb[$iTmpZehler]->bereits_eingetragen=""; + $oWettbewerb->Wettbewerb[$iTmpZehler]->daten_eingetragen=""; if (is_array($oWettbewerb->EigeneWettbewerbe) && count($oWettbewerb->EigeneWettbewerbe)>0) { reset($oWettbewerb->EigeneWettbewerbe); for ($iTmpZehlerEX=0;$iTmpZehlerEXEigeneWettbewerbe);$iTmpZehlerEX++) { - if (trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"])==trim($oWettbewerb->EigeneWettbewerbe[$iTmpZehlerEX]["wettbewerb_kurzbz"]) ) - { - $oWettbewerb->Wettbewerb[$iTmpZehler]["bereits_eingetragen"]="*"; - $oWettbewerb->Wettbewerb[$iTmpZehler]["daten_eingetragen"]=$oWettbewerb->EigeneWettbewerbe[$iTmpZehlerEX]; - break; // Datensatz gefunden. Suche kann beendet werden + if (trim($oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerb_kurzbz)==trim($oWettbewerb->EigeneWettbewerbe[$iTmpZehlerEX]->wettbewerb_kurzbz) ) + { + $oWettbewerb->Wettbewerb[$iTmpZehler]->bereits_eingetragen="*"; + $oWettbewerb->Wettbewerb[$iTmpZehler]->daten_eingetragen=$oWettbewerb->EigeneWettbewerbe[$iTmpZehlerEX]; + $iTmpZehlerEX=count($oWettbewerb->EigeneWettbewerbe) + 1; // Datensatz gefunden. Suche kann beendet werden } } } }// Ende Wettbewerb Suchen Datensatz des Angemeldeten Anwender (uid) fuer den Wettbewerb return true; -} +} + + + +// ************************************************************************************ + #------------------------------------------------------------------------------------------- /* * -* @kommune_funk_showWettbewerbe Aufbau einer Tabelle aller Wettbewerbe +* @kommune_funk_benutzerperson ermittelt zu einer UID die Person, und speichert diese im Objekt * -* @param $oWettbewerb Array mit allen Wettbewerbs und Benutzerdaten +* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches +* @param $user UserUID Anwenderkurzzeichen * -* @return HTML String in Listenform der Wettbewerbe +* @return HTML Liste der Ergebnisse der Wettbewerbe * */ -function kommune_funk_showWettbewerbe($oWettbewerb) +function kommune_funk_benutzerperson($user,$oWettbewerb) { - $showHTML=''; - if (!is_array($oWettbewerb->Wettbewerb)) - return $showHTML; - $ctmpLast_wbtyp_kurzbz=null; // Init Gruppenwechsel - $itmpCount_wbtyp_kurzbz=0; // Init Gruppenwechsel - - for ($iTmpZehler=0;$iTmpZehlerWettbewerb);$iTmpZehler++) + $user=trim($user); + if (empty($user)) { + $oWettbewerb->Error[]="keine Benutzer UID $user der Funktion 'benutzerperson' übergeben "; + return false; + } - // PopUP ID , und JavaScript fuer Team / Spieler - $cTmpTeamPopUpID='sWbT'.$iTmpZehler; - $cTmpTeamPopUp=' onmouseover="show_layer(\''.$cTmpTeamPopUpID.'\');" onmouseout="hide_layer(\''.$cTmpTeamPopUpID.'\');" '; - - // PopUP ID , und JavaScript fuer Wettbewerb - $cTmpWettbewerbPopUpID='sWb'.$iTmpZehler; - $cTmpWettbewerbPopUp=' onmouseover="show_layer(\''.$cTmpWettbewerbPopUpID.'\');" onmouseout="hide_layer(\''.$cTmpWettbewerbPopUpID.'\');" '; - - - // PopUP ID , und JavaScript fuer Wettbewerb Haupzeile - Ueberschrift - $cTmpWettbewerbPopUpID_on='sWbon'.$iTmpZehler; - $cTmpWettbewerbPopUpID_off='sWboff'.$iTmpZehler; - $cTmpWettbewerbPopUp_on=' onclick="hide_layer(\''.$cTmpWettbewerbPopUpID.'show\');show_layer(\''.$cTmpWettbewerbPopUpID.'help\');hide_layer(\''.$cTmpWettbewerbPopUpID_on.'\');show_layer(\''.$cTmpWettbewerbPopUpID_off.'\');" '; - $cTmpWettbewerbPopUp_off=' style="display:none" onclick="show_layer(\''.$cTmpWettbewerbPopUpID.'show\');hide_layer(\''.$cTmpWettbewerbPopUpID.'help\');hide_layer(\''.$cTmpWettbewerbPopUpID_off.'\');show_layer(\''.$cTmpWettbewerbPopUpID_on.'\');" '; - - - // Anzahl Bilder in einer Reihe erreicht? Ja:=Neue Tabellenreihe beginnen, und Breite der TD errechnen - $tmpAnzahlBewerbeRow=constMaxWettbwerbeZeile; - $withBreite=100/$tmpAnzahlBewerbeRow; - - // Gruppenwechsel :: Wettbewerbs-Type - if (trim($ctmpLast_wbtyp_kurzbz)!=trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"])) - { - // Abschluss der letzten WettbewerbsTypenGruppe bereits eine Verarbeitet wurde (nicht am Anfang) - if ($ctmpLast_wbtyp_kurzbz!="") - { - // Rest der Zeile mit TD auffuellen - for ($itmpCount_wbtyp_kurzbz-0;$itmpCount_wbtyp_kurzbz<$tmpAnzahlBewerbeRow;$itmpCount_wbtyp_kurzbz++ ) - $showHTML.=' '; - - $showHTML.=''; - $showHTML.=''; - } - - // Wettbewerb Haupzeile - Ueberschrift - $showHTML.='
'; - $showHTML.=''; - $showHTML.='close'.$iTmpZehler.''.$oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"].' ausblenden '; - $showHTML.='open'.$iTmpZehler.''.$oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"].' anzeigen '; - $showHTML.=''; - - $showHTML.='
'; - $showHTML.='

Wettbewerb[$iTmpZehler]["farbe"]) && !empty($oWettbewerb->Wettbewerb[$iTmpZehler]["farbe"])?' style="background : #'.$oWettbewerb->Wettbewerb[$iTmpZehler]["farbe"].';" ':'').'>'.$oWettbewerb->Wettbewerb[$iTmpZehler]["bezeichnung"].'

'; - $showHTML.='
'; - - $showHTML.='
- '; - $ctmpLast_wbtyp_kurzbz=trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]); - $itmpCount_wbtyp_kurzbz=0; // Zeilenumbruch - - } // ende Gruppenwechsel - elseif ($iTmpZehler!=0 && ($itmpCount_wbtyp_kurzbz%$tmpAnzahlBewerbeRow)==0 ) - $showHTML.=''; - - $itmpCount_wbtyp_kurzbz++; - - // Kennzeichen ob ein Record in tbl_wettbewerb angelegt wurde ist wbtyp_kurzbz - if (empty($oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"])) // wbtyp_kurzbz=(leer=keine wettbewerbe) + // Gibt es bereits den User in der Objektliste - + if (!isset($oWettbewerb->PersonenBenutzer[$user])) // Wurde bereits gefunden + { + if (!$pers = new benutzer($user)) // Lesen PersonenBenutzer { - $showHTML.=''; - continue; + $oWettbewerb->errormsg[]=$pers->errormsg; + return false; } - // Start eines Wettbewerbes in TabellenElement (TD) mit maximaler Breite - $showHTML.=''; - } // Ende Kennzeichen ob ein Record in tbl_wettbewerb - - // Abschluss wenn bereits ein Gruppenwechsel erfolgte ist der Abschluss am Ende noetig (alle HTML Tags schliessen) - if ($ctmpLast_wbtyp_kurzbz!='') - $showHTML.='
Es sind noch keine Gruppen verfügbar!'; - # Wettbewerb - // Wettbewerb Link zur Pyramidenanzeige - $showHTML.=''; - $showHTML.='infoWettbewerb'.$iTmpZehler.' '; - $cTmpHREF=kommune_funk_create_href(constKommuneAnzeigeWETTBEWERBTEAM,'',array('wettbewerb_kurzbz'=>$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]),'openWettbewerb'.$iTmpZehler.' weiter '.$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"].' ','weiter'); - $showHTML.=$cTmpHREF.' '.$oWettbewerb->Wettbewerb[$iTmpZehler]["bereits_eingetragen"]; + $oWettbewerb->PersonenBenutzer[$user]=$pers; + } - $showHTML.=''; + if (!isset($oWettbewerb->PersonenBenutzer[$user]->langname)) + $oWettbewerb->PersonenBenutzer[$user]->langname=kommune_funk_pers_langname($oWettbewerb->PersonenBenutzer[$user]); - $showHTML.='
'; - // Wettbewerb ICON - $showHTML.=''.(isset($oWettbewerb->Wettbewerb[$iTmpZehler]["icon_image"])?$oWettbewerb->Wettbewerb[$iTmpZehler]["icon_image"].'
':'').'
'; - # Team /Spieler - // Team / Spieler Neuanlage oder Wartung der Daten - $showHTML.=''; - if (empty($oWettbewerb->Wettbewerb[$iTmpZehler]["bereits_eingetragen"])) - $showHTML.=kommune_funk_create_href(constKommuneWartungUID,'',array('team_kurzbz'=>'','wettbewerb_kurzbz'=>$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]),' open'.$iTmpZehler.' anmelden ','anmelden bei '.$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]); - else - $showHTML.=kommune_funk_create_href(constKommuneWartungUID,'',array('team_kurzbz'=>$oWettbewerb->Wettbewerb[$iTmpZehler]['daten_eingetragen']['team_kurzbz'],'wettbewerb_kurzbz'=>$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]),'bearbeiten '.$oWettbewerb->Wettbewerb[$iTmpZehler]['daten_eingetragen']['team_kurzbz'].' '.$oWettbewerb->Wettbewerb[$iTmpZehler]['daten_eingetragen']['team_kurzbz'].' ändern','bearbeiten '.$oWettbewerb->Wettbewerb[$iTmpZehler]['daten_eingetragen']['team_kurzbz']).''; - $showHTML.=''; - - $iPopUp=true; - // Wettbewerb PopUp ( Im Wettbewerb PopUp wird der Moderator PopUp erstellt ) - $showHTML.=''; + if (!isset($oWettbewerb->PersonenBenutzer[$user]->foto_image)) + $oWettbewerb->PersonenBenutzer[$user]->foto_image=kommune_funk_pers_image($oWettbewerb->PersonenBenutzer[$user]); - // Team / Spieler PopUp ( Im Teampopup wird auch das Wettbewerbspopup erstellt ) - $showHTML.=''; + if (!isset($oWettbewerb->PersonenBenutzer[$user]->emailaccount)) + $oWettbewerb->PersonenBenutzer[$user]->emailaccount=kommune_funk_create_emailaccount($oWettbewerb->PersonenBenutzer[$user]->uid); - $showHTML.='
'; - - $cTmpName=''; // Anzeige des Anwendernamen - if (isset($oWettbewerb->EigeneWettbewerbe[0]["uid"])) - { - $cTmpName=trim($oWettbewerb->EigeneWettbewerbe[0]["uid"]); - $pers=kommune_funk_benutzerperson($cTmpName,$oWettbewerb); - if (isset($pers->langname)) - $cTmpName=$pers->langname; - $showHTML.='mit * Makierte Wettbewerbe sind bereits abonniert von '.$cTmpName; - } - - $showHTML.='

'; - return $showHTML; + return $oWettbewerb->PersonenBenutzer[$user]; +} +#------------------------------------------------------------------------------------------- +/* +* +* @kommune_funk_pers_langname Gibt zum User den Langtext retour +* +* @param pers array der Personen - Benutzer Daten +* +* @return RETURN wird der Langname des Users geliefert. Leer wenn nicht moeglich. +* +*/ +function kommune_funk_pers_langname($pers="") +{ + $cTmpLangName=''; + $cTmpLangName.=(isset($pers->anrede) ? $pers->anrede.' ':''); + $cTmpLangName.=(isset($pers->titelpre) ? $pers->titelpre.' ':''); + $cTmpLangName.=(isset($pers->vorname) ? $pers->vorname.' ':''); + $cTmpLangName.=(isset($pers->nachname) ? $pers->nachname.' ':''); + return $cTmpLangName; } #------------------------------------------------------------------------------------------- /* * -* @kommune_funk_showMeineWettbewerbe Aufbau einer HTML-Ausgabe-Liste der eigenen Wettbewerbe +* @kommune_funk_pers_image Gibt zum User den Image Href reour * -* @param $oWettbewerb->Wettbewerb Array mit den Bewerben die zur Zeit aktiv sind +* @param pers array der Personen - Benutzer Daten * -* @return HTML Liste der Wettbewerbe mit dem Benutzer +* @return RETURN wir der HREF des Bildes geliefert. Leer wenn nicht moeglich. * */ -function kommune_funk_showMeineWettbewerbe($oWettbewerb) -{ - $showHTML=''; // Init - if (!is_array($oWettbewerb->EigeneWettbewerbe) || count($oWettbewerb->EigeneWettbewerbe)<1) // DB eof - return "keine Information gefunden"; - - $cLastBewerb=''; - reset($oWettbewerb->EigeneWettbewerbe); - for ($iTmpZehler=0;$iTmpZehlerEigeneWettbewerbe);$iTmpZehler++) +function kommune_funk_pers_image($pers="") +{ + $cTmpImgHref=''; + + if (isset($pers->foto) && !empty($pers->foto)) { - // PopUP ID , und JavaScript fuer Wettbewerb - $cTmpWettbewerbPopUpID='sWbMein'.$iTmpZehler; - $cTmpWettbewerbPopUpID_on=$cTmpWettbewerbPopUpID.'on'; - $cTmpWettbewerbPopUpID_off=$cTmpWettbewerbPopUpID.'off'; - - $cTmpWettbewerbPopUp_on=' onclick="hide_layer(\''.$cTmpWettbewerbPopUpID.'\');hide_layer(\''.$cTmpWettbewerbPopUpID_on.'\');show_layer(\''.$cTmpWettbewerbPopUpID_off.'\');" '; - $cTmpWettbewerbPopUp_off=' style="display:none" onclick="show_layer(\''.$cTmpWettbewerbPopUpID.'\');hide_layer(\''.$cTmpWettbewerbPopUpID_off.'\');show_layer(\''.$cTmpWettbewerbPopUpID_on.'\');" '; - - // Hauptzeile - Ueberschrift - $showHTML.='
'; - $showHTML.=''; - $showHTML.='close'.$iTmpZehler.'ausblenden '; - $showHTML.='open'.$iTmpZehler.'anzeigen '; - - $showHTML.=$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["wettbewerb_kurzbz"]; - $showHTML.=' - '; - $showHTML.=$oWettbewerb->EigeneWettbewerbe[$iTmpZehler]["team_kurzbz"]; - $showHTML.=''; - - $showHTML.='
'; - $showHTML.=''; - $bPopUp=false; // Kein PopUp Aussehen, und Funktionen - $showHTML.=''; - $showHTML.='
'.kommune_funk_show_wettbewerbteam($oWettbewerb->EigeneWettbewerbe[$iTmpZehler],$oWettbewerb,$cTmpWettbewerbPopUpID.$iTmpZehler,$bPopUp).'
'; - $showHTML.='
'; - - $showHTML.='
'; - $cLastBewerb=trim($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]['wettbewerb_kurzbz']).trim($oWettbewerb->EigeneWettbewerbe[$iTmpZehler]['team_kurzbz']); - - } - return $showHTML; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_popup_wettbewerb Anzeige eines Wettbewerbes für PopUp Anzeige -* -* @param $arrWettbewerb Array mit Wettbewerbe fuer die Anzeige -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML String mit Wettbewerbesdaten -* -*/ -function kommune_funk_popup_wettbewerb($arrWettbewerb,$oWettbewerb,$cSeitenKey="") -{ - $showHTML=''; // Init - // Wenn kein Wettbewerb-Array uebergeben wurde ermitteln Wettbewerb mit dem Parameter als wettbewerb_kurzbz - if (!is_array($arrWettbewerb) && !empty($arrWettbewerb) ) - { - reset($oWettbewerb->Wettbewerb); - for ($iTmpZehler=0;$iTmpZehlerWettbewerb);$iTmpZehler++) - { - if (trim($arrWettbewerb)==trim($oWettbewerb->Wettbewerb[$iTmpZehler]['wettbewerb_kurzbz'])) - { - $arrWettbewerb=$oWettbewerb->Wettbewerb[$iTmpZehler]; - if (empty($oWettbewerb->wbtyp_kurzbz)) - $oWettbewerb->wbtyp_kurzbz=$oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]; - break; - } - } - } // Ende ermitteln Wettbewerb wenn kein Wettbewerb uebergeben wurde - - // Plausib Wettbewerb-Array - if (!is_array($arrWettbewerb)) - return $showHTML; - - if (isset($arrWettbewerb['wbtyp_kurzbz'])) - $arrTempWettbewerb[0]=$arrWettbewerb; - else - $arrTempWettbewerb=$arrWettbewerb; - - for ($iTmpZehler=0;$iTmpZehler -  Wettbewerb '.$arrTempWettbewerb[$iTmpZehler]["wbtyp_kurzbz"].' - '.$arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"].' '; - $iPopUp=true; - $showHTML.=kommune_funk_show_wettbewerb($arrTempWettbewerb[$iTmpZehler],$oWettbewerb,$cSeitenKey,$iPopUp); - $showHTML.=''; - } - return $showHTML; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_popup_wettbewerb Anzeige eines Wettbewerbes für PopUp Anzeige -* -* @param $arrWettbewerb Array mit Wettbewerbe fuer die Anzeige -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML String mit Wettbewerbesdaten -* -*/ -function kommune_funk_show_wettbewerb($arrWettbewerb,$oWettbewerb,$cSeitenKey="", $iPopUp=false) -{ - $showHTML=''; // Init - // Wenn kein Wettbewerbe uebergeben wurde ermitteln Wettbewerb aus dem Parameter wettbewerb_kurzbz - if (!is_array($arrWettbewerb) && !empty($arrWettbewerb) ) - { - reset($oWettbewerb->Wettbewerb); - for ($iTmpZehler=0;$iTmpZehlerWettbewerb);$iTmpZehler++) - { - if (trim($arrWettbewerb)==trim($oWettbewerb->Wettbewerb[$iTmpZehler]['wettbewerb_kurzbz']) ) - { - $arrWettbewerb=$oWettbewerb->Wettbewerb[$iTmpZehler]; - if (empty($oWettbewerb->wbtyp_kurzbz)) - $oWettbewerb->wbtyp_kurzbz=$oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]; - break; - } - } - } // Ende ermitteln Wettbewerb wenn kein Wettbewerb uebergeben wurde - #---------------------------------------------------------------------------------------------------- - - // Plausib Wettbewerb-Array - if (!is_array($arrWettbewerb)) - return $showHTML; - - if (isset($arrWettbewerb['wbtyp_kurzbz'])) - $arrTempWettbewerb[0]=$arrWettbewerb; - else - $arrTempWettbewerb=$arrWettbewerb; - - for ($iTmpZehler=0;$iTmpZehler'; - $showHTML.=' - '.$arrTempWettbewerb[$iTmpZehler]["bezeichnung"].' - '; - - $showHTML.=''; - if ($iPopUp) - $showHTML.=''; - else - $showHTML.='

'.$arrTempWettbewerb[$iTmpZehler]["wbtyp_kurzbz"].' - '.$arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"].'

'; - $showHTML.=''.(isset($arrTempWettbewerb[$iTmpZehler]['icon_image'])?$arrTempWettbewerb[$iTmpZehler]['icon_image']:'').''; - $showHTML.=''; - - // Moderator PopUp Aufruf - $intKey='moderator_'.$cSeitenKey.'_'.time().'_'.$arrTempWettbewerb[$iTmpZehler]['wettbewerb_kurzbz'].'_'.$arrTempWettbewerb[$iTmpZehler]['uid']; - $intKey=mb_ereg_replace(' ','_',$intKey); - $pers=kommune_funk_benutzerperson($arrTempWettbewerb[$iTmpZehler]['uid'],$oWettbewerb); - - $showHTML.=' - - - - - - - - - - - - -
Forderungstag(e) '.$arrTempWettbewerb[$iTmpZehler]["forderungstage"].'
Moderator' - .(isset($pers->langname)?$pers->langname:$arrTempWettbewerb[$iTmpZehler]['uid']). - '
'.$arrTempWettbewerb[$iTmpZehler]["wettbewerbart"].''.$arrTempWettbewerb[$iTmpZehler]["regeln"].'
- '; - $showHTML.=''; - - // Moderator PopUp - $showHTML.=''; - } - return $showHTML; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_eigene_wettbewerb Tabellen mit den eigenen Teamdaten zu keinem,einem oder mehreren Wettbewerben -* -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML Fehlertext oder Leer -* -*/ -function kommune_funk_teams($oWettbewerb) -{ - // Init - - // TeamGesamt Spieler (alle Spieler zum Wettbewerb) - // WettbewerbTeam Classe initialisieren - $Wettbewerb=new komune_wettbewerbteam($oWettbewerb->sqlCONN,'','',''); - $Wettbewerb->setEncodingSQL($oWettbewerb->clientENCODE); - $Wettbewerb->setSchemaSQL($oWettbewerb->sqlSCHEMA); - - $Wettbewerb->InitWettbewerbteam(); - $Wettbewerb->setUid(''); - $Wettbewerb->setWettbewerb_kurzbz($oWettbewerb->wettbewerb_kurzbz); - if ($Wettbewerb->loadWettbewerbteam()) - $oWettbewerb->TeamGesamt=$Wettbewerb->getWettbewerbteam(); - else - $oWettbewerb->Error[]=$Wettbewerb->getError(); - - // TeamMitglieder lesen aus Person-Benutzer - for ($iTmpZehler=0;$iTmpZehlerTeamGesamt);$iTmpZehler++) - { - $oWettbewerb->TeamGesamt[$iTmpZehler]["uid"]=trim($oWettbewerb->TeamGesamt[$iTmpZehler]["uid"]); - $oWettbewerb->TeamGesamt[$iTmpZehler]["team_kurzbz"]=trim($oWettbewerb->TeamGesamt[$iTmpZehler]["team_kurzbz"]); - $oWettbewerb->TeamGesamt[$iTmpZehler]["wettbewerb_kurzbz"]=trim($oWettbewerb->TeamGesamt[$iTmpZehler]["wettbewerb_kurzbz"]); - - // Laden Benutzer - Person wenn noch nicht vorhanden - $cShowImage=''; - $pers=kommune_funk_benutzerperson($oWettbewerb->TeamGesamt[$iTmpZehler]["uid"],$oWettbewerb); - if (isset($pers->foto_image) && !empty($pers->foto_image)) - $cShowImage=$pers->foto_image; - $oWettbewerb->TeamGesamt[$iTmpZehler]['foto_image']=$cShowImage; - - // Erzeugen HREF zum Team LogoIcon - $oWettbewerb->TeamGesamt[$iTmpZehler]['logo_image']=''; - if (!empty($oWettbewerb->TeamGesamt[$iTmpZehler]["logo"])) - { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneDisplayIMAGE.'&timecheck'.time().'&team_kurzbz='.$oWettbewerb->TeamGesamt[$iTmpZehler]["team_kurzbz"].'&wettbewerb_kurzbz='.$oWettbewerb->TeamGesamt[$iTmpZehler]["wettbewerb_kurzbz"].(strlen($oWettbewerb->TeamGesamt[$iTmpZehler]["logo"])<2000?'&heximg='.$oWettbewerb->TeamGesamt[$iTmpZehler]["logo"]:''); - $oWettbewerb->TeamGesamt[$iTmpZehler]['logo_image']=''.$oWettbewerb->TeamGesamt[$iTmpZehler]['; - } - } - return true; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_TeamAnwenders Tabellen mit den Anwender in den Teamdaten -* -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML Fehlertext oder Leer -* -*/ -function kommune_funk_anwenderteams($oWettbewerb) -{ - // Init - $showHTML=''; - // TeamGesamt Spieler (alle Spieler zum Wettbewerb) - // WettbewerbTeam Classe initialisieren - $Wettbewerb=new komune_wettbewerbteam($oWettbewerb->sqlCONN,'','',''); - $Wettbewerb->setEncodingSQL($oWettbewerb->clientENCODE); - $Wettbewerb->setSchemaSQL($oWettbewerb->sqlSCHEMA); - - $Wettbewerb->InitWettbewerbteam(); - $Wettbewerb->setUid($oWettbewerb->userUID); - $Wettbewerb->setWettbewerb_kurzbz($oWettbewerb->wettbewerb_kurzbz); - - if ($Wettbewerb->loadWettbewerbteam()) - $oWettbewerb->TeamAnwender=$Wettbewerb->getWettbewerbteam(); - else - $oWettbewerb->Error[]=$Wettbewerb->getError(); - - - if (!is_array($oWettbewerb->TeamAnwender) || count($oWettbewerb->TeamAnwender)<1) - return false; - - // TeamMitglieder lesen aus Person-Benutzer - for ($iTmpZehler=0;$iTmpZehlerTeamAnwender);$iTmpZehler++) - { - $oWettbewerb->TeamAnwender[$iTmpZehler]["uid"]=trim($oWettbewerb->TeamAnwender[$iTmpZehler]["uid"]); - $oWettbewerb->TeamAnwender[$iTmpZehler]["team_kurzbz"]=trim($oWettbewerb->TeamAnwender[$iTmpZehler]["team_kurzbz"]); - $oWettbewerb->TeamAnwender[$iTmpZehler]["wettbewerb_kurzbz"]=trim($oWettbewerb->TeamAnwender[$iTmpZehler]["wettbewerb_kurzbz"]); - - $cShowImage=''; - $pers=kommune_funk_benutzerperson($oWettbewerb->TeamAnwender[$iTmpZehler]["uid"],$oWettbewerb); - if (isset($pers->foto_image) && !empty($pers->foto_image)) - $cShowImage=$pers->foto_image; - $oWettbewerb->TeamAnwender[$iTmpZehler]['foto_image']=$cShowImage; - - // Erzeugen HREF zum Team LogoIcon - $oWettbewerb->TeamAnwender[$iTmpZehler]['logo_image']=''; - if (!empty($oWettbewerb->TeamAnwender[$iTmpZehler]["logo"])) - { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneDisplayIMAGE.'&timecheck'.time().'&team_kurzbz='.$oWettbewerb->TeamAnwender[$iTmpZehler]["team_kurzbz"].'&wettbewerb_kurzbz='.$oWettbewerb->TeamAnwender[$iTmpZehler]["wettbewerb_kurzbz"].(strlen($oWettbewerb->TeamAnwender[$iTmpZehler]["logo"])<2000?'&heximg='.$oWettbewerb->TeamAnwender[$iTmpZehler]["logo"]:''); - $oWettbewerb->TeamAnwender[$iTmpZehler]['logo_image']=''.$oWettbewerb->TeamAnwender[$iTmpZehler]['; - } - - } - return true; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_teambenutzer Baut das Array Team auf, -* und makiert das Array TeamGesamt wenn a) der Anwender in diesem Wettbewerb ist -* , und nicht noch Offene Spiele hat (wichtig in der Pyramide) -* -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML Fehlertext oder Leer -* -*/ -function kommune_funk_teambenutzer($oWettbewerb) -{ - // Init - $showHTML=''; - - $oWettbewerb->Team=array(); - $oWettbewerb->TeamBenutzer=array(); - - // Check des Teams nur Notwendig wenn bereits zu diesem Wettbewerb ein Eintrag vorhanden ist - if (!is_array($oWettbewerb->TeamGesamt) ) - return $showHTML; - - for ($zeileIND=0;$zeileINDTeamGesamt);$zeileIND++) - { - $cTeam_kurzbz=trim($oWettbewerb->TeamGesamt[$zeileIND]['team_kurzbz']); - $cWettbewerb_kurzbz=trim($oWettbewerb->TeamGesamt[$zeileIND]['wettbewerb_kurzbz']); - - // Vergleiche Aktuelles Team mit dem Angemeldeten User sein Team - if (isset($oWettbewerb->EigeneWettbewerbe[0]['team_kurzbz']) - && trim($oWettbewerb->EigeneWettbewerbe[0]['team_kurzbz'])==trim($cTeam_kurzbz) ) - $oWettbewerb->TeamGesamt[$zeileIND]['team_aktiv']=true; - else - $oWettbewerb->TeamGesamt[$zeileIND]['team_aktiv']=false; - - // Es gibt noch Offene Bewerbe - Keine Einladungen moeglich - if ( (is_array($oWettbewerb->Forderungen) && count($oWettbewerb->Forderungen)>0) - || (is_array($oWettbewerb->Einladung) && count($oWettbewerb->Einladung)>0)) - $oWettbewerb->TeamGesamt[$zeileIND]['team_aktiv']=false; - - // je Team eine Gruppe der Spieler bilden (Array) - $oWettbewerb->TeamBenutzer[$cTeam_kurzbz][]=$oWettbewerb->TeamGesamt[$zeileIND]; - $oWettbewerb->Team[$cTeam_kurzbz]=$oWettbewerb->TeamGesamt[$zeileIND]; - } - return $showHTML; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_popup_wettbewerbteam Anzeige eines Wettbewerbteam für PopUp Anzeige -* -* @param $arrWettbewerb Array mit Wettbewerbeteam fuer die Anzeige -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML String mit WettbewerbTeamdaten -* -*/ -function kommune_funk_popup_wettbewerbteam($arrWettbewerbTeam,$oWettbewerb,$cSeitenKey="") -{ - $showHTML=''; // Init - if (!is_array($arrWettbewerbTeam) && !empty($arrWettbewerbTeam) ) - { - reset($oWettbewerb->TeamAnwender); -# exit($arrWettbewerbTeam.Test($oWettbewerb->TeamAnwender)); - for ($iTmpZehler=0;$iTmpZehlerTeamAnwender);$iTmpZehler++) - { - if (trim($arrWettbewerbTeam)==trim($oWettbewerb->TeamAnwender[$iTmpZehler]['team_kurzbz']) ) - { - $arrWettbewerbTeam=$oWettbewerb->TeamAnwender[$iTmpZehler]; - break; - } - } - if (!is_array($arrWettbewerbTeam)) // Keine Teamdaten - { - $Wettbewerb=new komune_wettbewerbteam($oWettbewerb->sqlCONN,'',$arrWettbewerbTeam,''); - $Wettbewerb->setEncodingSQL($oWettbewerb->clientENCODE); - $Wettbewerb->setSchemaSQL($oWettbewerb->sqlSCHEMA); - if ($Wettbewerb->loadWettbewerbteam()) - $arrWettbewerbTeam=$Wettbewerb->getWettbewerbteam(); - } + $paramURL=$_SERVER['PHP_SELF'].'?userSel=kommune_hex_img&timecheck'.time().'&person_id='.$pers->person_id.(strlen($pers->foto)<1000?'&heximg='.$pers->foto:''); + $cTmpImgHref=''.$pers->uid.''; } - if (!is_array($arrWettbewerbTeam)) - return $showHTML; - - if (isset($arrWettbewerbTeam['team_kurzbz'])) - $arrTempWettbewerb[0]=$arrWettbewerbTeam; - else - $arrTempWettbewerb=$arrWettbewerbTeam; - - for ($iTmpZehler=0;$iTmpZehlerTeamAnwender)>1?'Team':'Spieler').' Informationen'; - $iPopUp=true; - $showHTML.=kommune_funk_show_wettbewerbteam($arrWettbewerbTeam,$oWettbewerb,$cSeitenKey.$iTmpZehler.$iTmpZehler,$iPopUp); - $showHTML.=''; - } - return $showHTML; + return $cTmpImgHref; } #------------------------------------------------------------------------------------------- /* * -* @kommune_funk_show_wettbewerbteam Anzeige eines Wettbewerbteam für PopUp Anzeige +* @kommune_funk_create_emailaccount erzeugt aus der UID und der Domainkonstante eine eMailadresse * -* @param $arrWettbewerb Array mit Wettbewerbeteam fuer die Anzeige -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches +* @param $uid * -* @return HTML String mit WettbewerbTeamdaten +* @return emailadresse (aus einer uid und der Domainkonstante aus der config) * */ -function kommune_funk_show_wettbewerbteam($arrWettbewerbTeam,$oWettbewerb,$cSeitenKey="",$iPopUp=false) +function kommune_funk_create_emailaccount($user) { - $showHTML=''; // Init - - if (!is_array($arrWettbewerbTeam)) - return $showHTML; - - if (isset($arrWettbewerbTeam['team_kurzbz'])) // Es wurde nur ein Record uebergeben diesen umwandeln in ein RecordArray - $arrTempWettbewerb[0]=$arrWettbewerbTeam; - else - $arrTempWettbewerb=$arrWettbewerbTeam; - - // Wettbewerb zum Team suchen - for ($iTmpZehler=0;$iTmpZehlerWettbewerb); - for ($iTmpZehler2=0;$iTmpZehler2Wettbewerb);$iTmpZehler2++) - { - if (trim($oWettbewerb->Wettbewerb[$iTmpZehler2]["wettbewerb_kurzbz"])==trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]) ) - { - $oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]=trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]); - $arrTempWettbewerb[$iTmpZehler]=array_merge($oWettbewerb->Wettbewerb[$iTmpZehler2],$arrTempWettbewerb[$iTmpZehler]); - break; - } - } - - $arrTempWettbewerb[$iTmpZehler]["team_kurzbz"]=trim($arrTempWettbewerb[$iTmpZehler]["team_kurzbz"]); - if (isset($oWettbewerb->Team[$arrTempWettbewerb[$iTmpZehler]["team_kurzbz"]])) - $arrTempWettbewerb[$iTmpZehler]=array_merge($oWettbewerb->Team[$arrTempWettbewerb[$iTmpZehler]["team_kurzbz"]],$arrTempWettbewerb[$iTmpZehler]); - - $arrTempWettbewerb[$iTmpZehler]["team_kurzbz"]=trim($arrTempWettbewerb[$iTmpZehler]["team_kurzbz"]); - $arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]=trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]); - - $showHTML.=''; - - // PopUp Key Init - $intKey='st_'.$cSeitenKey.$iTmpZehler; - - // Wettbewerb PopUp - $cTmpWettbewerbPopUpID=$intKey.'_Wettbewerb'.$iTmpZehler; - $cTmpWettbewerbPopUp=' onmouseover="show_layer(\''.$cTmpWettbewerbPopUpID.'\');" onmouseout="hide_layer(\''.$cTmpWettbewerbPopUpID.'\');" '; - - // Spieler PopUp - $cTmpUserPopUpID=$intKey.'_sp'.$iTmpZehler; - $cTmpUserPopUp=' onmouseover="show_layer(\''.$cTmpUserPopUpID.'\');" onmouseout="hide_layer(\''.$cTmpUserPopUpID.'\');" '; - - - // Spieler Detailinformation - $pers=kommune_funk_benutzerperson(trim($arrTempWettbewerb[$iTmpZehler]["uid"]),$oWettbewerb); - - $showHTML.=''; - $showHTML.=''; - - // alle Mitglieder - Spieler anzeigen - $showHTML.=''; - - // Spielergebnisse nur wenn es kein PopUp ist - if (!$iPopUp && $iPopUp!=2) - $showHTML.=''; - $showHTML.=''; - $showHTML.='
- - - - - - '; - - $showHTML.=' - '; - $showHTML.=' - - - - - - - - - - - - - - - - - - - - - '; - $showHTML.='

'.$arrTempWettbewerb[$iTmpZehler]["wbtyp_kurzbz"].' '.kommune_funk_create_href(constKommuneAnzeigeWETTBEWERBTEAM,'',array('team_kurzbz'=>$arrTempWettbewerb[$iTmpZehler]["team_kurzbz"],'wettbewerb_kurzbz'=>$arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]),'weiter zu '.$arrTempWettbewerb[$iTmpZehler][ '.$arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"],$arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]).'

'; - // Wettbewerb PopUp ( Im Wettbewerb PopUp wird der Moderator PopUp erstellt ) - $showHTML.=''; - - $showHTML.='
'.(!empty($arrTempWettbewerb[$iTmpZehler]["logo_image"])?$arrTempWettbewerb[$iTmpZehler]["logo_image"]:'').' - -

'; - $showHTML.=kommune_funk_create_href(constKommuneWartungUID,'',array('team_kurzbz'=>$arrTempWettbewerb[$iTmpZehler]["team_kurzbz"],'wettbewerb_kurzbz'=>$arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]),'bearbeiten '.$arrTempWettbewerb[$iTmpZehler][ '.$arrTempWettbewerb[$iTmpZehler]["team_kurzbz"],$arrTempWettbewerb[$iTmpZehler]["team_kurzbz"]); - $showHTML.=' 

Mitglied'.(isset($pers->langname)?$pers->langname:$arrTempWettbewerb[$iTmpZehler]['uid']).'
Rang'.$arrTempWettbewerb[$iTmpZehler]["rang"].'
Punkte'.$arrTempWettbewerb[$iTmpZehler]["punkte"].'
Bezeichnung'.$arrTempWettbewerb[$iTmpZehler]["bezeichnung"].'
Beschreibung'.$arrTempWettbewerb[$iTmpZehler]["beschreibung"].'
-
'; - - if ( ($iPopUp==2) && isset($oWettbewerb->TeamBenutzer[trim($arrTempWettbewerb[$iTmpZehler]["team_kurzbz"])]) - && count($oWettbewerb->TeamBenutzer[trim($arrTempWettbewerb[$iTmpZehler]["team_kurzbz"])])>0 ) - { - $showHTML.=' - - - - - - -

Mitglieder

'; - $intKey='mitgl_'.$cSeitenKey; - $intKey=mb_ereg_replace('\\','_',mb_ereg_replace(' ','_',$intKey)).$iTmpZehler; - $showHTML.=kommune_funk_show_wettbewerbteam_mitglied($oWettbewerb->TeamBenutzer[trim($arrTempWettbewerb[$iTmpZehler]["team_kurzbz"])],$oWettbewerb,$intKey); - - if (count($oWettbewerb->TeamBenutzer[trim($arrTempWettbewerb[$iTmpZehler]["team_kurzbz"])])==1 ) - $showHTML.='
'.$oWettbewerb->TeamBenutzer[trim($arrTempWettbewerb[$iTmpZehler]["team_kurzbz"])][0]['foto_image']; - - $showHTML.='
'; - - } - $showHTML.=' 
'.kommune_funk_show_wettbewerbteam_spiele($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"],'',$oWettbewerb).'
 
'; // Ende kommune_funk_show_wettbewerbteam - } - return $showHTML; + if (empty($user)) + $user=get_uid(); + $user=trim($user); + if (!defined('DOMAIN')) die('Die Konstante DOMAIN wurde nicht gefunden! Bitte config pruefen.' ); + if (!stristr($user,'@')) // Domainkonstante nur dazufuegen wenn noch keine Domain im Namen ist + $user=$user.(stristr(DOMAIN,'@')?DOMAIN:'@'.DOMAIN); // Pruefen ob in der Konstant der Klammeraffe ist + $user=mb_ereg_replace(' ','',$user); + return mb_strtolower($user); } -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_show_wettbewerbteam_mitglied Anzeige der Spieler des Wettbewerbteams für PopUp Anzeige -* -* @param $arrWettbewerb Array mit Wettbewerbeteam fuer die Anzeige -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML String mit WettbewerbTeamdaten -* -*/ -function kommune_funk_show_wettbewerbteam_mitglied($arrWettbewerbTeam,$oWettbewerb,$cSeitenKey="") -{ - $showHTML=''; // Init - - if (!is_array($arrWettbewerbTeam)) - return $showHTML; - - $showHTML.=''; - for ($iTmpZehler=0;$iTmpZehlernachname) && !empty($pers->nachname)) - $cTmpName=$pers->langname; - - // User PopUp - $intKey='benutzer_'.$cSeitenKey.'_'.time().'_kommune_funk_show_wettbewerbteam_mitglied_'.$arrWettbewerbTeam[$iTmpZehler]["uid"]; - $cTmpTeamPopUpID=mb_ereg_replace('\\','_',mb_ereg_replace(' ','_',$intKey)); - $cTmpTeamPopUp=' onmouseover="show_layer(\''.$cTmpTeamPopUpID.'\');" onmouseout="hide_layer(\''.$cTmpTeamPopUpID.'\');" '; - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - } - $showHTML.='
'; - $showHTML.='Person'.$iTmpZehler.''.$cTmpName; - $showHTML.='
'; - $showHTML.=''; - $showHTML.='
'; - return $showHTML; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_show_wettbewerbeinladungen_forderungstage Anzeige eines Wettbewerbteam für PopUp Anzeige -* -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML String mit WettbewerbTeamdaten -* -*/ -function kommune_funk_show_wettbewerbeinladungen_forderungstage($oWettbewerb) -{ - - $showHTML=''; // Init - $showHTML.='
'; - $showHTML.='Terminkontrolle'; - $showHTML.='

Termin - Überwachung

'; - - $WettbewerbTermine= new komune_wettbewerbeinladungen($oWettbewerb->sqlCONN); - $WettbewerbTermine->setEncodingSQL($oWettbewerb->clientENCODE); - $WettbewerbTermine->setSchemaSQL($oWettbewerb->sqlSCHEMA); - - $WettbewerbTermine->initWettbewerbeinladungen(); - $WettbewerbTermine->setTeam_gefordert($oWettbewerb->EigeneWettbewerbe); - $arrTempWettbewerbGefordertTermine=array(); - - if ($WettbewerbTermine->loadWettbewerbeinladungenForderungstage()) - $arrTempWettbewerbGefordertTermine=$WettbewerbTermine->getWettbewerbeinladung(); - else - $oWettbewerb->Error[]=$WettbewerbTermine->getError(); - - $WettbewerbTermine->initWettbewerbeinladungen(); - $WettbewerbTermine->setTeam_forderer($oWettbewerb->EigeneWettbewerbe); - $arrTempWettbewerbFordertTermine=array(); - if ($WettbewerbTermine->loadWettbewerbeinladungenForderungstage()) - $arrTempWettbewerbFordertTermine=$WettbewerbTermine->getWettbewerbeinladung(); - else - $oWettbewerb->Error[]=$WettbewerbTermine->getError(); - - - if (isset($WettbewerbTermine)) unset($WettbewerbTermine); - - // Forderungen und Geforderte - Daten zusammenfuehren - if (!is_array($arrTempWettbewerbFordertTermine)) $arrTempWettbewerbFordertTermine=array(); - if (!is_array($arrTempWettbewerbGefordertTermine)) $arrTempWettbewerbGefordertTermine=array(); - $arrTempWettbewerbTermine=array_merge($arrTempWettbewerbFordertTermine,$arrTempWettbewerbGefordertTermine); - - $showHTML.=''; - $showHTML.=' - - - - - - - - '; - - reset($arrTempWettbewerbTermine); - for ($iTmpZehler=0;$iTmpZehler'.$arrTempWettbewerbTermine[$iTmpZehler]["wbtyp_kurzbz"].'  - - - - - '; - - $cTmpDatumSuche='
Wettbewerb Forderer Gefordert Tage Datum / Zeit Status Prüfung am Tagesdatum '.date("d.m.Y", mktime(0,0,0,date("m"),date("d"),date("y"))).'
'.kommune_funk_create_href(constKommuneAnzeigeWETTBEWERBTEAM,'',array('wettbewerb_kurzbz'=>trim($arrTempWettbewerbTermine[$iTmpZehler]["wettbewerb_kurzbz"])),'open_termin_'.$iTmpZehler.' '.trim($arrTempWettbewerbTermine[$iTmpZehler]["wettbewerb_kurzbz"]),trim($arrTempWettbewerbTermine[$iTmpZehler]["wettbewerb_kurzbz"])).' '.$arrTempWettbewerbTermine[$iTmpZehler]["team_forderer"].' '.$arrTempWettbewerbTermine[$iTmpZehler]["team_gefordert"].' '.$arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"].' 
'; - - if (!empty($arrTempWettbewerbTermine[$iTmpZehler]["gefordertamumdatum"])) - $cTmpDatumSuche.=''; - - if (!empty($arrTempWettbewerbTermine[$iTmpZehler]["bestaetigtamum"])) - { - $cTmpDatumSuche.=''; - // Das MatchbestaetigtDatum gilt erst nach der Bestaetigung - - if (!empty($arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit"])) - $cTmpDatumSuche.=''; - - if (!empty($arrTempWettbewerbTermine[$iTmpZehler]["matchbestaetigtamum"]) - && !empty($arrTempWettbewerbTermine[$iTmpZehler]["ergebniss"])) - $cTmpDatumSuche=''; - } - elseif (!empty($arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit_tag_diff"])) - { - if (!empty($arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit"])) - $cTmpDatumSuche.=''; - - } - $cTmpDatumSuche.='
Forderungsbeginn'.$arrTempWettbewerbTermine[$iTmpZehler]["gefordertamumdatum"].'
Forderungbestätigt'.$arrTempWettbewerbTermine[$iTmpZehler]["bestaetigtdatum"].'
Spieldatum'.$arrTempWettbewerbTermine[$iTmpZehler]["matchdatum"].'
Spielbestätigt'.$arrTempWettbewerbTermine[$iTmpZehler]["matchbestaetigtdatum"].'
Spieldatum'.$arrTempWettbewerbTermine[$iTmpZehler]["matchdatum"].'
'; - - $showHTML.=''.$cTmpDatumSuche.' '; - -#exit($oWettbewerb->Einladung[0]['gefordertamum']." --- ".strtotime($oWettbewerb->Einladung[0]['gefordertamum']) ." #### ".time()); - - $bTmpFehlerNummerGefunden=false; // Init Check Eingabe nicht vollstaendig - // Check die Bestaetigung des Forderungsdatum - // Fehler : wenn keine Bestaetigung der Forderung [bestaetigtdatum] eingegeben wurde - // und das Tagesdatum kleiner Forderungsdatum [gefordertamum] plus [forderungstage] - // - // ,extract('day' from (age(".$cSchemaSQL."tbl_match.gefordertamum))) as gefordertamum_diff - // ,extract('day' from (age(".$cSchemaSQL."tbl_match.bestaetigtamum,tbl_match.gefordertamum))) as bestaetigtamum_diff - // - if (empty($arrTempWettbewerbTermine[$iTmpZehler]["bestaetigtdatum"]) - && !empty($arrTempWettbewerbTermine[$iTmpZehler]["gefordertamum_diff"]) - && $arrTempWettbewerbTermine[$iTmpZehler]["gefordertamum_diff"]>$arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"] ) - $bTmpFehlerNummerGefunden=1; - -# ,extract('day' from (age(".$cSchemaSQL."tbl_match.matchdatumzeit,tbl_match.bestaetigtamum))) as matchdatumzeit_diff "; - - // Check Eintrag des Ergebnis - // Fehler : wenn kein Team-Sieger eingetragen wurde - // und das Matchdatum [matchdatumzeit] plus [forderungstage] kleiner Tagesdatum ist - if (empty($arrTempWettbewerbTermine[$iTmpZehler]["team_sieger"]) - && (!empty($arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit_tag_diff"]) - && $arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit_tag_diff"]>$arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"]) ) - $bTmpFehlerNummerGefunden=2; - -# ,extract('day' from (age(".$cSchemaSQL."tbl_match.matchbestaetigtdatum,tbl_match.matchdatumzeit))) as matchbestaetigtamum_diff "; - - // Check Bestaetigen MatchErgebnis - // Fehler : wenn der Team-Sieger nach dem eingetragen nicht bestaetigt wurde - // und das Tagesdatum kleiner Matchdatum [matchdatumzeit] plus [forderungstage] - if (empty($arrTempWettbewerbTermine[$iTmpZehler]["matchbestaetigtdatum"]) - && !empty($arrTempWettbewerbTermine[$iTmpZehler]["team_sieger"]) - && (!empty($arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit_diff"]) - || $arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit_diff"]>$arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"]) ) - $bTmpFehlerNummerGefunden=3; - - - $showHTML.=''; - if ($bTmpFehlerNummerGefunden) - $showHTML.='red_point.gif'; - else - $showHTML.='green_point.gif'; - $showHTML.=''; - - $showHTML.=''; - if ($bTmpFehlerNummerGefunden==1) - { - $cTmpDelDate=date("d.m.Y", mktime(0,0,0,date("m"),date("d") + ($arrTempWettbewerbTermine[$iTmpZehler]["gefordertamum_diff"] -( $arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"] * 2 )) ,date("y"))); - - $showHTML.='Achtung! Die Forderung wurde noch nicht bestätigt von '.$arrTempWettbewerbTermine[$iTmpZehler]["team_gefordert"] .' -
innerhalb von '.$arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"].' Tag(en). -
Die Bestätigung sollte vor '. ($arrTempWettbewerbTermine[$iTmpZehler]["gefordertamum_diff"] - $arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"]).' Tag(en) erfolgen. - '; -#exit($cTmpDelDate ." ". $arrTempWettbewerbTermine[$iTmpZehler]["gefordertamum"]." ".$arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"]." ".$arrTempWettbewerbTermine[$iTmpZehler]["gefordertamum_diff"]); - - if ( ($arrTempWettbewerbTermine[$iTmpZehler]["gefordertamum_diff"] - $arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"])+1 ) - { - $WettbewerbTermine= new komune_wettbewerbeinladungen($oWettbewerb->sqlCONN); - $WettbewerbTermine->setEncodingSQL($oWettbewerb->clientENCODE); - $WettbewerbTermine->setSchemaSQL($oWettbewerb->sqlSCHEMA); - $WettbewerbTermine->initWettbewerbeinladungen(); - $WettbewerbTermine->setMatch_id(trim($arrTempWettbewerbTermine[$iTmpZehler]["match_id"])); - $arrTempWettbewerbGefordertTermine=array(); - - if ($WettbewerbTermine->unloadWettbewerbeinladungen()) - { - $showHTML.='
Die Forderung wurde automatisch gelöscht Ablaufdatum war der '.$cTmpDelDate; - - $cTmpName=trim($arrTempWettbewerbTermine[$iTmpZehler]['uid']); - $pers=kommune_funk_benutzerperson($cTmpName,$oWettbewerb); - if (isset($pers->langname)) - $cTmpName=$pers->langname; - - - $cTmpName1=trim($arrTempWettbewerbTermine[$iTmpZehler]['team_gefordert']); - $pers=kommune_funk_benutzerperson($cTmpName2,$oWettbewerb); - if (isset($pers->langname)) - $cTmpName1=$pers->langname; - - $cTmpName2=trim($arrTempWettbewerbTermine[$iTmpZehler]['team_forderer']); - $pers=kommune_funk_benutzerperson($cTmpName2,$oWettbewerb); - if (isset($pers->langname)) - $cTmpName2=$pers->langname; - - $betreff='Die Forderung im Wettbewerb '.$arrTempWettbewerbTermine[$iTmpZehler]["wettbewerb_kurzbz"] ." wurde entfernt"; - $text="Die Forderung wurde nicht in der vorgegebenen Zeit angenommen (".$arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"] .") sie wird entfernt.\n\n"; - $text.="Die Forderung von ".$cTmpName2 ." ( Kurzzeichen ".$arrTempWettbewerbTermine[$iTmpZehler]['team_forderer']." )\n\n"; - $text.="an Geforderten von ".$cTmpName1 ." ( Kurzzeichen ".$arrTempWettbewerbTermine[$iTmpZehler]['team_gefordert']." )\n\n"; - $text.=" kann noch mal beantragt werden."."\n\n"; - $text.="Ihr Moderator ".$cTmpName."\n\n"; - // Einladung an Spieler/Team Information - $oWettbewerb->Error[]=kommune_funk_sendmail($arrTempWettbewerbTermine[$iTmpZehler]['team_forderer'],$betreff,$text,$arrTempWettbewerbTermine[$iTmpZehler]['uid'],$oWettbewerb); - $oWettbewerb->Error[]=kommune_funk_sendmail($arrTempWettbewerbTermine[$iTmpZehler]['team_gefordert'],$betreff,$text,$arrTempWettbewerbTermine[$iTmpZehler]['uid'],$oWettbewerb); - $oWettbewerb->Error[]=kommune_funk_sendmail($oWettbewerb->userUID,$betreff,$text,$arrTempWettbewerbTermine[$iTmpZehler]['uid'],$oWettbewerb); - - } - else - $oWettbewerb->Error[]=$WettbewerbTermine->getError(); - #$showHTML.=$WettbewerbTermine->getStringSQL(); - if (isset($WettbewerbTermine)) unset($WettbewerbTermine); - - } - else - $showHTML.='
Die Forderung wird automatisch gelöscht in '. ($arrTempWettbewerbTermine[$iTmpZehler]["gefordertamum_diff"] - $arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"])+2 ." Tag(en)"; - } - if ($bTmpFehlerNummerGefunden==2) // matchbestaetigtamum mit matchdatumzeit - { - $showHTML.='Achtung! Das Spielergebnis wurde noch nicht eingetragen von '.$arrTempWettbewerbTermine[$iTmpZehler]["team_forderer"] .'. -
Das Ergebnis zum Spieldatum '.$arrTempWettbewerbTermine[$iTmpZehler]["matchdatum"].' sollte spätestens vor '. ($arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit_tag_diff"] - $arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"]).' Tag(en) erfolgen.'; - $showHTML.='
Das Ergebnis '.$arrTempWettbewerbTermine[$iTmpZehler]["ergebniss"].' bitte erfassen! '; - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneEinladenTEAM.'&match_id='.trim($arrTempWettbewerbTermine[$iTmpZehler]["match_id"]).'&wbtyp_kurzbz=&wettbewerb_kurzbz='.trim($arrTempWettbewerbTermine[$iTmpZehler]["wettbewerb_kurzbz"]).'&team_forderer='.trim($arrTempWettbewerbTermine[$iTmpZehler]["team_forderer"]).'&team_gefordert='.trim($arrTempWettbewerbTermine[$iTmpZehler]["team_gefordert"]); - - $showHTML.=' weiter zum Ergebnis erfassen '; - } - - if ($bTmpFehlerNummerGefunden==3) // matchbestaetigtamum mit matchdatumzeit - { - $showHTML.='Achtung! Das Spielergebnis wurde noch nicht bestätigt von '.$arrTempWettbewerbTermine[$iTmpZehler]["team_gefordert"] .'. -
Die Bestätigung für das Spiel am '.$arrTempWettbewerbTermine[$iTmpZehler]["matchdatum"].' sollte spätestens vor '. ($arrTempWettbewerbTermine[$iTmpZehler]["matchdatumzeit_tag_diff"] - $arrTempWettbewerbTermine[$iTmpZehler]["forderungstage"]).' Tag(en) erfolgen.'; - $showHTML.='
Das Ergebnis '.$arrTempWettbewerbTermine[$iTmpZehler]["ergebniss"].' bitte bestätigen! '; - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneEinladenTEAM.'&match_id='.trim($arrTempWettbewerbTermine[$iTmpZehler]["match_id"]).'&wbtyp_kurzbz=&wettbewerb_kurzbz='.trim($arrTempWettbewerbTermine[$iTmpZehler]["wettbewerb_kurzbz"]).'&team_forderer='.trim($arrTempWettbewerbTermine[$iTmpZehler]["team_forderer"]).'&team_gefordert='.trim($arrTempWettbewerbTermine[$iTmpZehler]["team_gefordert"]); - - $showHTML.='
weiter zur Bestätigung'; - } - - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''; - // Team Forderer / Spieler PopUp ( Im Teampopup wird auch das Wettbewerbspopup erstellt ) - $showHTML.=''; - // Team Gefordert / Spieler PopUp ( Im Teampopup wird auch das Wettbewerbspopup erstellt ) - $showHTML.=''; - - // Wettbewerb PopUp - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - -# $showHTML.="
".trim($arrTempWettbewerbTermine[$iTmpZehler]["team_gefordert"]).Test($oWettbewerb->TeamBenutzer[trim($arrTempWettbewerbTermine[$iTmpZehler]["team_gefordert"])][0]). "
"; - - } - $showHTML.=''; -# $showHTML.=Test($arrTempWettbewerbTermine).Test($oWettbewerb); - $showHTML.='
'; - return $showHTML; - return $showHTML; -} - - - -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_team_wettbewerbe Tabellen mit den eigenen Teamdaten zu keinem,einem oder mehreren Wettbewerben -* -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML Fehlertext oder Leer -* -*/ -function kommune_funk_team_wettbewerbe($oWettbewerb) -{ - // Init - $showHTML=''; -// --- Wettbewerbe (EINLADUNGEN) - if (!is_array($oWettbewerb->EigeneWettbewerbe) - || !isset($oWettbewerb->EigeneWettbewerbe[0]) ) - return $showHTML; - - $WettbewerbEinladung= new komune_wettbewerbeinladungen($oWettbewerb->sqlCONN); - $WettbewerbEinladung->setEncodingSQL($oWettbewerb->clientENCODE); - $WettbewerbEinladung->setSchemaSQL($oWettbewerb->sqlSCHEMA); - - // Einladungen - Aufforderungen - $WettbewerbEinladung->InitWettbewerbeinladungen(); - $WettbewerbEinladung->setSwitchGewinner('0'); - $WettbewerbEinladung->setTeam_forderer($oWettbewerb->EigeneWettbewerbe); - if ($WettbewerbEinladung->loadWettbewerbeinladungen()) - $oWettbewerb->Einladung=$WettbewerbEinladung->getWettbewerbeinladung(); - else - $showHTML.='
'.$WettbewerbEinladung->getError(); - - // Forderungen - $WettbewerbEinladung->InitWettbewerbeinladungen(); - $WettbewerbEinladung->setTeam_gefordert($oWettbewerb->EigeneWettbewerbe); - $WettbewerbEinladung->setSwitchGewinner('0'); - if ($WettbewerbEinladung->loadWettbewerbeinladungen()) - $oWettbewerb->Forderungen=$WettbewerbEinladung->getWettbewerbeinladung(); - else - $showHTML.='
'.$WettbewerbEinladung->getError(); - - // Spiele - Einladungen - $WettbewerbEinladung->InitWettbewerbeinladungen(); - $WettbewerbEinladung->setTeam_gefordert($oWettbewerb->EigeneWettbewerbe); - $WettbewerbEinladung->setSwitchGewinner('1'); - if ($WettbewerbEinladung->loadWettbewerbeinladungen()) - $oWettbewerb->Spiele=$WettbewerbEinladung->getWettbewerbeinladung(); - else - $showHTML.='
'.$WettbewerbEinladung->getError(); - - if (isset($WettbewerbEinladung)) - unset($WettbewerbEinladung); - - // Personen - zu den Aufforderungen oder den Forderungen suchen - - // TeamMitglieder lesen aus Person-Benutzer - - if (isset($oWettbewerb->Einladung[0]["gefordertvon"])) // Forderugen - { - for ($iTmpZehler=0;$iTmpZehlerEinladung);$iTmpZehler++) - { - $pers=kommune_funk_benutzerperson($oWettbewerb->Einladung[$iTmpZehler]["gefordertvon"],$oWettbewerb); - if (isset($pers->nachname)) $oWettbewerb->PersonenBenutzer[$oWettbewerb->Einladung[$iTmpZehler]["gefordertvon"]]=$pers; - $pers=kommune_funk_benutzerperson($oWettbewerb->Einladung[$iTmpZehler]["bestaetigtvon"],$oWettbewerb); - if (isset($pers->nachname)) $oWettbewerb->PersonenBenutzer[$oWettbewerb->Einladung[$iTmpZehler]["bestaetigtvon"]]=$pers; - } - } - - if (isset($oWettbewerb->Forderungen[0]["gefordertvon"])) // Aufforderungen - { - for ($iTmpZehler=0;$iTmpZehlerForderungen);$iTmpZehler++) - { - $pers=kommune_funk_benutzerperson($oWettbewerb->Forderungen[$iTmpZehler]["gefordertvon"],$oWettbewerb); - if (isset($pers->nachname)) $oWettbewerb->PersonenBenutzer[$oWettbewerb->Forderungen[$iTmpZehler]["gefordertvon"]]=$pers; - $pers=kommune_funk_benutzerperson($oWettbewerb->Forderungen[$iTmpZehler]["bestaetigtvon"],$oWettbewerb); - if (isset($pers->nachname)) $oWettbewerb->PersonenBenutzer[$oWettbewerb->Forderungen[$iTmpZehler]["bestaetigtvon"]]=$pers; - } - } - - if (isset($oWettbewerb->Spiele[0]["gefordertvon"])) // Aufforderungen - { - for ($iTmpZehler=0;$iTmpZehlerSpiele);$iTmpZehler++) - { - $pers=kommune_funk_benutzerperson($oWettbewerb->Spiele[$iTmpZehler]["gefordertvon"],$oWettbewerb); - if (isset($pers->nachname)) $oWettbewerb->PersonenBenutzer[$oWettbewerb->Spiele[$iTmpZehler]["gefordertvon"]]=$pers; - $pers=kommune_funk_benutzerperson($oWettbewerb->Spiele[$iTmpZehler]["bestaetigtvon"],$oWettbewerb); - if (isset($pers->nachname)) $oWettbewerb->PersonenBenutzer[$oWettbewerb->Spiele[$iTmpZehler]["bestaetigtvon"]]=$pers; - } - } - return $showHTML; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_wartung_spielergebnis Anzeige, und moeglich Bestaetigungsaufrufe -* -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* @param $switchForderungen Schalter welche Anzeigenart gewaehlt wurde ( Forderer, Geforderter) -* -* @return HTML String der Ergebnisse der Wettbewerbe -* -*/ -function kommune_funk_wartung_spielergebnis($oWettbewerb,$switchForderungen) -{ - $showHTML=''; // Init - $arrTempWettbewerb=array(); - switch (trim($switchForderungen)) - { - case 0: - $arrTempWettbewerb=$oWettbewerb->Einladung; - break; - case 1: - $arrTempWettbewerb=$oWettbewerb->Forderungen; - break; - default: // Default Uebersicht der Wettbewerbe - return "Kein Verarbeitungsswitch : $switchForderungen"; - break; - } - - if (!is_array($arrTempWettbewerb) || count($arrTempWettbewerb)<1) // DB eof - return ""; - reset($arrTempWettbewerb); - - for ($iTmpZehler=0;$iTmpZehlerWettbewerb); - for ($iTmpZehler2=0;$iTmpZehler2Wettbewerb);$iTmpZehler2++) - { - if (trim($oWettbewerb->Wettbewerb[$iTmpZehler2]["wettbewerb_kurzbz"])==trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]) ) - { - $arrTempWettbewerb[$iTmpZehler]=array_merge($oWettbewerb->Wettbewerb[$iTmpZehler2],$arrTempWettbewerb[$iTmpZehler]); - break; - } - } -#exit(Test($arrTempWettbewerb[$iTmpZehler])) ; - - $showHTML.=''.$arrTempWettbewerb[$iTmpZehler]["wbtyp_kurzbz"].', '.$arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"].''; - $showHTML.=''; - - $showHTML.=''; - - // Auffoderungsinfo - $cShowImage=''; - if (isset($oWettbewerb->PersonenBenutzer[$cTmpBestaetigtvon])) - { - $pers=$oWettbewerb->PersonenBenutzer[$cTmpBestaetigtvon]; - $cTmpBestaetigtvon=(!empty($pers->anrede)?$pers->anrede.' ':'').(!empty($pers->vorname)?$pers->vorname.' ':'').(!empty($pers->nachname)?$pers->nachname.' ':''); - if (!empty($pers->foto_image)) - $cShowImage=$pers->foto_image; - } - - - $showHTML.=''; - $showHTML.=''; - - - // Gefordert VON - $cShowImage=''; - if (isset($oWettbewerb->PersonenBenutzer[$cTmpGefordertvon])) - { - $pers=$oWettbewerb->PersonenBenutzer[$cTmpGefordertvon]; - $cTmpGefordertvon=(!empty($pers->anrede)?$pers->anrede.' ':'').(!empty($pers->vorname)?$pers->vorname.' ':'').(!empty($pers->nachname)?$pers->nachname.' ':''); - $cShowImage=''; - if (!empty($pers->foto_image)) - $cShowImage=$pers->foto_image; - } - $showHTML.=''; - $showHTML.=''; - $showHTML.='
- '; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - if (!empty($arrTempWettbewerb[$iTmpZehler]["ergebniss"])) - { - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - } - $showHTML.='

Sieger :

'.(empty($arrTempWettbewerb[$iTmpZehler]["team_sieger"])?' offen ':' Spieler / Team '.$arrTempWettbewerb[$iTmpZehler]["team_sieger"].'' ).'

Austragungsort :

'.$arrTempWettbewerb[$iTmpZehler]["matchort"].'

am :

'.$arrTempWettbewerb[$iTmpZehler]["matchdatum"].' '.$arrTempWettbewerb[$iTmpZehler]["matchzeit"] .'

Ergebnis :

'.$arrTempWettbewerb[$iTmpZehler]["ergebniss"].' '.(empty($arrTempWettbewerb[$iTmpZehler]["matchbestaetigtvon"])?' keine Bestätigung durch '.$arrTempWettbewerb[$iTmpZehler]["team_gefordert"].'':' Bestätigt durch '.$arrTempWettbewerb[$iTmpZehler]["matchbestaetigtvon"].' am '.$arrTempWettbewerb[$iTmpZehler]["matchbestaetigtdatum"].', '.$arrTempWettbewerb[$iTmpZehler]["matchbestaetigtzeit"]).'
- '; - $showHTML.=' - - - - - - - - - - - - - - - '; - $showHTML.='
Gefordert Team / Spieler
Team : '.$arrTempWettbewerb[$iTmpZehler]["team_gefordert"].''.$cShowImage.'
bestätigt durch : '.(!empty($cTmpBestaetigtvon)?$cTmpBestaetigtvon:'-').'
am : '.(!empty($arrTempWettbewerb[$iTmpZehler]["bestaetigtdatum"])?$arrTempWettbewerb[$iTmpZehler]["bestaetigtdatum"].', um '.$arrTempWettbewerb[$iTmpZehler]["bestaetigtzeit"]:'-').'
- '; - if ( empty($arrTempWettbewerb[$iTmpZehler]["bestaetigtvon"]) && $switchForderungen==1) - { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneEinladenTEAM.'&match_id='.trim($iTmpMatch_id).'&wbtyp_kurzbz=&wettbewerb_kurzbz='.trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]).'&team_forderer='.trim($arrTempWettbewerb[$iTmpZehler]["team_forderer"]).'&team_gefordert='.trim($arrTempWettbewerb[$iTmpZehler]["team_gefordert"]); - $showHTML.=' -
- -
- '; - } - if (empty($arrTempWettbewerb[$iTmpZehler]["matchbestaetigtvon"]) - && !empty($arrTempWettbewerb[$iTmpZehler]["ergebniss"]) && $switchForderungen==1) - { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneEinladenTEAM.'&match_id='.trim($iTmpMatch_id).'&wbtyp_kurzbz=&wettbewerb_kurzbz='.trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]).'&team_forderer='.trim($arrTempWettbewerb[$iTmpZehler]["team_forderer"]).'&team_gefordert='.trim($arrTempWettbewerb[$iTmpZehler]["team_gefordert"]); - $showHTML.=' -
- -
- '; - } - $showHTML.=' 
- '; - $showHTML.=' - - - - - - - - - - - - - - - - - '; - - - $showHTML.='
Forderer Team / Spieler
Team : '.$arrTempWettbewerb[$iTmpZehler]["team_forderer"].''.$cShowImage.'
gefordert von : '.$cTmpGefordertvon.'
am : '.$arrTempWettbewerb[$iTmpZehler]["gefordertamumdatum"].', um '.$arrTempWettbewerb[$iTmpZehler]["gefordertamumzeit"].'
- '; - if (empty($cTmpBestaetigtvon) && $switchForderungen==0) - { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneEinladenTEAM.'&match_id='.trim($iTmpMatch_id).'&wbtyp_kurzbz=&wettbewerb_kurzbz='.trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]).'&team_forderer='.trim($arrTempWettbewerb[$iTmpZehler]["team_forderer"]).'&team_gefordert='.trim($arrTempWettbewerb[$iTmpZehler]["team_gefordert"]); - $showHTML.=' -
- -
- '; - } - - if (!empty($cTmpBestaetigtvon) && $switchForderungen==0 && empty($arrTempWettbewerb[$iTmpZehler]["ergebniss"]) ) - { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneEinladenTEAM.'&match_id='.trim($iTmpMatch_id).'&wbtyp_kurzbz=&wettbewerb_kurzbz='.trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]).'&team_forderer='.trim($arrTempWettbewerb[$iTmpZehler]["team_forderer"]).'&team_gefordert='.trim($arrTempWettbewerb[$iTmpZehler]["team_gefordert"]); - $showHTML.=' -
- -
- '; - } - if (empty($arrTempWettbewerb[$iTmpZehler]["matchbestaetigtvon"]) - && !empty($arrTempWettbewerb[$iTmpZehler]["ergebniss"]) && $switchForderungen==0) - { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneEinladenTEAM.'&match_id='.trim($iTmpMatch_id).'&wbtyp_kurzbz=&wettbewerb_kurzbz='.trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]).'&team_forderer='.trim($arrTempWettbewerb[$iTmpZehler]["team_forderer"]).'&team_gefordert='.trim($arrTempWettbewerb[$iTmpZehler]["team_gefordert"]); - $showHTML.=' -
- -
- '; - } - $showHTML.=' 
'; - $showHTML.=''; - } - return $showHTML; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_show_wettbewerbteam_spiele Anzeige der Spiele des Wettbewerbteams Listenform -* -* @param $cWettbewerb Wettbewerb_kurzbezeichnung, oder kpl. Array des Wettbewerbes -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML String mit Wettbewerb Teamspiele -* -*/ -function kommune_funk_show_wettbewerbteam_spiele($cWettbewerb_kurzbz='',$iMatch_id='',$oWettbewerb) -{ - - - - $showHTML=''; - if (!is_array($oWettbewerb->Spiele) || count($oWettbewerb->Spiele)<1) - return $showHTML; - - $showHTML.=''; - reset($oWettbewerb->Spiele); - -# $showHTML.=Test($oWettbewerb->Spiele); - - for ($iTmpZehler=0;$iTmpZehlerSpiele);$iTmpZehler++) - { - if (!empty($cWettbewerb_kurzbz) && trim($cWettbewerb_kurzbz)!=trim($oWettbewerb->Spiele[$iTmpZehler]["wettbewerb_kurzbz"])) - continue; - if (!empty($iMatch_id) && trim($iMatch_id)!=trim($oWettbewerb->Spiele[$iTmpZehler]["match_id"])) - continue; - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; -# $showHTML.=''; - $showHTML.='Spiele[$iTmpZehler]["team_sieger"])==trim($oWettbewerb->Spiele[$iTmpZehler]["team_forderer"])? ' style="background-color:#DDDDDD;" ':' style="background-color:#FFFFB0;" ').'>'; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - } - $showHTML.=''; - $showHTML.='
 fordert  '.$oWettbewerb->Spiele[$iTmpZehler]["team_forderer"].'  gefordert  '.$oWettbewerb->Spiele[$iTmpZehler]["team_gefordert"].' Spiele[$iTmpZehler]["team_sieger"])? ' style="background-color:#B1D8D8;" ':(trim($oWettbewerb->Spiele[$iTmpZehler]["team_sieger"])==trim($oWettbewerb->Spiele[$iTmpZehler]["team_forderer"])? ' style="background-color:#DDDDDD;" ':' style="background-color:#FFFFB0;" ')).'> '.$oWettbewerb->Spiele[$iTmpZehler]["matchdatum"].' 

Sieger Sieger  '.$oWettbewerb->Spiele[$iTmpZehler]["team_sieger"].' Ergebnis '.$oWettbewerb->Spiele[$iTmpZehler]["ergebniss"].' Spiele[$iTmpZehler]["team_sieger"])? ' style="background-color:#B1D8D8;" ':(trim($oWettbewerb->Spiele[$iTmpZehler]["team_sieger"])==trim($oWettbewerb->Spiele[$iTmpZehler]["team_forderer"])? ' style="background-color:#DDDDDD;" ':' style="background-color:#FFFFB0;" ')).'> '.$oWettbewerb->Spiele[$iTmpZehler]["matchbestaetigtdatum"].' 
 
'; - return $showHTML; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_show_spielergebnis Statusanzeige der Match - Spiele , Default bereits gespielte , als Option Forderungen bzw. Einladungen -* -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* -* @return HTML Liste der Gesamten Ergebnisse der Wettbewerbe -* -*/ -function kommune_funk_show_spielergebnis($oWettbewerb,$showStatus=false) -{ - $showHTML=''; // Init - - if (isset($oWettbewerb->Spiele)) - $arrTempWettbewerb=$oWettbewerb->Spiele; - else - $arrTempWettbewerb=array(); - - $bTmpSwitchShow=0; - if ($showStatus) // Anzeigen Status von Offenen Matchdaten - { - if (isset($oWettbewerb->Forderungen) && (!is_array($arrTempWettbewerb) || count($arrTempWettbewerb)<1)) // DB eof - { - $arrTempWettbewerb=$oWettbewerb->Forderungen; - $bTmpSwitchShow=1; - } - elseif (isset($oWettbewerb->Einladung) && (!is_array($arrTempWettbewerb) || count($arrTempWettbewerb)<1)) // DB eof - { - $arrTempWettbewerb=$oWettbewerb->Einladung; - $bTmpSwitchShow=2; - } - else - return "Anzeigeart '$showStatus' wird nicht verarbeitet."; - } -#exit(Test($arrTempWettbewerb)); - - if (!is_array($arrTempWettbewerb) || count($arrTempWettbewerb)<1) // DB eof - return "keine Informationen zum Anzeigen vorhanden."; - - reset($arrTempWettbewerb); - for ($iTmpZehler=0;$iTmpZehleropen'.$iTmpZehler.'ausblenden '; - $showHTML.='close'.$iTmpZehler.'anzeigen '; - $showHTML.='Wettbewerb '.kommune_funk_create_href(constKommuneAnzeigeWETTBEWERBTEAM,'',array('team_kurzbz'=>trim($oWettbewerb->team_kurzbz),'wettbewerb_kurzbz'=>trim($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"])),$arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]).' '; - $showHTML.=($bTmpSwitchShow==1?' Forderung ':($bTmpSwitchShow==2?' Einladung ':' Spiel ')). ' '.$arrTempWettbewerb[$iTmpZehler]["matchdatum"] .''; - - $showHTML.=''; - $showHTML.=''; - $showHTML.='
'.kommune_funk_show_wettbewerbteam_spiele($arrTempWettbewerb[$iTmpZehler]["wettbewerb_kurzbz"],$arrTempWettbewerb[$iTmpZehler]["match_id"],$oWettbewerb).'
'; - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''.(!empty($arrTempWettbewerb[$iTmpZehler]["team_sieger"]) && $arrTempWettbewerb[$iTmpZehler]["team_sieger"]==$arrTempWettbewerb[$iTmpZehler]["team_forderer"]?''.$arrTempWettbewerb[$iTmpZehler]["team_forderer"].'':$arrTempWettbewerb[$iTmpZehler]["team_forderer"]).''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.='
Forderung von : '.$arrTempWettbewerb[$iTmpZehler]["gefordertvon"].'am : '.$arrTempWettbewerb[$iTmpZehler]["gefordertamumdatum"].' '.$arrTempWettbewerb[$iTmpZehler]["gefordertamumzeit"].'
Ort : '.$arrTempWettbewerb[$iTmpZehler]["matchort"].' am : '.$arrTempWettbewerb[$iTmpZehler]["matchdatum"].' '.$arrTempWettbewerb[$iTmpZehler]["matchzeit"].'
Bestätigt Forderung von : '.(empty($arrTempWettbewerb[$iTmpZehler]["bestaetigtvon"])?'offen':$arrTempWettbewerb[$iTmpZehler]["bestaetigtvon"]).'am : '.$arrTempWettbewerb[$iTmpZehler]["bestaetigtdatum"].' '.$arrTempWettbewerb[$iTmpZehler]["bestaetigtzeit"].'
Sieger : '.(empty($arrTempWettbewerb[$iTmpZehler]["team_sieger"])?'offen':$arrTempWettbewerb[$iTmpZehler]["team_sieger"]).'Ergebnis : '.$arrTempWettbewerb[$iTmpZehler]["ergebniss"].'
Bestätigt Sieger von : '.(empty($arrTempWettbewerb[$iTmpZehler]["matchbestaetigtvon"])?'offen':$arrTempWettbewerb[$iTmpZehler]["matchbestaetigtvon"]).'am : '.$arrTempWettbewerb[$iTmpZehler]["matchbestaetigtdatum"].' '.$arrTempWettbewerb[$iTmpZehler]["matchbestaetigtzeit"].'
Sieger ':' style="background-color:#FFFFFF;text-align:right;">Verlierer ').' : Sieger ':' style="background-color:#FFFFFF;text-align:right;">Verlierer ').' : '.(!empty($arrTempWettbewerb[$iTmpZehler]["team_sieger"]) && $arrTempWettbewerb[$iTmpZehler]["team_sieger"]==$arrTempWettbewerb[$iTmpZehler]["team_gefordert"]?''.$arrTempWettbewerb[$iTmpZehler]["team_gefordert"].'':$arrTempWettbewerb[$iTmpZehler]["team_gefordert"]).'
'; - $showHTML.=''; - } - return $showHTML; -} - #------------------------------------------------------------------------------------------- /* * * @kommune_funk_popup_benutzer Aufbau einer bisher gespielten Wettbewerbe * -* @param $cUid UserUID Anwenderkurzzeichen +* @param $user UserUID Anwenderkurzzeichen * @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches * * @return HTML String Benutzeruebersicht * */ -function kommune_funk_popup_benutzer($cUid,$oWettbewerb) +function kommune_funk_popup_benutzer($user,$oWettbewerb) { $showHTML=''; // Init // Plausib - if (is_array($cUid) && isset($cUid['uid'])) - $cUid=$cUid['uid']; - elseif (is_array($cUid) && isset($cUid[0]['uid'])) - $cUid=$cUid[0]['uid']; - elseif (empty($cUid)) + if (is_object($user) && isset($user->uid)) + $user=$user->uid; + else if (is_array($user) && isset($user['uid'])) + $user=$user['uid']; + else if (is_array($user) && isset($user[0]['uid'])) + $user=$user[0]['uid']; + else if (empty($user)) return $showHTML; - $cTmpName=$cUid; + $cTmpName=$user; $pers=kommune_funk_benutzerperson($cTmpName,$oWettbewerb); if (isset($pers->langname)) $cTmpName=$pers->langname; $showHTML.='
- '.(isset($pers->langname)?$pers->langname:$cUid).' - + '.(isset($pers->langname)?$pers->langname:$user).' +
- + @@ -1784,496 +329,6 @@ function kommune_funk_popup_benutzer($cUid,$oWettbewerb) '; return $showHTML; } -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_benutzerperson ermittelt zu einer UID die Person, und speichert diese im Objekt -* -* @param $oWettbewerb Objekt mit allen Daten zur Selektion wie Wettbewerbe,Personen,Teams,Matches -* @param $cUid UserUID Anwenderkurzzeichen -* -* @return HTML Liste der Ergebnisse der Wettbewerbe -* -*/ -function kommune_funk_benutzerperson($userUID,$oWettbewerb) -{ - $userUID=trim($userUID); - if (empty($userUID)) - return 'keine Benutzer UID übergeben'; - - if (isset($oWettbewerb->PersonenBenutzer[$userUID])) // Wurde bereits gefunden - { - $pers=$oWettbewerb->PersonenBenutzer[$userUID]; - if (!isset($pers->langname)) - $pers->langname=kommune_funk_pers_langname($userUID,$pers); - $oWettbewerb->PersonenBenutzer[$userUID]=$pers; - return $pers; - } - if (trim($oWettbewerb->clientENCODE)!='LATIN9') - $unicode=$oWettbewerb->clientENCODE; - else - $unicode=null; - - $pers = new benutzer($userUID); // Lesen PersonenBenutzer - if (!isset($pers->nachname)) - return $userUID; - - $pers->langname=kommune_funk_pers_langname($userUID,$pers); - $pers->foto_image=''; - if (!empty($pers->foto)) - { - $paramURL=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.constKommuneDisplayIMAGE.'&timecheck'.time().'&person_id='.$pers->person_id.(strlen($pers->foto)<2000?'&heximg='.$pers->foto:''); - $pers->foto_image=''.$pers->langname.' '.$pers->person_id.''; - } - $oWettbewerb->PersonenBenutzer[$userUID]=$pers; - return $pers; -} - -#------------------------------------------------------------------------------------------- -/* Subfunktion von getDisplayStringWettbewerb -* -* @kommune_funk_Statistik Aufbau einer StatistikListe zu den Wettbewerben -* -* @param $oWettbewerb Array mit allen Wettbewerbs und Benutzerdaten -* -* @return HTML String in Listenform der Wettbewerbe -* -*/ -function kommune_funk_Statistik($oWettbewerb) -{ - $showHTML=''; - if (!is_array($oWettbewerb->Wettbewerb)) - return $showHTML; - - $Wettbewerb=new komune_wettbewerbteam($oWettbewerb->sqlCONN,'','',''); - $Wettbewerb->setEncodingSQL($oWettbewerb->clientENCODE); - $Wettbewerb->setSchemaSQL($oWettbewerb->sqlSCHEMA); - // Laden alle Teams - $Wettbewerb->InitWettbewerbteam(); - if ($Wettbewerb->loadWettbewerbteam()) - $oWettbewerb->TeamAnwender=$Wettbewerb->getWettbewerbteam(); - else - $oWettbewerb->Error[]=$Wettbewerb->getError(); - - // Anzahl, max Punkte , und max Rang je Wettbewerb - $Wettbewerb->InitWettbewerbteam(); - $cTmpSQL=""; - $cTmpSQL.="SELECT * FROM ".$oWettbewerb->sqlSCHEMA.".tbl_wettbewerbteam where punkte>0"; - $cTmpSQL.=" order by punkte desc OFFSET 0 LIMIT 3;"; - - $aPunkteSieger=array(); - $Wettbewerb->setResultSQL(null); - if (!$Wettbewerb->fetch_all($cTmpSQL)) - $oWettbewerb->Error[]=$Wettbewerb->getError(); - else - $aPunkteSieger=$Wettbewerb->getResultSQL(); - - - if (isset($Wettbewerb)) - unset($Wettbewerb); - - $showHTML.='
'.(isset($pers->foto_image)?$pers->foto_image:'').''.kommune_funk_create_emailaccount($cUid).''.kommune_funk_create_emailaccount($user).'
'.(isset($pers->sprache)?'Sprache : ':'').'
'; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - - for ($iTmpZehler=0;$iTmpZehlerWettbewerb); - for ($iTmpZehler2=0;$iTmpZehler2Wettbewerb[$iTmpZehler2]["wettbewerb_kurzbz"])==trim($aPunkteSieger[$iTmpZehler]['wettbewerb_kurzbz'])) - { - $cTmpFarbe=(isset($oWettbewerb->Wettbewerb[$iTmpZehler2]["farbe"]) && !empty($oWettbewerb->Wettbewerb[$iTmpZehler2]["farbe"])?'#'.$oWettbewerb->Wettbewerb[$iTmpZehler]["farbe"]:'transparent'); - break; - } - } - - $cTmpHREF=kommune_funk_create_href(constKommuneAnzeigeWETTBEWERBTEAM,'',array('wettbewerb_kurzbz'=>$aPunkteSieger[$iTmpZehler]['wettbewerb_kurzbz']),'open'.$iTmpZehler.' '.$aPunkteSieger[$iTmpZehler]['wettbewerb_kurzbz'].' ','weiter'); - - - $cShowImage=''; - $arrWettbewerbTeam=array(); - $WettbewerbT=new komune_wettbewerbteam($oWettbewerb->sqlCONN,'',$aPunkteSieger[$iTmpZehler]['team_kurzbz'],$aPunkteSieger[$iTmpZehler]['wettbewerb_kurzbz']); - $WettbewerbT->setEncodingSQL($oWettbewerb->clientENCODE); - $WettbewerbT->setSchemaSQL($oWettbewerb->sqlSCHEMA); - if ($WettbewerbT->loadWettbewerbteam()) - { - $arrWettbewerbTeam=$WettbewerbT->getWettbewerbteam(); - - $pers=kommune_funk_benutzerperson($arrWettbewerbTeam[0]['uid'],$oWettbewerb); - if (isset($pers->foto_image) && !empty($pers->foto_image)) - $cShowImage=$pers->foto_image; - } - unset($WettbewerbT); - - - - if ($iTmpZehler%2) - $cTmpBGcolor="#FFFFB0"; - else - $cTmpBGcolor="#FFFFD7"; - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - - $showHTML.=''; - } - $showHTML.='
die Aktivsten Top 3
WettbewerbTeam / SpielerRangPunkteBild
 '.($iTmpZehler + 1).' '.$aPunkteSieger[$iTmpZehler]['team_kurzbz'].''.$aPunkteSieger[$iTmpZehler]['rang'].''.$aPunkteSieger[$iTmpZehler]['punkte'].''.(!empty($cShowImage)?$cShowImage:' ').''; - // Team / Spieler PopUp ( Im Teampopup wird auch das Wettbewerbspopup erstellt ) - $showHTML.=''; - - // Wettbewerb PopUp - $showHTML.=''; - $showHTML.='
'; - $showHTML.='
'; - -// Gesamtuebersicht------------------------------------------------------------------------------------------- - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''; - $showHTML.='
'; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''; - - $showHTML.=''; - - $showHTML.=''; - $showHTML.=''; - - - $cTmpGruppeTyp=''; - $showHTMLicon=''; - $showHTMLspiele=''; - $showHTMLteams=''; - - - $Wettbewerb=new komune_wettbewerbteam($oWettbewerb->sqlCONN,'','',''); - $Wettbewerb->setEncodingSQL($oWettbewerb->clientENCODE); - $Wettbewerb->setSchemaSQL($oWettbewerb->sqlSCHEMA); - $Wettbewerb->InitWettbewerbteam(); - - - for ($iTmpZehler=0;$iTmpZehlerWettbewerb);$iTmpZehler++) - { - #exit(Test($oWettbewerb)); - // Kennzeichen ob ein Record in tbl_wettbewerb angelegt wurde ist wbtyp_kurzbz - if (empty($oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"])) // wbtyp_kurzbz=(leer=keine wettbewerbe) - continue; - - // Wettbewerbstypen - Gruppenwechsel - $oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]=trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wbtyp_kurzbz"]); - $oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]=trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]); - $cTmpFarbe=(isset($oWettbewerb->Wettbewerb[$iTmpZehler]["farbe"]) && !empty($oWettbewerb->Wettbewerb[$iTmpZehler]["farbe"])?$oWettbewerb->Wettbewerb[$iTmpZehler]["farbe"]:''); - - $cTmpIconPopUpID='icon'.$iTmpZehler; - $cTmpIconPopUp=' onmouseover="show_layer(\''.$cTmpIconPopUpID.'\');" onmouseout="hide_layer(\''.$cTmpIconPopUpID.'\');" '; - - $cTmpSpielePopUpID='spiele'.$iTmpZehler; - $cTmpSpielePopUp=' onmouseover="show_layer(\''.$cTmpSpielePopUpID.'\');" onmouseout="hide_layer(\''.$cTmpSpielePopUpID.'\');" '; - - $cTmpTeamPopUpID1='sTeam1'.$iTmpZehler; - $cTmpTeamPopUp1=' onmouseover="show_layer(\''.$cTmpTeamPopUpID1.'\');" onmouseout="hide_layer(\''.$cTmpTeamPopUpID1.'\');" '; - - $cTmpTeamPopUpID2='sTeam2'.$iTmpZehler; - $cTmpTeamPopUp2=' onmouseover="show_layer(\''.$cTmpTeamPopUpID2.'\');" onmouseout="hide_layer(\''.$cTmpTeamPopUpID2.'\');" '; - - $showHTMLicon.=''; - $showHTMLspiele.=''; - - if ($iTmpZehler%2) - $cTmpBGcolor="#FFFFB0"; - else - $cTmpBGcolor="#FFFFD7"; - - $showHTML.=''; - - if ($cTmpGruppeTyp!=$oWettbewerb->Wettbewerb[$iTmpZehler]['wbtyp_kurzbz']) - $showHTML.=''; - else - $showHTML.=''; - $cTmpGruppeTyp=$oWettbewerb->Wettbewerb[$iTmpZehler]['wbtyp_kurzbz']; - - $cTmpHREF=kommune_funk_create_href(constKommuneAnzeigeWETTBEWERBTEAM,'',array('wettbewerb_kurzbz'=>$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"]),'open'.$iTmpZehler.' '.$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"].' ','weiter'); - $showHTML.=''; - - - // Anzahl Teams Spieler je Wettbewerb - $cTmpSQL=""; - $cTmpSQL.="SELECT count(distinct tbl_wettbewerbteam.team_kurzbz) as count_team_kurzbz FROM ".$oWettbewerb->sqlSCHEMA.".tbl_wettbewerbteam "; - $cTmpSQL.=" WHERE UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz)=UPPER(E'".trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"])."') "; - $cTmpSQL.=" OFFSET 0 LIMIT 1 ;"; - $cTmpWettbewerbInfo=array(); - $Wettbewerb->setResultSQL(null); - if ($Wettbewerb->fetch_all($cTmpSQL)) - $cTmpWettbewerbInfo=$Wettbewerb->getResultSQL(); - $showHTML.=''; - // Anzahl Teams Spieler Ende - - // Besten suchen - $cTmpSQL=""; - $cTmpSQL.="SELECT tbl_wettbewerbteam.wettbewerb_kurzbz,team_kurzbz,punkte,rang FROM ".$oWettbewerb->sqlSCHEMA.".tbl_wettbewerbteam "; - $cTmpSQL.=" WHERE UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz)=UPPER(E'".trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"])."') "; - $cTmpSQL.=" order by rang ASC OFFSET 0 LIMIT 1 ;"; - $arrWettbewerbTeams=array(); - $Wettbewerb->setResultSQL(null); - $cTmpBesteTeam=array(); - if ($Wettbewerb->fetch_all($cTmpSQL)) - $cTmpBesteTeam=$Wettbewerb->getResultSQL(); - $showHTMLteams.=''; - $showHTML.=''; - // Besten suchen Ende - - // Aktivsten suchen - $cTmpSQL=""; - $cTmpSQL.="SELECT tbl_wettbewerbteam.wettbewerb_kurzbz,team_kurzbz,punkte,rang FROM ".$oWettbewerb->sqlSCHEMA.".tbl_wettbewerbteam "; - $cTmpSQL.=" WHERE UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz)=UPPER(E'".trim($oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"])."') "; - $cTmpSQL.=" order by punkte DESC OFFSET 0 LIMIT 1 ;"; - $cTmpAktivsteTeam=array(); - $Wettbewerb->setResultSQL(null); - if ($Wettbewerb->fetch_all($cTmpSQL)) - $cTmpAktivsteTeam=$Wettbewerb->getResultSQL(); - $showHTMLteams.=''; - $showHTML.=''; - $showHTML.=''; - // Aktivsten suchen Ende - - - if (!isset($cTmpBesteTeam[0]['punkte']) || $cTmpBesteTeam[0]['punkte']<1) - $showHTML.=''; - else - $showHTML.=''; - $showHTML.=''; - } - $showHTML.='
Wettbewerb Informationen
ArtWettbewerbanz.Teiln.BesteAktivstePunkteForderungen
'.$oWettbewerb->Wettbewerb[$iTmpZehler]["wettbewerb_kurzbz"].''.$cTmpHREF.''.@(int)(isset($cTmpWettbewerbInfo[0]['count_team_kurzbz'])?$cTmpWettbewerbInfo[0]['count_team_kurzbz']:0).''.(isset($cTmpBesteTeam[0]['team_kurzbz'])?$cTmpBesteTeam[0]['team_kurzbz']:'').''.(isset($cTmpAktivsteTeam[0]['team_kurzbz'])?$cTmpAktivsteTeam[0]['team_kurzbz']:'').''.@(int)(isset($cTmpAktivsteTeam[0]['punkte'])?$cTmpAktivsteTeam=$cTmpBesteTeam[0]['punkte']:0).'keine ForderungenForderungen
'.$showHTMLicon.$showHTMLteams.$showHTMLspiele.'
'; - - if (isset($Wettbewerb)) - unset($Wettbewerb); - - $showHTML.='

'; - return $showHTML; -} - -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_mail Sendmailfunktion -* -* @param $empf Empfaengeradresse -* @param $betreff der Nachricht -* @param $text Nachrichtentext -* @param $abs Absender der Nachricht -* -* @return HTML Status der Mailfunktion -* -*/ -function kommune_funk_sendmail($empf='',$betreff='',$text='',$abs='',$oWettbewerb) -{ -// Empfaenger - if (empty($empf) && isset($oWettbewerb->wettbewerb[0]['uid']) ) - $empf=$oWettbewerb->wettbewerb[0]['uid']; - $empf=trim($empf); - $empf=kommune_funk_create_emailaccount(trim($empf)); - -// Absender - if (empty($abs)) // wenn kein Absender vorhanden ist : den Aktuellangemeldete Anwender nehmen - $abs=$oWettbewerb->userUID; - $abs=trim($abs); - - $cTmpName=mb_ereg_replace(stristr($abs,"@"),'',$abs); // Es wurde eine eMailadresse uebergeben, wir brauchen die UID - $cTmpName=trim($cTmpName); - - $pers=kommune_funk_benutzerperson(trim($cTmpName),$oWettbewerb); - if (isset($pers->nachname)) - $cTmpName=$pers->nachname; - $abs=kommune_funk_create_emailaccount(trim($abs)); - -#echo Test($pers); - - if (empty($betreff)) - $betreff=(defined('CAMPUS_NAME')?CAMPUS_NAME.' ':'').$oWettbewerb->wettbewerb_kurzbz.' Information'; - if (empty($text)) - $text=$betreff."\n\n".$abs; - -#Gerald - -#$empf='simane@technikum-wien.at'; - if (!@mail($empf, $betreff, $text, "From: ".(defined('CAMPUS_NAME')?CAMPUS_NAME.' ':'').$oWettbewerb->wettbewerb_kurzbz.' '.$cTmpName." <$abs>")) - return "eMail Versand an $empf mit Betreff:$betreff konnte nicht erfolgreich beendet werden!"; - -#echo " $empf, $betreff, $text, From: ".(defined('CAMPUS_NAME')?CAMPUS_NAME.' ':'').$oWettbewerb->wettbewerb_kurzbz.' '.$cTmpName." <$abs>" ; -#exit(Test($oWettbewerb)); - - return 'eMail wurde erfolgreich gesendet an '.$empf; // Init -; -} -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_funk_create_emailaccount erzeugt aus der UID und der Domainkonstante eine eMailadresse -* -* @param $uid -* -* @return emailadresse (aus einer uid und der Domainkonstante aus der config) -* -*/ -function kommune_funk_create_emailaccount($cUID) -{ - if (empty($cUID)) - $cUID=get_uid(); - $cUID=trim($cUID); - if (!defined('DOMAIN')) die('Die Konstante DOMAIN wurde nicht gefunden! Bitte config pruefen.' ); - if (!stristr($cUID,'@')) // Domainkonstante nur dazufuegen wenn noch keine Domain im Namen ist - $cUID=$cUID.(stristr(DOMAIN,'@')?DOMAIN:'@'.DOMAIN); // Pruefen ob in der Konstant der Klammeraffe ist - $cUID=mb_ereg_replace(' ','',$cUID); - return strtolower($cUID); -} - -#------------------------------------------------------------------------------------------- -/* -* -* @kommune_wettbewerbstyp_langtext Gibt zum Wettbewerbstype den Langtext retour -* -* @param pers array der Personen - Benutzer Daten -* -* @return RETURN wird das Erfolgreiche bzw. der Fehler der Datenbankaktion geliefert -* -*/ -function kommune_funk_pers_langname($userUID="",$pers="") -{ - if (!isset($pers->nachname)) // Plausib : wurde kein Datenobjekt der Person uebergeben - { - if (!empty($pers) && !is_array($pers)) // Es wurde was uebergeben (Retour dieser Information) - return $pers; - else - return $userUID; - } - $cTmpLangName=''; - $cTmpLangName.=(isset($pers->anrede) ? $pers->anrede.' ':''); - $cTmpLangName.=(isset($pers->titelpre) ? $pers->titelpre.' ':''); - $cTmpLangName.=(isset($pers->vorname) ? $pers->vorname.' ':''); - $cTmpLangName.=(isset($pers->nachname) ? $pers->nachname.' ':''); - - return $cTmpLangName; -} -#------------------------------------------------------------------------------------------- -/* -* -* @loadBILDintoDB Bilder als HEX Wert in DB Tabellen speichern -* -* @param - -* -* @return RETURN wird das Erfolgreiche bzw. der Fehler der Datenbankaktion geliefert -* -*/ - function loadBILDintoDB($userSETWORK="") - { - if(!isset($userSETWORK) || $userSETWORK=='') - $userSETWORK = (isset($_REQUEST[constKommuneParmSetWork]) ? $_REQUEST[constKommuneParmSetWork] : ''); - if(!isset($userSETWORK) || $userSETWORK=='') // Default Verarbeitung setzten - $userSETWORK=constKommuneAnzeigeDEFAULT; - - // Plausib der UploadDaten - if(!isset($_POST['submitbild'])) return ''; - if(!isset($_FILES['bild']['tmp_name'])) return ''; - - $filename=$_FILES['bild']['tmp_name']; - if (!is_file($filename)) return ''; - if ($fp=fopen($filename,'r')) //File oeffnen - { - $content = fread($fp, filesize($filename)); // auslesen der Daten - fclose($fp); // Close - } - else // Fehler Information das Bild nicht gefunden wurde - { - return sprintf(constFehlerDatenlesen,$_FILES['bild']['name']); - } - if (isset($fp)) unset($fp); - $content=kommune_strhex($content); //in HEX-Werte umrechnen - if(empty($content)) return ''; - - $selectWETTBEWERBTYPE = (isset($_REQUEST[constKommuneParmWettbewerbTyp]) ? $_REQUEST[constKommuneParmWettbewerbTyp] : ''); - - $sqlSELECT="SET search_path TO kommune;"; - switch (strtolower($userSETWORK)) - { - // Teams (mit n User) Neuanlage zu Wettbewerb - case constKommuneWartungTEAM: - return ''; - break; - // Teams (mit n User) Neuanlage zu Wettbewerb - case constKommuneWartungUID: - $team_kurzbz=(isset($_REQUEST['team_kurzbz']) ? $_REQUEST['team_kurzbz'] : ''); - $selectTEAM=(isset($_REQUEST['team_kurzbz_orig']) ? $_REQUEST['team_kurzbz_orig'] : $team_kurzbz); - $sqlSELECT.="BEGIN;UPDATE tbl_team set logo='$content' WHERE UPPER(team_kurzbz)=UPPER('$selectTEAM');COMMIT;"; - break; - // User-Teams zu einem Wettbewerb anzeigen ( Pyramide = Rang ) - case constKommuneAnzeigeWETTBEWERBTEAM: - return ''; - break; - case constKommuneAnzeigeDEFAULT: - $selectWETTBEWERB = (isset($_REQUEST[constKommuneParmWettbewerbArt]) ? $_REQUEST[constKommuneParmWettbewerbArt] : ''); - $sqlSELECT.="BEGIN;UPDATE tbl_wettbewerb set icon='$content' WHERE UPPER(wettbewerb_kurzbz)=UPPER('$selectWETTBEWERB');COMMIT;"; - break; - default: // Keine Verarbeitung - return ''; - break; - } - $tmp_result=querySQL($sqlSELECT); - if (empty($tmp_result)) // Wenn kein Datenbankfehler aufgetreten ist OK-Information senden - $tmp_result="

".'Bild'." Upload : ".$_FILES['bild']['name']." (".$_FILES['bild']['type'] .")

"; - return $tmp_result; // DB Fehler - } // Ende Bild Upload laden - #------------------------------------------------------------------------------------------- /* * @@ -2307,7 +362,7 @@ function kommune_funk_create_href($workurl="",$oWettbewerb=array(),$spezialparam */ function kommune_funk_create_url($workurl="",$oWettbewerb=array(),$spezialparameter=array() ) { - $cTmpUrl=$_SERVER['PHP_SELF'].'?'.constKommuneParmSetWork.'='.(!empty($workurl)?$workurl:constKommuneAnzeigeDEFAULT); + $cTmpUrl=$_SERVER['PHP_SELF'].'?'.'userSel'.'='.(!empty($workurl)?$workurl:''); $cTmpUrl.=(isset($oWettbewerb->team_kurzbz)?'&team_kurzbz='.trim($oWettbewerb->team_kurzbz):''); $cTmpUrl.=(isset($oWettbewerb->wbtyp_kurzbz)?'&wbtyp_kurzbz='.trim($oWettbewerb->wbtyp_kurzbz):''); $cTmpUrl.=(isset($oWettbewerb->wettbewerb_kurzbz)?'&wettbewerb_kurzbz='.trim($oWettbewerb->wettbewerb_kurzbz):''); @@ -2339,6 +394,197 @@ function kommune_hexstr($hex) $string.=chr(hexdec($hex[$i].$hex[$i+1])); return $string; } +#------------------------------------------------------------------------------------------- +/* +* +* @loadBILDintoDB Bilder als HEX Wert in DB Tabellen speichern +* +* @param - +* +* @return RETURN wird das Erfolgreiche bzw. der Fehler der Datenbankaktion geliefert +* +*/ + function loadBILDintoDB($userSETWORK="") + { + if(!isset($userSETWORK) || $userSETWORK=='') + $userSETWORK = (isset($_REQUEST['userSel']) ? $_REQUEST['userSel'] : ''); + if(!isset($userSETWORK) || $userSETWORK=='') // Default Verarbeitung setzten + $userSETWORK=''; + + // Plausib der UploadDaten + if(!isset($_POST['submitbild'])) return ''; + if(!isset($_FILES['bild']['tmp_name'])) return ''; + + $filename=$_FILES['bild']['tmp_name']; + if (!is_file($filename)) return ''; + if ($fp=fopen($filename,'r')) //File oeffnen + { + $content = fread($fp, filesize($filename)); // auslesen der Daten + fclose($fp); // Close + } + else // Fehler Information das Bild nicht gefunden wurde + { + return sprintf(constFehlerDatenlesen,$_FILES['bild']['name']); + } + if (isset($fp)) unset($fp); + $content=kommune_strhex($content); //in HEX-Werte umrechnen + if(empty($content)) return ''; + + $selectWETTBEWERBTYPE = (isset($_REQUEST[constKommuneParmWettbewerbTyp]) ? $_REQUEST[constKommuneParmWettbewerbTyp] : ''); + + switch (strtolower($userSETWORK)) + { + // Teams (mit n User) Neuanlage zu Wettbewerb + case constKommuneWartungTEAM: + return ''; + break; + // Teams (mit n User) Neuanlage zu Wettbewerb + case constKommuneWartungUID: + $team_kurzbz=(isset($_REQUEST['team_kurzbz']) ? $_REQUEST['team_kurzbz'] : ''); + $selectTEAM=(isset($_REQUEST['team_kurzbz_orig']) ? $_REQUEST['team_kurzbz_orig'] : $team_kurzbz); + $sqlSELECT.="BEGIN;UPDATE tbl_team set logo='$content' WHERE UPPER(team_kurzbz)=UPPER('$selectTEAM');COMMIT;"; + break; + // User-Teams zu einem Wettbewerb anzeigen ( Pyramide = Rang ) + case constKommuneAnzeigeWETTBEWERBTEAM: + return ''; + break; + case '': + $selectWETTBEWERB = (isset($_REQUEST[constKommuneParmWettbewerbArt]) ? $_REQUEST[constKommuneParmWettbewerbArt] : ''); + $sqlSELECT.="BEGIN;UPDATE tbl_wettbewerb set icon='$content' WHERE UPPER(wettbewerb_kurzbz)=UPPER('$selectWETTBEWERB');COMMIT;"; + break; + default: // Keine Verarbeitung + return ''; + break; + } + $tmp_result=querySQL($sqlSELECT); + if (empty($tmp_result)) // Wenn kein Datenbankfehler aufgetreten ist OK-Information senden + $tmp_result="

".'Bild'." Upload : ".$_FILES['bild']['name']." (".$_FILES['bild']['type'] .")

"; + return $tmp_result; // DB Fehler + } // Ende Bild Upload laden + + +/* +*------------------------------------------------------------------------------------------- +* HTML Header +* erzeugt den HTML Header fuer die Seite +* +*-------------------------------------------------------------------------------------------------- +*/ +function kommune_html_header($oWettbewerb) +{ +// ------------------------------------------------------------------------------------------------------------------------- +// HTML Ausgabe Datenstrom Teil I Header + $showHTML=' + + + + Kommune '.$oWettbewerb->workSITE.' + + + + + + + + + + + + + + + +'; +return $showHTML; +} /* *------------------------------------------------------------------------------------------- @@ -2392,4 +638,6 @@ function kommune_Test($arr=leer_zeichen,$lfd=0,$displayShow=true,$onlyRoot=false } + + ?> \ No newline at end of file diff --git a/cis/private/kommune/kommune_hex_img.inc.php b/cis/private/kommune/kommune_hex_img.inc.php index 338dfb5fa..87fc3001d 100644 --- a/cis/private/kommune/kommune_hex_img.inc.php +++ b/cis/private/kommune/kommune_hex_img.inc.php @@ -25,16 +25,11 @@ // um und gibt das ein Bild zurueck. // Aufruf mit sqlCONN,$personen_id); // Lesen PersonenBenutzer + $pers = new person($personen_id); // Lesen PersonenBenutzer if (isset($pers->uid) && !isset($oWettbewerb->PersonenBenutzer[$pers->uid])) $oWettbewerb->PersonenBenutzer[$pers->uid]=$pers; if (isset($pers->foto)) $heximg=$pers->foto; - } - elseif(isset($team_kurzbz) && !empty($team_kurzbz)) + elseif(isset($oWettbewerb->team_kurzbz) && !empty($oWettbewerb->team_kurzbz)) { + // WettbewerbTeam Classe initialisieren $selBILD=2; - if (isset($oWettbewerb->TeamBenutzer[$team_kurzbz][0]['logo'])) - $heximg=$oWettbewerb->TeamBenutzer[$team_kurzbz][0]['logo']; - else - { - // WettbewerbTeam Classe initialisieren - $WettbewerbTeam= new komune_wettbewerbteam($oWettbewerb->sqlCONN,'',$oWettbewerb->team_kurzbz,$oWettbewerb->wettbewerb_kurzbz); - $WettbewerbTeam->setEncodingSQL($oWettbewerb->clientENCODE); - $WettbewerbTeam->setSchemaSQL($oWettbewerb->sqlSCHEMA); - if ($WettbewerbTeam->loadWettbewerbteam()) - $arrTempWettbewerbTeam=$WettbewerbTeam->getWettbewerbteam(); - else - exit($WettbewerbTeam->getError()); - if (isset($arrTempWettbewerbTeam[0]['logo'])) - $heximg=$arrTempWettbewerbTeam[0]['logo']; - } + $WettbewerbTeam= new komune_wettbewerbteam('',$oWettbewerb->team_kurzbz,$oWettbewerb->wettbewerb_kurzbz); + if ($WettbewerbTeam->loadWettbewerbteam()) + $arrTempWettbewerbTeam=$WettbewerbTeam->result; + else + exit($WettbewerbTeam->errormsg); + if (isset($arrTempWettbewerbTeam[0]->logo)) + $heximg=$arrTempWettbewerbTeam[0]->logo; } - elseif(isset($wettbewerb_kurzbz) && !empty($wettbewerb_kurzbz)) + elseif(isset($oWettbewerb->wettbewerb_kurzbz) && !empty($oWettbewerb->wettbewerb_kurzbz)) { $selBILD=3; - if (isset($oWettbewerb->Wettbewerb[0])) - $heximg=$oWettbewerb->Wettbewerb[0]['icon']; - elseif (isset($oWettbewerb->Wettbewerb[$wettbewerb_kurzbz])) - $heximg=$oWettbewerb->Wettbewerb[$wettbewerb_kurzbz]['icon']; + $Wettbewerb= new komune_wettbewerb($oWettbewerb->wbtyp_kurzbz,$oWettbewerb->wettbewerb_kurzbz); + if ($Wettbewerb->loadWettbewerb()) + $arrTempWettbewerbTeam=$Wettbewerb->result; else - { - $Wettbewerb= new komune_wettbewerb($oWettbewerb->sqlCONN,$oWettbewerb->wbtyp_kurzbz,$oWettbewerb->wettbewerb_kurzbz); - $Wettbewerb->setEncodingSQL($oWettbewerb->clientENCODE); - $Wettbewerb->setSchemaSQL($oWettbewerb->sqlSCHEMA); - if ($Wettbewerb->loadWettbewerb()) - $arrTempWettbewerbTeam=$Wettbewerb->getWettbewerb(); - else - exit($Wettbewerb->getError()); - if (isset($arrTempWettbewerbTeam[0]['icon'])) - $heximg=$arrTempWettbewerbTeam[0]['icon']; - } + exit($Wettbewerb->errormsg); + if (isset($arrTempWettbewerbTeam[0]->icon)) + $heximg=$arrTempWettbewerbTeam[0]->icon; } else { @@ -101,8 +78,8 @@ function createIMGfromHEX($oWettbewerb) #exit($selBILD.Test($oWettbewerb)); if (empty($heximg)) $heximg ='4749463839611e000a0080ff00c0c0c000000021f90401000000002c000000001e000a0040020f848fa9cbed0fa39cb4da8bb3debc00003b'; + @ob_end_clean(); header("Content-type: image/gif"); exit(kommune_hexstr($heximg)); -} -?> \ No newline at end of file + diff --git a/cis/private/kommune/kommune_template_pyramiden.inc.php b/cis/private/kommune/kommune_template_pyramiden.inc.php index 7f23c78af..77a94abc3 100644 --- a/cis/private/kommune/kommune_template_pyramiden.inc.php +++ b/cis/private/kommune/kommune_template_pyramiden.inc.php @@ -49,25 +49,30 @@ function showPyramide($oWettbewerb) $showHTML.=''; // Wettbewerb PopUp $showHTML.=''; // Moderator - $cTmpName=$oWettbewerb->Wettbewerb[0]["uid"]; - $pers=kommune_funk_benutzerperson($oWettbewerb->Wettbewerb[0]["uid"],$oWettbewerb); - if (isset($pers->nachname)) - $cTmpName=$pers->langname; - + $cTmpName=''; + if (isset($oWettbewerb->Wettbewerb) && is_array($oWettbewerb->Wettbewerb) && isset($oWettbewerb->Wettbewerb[0])) + { + $cTmpName=$oWettbewerb->Wettbewerb[0]->uid; + $pers=kommune_funk_benutzerperson($oWettbewerb->Wettbewerb[0]->uid,$oWettbewerb); + if (isset($pers->nachname)) + $cTmpName=$pers->langname; + } + if (empty($cTmpName)) + $cTmpName=$oWettbewerb->userUID; $cTmpPersPopUpID='sPers'; $cTmpPersPopUp=' onmouseover="show_layer(\''.$cTmpPersPopUpID.'\');" onmouseout="hide_layer(\''.$cTmpPersPopUpID.'\');" '; - $cTmpFarbe=(isset($oWettbewerb->Wettbewerb[0]["farbe"]) && !empty($oWettbewerb->Wettbewerb[0]["farbe"])?' style="color:#'.$oWettbewerb->Wettbewerb[0]["farbe"].';" ':''); + $cTmpFarbe=(isset($oWettbewerb->Wettbewerb[0]->farbe) && !empty($oWettbewerb->Wettbewerb[0]->farbe)?' style="color:#'.$oWettbewerb->Wettbewerb[0]->farbe.';" ':''); $showHTML.='

Moderator '.$cTmpName.'

'; $showHTML.=''; - - $showHTML.=''; // Header Ende diff --git a/cis/private/kommune/kommune_template_start.inc.php b/cis/private/kommune/kommune_template_start.inc.php index 8c798af3d..7f4f6b49c 100644 --- a/cis/private/kommune/kommune_template_start.inc.php +++ b/cis/private/kommune/kommune_template_start.inc.php @@ -31,13 +31,79 @@ * @return showHTML String mit HTML Ausgabe der Wettbewerbe, Eigene Wettbewerbe * */ -function showStartseite($oWettbewerb) -{ // Plausib +$last=null; +$oWettbewerb->wbtyp_kurzbz=''; +$oWettbewerb->wettbewerb_kurzbz=''; +kommune_funk_wettbewerb(&$oWettbewerb); +kommune_funk_eigene_wettbewerb(&$oWettbewerb); +#var_dump($oWettbewerb); - // Initialisierung - $showHTML=''; - // Menue-AnzeigenContent - return $showHTML; +$last=null; +$iTmpWettbewerb=0; +echo ''; +echo ''; +for ($iTmpZehler=0;$iTmpZehlerWettbewerb);$iTmpZehler++) +{ + if ($iTmpWettbewerb!=0 && ($iTmpWettbewerb%constMaxWettbwerbeZeile==0 || $last!=$oWettbewerb->Wettbewerb[$iTmpZehler]->wbtyp_kurzbz) ) + { + $iTmpWettbewerb=0; + echo ''; + } + if ($last!=$oWettbewerb->Wettbewerb[$iTmpZehler]->wbtyp_kurzbz) + { + $last=$oWettbewerb->Wettbewerb[$iTmpZehler]->wbtyp_kurzbz; + echo ' + '; + } + + if (!empty($oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerb_kurzbz)) + { + $oWettbewerb->wbtyp_kurzbz=$oWettbewerb->Wettbewerb[$iTmpZehler]->wbtyp_kurzbz; + $oWettbewerb->wettbewerb_kurzbz=$oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerb_kurzbz; + if ($oWettbewerb->Wettbewerb[$iTmpZehler]->bereits_eingetragen) + $oWettbewerb->team_kurzbz=$oWettbewerb->Wettbewerb[$iTmpZehler]->daten_eingetragen[0]->team_kurzbz; + else + $oWettbewerb->team_kurzbz=''; + + $iTmpWettbewerb++; + echo ''; + } } +if ($iTmpWettbewerb==0) // Kein Tabellenelement angelegt (Nun ein Dummy td anlegen das die Tab.stimmt) + echo ''; +echo ''; +echo '
+ + + + + +
 '.$last.' 
+ + + + +
+ + + + + + + + + + + + + +

 '.$oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerb_kurzbz.' 

'.$oWettbewerb->Wettbewerb[$iTmpZehler]->icon_image.' 
'.$oWettbewerb->Wettbewerb[$iTmpZehler]->wettbewerbart.'
'.($oWettbewerb->Wettbewerb[$iTmpZehler]->bereits_eingetragen?'meine Daten':'anmelden').' ] [ zum Spiel ]
+ + + + + +
 
'; + ?> \ No newline at end of file diff --git a/cis/private/kommune/~$ommune.doc b/cis/private/kommune/~$ommune.doc deleted file mode 100644 index f542c8d47211ef8301e0eac6a706cce177e29c96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmWf2Pc2H!Nl^&S%uUQo)eTN9EKSWTW*`7W8Qd9C8HyMZ8FCm>7!(+S88R7ifxJAR rs4kF~%23Eq3MBIw5JoxdYGj5Ps}Qk~jUh%I&UYxOhO=R60-)*v8SoX@ diff --git a/cis/private/lehre/menu.php b/cis/private/lehre/menu.php index 9dd5526cb..3bad3f1eb 100644 --- a/cis/private/lehre/menu.php +++ b/cis/private/lehre/menu.php @@ -70,7 +70,7 @@ { $sql_query = "SELECT studiengang_kz, semester FROM campus.vw_student WHERE uid='$user' LIMIT 1"; $result_student = $db->db_query($sql_query); - $num_rows_student = $db->db_numrows($result_student); + $num_rows_student = $db->db_num_rows($result_student); if($num_rows_student > 0) { $row = $db->db_fetch_object($result_student, 0); diff --git a/cis/private/lehre/upload.php b/cis/private/lehre/upload.php index 96e57c955..2b4b94523 100644 --- a/cis/private/lehre/upload.php +++ b/cis/private/lehre/upload.php @@ -536,7 +536,7 @@ A:hover { if(!$result_path_elements) die('

Der Benutzer '.$user.' konnte nicht zugeordnet werden!

'); - $num_rows_path_elements = $db->db_numrows($result_path_elements); + $num_rows_path_elements = $db->db_num_rows($result_path_elements); if(!($num_rows_path_elements > 0)) { // Pruefen ob dieser Kurs ein Wahlfach ist @@ -545,7 +545,7 @@ A:hover { die('

Der Benutzer '.$user.' konnte nicht zugeordnet werden!

'); if(!$result_path_elements) die('

Der Benutzer '.$user.' konnte nicht zugeordnet werden!

'); - $num_rows_path_elements = $db->db_numrows($result_path_elements); + $num_rows_path_elements = $db->db_num_rows($result_path_elements); if(!($num_rows_path_elements > 0)) { echo ""; diff --git a/cis/private/lvplan/stpl_detail.php b/cis/private/lvplan/stpl_detail.php index d8d4003f5..6e5167cf8 100644 --- a/cis/private/lvplan/stpl_detail.php +++ b/cis/private/lvplan/stpl_detail.php @@ -76,7 +76,7 @@ else $sql_query.=' ORDER BY unr ASC, stg_kurzbz, vw_stundenplan.semester, verband, gruppe, gruppe_kurzbz LIMIT 100'; //echo $sql_query.'
'; $erg_stpl=$db->db_query($sql_query); -$num_rows_stpl=$db->db_numrows($erg_stpl); +$num_rows_stpl=$db->db_num_rows($erg_stpl); //Reservierungen $sql_query="SELECT vw_reservierung.*, vw_mitarbeiter.titelpre, vw_mitarbeiter.vorname,vw_mitarbeiter.nachname FROM vw_reservierung, vw_mitarbeiter WHERE datum='$datum' AND stunde=$stunde"; diff --git a/cis/private/menu.php b/cis/private/menu.php index 09823c4c9..59babb705 100644 --- a/cis/private/menu.php +++ b/cis/private/menu.php @@ -21,14 +21,18 @@ * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > * */ -require_once('../../config/cis.config.inc.php'); -require_once('../../include/globals.inc.php'); -require_once('../../include/functions.inc.php'); -require_once('../../include/benutzerberechtigung.class.php'); -require_once('../../include/funktion.class.php'); -require_once('../../include/studiensemester.class.php'); -require_once('../../include/studiengang.class.php'); -require_once('../../include/lehrveranstaltung.class.php'); + require_once('../../config/cis.config.inc.php'); + require_once('../../include/basis_db.class.php'); + if (!$db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + + require_once('../../include/globals.inc.php'); + require_once('../../include/functions.inc.php'); + require_once('../../include/benutzerberechtigung.class.php'); + require_once('../../include/funktion.class.php'); + require_once('../../include/studiensemester.class.php'); + require_once('../../include/studiengang.class.php'); + require_once('../../include/lehrveranstaltung.class.php'); if (!$user=get_uid()) die('Sie sind nicht angemeldet. Es wurde keine Benutzer UID gefunden ! Zurück'); @@ -56,7 +60,7 @@ if(check_lektor($user)) $is_lector=true; else $is_lector=false; - + if(check_student($user)) $is_student=true; else diff --git a/include/komune_wettbewerb.class.php b/include/komune_wettbewerb.class.php index 1dcf09f52..c5bac7648 100644 --- a/include/komune_wettbewerb.class.php +++ b/include/komune_wettbewerb.class.php @@ -34,187 +34,412 @@ * @return - kein Retourn des Konstruktors * */ -include_once(dirname(__FILE__)."/postgre_sql.class.php"); -class komune_wettbewerb extends postgre_sql +require_once(dirname(__FILE__).'/basis_db.class.php'); +class komune_wettbewerb extends basis_db { - protected $wettbewerb; - protected $wbtyp_kurzbz; - protected $wettbewerb_kurzb; + public $result; + public $new=false; // boolean + + public $wbtyp_kurzbz; + public $wettbewerb_kurzbz; + + public $schemaSQL="kommune"; // string Datenbankschema + //-----Konstruktor - function komune_wettbewerb($connectSQL,$wbtyp_kurzbz="",$wettbewerb_kurzbz="") + function __construct($wbtyp_kurzbz="",$wettbewerb_kurzbz="",$uid="",$team_kurzbz="") { + parent::__construct(); + $this->InitWettbewerb(); - - $this->setConnectSQL($connectSQL); - $this->setWbtyp_kurzbz($wbtyp_kurzbz); - $this->setWettbewerb_kurzbz($wettbewerb_kurzbz); + $this->wbtyp_kurzbz=$wbtyp_kurzbz; + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; } //-----Initialisierung-------------------------------------------------------------------------------------------- function InitWettbewerb() { - $this->setError(''); + $this->new=false; + $this->errormsg=''; + $this->result=array(); - $this->setWettbewerb(''); - $this->setWbtyp_kurzbz(''); - $this->setWettbewerb_kurzbz(''); + $this->wbtyp_kurzbz=''; + $this->wettbewerb_kurzbz=''; + } -//-----wbtyp_kurzbz-------------------------------------------------------------------------------------------- - function getWettbewerb() - { - return $this->wettbewerb; - } - function setWettbewerb($wettbewerb) - { - $this->wettbewerb=$wettbewerb; - } -//-----wbtyp_kurzbz-------------------------------------------------------------------------------------------- - function getWbtyp_kurzbz() - { - return $this->wbtyp_kurzbz; - } - function setWbtyp_kurzbz($wbtyp_kurzbz) - { - $this->wbtyp_kurzbz=$wbtyp_kurzbz; - } -//-----wettbewerb_kurzbz-------------------------------------------------------------------------------------------- - function getWettbewerb_kurzbz() - { - return $this->wettbewerb_kurzbz; - } - function setWettbewerb_kurzbz($wettbewerb_kurzbz="") - { - $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; - } -//------------------------------------------------------------------------------------------------- - function loadWettbewerbTyp() - { - $cSchemaSQL=$this->getSchemaSQL(); - $tmpwbtyp_kurzbz=$this->getWbtyp_kurzbz(); - - $cTmpSQL=""; - $cTmpSQL.="SELECT * FROM ".$cSchemaSQL."tbl_wettbewerbtyp "; - $cTmpSQL.=" WHERE ".$cSchemaSQL."tbl_wettbewerbtyp.wbtyp_kurzbz>'' "; - - // Suche nach einem einzigen Wetttbewerbstypen wbtyp_kurzbz - if (!is_array($tmpwbtyp_kurzbz) && !empty($tmpwbtyp_kurzbz) ) - { - $cTmpSQL.=" AND UPPER(".$cSchemaSQL."tbl_wettbewerbtyp.wbtyp_kurzbz)=UPPER('".$tmpwbtyp_kurzbz."') "; - } - elseif (is_array($tmpwbtyp_kurzbz) && count($tmpwbtyp_kurzbz)>0 ) - { - if (isset($tmpwbtyp_kurzbz[0]['wbtyp_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $tmpwbtyp_kurzbzE=array(); - for ($indZEILE=0;$indZEILEerrormsg=''; + $qry=""; + + $fildsList=''; + $fildsValue=''; + + + if (empty($this->wbtyp_kurzbz) || $this->wbtyp_kurzbz==null ) + { + $this->errormsg='Wettbewerb - Typ fehlt!'; + return false; } - $cTmpSQL.=" OFFSET 0 LIMIT ALL FOR SHARE;"; -#exit($cTmpSQL); + if (empty($this->bezeichnung)) + { + $this->errormsg='Wettbewerbstyp - Bezeichnung fehlt!'; + return false; + } + + if($this->new) + { - // Entfernen der Temporaeren Variablen aus dem Speicher - if (isset($cSchemaSQL)) unset($cSchemaSQL); - if (isset($tmpwbtyp_kurzbz)) unset($tmpwbtyp_kurzbz); - // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); + $fildsList.='wbtyp_kurzbz,'; + $fildsList.='bezeichnung,'; + $fildsList.='farbe'; - $this->setResultSQL(null); - if (!$this->fetch_all()) - return false; - $this->setWettbewerb($this->getResultSQL()); - $this->setResultSQL(null); - - return true; - } + $fildsValue.="'".addslashes($this->wbtyp_kurzbz)."',"; + $fildsValue.="'".addslashes($this->bezeichnung)."',"; + $fildsValue.="'".addslashes($this->farbe)."'"; + + $qry=" insert into ".$this->schemaSQL.".tbl_wettbewerbtyp (".$fildsList.") values (".$fildsValue."); "; + } + else + { + $fildsValue.=(!empty($fildsValue)?',':'')."bezeichnung='".addslashes($this->bezeichnung)."'"; + $fildsValue.=(!empty($fildsValue)?',':'')."farbe='".addslashes($this->farbe)."'"; - function loadWettbewerb() + $qry.=" update ".$this->schemaSQL.".tbl_wettbewerbtyp set "; + $qry.=$fildsValue; + $qry.=" where wbtyp_kurzbz='".addslashes($this->wbtyp_kurzbz)."' "; + } + if($resurce=$this->db_query($qry)) + return $resurce; + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim speichern des Datensatzes '; + return false; + } + } + +//------------------------------------------------------------------------------------------------- + /** + * Loescht eine Veranstaltungskategorie + * @return true wenn ok, false im Fehlerfall + */ + public function deleteWettbewerbTyp($wbtyp_kurzbz="") { - $cSchemaSQL=$this->getSchemaSQL(); - $tmpwbtyp_kurzbz=$this->getWbtyp_kurzbz(); - $cWettbewerb_kurzbz=$this->getWettbewerb_kurzbz(); - - $cTmpSQL=""; - $cTmpSQL.="SELECT *,tbl_wettbewerbtyp.wbtyp_kurzbz,case WHEN tbl_wettbewerb.teamgroesse >1 then 'Teambewerb' else 'Einzelbewerb' end as wettbewerbart FROM ".$cSchemaSQL."tbl_wettbewerbtyp "; - $cTmpSQL.=" LEFT JOIN ".$cSchemaSQL."tbl_wettbewerb ON UPPER(".$cSchemaSQL."tbl_wettbewerb.wbtyp_kurzbz)=UPPER(".$cSchemaSQL."tbl_wettbewerbtyp.wbtyp_kurzbz) "; - $cTmpSQL.=" WHERE ".$cSchemaSQL."tbl_wettbewerbtyp.wbtyp_kurzbz>'' "; + + // Initialisieren + $qry=""; + $this->errormsg=''; + + // Parameter + if (!empty($wbtyp_kurzbz)) + $this->wbtyp_kurzbz=$wbtyp_kurzbz; + + // Plausib + if (empty($this->wbtyp_kurzbz) || $this->wbtyp_kurzbz==null ) + { + $this->errormsg='Wettbewerb - Typ fehlt!'; + return false; + } + + // Abfrage + $qry.=" BEGIN; "; + $qry.=" delete from ".$this->schemaSQL.".tbl_wettbewerb "; + if (is_array($this->wbtyp_kurzbz)) + $qry.=" where wbtyp_kurzbz in ('".implode("','",$this->wbtyp_kurzbz)."') "; + else + $qry.=" where wbtyp_kurzbz='".addslashes($this->wbtyp_kurzbz)."' "; + $qry.="; "; + + $qry.=" delete from ".$this->schemaSQL.".tbl_wettbewerbtyp "; + if (is_array($this->wbtyp_kurzbz)) + $qry.=" where wbtyp_kurzbz in ('".implode("','",$this->wbtyp_kurzbz)."') "; + else + $qry.=" where wbtyp_kurzbz='".addslashes($this->wbtyp_kurzbz)."' "; + + if($this->db_query($qry)) + { + if($this->db_query('COMMIT;')) + return true; + else + return false; + } + else + { + $this->db_query('ROLLBACK;'); + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim Veranstaltungskategorie löschen'; + return false; + } + } + + function loadWettbewerbTyp($wbtyp_kurzbz=null) + { + // Init + $this->result=array(); + $this->errormsg=''; + if (!is_null($wbtyp_kurzbz)) + $this->wbtyp_kurzbz=$wbtyp_kurzbz; + + $qry=""; + $qry.="SELECT * FROM ".$this->schemaSQL.".tbl_wettbewerbtyp "; + $qry.=" WHERE ".$this->schemaSQL.".tbl_wettbewerbtyp.wbtyp_kurzbz>'' "; // Suche nach einem einzigen Wetttbewerbstypen wbtyp_kurzbz - if (!is_array($tmpwbtyp_kurzbz) && !empty($tmpwbtyp_kurzbz) ) + if ( !empty($this->wettbewerb_kurzbz) && !is_array($this->wettbewerb_kurzbz) ) + { + $qry.=" AND UPPER(".$this->schemaSQL.".tbl_wettbewerbtyp.wbtyp_kurzbz)=UPPER('".addslashes($this->wettbewerb_kurzbz)."') "; + } + elseif (is_array($this->wettbewerb_kurzbz) && count($this->wettbewerb_kurzbz)>0 ) + { + $qry.=" AND UPPER(".$this->schemaSQL.".tbl_wettbewerbtyp.wbtyp_kurzbz) in ('".strtoupper(implode("','",$this->wettbewerb_kurzbz))."') "; + } + $qry.=" order by wbtyp_kurzbz "; + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result[]=$row; + } + return $this->result; + } + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim lesen der Wettbewerbstypen'; + return false; + } + return false; + } +//------------------------------------------------------------------------------------------------- +// ------------------------ Wettbewerbe +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- + /** + * Speichert bzw. Aendert eine Veranstaltungskategorie + * @return true wenn ok, false im Fehlerfall + */ + public function saveWettbewerb() + { + // Initialisieren + $this->errormsg=''; + $qry=""; + + $fildsList=''; + $fildsValue=''; + + + // Plausib + if (empty($this->wbtyp_kurzbz) || $this->wbtyp_kurzbz==null ) + { + $this->errormsg='Wettbewerb - Type fehlt!'; + return false; + } + if (empty($this->wettbewerb_kurzbz) || $this->wettbewerb_kurzbz==null ) + { + $this->errormsg='Wettbewerb - Kurzbz. fehlt!'; + return false; + } + + if (empty($this->regeln)) + { + $this->errormsg='Wettbewerb - Regeln fehlen!'; + return false; + } + + if (empty($this->forderungstage) || is_null($this->forderungstage) ) + $this->forderungstage=7; + + if (!is_numeric($this->forderungstage) ) + { + $this->errormsg='Forderungstage nur Nummerisch'; + return false; + } + + + if (empty($this->teamgroesse) || is_null($this->teamgroesse)) + $this->teamgroesse=1; + + if (!is_numeric($this->teamgroesse) ) + { + $this->errormsg='Forderungstage nur Nummerisch'; + return false; + } + + if($this->new) + { + + $fildsList.='wbtyp_kurzbz,'; + $fildsList.='wettbewerb_kurzbz,'; + $fildsList.='regeln,'; + $fildsList.='forderungstage,'; + + $fildsList.='teamgroesse,'; + $fildsList.='uid,'; + $fildsList.='icon'; + + $fildsValue.="'".addslashes($this->wbtyp_kurzbz)."',"; + $fildsValue.="'".addslashes($this->wettbewerb_kurzbz)."',"; + + $fildsValue.="'".addslashes($this->regeln)."',"; + $fildsValue.="".addslashes($this->forderungstage).","; + + $fildsValue.="".addslashes($this->teamgroesse).","; + $fildsValue.="'".addslashes($this->uid)."',"; + + $fildsValue.="'".addslashes($this->icon)."'"; + + $qry=" insert into ".$this->schemaSQL.".tbl_wettbewerb (".$fildsList.") values (".$fildsValue."); "; + } + else + { + $fildsValue.=(!empty($fildsValue)?',':'')."regeln='".addslashes($this->regeln)."'"; + $fildsValue.=(!empty($fildsValue)?',':'')."forderungstage=".addslashes($this->forderungstage).""; + + + $fildsValue.=(!empty($fildsValue)?',':'')."teamgroesse=".addslashes($this->teamgroesse).""; + + $fildsValue.=(!empty($fildsValue)?',':'')."uid='".addslashes($this->uid)."'"; + + $fildsValue.=(!empty($fildsValue)?',':'')."icon='".addslashes($this->icon)."'"; + + $qry.=" update ".$this->schemaSQL.".tbl_wettbewerb set "; + $qry.=$fildsValue; + $qry.=" where wbtyp_kurzbz='".addslashes($this->wbtyp_kurzbz)."' and wettbewerb_kurzbz='".addslashes($this->wettbewerb_kurzbz)."' "; + } + if($this->db_query($qry)) + return true; + else + { + if (empty($qry)) + $this->errormsg = 'Fehler beim speichern des Datensatzes '; + $this->errormsg .=' '.$qry; + return false; + } + } + +//------------------------------------------------------------------------------------------------- + /** + * Loescht eine Veranstaltungskategorie + * @return true wenn ok, false im Fehlerfall + */ + public function deleteWettbewerb($wbtyp_kurzbz="",$wettbewerb_kurzbz=null) + { + + // Initialisieren + $qry=""; + + $this->result=array(); + $this->errormsg=''; + + // Parameter + if (!is_null($wbtyp_kurzbz)) + $this->wbtyp_kurzbz=$wbtyp_kurzbz; + if (!is_null($wettbewerb_kurzbz)) + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; + + // Plausib + if (empty($this->wbtyp_kurzbz) || $this->wbtyp_kurzbz==null ) + { + $this->errormsg='Wettbewerb - Typ fehlt!'; + return false; + } + if (empty($this->wettbewerb_kurzbz) || $this->wettbewerb_kurzbz==null ) + { + $this->errormsg='Wettbewerb - Kurzbz. fehlt!'; + return false; + } + + // Abfrage + $qry.=" delete from ".$this->schemaSQL.".tbl_wettbewerb "; + if (is_array($this->wbtyp_kurzbz)) + $qry.=" where wbtyp_kurzbz in ('".implode("','",$this->wbtyp_kurzbz)."') "; + else + $qry.=" where wbtyp_kurzbz='".addslashes($this->wbtyp_kurzbz)."' "; + + if (is_array($this->wettbewerb_kurzbz)) + $qry.=" and wettbewerb_kurzbz in ('".implode("','",$this->wettbewerb_kurzbz)."') "; + else + $qry.=" and wettbewerb_kurzbz='".addslashes($this->wettbewerb_kurzbz)."' "; + + if($this->db_query($qry)) + { + return true; + } + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim Veranstaltungskategorie löschen'; + return false; + } + } + + function loadWettbewerb($wbtyp_kurzbz=null,$wettbewerb_kurzbz=null) + { + // Init + $this->result=array(); + $this->errormsg=''; + + if (!is_null($wbtyp_kurzbz)) + $this->wbtyp_kurzbz=$wbtyp_kurzbz; + if (!is_null($wettbewerb_kurzbz)) + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; + + + $qry=""; + $qry.="SELECT *,tbl_wettbewerbtyp.wbtyp_kurzbz,case WHEN tbl_wettbewerb.teamgroesse >1 then 'Teambewerb' else 'Einzelbewerb' end as wettbewerbart FROM ".$this->schemaSQL.".tbl_wettbewerbtyp "; + $qry.=" LEFT JOIN ".$this->schemaSQL.".tbl_wettbewerb ON UPPER(".$this->schemaSQL.".tbl_wettbewerb.wbtyp_kurzbz)=UPPER(".$this->schemaSQL.".tbl_wettbewerbtyp.wbtyp_kurzbz) "; + $qry.=" WHERE ".$this->schemaSQL.".tbl_wettbewerbtyp.wbtyp_kurzbz>'' "; + + // Suche nach einem einzigen Wetttbewerbstypen wbtyp_kurzbz + if (!is_array($this->wbtyp_kurzbz) && !empty($this->wbtyp_kurzbz) ) { - $cTmpSQL.=" AND UPPER(".$cSchemaSQL."tbl_wettbewerbtyp.wbtyp_kurzbz)=UPPER('".$tmpwbtyp_kurzbz."') "; + $qry.=" AND UPPER(".$this->schemaSQL.".tbl_wettbewerbtyp.wbtyp_kurzbz)=UPPER('".$this->wbtyp_kurzbz."') "; } - elseif (is_array($tmpwbtyp_kurzbz) && count($tmpwbtyp_kurzbz)>0 ) + elseif (is_array($this->wettbewerb_kurzbz) && count($this->wettbewerb_kurzbz)>0 ) { - if (isset($tmpwbtyp_kurzbz[0]['wbtyp_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $tmpwbtyp_kurzbzE=array(); - for ($indZEILE=0;$indZEILEschemaSQL.".tbl_wettbewerbtyp.wbtyp_kurzbz) in ('".strtoupper(implode("','",$this->wbtyp_kurzbz))."') "; } // Suche nach Wettbewerben wettbewerb_kurzbz - if (!is_array($cWettbewerb_kurzbz) && !empty($cWettbewerb_kurzbz) ) - { - $cTmpSQL.=" AND UPPER(".$cSchemaSQL."tbl_wettbewerb.wettbewerb_kurzbz)=UPPER('".$cWettbewerb_kurzbz."') "; - } - elseif (is_array($cWettbewerb_kurzbz) && count($cWettbewerb_kurzbz)>0 ) + if (!is_array($this->wettbewerb_kurzbz) && !empty($this->wettbewerb_kurzbz) ) + { + $qry.=" AND UPPER(".$this->schemaSQL.".tbl_wettbewerb.wettbewerb_kurzbz)=UPPER('".$this->wettbewerb_kurzbz."') "; + } + elseif (is_array($this->wettbewerb_kurzbz) && count($this->wettbewerb_kurzbz)>0 ) { - if (isset($cWettbewerb_kurzbz[0]['wettbewerb_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $tmpwbtyp_kurzbzE=array(); - for ($indZEILE=0;$indZEILEschemaSQL.".tbl_wettbewerb.wettbewerb_kurzbz) in ('".strtoupper(implode("','",$this->wettbewerb_kurzbz))."') "; } - $cTmpSQL.=" OFFSET 0 LIMIT ALL FOR SHARE OF tbl_wettbewerbtyp;"; - - // Entfernen der Temporaeren Variablen aus dem Speicher - if (isset($cSchemaSQL)) unset($cSchemaSQL); - if (isset($tmpwbtyp_kurzbz)) unset($tmpwbtyp_kurzbz); - if (isset($cWettbewerb_kurzbz)) unset($cWettbewerb_kurzbz); - - // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); - - $this->setResultSQL(null); - if (!$this->fetch_all()) - return false; - $this->setWettbewerb($this->getResultSQL()); - $this->setResultSQL(null); - - return true; - } + $qry.=" order by tbl_wettbewerbtyp.wbtyp_kurzbz,wettbewerb_kurzbz "; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result[]=$row; + } + return $this->result; + } + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim lesen der Wettbewerbstypen'; + return false; + } + return false; + } } // Class komune_wettbewerb Ende ?> \ No newline at end of file diff --git a/include/komune_wettbewerbeinladungen.class.php b/include/komune_wettbewerbeinladungen.class.php index 2b9684707..a27691a88 100644 --- a/include/komune_wettbewerbeinladungen.class.php +++ b/include/komune_wettbewerbeinladungen.class.php @@ -34,247 +34,92 @@ * @return - kein Retourn des Konstruktors * */ -include_once(dirname(__FILE__)."/postgre_sql.class.php"); -class komune_wettbewerbeinladungen extends postgre_sql + + +require_once(dirname(__FILE__).'/basis_db.class.php'); +class komune_wettbewerbeinladungen extends basis_db { - protected $wettbewerbeinladungen=""; + public $result; + public $new=false; // boolean + + public $wbtyp_kurzbz; + public $wettbewerb_kurzb; + + public $uid; + public $team_kurzbz; + + public $team_forderer=""; + public $team_gefordert=""; + public $match_id=""; + + public $gefordertvon=""; + public $gefordertamum=""; + + public $matchdatumzeit=""; + public $matchort=""; + + public $bestaetigtvon=""; + public $bestaetigtamum=""; + + public $ergebniss=""; + public $team_sieger=""; + + public $matchbestaetigtamum=""; + public $matchbestaetigtvon=""; - protected $uid=""; - - protected $match_id=""; - protected $wettbewerb_kurzbz=""; - - protected $team_kurzbz=""; - protected $team_gefordert=""; - - protected $gefordertvon=""; - protected $gefordertamum=""; - - protected $matchdatumzeit=""; - protected $matchort=""; - - protected $bestaetigtvon=""; - protected $bestaetigtamum=""; - - protected $ergebniss=""; - protected $team_sieger=""; - - protected $matchbestaetigtamum=""; - protected $matchbestaetigtvon=""; - - protected $switchGewinner=''; - + public $switchGewinner=''; + + public $schemaSQL="kommune"; // string Datenbankschema //-----Konstruktor - function komune_wettbewerbeinladungen($connectSQL,$match_id="",$team_forderer="",$team_gefordert="",$wettbewerb_kurzbz="",$uid="") + function __construct($match_id="",$team_forderer="",$team_gefordert="",$wettbewerb_kurzbz="",$uid="",$wbtyp_kurzbz="") { - $this->InitWettbewerbeinladungen(); + parent::__construct(); + + $this->InitWettbewerbeinladungen(); + + $this->match_id=$match_id; + $this->team_forderer=$team_forderer; + $this->team_gefordert=$team_gefordert; + + $this->wbtyp_kurzbz=$wbtyp_kurzbz; + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; + + $this->gefordertvon=$uid; - $this->setConnectSQL($connectSQL); - $this->setMatch_id($match_id); - $this->setTeam_forderer($team_forderer); - $this->setTeam_gefordert($team_gefordert); - $this->setWettbewerb_kurzbz($wettbewerb_kurzbz); - $this->setGefordertvon($uid); } //-----Initialisierung-------------------------------------------------------------------------------------------- function InitWettbewerbeinladungen() { - $this->setError(''); - // Ergebniss-Liste der Spiele - $this->setWettbewerbeinladung(''); - // Liste der Spiele mit Ergebniss "True" , oder Ohne "False" - $this->setSwitchGewinner(''); - - // Step 1 - $this->setMatch_id(''); - $this->setWettbewerb_kurzbz(''); + $this->new=false; + $this->errormsg=''; + + $this->result=array(); - $this->setGefordertvon(''); - $this->setGefordertamum(''); - - $this->setTeam_kurzbz(''); - $this->setTeam_gefordert(''); - - $this->setMatchdatumzeit(''); - $this->setMatchort(''); - // Step 2 - $this->setBestaetigtvon(''); - $this->setBestaetigtamum(0); - // Step 3 - $this->setErgebniss(''); - $this->setTeam_sieger(''); - // Step 4 - $this->setMatchbestaetigtamum(''); - $this->setMatchbestaetigtvon(''); + $this->wbtyp_kurzbz=''; + $this->wettbewerb_kurzbz=''; + + $this->match_id=""; + $this->team_forderer=""; + $this->team_gefordert=""; + + $this->gefordertvon=""; + $this->gefordertamum=""; + + $this->matchdatumzeit=""; + $this->matchort=""; + + $this->bestaetigtvon=""; + $this->bestaetigtamum=""; + + $this->ergebniss=""; + $this->team_sieger=""; + + $this->matchbestaetigtamum=""; + $this->matchbestaetigtvon=""; + + $this->switchGewinner=''; + } -//-----Wettbewerb Matchdaten-------------------------------------------------------------------------------------------- - function getWettbewerbeinladung() - { - return $this->wettbewerbeinladung; - } - function setWettbewerbeinladung($wettbewerbeinladung) - { - $this->wettbewerbeinladung=$wettbewerbeinladung; - } -//-----match_id-------------------------------------------------------------------------------------------- - function getMatch_id() - { - return $this->match_id; - } - function setMatch_id($match_id) - { - $this->match_id=$match_id; - } -//-----gefordertvon-------------------------------------------------------------------------------------------- - function getGefordertvon() - { - return $this->gefordertvon; - } - function setGefordertvon($gefordertvon) - { - $this->gefordertvon=$gefordertvon; - } - -//-----UID-------------------------------------------------------------------------------------------- -// Match - Wettbewerb uid = Moderator - function getUid() - { - return $this->uid; - } - function setUid($uid) - { - $this->uid=$uid; - } - -//-----gefordertam-------------------------------------------------------------------------------------------- - function getGefordertamum() - { - return $this->gefordertamum; - } - function setGefordertamum($gefordertamum) - { - $this->gefordertamum=$gefordertamum; - } -//-----team_forderer-------------------------------------------------------------------------------------------- - function getTeam_forderer() - { - return $this->team_forderer; - } - function setTeam_forderer($team_forderer) - { - $this->team_forderer=$team_forderer; - } -//-----team_kurzbz--kompilitaet------------------------------------------------------------------------------------------ - function getTeam_kurzbz() - { - return $this->getTeam_forderer(); - } - function setTeam_kurzbz($team_kurzbz) - { - $this->setTeam_forderer($team_kurzbz); - } - -//-----team_gefordert-------------------------------------------------------------------------------------------- - function getTeam_gefordert() - { - return $this->team_gefordert; - } - function setTeam_gefordert($team_gefordert) - { - $this->team_gefordert=$team_gefordert; - } -//-----team_sieger-------------------------------------------------------------------------------------------- - function getTeam_sieger() - { - return $this->team_sieger; - } - function setTeam_sieger($team_sieger) - { - $this->team_sieger=$team_sieger; - } -//-----wettbewerb_kurzbz-------------------------------------------------------------------------------------------- - function getWettbewerb_kurzbz() - { - return $this->wettbewerb_kurzbz; - } - function setWettbewerb_kurzbz($wettbewerb_kurzbz="") - { - $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; - } -//-----matchdatumzeit-------------------------------------------------------------------------------------------- - function getMatchdatumzeit() - { - return $this->matchdatumzeit; - } - function setMatchdatumzeit($matchdatumzeit) - { - $this->matchdatumzeit=$matchdatumzeit; - } -//-----matchort-------------------------------------------------------------------------------------------- - function getMatchort() - { - return $this->matchort; - } - function setMatchort($matchort) - { - $this->matchort=$matchort; - } -//-----ergebniss-------------------------------------------------------------------------------------------- - function getErgebniss() - { - return $this->ergebniss; - } - function setErgebniss($ergebniss) - { - $this->ergebniss=$ergebniss; - } -//-----bestaetigtvon-------------------------------------------------------------------------------------------- - function getBestaetigtvon() - { - return $this->bestaetigtvon; - } - function setBestaetigtvon($bestaetigtvon) - { - $this->bestaetigtvon=$bestaetigtvon; - } -//-----bestaetigtamum-------------------------------------------------------------------------------------------- - function getBestaetigtamum() - { - return $this->bestaetigtamum; - } - function setBestaetigtamum($bestaetigtamum) - { - $this->bestaetigtamum=$bestaetigtamum; - } -//-----matchbestaetigtamum-------------------------------------------------------------------------------------------- - function getMatchbestaetigtamum() - { - return $this->matchbestaetigtamum; - } - function setMatchbestaetigtamum($matchbestaetigtamum) - { - $this->matchbestaetigtamum=$matchbestaetigtamum; - } -//-----matchbestaetigtvon-------------------------------------------------------------------------------------------- - function getMatchbestaetigtvon() - { - return $this->matchbestaetigtvon; - } - function setMatchbestaetigtvon($matchbestaetigtvon) - { - $this->matchbestaetigtvon=$matchbestaetigtvon; - } -//-----switchGewinner-------------------------------------------------------------------------------------------- -// Selektion des Datenlesen 0 nur nicht Gewonnene, 1 sind alle Gewonnene , leer alle - function getSwitchGewinner() - { - return $this->switchGewinner; - } - function setSwitchGewinner($switchGewinner) - { - $this->switchGewinner=$switchGewinner; - } - //------------------------------------------------------------------------------------------------- function saveWettbewerbeinladung($team_forderer="",$team_gefordert="",$match_id="") { @@ -294,18 +139,18 @@ class komune_wettbewerbeinladungen extends postgre_sql // Verarbeitungsvariablen $cSchemaSQL=$this->getschemaSQL(); $cMatch_id=$this->getMatch_id(); - $cTeam_forderer=$this->getTeam_forderer(); + $this->team_forderer=$this->getTeam_forderer(); $cTeam_gefordert=$this->getTeam_gefordert(); // Plausib - Pruefen ob Eingeladente Team nicht als Array ubergeben wurde ( gebraucht wird nur die Kurzbezeichnung) - if (is_array($cTeam_forderer) && isset($cTeam_forderer['team_forderer'])) - $cTeam_forderer=$cTeam_forderer['team_forderer']; - elseif (is_array($cTeam_forderer) && isset($cTeam_forderer[0]['team_forderer']) ) - $cTeam_forderer=$cTeam_forderer[0]['team_forderer']; - elseif (is_array($cTeam_forderer) && isset($cTeam_forderer['team_forderer'])) - $cTeam_forderer=$cTeam_forderer['team_kurzbz']; - elseif (is_array($cTeam_forderer) && isset($cTeam_forderer[0]['team_forderer']) ) - $cTeam_forderer=$cTeam_forderer[0]['team_forderer']; + if (is_array($this->team_forderer) && isset($this->team_forderer['team_forderer'])) + $this->team_forderer=$this->team_forderer['team_forderer']; + elseif (is_array($this->team_forderer) && isset($this->team_forderer[0]['team_forderer']) ) + $this->team_forderer=$this->team_forderer[0]['team_forderer']; + elseif (is_array($this->team_forderer) && isset($this->team_forderer['team_forderer'])) + $this->team_forderer=$this->team_forderer['team_kurzbz']; + elseif (is_array($this->team_forderer) && isset($this->team_forderer[0]['team_forderer']) ) + $this->team_forderer=$this->team_forderer[0]['team_forderer']; // Plausib - Pruefen ob Eingeladene Team nicht als Array ubergeben wurde ( gebraucht wird nur die Kurzbezeichnung) if (is_array($cTeam_gefordert) && isset($cTeam_gefordert['team_kurzbz'])) @@ -313,8 +158,8 @@ class komune_wettbewerbeinladungen extends postgre_sql elseif (is_array($cTeam_gefordert) && isset($cTeam_gefordert[0]['team_kurbz'])) $cTeam_gefordert=$cTeam_gefordert[0]['team_kurzbz']; - $cTeam_forderer=trim($cTeam_forderer); - if (empty($cTeam_forderer) ) + $this->team_forderer=trim($this->team_forderer); + if (empty($this->team_forderer) ) { $this->setError('Kein Einladung (Einladenter fehlt) möglich !'); return false; @@ -347,7 +192,7 @@ class komune_wettbewerbeinladungen extends postgre_sql return false; } - $cTmpSQL="BEGIN; "; + $qry="BEGIN; "; if ($this->getNewRecord()) // Neuanlage - Insert { if (!$this->getGefordertamum()) @@ -379,13 +224,13 @@ class komune_wettbewerbeinladungen extends postgre_sql $fildsValue.=(!empty($fildsValue)?',':'').$cTmpWert; } } - $cTmpSQL=" insert into ".$cSchemaSQL."tbl_match (".$fildsList.") values (".$fildsValue."); "; + $qry=" insert into ".$this->schemaSQL.".tbl_match (".$fildsList.") values (".$fildsValue."); "; } else { if (!$this->getMatch_id()) $this->setMatch_id($origWettbewerbeinladungen[0]['match_id']); - $cTmpSQL.=" update ".$cSchemaSQL."tbl_match set "; + $qry.=" update ".$this->schemaSQL.".tbl_match set "; $fildsValue=''; for ($fildIND=0;$fildINDwettbewerb_kurzbz=trim($origWettbewerbeinladungen[0]['wettbewerb_kurzbz']); $origWettbewerbeinladungen[0]['matchbestaetigtvon']=trim($origWettbewerbeinladungen[0]['matchbestaetigtvon']); $origWettbewerbeinladungen[0]['team_sieger']=trim($origWettbewerbeinladungen[0]['team_sieger']); if ($this->getMatchbestaetigtvon() && empty($origWettbewerbeinladungen[0]['matchbestaetigtvon']) - && trim($origWettbewerbeinladungen[0]['team_sieger'])==trim($cTeam_forderer)) // Der Forderer ist der Siehter den Rangtauschen + && trim($origWettbewerbeinladungen[0]['team_sieger'])==trim($this->team_forderer)) // Der Forderer ist der Siehter den Rangtauschen { // Rang des Geforderten ermitteln - $cTmpSQL_tmp="select rang from ".$cSchemaSQL."tbl_wettbewerbteam where upper(team_kurzbz)=upper('".$cTeam_gefordert."') and upper(wettbewerb_kurzbz)=upper('".$cWettbewerb_kurzbz."') FOR UPDATE ;"; - $this->fetch_object($cTmpSQL_tmp); + $qry_tmp="select rang from ".$this->schemaSQL.".tbl_wettbewerbteam where upper(team_kurzbz)=upper('".$cTeam_gefordert."') and upper(wettbewerb_kurzbz)=upper('".$this->wettbewerb_kurzbz."') FOR UPDATE ;"; + $this->fetch_object($qry_tmp); $iTmpRangGeforderter=$this->getResultSQL(); if (isset($iTmpRangGeforderter->rang)) $iTmpRangGeforderter=trim($iTmpRangGeforderter->rang); // Rang des Geforderten ermitteln - $cTmpSQL_tmp="select rang from ".$cSchemaSQL."tbl_wettbewerbteam where upper(team_kurzbz)=upper('".$cTeam_forderer."') and upper(wettbewerb_kurzbz)=upper('".$cWettbewerb_kurzbz."') FOR UPDATE ;"; + $qry_tmp="select rang from ".$this->schemaSQL.".tbl_wettbewerbteam where upper(team_kurzbz)=upper('".$this->team_forderer."') and upper(wettbewerb_kurzbz)=upper('".$this->wettbewerb_kurzbz."') FOR UPDATE ;"; - $this->fetch_object($cTmpSQL_tmp); + $this->fetch_object($qry_tmp); $iTmpRangFrorderer=$this->getResultSQL(); if (isset($iTmpRangFrorderer->rang)) $iTmpRangFrorderer=trim($iTmpRangFrorderer->rang); - $cTmpSQL.=" update ".$cSchemaSQL."tbl_wettbewerbteam "; - $cTmpSQL.="set rang=0 "; - $cTmpSQL.=" where upper(team_kurzbz)=upper('".$cTeam_gefordert."') and upper(wettbewerb_kurzbz)=upper('".$cWettbewerb_kurzbz."'); "; + $qry.=" update ".$this->schemaSQL.".tbl_wettbewerbteam "; + $qry.="set rang=0 "; + $qry.=" where upper(team_kurzbz)=upper('".$cTeam_gefordert."') and upper(wettbewerb_kurzbz)=upper('".$this->wettbewerb_kurzbz."'); "; - $cTmpSQL.=" update ".$cSchemaSQL."tbl_wettbewerbteam "; - $cTmpSQL.="set rang=".$iTmpRangGeforderter; - $cTmpSQL.=" where upper(team_kurzbz)=upper('".$cTeam_forderer."') and upper(wettbewerb_kurzbz)=upper('".$cWettbewerb_kurzbz."'); "; + $qry.=" update ".$this->schemaSQL.".tbl_wettbewerbteam "; + $qry.="set rang=".$iTmpRangGeforderter; + $qry.=" where upper(team_kurzbz)=upper('".$this->team_forderer."') and upper(wettbewerb_kurzbz)=upper('".$this->wettbewerb_kurzbz."'); "; - $cTmpSQL.=" update ".$cSchemaSQL."tbl_wettbewerbteam "; - $cTmpSQL.="set rang=".$iTmpRangFrorderer; - $cTmpSQL.=" where upper(team_kurzbz)=upper('".$cTeam_gefordert."') and upper(wettbewerb_kurzbz)=upper('".$cWettbewerb_kurzbz."'); "; + $qry.=" update ".$this->schemaSQL.".tbl_wettbewerbteam "; + $qry.="set rang=".$iTmpRangFrorderer; + $qry.=" where upper(team_kurzbz)=upper('".$cTeam_gefordert."') and upper(wettbewerb_kurzbz)=upper('".$this->wettbewerb_kurzbz."'); "; - $cTmpSQL.=" update ".$cSchemaSQL."tbl_wettbewerbteam "; - $cTmpSQL.="set punkte=3+punkte "; - $cTmpSQL.="where upper(wettbewerb_kurzbz)=upper('".$cWettbewerb_kurzbz."') and upper(team_kurzbz)=upper('".$origWettbewerbeinladungen[0]['team_sieger']."'); "; + $qry.=" update ".$this->schemaSQL.".tbl_wettbewerbteam "; + $qry.="set punkte=3+punkte "; + $qry.="where upper(wettbewerb_kurzbz)=upper('".$this->wettbewerb_kurzbz."') and upper(team_kurzbz)=upper('".$origWettbewerbeinladungen[0]['team_sieger']."'); "; - $cTmpSQL.=" update ".$cSchemaSQL."tbl_wettbewerbteam "; - $cTmpSQL.="set punkte=1+punkte "; - $cTmpSQL.="where upper(wettbewerb_kurzbz)=upper('".$cWettbewerb_kurzbz."') and upper(team_kurzbz)=upper('". ($origWettbewerbeinladungen[0]['team_sieger']==$cTeam_gefordert?$cTeam_forderer:$cTeam_gefordert)."'); "; + $qry.=" update ".$this->schemaSQL.".tbl_wettbewerbteam "; + $qry.="set punkte=1+punkte "; + $qry.="where upper(wettbewerb_kurzbz)=upper('".$this->wettbewerb_kurzbz."') and upper(team_kurzbz)=upper('". ($origWettbewerbeinladungen[0]['team_sieger']==$cTeam_gefordert?$this->team_forderer:$cTeam_gefordert)."'); "; } } - $cTmpSQL.=" COMMIT; "; -#exit($cTmpSQL); + $qry.=" COMMIT; "; +#exit($qry); // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); + $this->setStringSQL($qry); + unset($qry); $this->setResultSQL(null); if (!$this->dbQuery()) @@ -477,347 +322,247 @@ class komune_wettbewerbeinladungen extends postgre_sql } //------------------------------------------------------------------------------------------------- - function loadWettbewerbeinladungen() + + function loadWettbewerbeinladungen($match_id=null,$gefordertvon=null,$team_forderer=null,$team_einladungen=null,$wettbewerb_kurzbz=null,$switchGewinner=null) { - $this->setError(''); + + // Initialisierung - $cSchemaSQL=$this->getschemaSQL(); - - $match_id=$this->getMatch_id(); - $cTeam_forderer=$this->getTeam_forderer(); - $cTeam_kurzbz_einladungen=$this->getTeam_gefordert(); - $cWettbewerb_kurzbz=$this->getWettbewerb_kurzbz(); - $cGefordertvon=$this->getGefordertvon(); - - $bSwitchGewinner=$this->getSwitchGewinner(); + $this->result=array(); + $this->errormsg=''; - #SELECT TIMESTAMP WITHOUT TIME ZONE 'epoch' + 982384720 * INTERVAL '1 second'; - #select to_char(TIMESTAMP '2007-03-27 10:48:50.022', 'DD.MM.YYYY'); - #select to_char(TIMESTAMP '2007-03-27 10:48:50.022', 'HH24:MI:SS'); - $cTmpSQL=""; - $cTmpSQL.="SELECT * "; + if (!is_null($match_id)) + $this->match_id=$match_id; + + if (!is_null($gefordertvon)) + $this->gefordertvon=$gefordertvon; + + if (!is_null($team_forderer)) + $this->team_forderer=$team_forderer; + + if (!is_null($team_einladungen)) + $this->team_einladungen=$team_einladungen; + + if (!is_null($wettbewerb_kurzbz)) + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; - $cTmpSQL.=", to_char(matchdatumzeit, 'DD.MM.YYYY') as \"matchdatum\" "; - $cTmpSQL.=", to_char(matchdatumzeit, 'HH24:MI') as \"matchzeit\" "; + if (!is_null($switchGewinner)) + $this->switchGewinner=$switchGewinner; + + $qry=""; + $qry.="SELECT * "; - $cTmpSQL.=", to_char(gefordertamum, 'DD.MM.YYYY') as \"gefordertamumdatum\" "; - $cTmpSQL.=", to_char(gefordertamum, 'HH24:MI') as \"gefordertamumzeit\" "; + $qry.=", to_char(matchdatumzeit, 'DD.MM.YYYY') as \"matchdatum\" "; + $qry.=", to_char(matchdatumzeit, 'HH24:MI') as \"matchzeit\" "; - $cTmpSQL.=", to_char(bestaetigtamum, 'DD.MM.YYYY') as \"bestaetigtdatum\" "; - $cTmpSQL.=", to_char(bestaetigtamum, 'HH24:MI') as \"bestaetigtzeit\" "; + $qry.=", to_char(gefordertamum, 'DD.MM.YYYY') as \"gefordertamumdatum\" "; + $qry.=", to_char(gefordertamum, 'HH24:MI') as \"gefordertamumzeit\" "; - $cTmpSQL.=", to_char(matchbestaetigtamum, 'DD.MM.YYYY') as \"matchbestaetigtdatum\" "; - $cTmpSQL.=", to_char(matchbestaetigtamum, 'HH24:MI') as \"matchbestaetigtzeit\" "; + $qry.=", to_char(bestaetigtamum, 'DD.MM.YYYY') as \"bestaetigtdatum\" "; + $qry.=", to_char(bestaetigtamum, 'HH24:MI') as \"bestaetigtzeit\" "; - $cTmpSQL.=" FROM ".$cSchemaSQL."tbl_match "; + $qry.=", to_char(matchbestaetigtamum, 'DD.MM.YYYY') as \"matchbestaetigtdatum\" "; + $qry.=", to_char(matchbestaetigtamum, 'HH24:MI') as \"matchbestaetigtzeit\" "; - if (empty($match_id)) - $cTmpSQL.=" WHERE tbl_match.match_id>0 "; + $qry.=" FROM ".$this->schemaSQL.".tbl_match "; + + if (empty($this->match_id)) + $qry.=" WHERE tbl_match.match_id>0 "; else - $cTmpSQL.=" WHERE tbl_match.match_id='".addslashes(trim($match_id))."' "; - -# if (empty($cGefordertvon)) -# $cTmpSQL.=" and tbl_match.gefordertvon='".addslashes(trim($cGefordertvon))."' "; + $qry.=" WHERE tbl_match.match_id='".addslashes(trim($this->match_id))."' "; // Forderer - if (!is_array($cTeam_forderer) && !empty($cTeam_forderer) ) + if (!is_array($this->team_forderer) && !empty($this->team_forderer) ) { - $cTmpSQL.=" AND UPPER(tbl_match.team_forderer)=UPPER('".addslashes(trim($cTeam_forderer))."') "; + $qry.=" AND UPPER(tbl_match.team_forderer)=UPPER('".addslashes(trim($this->team_forderer))."') "; } - elseif (is_array($cTeam_forderer) && count($cTeam_forderer)>0 ) + elseif (is_array($this->team_forderer) && count($this->team_forderer)>0 ) { - if (isset($cTeam_forderer[0]['team_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $arrTmpTeam_kurzbz=array(); - for ($indZEILE=0;$indZEILEteam_forderer))."') "; } // Aaufforderungen - Einladung - if (!is_array($cTeam_kurzbz_einladungen) && !empty($cTeam_kurzbz_einladungen) ) + if (!is_array($this->team_einladungen) && !empty($this->team_einladungen) ) { - $cTmpSQL.=" AND UPPER(tbl_match.team_gefordert)=UPPER('".addslashes(trim($cTeam_kurzbz_einladungen))."') "; + $qry.=" AND UPPER(tbl_match.team_gefordert)=UPPER('".addslashes(trim($this->team_einladungen))."') "; } - elseif (is_array($cTeam_kurzbz_einladungen) && count($cTeam_kurzbz_einladungen)>0 ) + elseif (is_array($this->team_einladungen) && count($this->team_einladungen)>0 ) { - if (isset($cTeam_kurzbz_einladungen[0]['team_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $arrTmpTeam_kurzbz=array(); - for ($indZEILE=0;$indZEILEteam_einladungen))."') "; } // GEForderte - if (!is_array($cWettbewerb_kurzbz) && !empty($cWettbewerb_kurzbz) ) + if (!is_array($this->wettbewerb_kurzbz) && !empty($this->wettbewerb_kurzbz) ) { - $cTmpSQL.=" AND UPPER(tbl_match.wettbewerb_kurzbz)=UPPER('".addslashes(trim($cWettbewerb_kurzbz))."') "; + $qry.=" AND UPPER(tbl_match.wettbewerb_kurzbz)=UPPER('".addslashes(trim($this->wettbewerb_kurzbz))."') "; } - elseif (is_array($cWettbewerb_kurzbz) && count($cWettbewerb_kurzbz)>0 ) + elseif (is_array($this->wettbewerb_kurzbz) && count($this->wettbewerb_kurzbz)>0 ) { - if (isset($cWettbewerb_kurzbz[0]['wettbewerb_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $arrWettbewerb_kurzbz=array(); - for ($indZEILE=0;$indZEILEwettbewerb_kurzbz))."') "; } // Listenformen bestimmen - if ($bSwitchGewinner=='0') - $cTmpSQL.=" AND ( tbl_match.matchbestaetigtvon <='' or (tbl_match.matchbestaetigtvon IS NULL) ) "; - elseif ($bSwitchGewinner=='1') - $cTmpSQL.=" AND tbl_match.matchbestaetigtvon > '' "; + if ($this->switchGewinner=='0') + $qry.=" AND ( tbl_match.matchbestaetigtvon <='' or (tbl_match.matchbestaetigtvon IS NULL) ) "; + elseif ($this->switchGewinner=='1') + $qry.=" AND tbl_match.matchbestaetigtvon > '' "; - $cTmpSQL.=" OFFSET 0 LIMIT ALL FOR SHARE ;"; - - // Entfernen der Temporaeren Variablen aus dem Speicher - unset($cSchemaSQL); - unset($cTeam_kurzbz); - unset($cTeam_kurzbz_einladungen); - unset($cWettbewerb_kurzbz); - unset($cGefordertvond); - // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); - - $this->setResultSQL(null); - $this->setWettbewerbeinladung(null); - - if (!$this->fetch_all()) - return false; - $this->setWettbewerbeinladung($this->getResultSQL()); - $this->setResultSQL(null); - - return $this->getWettbewerbeinladung(); + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result[]=$row; + } + return $this->result; + } + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim lesen der Wettbewerbstypen'; + return false; + } + return false; } //------------------------------------------------------------------------------------------------- - function loadWettbewerbeinladungenForderungstage() + function loadWettbewerbeinladungenForderungstage($match_id=null,$gefordertvon=null,$team_forderer=null,$team_einladungen=null,$wettbewerb_kurzbz=null) { - $this->setError(''); - $cSchemaSQL=$this->getschemaSQL(); - - $match_id=$this->getMatch_id(); - $cTeam_forderer=$this->getTeam_forderer(); - $cTeam_kurzbz_einladungen=$this->getTeam_gefordert(); - $cWettbewerb_kurzbz=$this->getWettbewerb_kurzbz(); + $this->result=array(); + $this->errormsg=''; - $cUid=$this->getGefordertvon(); - - $cTmpSQL=""; - $cTmpSQL.="SELECT * "; + if (!is_null($match_id)) + $this->match_id=$match_id; + + if (!is_null($gefordertvon)) + $this->gefordertvon=$gefordertvon; + + if (!is_null($team_forderer)) + $this->team_forderer=$team_forderer; + + if (!is_null($team_einladungen)) + $this->team_einladungen=$team_einladungen; + + if (!is_null($wettbewerb_kurzbz)) + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; + + $qry=""; + $qry.="SELECT * "; + $qry.=", to_char(matchdatumzeit, 'DD.MM.YYYY') as \"matchdatum\" "; + $qry.=", to_char(matchdatumzeit, 'HH24:MI') as \"matchzeit\" "; - $cTmpSQL.=", to_char(matchdatumzeit, 'DD.MM.YYYY') as \"matchdatum\" "; - $cTmpSQL.=", to_char(matchdatumzeit, 'HH24:MI') as \"matchzeit\" "; + $qry.=", to_char(gefordertamum, 'DD.MM.YYYY') as \"gefordertamumdatum\" "; + $qry.=", to_char(gefordertamum, 'HH24:MI') as \"gefordertamumzeit\" "; - $cTmpSQL.=", to_char(gefordertamum, 'DD.MM.YYYY') as \"gefordertamumdatum\" "; - $cTmpSQL.=", to_char(gefordertamum, 'HH24:MI') as \"gefordertamumzeit\" "; + $qry.=", to_char(bestaetigtamum, 'DD.MM.YYYY') as \"bestaetigtdatum\" "; + $qry.=", to_char(bestaetigtamum, 'HH24:MI') as \"bestaetigtzeit\" "; - $cTmpSQL.=", to_char(bestaetigtamum, 'DD.MM.YYYY') as \"bestaetigtdatum\" "; - $cTmpSQL.=", to_char(bestaetigtamum, 'HH24:MI') as \"bestaetigtzeit\" "; - - $cTmpSQL.=", to_char(matchbestaetigtamum, 'DD.MM.YYYY') as \"matchbestaetigtdatum\" "; - $cTmpSQL.=", to_char(matchbestaetigtamum, 'HH24:MI') as \"matchbestaetigtzeit\" "; + $qry.=", to_char(matchbestaetigtamum, 'DD.MM.YYYY') as \"matchbestaetigtdatum\" "; + $qry.=", to_char(matchbestaetigtamum, 'HH24:MI') as \"matchbestaetigtzeit\" "; - - $cTmpSQL.=" - ,1+extract('day' from (age(".$cSchemaSQL."tbl_match.gefordertamum))) as gefordertamum_diff - ,1+extract('day' from (age(".$cSchemaSQL."tbl_match.bestaetigtamum,".$cSchemaSQL."tbl_match.gefordertamum))) as bestaetigtamum_diff - ,1+extract('day' from (age(".$cSchemaSQL."tbl_match.matchdatumzeit,".$cSchemaSQL."tbl_match.bestaetigtamum))) as matchdatumzeit_diff - ,1+extract('day' from (age(".$cSchemaSQL."tbl_match.matchbestaetigtamum,".$cSchemaSQL."tbl_match.matchdatumzeit))) as matchbestaetigtamum_diff - - ,1+extract('day' from (age(".$cSchemaSQL."tbl_match.gefordertamum))) as gefordertamum_tag_diff - ,1+extract('day' from (age(".$cSchemaSQL."tbl_match.bestaetigtamum))) as bestaetigtamum_tag_diff - ,1+extract('day' from (age(".$cSchemaSQL."tbl_match.matchdatumzeit))) as matchdatumzeit_tag_diff - ,1+extract('day' from (age(".$cSchemaSQL."tbl_match.matchbestaetigtamum))) as matchbestaetigtamum_tag_diff + $qry.=" + ,1+extract('day' from (age(".$this->schemaSQL.".tbl_match.gefordertamum))) as gefordertamum_diff + ,1+extract('day' from (age(".$this->schemaSQL.".tbl_match.bestaetigtamum,".$this->schemaSQL.".tbl_match.gefordertamum))) as bestaetigtamum_diff + ,1+extract('day' from (age(".$this->schemaSQL.".tbl_match.matchdatumzeit,".$this->schemaSQL.".tbl_match.bestaetigtamum))) as matchdatumzeit_diff + ,1+extract('day' from (age(".$this->schemaSQL.".tbl_match.matchbestaetigtamum,".$this->schemaSQL.".tbl_match.matchdatumzeit))) as matchbestaetigtamum_diff + ,1+extract('day' from (age(".$this->schemaSQL.".tbl_match.gefordertamum))) as gefordertamum_tag_diff + ,1+extract('day' from (age(".$this->schemaSQL.".tbl_match.bestaetigtamum))) as bestaetigtamum_tag_diff + ,1+extract('day' from (age(".$this->schemaSQL.".tbl_match.matchdatumzeit))) as matchdatumzeit_tag_diff + ,1+extract('day' from (age(".$this->schemaSQL.".tbl_match.matchbestaetigtamum))) as matchbestaetigtamum_tag_diff "; - - $cTmpSQL.=" from ".$cSchemaSQL."tbl_wettbewerbtyp,".$cSchemaSQL."tbl_wettbewerb,".$cSchemaSQL."tbl_match - - where ".$cSchemaSQL."tbl_wettbewerbtyp.wbtyp_kurzbz=".$cSchemaSQL."tbl_wettbewerb.wbtyp_kurzbz - and ".$cSchemaSQL."tbl_match.wettbewerb_kurzbz=".$cSchemaSQL."tbl_wettbewerb.wettbewerb_kurzbz - and (".$cSchemaSQL."tbl_match.matchbestaetigtvon IS NULL or ".$cSchemaSQL."tbl_match.matchbestaetigtvon<='') + $qry.=" from ".$this->schemaSQL.".tbl_wettbewerbtyp,".$this->schemaSQL.".tbl_wettbewerb,".$this->schemaSQL.".tbl_match + where ".$this->schemaSQL.".tbl_wettbewerbtyp.wbtyp_kurzbz=".$this->schemaSQL.".tbl_wettbewerb.wbtyp_kurzbz + and ".$this->schemaSQL.".tbl_match.wettbewerb_kurzbz=".$this->schemaSQL.".tbl_wettbewerb.wettbewerb_kurzbz + and (".$this->schemaSQL.".tbl_match.matchbestaetigtvon IS NULL or ".$this->schemaSQL.".tbl_match.matchbestaetigtvon<='') "; -# and ( extract('day' from (age(".$cSchemaSQL."tbl_match.gefordertamum))) >=".$cSchemaSQL."tbl_wettbewerb.forderungstage -# or extract('day' from (age(".$cSchemaSQL."tbl_match.bestaetigtamum,".$cSchemaSQL."tbl_match.gefordertamum)))>=".$cSchemaSQL."tbl_wettbewerb.forderungstage -# or extract('day' from (age(".$cSchemaSQL."tbl_match.matchdatumzeit,".$cSchemaSQL."tbl_match.bestaetigtamum)))>=".$cSchemaSQL."tbl_wettbewerb.forderungstage -# or extract('day' from (age(".$cSchemaSQL."tbl_match.matchbestaetigtamum,".$cSchemaSQL."tbl_match.matchdatumzeit)))>=".$cSchemaSQL."tbl_wettbewerb.forderungstage -# ) - - if (!empty($match_id)) - $cTmpSQL.=" and tbl_match.match_id='".addslashes(trim($match_id))."' "; + if (!empty($this->match_id)) + $qry.=" and tbl_match.match_id='".addslashes(trim($this->match_id))."' "; - if (!empty($cUid)) - $cTmpSQL.=" and tbl_wettbewerb.uid='".addslashes(trim($cUid))."' "; + if (!empty($this->gefordertvon)) + $qry.=" and tbl_wettbewerb.uid='".addslashes(trim($this->gefordertvon))."' "; // Forderer - if (!is_array($cTeam_forderer) && !empty($cTeam_forderer) ) + if (!is_array($this->team_forderer) && !empty($this->team_forderer) ) { - $cTmpSQL.=" AND UPPER(tbl_match.team_forderer)=UPPER('".addslashes(trim($cTeam_forderer))."') "; + $qry.=" AND UPPER(tbl_match.team_forderer)=UPPER('".addslashes(trim($this->team_forderer))."') "; } - elseif (is_array($cTeam_forderer) && count($cTeam_forderer)>0 ) + elseif (is_array($this->team_forderer) && count($this->team_forderer)>0 ) { - if (isset($cTeam_forderer[0]['team_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $arrTmpTeam_kurzbz=array(); - for ($indZEILE=0;$indZEILEteam_forderer))."') "; } + // Aaufforderungen - Einladung - - if (!is_array($cTeam_kurzbz_einladungen) && !empty($cTeam_kurzbz_einladungen) ) + if (!is_array($this->team_einladungen) && !empty($this->team_einladungen) ) { - $cTmpSQL.=" AND UPPER(tbl_match.team_gefordert)=UPPER('".addslashes(trim($cTeam_kurzbz_einladungen))."') "; + $qry.=" AND UPPER(tbl_match.team_gefordert)=UPPER('".addslashes(trim($this->team_einladungen))."') "; } - elseif (is_array($cTeam_kurzbz_einladungen) && count($cTeam_kurzbz_einladungen)>0 ) + elseif (is_array($this->team_einladungen) && count($this->team_einladungen)>0 ) { - if (isset($cTeam_kurzbz_einladungen[0]['team_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $arrTmpTeam_kurzbz=array(); - for ($indZEILE=0;$indZEILEteam_einladungen))."') "; } - // GEForderte - - if (!is_array($cWettbewerb_kurzbz) && !empty($cWettbewerb_kurzbz) ) + // Wettbewerb + if (!is_array($this->wettbewerb_kurzbz) && !empty($this->wettbewerb_kurzbz) ) { - $cTmpSQL.=" AND UPPER(tbl_match.wettbewerb_kurzbz)=UPPER('".addslashes(trim($cWettbewerb_kurzbz))."') "; + $qry.=" AND UPPER(tbl_match.wettbewerb_kurzbz)=UPPER('".addslashes(trim($this->wettbewerb_kurzbz))."') "; } - elseif (is_array($cWettbewerb_kurzbz) && count($cWettbewerb_kurzbz)>0 ) + elseif (is_array($this->wettbewerb_kurzbz) && count($this->wettbewerb_kurzbz)>0 ) { - if (isset($cWettbewerb_kurzbz[0]['wettbewerb_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $arrWettbewerb_kurzbz=array(); - for ($indZEILE=0;$indZEILEwettbewerb_kurzbz))."') "; } - $cTmpSQL.=" OFFSET 0 LIMIT ALL FOR SHARE OF tbl_match ;"; -#exit($cTmpSQL.Test($cTeam_kurzbz_einladungen).implode("','",$cTeam_kurzbz_einladungen)); - - // Entfernen der Temporaeren Variablen aus dem Speicher - unset($cSchemaSQL); - unset($cTeam_kurzbz); - unset($cTeam_kurzbz_einladungen); - unset($cWettbewerb_kurzbz); - unset($cUid); - // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); - - $this->setResultSQL(null); - $this->setWettbewerbeinladung(null); - - if (!$this->fetch_all()) - return false; - $this->setWettbewerbeinladung($this->getResultSQL()); - $this->setResultSQL(null); - return $this->getWettbewerbeinladung(); + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result[]=$row; + } + return $this->result; + } + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim lesen der Wettbewerbstypen'; + return false; + } + return false; } //------------------------------------------------------------------------------------------------- - function unloadWettbewerbeinladungen() + function unloadWettbewerbeinladungen($match_id=null) { - $this->setError(''); - $cSchemaSQL=$this->getschemaSQL(); - - $match_id=$this->getMatch_id(); - if (empty($match_id)) + $this->result=array(); + $this->errormsg=''; + + if (!is_null($match_id)) + $this->match_id=$match_id; + + if (empty($this->match_id) || is_null($this->match_id)) { - $this->setError('Keine Match ID gefunden!'); + $this->errormsg = 'Keine Match ID gefunden!'; return false; } - $cTmpSQL=""; - $cTmpSQL.="delete from ".$cSchemaSQL."tbl_match "; - $cTmpSQL.=" * "; - $cTmpSQL.=" where tbl_match.match_id='".addslashes(trim($match_id))."' "; - - // Entfernen der Temporaeren Variablen aus dem Speicher - unset($cSchemaSQL); - unset($match_id); - // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); - - $this->setResultSQL(null); - $this->setWettbewerbeinladung(null); - if (!$this->fetch_object()) - return false; - $this->setResultSQL(null); - return true; + + $qry=""; + $qry.="delete from ".$this->schemaSQL.".tbl_match "; + $qry.=" * "; + $qry.=" where tbl_match.match_id='".addslashes(trim($this->match_id))."' "; + if($this->db_query($qry)) + { + return true; + } + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim lesen der Wettbewerbstypen'; + return false; + } + return false; } diff --git a/include/komune_wettbewerbteam.class.php b/include/komune_wettbewerbteam.class.php index 0226e3e7a..6be9b79b7 100644 --- a/include/komune_wettbewerbteam.class.php +++ b/include/komune_wettbewerbteam.class.php @@ -35,134 +35,157 @@ * @return - kein Retourn des Konstruktors * */ -include_once(dirname(__FILE__)."/postgre_sql.class.php"); -class komune_wettbewerbteam extends postgre_sql + +require_once(dirname(__FILE__).'/basis_db.class.php'); +class komune_wettbewerbteam extends basis_db { - protected $newWettbewerbteam; - protected $wettbewerbteam; + public $result; + public $new=false; // boolean + - protected $uid; - protected $team_kurzbz; - protected $team_kurzbz_old; - protected $wettbewerb_kurzbz; + public $wbtyp_kurzbz; + +// tbl_team + public $team_kurzbz; //character varying(16) + public $bezeichnung; //character varying(128) + public $beschreibung; //text + public $logo; //text -//-----Konstruktor - function komune_wettbewerbteam($connectSQL,$uid="",$team_kurzbz="",$wettbewerb_kurzbz="") +// tbl_teambenutzer + public $uid; // varying(16) + // im tbl_team public $team_kurzbz //character + +//tbl_wettbewerbteam + // im tbl_team public $team_kurzbz; // character varying(16) + public $rang; // smallint Alter Drop + public $punkte; // numeric(8,2) Alter Drop + public $wettbewerb_kurzb; // character varying(16) + + public $schemaSQL="kommune"; // string Datenbankschema + +//-----Konstruktor + function __construct($wbtyp_kurzbz="",$wettbewerb_kurzbz="",$uid="",$team_kurzbz="") { - $this->InitWettbewerbteam(); - - $this->setConnectSQL($connectSQL); - $this->setSchemaSQL('kommune'); - // Parameter DB Schema - - $this->setuid($uid); - $this->setTeam_kurzbz($team_kurzbz); - $this->setWettbewerb_kurzbz($wettbewerb_kurzbz); + parent::__construct(); + + $this->InitWettbewerb(); + + $this->wbtyp_kurzbz=$wbtyp_kurzbz; + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; + $this->uid=$uid; + $this->team_kurzbz=$team_kurzbz; } - //-----Initialisierung-------------------------------------------------------------------------------------------- - function InitWettbewerbteam() + function InitWettbewerb() { - $this->setError(''); + $this->new=false; + $this->errormsg=''; + $this->result=array(); - $this->setNewWettbewerbteam(''); - $this->setWettbewerbteam(''); - - $this->setuid(''); - $this->setTeam_kurzbz(''); - $this->setTeam_kurzbz_old(''); - $this->setWettbewerb_kurzbz(''); - } + $this->wbtyp_kurzbz=''; + $this->wettbewerb_kurzbz=''; + $this->uid=''; + + + $this->team_kurzbz=''; + $this->bezeichnung=''; + $this->beschreibung=''; + $this->logo=''; -//-----Neuer Datensatz-------------------------------------------------------------------------------------------- - function getNewWettbewerbteam() - { - return $this->newWettbewerbteam; - } - function setNewWettbewerbteam($newWettbewerbteam) - { - $this->newWettbewerbteam=$newWettbewerbteam; - } -//-----Aenderung Datensatz wird wie Neuanlage gehandhabt ------------------------------------------------------------- - function getUpdWettbewerbteam() - { - return $this->newWettbewerbteam; - } - function setUpdWettbewerbteam($newWettbewerbteam) - { - $this->newWettbewerbteam=trim($newWettbewerbteam); - } -//-----Aktueller Datensatz-------------------------------------------------------------------------------------------- - function getWettbewerbteam() - { - return $this->wettbewerbteam; - } - function setWettbewerbteam($wettbewerbteam) - { - $this->wettbewerbteam=$wettbewerbteam; - } -//-----team_kurzbz-------------------------------------------------------------------------------------------- - function getTeam_kurzbz() - { - return $this->team_kurzbz; - } - function setTeam_kurzbz($team_kurzbz) - { - $this->team_kurzbz=trim($team_kurzbz); - } -//-----team_kurzbz-------------------------------------------------------------------------------------------- - function getTeam_kurzbz_old() - { - return $this->team_kurzbz_old; - } - function setTeam_kurzbz_old($team_kurzbz_old) - { - $this->team_kurzbz_old=trim($team_kurzbz_old); - } -//-----uid-------------------------------------------------------------------------------------------- - function getUid() - { - return $this->uid; - } - function setUid($uid) - { - $this->uid=trim($uid); - } -//-----wettbewerb_kurzbz-------------------------------------------------------------------------------------------- - function getWettbewerb_kurzbz() - { - return $this->wettbewerb_kurzbz; - } - function setWettbewerb_kurzbz($wettbewerb_kurzbz="") - { - $this->wettbewerb_kurzbz=trim($wettbewerb_kurzbz); + $this->rang='1'; + $this->punkte='0'; } + //------------------------------------------------------------------------------------------------- - function saveWettbewerbteam($newWettbewerbteam="") +// ------------------------ Wettbewerbteam +//------------------------------------------------------------------------------------------------- + +//------------------------------------------------------------------------------------------------- + function saveWettbewerbteam() { - // Initialisierung - $this->setError(''); + // Initialisieren + $this->errormsg=''; + $qry=""; + + $fildsList=''; + $fildsValue=''; + +/* + tbl_wettbewerbteam + public $team_kurzbz; // character varying(16) + public $wettbewerb_kurzb; // character varying(16) + public $rang; // smallint Alter Drop + public $punkte; // numeric(8,2) Alter Drop +*/ + + if (empty($this->wettbewerb_kurzb) || $this->wettbewerb_kurzb==null ) + { + $this->errormsg='Wettbewerb fehlt!'; + return false; + } + if (empty($this->team_kurzbz) || $this->team_kurzbz==null ) + { + $this->errormsg='Teambezeichnung fehlt!'; + return false; + } + if (!is_numeric($this->rang)) + $this->rang= + if (!is_numeric($this->punkte)) + $this->punkte=0; + + if($this->new) + { - // Plausib - if (!empty($newWettbewerbteam)) - $this->setNewWettbewerbteam($newWettbewerbteam); + $fildsList.='team_kurzbz,'; + $fildsList.='wettbewerb_kurzb,'; + $fildsList.='rang,'; + $fildsList.='punkte'; + $fildsValue.="'".addslashes($this->team_kurzbz)."',"; + $fildsValue.="'".addslashes($this->wettbewerb_kurzb)."',"; + $fildsValue.="".addslashes($this->rang).","; + $fildsValue.="".addslashes($this->punkte).""; + + $qry=" insert into ".$this->schemaSQL.".tbl_wettbewerbtyp (".$fildsList.") values (".$fildsValue."); "; + } + else + { + $fildsValue.=(!empty($fildsValue)?',':'')."bezeichnung='".addslashes($this->bezeichnung)."'"; + $fildsValue.=(!empty($fildsValue)?',':'')."farbe='".addslashes($this->farbe)."'"; + + $qry.=" update ".$this->schemaSQL.".tbl_wettbewerbtyp set "; + $qry.=$fildsValue; + $qry.=" where wbtyp_kurzbz='".addslashes($this->wbtyp_kurzbz)."' "; + } + if($resurce=$this->db_query($qry)) + return $resurce; + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim speichern des Datensatzes '; + return false; + } + + + + return false; + if (!is_array($this->getNewWettbewerbteam())) { - $this->setError('Kein Wettbewerbsteam übergeben'); + $this->errormsg='Kein Wettbewerbsteam übergeben'; return false; } $newWettbewerbteam=$this->getNewWettbewerbteam(); // Daten uebernahme $cSchemaSQL=$this->getSchemaSQL(); - $cTeam_kurzbz=$this->getTeam_kurzbz(); + $this->team_kurzbz=$this->getTeam_kurzbz(); // Aenderungen muessen mit dem Team_kurzbz_old gekennzeichnet werden. Ansonst koennten falsche Daten geaendert werden - $cTeam_kurzbz_old=$this->getTeam_kurzbz_old(); + $this->team_kurzbz_old=$this->getTeam_kurzbz_old(); - $cUserUID=$this->getUid(); // Vor der Verarbeitung sicherstellen das Alle Anwender gelesen werden - $this->setUid(''); + $cUserUID=$this->uid; // Vor der Verarbeitung sicherstellen das Alle Anwender gelesen werden + $this->uid=''; $this->setNewRecord(false); if (!$origWettbewerbteam=$this->loadWettbewerbteam()) @@ -174,18 +197,18 @@ class komune_wettbewerbteam extends postgre_sql $this->setUid($cUserUID); unset($cUserUID); - if ($origWettbewerbteam && empty($cTeam_kurzbz_old)) // Datenrec bereits vorhanden + if ($origWettbewerbteam && empty($this->team_kurzbz_old)) // Datenrec bereits vorhanden { - $this->setError('Das Team '.$cTeam_kurzbz.' ist bereits angelegt!'); + $this->setError('Das Team '.$this->team_kurzbz.' ist bereits angelegt!'); return false; } $bTmpNewRecord=$this->getNewRecord(); // Neuanlage Switch sichern // Aus dem Array newWettbewerbteam die Teaminformationen heraus holen - $cWettbewerb_kurzbz=(isset($newWettbewerbteam['wettbewerb_kurzbz']) ? $newWettbewerbteam['wettbewerb_kurzbz'] : ''); - if (empty($cWettbewerb_kurzbz)) - $cWettbewerb_kurzbz=(isset($newWettbewerbteam[0]['wettbewerb_kurzbz']) ? $newWettbewerbteam[0]['wettbewerb_kurzbz'] : ''); + $this->wettbewerb_kurzbz=(isset($newWettbewerbteam['wettbewerb_kurzbz']) ? $newWettbewerbteam['wettbewerb_kurzbz'] : ''); + if (empty($this->wettbewerb_kurzbz)) + $this->wettbewerb_kurzbz=(isset($newWettbewerbteam[0]['wettbewerb_kurzbz']) ? $newWettbewerbteam[0]['wettbewerb_kurzbz'] : ''); $team_bezeichnung=(isset($newWettbewerbteam['bezeichnung']) ? $newWettbewerbteam['bezeichnung'] : ''); $team_beschreibung=(isset($newWettbewerbteam['beschreibung']) ? $newWettbewerbteam['beschreibung'] : ''); @@ -202,24 +225,24 @@ class komune_wettbewerbteam extends postgre_sql } - $cTmpSQL="select * from ".$cSchemaSQL."tbl_teambenutzer , ".$cSchemaSQL."tbl_wettbewerbteam "; - $cTmpSQL.=" where tbl_wettbewerbteam.team_kurzbz =tbl_teambenutzer.team_kurzbz "; - $cTmpSQL.=" and not ( UPPER(tbl_teambenutzer.team_kurzbz)=E'".addslashes(trim(strtoupper($cTeam_kurzbz_old)))."' and UPPER(tbl_teambenutzer.team_kurzbz)=E'".addslashes(trim(strtoupper($cTeam_kurzbz)))."' ) "; - $cTmpSQL.=" and UPPER(tbl_teambenutzer.uid) in ('".strtoupper(implode("','",$array_userUID))."') "; - $cTmpSQL.=" and UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz)=E'".addslashes(trim(strtoupper($cWettbewerb_kurzbz)))."' ; "; + $qry="select * from ".$this->schemaSQL.".tbl_teambenutzer , ".$this->schemaSQL.".tbl_wettbewerbteam "; + $qry.=" where tbl_wettbewerbteam.team_kurzbz =tbl_teambenutzer.team_kurzbz "; + $qry.=" and not ( UPPER(tbl_teambenutzer.team_kurzbz)=E'".addslashes(trim(strtoupper($this->team_kurzbz_old)))."' and UPPER(tbl_teambenutzer.team_kurzbz)=E'".addslashes(trim(strtoupper($this->team_kurzbz)))."' ) "; + $qry.=" and UPPER(tbl_teambenutzer.uid) in ('".strtoupper(implode("','",$array_userUID))."') "; + $qry.=" and UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz)=E'".addslashes(trim(strtoupper($this->wettbewerb_kurzbz)))."' ; "; // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); + $this->setStringSQL($qry); + unset($qry); $this->setResultSQL(null); if ($this->fetch_all()) { - $cTmpSQL=$this->getResultSQL(); + $qry=$this->getResultSQL(); $this->setResultSQL(null); -# exit(kommune_Test($cTmpSQL)); - if (is_array($cTmpSQL)) +# exit(kommune_Test($qry)); + if (is_array($qry)) { - for ($zeileIND=0;$zeileINDsetError(sprintf('Der Spieler %s wurde bereits im Team %s im Wettbewerb %s gefunden ! ',$cTmpSQL[$zeileIND]['uid'],$cTmpSQL[$zeileIND]['team_kurzbz'],$cTmpSQL[$zeileIND]['wettbewerb_kurzbz'])); + for ($zeileIND=0;$zeileINDsetError(sprintf('Der Spieler %s wurde bereits im Team %s im Wettbewerb %s gefunden ! ',$qry[$zeileIND]['uid'],$qry[$zeileIND]['team_kurzbz'],$qry[$zeileIND]['wettbewerb_kurzbz'])); return false; } } @@ -238,17 +261,17 @@ class komune_wettbewerbteam extends postgre_sql $this->setNewRecord($bTmpNewRecord); - $cTmpSQL="BEGIN; "; + $qry="BEGIN; "; // Neuanlage - Insert if ($this->getNewRecord()) { - $cTmpSQL.=" INSERT into ".$cSchemaSQL."tbl_team (team_kurzbz,bezeichnung,beschreibung,logo) VALUES (E'".addslashes(trim($cTeam_kurzbz))."',E'".addslashes(trim($team_bezeichnung))."',E'".addslashes(trim($team_beschreibung))."',E'".addslashes(trim($team_logo))."'); "; + $qry.=" INSERT into ".$this->schemaSQL.".tbl_team (team_kurzbz,bezeichnung,beschreibung,logo) VALUES (E'".addslashes(trim($this->team_kurzbz))."',E'".addslashes(trim($team_bezeichnung))."',E'".addslashes(trim($team_beschreibung))."',E'".addslashes(trim($team_logo))."'); "; for ($zeileIND=0;$zeileINDschemaSQL.".tbl_teambenutzer (uid, team_kurzbz) VALUES (E'".addslashes(trim($array_userUID[$zeileIND]))."',E'".addslashes(trim($this->team_kurzbz))."'); "; } - $cTmpSQL.=" INSERT into ".$cSchemaSQL."tbl_wettbewerbteam (team_kurzbz, wettbewerb_kurzbz,rang,punkte) VALUES (E'".$cTeam_kurzbz."',E'".addslashes(trim($cWettbewerb_kurzbz))."',(select 1+count(wettbewerb_kurzbz) from ".$cSchemaSQL."tbl_wettbewerbteam where rang<9999 and upper(wettbewerb_kurzbz)=upper(E'".addslashes(trim($cWettbewerb_kurzbz))."')),0); "; + $qry.=" INSERT into ".$this->schemaSQL.".tbl_wettbewerbteam (team_kurzbz, wettbewerb_kurzbz,rang,punkte) VALUES (E'".$this->team_kurzbz."',E'".addslashes(trim($this->wettbewerb_kurzbz))."',(select 1+count(wettbewerb_kurzbz) from ".$this->schemaSQL.".tbl_wettbewerbteam where rang<9999 and upper(wettbewerb_kurzbz)=upper(E'".addslashes(trim($this->wettbewerb_kurzbz))."')),0); "; } else @@ -257,11 +280,11 @@ class komune_wettbewerbteam extends postgre_sql # if ($team_logo==null) $team_logo=(isset($origWettbewerbteam[0]['logo']) ? $origWettbewerbteam[0]['logo'] : null); # if ($team_rang==null) $team_rang=(isset($origWettbewerbteam[0]['rang']) ? $origWettbewerbteam[0]['rang'] : null); - $cTmpSQL.=" UPDATE ".$cSchemaSQL."tbl_team "; - $cTmpSQL.=" set team_kurzbz=E'".addslashes(trim($cTeam_kurzbz))."',bezeichnung=E'".addslashes(trim($team_bezeichnung))."',beschreibung=E'".addslashes(trim($team_beschreibung))."'".($team_logo!=null?",logo=E'".addslashes(trim($team_logo))."'":""); - $cTmpSQL.=" WHERE upper(team_kurzbz)=upper(E'".$cTeam_kurzbz_old."'); "; + $qry.=" UPDATE ".$this->schemaSQL.".tbl_team "; + $qry.=" set team_kurzbz=E'".addslashes(trim($this->team_kurzbz))."',bezeichnung=E'".addslashes(trim($team_bezeichnung))."',beschreibung=E'".addslashes(trim($team_beschreibung))."'".($team_logo!=null?",logo=E'".addslashes(trim($team_logo))."'":""); + $qry.=" WHERE upper(team_kurzbz)=upper(E'".$this->team_kurzbz_old."'); "; - $cTmpSQL.=" UPDATE ".$cSchemaSQL."tbl_wettbewerbteam set team_kurzbz=E'".addslashes(trim($cTeam_kurzbz))."'".($team_rang!=null?",rang=".$team_rang:"")." WHERE upper(team_kurzbz)=upper(E'".$cTeam_kurzbz_old."'); "; + $qry.=" UPDATE ".$this->schemaSQL.".tbl_wettbewerbteam set team_kurzbz=E'".addslashes(trim($this->team_kurzbz))."'".($team_rang!=null?",rang=".$team_rang:"")." WHERE upper(team_kurzbz)=upper(E'".$this->team_kurzbz_old."'); "; // Alle bisher bestehenden DB-Eintraege in Array lesen fuer spaeteren vergleich ob Update/Delete reset($origWettbewerbteam); @@ -280,12 +303,12 @@ class komune_wettbewerbteam extends postgre_sql $cTmpUID=trim($array_userUID[$zeileIND]); if (isset($arrTmpCheckUID->$cTmpUID)) { - $cTmpSQL.=" UPDATE ".$cSchemaSQL."tbl_teambenutzer set team_kurzbz=E'".addslashes(trim($cTeam_kurzbz))."' WHERE UPPER(uid)=UPPER(E'".addslashes($cTmpUID)."') AND upper(team_kurzbz)=upper(E'".$cTeam_kurzbz_old."'); "; + $qry.=" UPDATE ".$this->schemaSQL.".tbl_teambenutzer set team_kurzbz=E'".addslashes(trim($this->team_kurzbz))."' WHERE UPPER(uid)=UPPER(E'".addslashes($cTmpUID)."') AND upper(team_kurzbz)=upper(E'".$this->team_kurzbz_old."'); "; unset($arrTmpCheckUID->$cTmpUID); } elseif (!isset($arrTmpCheckUID->$cTmpUID)) { - $cTmpSQL.=" INSERT into ".$cSchemaSQL."tbl_teambenutzer (uid, team_kurzbz) VALUES (E'".addslashes(trim($cTmpUID))."',E'".addslashes(trim($cTeam_kurzbz))."'); "; + $qry.=" INSERT into ".$this->schemaSQL.".tbl_teambenutzer (uid, team_kurzbz) VALUES (E'".addslashes(trim($cTmpUID))."',E'".addslashes(trim($this->team_kurzbz))."'); "; } } @@ -293,18 +316,18 @@ class komune_wettbewerbteam extends postgre_sql if (isset($array_userUID)) unset($array_userUID); // Alle die noch in der DB-Alt Array sind muessen geloeschte sein while (list( $key, $value ) = each($arrTmpCheckUID) ) - $cTmpSQL.=" DELETE from ".$cSchemaSQL."tbl_teambenutzer WHERE UPPER(uid)=UPPER(E'".addslashes($value)."') AND upper(team_kurzbz)=upper(E'".$cTeam_kurzbz_old."'); "; + $qry.=" DELETE from ".$this->schemaSQL.".tbl_teambenutzer WHERE UPPER(uid)=UPPER(E'".addslashes($value)."') AND upper(team_kurzbz)=upper(E'".$this->team_kurzbz_old."'); "; if (isset($key)) unset($key); if (isset($value)) unset($value); if (isset($arrTmpCheckUID)) unset($arrTmpCheckUID); } - $cTmpSQL.=" COMMIT; "; -# exit("
".$cTmpSQL); + $qry.=" COMMIT; "; +# exit("
".$qry); // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); + $this->setStringSQL($qry); + unset($qry); $this->setResultSQL(null); if (!$this->dbQuery()) @@ -320,77 +343,112 @@ class komune_wettbewerbteam extends postgre_sql return $this->getWettbewerbteam(); } //------------------------------------------------------------------------------------------------- - function loadWettbewerbteam() + function loadWettbewerbteam($wbtyp_kurzbz=null,$wettbewerb_kurzbz=null,$uid=null,$team_kurzbz=null) { - $this->setError(''); + // Initialisierung + $this->result=array(); + $this->errormsg=''; - $cSchemaSQL=$this->getSchemaSQL(); - $tmpUid=$this->getUid(); + if (!is_null($wbtyp_kurzbz)) + $this->wbtyp_kurzbz=$wbtyp_kurzbz; - $cTeam_kurzbz=$this->getTeam_kurzbz_old(); - if (empty($cTeam_kurzbz)) - $cTeam_kurzbz=$this->getTeam_kurzbz(); + if (!is_null($wettbewerb_kurzbz)) + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; + + if (!is_null($uid)) + $this->uid=$uid; - $cWettbewerb_kurzbz=$this->getWettbewerb_kurzbz(); + if (!is_null($team_kurzbz)) + $this->team_kurzbz=$team_kurzbz; - $cTmpSQL=""; - $cTmpSQL.="SELECT * FROM ".$cSchemaSQL."tbl_teambenutzer,".$cSchemaSQL."tbl_team,".$cSchemaSQL."tbl_wettbewerbteam "; + $qry=""; + $qry.="SELECT * FROM ".$this->schemaSQL.".tbl_teambenutzer,".$this->schemaSQL.".tbl_team,".$this->schemaSQL.".tbl_wettbewerbteam "; - $cTmpSQL.=" WHERE UPPER(tbl_team.team_kurzbz)=UPPER(tbl_teambenutzer.team_kurzbz) "; - $cTmpSQL.=" AND UPPER(tbl_wettbewerbteam.team_kurzbz)=UPPER(tbl_team.team_kurzbz) "; - + $qry.=" WHERE UPPER(tbl_team.team_kurzbz)=UPPER(tbl_teambenutzer.team_kurzbz) "; + $qry.=" AND UPPER(tbl_wettbewerbteam.team_kurzbz)=UPPER(tbl_team.team_kurzbz) "; // Check wie Postgre darauf reagiert Performenc - $cTmpSQL.=" AND UPPER(tbl_wettbewerbteam.team_kurzbz)=UPPER(tbl_teambenutzer.team_kurzbz) "; + $qry.=" AND UPPER(tbl_wettbewerbteam.team_kurzbz)=UPPER(tbl_teambenutzer.team_kurzbz) "; - if (!empty($cTeam_kurzbz)) - $cTmpSQL.=" AND UPPER(tbl_teambenutzer.team_kurzbz)=UPPER(E'".$cTeam_kurzbz."') "; - - if (!empty($tmpUid)) - $cTmpSQL.=" AND UPPER(tbl_teambenutzer.uid)=UPPER(E'".addslashes($tmpUid)."') "; + if (!empty($this->team_kurzbz)) + $qry.=" AND UPPER(tbl_teambenutzer.team_kurzbz)=UPPER(E'".$this->team_kurzbz."') "; + + if (!empty($this->uid)) + $qry.=" AND UPPER(tbl_teambenutzer.uid)=UPPER(E'".addslashes($this->uid)."') "; // Suche nach einem einzigen Wettbewerb - if (!is_array($cWettbewerb_kurzbz) && !empty($cWettbewerb_kurzbz) ) + if (!is_array($this->wettbewerb_kurzbz) && !empty($this->wettbewerb_kurzbz) ) { - $cTmpSQL.=" AND UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz)=UPPER(E'".$cWettbewerb_kurzbz."') "; + $qry.=" AND UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz)=UPPER(E'".$this->wettbewerb_kurzbz."') "; } - elseif (is_array($cWettbewerb_kurzbz) && count($cWettbewerb_kurzbz)>0 ) + elseif (is_array($this->wettbewerb_kurzbz) && count($this->wettbewerb_kurzbz)>0 ) { - if (isset($cWettbewerb_kurzbz[0]['wettbewerb_kurzbz'])) // Check ob nicht kpl. Tablestruck in Array - { - $tmpWETTBEWERB=array(); - for ($indZEILE=0;$indZEILEwettbewerb_kurzbz))."') "; } - $cTmpSQL.="ORDER BY tbl_wettbewerbteam.rang OFFSET 0 LIMIT ALL FOR SHARE ;"; + $qry.="ORDER BY tbl_wettbewerbteam.rang;"; // Entfernen der Temporaeren Variablen aus dem Speicher - unset($cSchemaSQL); - unset($cTeam_kurzbz); - unset($cWettbewerb_kurzbz); - - // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); - - $this->setResultSQL(null); - $this->setWettbewerbteam(null); - if (!$this->fetch_all()) - return false; - $this->setWettbewerbteam($this->getResultSQL()); - $this->setResultSQL(null); - return $this->getWettbewerbteam(); + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result[]=$row; + } + return $this->result; + } + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim lesen der Wettbewerbstypen'; + return false; + } + return false; } -} // Class komune_wettbewerbteam Ende + +//------------------------------------------------------------------------------------------------- + function loadMaxRang($wettbewerb_kurzbz=null) + { + // Initialisierung + $this->result=array(); + $this->errormsg=''; + + + if (!is_null($wettbewerb_kurzbz)) + $this->wettbewerb_kurzbz=$wettbewerb_kurzbz; + + $qry=""; + $qry.="SELECT max(rang) as max FROM ".$this->schemaSQL.".tbl_teambenutzer "; + $qry.=" WHERE rang > 0 "; + // Suche nach einem einzigen Wettbewerb + if (!is_array($this->wettbewerb_kurzbz) && !empty($this->wettbewerb_kurzbz) ) + { + $qry.=" AND UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz)=UPPER(E'".$this->wettbewerb_kurzbz."') "; + } + elseif (is_array($this->wettbewerb_kurzbz) && count($this->wettbewerb_kurzbz)>0 ) + { + $qry.=" AND UPPER(tbl_wettbewerbteam.wettbewerb_kurzbz) in (E'".strtoupper(implode("','",$this->wettbewerb_kurzbz))."') "; + } + +exit($qry); + + // Entfernen der Temporaeren Variablen aus dem Speicher + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result=$row->max; + } + return $this->result; + } + else + { + if (empty($this->errormsg)) + $this->errormsg = 'Fehler beim lesen des letzten Range im Wettbewerb '; + return 0; + } + return 0; + } + + +} ?> \ No newline at end of file diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php index fefb0aa7b..478b3e445 100644 --- a/include/lehreinheit.class.php +++ b/include/lehreinheit.class.php @@ -1,848 +1,848 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ -require_once(dirname(__FILE__).'/basis_db.class.php'); -require_once(dirname(__FILE__).'/log.class.php'); - -class lehreinheit extends basis_db -{ - public $new; // boolean - public $lehreinheiten = array(); // lehreinheit Objekt - - //Tabellenspalten - public $lehreinheit_id; // integer - public $lehrveranstaltung_id; // integer - public $studiensemester_kurzbz; // varchar(16) - public $lehrfach_id; // integer - public $lf_kurzbz; - public $lf_bez; - public $lf_aktiv; - public $lehrform_kurzbz; // varchar(8) - public $stundenblockung; // smalint - public $wochenrythmus; // smalint - public $start_kw; // smalint - public $raumtyp; // varchar(8) - public $raumtypalternativ; // varchar(8) - public $lehre; // boolean - public $anmerkung; // varchar(255) - public $unr; // integer - public $lvnr; // bigint - public $insertamum; // timestamp - public $insertvon; // varchar(16) - public $updateamum; // timestamp - public $updatevon; // varchar(16) - public $sprache; // varchar(16) - public $ext_id; // bigint - - public $anz=0; //Zahler fuer erweiterte Attribute - public $mitarbeiter_uid=array(); - public $studiengang_kz=array(); - public $semester=array(); - public $verband=array(); - public $gruppe=array(); - public $gruppe_kurzbz=array(); - public $titel=array(); - public $lehrform=array(); - - /** - * Konstruktor - Laedt optional eine LE - * @param $gruppe_kurzbz - */ - public function __construct($lehreinheit_id=null) - { - parent::__construct(); - - if($lehreinheit_id!=null) - $this->load($lehreinheit_id); - } - - /** - * Laedt die LE - * @param lehreinheit_id - */ - public function load($lehreinheit_id) - { - if(!is_numeric($lehreinheit_id)) - { - $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; - return false; - } - - $qry = "SELECT * FROM lehre.tbl_lehreinheit WHERE lehreinheit_id='$lehreinheit_id'"; - - if($this->db_query($qry)) - { - if($row = $this->db_fetch_object()) - { - $this->lehreinheit_id = $row->lehreinheit_id; - $this->lehrveranstaltung_id = $row->lehrveranstaltung_id; - $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; - $this->lehrfach_id = $row->lehrfach_id; - $this->lehrform_kurzbz = $row->lehrform_kurzbz; - $this->stundenblockung = $row->stundenblockung; - $this->wochenrythmus = $row->wochenrythmus; - $this->start_kw = $row->start_kw; - $this->raumtyp = $row->raumtyp; - $this->raumtypalternativ = $row->raumtypalternativ; - $this->lehre = ($row->lehre=='t'?true:false); - $this->anmerkung = $row->anmerkung; - $this->unr = $row->unr; - $this->lvnr = $row->lvnr; - $this->sprache = $row->sprache; - $this->insertamum = $row->insertamum; - $this->insertvon = $row->insertvon; - $this->updateamum = $row->updateamum; - $this->updatevon = $row->updatevon; - $this->ext_id = $row->ext_id; - return true; - } - else - { - $this->errormsg = 'Es existiert keine Lehreinheit mit dieser ID'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden der Lehreinheit'; - return false; - } - } - - /** - * Laedt die LE von der View mit erweiterten Attributen - * @param lehreinheit_id - */ - public function loadLE($lehreinheit_id) - { - if(!is_numeric($lehreinheit_id)) - { - $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; - } - - $qry = "SELECT * FROM campus.vw_lehreinheit WHERE lehreinheit_id='$lehreinheit_id'"; - - if($this->db_query($qry)) - { - $this->anz=0; - while($row = $this->db_fetch_object()) - { - $this->lehreinheit_id = $row->lehreinheit_id; - $this->lehrveranstaltung_id = $row->lehrveranstaltung_id; - $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; - $this->lehrfach_id = $row->lehrfach_id; - $this->lehrform_kurzbz = $row->lehrform_kurzbz; - $this->stundenblockung = $row->stundenblockung; - $this->wochenrythmus = $row->wochenrythmus; - $this->start_kw = $row->start_kw; - $this->raumtyp = $row->raumtyp; - $this->raumtypalternativ = $row->raumtypalternativ; - $this->sprache = $row->sprache; - $this->lehre = ($row->lehre=='t'?true:false); - $this->anmerkung = $row->anmerkung; - $this->unr = $row->unr; - $this->lvnr = $row->lvnr; - $this->insertamum = $row->insertamum; - $this->insertvon = $row->insertvon; - $this->updateamum = $row->updateamum; - $this->updatevon = $row->updatevon; - //$this->ext_id = $row->ext_id; - $this->farbe = $row->farbe; - $this->lf_kurzbz= $row->lehrfach; - $this->lf_bez= $row->lehrfach_bez; - $this->lf_aktiv= $row->aktiv; - - $this->mitarbeiter_uid[$this->anz] = $row->mitarbeiter_uid; - $this->studiengang_kz[$this->anz] = $row->studiengang_kz; - $this->semester[$this->anz] = $row->semester; - $this->verband[$this->anz] = $row->verband; - $this->gruppe[$this->anz] = $row->gruppe; - $this->gruppe_kurzbz[$this->anz] = $row->gruppe_kurzbz; - $this->titel[$this->anz] = ''; - - $this->anz++; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Lehreinheit'; - return false; - } - } - - /** - * Laedt die Lehreinheiten zu einer Lehrveranstaltung - * - * @param $lehrveranstaltung_id - * @param $studiensemester_kurzbz - * @param $uid - * @param $fachbereich_kurzbz - * @return boolean - */ - public function load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz, $uid='', $fachbereich_kurzbz='') - { - $qry = "SELECT * FROM lehre.tbl_lehreinheit WHERE - lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' - AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; - - if($uid!='') - $qry .= " AND lehreinheit_id IN ( SELECT lehreinheit_id FROM lehre.tbl_lehreinheitmitarbeiter WHERE mitarbeiter_uid='".addslashes($uid)."')"; - - if($fachbereich_kurzbz!='') - $qry .= " AND lehrfach_id IN ( SELECT lehrfach_id FROM lehre.tbl_lehrfach WHERE fachbereich_kurzbz='".addslashes($fachbereich_kurzbz)."')"; - - $qry.= "ORDER BY lehreinheit_id"; - - if($this->db_query($qry)) - { - while($row = $this->db_fetch_object()) - { - $le_obj = new lehreinheit(); - - $le_obj->lehreinheit_id = $row->lehreinheit_id; - $le_obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; - $le_obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; - $le_obj->lehrfach_id = $row->lehrfach_id; - $le_obj->lehrform_kurzbz = $row->lehrform_kurzbz; - $le_obj->stundenblockung = $row->stundenblockung; - $le_obj->wochenrythmus = $row->wochenrythmus; - $le_obj->start_kw = $row->start_kw; - $le_obj->raumtyp = $row->raumtyp; - $le_obj->raumtypalternativ = $row->raumtypalternativ; - $le_obj->lehre = ($row->lehre=='t'?true:false); - $le_obj->anmerkung = $row->anmerkung; - $le_obj->unr = $row->unr; - $le_obj->lvnr = $row->lvnr; - $le_obj->sprache = $row->sprache; - $le_obj->insertamum = $row->insertamum; - $le_obj->insertvon = $row->insertvon; - $le_obj->updateamum = $row->updateamum; - $le_obj->updatevon = $row->updatevon; - $le_obj->ext_id = $row->ext_id; - - $this->lehreinheiten[] = $le_obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Lehreinheiten'; - return false; - } - } - - /** - * Prueft die Variablen vor dem Speichern - * auf Gueltigkeit. - * @return true wenn ok, false im Fehlerfall - */ - protected function validate() - { - if($this->lehreinheit_id!='' && !is_numeric($this->lehreinheit_id)) - { - $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; - return false; - } - if(!is_numeric($this->lehrveranstaltung_id)) - { - $this->errormsg = 'LehrveranstaltungsNr muss eine gueltige Zahl sein'; - return false; - } - if(mb_strlen($this->studiensemester_kurzbz)>16) - { - $this->errormsg = 'Studiensemesterkurzbz darf nicht laenger als 16 Zeichen sein'; - return false; - } - if($this->studiensemester_kurzbz=='') - { - $this->errormsg = 'Studiensemester muss angegeben werden'; - return false; - } - if(!is_numeric($this->lehrfach_id)) - { - $this->errormsg = 'Lehrfach_id muss eine gueltige Zahl sein'; - return false; - } - if(mb_strlen($this->lehrform_kurzbz)>8) - { - $this->errormsg = 'Lehrform_kurzbz darf nicht laenger als 8 Zeichen sein'; - return false; - } - if($this->lehrform_kurzbz=='') - { - $this->lehrform_kurzbz='SO'; - //TODO - //$this->errormsg = 'Lehrform muss angegeben werden'; - //return false; - } - if(!is_numeric($this->stundenblockung)) - { - $this->errormsg = 'Stundenblockung muss eine gueltige Zahl sein'; - return false; - } - if(!is_numeric($this->wochenrythmus)) - { - $this->errormsg = 'Wochenrythmus muss eine gueltige Zahl sein'; - return false; - } - if($this->start_kw!='' && !is_numeric($this->start_kw)) - { - $this->errormsg = 'StartKW muss eine gueltige Zahl sein'; - return false; - } - if($this->start_kw!='' && ($this->start_kw>53 || $this->start_kw<1)) - { - $this->errormsg = 'StartKW muss zwischen 1 und 53 liegen'; - return false; - } - if(mb_strlen($this->raumtyp)>8) - { - $this->errormsg = 'Raumtyp darf nicht laenger als 8 Zeichen sein'; - return false; - } - if(mb_strlen($this->raumtypalternativ)>8) - { - $this->errormsg = 'Raumtypalternativ darf nicht alenger als 8 Zeichen sein'; - return false; - } - if($this->raumtypalternativ=='') - { - //TODO - $this->raumtypalternativ='Dummy'; - } - if(!is_bool($this->lehre)) - { - $this->errormsg = 'Lehre muss ein boolscher Wert sein'; - return false; - } - if(mb_strlen($this->anmerkung)>255) - { - $this->errormsg = 'Anmerkung darf nicht laenger als 255 Zeichen sein'; - return false; - } - if($this->unr!='' && !is_numeric($this->unr)) - { - $this->errormsg = 'UNR muss eine gueltige Zahl sein'; - return false; - } - if($this->ext_id!='' && !is_numeric($this->ext_id)) - { - $this->errormsg = 'Ext_id muss eine gueltige Zahl sein'; - return false; - } - - return true; - } - - /** - * Speichert LE in die Datenbank - * Wenn $new auf true gesetzt ist wird ein neuer Datensatz - * angelegt, ansonsten der Datensatz upgedated - * @return true wenn erfolgreich, false im Fehlerfall - */ - public function save($new=null) - { - if(is_null($new)) - $new = $this->new; - - //Variablen auf Gueltigkeit pruefen - if(!$this->validate()) - return false; - - if($new) - { - if($this->unr=='') - $unr="currval('lehre.tbl_lehreinheit_lehreinheit_id_seq')"; - else - $unr = $this->addslashes($this->unr); - //ToDo ID entfernen - $qry = 'BEGIN; INSERT INTO lehre.tbl_lehreinheit (lehrveranstaltung_id, studiensemester_kurzbz, - lehrfach_id, lehrform_kurzbz, stundenblockung, wochenrythmus, - start_kw, raumtyp, raumtypalternativ, lehre, anmerkung, unr, lvnr, insertamum, insertvon, updateamum, updatevon, ext_id, sprache) - VALUES('.$this->addslashes($this->lehrveranstaltung_id).','. - $this->addslashes($this->studiensemester_kurzbz).','. - $this->addslashes($this->lehrfach_id).','. - $this->addslashes($this->lehrform_kurzbz).','. - $this->addslashes($this->stundenblockung).','. - $this->addslashes($this->wochenrythmus).','. - $this->addslashes($this->start_kw).','. - $this->addslashes($this->raumtyp).','. - $this->addslashes($this->raumtypalternativ).','. - ($this->lehre?'true':'false').','. - $this->addslashes($this->anmerkung).','. - $unr.','. - $this->addslashes($this->lvnr).','. - $this->addslashes($this->insertamum).','. - $this->addslashes($this->insertvon).','. - $this->addslashes($this->updateamum).','. - $this->addslashes($this->updatevon).','. - $this->addslashes($this->ext_id).','. - $this->addslashes($this->sprache).');'; - } - else - { - $qry = 'UPDATE lehre.tbl_lehreinheit SET'. - ' lehrveranstaltung_id='.$this->addslashes($this->lehrveranstaltung_id).','. - ' studiensemester_kurzbz='.$this->addslashes($this->studiensemester_kurzbz).','. - ' lehrfach_id='.$this->addslashes($this->lehrfach_id).','. - ' lehrform_kurzbz='.$this->addslashes($this->lehrform_kurzbz).','. - ' stundenblockung='.$this->addslashes($this->stundenblockung).','. - ' wochenrythmus='.$this->addslashes($this->wochenrythmus).','. - ' start_kw='.$this->addslashes($this->start_kw).','. - ' raumtyp='.$this->addslashes($this->raumtyp).','. - ' raumtypalternativ='.$this->addslashes($this->raumtypalternativ).','. - ' lehre='.($this->lehre?'true':'false').','. - ' anmerkung='.$this->addslashes($this->anmerkung).','. - ' unr='.$this->addslashes($this->unr).','. - ' lvnr='.$this->addslashes($this->lvnr).','. - ' updateamum='.$this->addslashes($this->updateamum).','. - ' updatevon='.$this->addslashes($this->updatevon).','. - ' sprache='.$this->addslashes($this->sprache).','. - ' ext_id='.$this->addslashes($this->ext_id). - " WHERE lehreinheit_id=".$this->addslashes($this->lehreinheit_id).";"; - } - - if($this->db_query($qry)) - { - if($new) - { - //Sequence auslesen - $qry ="SELECT currval('lehre.tbl_lehreinheit_lehreinheit_id_seq') AS lehreinheit_id"; - if($this->db_query($qry)) - { - if($row = $this->db_fetch_object()) - { - $this->lehreinheit_id = $row->lehreinheit_id; - $this->db_query('COMMIT;'); - } - else - { - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - $this->db_query('ROLLBACK;'); - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - $this->db_query('ROLLBACK;'); - return false; - } - } - //Log schreiben - return true; - } - else - { - $this->errormsg = 'Fehler beim Speichern der LE: '.$qry; - return false; - } - } - - /** - * Prueft die geladene Lehrveranstaltung auf Kollisionen im Stundenplan. - * Rueckgabewert 'false' und die Fehlermeldung steht in '$this->errormsg'. - * @param string datum gewuenschtes Datum YYYY-MM-TT - * @param integer stunde gewuenschte Stunde - * @param string ort gewuenschter Ort - * @param string db_stpl_table Tabllenname des Stundenplans im DBMS - * @return boolean true=ok, false=error - */ - public function check_lva($datum,$stunde,$ort,$stpl_table) - { - $ignore_reservation=false; - $ignore_zeitsperre=false; - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - - //Lektoren SQL - $sql_lkt=''; - foreach ($this->mitarbeiter_uid as $lkt) - $sql_lkt.="OR mitarbeiter_uid='".addslashes($lkt)."' "; - $sql_lkt=mb_substr($sql_lkt,3); - $sql_lkt="(($sql_lkt) AND mitarbeiter_uid!='_DummyLektor')"; - - // Datenbank abfragen - $sql_query="SELECT $stpl_id FROM $stpl_table - WHERE datum='".addslashes($datum)."' AND stunde='".addslashes($stunde)."' - AND (ort_kurzbz='".addslashes($ort)."' OR $sql_lkt)"; - if (is_numeric($this->unr)) - $sql_query.=" AND unr!='".addslashes($this->unr)."'"; - if (!$this->db_query($sql_query)) - { - $this->errormsg=$this->db_last_error(); - return false; - } - $erg_stpl=$this->db_result; - - $anzahl=$this->db_numrows($erg_stpl); - //Check - if ($anzahl==0) - { - // Reservierungen pruefen? - if (!$ignore_reservation) - { - // Datenbank abfragen ( studiengang_kz, titel, beschreibung ) - //Lektoren SQL - $sql_lkt=''; - foreach ($this->mitarbeiter_uid as $lkt) - $sql_lkt.="OR uid='$lkt' "; - $sql_lkt=mb_substr($sql_lkt,3); - $sql_lkt="(($sql_lkt) AND uid!='_DummyLektor')"; - $sql_query="SELECT reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde - FROM lehre.vw_reservierung - WHERE datum='".addslashes($datum)."' AND stunde='".addslashes($stunde)."' - AND (ort_kurzbz='".addslashes($ort)."' OR $sql_lkt)"; - // Verband SQL - //$sql_query.="(studiengang_kz=$this->studiengang_kz AND semester=$this->sem"; - //if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') - // $sql_query.=" AND (verband='$this->ver' OR verband IS NULL OR verband='' OR verband=' ')"; - //if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') - // $sql_query.=" AND (gruppe='$this->grp' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; - //if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - // $sql_query.=" AND (gruppe_kurzbz='$this->gruppe_kurzbz')"; - //$sql_query.="))"; - - //echo $sql_query.'
'; - if (!$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return false; - } - $erg_res=$this->db_result; - $anz_res=$this->db_num_rows($erg_res); - //Check - if ($anz_res==0) - { - // Zeitsperren pruefen? - if (!$ignore_zeitsperre) - { - // Datenbank abfragen ( studiengang_kz, titel, beschreibung ) - //Lektoren SQL - $sql_lkt=''; - foreach ($this->mitarbeiter_uid as $lkt) - $sql_lkt.="OR mitarbeiter_uid='$lkt' "; - $sql_lkt=mb_substr($sql_lkt,3); - $sql_query="SELECT * FROM campus.tbl_zeitsperre - WHERE ($sql_lkt) AND - ( (vondatum<'$datum' AND bisdatum>'$datum') - OR (vondatum='$datum' AND bisdatum='$datum' AND vonstunde<=$stunde AND bisstunde>=$stunde) - OR (vondatum='$datum' AND bisdatum>'$datum' AND vonstunde<=$stunde) - OR (vondatum<'$datum' AND bisdatum='$datum' AND bisstunde>=$stunde) )"; - //echo $sql_query.'
'; - if (!$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return false; - } - $erg_zs=$this->db_result; - $anz_zs=$this->db_num_rows($erg_zs); - //Check - if ($anz_zs==0) - return true; - else - { - $row=$this->db_fetch_object($erg_zs); - $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid"; - return false; - } - } - return true; - } - else - { - $row=$this->db_fetch_object($erg_res); - $this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; - return false; - } - } - return true; - } - else - { - $row=$this->db_fetch_row($erg_stpl); - $this->errormsg="Kollision mit StundenplanID($stpl_table.$stpl_id): $row[0]"; - return false; - } - } - - /** - * Speichert die geladene Lehreinheit im Stundenplan. - * Rueckgabewert 'false' und die Fehlermeldung steht in '$this->errormsg'. - * @param string datum gewuenschtes Datum YYYY-MM-TT - * @param integer stunde gewuenschte Stunde - * @param string ort gewuenschter Ort - * @param string db_stpl_table Tabllenname des Stundenplans im DBMS - * @param string user UID des aktuellen Bentzers - * @return boolean true=ok, false=error - */ - public function save_stpl($datum,$stunde,$ort,$stpl_table,$user) - { - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - - // Variablen pruefen - if (!is_numeric($this->unr)) - { - $this->errormsg='Error: UNR ist nicht vorhanden!'; - return false; - } - - - for ($i=0;$i<$this->anz;$i++) - { - // Datenbank INSERT - $sql_query="INSERT INTO $stpl_table - (unr,mitarbeiter_uid,datum, stunde, ort_kurzbz,lehreinheit_id,studiengang_kz,semester,verband, - gruppe, gruppe_kurzbz, titel, anmerkung, updatevon) - VALUES ($this->unr,'".$this->mitarbeiter_uid[$i]."','$datum',$stunde, - '$ort',$this->lehreinheit_id, ".$this->studiengang_kz[$i].",".$this->semester[$i].", - '".$this->verband[$i]."','".$this->gruppe[$i]."'"; - if ($this->gruppe_kurzbz[$i]==null) - $sql_query.=',NULL'; - else - $sql_query.=",'".$this->gruppe_kurzbz[$i]."'"; - $sql_query.=",'".$this->titel[$i]."','$this->anmerkung','$user')"; - if (!$this->db_query($sql_query)) - { - $this->errormsg=$this->db_last_error(); - return false; - } - } - return true; - } - - /** - * Rueckgabewert ist ein Array mit den Ergebnissen. Bei Fehler false und die - * Fehlermeldung liegt in errormsg. - * Wenn der Parameter stg_kz NULL ist tritt gruppe_kurzbzb in Kraft. - * @param string $gruppe_kurzbz Einheit - * @param string grp Gruppe - * @param string ver Verband - * @param integer sem Semester - * @param integer stg_kz Kennzahl des Studiengangs - * @return variabel Array mit LVA; false bei Fehler - */ - public function getLehreinheitLVPL($db_stpl_table,$studiensemester, $type, $stg_kz, $sem, $lektor, $ver=null, $grp=null, $gruppe=null) - { - $lva_stpl_view=VIEW_BEGIN.'lva_'.$db_stpl_table; - - if (mb_strlen($studiensemester)<=0) - { - $this->errormsg='Studiensemester ist nicht gesetzt!(lehreinheit.getLehreinheitLVPL)'; - return false; - } - else $where=" studiensemester_kurzbz='$studiensemester'"; - - if ($type=='lektor') - $where.=" AND lektor_uid='$lektor'"; - elseif ($type=='gruppe') - $where.=" AND gruppe_kurzbz='$gruppe'"; - elseif ($type=='verband') - { - $where.=" AND studiengang_kz='$stg_kz'"; - if ($sem>0) - $where.=" AND semester=$sem"; - if (mb_strlen($ver)>0 && $ver!=' ') - $where.=" AND verband='$ver'"; - if (mb_strlen($grp)>0 && $grp!=' ') - $where.=" AND gruppe='$grp' "; - } - $sql_query='SELECT *, planstunden-verplant::smallint AS offenestunden - FROM lehre.'.$lva_stpl_view.' JOIN lehre.tbl_lehrform ON '.$lva_stpl_view.'.lehrform=tbl_lehrform.lehrform_kurzbz - WHERE '.$where.' AND verplanen ORDER BY offenestunden DESC, lehrfach, lehrform, semester, verband, gruppe, gruppe_kurzbz;'; - - if(!$this->db_query($sql_query)) - { - $this->errormsg=$this->db_last_error().$sql_query; - return false; - } - while($row = $this->db_fetch_object()) - { - $this->lehreinheiten[$row->unr]->lehreinheit_id[]=$row->lehreinheit_id; - $this->lehreinheiten[$row->unr]->lvnr[]=$row->lvnr; - $this->lehreinheiten[$row->unr]->unr=$row->unr; - $this->lehreinheiten[$row->unr]->fachbereich=$row->fachbereich_kurzbz; - $this->lehreinheiten[$row->unr]->lehrfach_id=$row->lehrfach_id; - $this->lehreinheiten[$row->unr]->lehrfach[]=$row->lehrfach; - $this->lehreinheiten[$row->unr]->lehrfach_bez[]=$row->lehrfach_bez; - $this->lehreinheiten[$row->unr]->lehrfach_farbe[]=$row->lehrfach_farbe; - $this->lehreinheiten[$row->unr]->lehrform[]=$row->lehrform; - $this->lehreinheiten[$row->unr]->lektor_uid[]=$row->lektor_uid; - $this->lehreinheiten[$row->unr]->lektor[]=trim($row->lektor); - $this->lehreinheiten[$row->unr]->stg_kz[]=$row->studiengang_kz; - $this->lehreinheiten[$row->unr]->stg[]=$row->studiengang; - $this->lehreinheiten[$row->unr]->gruppe_kurzbz[]=$row->gruppe_kurzbz; - $this->lehreinheiten[$row->unr]->semester[]=$row->semester; - $this->lehreinheiten[$row->unr]->verband[]=$row->verband; - $this->lehreinheiten[$row->unr]->gruppe[]=$row->gruppe; - $this->lehreinheiten[$row->unr]->gruppe_kurzbz[]=$row->gruppe_kurzbz; - $this->lehreinheiten[$row->unr]->raumtyp=$row->raumtyp; - $this->lehreinheiten[$row->unr]->raumtypalternativ=$row->raumtypalternativ; - $this->lehreinheiten[$row->unr]->stundenblockung[]=$row->stundenblockung; - $this->lehreinheiten[$row->unr]->wochenrythmus[]=$row->wochenrythmus; - $this->lehreinheiten[$row->unr]->semesterstunden[]=$row->semesterstunden; - $this->lehreinheiten[$row->unr]->planstunden[]=$row->planstunden; - $this->lehreinheiten[$row->unr]->start_kw[]=$row->start_kw; - $this->lehreinheiten[$row->unr]->anmerkung[]=$row->anmerkung; - $this->lehreinheiten[$row->unr]->studiensemester_kurzbz=$row->studiensemester_kurzbz; - $this->lehreinheiten[$row->unr]->verplant[]=$row->verplant; - $this->lehreinheiten[$row->unr]->offenestunden[]=$row->offenestunden; - if (isset($this->lehreinheiten[$row->unr]->verplant_gesamt)) - $this->lehreinheiten[$row->unr]->verplant_gesamt+=$row->verplant; - else - $this->lehreinheiten[$row->unr]->verplant_gesamt=$row->verplant; - $lvb=$row->studiengang.'-'.$row->semester; - if ($row->verband!='' && $row->verband!=' ' && $row->verband!='0' && $row->verband!=null) - $lvb.=$row->verband; - if ($row->gruppe!='' && $row->gruppe!=' ' && $row->gruppe!='0' && $row->gruppe!=null) - $lvb.=$row->gruppe; - if ($row->gruppe_kurzbz!='' && $row->gruppe_kurzbz!=null) - $this->lehreinheiten[$row->unr]->lehrverband[]=$row->gruppe_kurzbz; - else - $this->lehreinheiten[$row->unr]->lehrverband[]=$lvb; - } - return true; - } - - /** - * Loescht eine Lehreinheit - * @param lehreinheit_id - * @return boolean - */ - public function delete($lehreinheit_id) - { - if(!is_numeric($lehreinheit_id)) - { - $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; - return false; - } - - //Pruefen ob schon eine Kreuzerlliste fuer diese Lehreinheit angelegt wurde. - //Falls ja dann wird das loeschen verweigert - $qry = "SELECT count(*) as anzahl FROM campus.tbl_uebung WHERE lehreinheit_id='$lehreinheit_id'"; - if($this->db_query($qry)) - { - if($row = $this->db_fetch_object()) - { - if($row->anzahl>0) - { - $this->errormsg = 'Zu dieser Lehreinheit wurde bereits eine Kreuzerlliste angelegt. Solange fuer eine Lehreinheit Kreuzerllisten vorhanden sind, kann diese nicht geloescht werden.'; - return false; - } - else - { - $this->db_query('BEGIN'); - - //UNDO Befehl zusammenbauen - $undosql=''; - - //LehreinheitMitarbeiter - $qry = "SELECT * FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id='$lehreinheit_id'"; - if($this->db_query($qry)) - { - while($row = $this->db_fetch_object()) - { - $undosql.=" INSERT INTO lehre.tbl_lehreinheitmitarbeiter(lehreinheit_id, mitarbeiter_uid, lehrfunktion_kurzbz, planstunden, stundensatz, faktor, anmerkung, bismelden, updateamum, updatevon, insertamum, insertvon, semesterstunden) - VALUES(".$this->addslashes($row->lehreinheit_id).",".$this->addslashes($row->mitarbeiter_uid).",".$this->addslashes($row->lehrfunktion_kurzbz).",".$this->addslashes($row->planstunden).",".$this->addslashes($row->stundensatz).",".$this->addslashes($row->faktor).",". - $this->addslashes($row->anmerkung).",".($row->bismelden=='t'?'true':'false').",".$this->addslashes($row->updateamum).",".$this->addslashes($row->updatevon).",".$this->addslashes($row->insertamum).",".$this->addslashes($row->insertvon).",".$this->addslashes($row->semesterstunden).");"; - } - } - - //LehreinheitGruppe - $qry = "SELECT * FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id='$lehreinheit_id'"; - if($this->db_query($qry)) - { - while($row = $this->db_fetch_object()) - { - $undosql.=" INSERT INTO lehre.tbl_lehreinheitgruppe(lehreinheitgruppe_id, lehreinheit_id, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, updateamum, updatevon, insertamum, insertvon) - VALUES(".$this->addslashes($row->lehreinheitgruppe_id).",".$this->addslashes($row->lehreinheit_id).",".$this->addslashes($row->studiengang_kz).",'".addslashes($row->semester)."','".addslashes($row->verband)."','".addslashes($row->gruppe)."',". - $this->addslashes($row->gruppe_kurzbz).",".$this->addslashes($row->updateamum).",".$this->addslashes($row->updatevon).",".$this->addslashes($row->insertamum).",".$this->addslashes($row->insertvon).");"; - } - } - - //Lehreinheit - $qry = "SELECT * FROM lehre.tbl_lehreinheit WHERE lehreinheit_id='$lehreinheit_id'"; - if($this->db_query($qry)) - { - while($row = $this->db_fetch_object()) - { - $undosql.=" INSERT INTO lehre.tbl_lehreinheit(lehreinheit_id, lehrveranstaltung_id, studiensemester_kurzbz, lehrfach_id, lehrform_kurzbz, stundenblockung, wochenrythmus, start_kw, raumtyp, raumtypalternativ, sprache, lehre, anmerkung, unr, lvnr, updateamum, updatevon, insertamum, insertvon) - VALUES(".$this->addslashes($row->lehreinheit_id).",".$this->addslashes($row->lehrveranstaltung_id).",".$this->addslashes($row->studiensemester_kurzbz).",".$this->addslashes($row->lehrfach_id).",".$this->addslashes($row->lehrform_kurzbz).",".$this->addslashes($row->stundenblockung).",". - $this->addslashes($row->wochenrythmus).",".$this->addslashes($row->startkw).",".$this->addslashes($row->raumtyp).",".$this->addslashes($row->raumtypalternativ).",".$this->addslashes($row->sprache).",".($row->wochenrythmus=='t'?'true':'false').",". - $this->addslashes($row->anmerkung).",".$this->addslashes($row->unr).",".$this->addslashes($row->lvnr).",".$this->addslashes($row->updateamum).",".$this->addslashes($row->updatevon).",".$this->addslashes($row->insertamum).",".$this->addslashes($row->insertvon).");"; - } - } - - $log = new log(); - - //Gruppenzuteilung, Mitarbeiterzuteilung und Lehreinheit loeschen - $qry = "DELETE FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id='$lehreinheit_id'; - DELETE FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id='$lehreinheit_id'; - DELETE FROM lehre.tbl_lehreinheit WHERE lehreinheit_id='$lehreinheit_id';"; - - $log->new = true; - $log->sql = $qry; - $log->sqlundo = $undosql; - $log->executetime = date('Y-m-d H:i:s'); - $log->mitarbeiter_uid = get_uid(); - $log->beschreibung = "Lehreinheit loeschen - $lehreinheit_id"; - - if(!$log->save()) - { - $this->errormsg = 'Fehler beim Schreiben des Log-Eintrages'; - $this->db_query('ROLLBACK'); - return false; - } - else - { - if($this->db_query($qry)) - { - $this->db_query('COMMIT'); - return true; - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = $this->db_last_error(); - return false; - } - } - } - } - else - { - $this->errormsg = 'Fehler beim Loeschen'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Loeschen'; - return false; - } - } -} -?> +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/log.class.php'); + +class lehreinheit extends basis_db +{ + public $new; // boolean + public $lehreinheiten = array(); // lehreinheit Objekt + + //Tabellenspalten + public $lehreinheit_id; // integer + public $lehrveranstaltung_id; // integer + public $studiensemester_kurzbz; // varchar(16) + public $lehrfach_id; // integer + public $lf_kurzbz; + public $lf_bez; + public $lf_aktiv; + public $lehrform_kurzbz; // varchar(8) + public $stundenblockung; // smalint + public $wochenrythmus; // smalint + public $start_kw; // smalint + public $raumtyp; // varchar(8) + public $raumtypalternativ; // varchar(8) + public $lehre; // boolean + public $anmerkung; // varchar(255) + public $unr; // integer + public $lvnr; // bigint + public $insertamum; // timestamp + public $insertvon; // varchar(16) + public $updateamum; // timestamp + public $updatevon; // varchar(16) + public $sprache; // varchar(16) + public $ext_id; // bigint + + public $anz=0; //Zahler fuer erweiterte Attribute + public $mitarbeiter_uid=array(); + public $studiengang_kz=array(); + public $semester=array(); + public $verband=array(); + public $gruppe=array(); + public $gruppe_kurzbz=array(); + public $titel=array(); + public $lehrform=array(); + + /** + * Konstruktor - Laedt optional eine LE + * @param $gruppe_kurzbz + */ + public function __construct($lehreinheit_id=null) + { + parent::__construct(); + + if($lehreinheit_id!=null) + $this->load($lehreinheit_id); + } + + /** + * Laedt die LE + * @param lehreinheit_id + */ + public function load($lehreinheit_id) + { + if(!is_numeric($lehreinheit_id)) + { + $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; + return false; + } + + $qry = "SELECT * FROM lehre.tbl_lehreinheit WHERE lehreinheit_id='$lehreinheit_id'"; + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->lehreinheit_id = $row->lehreinheit_id; + $this->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $this->lehrfach_id = $row->lehrfach_id; + $this->lehrform_kurzbz = $row->lehrform_kurzbz; + $this->stundenblockung = $row->stundenblockung; + $this->wochenrythmus = $row->wochenrythmus; + $this->start_kw = $row->start_kw; + $this->raumtyp = $row->raumtyp; + $this->raumtypalternativ = $row->raumtypalternativ; + $this->lehre = ($row->lehre=='t'?true:false); + $this->anmerkung = $row->anmerkung; + $this->unr = $row->unr; + $this->lvnr = $row->lvnr; + $this->sprache = $row->sprache; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + $this->ext_id = $row->ext_id; + return true; + } + else + { + $this->errormsg = 'Es existiert keine Lehreinheit mit dieser ID'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Lehreinheit'; + return false; + } + } + + /** + * Laedt die LE von der View mit erweiterten Attributen + * @param lehreinheit_id + */ + public function loadLE($lehreinheit_id) + { + if(!is_numeric($lehreinheit_id)) + { + $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; + } + + $qry = "SELECT * FROM campus.vw_lehreinheit WHERE lehreinheit_id='$lehreinheit_id'"; + + if($this->db_query($qry)) + { + $this->anz=0; + while($row = $this->db_fetch_object()) + { + $this->lehreinheit_id = $row->lehreinheit_id; + $this->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $this->lehrfach_id = $row->lehrfach_id; + $this->lehrform_kurzbz = $row->lehrform_kurzbz; + $this->stundenblockung = $row->stundenblockung; + $this->wochenrythmus = $row->wochenrythmus; + $this->start_kw = $row->start_kw; + $this->raumtyp = $row->raumtyp; + $this->raumtypalternativ = $row->raumtypalternativ; + $this->sprache = $row->sprache; + $this->lehre = ($row->lehre=='t'?true:false); + $this->anmerkung = $row->anmerkung; + $this->unr = $row->unr; + $this->lvnr = $row->lvnr; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + //$this->ext_id = $row->ext_id; + $this->farbe = $row->farbe; + $this->lf_kurzbz= $row->lehrfach; + $this->lf_bez= $row->lehrfach_bez; + $this->lf_aktiv= $row->aktiv; + + $this->mitarbeiter_uid[$this->anz] = $row->mitarbeiter_uid; + $this->studiengang_kz[$this->anz] = $row->studiengang_kz; + $this->semester[$this->anz] = $row->semester; + $this->verband[$this->anz] = $row->verband; + $this->gruppe[$this->anz] = $row->gruppe; + $this->gruppe_kurzbz[$this->anz] = $row->gruppe_kurzbz; + $this->titel[$this->anz] = ''; + + $this->anz++; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Lehreinheit'; + return false; + } + } + + /** + * Laedt die Lehreinheiten zu einer Lehrveranstaltung + * + * @param $lehrveranstaltung_id + * @param $studiensemester_kurzbz + * @param $uid + * @param $fachbereich_kurzbz + * @return boolean + */ + public function load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz, $uid='', $fachbereich_kurzbz='') + { + $qry = "SELECT * FROM lehre.tbl_lehreinheit WHERE + lehrveranstaltung_id='".addslashes($lehrveranstaltung_id)."' + AND studiensemester_kurzbz='".addslashes($studiensemester_kurzbz)."'"; + + if($uid!='') + $qry .= " AND lehreinheit_id IN ( SELECT lehreinheit_id FROM lehre.tbl_lehreinheitmitarbeiter WHERE mitarbeiter_uid='".addslashes($uid)."')"; + + if($fachbereich_kurzbz!='') + $qry .= " AND lehrfach_id IN ( SELECT lehrfach_id FROM lehre.tbl_lehrfach WHERE fachbereich_kurzbz='".addslashes($fachbereich_kurzbz)."')"; + + $qry.= "ORDER BY lehreinheit_id"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $le_obj = new lehreinheit(); + + $le_obj->lehreinheit_id = $row->lehreinheit_id; + $le_obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $le_obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $le_obj->lehrfach_id = $row->lehrfach_id; + $le_obj->lehrform_kurzbz = $row->lehrform_kurzbz; + $le_obj->stundenblockung = $row->stundenblockung; + $le_obj->wochenrythmus = $row->wochenrythmus; + $le_obj->start_kw = $row->start_kw; + $le_obj->raumtyp = $row->raumtyp; + $le_obj->raumtypalternativ = $row->raumtypalternativ; + $le_obj->lehre = ($row->lehre=='t'?true:false); + $le_obj->anmerkung = $row->anmerkung; + $le_obj->unr = $row->unr; + $le_obj->lvnr = $row->lvnr; + $le_obj->sprache = $row->sprache; + $le_obj->insertamum = $row->insertamum; + $le_obj->insertvon = $row->insertvon; + $le_obj->updateamum = $row->updateamum; + $le_obj->updatevon = $row->updatevon; + $le_obj->ext_id = $row->ext_id; + + $this->lehreinheiten[] = $le_obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Lehreinheiten'; + return false; + } + } + + /** + * Prueft die Variablen vor dem Speichern + * auf Gueltigkeit. + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + if($this->lehreinheit_id!='' && !is_numeric($this->lehreinheit_id)) + { + $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; + return false; + } + if(!is_numeric($this->lehrveranstaltung_id)) + { + $this->errormsg = 'LehrveranstaltungsNr muss eine gueltige Zahl sein'; + return false; + } + if(mb_strlen($this->studiensemester_kurzbz)>16) + { + $this->errormsg = 'Studiensemesterkurzbz darf nicht laenger als 16 Zeichen sein'; + return false; + } + if($this->studiensemester_kurzbz=='') + { + $this->errormsg = 'Studiensemester muss angegeben werden'; + return false; + } + if(!is_numeric($this->lehrfach_id)) + { + $this->errormsg = 'Lehrfach_id muss eine gueltige Zahl sein'; + return false; + } + if(mb_strlen($this->lehrform_kurzbz)>8) + { + $this->errormsg = 'Lehrform_kurzbz darf nicht laenger als 8 Zeichen sein'; + return false; + } + if($this->lehrform_kurzbz=='') + { + $this->lehrform_kurzbz='SO'; + //TODO + //$this->errormsg = 'Lehrform muss angegeben werden'; + //return false; + } + if(!is_numeric($this->stundenblockung)) + { + $this->errormsg = 'Stundenblockung muss eine gueltige Zahl sein'; + return false; + } + if(!is_numeric($this->wochenrythmus)) + { + $this->errormsg = 'Wochenrythmus muss eine gueltige Zahl sein'; + return false; + } + if($this->start_kw!='' && !is_numeric($this->start_kw)) + { + $this->errormsg = 'StartKW muss eine gueltige Zahl sein'; + return false; + } + if($this->start_kw!='' && ($this->start_kw>53 || $this->start_kw<1)) + { + $this->errormsg = 'StartKW muss zwischen 1 und 53 liegen'; + return false; + } + if(mb_strlen($this->raumtyp)>8) + { + $this->errormsg = 'Raumtyp darf nicht laenger als 8 Zeichen sein'; + return false; + } + if(mb_strlen($this->raumtypalternativ)>8) + { + $this->errormsg = 'Raumtypalternativ darf nicht alenger als 8 Zeichen sein'; + return false; + } + if($this->raumtypalternativ=='') + { + //TODO + $this->raumtypalternativ='Dummy'; + } + if(!is_bool($this->lehre)) + { + $this->errormsg = 'Lehre muss ein boolscher Wert sein'; + return false; + } + if(mb_strlen($this->anmerkung)>255) + { + $this->errormsg = 'Anmerkung darf nicht laenger als 255 Zeichen sein'; + return false; + } + if($this->unr!='' && !is_numeric($this->unr)) + { + $this->errormsg = 'UNR muss eine gueltige Zahl sein'; + return false; + } + if($this->ext_id!='' && !is_numeric($this->ext_id)) + { + $this->errormsg = 'Ext_id muss eine gueltige Zahl sein'; + return false; + } + + return true; + } + + /** + * Speichert LE in die Datenbank + * Wenn $new auf true gesetzt ist wird ein neuer Datensatz + * angelegt, ansonsten der Datensatz upgedated + * @return true wenn erfolgreich, false im Fehlerfall + */ + public function save($new=null) + { + if(is_null($new)) + $new = $this->new; + + //Variablen auf Gueltigkeit pruefen + if(!$this->validate()) + return false; + + if($new) + { + if($this->unr=='') + $unr="currval('lehre.tbl_lehreinheit_lehreinheit_id_seq')"; + else + $unr = $this->addslashes($this->unr); + //ToDo ID entfernen + $qry = 'BEGIN; INSERT INTO lehre.tbl_lehreinheit (lehrveranstaltung_id, studiensemester_kurzbz, + lehrfach_id, lehrform_kurzbz, stundenblockung, wochenrythmus, + start_kw, raumtyp, raumtypalternativ, lehre, anmerkung, unr, lvnr, insertamum, insertvon, updateamum, updatevon, ext_id, sprache) + VALUES('.$this->addslashes($this->lehrveranstaltung_id).','. + $this->addslashes($this->studiensemester_kurzbz).','. + $this->addslashes($this->lehrfach_id).','. + $this->addslashes($this->lehrform_kurzbz).','. + $this->addslashes($this->stundenblockung).','. + $this->addslashes($this->wochenrythmus).','. + $this->addslashes($this->start_kw).','. + $this->addslashes($this->raumtyp).','. + $this->addslashes($this->raumtypalternativ).','. + ($this->lehre?'true':'false').','. + $this->addslashes($this->anmerkung).','. + $unr.','. + $this->addslashes($this->lvnr).','. + $this->addslashes($this->insertamum).','. + $this->addslashes($this->insertvon).','. + $this->addslashes($this->updateamum).','. + $this->addslashes($this->updatevon).','. + $this->addslashes($this->ext_id).','. + $this->addslashes($this->sprache).');'; + } + else + { + $qry = 'UPDATE lehre.tbl_lehreinheit SET'. + ' lehrveranstaltung_id='.$this->addslashes($this->lehrveranstaltung_id).','. + ' studiensemester_kurzbz='.$this->addslashes($this->studiensemester_kurzbz).','. + ' lehrfach_id='.$this->addslashes($this->lehrfach_id).','. + ' lehrform_kurzbz='.$this->addslashes($this->lehrform_kurzbz).','. + ' stundenblockung='.$this->addslashes($this->stundenblockung).','. + ' wochenrythmus='.$this->addslashes($this->wochenrythmus).','. + ' start_kw='.$this->addslashes($this->start_kw).','. + ' raumtyp='.$this->addslashes($this->raumtyp).','. + ' raumtypalternativ='.$this->addslashes($this->raumtypalternativ).','. + ' lehre='.($this->lehre?'true':'false').','. + ' anmerkung='.$this->addslashes($this->anmerkung).','. + ' unr='.$this->addslashes($this->unr).','. + ' lvnr='.$this->addslashes($this->lvnr).','. + ' updateamum='.$this->addslashes($this->updateamum).','. + ' updatevon='.$this->addslashes($this->updatevon).','. + ' sprache='.$this->addslashes($this->sprache).','. + ' ext_id='.$this->addslashes($this->ext_id). + " WHERE lehreinheit_id=".$this->addslashes($this->lehreinheit_id).";"; + } + + if($this->db_query($qry)) + { + if($new) + { + //Sequence auslesen + $qry ="SELECT currval('lehre.tbl_lehreinheit_lehreinheit_id_seq') AS lehreinheit_id"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->lehreinheit_id = $row->lehreinheit_id; + $this->db_query('COMMIT;'); + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + $this->db_query('ROLLBACK;'); + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + $this->db_query('ROLLBACK;'); + return false; + } + } + //Log schreiben + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern der LE: '.$qry; + return false; + } + } + + /** + * Prueft die geladene Lehrveranstaltung auf Kollisionen im Stundenplan. + * Rueckgabewert 'false' und die Fehlermeldung steht in '$this->errormsg'. + * @param string datum gewuenschtes Datum YYYY-MM-TT + * @param integer stunde gewuenschte Stunde + * @param string ort gewuenschter Ort + * @param string db_stpl_table Tabllenname des Stundenplans im DBMS + * @return boolean true=ok, false=error + */ + public function check_lva($datum,$stunde,$ort,$stpl_table) + { + $ignore_reservation=false; + $ignore_zeitsperre=false; + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + + //Lektoren SQL + $sql_lkt=''; + foreach ($this->mitarbeiter_uid as $lkt) + $sql_lkt.="OR mitarbeiter_uid='".addslashes($lkt)."' "; + $sql_lkt=mb_substr($sql_lkt,3); + $sql_lkt="(($sql_lkt) AND mitarbeiter_uid!='_DummyLektor')"; + + // Datenbank abfragen + $sql_query="SELECT $stpl_id FROM $stpl_table + WHERE datum='".addslashes($datum)."' AND stunde='".addslashes($stunde)."' + AND (ort_kurzbz='".addslashes($ort)."' OR $sql_lkt)"; + if (is_numeric($this->unr)) + $sql_query.=" AND unr!='".addslashes($this->unr)."'"; + if (!$this->db_query($sql_query)) + { + $this->errormsg=$this->db_last_error(); + return false; + } + $erg_stpl=$this->db_result; + + $anzahl=$this->db_num_rows($erg_stpl); + //Check + if ($anzahl==0) + { + // Reservierungen pruefen? + if (!$ignore_reservation) + { + // Datenbank abfragen ( studiengang_kz, titel, beschreibung ) + //Lektoren SQL + $sql_lkt=''; + foreach ($this->mitarbeiter_uid as $lkt) + $sql_lkt.="OR uid='$lkt' "; + $sql_lkt=mb_substr($sql_lkt,3); + $sql_lkt="(($sql_lkt) AND uid!='_DummyLektor')"; + $sql_query="SELECT reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde + FROM lehre.vw_reservierung + WHERE datum='".addslashes($datum)."' AND stunde='".addslashes($stunde)."' + AND (ort_kurzbz='".addslashes($ort)."' OR $sql_lkt)"; + // Verband SQL + //$sql_query.="(studiengang_kz=$this->studiengang_kz AND semester=$this->sem"; + //if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') + // $sql_query.=" AND (verband='$this->ver' OR verband IS NULL OR verband='' OR verband=' ')"; + //if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') + // $sql_query.=" AND (gruppe='$this->grp' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; + //if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + // $sql_query.=" AND (gruppe_kurzbz='$this->gruppe_kurzbz')"; + //$sql_query.="))"; + + //echo $sql_query.'
'; + if (!$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return false; + } + $erg_res=$this->db_result; + $anz_res=$this->db_num_rows($erg_res); + //Check + if ($anz_res==0) + { + // Zeitsperren pruefen? + if (!$ignore_zeitsperre) + { + // Datenbank abfragen ( studiengang_kz, titel, beschreibung ) + //Lektoren SQL + $sql_lkt=''; + foreach ($this->mitarbeiter_uid as $lkt) + $sql_lkt.="OR mitarbeiter_uid='$lkt' "; + $sql_lkt=mb_substr($sql_lkt,3); + $sql_query="SELECT * FROM campus.tbl_zeitsperre + WHERE ($sql_lkt) AND + ( (vondatum<'$datum' AND bisdatum>'$datum') + OR (vondatum='$datum' AND bisdatum='$datum' AND vonstunde<=$stunde AND bisstunde>=$stunde) + OR (vondatum='$datum' AND bisdatum>'$datum' AND vonstunde<=$stunde) + OR (vondatum<'$datum' AND bisdatum='$datum' AND bisstunde>=$stunde) )"; + //echo $sql_query.'
'; + if (!$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return false; + } + $erg_zs=$this->db_result; + $anz_zs=$this->db_num_rows($erg_zs); + //Check + if ($anz_zs==0) + return true; + else + { + $row=$this->db_fetch_object($erg_zs); + $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid"; + return false; + } + } + return true; + } + else + { + $row=$this->db_fetch_object($erg_res); + $this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; + return false; + } + } + return true; + } + else + { + $row=$this->db_fetch_row($erg_stpl); + $this->errormsg="Kollision mit StundenplanID($stpl_table.$stpl_id): $row[0]"; + return false; + } + } + + /** + * Speichert die geladene Lehreinheit im Stundenplan. + * Rueckgabewert 'false' und die Fehlermeldung steht in '$this->errormsg'. + * @param string datum gewuenschtes Datum YYYY-MM-TT + * @param integer stunde gewuenschte Stunde + * @param string ort gewuenschter Ort + * @param string db_stpl_table Tabllenname des Stundenplans im DBMS + * @param string user UID des aktuellen Bentzers + * @return boolean true=ok, false=error + */ + public function save_stpl($datum,$stunde,$ort,$stpl_table,$user) + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + + // Variablen pruefen + if (!is_numeric($this->unr)) + { + $this->errormsg='Error: UNR ist nicht vorhanden!'; + return false; + } + + + for ($i=0;$i<$this->anz;$i++) + { + // Datenbank INSERT + $sql_query="INSERT INTO $stpl_table + (unr,mitarbeiter_uid,datum, stunde, ort_kurzbz,lehreinheit_id,studiengang_kz,semester,verband, + gruppe, gruppe_kurzbz, titel, anmerkung, updatevon) + VALUES ($this->unr,'".$this->mitarbeiter_uid[$i]."','$datum',$stunde, + '$ort',$this->lehreinheit_id, ".$this->studiengang_kz[$i].",".$this->semester[$i].", + '".$this->verband[$i]."','".$this->gruppe[$i]."'"; + if ($this->gruppe_kurzbz[$i]==null) + $sql_query.=',NULL'; + else + $sql_query.=",'".$this->gruppe_kurzbz[$i]."'"; + $sql_query.=",'".$this->titel[$i]."','$this->anmerkung','$user')"; + if (!$this->db_query($sql_query)) + { + $this->errormsg=$this->db_last_error(); + return false; + } + } + return true; + } + + /** + * Rueckgabewert ist ein Array mit den Ergebnissen. Bei Fehler false und die + * Fehlermeldung liegt in errormsg. + * Wenn der Parameter stg_kz NULL ist tritt gruppe_kurzbzb in Kraft. + * @param string $gruppe_kurzbz Einheit + * @param string grp Gruppe + * @param string ver Verband + * @param integer sem Semester + * @param integer stg_kz Kennzahl des Studiengangs + * @return variabel Array mit LVA; false bei Fehler + */ + public function getLehreinheitLVPL($db_stpl_table,$studiensemester, $type, $stg_kz, $sem, $lektor, $ver=null, $grp=null, $gruppe=null) + { + $lva_stpl_view=VIEW_BEGIN.'lva_'.$db_stpl_table; + + if (mb_strlen($studiensemester)<=0) + { + $this->errormsg='Studiensemester ist nicht gesetzt!(lehreinheit.getLehreinheitLVPL)'; + return false; + } + else $where=" studiensemester_kurzbz='$studiensemester'"; + + if ($type=='lektor') + $where.=" AND lektor_uid='$lektor'"; + elseif ($type=='gruppe') + $where.=" AND gruppe_kurzbz='$gruppe'"; + elseif ($type=='verband') + { + $where.=" AND studiengang_kz='$stg_kz'"; + if ($sem>0) + $where.=" AND semester=$sem"; + if (mb_strlen($ver)>0 && $ver!=' ') + $where.=" AND verband='$ver'"; + if (mb_strlen($grp)>0 && $grp!=' ') + $where.=" AND gruppe='$grp' "; + } + $sql_query='SELECT *, planstunden-verplant::smallint AS offenestunden + FROM lehre.'.$lva_stpl_view.' JOIN lehre.tbl_lehrform ON '.$lva_stpl_view.'.lehrform=tbl_lehrform.lehrform_kurzbz + WHERE '.$where.' AND verplanen ORDER BY offenestunden DESC, lehrfach, lehrform, semester, verband, gruppe, gruppe_kurzbz;'; + + if(!$this->db_query($sql_query)) + { + $this->errormsg=$this->db_last_error().$sql_query; + return false; + } + while($row = $this->db_fetch_object()) + { + $this->lehreinheiten[$row->unr]->lehreinheit_id[]=$row->lehreinheit_id; + $this->lehreinheiten[$row->unr]->lvnr[]=$row->lvnr; + $this->lehreinheiten[$row->unr]->unr=$row->unr; + $this->lehreinheiten[$row->unr]->fachbereich=$row->fachbereich_kurzbz; + $this->lehreinheiten[$row->unr]->lehrfach_id=$row->lehrfach_id; + $this->lehreinheiten[$row->unr]->lehrfach[]=$row->lehrfach; + $this->lehreinheiten[$row->unr]->lehrfach_bez[]=$row->lehrfach_bez; + $this->lehreinheiten[$row->unr]->lehrfach_farbe[]=$row->lehrfach_farbe; + $this->lehreinheiten[$row->unr]->lehrform[]=$row->lehrform; + $this->lehreinheiten[$row->unr]->lektor_uid[]=$row->lektor_uid; + $this->lehreinheiten[$row->unr]->lektor[]=trim($row->lektor); + $this->lehreinheiten[$row->unr]->stg_kz[]=$row->studiengang_kz; + $this->lehreinheiten[$row->unr]->stg[]=$row->studiengang; + $this->lehreinheiten[$row->unr]->gruppe_kurzbz[]=$row->gruppe_kurzbz; + $this->lehreinheiten[$row->unr]->semester[]=$row->semester; + $this->lehreinheiten[$row->unr]->verband[]=$row->verband; + $this->lehreinheiten[$row->unr]->gruppe[]=$row->gruppe; + $this->lehreinheiten[$row->unr]->gruppe_kurzbz[]=$row->gruppe_kurzbz; + $this->lehreinheiten[$row->unr]->raumtyp=$row->raumtyp; + $this->lehreinheiten[$row->unr]->raumtypalternativ=$row->raumtypalternativ; + $this->lehreinheiten[$row->unr]->stundenblockung[]=$row->stundenblockung; + $this->lehreinheiten[$row->unr]->wochenrythmus[]=$row->wochenrythmus; + $this->lehreinheiten[$row->unr]->semesterstunden[]=$row->semesterstunden; + $this->lehreinheiten[$row->unr]->planstunden[]=$row->planstunden; + $this->lehreinheiten[$row->unr]->start_kw[]=$row->start_kw; + $this->lehreinheiten[$row->unr]->anmerkung[]=$row->anmerkung; + $this->lehreinheiten[$row->unr]->studiensemester_kurzbz=$row->studiensemester_kurzbz; + $this->lehreinheiten[$row->unr]->verplant[]=$row->verplant; + $this->lehreinheiten[$row->unr]->offenestunden[]=$row->offenestunden; + if (isset($this->lehreinheiten[$row->unr]->verplant_gesamt)) + $this->lehreinheiten[$row->unr]->verplant_gesamt+=$row->verplant; + else + $this->lehreinheiten[$row->unr]->verplant_gesamt=$row->verplant; + $lvb=$row->studiengang.'-'.$row->semester; + if ($row->verband!='' && $row->verband!=' ' && $row->verband!='0' && $row->verband!=null) + $lvb.=$row->verband; + if ($row->gruppe!='' && $row->gruppe!=' ' && $row->gruppe!='0' && $row->gruppe!=null) + $lvb.=$row->gruppe; + if ($row->gruppe_kurzbz!='' && $row->gruppe_kurzbz!=null) + $this->lehreinheiten[$row->unr]->lehrverband[]=$row->gruppe_kurzbz; + else + $this->lehreinheiten[$row->unr]->lehrverband[]=$lvb; + } + return true; + } + + /** + * Loescht eine Lehreinheit + * @param lehreinheit_id + * @return boolean + */ + public function delete($lehreinheit_id) + { + if(!is_numeric($lehreinheit_id)) + { + $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; + return false; + } + + //Pruefen ob schon eine Kreuzerlliste fuer diese Lehreinheit angelegt wurde. + //Falls ja dann wird das loeschen verweigert + $qry = "SELECT count(*) as anzahl FROM campus.tbl_uebung WHERE lehreinheit_id='$lehreinheit_id'"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + if($row->anzahl>0) + { + $this->errormsg = 'Zu dieser Lehreinheit wurde bereits eine Kreuzerlliste angelegt. Solange fuer eine Lehreinheit Kreuzerllisten vorhanden sind, kann diese nicht geloescht werden.'; + return false; + } + else + { + $this->db_query('BEGIN'); + + //UNDO Befehl zusammenbauen + $undosql=''; + + //LehreinheitMitarbeiter + $qry = "SELECT * FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id='$lehreinheit_id'"; + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $undosql.=" INSERT INTO lehre.tbl_lehreinheitmitarbeiter(lehreinheit_id, mitarbeiter_uid, lehrfunktion_kurzbz, planstunden, stundensatz, faktor, anmerkung, bismelden, updateamum, updatevon, insertamum, insertvon, semesterstunden) + VALUES(".$this->addslashes($row->lehreinheit_id).",".$this->addslashes($row->mitarbeiter_uid).",".$this->addslashes($row->lehrfunktion_kurzbz).",".$this->addslashes($row->planstunden).",".$this->addslashes($row->stundensatz).",".$this->addslashes($row->faktor).",". + $this->addslashes($row->anmerkung).",".($row->bismelden=='t'?'true':'false').",".$this->addslashes($row->updateamum).",".$this->addslashes($row->updatevon).",".$this->addslashes($row->insertamum).",".$this->addslashes($row->insertvon).",".$this->addslashes($row->semesterstunden).");"; + } + } + + //LehreinheitGruppe + $qry = "SELECT * FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id='$lehreinheit_id'"; + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $undosql.=" INSERT INTO lehre.tbl_lehreinheitgruppe(lehreinheitgruppe_id, lehreinheit_id, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, updateamum, updatevon, insertamum, insertvon) + VALUES(".$this->addslashes($row->lehreinheitgruppe_id).",".$this->addslashes($row->lehreinheit_id).",".$this->addslashes($row->studiengang_kz).",'".addslashes($row->semester)."','".addslashes($row->verband)."','".addslashes($row->gruppe)."',". + $this->addslashes($row->gruppe_kurzbz).",".$this->addslashes($row->updateamum).",".$this->addslashes($row->updatevon).",".$this->addslashes($row->insertamum).",".$this->addslashes($row->insertvon).");"; + } + } + + //Lehreinheit + $qry = "SELECT * FROM lehre.tbl_lehreinheit WHERE lehreinheit_id='$lehreinheit_id'"; + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $undosql.=" INSERT INTO lehre.tbl_lehreinheit(lehreinheit_id, lehrveranstaltung_id, studiensemester_kurzbz, lehrfach_id, lehrform_kurzbz, stundenblockung, wochenrythmus, start_kw, raumtyp, raumtypalternativ, sprache, lehre, anmerkung, unr, lvnr, updateamum, updatevon, insertamum, insertvon) + VALUES(".$this->addslashes($row->lehreinheit_id).",".$this->addslashes($row->lehrveranstaltung_id).",".$this->addslashes($row->studiensemester_kurzbz).",".$this->addslashes($row->lehrfach_id).",".$this->addslashes($row->lehrform_kurzbz).",".$this->addslashes($row->stundenblockung).",". + $this->addslashes($row->wochenrythmus).",".$this->addslashes($row->startkw).",".$this->addslashes($row->raumtyp).",".$this->addslashes($row->raumtypalternativ).",".$this->addslashes($row->sprache).",".($row->wochenrythmus=='t'?'true':'false').",". + $this->addslashes($row->anmerkung).",".$this->addslashes($row->unr).",".$this->addslashes($row->lvnr).",".$this->addslashes($row->updateamum).",".$this->addslashes($row->updatevon).",".$this->addslashes($row->insertamum).",".$this->addslashes($row->insertvon).");"; + } + } + + $log = new log(); + + //Gruppenzuteilung, Mitarbeiterzuteilung und Lehreinheit loeschen + $qry = "DELETE FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id='$lehreinheit_id'; + DELETE FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id='$lehreinheit_id'; + DELETE FROM lehre.tbl_lehreinheit WHERE lehreinheit_id='$lehreinheit_id';"; + + $log->new = true; + $log->sql = $qry; + $log->sqlundo = $undosql; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = get_uid(); + $log->beschreibung = "Lehreinheit loeschen - $lehreinheit_id"; + + if(!$log->save()) + { + $this->errormsg = 'Fehler beim Schreiben des Log-Eintrages'; + $this->db_query('ROLLBACK'); + return false; + } + else + { + if($this->db_query($qry)) + { + $this->db_query('COMMIT'); + return true; + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = $this->db_last_error(); + return false; + } + } + } + } + else + { + $this->errormsg = 'Fehler beim Loeschen'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Loeschen'; + return false; + } + } +} +?> diff --git a/include/postgre_sql.class.php b/include/postgre_sql.class.php deleted file mode 100644 index 2534ee8fc..000000000 --- a/include/postgre_sql.class.php +++ /dev/null @@ -1,448 +0,0 @@ -, - * Andreas Oesterreicher , - * Rudolf Hangl , - * Gerald Simane-Sequens . - */ - -#-------------------------------------------------------------------------------------------------- -/* -* -* @classe postgre_sql -* -* @param connectSQL Datenbankverbindung -* -* @return - kein Retourn des Konstruktors -* -*/ -class postgre_sql -{ - protected $error=""; // Letzter aufgetretene Fehler - - protected $connectSQL; // Verbindungsobjekt zur Datenbank - - protected $connectstringSQL=""; // Datenbankverbindungsstring - - protected $stringSQL; // Letzte Datenbankverarbeitungsstring - protected $resourceSQL; // Letzter Datenbankzugriff - protected $resultSQL; // Datenabfrageergebnis - - protected $tableSQL; // Tabelle auf die zugegriffen wird - protected $tableStruckturSQL; // Tabellenstucktur - - protected $encodingSQL=null; // Datenencoding Clint - - protected $newRecord; // Switch Datengefunde - - protected $schemaSQL="public"; // Datenbankschema -//---Konstruktor---------------------------------------------------------------------------------------------- - function postgre_sql($connectSQL) // Konstruktor - { - $this->setConnectSQL($connectSQL); - } -//---ERROR---------------------------------------------------------------------------------------------- - function getError() - { - return $this->error; - } - function setError($error) - { - $this->error=$error; - } -//---// Verbindungsobjekt zur Datenbank---------------------------------------------------------------------------------------------- - function getConnectSQL() - { - return $this->connectSQL; - } - function setConnectSQL($connectSQL) - { - $this->connectSQL=$connectSQL; - } -//-----schemaSQL-------------------------------------------------------------------------------------------- - function getSchemaSQL() - { - return (!empty($this->schemaSQL)?$this->schemaSQL.'.':''); - } - function setSchemaSQL($schemaSQL) - { - $this->schemaSQL=$schemaSQL; - } -//------------------------------------------------------------------------------------------------- - function getResourceSQL() - { - return $this->resourceSQL; - } - function setResourceSQL($resourceSQL) - { - $this->resourceSQL=$resourceSQL; - } -//------------------------------------------------------------------------------------------------- - function getEncodingSQL() - { - return $this->encodingSQL; - } - function setEncodingSQL($encodingSQL) - { - $this->encodingSQL=$encodingSQL; - } -//------------------------------------------------------------------------------------------------- - function getStringSQL() - { - return $this->stringSQL; - } - function setStringSQL($stringSQL) - { - $this->stringSQL=$stringSQL; - } -//---SQL Verbindungsstring ------------------------------------------------------------------------- - function getConnectstringSQL() - { - return $this->connectstringSQL; - } - function setConnectstringSQL($connectstringSQL) - { - $this->connectstringSQL=$connectstringSQL; - } -//------------------------------------------------------------------------------------------------- - function getNewRecord() - { - return $this->newRecord; - } - function setNewRecord($newRecord) - { - $this->newRecord=$newRecord; - } -//------------------------------------------------------------------------------------------------- - function getResultSQL() - { - return $this->resultSQL; - } - function setResultSQL($resultSQL) - { - $this->free_result(); // Vorherige Ergebnisse entfernen - $this->resultSQL=$resultSQL; - if ($this->resultSQL!=null) - { - if ($this->resultSQL) - $this->setNewRecord(false); - else - $this->setNewRecord(true); - } - } -//------------------------------------------------------------------------------------------------- - function getTableSQL() - { - return $this->tableSQL; - } - function setTableSQL($tableSQL) - { - $this->tableSQL=$tableSQL; - } -#-------------------------------------------------------------------------------------------------- -/* -* -* @dbFehler Setzt den Fehlertext fuer einen Resourcenfehler, oder der letzte Fehler der aufgetreten ist -* -* @param - keine Parameter -* -* @return Retour wird der ermittelte Fehlertext, bzw false wenn kein Fehler gefunden wurde -* -*/ - function dbFehler() - { - - $this->setResultSQL(null); - - if ($this->getResourceSQL()) - { - $this->setError(@pg_result_error($this->getResourceSQL())); - if ($this->getError()) return $this->getError(); - } - - if ($this->getConnectSQL()) - { - $this->setError(@pg_last_error($this->getConnectSQL())); - if ($this->getError()) return $this->getError(); - } - - if ($this->getError()) return $this->getError(); - return ''; - } - #-------------------------------------------------------------------------------------------------- - /* - * - * @dbConnect Setzt eine SQL Abfrage in der DB ab, und liefert den Result der Abfrage als Objekt retour - * - * @param connectstringSQL Verbindung zur Datenbank moegliche uebergabe eines Datenbankstring - * - * @return Verbindungs Objekt zur Datenbank - * - */ - function dbConnect($connectstringSQL="") - { - - $this->setConnectSQL(null); - if (!empty($connectstringSQL)) - $this->setConnectstringSQL($connectstringSQL); - if ($connectSQL=@pg_pconnect($this->getConnectstringSQL())) - { - $this->setConnectSQL($connectSQL); - return $this->getConnectSQL(); - } - return $this->dbFehler(); - } - #-------------------------------------------------------------------------------------------------- - /* - * - * @dbQuery Setzt eine SQL Abfrage in der DB ab, und liefert den Result der Abfrage als Objekt retour - * - * @param stringSQL Datenbankabfrage bzw. SQL-Abfrage wenn nicht vorher mittels setStringSQL gesetzt wurde - * - * @return Resource der SQL Anfrage / Abfrage - * - */ - function dbQuery($stringSQL="") - { - // Initialisieren DB Resource - $this->setNewRecord(true); - $this->setResourceSQL(null); - - // SQL Befehl aus Parameter oder aus der ClassenVariable entnehmen - if (empty($stringSQL)) - $stringSQL=$this->getStringSQL(); - // Letzten SQL Befehl merken - $this->setStringSQL($stringSQL); - // Encoding - if($this->getEncodingSQL()!="" && $this->getEncodingSQL()!=null) - $stringSQL="SET CLIENT_ENCODING TO '".$this->getEncodingSQL()."'; ".$stringSQL; - - if (!$resourceSQL=@pg_query($this->getConnectSQL(),$stringSQL)) - { - $this->dbFehler(); - return false; - } - $this->setResourceSQL($resourceSQL); - return $this->getResourceSQL(); - } - #-------------------------------------------------------------------------------------------------- - /* - * - * @fetch_object Setzt den Select in der DB ab, und liefert den Result der Abfrage in Objektform retour - * Die Funktion wird fuer Insert,Delete,Update, Transaktionen benoetigt - * - * @param stringSQL Datenbankabfrage bzw. SQL-Abfrage wenn nicht vorher mittels setStringSQL gesetzt wurde - * - * @return Ergebniss der Datenabfrage, oder Fehlerinformation - * - */ - function free_result() - { - if ($this->getResultSQL() && $this->getResourceSQL()) - { - return @pg_free_result($this->getResourceSQL()); - } - return false; - } - #-------------------------------------------------------------------------------------------------- - /* - * - * @fetch_object Setzt den Select in der DB ab, und liefert den Result der Abfrage in Objektform retour - * Die Funktion wird fuer Insert,Delete,Update, Transaktionen benoetigt - * - * @param stringSQL Datenbankabfrage bzw. SQL-Abfrage wenn nicht vorher mittels setStringSQL gesetzt wurde - * - * @return Ergebniss der Datenabfrage, oder Fehlerinformation - * - */ - function fetch_array($stringSQL="") - { - if (!$this->dbQuery($stringSQL)) - return false; - if(!$resultSQL=@pg_fetch_array($this->getResourceSQL(),null,PGSQL_ASSOC)) - { - $this->dbFehler(); - return false; - } - $this->setResultSQL($resultSQL); - return true; - } - #-------------------------------------------------------------------------------------------------- - /* - * - * @fetch_object Setzt den Select in der DB ab, und liefert den Result der Abfrage in Objektform retour - * Die Funktion wird fuer Insert,Delete,Update, Transaktionen benoetigt - * - * @param stringSQL Datenbankabfrage bzw. SQL-Abfrage wenn nicht vorher mittels setStringSQL gesetzt wurde - * - * @return Ergebniss der Datenabfrage, oder Fehlerinformation - * - */ - function fetch_object($stringSQL="") - { - if (!$this->dbQuery($stringSQL)) - return false; - if(!$resultSQL=@pg_fetch_object($this->getResourceSQL())) - { - $this->dbFehler(); - return false; - } - $this->setResultSQL($resultSQL); - return true; - } - #-------------------------------------------------------------------------------------------------- - /* - * - * @fetch_all Liefert zu einem SQL Select alle gefundenen Daten in einem Array - * - * @param stringSQL Datenbankabfrage bzw. SQL-Abfrage wenn nicht vorher mittels setStringSQL gesetzt wurde - * - * @return Array der gefunden Daten bzw. Leer oder eine DB Fehlernachricht - * - */ - function fetch_all($stringSQL="") - { - if (!$this->dbQuery($stringSQL)) - return false; - if(!$resultSQL=@pg_fetch_all($this->getResourceSQL())) - { - $this->dbFehler(); - return false; - } - $this->setResultSQL($resultSQL); - return true; - } - #-------------------------------------------------------------------------------------------------- - /* - * - * @fetch_object_all Liefert zu einem SQL Select alle gefundenen Daten in einem Array - * - * @param stringSQL Datenbankabfrage bzw. SQL-Abfrage wenn nicht vorher mittels setStringSQL gesetzt wurde - * - * @return Array der gefunden Daten bzw. Leer oder eine DB Fehlernachricht - * - */ - function fetch_all_object($stringSQL="") - { - if (!$this->dbQuery($stringSQL)) - return false; - $resultSQL=array(); - if(!$resultSQL[]=@pg_fetch_object($this->getResourceSQL())) - { - $this->dbFehler(); - return false; - } - - while ($res=@pg_fetch_object($this->getResourceSQL())) - if ($res) $resultSQL[]=$res; - - $this->setResultSQL($resultSQL); - return true; - } - #-------------------------------------------------------------------------------------------------- - /* - * - * @setTableStruckturSQL Liefert zu einer Tabelle die Strucktur und Feldinformationen - * - * @param tableSQL Tabelle zu der die Informationen geliefert werden sollen - * - * @return Array der gefunden Tabellenstrucktur - * - */ - function getTableStruckturSQL() - { - return $this->tableStruckturSQL; - } - function setTableStruckturSQL($tableSQL="") - { - if (!empty($tableSQL)) - $this->setTableSQL($tableSQL); - $tableSQL=$this->getTableSQL(); - - # listet die Datenbanken-Tabellenfelder auf - $this->tableStruckturSQL=array(); - $cTmpSQL=" - SELECT - a.attnum, - a.attname AS field, - a.attname AS fildname, - t.typname AS type, - a.attlen AS length, - a.atttypmod AS lengthvar, - a.attnotnull AS notnull - FROM - pg_class c, - pg_attribute a, - pg_type t - WHERE - c.relname = '".$tableSQL."' - AND a.attnum > 0 - AND a.attrelid = c.oid - AND a.atttypid = t.oid - ORDER BY a.attnum; - "; - // Datenbankabfrage - $this->setStringSQL($cTmpSQL); - unset($cTmpSQL); - $this->setResultSQL(null); - if (!$this->fetch_all()) - return false; - - $arrTmpResultSQL=$this->getResultSQL(); - $this->setResultSQL(null); - # listet die Anzahl der Felder auf - for ($i=0;$isetStringSQL($cTmpSQL); - unset($cTmpSQL); - $this->setResultSQL(null); - if ($this->fetch_array()) - $flags.=($this->resultSQL['pk']=="$feldname"?', primary_key ':' '); - - $this->tableStruckturSQL[]=array("name"=>$feldname,"flag"=>$flags,"type"=>$type,"laenge"=>$laenge); - } - return $this->getTableStruckturSQL(); - } - } // Ende Class kommune diff --git a/rdf/bisio.rdf.php b/rdf/bisio.rdf.php index d06f43b74..9157ba107 100644 --- a/rdf/bisio.rdf.php +++ b/rdf/bisio.rdf.php @@ -31,6 +31,9 @@ require_once('../config/vilesci.config.inc.php'); require_once('../include/bisio.class.php'); require_once('../include/datum.class.php'); + if (!$db = new basis_db()) + die('Fehler beim Oeffnen der Datenbankverbindung'); + echo ''; if(isset($_GET['uid'])) @@ -91,9 +94,9 @@ function draw_content($row) if($row->lehreinheit_id!='') { $qry = "SELECT lehrveranstaltung_id, studiensemester_kurzbz FROM lehre.tbl_lehreinheit WHERE lehreinheit_id='$row->lehreinheit_id'"; - if($result = pg_query($conn, $qry)) + if($result = $db->db_query($conn, $qry)) { - if($row_lv = pg_fetch_object($result)) + if($row_lv = $db->db_fetch_object($result)) { $lehrveranstaltung_id = $row_lv->lehrveranstaltung_id; $studiensemester_kurzbz = $row_lv->studiensemester_kurzbz; diff --git a/vilesci/bis/checkfunktion.php b/vilesci/bis/checkfunktion.php index 2c7b42283..c55a9e945 100644 --- a/vilesci/bis/checkfunktion.php +++ b/vilesci/bis/checkfunktion.php @@ -95,7 +95,7 @@ if($result = $db->db_query($qry)) } else { - if($row_verw = pg_fetch_object($result_verw)) + if($row_verw = $db->db_fetch_object($result_verw)) $verwendung_id = $row_verw->bisverwendung_id; else { @@ -104,7 +104,7 @@ if($result = $db->db_query($qry)) } } - if(pg_num_rows($result_verw)>1) + if($db->db_num_rows($result_verw)>1) { echo "
Es wurde mehr als eine Verwendung bei $row->mitarbeiter_uid gefunden - es wird die Verwendung $verwendung_id verwendet"; $verwendung_multiple++; @@ -174,7 +174,7 @@ if($result = $db->db_query($qry)) ORDER BY mitarbeiter_uid, studiengang_kz"; if($result = $db->db_query($qry)) { - $funktion_ohne_lehrauftrag = pg_num_rows($result); + $funktion_ohne_lehrauftrag = $db->db_num_rows($result); while($row = $db->db_fetch_object($result)) { diff --git a/vilesci/lehre/abgabe_assistenz_multitermin.php b/vilesci/lehre/abgabe_assistenz_multitermin.php index f74bd1296..6d55a6882 100644 --- a/vilesci/lehre/abgabe_assistenz_multitermin.php +++ b/vilesci/lehre/abgabe_assistenz_multitermin.php @@ -101,7 +101,7 @@ if(isset($_POST["schick"])) } else { - $row=@pg_fetch_object($result); + $row=@$db->db_fetch_object($result); $qry_typ="SELECT bezeichnung FROM campus.tbl_paabgabetyp WHERE paabgabetyp_kurzbz='".$paabgabetyp_kurzbz."'"; if($result_typ=$db->db_query($qry_typ)) { diff --git a/vilesci/lehre/import/stdplan_import_sendmail.php b/vilesci/lehre/import/stdplan_import_sendmail.php index 14ca4b814..5b4d9c547 100644 --- a/vilesci/lehre/import/stdplan_import_sendmail.php +++ b/vilesci/lehre/import/stdplan_import_sendmail.php @@ -101,9 +101,7 @@ if ($num_checkmail==0) { - //$row_checkmail=pg_fetch_object($result_checkmail,0); $text.="$date\t$row->stunde_id\t$row->semester$row->verband$row->gruppe\r\n"; - //$text.="$row_checkmail->datum\t$row_checkmail->stunde_id\t$row_checkmail->semester$row_checkmail->verband$row_checkmail->gruppe\t$row_checkmail->ortkurzbz\t$row_checkmail->stgkurzbz\t$row_checkmail->lehrfachkurzbz lektor_id lektorkurzbz $stundenanzahl++; $sendmail=1; } diff --git a/vilesci/lehre/lehrfach/lehrfachpflege.php b/vilesci/lehre/lehrfach/lehrfachpflege.php index 7d53afb03..1cdfa0756 100644 --- a/vilesci/lehre/lehrfach/lehrfachpflege.php +++ b/vilesci/lehre/lehrfach/lehrfachpflege.php @@ -104,7 +104,7 @@ $qry="SELECT tbl_lehrveranstaltung.bezeichnung as lvbez, tbl_lehrveranstaltung.k if($result = $db->db_query($qry)) { - echo "
Anzahl der Datensätze: ".pg_num_rows($result); + echo "
Anzahl der Datensätze: ".$db->db_num_rows($result); echo ""; while($row =$db->db_fetch_object($result)) { diff --git a/vilesci/lehre/lehrveranstaltung.php b/vilesci/lehre/lehrveranstaltung.php index 49d66f488..2592293f1 100644 --- a/vilesci/lehre/lehrveranstaltung.php +++ b/vilesci/lehre/lehrveranstaltung.php @@ -349,7 +349,7 @@ echo '
IDLV-KürzelLV-BezeichnungStg-KzSem.LF-KürzelLF-BezeichnungLehrfach-Auswahl
'; if ($result_lv!=0) { - $num_rows=pg_num_rows($result_lv); + $num_rows=$db->db_num_rows($result_lv); echo "

Übersicht - $num_rows LVAs

@@ -374,7 +374,7 @@ if ($result_lv!=0) echo ""; for($i=0;$i<$num_rows;$i++) { - $row=pg_fetch_object($result_lv); + $row=$db->db_fetch_object($result_lv); echo ""; //ID echo "> @@ -138,10 +138,10 @@ Anzahl: db_num_rows($result_lehrfach); for ($i=0;$i<$num_rows;$i++) { - $row=pg_fetch_object ($result_lehrfach, $i); + $row=$db->db_fetch_object ($result_lehrfach, $i); echo ""; } ?> @@ -164,10 +164,10 @@ Anzahl: \n"; echo ""; echo ""; for($i=0;$i<$num_rows;$i++) { - $row=pg_fetch_object($result_std,$i); + $row=$db->db_fetch_object($result_std,$i); $qry_status="SELECT status_kurzbz, ausbildungssemester FROM public.tbl_prestudentstatus JOIN public.tbl_prestudent USING(prestudent_id) WHERE person_id=".myaddslashes($row->person_id)." AND studiengang_kz=".$row->studiengang_kz." diff --git a/vilesci/personen/student_vorrueckung_manuell.php b/vilesci/personen/student_vorrueckung_manuell.php index 19fd5efaf..6cdb00f19 100644 --- a/vilesci/personen/student_vorrueckung_manuell.php +++ b/vilesci/personen/student_vorrueckung_manuell.php @@ -282,14 +282,14 @@ echo "

Übersicht

if ($result_std!=0) { - $num_rows=pg_num_rows($result_std); + $num_rows=$db->db_num_rows($result_std); echo 'Anzahl: '.$num_rows; echo "\n"; echo ""; echo ""; for($i=0;$i<$num_rows;$i++) { - $row=pg_fetch_object($result_std,$i); + $row=$db->db_fetch_object($result_std,$i); $qry_status="SELECT status_kurzbz, ausbildungssemester FROM public.tbl_prestudentstatus JOIN public.tbl_prestudent USING(prestudent_id) WHERE person_id=".myaddslashes($row->person_id)." AND studiengang_kz=".$row->studiengang_kz." diff --git a/vilesci/personen/studenten_uebersicht.php b/vilesci/personen/studenten_uebersicht.php index 7a5ce8c85..3cd21c61c 100644 --- a/vilesci/personen/studenten_uebersicht.php +++ b/vilesci/personen/studenten_uebersicht.php @@ -64,7 +64,7 @@ for ($i=0; $i<$num_rows; $i++) { echo ""; - while($row = pg_fetch_object($result)) + while($row = $db->db_fetch_object($result)) { $rtergebnis = $pruefling->getReihungstestErgebnis($row->prestudent_id); echo "
"; diff --git a/vilesci/lehre/lvplanwartung.php b/vilesci/lehre/lvplanwartung.php index fa29dcfe2..87603566c 100644 --- a/vilesci/lehre/lvplanwartung.php +++ b/vilesci/lehre/lvplanwartung.php @@ -105,7 +105,7 @@ WHERE lehreinheit_id=$leid AND datum='$row->datum' AND stunde=$row->stunde;"; if(!$result_ort=$db->db_query($qry)) die ("DB Fehler $qry" .' '.$db->db_last_error()); - while ($row_ort=pg_fetch_object($result_ort)) + while ($row_ort=$db->db_fetch_object($result_ort)) { $qry="INSERT INTO lehre.$stpl_table (datum,stunde,ort_kurzbz,unr,mitarbeiter_uid,studiengang_kz,semester,verband,gruppe,gruppe_kurzbz,lehreinheit_id, insertvon) VALUES ('".$row->datum."', $row->stunde,'$row_ort->ort_kurzbz',$unr,'".$lektor_uid."',$studiengang_kz,$semester,'$verband','$gruppe',"; diff --git a/vilesci/personen/lektorzuteilung_edit.php b/vilesci/personen/lektorzuteilung_edit.php index e9aedc949..c0707c0b5 100644 --- a/vilesci/personen/lektorzuteilung_edit.php +++ b/vilesci/personen/lektorzuteilung_edit.php @@ -116,7 +116,7 @@ Anzahl: $bgcolor = $cfgBgcolorOne; $i % 2 ? 0: $bgcolor = $cfgBgcolorTwo; - $row=pg_fetch_object ($erg, $i); + $row=$db->db_fetch_object ($erg, $i); ?>
NachnameVornameSTGSemVerGrpStatusAusbSem
NachnameVornameSTGSemVerGrpStatusAusbSem
"; - $row=pg_fetch_object($erg, $i); + $row=$db->db_fetch_object($erg, $i); $stg_kzbz=$row->kurzbz; $stg_kz=$row->studiengang_kz; $sql_query="SELECT DISTINCT semester FROM public.tbl_student WHERE studiengang_kz=$stg_kz ORDER BY semester"; diff --git a/vilesci/personen/suche.php b/vilesci/personen/suche.php index 0e346d218..50af96d01 100644 --- a/vilesci/personen/suche.php +++ b/vilesci/personen/suche.php @@ -157,7 +157,7 @@ if($searchstr!='') WHERE person_id='$row->person_id'"; if($result_mitarbeiter = $db->db_query($qry)) { - if(pg_num_rows($result_mitarbeiter)>0) + if($db->db_num_rows($result_mitarbeiter)>0) { while($row_mitarbeiter = $db->db_fetch_object($result_mitarbeiter)) diff --git a/vilesci/personen/zeitwunsch.php b/vilesci/personen/zeitwunsch.php index 8d462f589..87ca422ad 100644 --- a/vilesci/personen/zeitwunsch.php +++ b/vilesci/personen/zeitwunsch.php @@ -70,7 +70,7 @@ $query="SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid='$uid' AND stunde=$stunde AND tag=$t"; if(! $erg_wunsch=$db->db_query($query)) die($db->db_last_error()); - $num_rows_wunsch=pg_num_rows($erg_wunsch); + $num_rows_wunsch=$db->db_num_rows($erg_wunsch); if ($num_rows_wunsch==0) { $query="INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, stunde, tag, gewicht) VALUES ('$uid', $stunde, $t, $gewicht)"; diff --git a/vilesci/personen/zeitwunsch_save.php b/vilesci/personen/zeitwunsch_save.php index 267b3c178..e8cdbe97b 100644 --- a/vilesci/personen/zeitwunsch_save.php +++ b/vilesci/personen/zeitwunsch_save.php @@ -31,7 +31,7 @@ if(!($erg_std=$db->db_query("SELECT * FROM stunde ORDER BY id"))) die($db->db_last_error()); - $num_rows_std=pg_numrows($erg_std); + $num_rows_std=$db->db_num_rows($erg_std); for ($t=1;$t<7;$t++) for ($i=0;$i<$num_rows_std;$i++) { @@ -42,7 +42,7 @@ $query="SELECT * FROM zeitwunsch WHERE lektor_id=$lkid AND stunde_id=$stunde AND tag=$t"; if(!($erg_wunsch=$db->db_query($query))) die($db->db_last_error()); - $num_rows_wunsch=pg_numrows($erg_wunsch); + $num_rows_wunsch=$db->db_num_rows($erg_wunsch); if ($num_rows_wunsch==0) { $query="INSERT INTO zeitwunsch (lektor_id, stunde_id, tag, gewicht) VALUES ($lkid, $stunde, $t, $gewicht)"; diff --git a/vilesci/stammdaten/le_wartung.php b/vilesci/stammdaten/le_wartung.php index 7c32cdf83..004cbd990 100644 --- a/vilesci/stammdaten/le_wartung.php +++ b/vilesci/stammdaten/le_wartung.php @@ -282,7 +282,7 @@ if($result = $db->db_query($qry)) { - if(pg_numrows($result)==0) + if($db->db_num_rows($result)==0) { $qry = "UPDATE sync.tbl_synclehreinheit SET lehreinheit_id='$le_id_bleibt' WHERE lehreinheit_id='$le_id_delete';"; } diff --git a/vilesci/stammdaten/personen_wartung.php b/vilesci/stammdaten/personen_wartung.php index 88f8809f6..366bc7a72 100644 --- a/vilesci/stammdaten/personen_wartung.php +++ b/vilesci/stammdaten/personen_wartung.php @@ -140,7 +140,7 @@ if(isset($radio_1) && isset($radio_2) && $radio_1>=0 && $radio_2>=0) $db->db_query($sql_query_upd1); $msg.= "
".mb_eregi_replace(';',';
',$sql_query_upd1)."COMMIT"; } - if(@pg_query('SELECT person_id FROM sync.tbl_syncperson LIMIT 1')) + if(@$db->db_query('SELECT person_id FROM sync.tbl_syncperson LIMIT 1')) { $msg.= "

Sync-Tabelle wird aktualisiert"; $sql_query_upd1="UPDATE sync.tbl_syncperson SET person_id='$radio_2' WHERE person_id='$radio_1';"; diff --git a/vilesci/stammdaten/reihungstestverwaltung.php b/vilesci/stammdaten/reihungstestverwaltung.php index e06abd3be..45a1e59f3 100644 --- a/vilesci/stammdaten/reihungstestverwaltung.php +++ b/vilesci/stammdaten/reihungstestverwaltung.php @@ -444,7 +444,7 @@