diff --git a/FHC-vendor/jquery-tablesorter/package.json b/FHC-vendor/jquery-tablesorter/package.json index b16fcb45e..110042959 100644 --- a/FHC-vendor/jquery-tablesorter/package.json +++ b/FHC-vendor/jquery-tablesorter/package.json @@ -56,7 +56,7 @@ ] }, "devDependencies": { - "grunt": "^0.4.5", + "grunt": "^1.3.0", "grunt-cli": "~0.1.13", "grunt-contrib-clean": "^0.7.0", "grunt-contrib-concat": "^0.5.1", diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php index 8a096338e..0fe70a302 100644 --- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php +++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php @@ -270,7 +270,6 @@ class Lehrauftrag extends Auth_Controller private function _sendMail($lehrvertrag_data_arr) { // Cluster data of new lehrvertraege as needed to send mail - $lehrvertrag_data_arr = $this->_cluster_newVertragData($lehrvertrag_data_arr); foreach ($lehrvertrag_data_arr as $lehrvertrag_data) { diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 43de8bb60..7d36690e7 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -70,6 +70,7 @@ class InfoCenter extends Auth_Controller const INTERESSENTSTATUS = 'Interessent'; const ABGEWIESENERSTATUS = 'Abgewiesener'; const BEWERBERSTATUS = 'Bewerber'; + const WARTENDER = 'Wartender'; // Statusgruende for which no Studiengangsfreigabemessage should be sent private $_statusgruendeNoStgFreigabeMessage = array('FIT Programm', 'FIT program', 'FIT programme'); @@ -108,7 +109,9 @@ class InfoCenter extends Auth_Controller 'setOnHold' => 'infocenter:rw', 'removeOnHold' => 'infocenter:rw', 'getStudienjahrEnd' => 'infocenter:r', - 'setNavigationMenuArrayJson' => 'infocenter:r' + 'setNavigationMenuArrayJson' => 'infocenter:r', + 'getAbsageData' => 'infocenter:r', + 'saveAbsageForAll' => 'infocenter:rw' ) ); @@ -433,11 +436,14 @@ class InfoCenter extends Auth_Controller * Saves Absage for Prestudent including the reason for the Absage (statusgrund). * inserts Studiensemester and Ausbildungssemester for the new Absage of (chronologically) last status. */ - public function saveAbsage() + public function saveAbsage($prestudent_id = null, $statusgrund = null) { $json = null; - $prestudent_id = $this->input->post('prestudent_id'); - $statusgrund = $this->input->post('statusgrund'); + if (is_null($prestudent_id)) + $prestudent_id = $this->input->post('prestudent_id'); + + if (is_null($statusgrund)) + $statusgrund = $this->input->post('statusgrund'); $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); @@ -446,8 +452,10 @@ class InfoCenter extends Auth_Controller if (hasData($lastStatus) && hasData($statusgrresult)) { - //check if still Interessent and not freigegeben yet - if ($lastStatus->retval[0]->status_kurzbz === self::INTERESSENTSTATUS && !isset($lastStatus->retval[0]->bestaetigtam)) + //check if still Interessent + if ($lastStatus->retval[0]->status_kurzbz === self::INTERESSENTSTATUS + || $lastStatus->retval[0]->status_kurzbz === self::BEWERBERSTATUS + || $lastStatus->retval[0]->status_kurzbz === self::WARTENDER) { $result = $this->PrestudentstatusModel->insert( array( @@ -1358,6 +1366,8 @@ class InfoCenter extends Auth_Controller || isset($zgvpruefung->prestudentstatus->bestaetigtam) || $zgvpruefung->prestudentstatus->status_kurzbz != self::INTERESSENTSTATUS; + $zgvpruefung->abgewiesener = $zgvpruefung->prestudentstatus->status_kurzbz === self::ABGEWIESENERSTATUS; + //wether prestudent was freigegeben for RT/Stg $zgvpruefung->isRtFreigegeben = false; $zgvpruefung->isStgFreigegeben = false; @@ -1427,8 +1437,8 @@ class InfoCenter extends Auth_Controller $this->_sortPrestudents($zgvpruefungen); - $abwstatusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => self::ABGEWIESENERSTATUS))->retval; - $intstatusgruende = $this->StatusgrundModel->loadWhere(array('status_kurzbz' => self::INTERESSENTSTATUS))->retval; + $abwstatusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; + $intstatusgruende = $this->StatusgrundModel->getStatus(self::INTERESSENTSTATUS)->retval; $data = array ( 'zgvpruefungen' => $zgvpruefungen, @@ -1687,4 +1697,45 @@ class InfoCenter extends Auth_Controller $this->loglib->logError('Studiengang has no mail for sending Freigabe mail'); } } + + public function getAbsageData() + { + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + $statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; + $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); + $studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(['b', 'm'], $studienSemester); + + $data = array ( + 'statusgruende' => $statusgruende, + 'studiengaenge' => $studiengaenge->retval + ); + + $this->outputJsonSuccess($data); + } + + public function saveAbsageForAll() + { + $statusgrund = $this->input->post('statusgrund'); + $studiengang = $this->input->post('studiengang'); + $personen = $this->input->post('personen'); + $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); + + if ($statusgrund === 'null' || $studiengang === 'null' || empty($personen)) + $this->terminateWithJsonError("Bitte Statusgrund, Studiengang und Personen auswählen."); + + foreach($personen as $person) + { + $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester); + + if(!hasData($prestudent)) + continue; + + $prestudentData = getData($prestudent); + + $this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund); + } + + $this->outputJsonSuccess("Success"); + } } diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 2e014800c..52ba4d9f3 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -581,4 +581,19 @@ class Prestudent_model extends DB_Model return $this->execQuery($query, array($person_id)); } + + public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester) + { + $query = "SELECT ps.prestudent_id + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE ps.person_id = ? + AND UPPER((sg.typ || sg.kurzbz) || ':' || sp.orgform_kurzbz) = ? + AND pss.studiensemester_kurzbz = ? + "; + + return $this->execQuery($query, array($person, $studiengang, $studienSemester)); + } } diff --git a/application/models/crm/Statusgrund_model.php b/application/models/crm/Statusgrund_model.php index 4717a7571..7ab17a45b 100644 --- a/application/models/crm/Statusgrund_model.php +++ b/application/models/crm/Statusgrund_model.php @@ -11,4 +11,18 @@ class Statusgrund_model extends DB_Model $this->dbTable = "public.tbl_status_grund"; $this->pk = "statusgrund_id"; } + + public function getStatus($status_kurzbz = null, $aktiv = null) + { + $this->addOrder('bezeichnung_mehrsprachig'); + $where = array(); + if (!is_null($status_kurzbz)) + $where['status_kurzbz'] = $status_kurzbz; + if (!is_null($aktiv)) + $where['aktiv'] = $aktiv; + + $status = $this->loadWhere($where); + + return success($status->retval); + } } diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 8b8be0366..41bdabd11 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -481,4 +481,18 @@ class Studiengang_model extends DB_Model return $this->loadWhere($condition); } + + public function getStudiengaengeWithOrgForm($typ, $semester) + { + $query = "SELECT DISTINCT (UPPER(sg.typ || sg.kurzbz || ':' || sp.orgform_kurzbz)) AS Studiengang + FROM public.tbl_studiengang sg + JOIN lehre.tbl_studienordnung USING (studiengang_kz) + JOIN lehre.tbl_studienplan sp USING (studienordnung_id) + JOIN lehre.tbl_studienplan_semester spsem USING (studienplan_id) + WHERE sp.aktiv = TRUE AND sg.aktiv = TRUE AND sg.typ IN ? + AND spsem.studiensemester_kurzbz = ? + ORDER BY Studiengang"; + + return $this->execQuery($query, array($typ, $semester)); + } } diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php index e87f0945c..521883452 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php @@ -189,7 +189,7 @@ $this->load->view(
- + diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php index f09eb62a0..92c896ce7 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php @@ -32,7 +32,7 @@ SELECT erteilt, akzeptiert, (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -48,7 +48,7 @@ SELECT ) ) AS "bestellt_von", (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -64,7 +64,7 @@ SELECT ) ) AS "erteilt_von", (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -241,7 +241,7 @@ FROM \'Betreuung\' AS "typ", (betreuerart_kurzbz || \' \' || (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM PUBLIC.tbl_person JOIN PUBLIC.tbl_benutzer USING (person_id) diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php index 88b3eabd0..7c9669ae3 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php @@ -34,7 +34,7 @@ SELECT erteilt, akzeptiert, (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -50,7 +50,7 @@ SELECT ) ) AS "bestellt_von", (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -66,7 +66,7 @@ SELECT ) ) AS "erteilt_von", (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -128,7 +128,7 @@ FROM ( SELECT /* lehrauftraege also planned with dummies, therefore personalnummer is needed */ - ma.personalnummer, + (ma.personalnummer::text), lema.lehreinheit_id, lv.lehrveranstaltung_id, lv.bezeichnung AS "lv_bezeichnung", @@ -240,7 +240,7 @@ FROM pa.lehreinheit_id, lv.lehrveranstaltung_id, lv.bezeichnung AS "lv_bezeichnung", - pa.projektarbeit_id AS "projektarbeit_id", + (pa.projektarbeit_id::text) AS "projektarbeit_id", le.studiensemester_kurzbz, stg.studiengang_kz, upper(stg.typ || stg.kurzbz) AS "stg_typ_kurzbz", @@ -249,7 +249,7 @@ FROM \'Betreuung\' AS "typ", (betreuerart_kurzbz || \' \' || (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM PUBLIC.tbl_person JOIN PUBLIC.tbl_benutzer USING (person_id) @@ -268,7 +268,7 @@ FROM ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung) END AS "lv_oe_kurzbz", - (nachname || \' \' || vorname) AS "lektor", + (vorname || \' \' || nachname) AS "lektor", TRUNC(pb.stunden, 1) AS "stunden", TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag", vertrag_id, diff --git a/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php b/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php index 54948fb26..a3efb66b3 100644 --- a/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php @@ -14,7 +14,7 @@ $query = ' datum AS "storniert", ( SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php index aea7d5181..1ccfc55a4 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php @@ -65,7 +65,7 @@ SELECT erteilt, akzeptiert, (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -81,7 +81,7 @@ SELECT ) ) AS "bestellt_von", (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -97,7 +97,7 @@ SELECT ) ) AS "erteilt_von", (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM public.tbl_person JOIN public.tbl_benutzer benutzer USING (person_id) @@ -281,7 +281,7 @@ FROM \'Betreuung\' AS "typ", (betreuerart_kurzbz || \' \' || (SELECT - vorname || \' \' || nachname + nachname || \' \' || vorname FROM PUBLIC.tbl_person JOIN PUBLIC.tbl_benutzer USING (person_id) diff --git a/application/views/lehre/pruefungsprotokollUebersicht.php b/application/views/lehre/pruefungsprotokollUebersicht.php index 35bea7963..c7de8fcd0 100644 --- a/application/views/lehre/pruefungsprotokollUebersicht.php +++ b/application/views/lehre/pruefungsprotokollUebersicht.php @@ -48,6 +48,8 @@ name="period" value="today">p->t('ui','heute'); ?> +
diff --git a/application/views/lehre/pruefungsprotokollUebersichtData.php b/application/views/lehre/pruefungsprotokollUebersichtData.php index dd247c2eb..ff2caa774 100644 --- a/application/views/lehre/pruefungsprotokollUebersichtData.php +++ b/application/views/lehre/pruefungsprotokollUebersichtData.php @@ -19,9 +19,10 @@ FROM WHERE vorsitz='".$UID."' AND ( - '". $PERIOD. "' = 'today' AND datum = NOW()::date OR - '". $PERIOD. "' = 'lastWeek' AND datum = (NOW() - interval '1 week')::date OR - '". $PERIOD. "' = 'all' AND datum >= '2020-05-27' + ('". $PERIOD. "' = 'today' AND datum = NOW()::date) OR + ('". $PERIOD. "' = 'lastWeek' AND datum >= (NOW() - interval '1 week')::date AND datum < NOW()::date) OR + ('". $PERIOD. "' = 'upcoming' AND datum > NOW()::date) OR + ('". $PERIOD. "' = 'all' AND datum >= '2020-05-27') ) ORDER BY datum, nachname, vorname "; diff --git a/application/views/system/infocenter/absageModal.php b/application/views/system/infocenter/absageModal.php new file mode 100644 index 000000000..00298945e --- /dev/null +++ b/application/views/system/infocenter/absageModal.php @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/application/views/system/infocenter/infocenter.php b/application/views/system/infocenter/infocenter.php index 4005518a1..38e644846 100644 --- a/application/views/system/infocenter/infocenter.php +++ b/application/views/system/infocenter/infocenter.php @@ -13,6 +13,7 @@ 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, + 'dialoglib' => true, 'phrases' => array( 'person' => array('vorname', 'nachname'), 'global' => array('mailAnXversandt'), @@ -40,6 +41,7 @@
load->view('system/infocenter/infocenterData.php'); ?> + load->view('system/infocenter/absageModal.php'); ?>
diff --git a/application/views/system/infocenter/infocenterFreigegeben.php b/application/views/system/infocenter/infocenterFreigegeben.php index 15e73f1b6..4855e5cd6 100644 --- a/application/views/system/infocenter/infocenterFreigegeben.php +++ b/application/views/system/infocenter/infocenterFreigegeben.php @@ -13,6 +13,7 @@ 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, + 'dialoglib' => true, 'phrases' => array( 'person' => array('vorname', 'nachname'), 'global' => array('mailAnXversandt'), @@ -40,6 +41,7 @@
load->view('system/infocenter/infocenterFreigegebenData.php'); ?> + load->view('system/infocenter/absageModal.php'); ?>
diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index aab69b651..3e14e7323 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -114,6 +114,12 @@ sg.studiengang_kz in('.$ADDITIONAL_STG.') ) AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.' + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = ps.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + ) LIMIT 1 ) AS "StgAbgeschickt", ( diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviert.php b/application/views/system/infocenter/infocenterReihungstestAbsolviert.php index 79f75885b..f2d838fac 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviert.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviert.php @@ -13,6 +13,7 @@ 'ajaxlib' => true, 'filterwidget' => true, 'navigationwidget' => true, + 'dialoglib' => true, 'phrases' => array( 'person' => array('vorname', 'nachname'), 'global' => array('mailAnXversandt'), @@ -40,6 +41,7 @@
load->view('system/infocenter/infocenterReihungstestAbsolviertData.php'); ?> + load->view('system/infocenter/absageModal.php'); ?>
diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index 22b122bb0..beb4887ae 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -83,10 +83,11 @@ LIMIT 1 ) AS "AnzahlAbgeschickt", ( - SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz || \':\' || sg.orgform_kurzbz)), \', \') + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz || \':\' || sp.orgform_kurzbz)), \', \') FROM public.tbl_prestudentstatus pss JOIN public.tbl_prestudent ps USING(prestudent_id) JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' AND pss.bewerbung_abgeschicktamum IS NOT NULL AND ps.person_id = p.person_id diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index 41b549616..2d00a789d 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -344,7 +344,7 @@ prestudentstatus->status_kurzbz) && in_array($zgvpruefung->prestudentstatus->status_kurzbz, ['Bewerber', 'Wartender']))) : ?> - prestudentstatus->bewerbung_abgeschicktamum)) - { - $disabled = $disabledStg = 'disabled'; - $disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt'); - } + prestudentstatus->bewerbung_abgeschicktamum)) + { + $disabled = $disabledStg = 'disabled'; + $disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt'); + } - if ($studiengangtyp !== 'b') - { - $disabled = 'disabled'; - $disabledTxt = $this->p->t('infocenter', 'nurBachelorFreigeben'); + if ($studiengangtyp !== 'b') + { + $disabled = 'disabled'; + $disabledTxt = $this->p->t('infocenter', 'nurBachelorFreigeben'); - // FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter - if (!in_array($studiengang_kz, $fit_programme_studiengaenge)) - { - $disabledStg = 'disabled'; - $disabledStgTxt = $this->p->t('infocenter', 'nurBachelorFreigeben'); - } + // FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter + if (!in_array($studiengang_kz, $fit_programme_studiengaenge)) + { + $disabledStg = 'disabled'; + $disabledStgTxt = $this->p->t('infocenter', 'nurBachelorFreigeben'); } - ?> -
-
-
- - - + +
+
+ - -
-
- +
- - + + prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz === 'Interessent'): ?> @@ -508,9 +475,69 @@ +
+
+
+ + + + +
+
+
- + + + + $value) $params[$key]=$value; +$user = null; //Parameter fuer Include Addons $includeparams = array(); $contentobjects=array(); $chldsobject = array(); /** * Zeichnet einen Menueeintrag aus dem CMS System - * + * * @param $content_id */ function drawSubmenu($content_id) @@ -47,16 +48,16 @@ function drawSubmenu($content_id) global $contentobjects; $content = new content(); $sprache = getSprache(); - + // Daten Laden - + // Alle Kindelemente des Contents holen $ids = $content->getAllChilds($content_id); - // Alle vorkommenden Contenteintraege laden + // Alle vorkommenden Contenteintraege laden $content->loadArray($ids, $sprache, true); $contentobjects = $content->result; - + // Baumstruktur laden $childsobject = $content->getChildArray($content_id); @@ -91,7 +92,7 @@ function drawSubmenu1($content_id) drawEntry($contentobj); } } - + } } @@ -101,12 +102,13 @@ function drawSubmenu1($content_id) */ function drawEntry($item) { - global $childsobject; + global $childsobject, $user; //pruefen ob der Content eine Berechtigung erfordert if($item->locked) { - $user = get_uid(); + if(is_null($user)) + $user = get_uid(); $content = new content(); //wenn der User nicht berechtigt ist, dann wird der Eintrag nicht angezeigt if(!$content->berechtigt($item->content_id, $user)) @@ -139,7 +141,7 @@ function drawEntry($item) Redirect($item); else DrawLink(APP_ROOT.'cms/content.php?content_id='.$item->content_id,'content',$item->titel); - + echo ""; } } @@ -155,7 +157,7 @@ function DrawLink($link, $target, $name, $content_id=null, $open=null) { if($target=='') $target='content'; - + if($open) $class='class="selected"'; else @@ -167,7 +169,7 @@ function DrawLink($link, $target, $name, $content_id=null, $open=null) * Redirects sind Links Seiten ausserhalb des CMS * die URL kann Variablen enthalten. Diese werden hier ersetzt. * Danach wird der Link angezeigt. - * + * * @param $content_id ContentID des Redirects * @param $name Anzeigename des Links * @param $content_id_Submenu ID des Submenues das geoeffnet werden soll (optional) @@ -175,42 +177,42 @@ function DrawLink($link, $target, $name, $content_id=null, $open=null) function Redirect($content, $content_id_Submenu=null) { global $sprache, $params; - + $xml = new DOMDocument(); if($content->content!='') { $xml->loadXML($content->content); } - + if($xml->getElementsByTagName('url')->item(0)) $url = $xml->getElementsByTagName('url')->item(0)->nodeValue; else $url=''; - + //Variablen Ersetzen foreach($params as $key=>$value) { $url = str_replace('$'.$key,addslashes($value),$url); } - + if($xml->getElementsByTagName('target')->item(0)) $target = $xml->getElementsByTagName('target')->item(0)->nodeValue; else $target=''; - + DrawLink($url, $target, $content->titel, $content_id_Submenu, $content->menu_open); } /** - * Bei Content mit Include Templates wird + * Bei Content mit Include Templates wird * das entsprechende Menu-Addon geladen und inkludiert - * + * * @param $content_id */ function IncludeMenuAddon($content) { global $sprache, $includeparams; - + $xml = new DOMDocument(); if($content->content!='') { @@ -223,6 +225,6 @@ function IncludeMenuAddon($content) if($url!='') { $includeparams['content']=$content; - include(dirname(__FILE__).'/menu/'.$url); + include(dirname(__FILE__).'/menu/'.$url); } } diff --git a/content/planner.overlay.xul.php b/content/planner.overlay.xul.php index 5f6b4e800..1175827a3 100644 --- a/content/planner.overlay.xul.php +++ b/content/planner.overlay.xul.php @@ -107,9 +107,9 @@ echo ' - + - + @@ -176,7 +176,7 @@ echo ' - + diff --git a/content/projekt/projekt_ressource.window.js.php b/content/projekt/projekt_ressource.window.js.php index bf0aed5de..480fb3551 100644 --- a/content/projekt/projekt_ressource.window.js.php +++ b/content/projekt/projekt_ressource.window.js.php @@ -6,76 +6,77 @@ require_once('../../include/functions.inc.php'); function updateProjektRessource() { - if(projekt_ressource_id!='') + if(projekt_ressource_id!='') + { + aufwand = document.getElementById("textbox-ressource-aufwand").value; + if (document.getElementById("leitung").selected) + funktion_kurzbz = 'Leitung'; + else + funktion_kurzbz = 'Mitarbeiter'; + + try + { + var soapBody = new SOAPObject("saveProjektRessource"); + var projektRessource = new SOAPObject("projektRessource"); + + projektRessource.appendChild(new SOAPObject("projekt_ressource_id")).val(projekt_ressource_id); + + if(projekt_kurzbz != '') + { + projektRessource.appendChild(new SOAPObject("projektphase_id")).val(''); + projektRessource.appendChild(new SOAPObject("projekt_kurzbz")).val(projekt_kurzbz); + var res_binding = window.opener.document.getElementById('box-projekt-ressourcen'); + } + else if(projektphase_id != '') + { + projektRessource.appendChild(new SOAPObject("projektphase_id")).val(projektphase_id); + projektRessource.appendChild(new SOAPObject("projekt_kurzbz")).val(''); + var res_binding = window.opener.document.getElementById('box-projekt-ressource-phase'); + } + + projektRessource.appendChild(new SOAPObject("ressource_id")).val(ressource_id); + projektRessource.appendChild(new SOAPObject("funktion_kurzbz")).val(funktion_kurzbz); + projektRessource.appendChild(new SOAPObject("beschreibung")).val(beschreibung); + projektRessource.appendChild(new SOAPObject("aufwand")).val(aufwand); + + soapBody.appendChild(projektRessource); + + var sr = new SOAPRequest("saveProjektRessource",soapBody); + SOAPClient.Proxy="soap/ressource_projekt.soap.php?"+gettimestamp(); + + function mycallb(obj, projekt_kurzbz, projektphase_id) + { + var ressourcebinding=obj; + var projekt = projekt_kurzbz; + var phase = projektphase_id; + + this.invoke=function (respObj) { + try + { + var id = respObj.Body[0].saveProjektRessourceResponse[0].message[0].Text; + } + catch(e) + { + var fehler = respObj.Body[0].Fault[0].faultstring[0].Text; + alert('Fehler: '+fehler); + return; + } + // Ressourcen Tree aktualisieren + ressourcebinding.LoadRessourceTree(projekt, phase); - aufwand = document.getElementById("textbox-ressource-aufwand").value; - if (document.getElementById("leitung").selected) - funktion_kurzbz = 'Leitung'; - else - funktion_kurzbz = 'Mitarbeiter'; - - - - try - { - var soapBody = new SOAPObject("saveProjektRessource"); - var projektRessource = new SOAPObject("projektRessource"); - - projektRessource.appendChild(new SOAPObject("projekt_ressource_id")).val(projekt_ressource_id); - - if(projekt_kurzbz != '') - { - projektRessource.appendChild(new SOAPObject("projektphase_id")).val(''); - projektRessource.appendChild(new SOAPObject("projekt_kurzbz")).val(projekt_kurzbz); - } - else if(projektphase_id != '') - { - projektRessource.appendChild(new SOAPObject("projektphase_id")).val(projektphase_id); - projektRessource.appendChild(new SOAPObject("projekt_kurzbz")).val(''); - } - - projektRessource.appendChild(new SOAPObject("ressource_id")).val(ressource_id); - projektRessource.appendChild(new SOAPObject("funktion_kurzbz")).val(funktion_kurzbz); - projektRessource.appendChild(new SOAPObject("beschreibung")).val(beschreibung); - projektRessource.appendChild(new SOAPObject("aufwand")).val(aufwand); - - soapBody.appendChild(projektRessource); - - var sr = new SOAPRequest("saveProjektRessource",soapBody); - SOAPClient.Proxy="soap/ressource_projekt.soap.php?"+gettimestamp(); - - function mycallb(obj) - { - var me=obj; - this.invoke=function (respObj) - { - try - { - var id = respObj.Body[0].saveProjektRessourceResponse[0].message[0].Text; - } - catch(e) - { - var fehler = respObj.Body[0].Fault[0].faultstring[0].Text; - alert('Fehler: '+fehler); - return; - } - me.RefreshRessource(); - } - } - - var cb=new mycallb(this); - - //SOAPClient.SendRequest(sr,cb.invoke); - SOAPClient.SendRequest(sr); - } - catch(e) - { - debug("Ressource load failed with exception: "+e); - } - + // Popup schließen + window.close(); } - //window.opener.location.reload(false); - window.close(); + } + // Callback fuer aktualisierung des Trees nach dem Speichern + var cb=new mycallb(res_binding, projekt_kurzbz, projektphase_id); + SOAPClient.SendRequest(sr,cb.invoke); + } + catch(e) + { + debug("Ressource load failed with exception: "+e); + } + } } diff --git a/content/projekt/projekttask.overlay.js.php b/content/projekt/projekttask.overlay.js.php index 464463ea1..2aa29b98d 100644 --- a/content/projekt/projekttask.overlay.js.php +++ b/content/projekt/projekttask.overlay.js.php @@ -25,7 +25,7 @@ require_once('../../config/vilesci.config.inc.php'); var TaskSelectID=null; //ID des Task Eintrages der nach dem Refresh markiert werden soll var filterErledigt; //Tasks filtern -var currentProjektPhaseID; +var currentProjektPhaseID; // ********** Observer und Listener ************* // // **** @@ -81,13 +81,13 @@ function LoadTasks(projekt_phase_id, filter) { // wenn phase übergeben wurde -> setzte globale variable if(projekt_phase_id != null && projekt_phase_id != '' && typeof optional && "undefined") - currentProjektPhaseID = projekt_phase_id; - + currentProjektPhaseID = projekt_phase_id; + // wenn filter übergeben wurde -> setze globale variable if(filter != null && filter != '' && typeof filter != "undefined") filterErledigt = filter; - - url = "rdf/projekttask.rdf.php?projektphase_id="+currentProjektPhaseID+"&"+gettimestamp(); + + url = "rdf/projekttask.rdf.php?projektphase_id="+currentProjektPhaseID+"&"+gettimestamp(); // überprüfe ob filter gesetzt ist if(filterErledigt != null) @@ -100,7 +100,7 @@ function LoadTasks(projekt_phase_id, filter) { treeTask.database.RemoveDataSource(oldDatasources.getNext()); } - + try { datasourceTreeTask.removeXMLSinkObserver(TaskTreeSinkObserver); @@ -108,7 +108,7 @@ function LoadTasks(projekt_phase_id, filter) } catch(e) {} - + var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); datasourceTreeTask = rdfService.GetDataSource(url); datasourceTreeTask.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); @@ -116,7 +116,7 @@ function LoadTasks(projekt_phase_id, filter) treeTask.database.AddDataSource(datasourceTreeTask); datasourceTreeTask.addXMLSinkObserver(TaskTreeSinkObserver); treeTask.builder.addListener(TaskTreeListener); - + } catch(e) { @@ -153,7 +153,7 @@ function RessourceTaskLoad(menulist, id) datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink); menulist.database.AddDataSource(datasource); menulist.builder.rebuild(); - + } @@ -167,7 +167,7 @@ function TaskTreeRefresh() //markierte Lehreinheit global speichern damit diese LE nach dem //refresh wieder markiert werden kann. var tree = document.getElementById('projekttask-tree'); - + try { TaskSelectID = getTreeCellText(tree, "projekttask-treecol-projekttask_id", tree.currentIndex); @@ -187,7 +187,7 @@ function TaskNeu() var tasktree=document.getElementById('projekttask-tree'); tasktree.view.selection.clearSelection(); tree = document.getElementById('tree-projektmenue'); - + //Projektphase_id holen var projektphase_id = getTreeCellText(tree, "treecol-projektmenue-projekt_phase_id", tree.currentIndex); @@ -199,12 +199,12 @@ function TaskNeu() //Details zuruecksetzen TaskDetailReset(); TaskDisableFields(false); - + document.getElementById('textbox-projekttaskdetail-projektphase_id').value=projektphase_id; document.getElementById('caption-projekttask-detail').label='Neuer Task'; - + //Detail Tab auswaehlen - document.getElementById('projekttask-tabs').selectedItem=document.getElementById('projekttask-tab-detail'); + document.getElementById('projekttask-tabs').selectedItem=document.getElementById('projekttask-tab-detail'); } // **** // * Selectiert die Lektorzuordnung nachdem der Tree @@ -222,7 +222,7 @@ function TaskTreeSelectTask() { //id der row holen id = getTreeCellText(tree, "projekttask-treecol-projekttask_id", i); - + //wenn dies die zu selektierende Zeile if(TaskSelectID==id) { @@ -264,7 +264,7 @@ function TaskDelete() var soapBody = new SOAPObject("deleteProjekttask"); soapBody.appendChild(new SOAPObject("projekttask_id")).val(id); var sr = new SOAPRequest("deleteProjekttask",soapBody); - + SOAPClient.Proxy="soap/projekttask.soap.php?"+gettimestamp(); SOAPClient.SendRequest(sr, clb_deleteProjekttask); } @@ -285,7 +285,7 @@ function clb_deleteProjekttask(respObj) return; } netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - + TaskSelectID=''; datasourceTreeTask.Refresh(false); //non blocking SetStatusBarText('Eintrag wurde entfernt'); @@ -332,7 +332,7 @@ function showProjekttaskParsedown() //Werte holen projekttask_id = document.getElementById('textbox-projekttaskdetail-projekttask_id').value; - + if(!isNaN(projekttask_id) && projekttask_id != '') { window.open("projekt/parsedown.php?projekttask_id="+projekttask_id,"Projekttask"+projekttask_id); @@ -355,15 +355,15 @@ function saveProjekttaskDetail() aufwand = document.getElementById('textbox-projekttask-detail-aufwand').value; mantis_id = document.getElementById('textbox-projekttask-detail-mantis_id').value; scrumsprint_id = document.getElementById('textbox-projekttask-detail-scrumsprint_id').value; - ressource_id = MenulistGetSelectedValue('textbox-projekttask-detail-ressource'); + ressource_id = MenulistGetSelectedValue('textbox-projekttask-detail-ressource'); ende = document.getElementById('textbox-projekttask-detail-ende').iso; - + if(!isNaN(projektphase_id) && projektphase_id != '') { var soapBody = new SOAPObject("saveProjekttask"); //soapBody.appendChild(new SOAPObject("username")).val('joe'); //soapBody.appendChild(new SOAPObject("passwort")).val('waschl'); - + var task = new SOAPObject("task"); task.appendChild(new SOAPObject("projekttask_id")).val(projekttask_id); task.appendChild(new SOAPObject("projektphase_id")).val(projektphase_id); @@ -376,9 +376,9 @@ function saveProjekttaskDetail() task.appendChild(new SOAPObject("ressource_id")).val(ressource_id); task.appendChild(new SOAPObject("ende")).val(ende); soapBody.appendChild(task); - + var sr = new SOAPRequest("saveProjekttask",soapBody); - + SOAPClient.Proxy="soap/projekttask.soap.php?"+gettimestamp(); SOAPClient.SendRequest(sr, clb_saveProjekttask); }else @@ -402,7 +402,7 @@ function clb_saveProjekttask(respObj) } netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); document.getElementById('textbox-projekttaskdetail-projekttask_id').value=id; - + TaskSelectID=id; datasourceTreeTask.Refresh(false); //non blocking SetStatusBarText('Daten wurden gespeichert'); @@ -415,7 +415,7 @@ function clb_saveProjekttask(respObj) // **** function onselectProjekttask() { - + // Trick 17 (sonst gibt's ein Permission denied) netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var tree = document.getElementById('projekttask-tree'); @@ -445,12 +445,12 @@ function onselectProjekttask() alert(e); return false; } - + var req = new phpRequest('../rdf/projekttask.rdf.php','',''); req.add('projekttask_id',id); var response = req.execute(); - + // Datasource holen var dsource=parseRDFString(response, 'http://www.technikum-wien.at/projekttask/alle-projekttasks'); @@ -472,7 +472,7 @@ function onselectProjekttask() var scrumsprint_id=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#scrumsprint_id" )); var ressource_id=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#ressource_id" )); var ende=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#ende" )); - + //Daten den Feldern zuweisen var menulist = document.getElementById('textbox-projekttask-detail-ressource'); RessourceTaskLoad(menulist, projektphase_id); @@ -486,17 +486,17 @@ function onselectProjekttask() document.getElementById('textbox-projekttask-detail-scrumsprint_id').value=scrumsprint_id; MenulistSelectItemOnValue('textbox-projekttask-detail-ressource', ressource_id); //document.getElementById('textbox-projekttask-detail-ressource').value=ressource_id; - + //Notizen zu eines Tasks Laden notiz = document.getElementById('box-projekttask-notizen'); notiz.LoadNotizTree('','',projekttask_id,'','','','', '',''); - + //Mantis Tab reset document.getElementById('textbox-projekttask-mantis-issue_summary').value=bezeichnung; document.getElementById('textbox-projekttask-mantis-issue_description').value=beschreibung; //document.getElementById('textbox-projekttask-mantis-issue_project_id').value='1'; //document.getElementById('textbox-projekttask-mantis-issue_category').value='General'; - + document.getElementById('textbox-projekttask-mantis-mantis_id').value=''; document.getElementById('textbox-projekttask-mantis-issue_view_state_id').value=''; document.getElementById('textbox-projekttask-mantis-issue_view_state_name').value=''; @@ -525,9 +525,9 @@ function onselectProjekttask() document.getElementById('textbox-projekttask-mantis-issue_due_date').value=''; document.getElementById('textbox-projekttask-mantis-issue_steps_to_reproduce').value=''; document.getElementById('textbox-projekttask-mantis-issue_additional_information').value=''; - + //Mantis - if (mantis_id!='') + if (false && mantis_id!='') { var req = new phpRequest('../rdf/mantis.rdf.php','',''); req.add('issue_id',mantis_id); @@ -539,7 +539,7 @@ function onselectProjekttask() getService(Components.interfaces.nsIRDFService); subject = rdfService.GetResource("http://www.technikum-wien.at/mantis/" + mantis_id); predicateNS = "http://www.technikum-wien.at/mantis/rdf"; - + //Daten holen var issue_id = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_id" )); var issue_summary=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_summary" )); @@ -571,12 +571,12 @@ function onselectProjekttask() var issue_tags_name=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_tags_name" )); var issue_resolution_id=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_resolution_id" )); var issue_resolution_name=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_resolution_name" )); - var issue_due_date=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_due_date" )); + var issue_due_date=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_due_date" )); var issue_steps_to_reproduce=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_steps_to_reproduce" )); var issue_additional_information=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#issue_additional_information" )); ProjekttaskLoadCategories(issue_project_id); - + //Daten den Feldern zuweisen document.getElementById('textbox-projekttask-mantis-mantis_id').value=mantis_id; document.getElementById('textbox-projekttask-mantis-issue_summary').value=issue_summary; @@ -610,18 +610,18 @@ function onselectProjekttask() document.getElementById('textbox-projekttask-mantis-issue_due_date').value=issue_due_date; document.getElementById('textbox-projekttask-mantis-issue_steps_to_reproduce').value=issue_steps_to_reproduce; document.getElementById('textbox-projekttask-mantis-issue_additional_information').value=issue_additional_information; - document.getElementById('textbox-projekttask-mantis-issue_tags').value=issue_tags_name; + document.getElementById('textbox-projekttask-mantis-issue_tags').value=issue_tags_name; } } // **** -// * Beim Aendern des Mantis Projekts werden die zugehoerigen +// * Beim Aendern des Mantis Projekts werden die zugehoerigen // * Kategorien geladen // **** function ProjekttaskMantisProjektChange() { project_id=document.getElementById('menulist-projekttask-mantis-issue_project_id').value; - + if(project_id!='') ProjekttaskLoadCategories(project_id); } @@ -645,10 +645,10 @@ function ProjekttaskLoadCategories(project_id) } //Refresh damit die entfernten DS auch wirklich entfernt werden menulist.builder.rebuild(); - - var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); + + var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var datasource = rdfService.GetDataSourceBlocking(url); - + datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink); menulist.database.AddDataSource(datasource); @@ -696,7 +696,7 @@ function saveProjekttaskMantis() var issue_steps_to_reproduce=document.getElementById('textbox-projekttask-mantis-issue_steps_to_reproduce').value; var issue_additional_information=document.getElementById('textbox-projekttask-mantis-issue_additional_information').value; var issue_tags = document.getElementById('textbox-projekttask-mantis-issue_tags').value; - + var soapBody = new SOAPObject("saveMantis"); soapBody.appendChild(new SOAPObject("projekttask_id")).val(projekttask_id); soapBody.appendChild(new SOAPObject("mantis_id")).val(mantis_id); @@ -731,25 +731,25 @@ function saveProjekttaskMantis() soapBody.appendChild(new SOAPObject("issue_due_date")).val(issue_due_date); soapBody.appendChild(new SOAPObject("issue_steps_to_reproduce")).val(issue_steps_to_reproduce); soapBody.appendChild(new SOAPObject("issue_additional_information")).val(issue_additional_information); - + var sr = new SOAPRequest("saveMantis",soapBody); SOAPClient.Proxy="soap/projekttask.soap.php?"+gettimestamp(); SOAPClient.SendRequest(sr, clb_saveProjekttaskMantis); - + // Tags speichern if(mantis_id != '') { var soapBody = new SOAPObject("saveTagsForIssue"); soapBody.appendChild(new SOAPObject("mantis_id")).val(mantis_id); - soapBody.appendChild(new SOAPObject("issue_tags")).val(issue_tags); + soapBody.appendChild(new SOAPObject("issue_tags")).val(issue_tags); var sr = new SOAPRequest("saveTagsForIssue",soapBody); SOAPClient.Proxy="soap/projekttask.soap.php?"+gettimestamp(); SOAPClient.SendRequest(sr, clb_saveProjekttaskMantis); } - + } // **** @@ -779,7 +779,7 @@ function ProjekttaskUpdateErledigt(event) var col = new Object(); var childElt = new Object(); //Tree holen - var tree = event.currentTarget; + var tree = event.currentTarget; //Treecol ermitteln in die geklickt wurde tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, childElt); //abbrechen wenn auf Header oder Scrollbar geklickt wurde @@ -798,7 +798,7 @@ function ProjekttaskUpdateErledigt(event) newval='false'; else newval='true'; - + var soapBody = new SOAPObject("setErledigt"); //soapBody.appendChild(new SOAPObject("username")).val('joe'); //soapBody.appendChild(new SOAPObject("passwort")).val('waschl'); @@ -807,8 +807,8 @@ function ProjekttaskUpdateErledigt(event) var sr = new SOAPRequest("setErledigt",soapBody); SOAPClient.Proxy="soap/projekttask.soap.php?"+gettimestamp(); - - SOAPClient.SendRequest(sr,function (respObj) + + SOAPClient.SendRequest(sr,function (respObj) { try { diff --git a/content/projekt/projekttask.overlay.xul.php b/content/projekt/projekttask.overlay.xul.php index cbce0e857..52c19828b 100644 --- a/content/projekt/projekttask.overlay.xul.php +++ b/content/projekt/projekttask.overlay.xul.php @@ -29,7 +29,7 @@ require_once('../../config/vilesci.config.inc.php'); echo ''; echo ''; -echo ''; + ?> - + - + diff --git a/content/projekt/ressource.overlay.xul.php b/content/projekt/ressource.overlay.xul.php index cd509cbfd..f291009b2 100644 --- a/content/projekt/ressource.overlay.xul.php +++ b/content/projekt/ressource.overlay.xul.php @@ -64,7 +64,7 @@ echo ''; - + '; } ?> - \ No newline at end of file +