Merge branch 'master' into permissions

This commit is contained in:
Paolo
2018-06-26 13:38:12 +02:00
20 changed files with 288 additions and 286 deletions
+14 -14
View File
@@ -17,10 +17,10 @@ if (! defined('BASEPATH'))
class AmpelMail extends FHC_Controller
{
const CIS_AMPELVERWALTUNG_URL =
CIS_ROOT. "index.php?sprache=German&content_id=&menu=".
CIS_ROOT. "menu.php?content_id=&content=".
CIS_ROOT. "private/tools/ampelverwaltung.php";
CIS_ROOT. "cis/index.php?menu=".
CIS_ROOT. "cis/menu.php?content_id=&content=".
CIS_ROOT. "cis/private/tools/ampelverwaltung.php";
/**
* Constructor
*/
@@ -39,11 +39,11 @@ class AmpelMail extends FHC_Controller
echo "Jobs must be run from the CLI";
exit;
}
// Load models
$this->load->model('content/Ampel_model', 'AmpelModel');
$this->load->model('person/Person_model', 'PersonModel');
// Load helpers
$this->load->helper('sancho');
}
@@ -60,7 +60,7 @@ class AmpelMail extends FHC_Controller
echo $result. PHP_EOL;
}
/**
* Generates mail content for new and overdue Ampeln, which
* 1. are not confirmed by the user yet and
@@ -81,7 +81,7 @@ class AmpelMail extends FHC_Controller
if (hasData($result_active_ampeln))
{
$ampel_arr = $result_active_ampeln->retval;
// Loop through ampeln
foreach ($ampel_arr as $ampel)
{
@@ -95,11 +95,11 @@ class AmpelMail extends FHC_Controller
// get all user, who get this ampel
$result_ampel_user = $this->AmpelModel->execBenutzerSelect($qry_all_ampel_user);
if (hasData($result_ampel_user))
{
$ampel_user_arr = $result_ampel_user->retval;
// loop through all user, who get this ampel
foreach ($ampel_user_arr as $ampel_user)
{
@@ -131,7 +131,7 @@ class AmpelMail extends FHC_Controller
$html_text = '
<p><strong>'. strtoupper($ampel->kurzbz). '</strong><br>
<small>
<i style="color: #65696E;">Die Deadline für die Bestätigung war am
<i style="color: #65696E;">Die Deadline für die Bestätigung war am
<span style="color: #FF0000;">'. date_format($deadline, 'Y-m-d'). '</span>
</i>
</small></p><br>';
@@ -177,7 +177,7 @@ class AmpelMail extends FHC_Controller
);
};
}
// ------------------------------------------------------------------------
// Private methods
/**
@@ -190,10 +190,10 @@ class AmpelMail extends FHC_Controller
private function _getAmpelContentData($uid, $html_text, $ampel_data_arr)
{
$firstName = $this->PersonModel->getByUid($uid)->retval[0]->vorname;
// check if user already exists in the array
$key_position = array_search($uid, array_column($ampel_data_arr, 'uid'));
// If user already exists in the array, add only new ampel data to users ampel list
if ($key_position !== false)
{
+1 -1
View File
@@ -178,7 +178,7 @@ class Filters extends FHC_Controller
}
else
{
$this->outputJsonError('Wrong parameter');
$this->outputJsonError('An error occurred while saving a custom filter');
}
}
@@ -1199,14 +1199,16 @@ class InfoCenter extends Auth_Controller
$notizenBewerbung = $this->NotizModel->getNotizByTitel($person_id, 'Anmerkung zur Bewerbung')->retval;
$notizentext = '';
$lastElement = end($notizenBewerbung);
$notizentext = '<ul style="padding-left: 20px; margin-left: 0;">';
foreach ($notizenBewerbung as $notiz)
{
$notizentext .= $notiz->text;
if ($notiz != $lastElement)
$notizentext .= ' | ';
// For applicant-notices the user is not shown
if ($notiz->insertvon != 'online_notiz')
$notizentext .= '<li>'.$notiz->text.' ('.$notiz->insertvon.')</li>';
else
$notizentext .= '<li>'.$notiz->text.'</li>';
}
$notizentext .= '</ul>';
$mailadresse = '';
foreach ($person->kontakte as $kontakt)
+65 -101
View File
@@ -47,114 +47,23 @@ class NavigationLib
// Public methods
/**
* Creates the left Menu for each Page
* @param navigation_widget_called GET Parameter witch holds the currently called Page
* Creates the left menu for each Page
* @param navigationPage GET Parameter witch holds the currently called Page
* @return array with the Menu Entries
*/
public function getMenuArray($navigationPage)
{
$menuArray = array();
if (isset($navigationPage))
{
// Get Menu Entries of the Core
$navigationMenuArray = $this->_ci->config->item(self::CONFIG_MENU_NAME);
$menuArray = $this->_wildcardsearch($navigationMenuArray, $navigationPage);
// Load Menu Entries of Extensions
$extensions = $this->_ci->extensionslib->getInstalledExtensions();
if(hasData($extensions))
{
$json_extension = array();
foreach($extensions->retval as $ext)
{
$filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/'.self::CONFIG_NAVIGATION_FILENAME;
if (file_exists($filename))
{
unset($config);
include($filename);
if(isset($config[self::CONFIG_MENU_NAME]) && is_array($config[self::CONFIG_MENU_NAME]))
{
$json_extension = array_merge_recursive(
$json_extension,
$this->_wildcardsearch($config[self::CONFIG_MENU_NAME],
$navigationPage)
);
}
}
}
// Merge Extension Menuentries with the Core Entries
$menuArray = array_merge_recursive($menuArray, $json_extension);
}
// Load dynamic Menu Entries from Session
if (($navigationMenuSessionArray = $this->getSessionMenu()) != null)
{
if (isset($navigationMenuSessionArray) && is_array($navigationMenuSessionArray))
{
$menuArray = array_merge_recursive($menuArray, $navigationMenuSessionArray);
}
}
}
$this->_sortArray($menuArray);
return $menuArray;
return $this->_getNavigationArray($navigationPage, self::CONFIG_MENU_NAME, $this->getSessionMenu());
}
/**
* Creates the Top Menu for each Page
* @param navigation_widget_called GET Parameter witch holds the currently called Page
* Creates the header menu for each Page
* @param navigationPage GET Parameter witch holds the currently called Page
* @return array with the Menu Entries
*/
public function getHeaderArray($navigationPage)
{
$headerArray = array();
if (isset($navigationPage))
{
// Load Header Entries of Core
$navigationHeaderArray = $this->_ci->config->item(self::CONFIG_HEADER_NAME);
$headerArray = $this->_wildcardsearch($navigationHeaderArray, $navigationPage);
// Load Header Entries of Extensions
$extensions = $this->_ci->extensionslib->getInstalledExtensions();
if(hasData($extensions))
{
$headerArray_extension = array();
foreach($extensions->retval as $ext)
{
$filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/'.self::CONFIG_NAVIGATION_FILENAME;
if (file_exists($filename))
{
unset($config);
include($filename);
if(isset($config[self::CONFIG_HEADER_NAME]) && is_array($config[self::CONFIG_HEADER_NAME]))
{
$headerArray_extension = array_merge_recursive(
$json_extension,
$this->_wildcardsearch($config[self::CONFIG_HEADER_NAME],
$navigationPage)
);
}
}
}
$headerArray = array_merge_recursive($headerArray, $headerArray_extension);
}
// Load dynamic Header Entries from Session
if (($navigationHeaderSessionArray = $this->getSessionHeader()) != null)
{
if (isset($navigationHeaderSessionArray) && is_array($navigationHeaderSessionArray))
{
$headerArray = array_merge_recursive($headerArray, $navigationHeaderSessionArray);
}
}
}
$this->_sortArray($headerArray);
return $headerArray;
return $this->_getNavigationArray($navigationPage, self::CONFIG_HEADER_NAME, $this->getSessionHeader());
}
/**
@@ -292,6 +201,61 @@ class NavigationLib
//------------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Build the array needed by the NavigationWidget to render the left menu or the header
* menu depending on the given parameters
* @param navigationPage GET Parameter witch holds the currently called Page
* @param configName the name of the navigation config entry
* @param sessionArray array present in the session that could contains other menu entries
* @return array with the Menu Entries
*/
private function _getNavigationArray($navigationPage, $configName, $sessionArray)
{
$navigationArray = array();
if (isset($navigationPage))
{
// Load Header Entries of Core
$configArray = $this->_ci->config->item($configName);
$navigationArray = $this->_wildcardsearch($configArray, $navigationPage);
// Load Header Entries of Extensions
$extensions = $this->_ci->extensionslib->getInstalledExtensions();
if (hasData($extensions))
{
$extensionArray = array();
foreach ($extensions->retval as $ext)
{
$filename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/'.self::CONFIG_NAVIGATION_FILENAME;
if (file_exists($filename))
{
unset($config);
include($filename);
if (isset($config[$configName]) && is_array($config[$configName]))
{
$extensionArray = array_merge_recursive(
$json_extension,
$this->_wildcardsearch($config[$configName],
$navigationPage)
);
}
}
}
$navigationArray = array_merge_recursive($navigationArray, $extensionArray);
}
// Load dynamic header entries from session
if ($sessionArray != null && is_array($sessionArray))
{
$navigationArray = array_merge_recursive($navigationArray, $sessionArray);
}
}
$this->_sortArray($navigationArray);
return $navigationArray;
}
/**
* Searches a Menuentry. If there is no exact entry it searches for Wildcard Entries with a Star
* Example:
@@ -311,20 +275,20 @@ class NavigationLib
krsort($navigationArray);
// 100% match found
if(isset($navigationArray[$navigationPage]))
if (isset($navigationArray[$navigationPage]))
{
return $navigationArray[$navigationPage];
}
else
{
foreach($navigationArray as $key=>$row)
foreach ($navigationArray as $key=>$row)
{
// Search for * Entries
if(mb_strpos($key, '*') === 0 || mb_strpos($key, '*') === mb_strlen($key) - 1)
if (mb_strpos($key, '*') === 0 || mb_strpos($key, '*') === mb_strlen($key) - 1)
{
// Take * Entry if Matches
$search = mb_substr($key, 0, -1);
if($search == '' || mb_strpos($navigationPage, $search) === 0)
if ($search == '' || mb_strpos($navigationPage, $search) === 0)
{
return $row;
}
+13 -13
View File
@@ -10,7 +10,7 @@ class Ampel_model extends DB_Model
$this->dbTable = 'public.tbl_ampel';
$this->pk = 'ampel_id';
}
/**
* Returns all active Ampeln, that are actually:
* 1. not after the deadline date
@@ -25,24 +25,24 @@ class Ampel_model extends DB_Model
SELECT *
FROM public.tbl_ampel
WHERE';
if ($email === true)
{
$parametersArray['email'] = $email;
$query .= ' email = ? AND';
}
$query .= '
(NOW()<(deadline+(verfallszeit || \' days\')::interval)::date)
OR (verfallszeit IS NULL AND NOW() < deadline)
AND (NOW()>(deadline-(vorlaufzeit || \' days\')::interval)::date)
OR (vorlaufzeit IS NULL AND NOW() > deadline)';
(NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
OR (verfallszeit IS NULL)
AND (NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
OR (vorlaufzeit IS NULL AND NOW() < deadline)';
$query .= ' ORDER BY deadline DESC';
return $this->execQuery($query, $parametersArray);
}
/**
* Returns all Ampel-receiver of a specific Ampel.
* @param string $benutzer_select SQL Statement which defines the Ampel-receiver.
@@ -55,7 +55,7 @@ class Ampel_model extends DB_Model
return $this->execQuery($benutzer_select);
}
}
/**
* Checks if Ampel was confirmed by the user.
* @param int $ampel_id Ampel-ID
@@ -75,7 +75,7 @@ class Ampel_model extends DB_Model
{
$result = $this->execQuery($query, array($ampel_id, $uid));
}
if ($result)
{
if (count($result->retval) > 0)
@@ -87,7 +87,7 @@ class Ampel_model extends DB_Model
return false;
}
}
else
else
return $result; //will contain the error-msg from execQuery
}
}
+34 -32
View File
@@ -24,75 +24,75 @@ function hide_ampel_div()
if(is_user_logged_in())
{
$user = get_uid();
$ampel = new ampel();
$ampel->loadUserAmpel($user);
$rot=0;
$gelb = 0;
$gelb = 0;
$gruen = 0;
$verpflichtend = false;
$cnt_verpflichtend = 0;
$cnt_abgelaufen = 0;
$cnt_verpflichtend = 0;
$cnt_abgelaufen = 0;
$cnt_notConf_notOverdue = 0; //counts mandatory, not confirmed && not overdued ampeln (for popup)
$datum = new datum();
$now = $datum->mktime_fromdate(date('Y-m-d'));
foreach($ampel->result as $row)
{
{
$deadline =$datum->mktime_fromdate($row->deadline);
$vorlaufzeit = $row->vorlaufzeit;
$verfallszeit = $row->verfallszeit;
$bestaetigt = $ampel->isBestaetigt($user, $row->ampel_id);
$verpflichtend = $row->verpflichtend;
$abgelaufen = false;
$datum_liegt_vor_vorlaufzeit = false;
$datum_liegt_nach_verfallszeit = false;
if (!is_null($vorlaufzeit))
$datum_liegt_vor_vorlaufzeit = $now < strtotime('-' . $vorlaufzeit . ' day', $deadline);
$datum_liegt_vor_vorlaufzeit = $now < strtotime('-' . $vorlaufzeit . ' day', $deadline);
if (!is_null($verfallszeit))
$datum_liegt_nach_verfallszeit = $now > strtotime('+' . $verfallszeit . ' day', $deadline);
//count mandatory
if($verpflichtend == 't')
$cnt_verpflichtend++;
//count overdue
if ($datum_liegt_nach_verfallszeit)
$cnt_abgelaufen++;
//set status
if ($bestaetigt)
$gruen++;
else if ($now >= $deadline && !$datum_liegt_nach_verfallszeit && !$bestaetigt)
$gruen++;
else if ($now >= $deadline && !$datum_liegt_nach_verfallszeit && !$bestaetigt)
$rot++;
else if (!$datum_liegt_nach_verfallszeit && !$datum_liegt_vor_vorlaufzeit)
$gelb++;
$gelb++;
//count mandatory ampeln that are not confirmed and not overdue (for popup)
if ($verpflichtend == 't' && !$bestaetigt && !$datum_liegt_nach_verfallszeit && !$datum_liegt_vor_vorlaufzeit)
$cnt_notConf_notOverdue++;
$cnt_notConf_notOverdue++;
}
//if at least ONE mandatory notification, which is not overdue -> trigger notification-POPUP
if ($cnt_notConf_notOverdue > 0)
{
{
echo ' <script>
$(document).ready(function()
{
function resizeIframe(obj)
{
function resizeIframe(obj)
{
obj.style.height = obj.contentWindow.document.body.scrollHeight + \'px\';
}
var html_content = \'<iframe src="'.APP_ROOT.'cis/private/tools/ampelverwaltung.php?verpflichtend=true" name="ampel" frameborder="0" width="100%" height="100% onload="resizeIframe(this) id="ampel_frame"></iframe><button id="close_button" onclick="hide_ampel_div()">Close</button>\';
var html_content = \'<iframe src="'.APP_ROOT.'cis/private/tools/ampelverwaltung.php?verpflichtend=true" name="ampel" frameborder="0" width="100%" height="100% onload="resizeIframe(this) id="ampel_frame"></iframe><button id="close_button" class="btn btn-default" onclick="hide_ampel_div()">'.$p->t('tools/ampelClose').'</button>\';
$("#ampel_div").html(html_content);
});
</script>';
echo ' <style type="text/css">
#ampel_div
{
@@ -100,15 +100,13 @@ if(is_user_logged_in())
top: 20%;
left: 10%;
right: 10%;
width: 80%;
height: 45%;
width: 70%;
height: 50%;
scrolling: no;
z-index: 1003;
background-color: #fefefe;
margin: auto;
text-align: center;
padding-top: 20px;
border: 3px solid black;
-webkit-box-shadow: 0px 0px 0px 2000px rgba(0,0,0,0.47);
-moz-box-shadow: 0px 0px 0px 2000px rgba(0,0,0,0.47);
box-shadow: 0px 0px 0px 2000px rgba(0,0,0,0.47);
@@ -120,24 +118,28 @@ if(is_user_logged_in())
#close_button
{
position: relative;
top: 5px;
top: 0px;
font-size: 150%;
height: 50px;
width: 100%;
background-color: white;
border: none;
/*border-top: 4px solid black;*/
/*border-bottom: 4px solid black;*/
}
</style>';
}
//show & color header ampel-link
if($rot > 0)
echo '<a href="private/tools/ampelverwaltung.php" target="content" title="'.$p->t("tools/ampelsystem").'"><span style="color: red;">'.$p->t("tools/ampelsystem").'</span></a>&nbsp;&nbsp;<span style="color: #A5AFB6">|</span>&nbsp;&nbsp;';
elseif($gelb > 0)
echo '<a href="private/tools/ampelverwaltung.php" target="content" title="'.$p->t("tools/ampelsystem").'"><span style="color: orange;">'.$p->t("tools/ampelsystem").'</span></a>&nbsp;&nbsp;<span style="color: #A5AFB6">|</span>&nbsp;&nbsp;';
elseif($rot==0 || $rot <= $cnt_abgelaufen && $gelb==0)
echo '<a href="private/tools/ampelverwaltung.php" target="content" title="'.$p->t("tools/ampelsystem").'"><span style="color: #A5AFB6">'.$p->t("tools/ampelsystem").'</span></a>&nbsp;&nbsp;<span style="color: #A5AFB6">|</span>&nbsp;&nbsp;';
echo '<a href="private/tools/ampelverwaltung.php" target="content" title="'.$p->t("tools/ampelsystem").'"><span style="color: #A5AFB6">'.$p->t("tools/ampelsystem").'</span></a>&nbsp;&nbsp;<span style="color: #A5AFB6">|</span>&nbsp;&nbsp;';
}
else
{
echo "<script>window.setTimeout('loadampel()',1000);</script>";
}
?>
?>
+6 -5
View File
@@ -165,11 +165,12 @@ $db = new basis_db();
<link rel="stylesheet" href="../skin/jquery.css" type="text/css">
<link href="../skin/style.css.php" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../vendor/jquery/sizzle/sizzle.js"></script>
<script type="text/javascript" src="../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../vendor/jquery/sizzle/sizzle.js"></script>
<link rel="stylesheet" type="text/css" href="../vendor/twbs/bootstrap/dist/css/bootstrap.min.css">
</head>
<script type="text/javascript">
function changeSprache(sprache)
+26 -33
View File
@@ -328,29 +328,36 @@ function typeWrite(span){
},randInt+4500);
}
$(document).ready(function(){
typeWrite('sancho_ampel_text');
});
</script>
</head>
<body style="font-family: Arial, Helvetica, sans-serif; font-size: 13px;">
<div class="container" >
<div class="container-fluid" style="padding: 0px;">
<?php
//title in CIS
if (!$is_popup)
echo '<h3>' . $p->t('tools/ampelsystem') . '</h3>';
//title in popup for mandatory ampeln
//***************************************** AROUSE SANCHO for mandatory ampeln
if ($is_popup)
echo '<p><p><h3>' . $p->t('tools/ampelPopupTitel'). '</h3><p><br></p>';
{
//sancho message if mandatory ampeln exist
if (count($user_ampel_arr) > 0)
{
echo '
<div>
<img src="../../../skin/images/sancho/sancho_header_du_hast_verpflichtende_ampeln.jpg" alt="sancho_verpflichtende_ampeln" style="width: 100%;">
</div>
<p><br><br></p>';
}
}
?>
<!--***************************************** PANEL-GROUP -->
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true" style="padding-left: 15px; padding-right:15px;">
<!--***************************************** radiobuttons actual term / all -->
<?php
@@ -370,30 +377,7 @@ $(document).ready(function(){
<?php
} //end if
//***************************************** AROUSE SANCHO for mandatory ampeln
if ($is_popup)
{
//sancho message if mandatory ampeln exist
if (count($user_ampel_arr) == 1)
$ovdue_txt = 'ich habe 1 Nachricht entdeckt, die verpflichtend zu bestätigen ist.';
else if (count($user_ampel_arr) > 1)
$ovdue_txt = 'ich habe ' . count($user_ampel_arr) . ' Nachrichten entdeckt, die verpflichtend zu bestätigen sind.';
if (count($user_ampel_arr) > 0)
{
echo '
<div class="row">
<div class="col-xs-2">
<img src="../../../skin/images/sancho_round_right_red.png" alt="sancho_ampel_ueberfaellig" class="img-circle" style="width: 120px;">
</div>
<div class="col-xs-8" style="color: red; font-weight: bold; font-family: Courier New, Courier, monospace;">
<br><br><span id="sancho_ampel_text"><noscript>Hallo ' . $person->vorname . ', ' . $ovdue_txt . ' ' . $p->t('tools/ampelBitteBestaetigen'). '</noscript></span>
</div>
</div>
<p><br><br></p>';
}
}
//***************************************** COLLAPSED PANELS WITH AMPELN
$cnt = 1; //counter to set iterative id's
@@ -418,7 +402,17 @@ $(document).ready(function(){
</div>
</div>
</div>';
}
elseif ($cnt_active != 0 && !$is_popup)
{
echo '
<div class="panel">
<div class="row" style="margin-bottom: 15px; padding-left: 15px;">
<div class="panel-heading" style="background-color: transparent" role="tab" id="heading">
<h4>' . $p->t('tools/ampelAktuelleAmpeln'). '</h4>
</div>
</div>
</div>';
}
//fill panel with ampeln
@@ -435,6 +429,7 @@ $(document).ready(function(){
<div class="panel">
<div class="row" style="margin-bottom: 15px; padding-left: 15px;">
<div class="panel-heading" style="background-color: transparent" role="tab" id="heading">
<br>
<h4>' . $p->t('tools/ampelAbgelaufenTitel'). '</h4>
<small>' . $p->t('tools/ampelAbgelaufenTxt'). '</small>
</div>
@@ -492,8 +487,6 @@ $(document).ready(function(){
</button>
</form>
</div>
</div>
</div>
<?php
+7 -1
View File
@@ -73,10 +73,16 @@ if($doc->isLocked($id))
$dokumente_person = new dokument();
$dokumente_person->getAllDokumenteForPerson($person_id, true);
$dokumente_arr = array();
foreach ($dokumente_person->result AS $row)
$dokumente_arr[] .= $row->dokument_kurzbz;
// An der FHTW wird das vorläufige ZGV Dokument verlangt und kann somit auch heruntergeladen werden
if (CAMPUS_NAME == 'FH Technikum Wien')
{
$dokumente_arr[] .= 'ZgvBaPre';
}
if ($person_id!=$akte_person || !in_array($akte_dokument_kurzbz, $dokumente_arr))
die('Sie haben keinen Zugriff auf dieses Dokument');
}
+1 -1
View File
@@ -316,7 +316,7 @@ class akte extends basis_db
$qry.=" AND dokument_kurzbz=".$this->db_add_param($dokument_kurzbz);
if($stg_kz != null && $prestudent_id != null)
$qry.=" AND dokument_kurzbz not in (SELECT dokument_kurzbz FROM public.tbl_dokument JOIN public.tbl_dokumentstudiengang USING(dokument_kurzbz)
WHERE studiengang_kz= ".$this->db_add_param($stg_kz).") AND dokument_kurzbz NOT IN ('Zeugnis') AND dokument_kurzbz NOT IN
WHERE studiengang_kz= ".$this->db_add_param($stg_kz).") AND dokument_kurzbz NOT IN ('Zeugnis','DiplSupp','Bescheid') AND dokument_kurzbz NOT IN
(SELECT dokument_kurzbz FROM public.tbl_dokumentprestudent JOIN public.tbl_dokument USING(dokument_kurzbz)
WHERE prestudent_id=".$this->db_add_param($prestudent_id).")";
+2
View File
@@ -57,8 +57,10 @@ $this->phrasen['tools/ampelBitteBestaetigen']='Bitte bestätigen Sie diese jetzt
$this->phrasen['tools/ampelAbgelaufenTitel']='Abgelaufene oder bereits bestätigte Ampeln';
$this->phrasen['tools/ampelAbgelaufenTxt']='Sie können diese Ampeln weiterhin lesen, aber nicht mehr bestätigen.';
$this->phrasen['tools/ampelBestaetigtAbgelaufen']='Bereits bestätigt oder abgelaufen';
$this->phrasen['tools/ampelAktuelleAmpeln']='Aktuelle Ampeln';
$this->phrasen['tools/ampelKeineAktuellen']='Keine aktuellen Ampeln';
$this->phrasen['tools/ampelKeineAktuellenTxt']='Sie haben zur Zeit keine aktuellen Ampeln.';
$this->phrasen['tools/ampelClose']='Jetzt nicht';
//Software fuer Lehre -> Softgrid
$this->phrasen['tools/applikationsliste']='Applikationsliste';
+1
View File
@@ -59,6 +59,7 @@ $this->phrasen['tools/ampelBitteBestaetigen']='Please confirm now!';
$this->phrasen['tools/ampelAbgelaufenTitel']='Notifications expired or confirmed';
$this->phrasen['tools/ampelAbgelaufenTxt']='Notifications can still be read, but not confirmed anymore.';
$this->phrasen['tools/ampelBestaetigtAbgelaufen']='Almost confirmed or expired';
$this->phrasen['tools/ampelAktuelleAmpeln']='Actual notifications';
$this->phrasen['tools/ampelKeineAktuellen']='No current notifications.';
$this->phrasen['tools/ampelKeineAktuellenTxt']='You currently do not have any notifications.';
+1 -1
View File
@@ -48,7 +48,7 @@
float: left;
height: 50px;
padding-top: 15px;
padding-right: 12px;
padding-left: 7px;
font-size: 16px;
margin-right: 3px;
}
+6 -4
View File
@@ -11,6 +11,8 @@
/**
* Global function used by NavigationWidget JS to bind events to side menu elements
* NOTE: it is called from the NavigationWidget JS therefore must be a global function
* Be carefull about recursive function calls!!!
*/
function sideMenuHook()
{
@@ -32,10 +34,10 @@ function sideMenuHook()
}
else
{
// If a success and refreshSideMenu is a valid function then call it to refresh the side menu
if (typeof refreshSideMenu == "function")
// If a success and refreshSideMenuHook is a valid function then call it to refresh the side menu
if (typeof refreshSideMenuHook == "function")
{
refreshSideMenu();
refreshSideMenuHook();
}
}
}
@@ -493,7 +495,7 @@ var FHC_FilterWidget = {
filter_page: FHC_FilterWidget.getFilterPage()
},
{
successCallback: refreshSideMenu // NOTE: to be checked
successCallback: refreshSideMenuHook // NOTE: to be checked
}
);
}
+91 -49
View File
@@ -20,7 +20,8 @@ var FHC_NavigationWidget = {
* Renders the header menu (top horizontal menu)
*/
renderHeaderMenu: function() {
//
// Retrives the header menu array
FHC_AjaxClient.ajaxCallGet(
'system/Navigation/header',
{
@@ -28,24 +29,16 @@ var FHC_NavigationWidget = {
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var strHeaderMenu = '';
jQuery.each(FHC_AjaxClient.getData(data), function(i, e) {
var headerEntry = '';
if (e['icon'] != 'undefined' && e['icon'] != '')
{
headerEntry += '<i class="navbar-brand-icon fa fa-' + e['icon'] + ' fa-fw"></i>';
}
var target = '';
if (e['target'] != null) target = e['target'];
headerEntry += '<a class="navbar-brand" href="' + e['link'] + '" target=' + target + '>' + e['description'] + '</a>';
$(".menu-header-items").append(headerEntry);
if (e != null) strHeaderMenu += FHC_NavigationWidget._buildHeaderMenuStructure(e);
});
$(".menu-header-items").html(strHeaderMenu);
}
}
}
@@ -56,7 +49,8 @@ var FHC_NavigationWidget = {
* Renders the side left menu
*/
renderSideMenu: function() {
//
// Retrives the left menu array
FHC_AjaxClient.ajaxCallGet(
'system/Navigation/menu',
{
@@ -64,39 +58,67 @@ var FHC_NavigationWidget = {
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var strMenu = '';
FHC_NavigationWidget._printCollapseIcon(); // Applies bootstrap SB Admin 2 theme elements to the left menu
FHC_NavigationWidget._printCollapseIcon();
var strLeftMenu = '';
// Builds left menu
jQuery.each(FHC_AjaxClient.getData(data), function(i, e) {
if (e != null) strMenu += FHC_NavigationWidget._printNavItem(e);
if (e != null) strLeftMenu += FHC_NavigationWidget._buildLeftMenuStructure(e);
});
$("#side-menu").html(strMenu);
$("#side-menu").metisMenu();
$("#side-menu").html(strLeftMenu); // render left menu
$("#side-menu").metisMenu(); // call the Bootstrap SB Admin 2 theme renderer
}
// If this global function is present...
if (typeof sideMenuHook == 'function')
{
sideMenuHook();
sideMenuHook(); // ...then call it
}
}
}
);
},
/**
* Calls URL to retrive a refreshed menu array
*/
refreshSideMenuHook: function(url) {
FHC_AjaxClient.ajaxCallGet(
url,
{
navigation_page: FHC_NavigationWidget._getNavigationWidgetCalled()
},
{
successCallback: function(data, textStatus, jqXHR) {
FHC_NavigationWidget.renderSideMenu();
},
errorCallback: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
}
);
},
//------------------------------------------------------------------------------------------------------------------
// Private methods
/**
*
* Applies bootstrap SB Admin 2 theme elements to the left menu
*/
_printCollapseIcon: function() {
// Hiding/showing navigation menu - works only with sb admin 2 template!!
if(!$("#collapseicon").length)
$("#side-menu").parent().append('<div id="collapseicon" title="hide Menu" class="text-right" style="cursor: pointer; color: #337ab7"><i class="fa fa-angle-double-left fa-fw"></i></div>');
$("#side-menu").parent().append(
'<div id="collapseicon" title="hide Menu" class="text-right" style="cursor: pointer; color: #337ab7">' +
' <i class="fa fa-angle-double-left fa-fw"></i>' +
'</div>'
);
$("#collapseicon").click(function() {
$("#page-wrapper").css('margin-left', '0px');
@@ -114,48 +136,68 @@ var FHC_NavigationWidget = {
},
/**
*
* Recursively builds the header menu structure
*/
_printNavItem: function(item, depth = 1) {
_buildHeaderMenuStructure: function(item) {
strMenu = "";
var expanded = typeof item['expand'] != 'undefined' && item['expand'] === true ? ' active' : '';
var strHeaderMenu = '';
strMenu += '<li class="' + expanded + '">';
if (typeof item['subscriptLinkClass'] != 'undefined' && typeof item['subscriptDescription'] != 'undefined'
&& item['subscriptLinkClass'] != null && item['subscriptDescription'] != null)
if (item['icon'] != 'undefined' && item['icon'] != '')
{
strMenu += '<span>';
strHeaderMenu += '<i class="navbar-brand-icon fa fa-' + item['icon'] + ' fa-fw"></i>';
}
var target = '';
if (item['target'] != null) target = item['target'];
strMenu += '<a href="' + item['link'] + '"' + expanded + ' target="' + target + '">';
strHeaderMenu += '<a class="navbar-brand" href="' + item['link'] + '" target="' + target + '">' + item['description'] + '</a>';
return strHeaderMenu;
},
/**
* Recursively builds the left menu structure
*/
_buildLeftMenuStructure: function(item, depth = 1) {
strLeftMenu = "";
var expanded = item['expand'] != null && item['expand'] === true ? ' active' : '';
strLeftMenu += '<li class="' + expanded + '">';
if (item['subscriptLinkClass'] != null && item['subscriptDescription'] != null)
{
strLeftMenu += '<span>';
}
var target = '';
if (item['target'] != null) target = item['target'];
strLeftMenu += '<a href="' + item['link'] + '"' + expanded + ' target="' + target + '">';
if (item['icon'] != 'undefined')
{
strMenu += '<i class="fa fa-' + item['icon'] + ' fa-fw"></i> ';
strLeftMenu += '<i class="fa fa-' + item['icon'] + ' fa-fw"></i> ';
}
strMenu += item['description'];
strLeftMenu += item['description'];
if (typeof item['children'] != 'undefined' && Object.keys(item['children']).length > 0)
if (item['children'] != null && Object.keys(item['children']).length > 0)
{
strMenu += '<span class="fa arrow"></span>';
strLeftMenu += '<span class="fa arrow"></span>';
}
strMenu += '</a>';
strLeftMenu += '</a>';
if (typeof item['subscriptLinkClass'] != 'undefined' && typeof item['subscriptDescription'] != 'undefined'
&& item['subscriptLinkClass'] != null && item['subscriptDescription'] != null)
if (item['subscriptLinkClass'] != null && item['subscriptDescription'] != null)
{
strMenu += '<a class="' + item['subscriptLinkClass'] + ' menuSubscriptLink" value="' + item['subscriptLinkValue'] + '" href="#"> (' + item['subscriptDescription'] + ')</a>';
strMenu += '</span>';
strLeftMenu += '<a class="' + item['subscriptLinkClass'] + ' menuSubscriptLink" value="' + item['subscriptLinkValue'] + '" href="#">' +
' (' + item['subscriptDescription'] + ')' +
'</a>';
strLeftMenu += '</span>';
}
if (typeof item['children'] != 'undefined' && Object.keys(item['children']).length > 0)
if (item['children'] != null && Object.keys(item['children']).length > 0)
{
var level = '';
if (depth === 1)
@@ -167,18 +209,18 @@ var FHC_NavigationWidget = {
level = 'third';
}
strMenu += '<ul class="nav nav-' + level + '-level" ' + expanded + '>';
strLeftMenu += '<ul class="nav nav-' + level + '-level" ' + expanded + '>';
jQuery.each(item['children'], function(i, e) {
if (e != null) strMenu += FHC_NavigationWidget._printNavItem(e, ++depth);
if (e != null) strLeftMenu += FHC_NavigationWidget._buildLeftMenuStructure(e, ++depth);
});
strMenu += '</ul>';
strLeftMenu += '</ul>';
}
strMenu += '</li>';
strLeftMenu += '</li>';
return strMenu;
return strLeftMenu;
},
/**
@@ -3,26 +3,12 @@
*/
/**
* Refreshes the side menu
* NOTE: it is called from the FilterWidget therefore must be a global function
* Global function used by FilterWidget JS to refresh the side menu
* NOTE: it is called from the FilterWidget JS therefore must be a global function
*/
function refreshSideMenu()
function refreshSideMenuHook()
{
//
FHC_AjaxClient.ajaxCallGet(
'system/infocenter/InfoCenter/setNavigationMenuArrayJson',
{
navigation_page: FHC_NavigationWidget._getNavigationWidgetCalled()
},
{
successCallback: function(data, textStatus, jqXHR) {
FHC_NavigationWidget.renderSideMenu();
},
errorCallback: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
}
);
FHC_NavigationWidget.refreshSideMenuHook('system/infocenter/InfoCenter/setNavigationMenuArrayJson');
}
/**
Binary file not shown.

After

Width:  |  Height:  |  Size: 782 KiB

+3 -2
View File
@@ -46,8 +46,9 @@ tr.liste1
background-color: #EFEFDD;
}
table.tablesorter tr:hover td {
background-color: rgb(226, 255, 226) !important;
table.tablesorter tr:hover td
{
background-color: #DCE4EF !important;
}
td.button
+1 -1
View File
@@ -149,7 +149,7 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
<style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
</style:page-layout-properties>
<style:header-style>
<style:header-footer-properties fo:min-height="2.801cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="2.501cm" fo:background-color="transparent" style:dynamic-spacing="false" draw:fill="none"/>
<style:header-footer-properties fo:min-height="2.801cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="2.001cm" fo:background-color="transparent" style:dynamic-spacing="false" draw:fill="none"/>
</style:header-style>
<style:footer-style/>
</style:page-layout>
+5 -5
View File
@@ -45,11 +45,11 @@ $datum_obj = new datum();
<title>Ampel - Details</title>
<link rel="stylesheet" href="../../skin/fhcomplete.css" type="text/css">
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
<link rel="stylesheet" href="../../vendor/fortawesome/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../../skin/jquery-ui-1.9.2.custom.min.css" type="text/css">
<script type="text/javascript" src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<link rel="stylesheet" href="../../vendor/components/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../../vendor/components/jqueryui/themes/base/jquery-ui.min.css">
<script type="text/javascript" src="../../vendor/components/jquery/jquery.min.js"></script>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../vendor/twbs/bootstrap/dist/js/bootstrap.min.js"></script>
<script type="text/javascript" src="../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript">
@@ -180,7 +180,7 @@ $datum_obj = new datum();
<td>Deadline&nbsp
<i class="fa fa-info-circle fa-lg" aria-hidden="true" data-toggle="tooltip" data-placement="left" title="Die Deadline gibt den Tag an, ab dem die Ampel von gelb auf rot gesetzt wird."></i>
</td>
<td><input type="date" name="deadline" size="10" maxlength="10" value="'.htmlspecialchars($datum_obj->formatDatum($ampel->deadline,'Y-m-d')).'" required></td>
<td><input type="text" class="datepicker_datum" name="deadline" size="10" maxlength="10" value="'.htmlspecialchars($datum_obj->formatDatum($ampel->deadline,'Y-m-d')).'" required></td>
</tr>
<tr valign="top">
<td rowspan="3">Benutzer Select</td>