diff --git a/addons/template/cis/index.html b/addons/template/cis/index.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/addons/template/cis/init.js.php b/addons/template/cis/init.js.php
new file mode 100644
index 000000000..174f620ed
--- /dev/null
+++ b/addons/template/cis/init.js.php
@@ -0,0 +1,44 @@
+
+ */
+/**
+ * Initialisierung des Addons
+ */
+?>
+if(typeof addon =='undefined')
+ var addon=Array();
+
+addon.push(
+{
+ init: function(page, params)
+ {
+ // Diese Funktion wird nach dem Laden der Seite im CIS aufgerufen
+
+ /*
+ switch(page)
+ {
+ case 'cis/private/tools/zeitaufzeichnung.php':
+ break;
+
+ default:
+ break;
+ }
+ */
+ }
+});
diff --git a/addons/template/cis/vorlage_profil_array.php b/addons/template/cis/vorlage_profil_array.php
new file mode 100644
index 000000000..3b4a04a65
--- /dev/null
+++ b/addons/template/cis/vorlage_profil_array.php
@@ -0,0 +1,55 @@
+
+ */
+/**
+ * Diese Datei fügt zusätzliche Links im CIS Profil ein
+ * Dazu muss die Datei umbenannt werden in profil_array.php
+ *
+ * Dazu wird ein Array aufgebaut welches die Links enthaelt.
+ *
+ * $menu = array('MeinLink'=>array('name'=>'Name des Links','link'=>'../path/to/file.php','target'='content'));
+ */
+
+
+// Unterschiedliche Links für Studierende und Mitarbeiter
+if($type=='student')
+{
+ if(!$ansicht)
+ $menu['Notenliste']=array('name'=>$p->t('profil/leistungsbeurteilung'), 'link'=>'../lehre/notenliste.php', 'target'=>'content');
+ $menu['LVPlan']=array('name'=>$p->t('profil/lvplanVon').' '.$user->nachname, 'link'=>'../lvplan/stpl_week.php?pers_uid='.$user->uid.'&type=student', 'target'=>'content');
+}
+else
+{
+ if(!$ansicht)
+ {
+ $menu['Zeitwunsch']=array('name'=>$p->t('profil/zeitwuensche'), 'link'=>'zeitwunsch.php?uid='.$user->uid, 'target'=>'content');
+ $menu['Lehrveranstaltungen']=array('name'=>$p->t('lvaliste/lehrveranstaltungen'), 'link'=>'lva_liste.php?uid='.$user->uid, 'target'=>'content');
+ }
+
+ if(check_lektor(get_uid()))
+ {
+ $menu['Zeitsperren']=array('name'=>$p->t('profil/zeitsperrenVon').' '.$user->nachname, 'link'=>'zeitsperre_days.php?days=30&lektor='.$user->uid, 'target'=>'content');
+ }
+
+ if($uid!=get_uid())
+ {
+ $menu['LVPlan']=array('name'=>$p->t('profil/lvplanVon').' '.$user->nachname, 'link'=>'../lvplan/stpl_week.php?pers_uid='.$user->uid.'&type=lektor', 'target'=>'content');
+ }
+}
+?>
diff --git a/addons/template/content/index.html b/addons/template/content/index.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/addons/template/content/init.js.php b/addons/template/content/init.js.php
new file mode 100644
index 000000000..4209c2f12
--- /dev/null
+++ b/addons/template/content/init.js.php
@@ -0,0 +1,90 @@
+
+ */
+/**
+ * Initialisierung des Addons
+ */
+?>
+addon.push(
+{
+ init: function()
+ {
+ // Diese Funktion wird nach dem Laden des FAS aufgerufen
+
+ /*
+
+ // Hinzufuegen eines zusaetzlichen Tabs bei Mitarbeitern mit einem Label darin
+ var tabitem = document.createElement("tab");
+ tabitem.setAttribute("id","addon-template-tab");
+ tabitem.setAttribute("label","Template");
+
+ var mitarbeitertabs = document.getElementById("mitarbeiter-tabs");
+ mitarbeitertabs.appendChild(tabitem);
+
+ var tabpanelitem = document.createElement("vbox");
+ tabpanelitem.setAttribute("id","addon-template-tabpannel-vbox");
+ var label = document.createElement("label");
+ label.setAttribute("value","Template");
+ tabpanelitem.appendChild(label);
+
+ var mitarbeitertabpanels=document.getElementById("mitarbeiter-tabpanels-main");
+ mitarbeitertabpanels.appendChild(tabpanelitem);
+
+ // zusaetzliche Funktion beim klicken des Suchen Button bei Mitarbeitern hinzufuegen
+ searchbutton = document.getElementById("mitarbeiter-toolbar-button-search");
+ searchbutton.addEventListener("command",AddonTemplateMitarbeiterSearch, true);
+
+ // Menuepunkt hinzufuegen
+ statistikmenue = document.getElementById("menu-statistic-popup");
+
+ var menuentry = document.createElement("menuitem");
+ menuentry.setAttribute("id","addons-template-mymenuentry");
+ menuentry.setAttribute("label","Addon Template Menu Entry");
+ menuentry.addEventListener("command",AddonTemplateMenuEntry, true);
+
+ statistikmenue.appendChild(menuentry);
+
+ */
+ },
+ selectMitarbeiter: function(person_id, mitarbeiter_uid)
+ {
+ },
+ selectStudent: function(person_id, prestudent_id, student_uid)
+ {
+ },
+ selectVerband: function(item)
+ {
+ },
+ selectInstitut: function(institut)
+ {
+ },
+ selectLektor: function(lektor)
+ {
+ }
+});
+
+function AddonTemplateMitarbeiterSearch()
+{
+ alert("AddonTemplateSearchButtonClicked");
+}
+
+function AddonTemplateMenuEntry()
+{
+ alert("AddonTemplateMenuEntry clicked");
+}
diff --git a/addons/template/dbcheck.php b/addons/template/dbcheck.php
new file mode 100644
index 000000000..a5f9e8b30
--- /dev/null
+++ b/addons/template/dbcheck.php
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+ Addon Datenbank Check
+
+
+
Addon Datenbank Check
';
+
+$uid = get_uid();
+$rechte = new benutzerberechtigung();
+$rechte->getBerechtigungen($uid);
+
+if(!$rechte->isBerechtigt('basis/addon', null, 'suid'))
+{
+ exit('Sie haben keine Berechtigung für die Verwaltung von Addons');
+}
+
+echo '
';
+
+
+// Liste der verwendeten Tabellen / Spalten des Addons
+$tabellen=array(
+ "addon.tbl_template_items" => array("template_items_kurzbz","bezeichnung"),
+);
+
+
+$tabs=array_keys($tabellen);
+$i=0;
+foreach ($tabellen AS $attribute)
+{
+ $sql_attr='';
+ foreach($attribute AS $attr)
+ $sql_attr.=$attr.',';
+ $sql_attr=substr($sql_attr, 0, -1);
+
+ if (!@$db->db_query('SELECT '.$sql_attr.' FROM '.$tabs[$i].' LIMIT 1;'))
+ echo ' '.$tabs[$i].': '.$db->db_last_error().' ';
+ else
+ echo $tabs[$i].': OK - ';
+ flush();
+ $i++;
+}
+?>
diff --git a/addons/template/index.html b/addons/template/index.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/addons/template/install.php b/addons/template/install.php
new file mode 100644
index 000000000..d9644bd3e
--- /dev/null
+++ b/addons/template/install.php
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+ Addon Installation
+
+
+
Addon Installation
';
+
+$uid = get_uid();
+$rechte = new benutzerberechtigung();
+$rechte->getBerechtigungen($uid);
+
+if(!$rechte->isBerechtigt('basis/addon', null, 'suid'))
+{
+ exit('Sie haben keine Berechtigung für die Verwaltung von Addons');
+}
+
+if($fhcomplete_version>=$fhcomplete_target_version)
+{
+ echo 'Installiere Addon '.$addon_name.' Version '.$addon_version.'
';
+
+ /**
+ * Fuegen Sie hier Ihre Installationsroutine hinzu
+ */
+
+ echo '>> weiter zur Aktualisierung der Datenbank';
+}
+else
+{
+ echo 'Dieses Addon funktioniert erst mit FHComplete Version '.$fhcomplete_target_version;
+ echo 'Installation abgebrochen';
+}
+?>
diff --git a/addons/template/locale/README.txt b/addons/template/locale/README.txt
new file mode 100644
index 000000000..fcf4930cd
--- /dev/null
+++ b/addons/template/locale/README.txt
@@ -0,0 +1,6 @@
+In diesem Ordner können Locale-Dateien abgelegt werden.
+Diese überschreiben globale Locales die unter /locale/ abgelegt sind.
+
+In den Dateien müssen nicht alle Phrasen vorhanden sein. Es genügt, wenn nur die Phrasen vorhanden sind die überschrieben werden sollen. Alle anderen Phrasen werden aus dem Standard-Ordner übernommen.
+
+Die Datei mit der Phrase muss jedoch den selben Namen haben wie die Ursprungsdatei in der die Phrase enthalten ist.
diff --git a/addons/template/locale/index.html b/addons/template/locale/index.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/addons/template/soap/index.html b/addons/template/soap/index.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/addons/template/system/index.html b/addons/template/system/index.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/addons/template/system/vorlage_zip/README.txt b/addons/template/system/vorlage_zip/README.txt
new file mode 100644
index 000000000..33c9e2414
--- /dev/null
+++ b/addons/template/system/vorlage_zip/README.txt
@@ -0,0 +1,2 @@
+In diesem Ordner können modifizierte ODT Vorlagen für die Dokumentenerstellung abgelegt werden.
+Vorlagen die in diesem Ordner abgelegt werden, werden bevorzugt gegenüber jenen die unter /system/vorlage_zip abgelegt sind.
diff --git a/addons/template/version.php b/addons/template/version.php
new file mode 100644
index 000000000..447a26c2a
--- /dev/null
+++ b/addons/template/version.php
@@ -0,0 +1,29 @@
+
diff --git a/addons/template/vilesci/index.php b/addons/template/vilesci/index.php
new file mode 100644
index 000000000..6ed5cbfba
--- /dev/null
+++ b/addons/template/vilesci/index.php
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+ Template
+
+
+
Template
';
+
+$uid = get_uid();
+$rechte = new benutzerberechtigung();
+$rechte->getBerechtigungen($uid);
+
+if(!$rechte->isBerechtigt('basis/addon'))
+{
+ die('Sie haben keine Berechtigung fuer diese Seite');
+}
+echo 'Template Addon Vilesci Integration';
+?>
diff --git a/addons/template/vilesci/init.js.php b/addons/template/vilesci/init.js.php
new file mode 100644
index 000000000..5ac9310ca
--- /dev/null
+++ b/addons/template/vilesci/init.js.php
@@ -0,0 +1,44 @@
+
+ */
+/**
+ * Initialisierung des Addons
+ */
+?>
+if(typeof addon =='undefined')
+ var addon=Array();
+
+addon.push(
+{
+ init: function(page, params)
+ {
+ // Diese Funktion wird nach dem Laden der Seite im Vilesci aufgerufen
+
+ /*
+ switch(page)
+ {
+ case 'vilesci/lehre/lehrveranstaltung.php':
+ break;
+
+ default:
+ break;
+ }
+ */
+ }
+});
diff --git a/addons/template/vilesci/menu.inc.php b/addons/template/vilesci/menu.inc.php
new file mode 100644
index 000000000..77e9c8ec3
--- /dev/null
+++ b/addons/template/vilesci/menu.inc.php
@@ -0,0 +1,44 @@
+,
+ */
+/**
+ * Hier koennen neue Menuepunkte im Vilesci definiert werden
+ */
+
+// Hauptmenuepunkt hinzufuegen
+$menu_addon = array
+(
+ 'Template'=>array
+ (
+ 'name'=>'Template', 'opener'=>'true', 'hide'=>'true', 'permissions'=>array('basis/addon'), 'image'=>'../../skin/images/vilesci_addons.png',
+ 'link'=>'left.php?categorie=Template', 'target'=>'nav',
+ 'TemplateEntry1'=>array('name'=>'Template Entry1', 'link'=>'../addons/template/vilesci/index.php', 'target'=>'main'),
+ 'TemplateEntry2'=>array('name'=>'Template Entry2', 'link'=>'../addons/template/vilesci/index.php', 'target'=>'main')
+ )
+);
+$menu = array_merge($menu,$menu_addon);
+
+// Submenuepunkt hinzufuegen unter dem Hauptmenue Punkt "Admin"
+$menu_addon = array
+(
+ 'TemplateSubmenu'=>array('name'=>'Template', 'link'=>'../addons/template/vilesci/index.php', 'target'=>'main','permissions'=>array('basis/addon')),
+
+);
+$menu['Admin'] = array_merge($menu['Admin'],$menu_addon);
+?>
diff --git a/addons/template/vilesci/vorlage_generateuid.inc.php b/addons/template/vilesci/vorlage_generateuid.inc.php
new file mode 100644
index 000000000..ebe2be3e2
--- /dev/null
+++ b/addons/template/vilesci/vorlage_generateuid.inc.php
@@ -0,0 +1,69 @@
+ and
+*/
+/**
+ * Benutzerdefinierte Funktion zur Generierung der UIDs
+ * Zur Aktivierung muss die Datei in generateuid.inc.php umbenannt werden
+ */
+
+/**
+ * Generiert die UID für Studierende
+ *
+ * @param $stgkzl Studiengangskuerzel
+ * @param $jahr Studienjahr (zB 2014)
+ * @param $stgtyp Studiengangstyp einstellige Ziffer
+ * @param $matrikelnummer Personenkennzeichen des Studierenden
+ */
+function generateUID($stgkzl, $jahr, $stgtyp, $matrikelnummer)
+{
+ return $matrikelnummer;
+}
+
+/**
+ * Gerneriert die Mitarbeiter UID
+ * Format v.nachname max 20 Zeichen
+ * Im Fall von Doppelnamen wird vor dem Bindestrich abgeschnitten
+ *
+ * @param $vorname Vorname
+ * @param $nachname Nachname
+ * @param $lektor Boolean true wenn Lektor sonst false
+ */
+function generateMitarbeiterUID($vorname, $nachname, $lektor, $fixangestellt=true)
+{
+ $bn = new benutzer();
+ $uid='';
+
+ // Wenn ein Bindestrich vorhanden ist (Doppelname), dort abschneiden
+ if(mb_strpos($nachname,'-')!==false)
+ $nachname = mb_substr($nachname, 0, mb_strpos($nachname,'-'));
+ // Nachname wird so lange verkuerzt bis eine eindeutige UID entsteht die noch nicht vergeben ist
+ for($nn=18;$nn!=0;$nn--)
+ {
+ $uid = mb_substr($vorname,0,1);
+ $uid .= mb_substr($nachname,0,$nn);
+
+ $uid = mb_str_replace(' ','',$uid);
+ $uid = mb_str_replace('-','',$uid);
+
+ $uid = mb_strtolower($uid);
+ if(!$bn->uid_exists($uid))
+ return $uid;
+ }
+ return false;
+}
diff --git a/addons/template/vilesci/vorlage_passwort.inc.php b/addons/template/vilesci/vorlage_passwort.inc.php
new file mode 100644
index 000000000..0d922f6bc
--- /dev/null
+++ b/addons/template/vilesci/vorlage_passwort.inc.php
@@ -0,0 +1,39 @@
+
+ */
+/*
+ * Diese Datei überschreibt die Default-Funktionen zur Passwort Änderung
+ * Zur Aktivierung muss die Datei in passwort.inc.php umbenannt werden
+ *
+ * Ansonsten wird die Default Funktionalität unter /include/tw/passwort.inc.php verwendet
+ */
+
+/**
+ * Aendert das Passwort
+ * @param $passwort_alt Altes (aktuelles) Passwort
+ * @param $passwort_neu neues Passwort
+ * @param $uid - UID/Benutzername des Users
+ * @return true wenn erfolgreich - Fehlermeldung im Fehlerfall
+ */
+function change_password($passwort_alt, $passwort_neu, $uid)
+{
+ return 'Passwort Änderung fehlgeschlagen.';
+}
+
+?>
diff --git a/addons/template/vilesci/vorlage_serviceterminal.inc.php b/addons/template/vilesci/vorlage_serviceterminal.inc.php
new file mode 100644
index 000000000..25debceea
--- /dev/null
+++ b/addons/template/vilesci/vorlage_serviceterminal.inc.php
@@ -0,0 +1,72 @@
+
+ */
+
+// Raumtyp der per Default am Infoterminal angezeigt wird
+$ServiceTerminalDefaultRaumtyp='EDV';
+
+// Liste der Raumtypen die am Infoterminal angezeigt werden
+$ServiceTerminalRaumtypen=array(
+ array("type"=>"EDV","beschreibung"=>" Freie PC Räume ","img"=>""),
+ array("type"=>"HS","beschreibung"=>" Freie Hörsäle ","img"=>""),
+ array("type"=>"SEM","beschreibung"=>" Freie Seminarräume ","img"=>""),
+ array("type"=>"Lab","beschreibung"=>" Freie Laborräume ","img"=>""),
+ );
+
+/**
+ * Prueft ob die Karte verlaengert werden darf
+ * @param $uid
+ * @return Array mit boolean und Errormsg
+ */
+function ServiceTerminalCheckVerlaengerung($uid)
+{
+ if(!check_lektor($uid))
+ {
+
+ $konto = new konto();
+ if($aktSemester= $konto->getLastStudienbeitrag($uid))
+ {
+ return array(true,'Studienbeitrag für Semester '.$aktSemester.' bezahlt');
+ }
+ else
+ {
+ return array(false,'Verlängerung der Karte ist derzeit nicht möglich da der Studienbeitrag noch nicht bezahlt wurde');
+ }
+ }
+ else
+ return array(false,'Für Mitarbeiter ist eine Kartenverlängerung nicht möglich');
+}
+
+/**
+ * Liefert den Text der auf die Karte gedruckt werden soll oder einer Errormsg
+ * @param $uid UID des Users
+ * @return array mit Datum/Drucktext und errorMessage
+ */
+function ServiceTerminalGetDrucktext($uid)
+{
+ // hole Semester des letzten eingezahlten Studienbeitrages
+ $konto = new konto();
+ if(!$aktSemester= $konto->getLastStudienbeitrag($uid))
+ {
+ return array('datum'=>'', 'errorMessage'=>'Fehler beim Auslesen des Studienganges. Bitte wenden Sie sich an den Service Desk.');
+ }
+
+ return array('datum'=>'Gueltig fuer/valid for '.$aktSemester, 'errorMessage'=>'');
+}
+?>
diff --git a/addons/template/xml/index.html b/addons/template/xml/index.html
new file mode 100644
index 000000000..e69de29bb