Files
FHC-Core/cms/news.php
T
Cris fc316efd3d Fixed XML parsing error of ampersand '&' for study description
Ampersand within study description was causing error messages in
rdf files while XML parsing. Now this is fixed (by wrapping with CDATA)
2019-05-28 17:16:27 +02:00

451 lines
14 KiB
PHP

<?php
/* Copyright (C) 2011 FH Technikum Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Karl Burkhart <karl.burkhart@technikum-wien.at>.
*/
/**
* Laedt die News und zeigt diese an
*
* Wenn kein Parameter uebergeben wird, werden nur die allgemeinen News angezeigt
* Wenn ein Studiengang uebergeben wird, werden rechts neben den News Studiengangsdetails angezeigt
*
* Parameter:
* stg_kz Studiengangskennzahl
* semester Semester
* edit Edit Buttons anzeigen
*
*/
require_once('../config/cis.config.inc.php');
require_once('../include/content.class.php');
require_once('../include/template.class.php');
require_once('../include/functions.inc.php');
require_once('../include/news.class.php');
require_once('../include/kontakt.class.php');
require_once('../include/benutzerfunktion.class.php');
require_once('../include/studiengang.class.php');
require_once('../include/mitarbeiter.class.php');
require_once('../include/datum.class.php');
require_once('../include/phrasen.class.php');
require_once('../include/student.class.php');
require_once('../include/benutzer.class.php');
require_once('../include/ort.class.php');
require_once('../include/funktion.class.php');
$sprache = getSprache();
$datum_obj = new datum();
//XML Content laden
$content = new content();
$db = new basis_db();
$infoscreen = isset($_GET['infoscreen']);
if(!$infoscreen)
{
$user = get_uid();
//Zum anzeigen der Studiengang-Details neben den News
$student = new student();
if($student->load($user))
{
$stg_kz=$student->studiengang_kz;
$sem=$student->semester;
$ver=$student->verband;
}
else
{
$stg_kz=0;
$sem=NULL;
$ver=NULL;
}
}
else
{
$stg_kz=0;
$sem=NULL;
$ver=NULL;
}
$studiengang_kz = (isset($_GET['studiengang_kz'])?$_GET['studiengang_kz']:$stg_kz);
$semester = (isset($_GET['semester'])?$_GET['semester']:$sem);
$mischen = (isset($_GET['mischen'])?$_GET['mischen']:true);
$titel = (isset($_GET['titel'])?$_GET['titel']:'');
$editable = isset($_GET['edit']);
$news = new news();
$all=false;
if(isset($_GET['sichtbar']) && ($_GET['sichtbar'])=="false")
$sichtbar = false;
else
$sichtbar = true;
//Im Editiermodus werden auch die zukuenftigen News angezeigt
if($editable)
$all=true;
$news->getnews(MAXNEWSALTER, $studiengang_kz, $semester, $all, null, MAXNEWS, $mischen);
$xml = '<?xml version="1.0" encoding="UTF-8"?><content>';
foreach($news->result as $row)
{
$content = new content();
$content->getContent($row->content_id, $sprache,null, $sichtbar, true);
//das Datum des News Eintrages ist nicht im XML enthalten, es muss extra hinzugefuegt werden
$datum = '<datum><![CDATA['.$datum_obj->formatDatum($row->datum,'d.m.Y').']]></datum>';
if($studiengang_kz<>0 && $editable && $row->studiengang_kz==0)
{
continue;
}
//Wenn der Parameter edit uebergeben wird, dann wird neben dem Datum ein Link zum Editieren des Eintrags angezeigt
if($editable)
$id = '<news_id><![CDATA['.$row->news_id.']]></news_id>';
else
$id='';
$xml .= mb_substr($content->content,0,mb_strlen($content->content)-7).$datum.$id.mb_substr($content->content,-7);
//$xml .= $content->content;
}
if($studiengang_kz!=0 && !$editable && !$infoscreen) // && $studiengang_kz==10006 && !$semester)
$xml.=getStgContent($studiengang_kz, $semester, $sprache);
if($studiengang_kz!=0)
{
$stg_obj = new studiengang();
$stg_obj->load($studiengang_kz);
$xml .= '<studiengang_bezeichnung><![CDATA['. $stg_obj->bezeichnung. ']]></studiengang_bezeichnung>';
}
if($titel!='')
{
$xml.='<news_titel>'.$titel.'</news_titel>';
}
$xml .= '</content>';
$doc = new DOMDocument();
$doc->loadXML($xml);
//XSLT Vorlage laden
$template = new template();
if($infoscreen)
{
if(!$template->load('news_infoscreen'))
die($template->errormsg);
}
else
{
if(!$template->load('news'))
die($template->errormsg);
}
$xsltemplate = new DOMDocument();
$xsltemplate->loadXML($template->xslt_xhtml);
//Transformation
$processor = new XSLTProcessor();
$processor->importStylesheet($xsltemplate);
echo $processor->transformToXML($doc);
/**
* Liefert ein XML mit den Details eines Studiengangs
* welche dann neben den News angezeigt werden
*
* @param $studiengang_kz
* @param $semester
* @param $sprache
*/
function getStgContent($studiengang_kz, $semester, $sprache)
{
$p = new phrasen($sprache);
$xml = '<stg_extras>';
$xml .= '<stg_kz>'.$studiengang_kz.'</stg_kz>';
$studiengang = new studiengang();
$studiengang->load($studiengang_kz);
//Studiengangsleitung
$stg_oe_obj = new studiengang();
$stgl = $stg_oe_obj->getLeitung($studiengang_kz);
//$xml.='<stg_header><![CDATA['.$p->t('global/studiengangsmanagement').']]></stg_header>';
$xml.='<stg_ltg_name><![CDATA['.$p->t('global/studiengangsleitung').']]></stg_ltg_name>';
if(count($stgl)>0)
{
foreach ($stgl as $uid)
{
$row_course_leader = new mitarbeiter($uid);
$xml.='<stg_ltg>';
$xml.='<name><![CDATA['.$row_course_leader->titelpre.' '.$row_course_leader->vorname.' '.$row_course_leader->nachname.' '.$row_course_leader->titelpost.']]></name>';
if(isset($row_course_leader) && $row_course_leader->uid != "")
{
$alias = new benutzer();
$alias->load($uid);
if($alias->alias!='')
$xml.='<email><![CDATA['.$alias->alias.'@'.DOMAIN.']]></email>';
else
$xml.='<email><![CDATA['.$row_course_leader->uid.'@'.DOMAIN.']]></email>';
$xml.='<uid><![CDATA['.$row_course_leader->uid.']]></uid>';
}
if(isset($row_course_leader) && $row_course_leader->telefonklappe != "")
{
$hauptnummer='';
if($row_course_leader->standort_id!='')
{
$kontakt = new kontakt();
$kontakt->loadFirmaKontakttyp($row_course_leader->standort_id, 'telefon');
$hauptnummer = $kontakt->kontakt;
}
$xml.= '<telefon><![CDATA['.$hauptnummer.' - '.$row_course_leader->telefonklappe.']]></telefon>';
}
if(isset($row_course_leader) && $row_course_leader->ort_kurzbz != "")
{
$ort = new ort();
$ort->load($row_course_leader->ort_kurzbz);
$xml.='<ort><![CDATA['.$ort->planbezeichnung.']]></ort>';
}
$xml.='</stg_ltg>';
}
}
//geschaeftsf. Leitung auselesen
$xml.='<gf_ltg_name><![CDATA['.$p->t('global/geschaeftsfuehrendeltg').']]></gf_ltg_name>';
$benutzerfkt = new benutzerfunktion();
$benutzerfkt->getBenutzerFunktionen('gLtg', $studiengang->oe_kurzbz);
foreach($benutzerfkt->result as $row)
{
$ma = new mitarbeiter();
$ma->load($row->uid);
if($ma->uid!='' && $ma->bnaktiv)
{
$xml.='<gf_ltg>';
$xml.='<name><![CDATA['.$ma->titelpre.' '.$ma->vorname.' '.$ma->nachname.' '.$ma->titelpost.']]></name>';
$alias = new benutzer();
$alias->load($ma->uid);
if($alias->alias!='')
$xml.='<email><![CDATA['.$alias->alias.'@'.DOMAIN.']]></email>';
else
$xml.='<email><![CDATA['.$ma->uid.'@'.DOMAIN.']]></email>';
$xml.='<uid><![CDATA['.$ma->uid.']]></uid>';
if($ma->telefonklappe != '')
{
if($ma->standort_id!='')
{
$kontakt = new kontakt();
$kontakt->loadFirmaKontakttyp($ma->standort_id, 'telefon');
$hauptnummer = $kontakt->kontakt;
}
$xml.= '<telefon><![CDATA['.$hauptnummer.' - '.$ma->telefonklappe.']]></telefon>';
}
if($ma->ort_kurzbz != "")
{
$ort = new ort();
$ort->load($ma->ort_kurzbz);
$xml.='<ort><![CDATA['.$ort->planbezeichnung.']]></ort>';
}
$xml.='</gf_ltg>';
}
}
//Studiengangsleiter Stellvertreter auslesen
$benutzerfkt = new benutzerfunktion();
$benutzerfkt->getBenutzerFunktionen('stvLtg', $studiengang->oe_kurzbz);
$xml.='<stv_ltg_name><![CDATA['.$p->t('global/stellvertreter').']]></stv_ltg_name>';
foreach($benutzerfkt->result as $row)
{
$ma = new mitarbeiter();
$ma->load($row->uid);
if($ma->uid!='' && $ma->bnaktiv)
{
$xml.='<stv_ltg>';
$xml.='<name><![CDATA['.$ma->titelpre.' '.$ma->vorname.' '.$ma->nachname.' '.$ma->titelpost.']]></name>';
$alias = new benutzer();
$alias->load($ma->uid);
if($alias->alias!='')
$xml.='<email><![CDATA['.$alias->alias.'@'.DOMAIN.']]></email>';
else
$xml.='<email><![CDATA['.$ma->uid.'@'.DOMAIN.']]></email>';
$xml.='<uid><![CDATA['.$ma->uid.']]></uid>';
if($ma->telefonklappe != '')
{
if($ma->standort_id!='')
{
$kontakt = new kontakt();
$kontakt->loadFirmaKontakttyp($ma->standort_id, 'telefon');
$hauptnummer = $kontakt->kontakt;
}
$xml.= '<telefon><![CDATA['.$hauptnummer.' - '.$ma->telefonklappe.']]></telefon>';
}
if($ma->ort_kurzbz != "")
{
$ort = new ort();
$ort->load($ma->ort_kurzbz);
$xml.='<ort><![CDATA['.$ort->planbezeichnung.']]></ort>';
}
$xml.='</stv_ltg>';
}
}
//Assistenz
$benutzerfkt = new benutzerfunktion();
$benutzerfkt->getBenutzerFunktionen('ass', $studiengang->oe_kurzbz);
//Sortiert die Funktionen alphabetisch nach uid
function sortBenutzer($a, $b)
{
return strcmp(strtolower($a->uid), strtolower($b->uid));
}
usort($benutzerfkt->result, "sortBenutzer");
$xml.='<ass_name><![CDATA['.$p->t('global/sekretariat').']]></ass_name>';
foreach($benutzerfkt->result as $row)
{
$ma = new mitarbeiter();
$ma->load($row->uid);
if($ma->uid!='' && $ma->bnaktiv)
{
$xml.='<ass>';
$xml.='<name><![CDATA['.$ma->titelpre.' '.$ma->vorname.' '.$ma->nachname.' '.$ma->titelpost.']]></name>';
$xml.='<bezeichnung><![CDATA['.$row->bezeichnung.']]></bezeichnung>';
$alias = new benutzer();
$alias->load($ma->uid);
if($alias->alias!='')
$xml.='<email><![CDATA['.$alias->alias.'@'.DOMAIN.']]></email>';
else
$xml.='<email><![CDATA['.$ma->uid.'@'.DOMAIN.']]></email>';
$xml.='<uid><![CDATA['.$ma->uid.']]></uid>';
if($ma->telefonklappe != '')
{
if($ma->standort_id!='')
{
$kontakt = new kontakt();
$kontakt->loadFirmaKontakttyp($ma->standort_id, 'telefon');
$hauptnummer = $kontakt->kontakt;
}
$xml.= '<telefon><![CDATA['.$hauptnummer.' - '.$ma->telefonklappe.']]></telefon>';
}
if($ma->ort_kurzbz != "")
{
$ort = new ort();
$ort->load($ma->ort_kurzbz);
$xml.='<ort><![CDATA['.$ort->planbezeichnung.']]></ort>';
}
$xml.='</ass>';
}
}
//Zusatzinfo (Oeffnungszeiten etc)
$xml.='<zusatzinfo><![CDATA['.$studiengang->zusatzinfo_html.']]></zusatzinfo>';
//Hochschulvertretung
$benutzerfkt = new benutzerfunktion();
$benutzerfkt->getBenutzerFunktionen('hsv');
$xml.='<hochschulvertr_name><![CDATA['.$p->t('global/hochschulvertretung').']]></hochschulvertr_name>';
foreach($benutzerfkt->result as $row)
{
$bn = new benutzer();
$bn->load($row->uid);
$funktion = new funktion();
$funktion->load($row->funktion_kurzbz);
if($bn->uid!='' && $bn->bnaktiv)
{
$xml.='<hochschulvertr>';
$xml.='<name><![CDATA['.$bn->titelpre.' '.$bn->vorname.' '.$bn->nachname.' '.$bn->titelpost.' '.($row->bezeichnung!='' && $row->bezeichnung!=$funktion->beschreibung?'('.$row->bezeichnung.')':'').']]></name>';
$xml.='<email><![CDATA['.$bn->uid.'@'.DOMAIN.']]></email>';
$xml.='<uid><![CDATA['.$bn->uid.']]></uid>';
$xml.='</hochschulvertr>';
}
}
//Studentenvertretung
$benutzerfkt = new benutzerfunktion();
$benutzerfkt->getBenutzerFunktionen('stdv', $studiengang->oe_kurzbz);
$xml.='<stdv_name><![CDATA['.$p->t('global/studentenvertreter').' '.strtoupper($studiengang->oe_kurzbz).']]></stdv_name>';
foreach($benutzerfkt->result as $row)
{
$bn = new benutzer();
$bn->load($row->uid);
$funktion = new funktion();
$funktion->load($row->funktion_kurzbz);
if($bn->uid!='' && $bn->bnaktiv)
{
$xml.='<stdv>';
$xml.='<name><![CDATA['.$bn->titelpre.' '.$bn->vorname.' '.$bn->nachname.' '.$bn->titelpost.' '.($row->bezeichnung!='' && $row->bezeichnung!=$funktion->beschreibung?'('.$row->bezeichnung.')':'').']]></name>';
$xml.='<email><![CDATA['.$bn->uid.'@'.DOMAIN.']]></email>';
$xml.='<uid><![CDATA['.$bn->uid.']]></uid>';
$xml.='</stdv>';
}
}
//Jahrgangsvertretung
$benutzerfkt = new benutzerfunktion();
$benutzerfkt->getBenutzerFunktionen('jgv', $studiengang->oe_kurzbz, $semester);
$xml.='<jahrgangsvertr_name><![CDATA['.$p->t('global/jahrgangsvertretung').' '.$semester.'. '.$p->t('global/semester').']]></jahrgangsvertr_name>';
foreach($benutzerfkt->result as $row)
{
$bn = new benutzer();
$bn->load($row->uid);
$funktion = new funktion();
$funktion->load($row->funktion_kurzbz);
if($bn->uid!='' && $bn->bnaktiv)
{
$xml.='<jahrgangsvertr>';
$xml.='<name><![CDATA['.$bn->titelpre.' '.$bn->vorname.' '.$bn->nachname.' '.$bn->titelpost.' '.($row->bezeichnung!='' && $row->bezeichnung!=$funktion->beschreibung?'('.$row->bezeichnung.')':'').']]></name>';
$xml.='<email><![CDATA['.$bn->uid.'@'.DOMAIN.']]></email>';
$xml.='<uid><![CDATA['.$bn->uid.']]></uid>';
$xml.='</jahrgangsvertr>';
}
}
if(CIS_EXT_MENU)
{
$xml.='<cis_ext_menu>
<lehrziele_name><![CDATA['.$p->t('global/lehrziele').']]></lehrziele_name>
<download_name><![CDATA['.$p->t('global/allgemeinerdownload').']]></download_name>
<newsgroup_name><![CDATA['.$p->t('global/newsgroups').']]></newsgroup_name>
<kurzbz><![CDATA['.strtolower($studiengang->kuerzel).']]></kurzbz>
<kurzbzlang><![CDATA['.strtolower($studiengang->kurzbzlang).']]></kurzbzlang>
</cis_ext_menu>';
}
$xml.='</stg_extras>';
return $xml;
}
?>