diff --git a/application/controllers/jobs/IssueResolver.php b/application/controllers/jobs/IssueResolver.php new file mode 100755 index 000000000..17c4cb9ce --- /dev/null +++ b/application/controllers/jobs/IssueResolver.php @@ -0,0 +1,28 @@ + class (library) name for resolving + $this->_codeLibMappings = array( + 'CORE_ZGV_0001' => 'CORE_ZGV_0001', + 'CORE_ZGV_0002' => 'CORE_ZGV_0002', + 'CORE_ZGV_0003' => 'CORE_ZGV_0003', + 'CORE_ZGV_0004' => 'CORE_ZGV_0004', + 'CORE_ZGV_0005' => 'CORE_ZGV_0005', + 'CORE_INOUT_0001' => 'CORE_INOUT_0001', + 'CORE_INOUT_0002' => 'CORE_INOUT_0002', + 'CORE_INOUT_0003' => 'CORE_INOUT_0003', + 'CORE_INOUT_0004' => 'CORE_INOUT_0004', + 'CORE_INOUT_0005' => 'CORE_INOUT_0005', + 'CORE_INOUT_0006' => 'CORE_INOUT_0006' + ); + } +} diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index 8e1b601aa..28edf4824 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -22,8 +22,8 @@ class approveAnrechnungDetail extends Auth_Controller // Set required permissions parent::__construct( array( - 'index' => 'lehre/anrechnung_genehmigen:rw', - 'download' => 'lehre/anrechnung_genehmigen:rw', + 'index' => 'lehre/anrechnung_genehmigen:r', + 'download' => 'lehre/anrechnung_genehmigen:r', 'approve' => 'lehre/anrechnung_genehmigen:rw', 'reject' => 'lehre/anrechnung_genehmigen:rw', 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw', @@ -81,7 +81,7 @@ class approveAnrechnungDetail extends Auth_Controller } // Check if user is entitled to read the Anrechnung - self::_checkIfEntitledToReadAnrechnung($anrechnung_id); + $this->_checkIfEntitledToReadAnrechnung($anrechnung_id); // Get Anrechung data $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); @@ -99,11 +99,16 @@ class approveAnrechnungDetail extends Auth_Controller // Get Genehmigung data $genehmigungData = $this->anrechnunglib->getGenehmigungData($anrechnung_id); + $hasReadOnlyAccess = + $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $antragData->studiengang_kz) + && !$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid', $antragData->studiengang_kz); + $viewData = array( 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, 'empfehlungData' => $empfehlungData, - 'genehmigungData' => $genehmigungData + 'genehmigungData' => $genehmigungData, + 'hasReadOnlyAccess' => $hasReadOnlyAccess ); $this->load->view('lehre/anrechnung/approveAnrechnungDetail.php', $viewData); @@ -385,7 +390,7 @@ class approveAnrechnungDetail extends Auth_Controller } // Check if user is entitled to read dms doc - self::_checkIfEntitledToReadDMSDoc($dms_id); + $this->_checkIfEntitledToReadDMSDoc($dms_id); // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); @@ -421,26 +426,13 @@ class approveAnrechnungDetail extends Auth_Controller 'lehrveranstaltung_id' => getData($result)[0]->lehrveranstaltung_id )); - if(!hasData($result)) - { - show_error('Failed loading Lehrveranstaltung'); - } + $studiengang_kz = getData($result)[0]->studiengang_kz; - // Get STGL - $result = $this->StudiengangModel->getLeitung(getData($result)[0]->studiengang_kz); - - if (hasData($result)) - { - foreach (getData($result) as $stgl) - { - if ($stgl->uid == $this->_uid) - { - return; - } - } - } - - show_error('You are not entitled to read this Anrechnung'); + // Check if user is entitled + if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $studiengang_kz)) + { + show_error('You are not entitled to read this page'); + } } /** @@ -460,23 +452,13 @@ class approveAnrechnungDetail extends Auth_Controller 'lehrveranstaltung_id' => $result->lehrveranstaltung_id )); - if(!$result = getData($result)[0]) - { - show_error('Failed loading Lehrveranstaltung'); - } + $studiengang_kz = getData($result)[0]->studiengang_kz; - // Get STGL - $result = $this->StudiengangModel->getLeitung($result->studiengang_kz); - - if($result = getData($result)[0]) - { - if ($result->uid == $this->_uid) - { - return; - } - } - - show_error('You are not entitled to read this document'); + // Check if user is entitled + if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $studiengang_kz)) + { + show_error('You are not entitled to read this document'); + } } /** diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php index 25c802caf..053988848 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungUebersicht.php @@ -5,7 +5,8 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class approveAnrechnungUebersicht extends Auth_Controller { const BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN = 'lehre/anrechnung_genehmigen'; - + const BERECHTIGUNG_ANRECHNUNG_ANLEGEN = 'lehre/anrechnung_anlegen'; + const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht'; const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP'; @@ -19,8 +20,8 @@ class approveAnrechnungUebersicht extends Auth_Controller // Set required permissions parent::__construct( array( - 'index' => 'lehre/anrechnung_genehmigen:rw', - 'download' => 'lehre/anrechnung_genehmigen:rw', + 'index' => 'lehre/anrechnung_genehmigen:r', + 'download' => 'lehre/anrechnung_genehmigen:r', 'approve' => 'lehre/anrechnung_genehmigen:rw', 'reject' => 'lehre/anrechnung_genehmigen:rw', 'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw' @@ -76,10 +77,19 @@ class approveAnrechnungUebersicht extends Auth_Controller { show_error(getError($studiengang_kz_arr)); } - + + $hasReadOnlyAccess = + $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's') + && !$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid'); + + // This permission is checked here to disable create Anrechnung button, if permission is not given + $hasCreateAnrechnungAccess = $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN, 's'); + $viewData = array( 'studiensemester_selected' => $studiensemester_kurzbz, - 'studiengaenge_entitled' => $studiengang_kz_arr + 'studiengaenge_entitled' => $studiengang_kz_arr, + 'hasReadOnlyAccess' => $hasReadOnlyAccess, + 'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess ); $this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData); @@ -239,7 +249,7 @@ class approveAnrechnungUebersicht extends Auth_Controller } // Check if user is entitled to read dms doc - self::_checkIfEntitledToReadDMSDoc($dms_id); + $this->_checkIfEntitledToReadDMSDoc($dms_id); // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); @@ -281,22 +291,14 @@ class approveAnrechnungUebersicht extends Auth_Controller { show_error('Failed loading Lehrveranstaltung'); } + + $studiengang_kz = $result->studiengang_kz; - // Get STGL - $result = $this->StudiengangModel->getLeitung($result->studiengang_kz); - - if (hasData($result)) - { - foreach (getData($result) as $stgl) - { - if ($stgl->uid == $this->_uid) - { - return; - } - } - } - - show_error('You are not entitled to read this document'); + // Check if user is entitled + if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's', $studiengang_kz)) + { + show_error('You are not entitled to read this document'); + } } /** diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php index 78175f4e6..7981f0ac8 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungDetail.php @@ -79,7 +79,7 @@ class reviewAnrechnungDetail extends Auth_Controller // Get Anrechung data $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); - + // Get Antrag data $antragData = $this->anrechnunglib->getAntragData( $anrechnungData->prestudent_id, @@ -110,7 +110,7 @@ class reviewAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + // Get lectors person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { @@ -218,10 +218,10 @@ class reviewAnrechnungDetail extends Auth_Controller // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - + // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); - + // Download file $this->dmslib->download($dms_id, $filename); } @@ -320,7 +320,12 @@ class reviewAnrechnungDetail extends Auth_Controller foreach ($studiengang_kz_arr as $studiengang_kz) { // Get STGL mail address, if available, otherwise get assistance mail address - list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz); + $stgmail = $this->_getSTGLMailAddress($studiengang_kz); + + if(isSuccess($stgmail) && hasData($stgmail)) + list ($to, $vorname) = getData($stgmail)[0]; + else + show_error ('Failed retrieving DegreeProgram Mail'); // Get full name of lector $this->load->model('person/Person_model', 'PersonModel'); @@ -361,24 +366,28 @@ class reviewAnrechnungDetail extends Auth_Controller $result = $this->StudiengangModel->getLeitung($stg_kz); // Get STGL mail address, if available - if (hasData($result)) + if (isSuccess($result) && hasData($result)) { - return array( + return success(array( $result->retval[0]->uid. '@'. DOMAIN, $result->retval[0]->vorname - ); + )); } // ...otherwise get assistance mail address else { $result = $this->StudiengangModel->load($stg_kz); - if (hasData($result)) + if (isSuccess($result) && hasData($result)) { - return array( + return success(array( $result->retval[0]->email, '' - ); + )); + } + else + { + return error('Keine E-Mail für diesen Stg gefunden'); } } } diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php index cd0b7afaf..e5475d0d0 100644 --- a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php @@ -5,15 +5,15 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class reviewAnrechnungUebersicht extends Auth_Controller { const BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN = 'lehre/anrechnung_empfehlen'; - + const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht'; - + const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP'; const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF'; const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor'; const ANRECHNUNGSTATUS_APPROVED = 'approved'; const ANRECHNUNGSTATUS_REJECTED = 'rejected'; - + public function __construct() { // Set required permissions @@ -25,24 +25,24 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'dontRecommend' => 'lehre/anrechnung_empfehlen:rw' ) ); - + // Load models $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); $this->load->model('content/DmsVersion_model', 'DmsVersionModel'); $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); - + // Load libraries $this->load->library('WidgetLib'); $this->load->library('PermissionLib'); $this->load->library('AnrechnungLib'); $this->load->library('DmsLib'); - + // Load helpers $this->load->helper('form'); $this->load->helper('url'); $this->load->helper('hlp_sancho_helper'); - + // Load language phrases $this->loadPhrases( array( @@ -54,12 +54,12 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'table' ) ); - + $this->_setAuthUID(); - + $this->setControllerId(); } - + public function index() { // Get study semester @@ -70,14 +70,14 @@ class reviewAnrechnungUebersicht extends Auth_Controller $result = $this->StudiensemesterModel->getNearest(); $studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz; } - + $viewData = array( 'studiensemester_selected' => $studiensemester_kurzbz ); - + $this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData); } - + /** * Recommend Anrechnungen. */ @@ -103,7 +103,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller ); } } - + // Output json to ajax if (isset($json) && !isEmptyArray($json)) { @@ -123,19 +123,19 @@ class reviewAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } - + /** * Dont recommend Anrechnungen. */ public function dontRecommend() { $data = $this->input->post('data'); - + if(isEmptyArray($data)) { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + foreach ($data as $item) { // Approve Anrechnung @@ -149,7 +149,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller ); } } - + // Output json to ajax if (isset($json) && !isEmptyArray($json)) { @@ -158,7 +158,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller { show_error('Failed sending emails'); } - + return $this->outputJsonSuccess($json); } else @@ -166,7 +166,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } } - + /** * Download and open uploaded document (Nachweisdokument). */ @@ -178,28 +178,28 @@ class reviewAnrechnungUebersicht extends Auth_Controller { show_error('Wrong parameter'); } - + // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - + // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); - + // Download file $this->dmslib->download($dms_id, $filename); } - - + + /** * Retrieve the UID of the logged user and checks if it is valid */ private function _setAuthUID() { $this->_uid = getAuthUID(); - + if (!$this->_uid) show_error('User authentification failed'); } - + /** * Check if user is entitled to read dms doc * @param $dms_id @@ -207,15 +207,15 @@ class reviewAnrechnungUebersicht extends Auth_Controller private function _checkIfEntitledToReadDMSDoc($dms_id) { $result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id)); - + if(!$result = getData($result)[0]) { show_error('Failed retrieving Anrechnung'); } - + $result = $this->LehrveranstaltungModel ->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id); - + if($result = getData($result)) { $entitled_lector_arr = array_column($result, 'uid'); @@ -225,10 +225,10 @@ class reviewAnrechnungUebersicht extends Auth_Controller return; } } - + show_error('You are not entitled to read this document'); } - + /** * Send mails to STGL (if not present then to STGL assistance) * @param $mail_params @@ -239,36 +239,41 @@ class reviewAnrechnungUebersicht extends Auth_Controller { // Get studiengaenge $studiengang_kz_arr = array(); - + foreach ($mail_params as $item) { $this->AnrechnungModel->addSelect('studiengang_kz'); $this->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id'); - + $studiengang_kz_arr[]= $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiengang_kz; } - + $studiengang_kz_arr = array_unique($studiengang_kz_arr); - + // Send mail to STGL of each studiengang foreach ($studiengang_kz_arr as $studiengang_kz) { // Get STGL mail address, if available, otherwise get assistance mail address - list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz); - + $stgmail = $this->_getSTGLMailAddress($studiengang_kz); + + if(isSuccess($stgmail) && hasData($stgmail)) + list ($to, $vorname) = getData($stgmail)[0]; + else + show_error ('Failed retrieving DegreeProgram Mail'); + // Get full name of lector $this->load->model('person/Person_model', 'PersonModel'); if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid))) { show_error ('Failed retrieving person'); } - + // Link to Antrag genehmigen $url = CIS_ROOT. 'cis/index.php?menu='. CIS_ROOT. 'cis/menu.php?content_id=&content='. CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; - + // Prepare mail content $body_fields = array( 'vorname' => $vorname, @@ -276,7 +281,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'empfehlung' => $empfehlung ? 'positive' : 'negative', 'link' => anchor($url, 'Anrechnungsanträge Übersicht') ); - + sendSanchoMail( 'AnrechnungEmpfehlungAbgeben', $body_fields, @@ -284,37 +289,41 @@ class reviewAnrechnungUebersicht extends Auth_Controller 'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben' ); } - + return true; } - + // Get STGL mail address, if available, otherwise get assistance mail address private function _getSTGLMailAddress($stg_kz) { $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); $result = $this->StudiengangModel->getLeitung($stg_kz); - + // Get STGL mail address, if available - if (hasData($result)) + if (isSuccess($result) && hasData($result)) { - return array( + return success(array( $result->retval[0]->uid. '@'. DOMAIN, $result->retval[0]->vorname - ); + )); } // ...otherwise get assistance mail address else { $result = $this->StudiengangModel->load($stg_kz); - - if (hasData($result)) + + if (isSuccess($result) && hasData($result)) { - return array( + return success(array( $result->retval[0]->email, '' - ); + )); + } + else + { + return error('Keine E-Mail für diesen Stg gefunden'); } } } - -} \ No newline at end of file + +} diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index a69a43220..25ee96b60 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -560,8 +560,10 @@ class InfoCenter extends Auth_Controller /** * Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang */ - private function sendZgvMail($mail, $typ){ + private function sendZgvMail($mail, $typ, $person){ $data = array( + 'vorname' => $person->vorname, + 'nachname' => $person->nachname, 'link' => site_url('system/infocenter/ZGVUeberpruefung') ); @@ -657,6 +659,16 @@ class InfoCenter extends Auth_Controller if (isEmptyString($prestudent_id) || isEmptyString($person_id)) $this->terminateWithJsonError('Prestudentid OR/AND Personid missing'); + $person = $this->PersonModel->load($person_id); + + if (isError($person)) + $this->terminateWithJsonError(getError($person)); + + if (!hasData($person)) + $this->terminateWithJsonError('Person existiert nicht.'); + + $person = getData($person)[0]; + $zgv = $this->ZGVPruefungStatusModel->getZgvStatusByPrestudent($prestudent_id); $data = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); @@ -688,7 +700,7 @@ class InfoCenter extends Auth_Controller $this->_log($person_id, 'updatezgv', array($zgv[0]->zgvpruefung_id, 'pruefung_stg')); if (isSuccess($insert)) - $this->sendZgvMail($mail, $typ); + $this->sendZgvMail($mail, $typ, $person); elseif (isError($insert)) $this->terminateWithJsonError('Fehler beim Speichern'); }else @@ -714,7 +726,7 @@ class InfoCenter extends Auth_Controller $this->_log($person_id, 'newzgv', array($zgvpruefung_id)); if (isSuccess($result)) - $this->sendZgvMail($mail, $typ); + $this->sendZgvMail($mail, $typ, $person); elseif (isError($result)) $this->terminateWithJsonError('Fehler beim Speichern'); } @@ -1708,9 +1720,15 @@ class InfoCenter extends Auth_Controller if (isset($locked->retval[0]->uid)) { - $lockedby = $locked->retval[0]->uid; - if ($lockedby !== $this->_uid) + if (!$lockedby = getData($this->PersonModel->getFullName($locked->retval[0]->uid))) + { + show_error('Failed retrieving person'); + } + + if ($locked->retval[0]->uid !== $this->_uid) + { $lockedbyother = true; + } } $stammdaten = $this->PersonModel->getPersonStammdaten($person_id, true); diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php index e9764fb63..e0103cfec 100644 --- a/application/controllers/system/issues/Issues.php +++ b/application/controllers/system/issues/Issues.php @@ -58,21 +58,42 @@ class Issues extends Auth_Controller { $issue_ids = $this->input->post('issue_ids'); $status_kurzbz = $this->input->post('status_kurzbz'); - $verarbeitetvon = $this->_uid; + $user = $this->_uid; $errors = array(); foreach ($issue_ids as $issue_id) { - $issueRes = $this->issueslib->changeIssueStatus($issue_id, $status_kurzbz, $verarbeitetvon); + switch ($status_kurzbz) + { + case IssuesLib::STATUS_NEU: + $changeIssueMethod = 'setNeu'; + break; + case IssuesLib::STATUS_IN_BEARBEITUNG: + $changeIssueMethod = 'setInBearbeitung'; + break; + case IssuesLib::STATUS_BEHOBEN: + $changeIssueMethod = 'setBehoben'; + break; + default: + $changeIssueMethod = null; + break; + } - if (isError($issueRes)) - $errors[] = getError($issueRes); + if (isEmptyString($changeIssueMethod)) + $errors[] = error("Invalid issue status given"); + else + { + $issueRes = $this->issueslib->{$changeIssueMethod}($issue_id, $user); + + if (isError($issueRes)) + $errors[] = getError($issueRes); + } } if (!isEmptyArray($errors)) $this->outputJsonError(implode(", ", $errors)); else - $this->outputJsonSuccess("Status erfolgreich aktualisiert"); + $this->outputJsonSuccess("Status successfully refreshed"); } /** @@ -133,7 +154,7 @@ class Issues extends Auth_Controller // add oes for which there is the "manage issues" Berechtigung if (!$oe_kurzbz_berechtigt = $this->permissionlib->getOE_isEntitledFor(self::BERECHTIGUNG_KURZBZ)) - show_error('Keine Berechtigung oder Fehler bei Berechtigungsprüfung'); + show_error('No permission or error when checking permissions'); $all_oe_kurzbz_berechtigt = array_unique(array_merge($oe_kurzbz_for_funktion, $oe_kurzbz_berechtigt)); diff --git a/application/core/IIssueResolvedChecker.php b/application/core/IIssueResolvedChecker.php new file mode 100644 index 000000000..82da67ff7 --- /dev/null +++ b/application/core/IIssueResolvedChecker.php @@ -0,0 +1,15 @@ +load->model('system/Issue_model', 'IssueModel'); + + $this->load->library('IssuesLib'); + } + + /** + * Initializes issue resolution. + */ + public function run() + { + $this->logInfo("Issue resolve job started"); + + // load open issues with given errorcodes + $openIssuesRes = $this->IssueModel->getOpenIssues(array_keys($this->_codeLibMappings)); + + // log error if occured + if (isError($openIssuesRes)) + { + $this->logError(getError($openIssuesRes)); + } + else + { + // log info if no data found + if (!hasData($openIssuesRes)) + { + $this->logInfo("No open issues found"); + } + else + { + + $openIssues = getData($openIssuesRes); + + foreach ($openIssues as $issue) + { + if (isset($this->_codeLibMappings[$issue->fehlercode])) + { + $libName = $this->_codeLibMappings[$issue->fehlercode]; + + // add person id and oe kurzbz automatically as params, merge it with additional params + // decode bewerbung_parameter into assoc array + $params = array_merge( + array('issue_id' => $issue->issue_id, 'issue_person_id' => $issue->person_id, 'issue_oe_kurzbz' => $issue->oe_kurzbz), + isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array() + ); + + // if called from extension (extension name set), path includes extension names, otherwise it is the core library folder + $libRootPath = isset($this->_extensionName) ? 'extensions/' . $this->_extensionName . '/' : ''; + $issuesLibPath = $libRootPath . self::ISSUES_FOLDER . '/'; + $issuesLibFilePath = DOC_ROOT . 'application/' . $libRootPath . 'libraries/' . self::ISSUES_FOLDER . '/' . $libName . '.php'; + + // check if library file exists + if (!file_exists($issuesLibFilePath)) + { + // log error and continue with next issue if not + $this->logError("Issue library file " . $issuesLibFilePath . " does not exist"); + continue; + } + + // load library connected to fehlercode + $this->load->library( + $issuesLibPath . $libName + ); + + $lowercaseLibName = mb_strtolower($libName); + + // check if method is defined in libary class + if (!is_callable(array($this->{$lowercaseLibName}, self::CHECK_ISSUE_RESOLVED_METHOD_NAME))) + { + // log error and continue with next issue if not + $this->logError("Method " . self::CHECK_ISSUE_RESOLVED_METHOD_NAME . " is not defined in library $lowercaseLibName"); + continue; + } + + // call the function for checking for issue resolution + $issueResolvedRes = $this->{$lowercaseLibName}->{self::CHECK_ISSUE_RESOLVED_METHOD_NAME}($params); + + if (isError($issueResolvedRes)) + { + $this->logError(getError($issueResolvedRes)); + } + else + { + $issueResolvedData = getData($issueResolvedRes); + + if ($issueResolvedData === true) + { + // set issue to resolved if needed + $behobenRes = $this->issueslib->setBehoben($issue->issue_id, null); + + if (isError($behobenRes)) + $this->logError(getError($behobenRes)); + else + $this->logInfo("Issue " . $issue->issue_id . " successfully resolved"); + } + } + } + } + } + } + + $this->logInfo("Issue resolve job ended"); + } +} diff --git a/application/helpers/hlp_header_helper.php b/application/helpers/hlp_header_helper.php index f8bbb9ad2..203834ebb 100644 --- a/application/helpers/hlp_header_helper.php +++ b/application/helpers/hlp_header_helper.php @@ -39,6 +39,24 @@ function printPageTitle($title) } } +/** + * Print the meta tag http-equiv refresh having as content the value of the given parameter + */ +function printRefreshMeta($refresh) +{ + if ($refresh != null) + { + if (is_numeric($refresh) && $refresh > 0) + { + echo ''; + } + else + { + show_error('The provided refresh parameter has to be a number greater then 0'); + } + } +} + /** * Generates tags for the style sheets you want to include, the parameter could by a string or an array of strings */ diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 3bec62dce..ee197ab05 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -89,6 +89,7 @@ class AnrechnungLib $antrag_data->vorname = $person->vorname; $antrag_data->nachname = $person->nachname; $antrag_data->matrikelnr = $student->matrikelnr; + $antrag_data->studiengang_kz = $studiengang->studiengang_kz; $antrag_data->stg_bezeichnung = $studiengang->bezeichnung; $antrag_data->lektoren = $lv_lektoren_arr; $antrag_data->zgv = $latest_zgv_bezeichnung; diff --git a/application/libraries/IssuesLib.php b/application/libraries/IssuesLib.php index 1b06db333..d6488bc36 100644 --- a/application/libraries/IssuesLib.php +++ b/application/libraries/IssuesLib.php @@ -62,17 +62,17 @@ class IssuesLib * @param array $fehlertext_params params for sprint replace of error text in system.tbl_fehler * @return object success or error */ - public function addFhcIssue($fehler_kurzbz, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null) + public function addFhcIssue($fehler_kurzbz, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $resolution_params = null) { $fehlerRes = $this->_ci->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz)); if (hasData($fehlerRes)) { $fehlercode = getData($fehlerRes)[0]->fehlercode; - return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params); + return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params); } else - return error("Fehler $fehler_kurzbz nicht gefunden"); + return error("Error $fehler_kurzbz not found"); } /** @@ -82,13 +82,13 @@ class IssuesLib * @param int $person_id * @param int $oe_kurzbz * @param array $fehlertext_params params for replacement of parts of error text - * @param bool $force_predefined if true, only predefined external issues are added + * @param bool $force_predefined if true, only predefined (with entry in fehler table) external issues are added * @return object success or error */ - public function addExternalIssue($fehlercode_extern, $inhalt_extern, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $force_predefined = false) + public function addExternalIssue($fehlercode_extern, $inhalt_extern, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null) { if (isEmptyString($fehlercode_extern)) - return error("fehlercode_extern fehlt"); + return error("fehlercode_extern missing"); // get external fehlercode (unique for each app) $this->_ci->FehlerModel->addSelect('fehlercode'); @@ -102,19 +102,13 @@ class IssuesLib if (isError($fehlerRes)) return $fehlerRes; - $fehlerData = getData($fehlerRes)[0]; - // check if there is a predefined custom error for the external issue if (hasData($fehlerRes)) { + $fehlerData = getData($fehlerRes)[0]; // if found, use the code $fehlercode = $fehlerData->fehlercode; } - elseif ($force_predefined === true) - { - // only added if predefined - return success("No definition found - not added"); - } else { // if predefined error is not found, insert with fallback code @@ -122,20 +116,70 @@ class IssuesLib } // add external issue - return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params, $fehlercode_extern, $inhalt_extern); + return $this->_addIssue($fehlercode, $person_id, $oe_kurzbz, $fehlertext_params, null, $fehlercode_extern, $inhalt_extern); + } + + /** + * Set issue to resolved. + * @param int $issue_id + * @param string $user uid of issue resolver + * @return object success or error + */ + public function setBehoben($issue_id, $user) + { + $data = array( + 'status_kurzbz' => self::STATUS_BEHOBEN, + 'verarbeitetvon' => $user, + 'verarbeitetamum' => date('Y-m-d H:i:s') + ); + + return $this->_changeIssueStatus($issue_id, $data, $user); + } + + /** + * Set issue to in progress. + * @param int $issue_id + * @param string $user uid of issue resovler + * @return object success or error + */ + public function setInBearbeitung($issue_id, $user) + { + $data = array( + 'status_kurzbz' => self::STATUS_IN_BEARBEITUNG, + 'verarbeitetvon' => $user + ); + + return $this->_changeIssueStatus($issue_id, $data, $user); + } + + /** + * Set issue to new. + * @param int $issue_id + * @param string $user uid of issue resolver + * @return object success or error + */ + public function setNeu($issue_id, $user) + { + $data = array( + 'status_kurzbz' => self::STATUS_NEU, + 'verarbeitetvon' => null, + 'verarbeitetamum' => null + ); + + return $this->_changeIssueStatus($issue_id, $data, $user); } /** * Changes status of an issue. * @param int $issue_id - * @param string $status_kurzbz the new status - * @param string $verarbeitetvon uid of person changing the status (needed for in Bearbeitung and behoben) + * @param array $sdata the data to save, including status + * @param string $user uid of person changing the status (needed for in Bearbeitung and behoben) * @return success or error */ - public function changeIssueStatus($issue_id, $status_kurzbz, $verarbeitetvon = null) + private function _changeIssueStatus($issue_id, $data, $user) { if (!isset($issue_id) || !is_numeric($issue_id)) - return error("Issue Id muss korrekt gesetzt sein."); + return error("Issue Id must be set correctly."); // check if given status is same as existing $this->_ci->IssueModel->addSelect('status_kurzbz'); @@ -143,39 +187,14 @@ class IssuesLib if (hasData($currStatus)) { - if (getData($currStatus)[0]->status_kurzbz == $status_kurzbz) - return success("Gleicher Status bereits gesetzt"); + if (getData($currStatus)[0]->status_kurzbz == $data['status_kurzbz']) + return success("Same status already set"); } else - return error("Fehler beim Holen des Status"); + return error("Error when getting status"); - $data = array( - 'status_kurzbz' => $status_kurzbz, - 'updatevon' => $verarbeitetvon, - 'updateamum' => date('Y-m-d H:i:s') - ); - - if ($status_kurzbz == self::STATUS_NEU) - { - - $data['verarbeitetvon'] = null; - } - - if ($status_kurzbz == self::STATUS_NEU || $status_kurzbz == self::STATUS_IN_BEARBEITUNG) - { - $data['verarbeitetamum'] = null; - } - - if ($status_kurzbz == self::STATUS_IN_BEARBEITUNG || $status_kurzbz == self::STATUS_BEHOBEN) - { - if (isset($verarbeitetvon)) - $data['verarbeitetvon'] = $verarbeitetvon; - else - return error("Verarbeitetvon nicht gesetzt"); - } - - if ($status_kurzbz == self::STATUS_BEHOBEN) - $data['verarbeitetamum'] = date('Y-m-d H:i:s'); + $data['updatevon'] = $user; + $data['updateamum'] = date('Y-m-d H:i:s'); return $this->_ci->IssueModel->update( array( @@ -191,14 +210,15 @@ class IssuesLib * @param int $person_id * @param string $oe_kurzbz * @param array $fehlertext_params + * @param string $resolution_params * @param string $fehlercode_extern * @param string $inhalt_extern * @return object success or error */ - private function _addIssue($fehlercode, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $fehlercode_extern = null, $inhalt_extern = null) + private function _addIssue($fehlercode, $person_id = null, $oe_kurzbz = null, $fehlertext_params = null, $resolution_params = null, $fehlercode_extern = null, $inhalt_extern = null) { if (isEmptyString($person_id) && isEmptyString($oe_kurzbz)) - return error("Person_id oder oe_kurzbz muss gesetzt sein."); + return error("Person_id or oe_kurzbz must be set."); // get fehlertextVorlage and replace it with params $fehlerRes = $this->_ci->FehlerModel->load($fehlercode); @@ -218,6 +238,20 @@ class IssuesLib if ($openIssueCount == 0) { + if (isset($resolution_params)) + { + if (is_array($resolution_params)) + { + foreach ($resolution_params as $resolution_key => $resolution_param) + { + if (!is_string($resolution_key)) + return error("Invalid parameter for resolution, must be an associative array"); + } + } + else + return error("Invalid parameters for resolution"); + } + return $this->_ci->IssueModel->insert( array( 'fehlercode' => $fehlercode, @@ -228,6 +262,7 @@ class IssuesLib 'oe_kurzbz' => $oe_kurzbz, 'datum' => date('Y-m-d H:i:s'), 'status_kurzbz' => self::STATUS_NEU, + 'behebung_parameter' => isset($resolution_params) ? json_encode($resolution_params) : null, 'insertvon' => $this->_insertvon ) ); @@ -236,9 +271,9 @@ class IssuesLib return success($openIssueCount); } else - return error("Anzahl offener Issues konnte nicht ermittelt werden."); + return error("Number of open issues could not be determined"); } else - return error("Fehler $fehlercode nicht gefunden"); + return error("Error $fehlercode could not be found"); } } diff --git a/application/libraries/issues/CORE_INOUT_0001.php b/application/libraries/issues/CORE_INOUT_0001.php new file mode 100644 index 000000000..d62c73f9e --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0001.php @@ -0,0 +1,31 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisiozweck_model', 'BisiozweckModel'); + + // get all bisio Zwecke + $this->_ci->BisiozweckModel->addSelect('1'); + $bisiozweckRes = $this->_ci->BisiozweckModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisiozweckRes)) + return $bisiozweckRes; + + if (hasData($bisiozweckRes)) + return success(true); // resolved if bisio Zweck exists + else + return success(false); // not resolved if no bisio zweck + } +} diff --git a/application/libraries/issues/CORE_INOUT_0002.php b/application/libraries/issues/CORE_INOUT_0002.php new file mode 100644 index 000000000..9868ccd25 --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0002.php @@ -0,0 +1,34 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisiozweck_model', 'BisiozweckModel'); + + // get all bisio Zwecke + $this->_ci->BisiozweckModel->addSelect('1'); + $bisiozweckRes = $this->_ci->BisiozweckModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisiozweckRes)) + return $bisiozweckRes; + + if (hasData($bisiozweckRes)) + { + if (count(getData($bisiozweckRes)) <= 1) // resolved if one bisio Zweck + return success(true); + else + return success(false); // otherwise not resolved + } + else + return success(true); // resolved if no bisio zweck + } +} diff --git a/application/libraries/issues/CORE_INOUT_0003.php b/application/libraries/issues/CORE_INOUT_0003.php new file mode 100644 index 000000000..0fee6c061 --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0003.php @@ -0,0 +1,39 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisiozweck_model', 'BisiozweckModel'); + + // get all Zwecke + $this->_ci->BisiozweckModel->addSelect('zweck_code'); + $bisiozweckRes = $this->_ci->BisiozweckModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisiozweckRes)) + return $bisiozweckRes; + + if (hasData($bisiozweckRes)) + { + $bisiozweckData = getData($bisiozweckRes); + + // resolved if Zweck is 1, 2 or 3 + if (count($bisiozweckData) == 1 && !in_array($bisiozweckData[0]->zweck_code, array(1, 2, 3))) + return success(false); + else + return success(true); + } + else + return success(true); + } +} diff --git a/application/libraries/issues/CORE_INOUT_0004.php b/application/libraries/issues/CORE_INOUT_0004.php new file mode 100644 index 000000000..703b108cc --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0004.php @@ -0,0 +1,57 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Aufenthaltfoerderung_model', 'AufenthaltfoerderungModel'); + + // get all Zwecke + $this->_ci->AufenthaltfoerderungModel->addSelect('tbl_aufenthaltfoerderung.aufenthaltfoerderung_code'); + $this->_ci->AufenthaltfoerderungModel->addJoin('bis.tbl_bisio_aufenthaltfoerderung', 'aufenthaltfoerderung_code'); + $this->_ci->AufenthaltfoerderungModel->addOrder('tbl_aufenthaltfoerderung.aufenthaltfoerderung_code'); + $bisioFoerderungRes = $this->_ci->AufenthaltfoerderungModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisioFoerderungRes)) + return $bisioFoerderungRes; + + if (hasData($bisioFoerderungRes)) + { + // resolved if Aufenthaltsfoerderung exists + return success(true); + } + else + { + $this->_ci->load->model('codex/Bisio_model', 'BisioModel'); + + // get Bisio Aufenthaltsdauer + $aufenthaltsdauerRes = $this->_ci->BisioModel->getAufenthaltsdauer($params['bisio_id']); + + if (isError($aufenthaltsdauerRes)) + return $aufenthaltsdauerRes; + + if (hasData($aufenthaltsdauerRes)) + { + $aufenthaltsdauer = getData($aufenthaltsdauerRes); + + // check if stay >= 29 days. If yes and no Aufenthaltsfoerderung - not resolved + if ($aufenthaltsdauer >= 29) + return success(false); + else + return success(true); + } + else // no Aufenthaltsdauer - not resolved + return success(false); + } + } +} diff --git a/application/libraries/issues/CORE_INOUT_0005.php b/application/libraries/issues/CORE_INOUT_0005.php new file mode 100644 index 000000000..e655d2e36 --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0005.php @@ -0,0 +1,53 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisio_model', 'BisioModel'); + + // get all Zwecke + $this->_ci->BisioModel->addSelect('ects_angerechnet'); + $bisioRes = $this->_ci->BisioModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisioRes)) + return $bisioRes; + + if (hasData($bisioRes) && !isEmptyString(getData($bisioRes)[0]->ects_angerechnet)) + { + // resolved if ects exists + return success(true); + } + else + { + // get Bisio Aufenthaltsdauer + $aufenthaltsdauerRes = $this->_ci->BisioModel->getAufenthaltsdauer($params['bisio_id']); + + if (isError($aufenthaltsdauerRes)) + return $aufenthaltsdauerRes; + + if (hasData($aufenthaltsdauerRes)) + { + $aufenthaltsdauer = getData($aufenthaltsdauerRes); + + // check if stay >= 29 days. If yes and no ects - not resolved + if ($aufenthaltsdauer >= 29) + return success(false); + else + return success(true); + } + else // no Aufenthaltsdauer - not resolved + return success(false); + } + } +} diff --git a/application/libraries/issues/CORE_INOUT_0006.php b/application/libraries/issues/CORE_INOUT_0006.php new file mode 100644 index 000000000..a447a9625 --- /dev/null +++ b/application/libraries/issues/CORE_INOUT_0006.php @@ -0,0 +1,54 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Bisio_model', 'BisioModel'); + //$this->_ci->load->model('codex/Aufenthaltfoerderung_model', 'AufenthaltfoerderungModel'); + + // get all Zwecke + $this->_ci->BisioModel->addSelect('ects_erworben'); + $bisioRes = $this->_ci->BisioModel->loadWhere(array('bisio_id' => $params['bisio_id'])); + + if (isError($bisioRes)) + return $bisioRes; + + if (hasData($bisioRes) && !isEmptyString(getData($bisioRes)[0]->ects_erworben)) + { + // resolved if ects exists + return success(true); + } + else + { + // get Bisio Aufenthaltsdauer + $aufenthaltsdauerRes = $this->_ci->BisioModel->getAufenthaltsdauer($params['bisio_id']); + + if (isError($aufenthaltsdauerRes)) + return $aufenthaltsdauerRes; + + if (hasData($aufenthaltsdauerRes)) + { + $aufenthaltsdauer = getData($aufenthaltsdauerRes); + + // check if stay >= 29 days. If yes and no ects - not resolved + if ($aufenthaltsdauer >= 29) + return success(false); + else + return success(true); + } + else // no Aufenthaltsdauer - not resolved + return success(false); + } + } +} diff --git a/application/libraries/issues/CORE_ZGV_0001.php b/application/libraries/issues/CORE_ZGV_0001.php new file mode 100644 index 000000000..47d27d30e --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0001.php @@ -0,0 +1,42 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvdatum'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $zgvdatum = getData($prestudentRes)[0]->zgvdatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + // check if zgvdatum comes after today + if ($zgvdatum > date('Y-m-d')) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/libraries/issues/CORE_ZGV_0002.php b/application/libraries/issues/CORE_ZGV_0002.php new file mode 100644 index 000000000..d09380ddb --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0002.php @@ -0,0 +1,50 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvdatum, gebdatum'); + $this->_ci->PrestudentModel->addJoin('public.tbl_person', 'person_id'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudentData = getData($prestudentRes)[0]; + + $zgvdatum = $prestudentData->zgvdatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + $gebdatum = $prestudentData->gebdatum; + + if (isEmptyString($gebdatum)) + return success(false); + + // check if zgvdatum comes before geburtsdatum + if ($zgvdatum < $gebdatum) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/libraries/issues/CORE_ZGV_0003.php b/application/libraries/issues/CORE_ZGV_0003.php new file mode 100644 index 000000000..db0ab29db --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0003.php @@ -0,0 +1,42 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvmadatum'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $zgvdatum = getData($prestudentRes)[0]->zgvmadatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + // check if zgvdatum comes after today + if ($zgvdatum > date('Y-m-d')) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/libraries/issues/CORE_ZGV_0004.php b/application/libraries/issues/CORE_ZGV_0004.php new file mode 100644 index 000000000..27488af00 --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0004.php @@ -0,0 +1,50 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvdatum, zgvmadatum'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudentData = getData($prestudentRes)[0]; + + // get and compare zgvdatum and zgvmadatum + $zgvdatum = $prestudentData->zgvdatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + $zgvmadatum = $prestudentData->zgvmadatum; + + if (isEmptyString($zgvmadatum)) + return success(false); + + // check if zgvmadatum comes after zgvdatum + if ($zgvmadatum < $zgvdatum) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/libraries/issues/CORE_ZGV_0005.php b/application/libraries/issues/CORE_ZGV_0005.php new file mode 100644 index 000000000..405f3d88d --- /dev/null +++ b/application/libraries/issues/CORE_ZGV_0005.php @@ -0,0 +1,50 @@ +_ci =& get_instance(); // get code igniter instance + + // get zgvdatum and geburtsdatum of prestudent + $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $this->_ci->PrestudentModel->addSelect('zgvmadatum, gebdatum'); + $this->_ci->PrestudentModel->addJoin('public.tbl_person', 'person_id'); + $prestudentRes = $this->_ci->PrestudentModel->load($params['prestudent_id']); + + if (isError($prestudentRes)) + return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudentData = getData($prestudentRes)[0]; + + $zgvdatum = $prestudentData->zgvmadatum; + + if (isEmptyString($zgvdatum)) + return success(false); + + $gebdatum = $prestudentData->gebdatum; + + if (isEmptyString($gebdatum)) + return success(false); + + // check if zgvdatum comes before geburtsdatum + if ($zgvdatum < $gebdatum) + return success(false); + else + return success(true); + } + else + return success(false); + } +} diff --git a/application/models/codex/Bisio_model.php b/application/models/codex/Bisio_model.php index 5f35aec9a..1cff1dc54 100644 --- a/application/models/codex/Bisio_model.php +++ b/application/models/codex/Bisio_model.php @@ -11,4 +11,37 @@ class Bisio_model extends DB_Model $this->dbTable = 'bis.tbl_bisio'; $this->pk = 'bisio_id'; } + + /** + * Gets duration of stay in days by bisio_id. + * @param int $bisio_id + * @return object success with number of days or error + */ + public function getAufenthaltsdauer($bisio_id) + { + // get from and to date + $this->addSelect('von, bis'); + $bisioRes = $this->load($bisio_id); + + if (isError($bisioRes)) + return $bisioRes; + + if (hasData($bisioRes)) + { + $bisioData = getData($bisioRes)[0]; + + $avon = $bisioData->von; + $abis = $bisioData->bis; + + if (is_null($avon) || is_null($abis)) + return success("Von or bis date not set"); + + $vonDate = new DateTime($avon); + $bisDate = new DateTime($abis); + $interval = $vonDate->diff($bisDate); + return success($interval->days); + } + else + return success("Bisio not found"); + } } diff --git a/application/models/crm/Konto_model.php b/application/models/crm/Konto_model.php index a3b5cdbb6..840bb290c 100644 --- a/application/models/crm/Konto_model.php +++ b/application/models/crm/Konto_model.php @@ -18,45 +18,50 @@ class Konto_model extends DB_Model public function setPaid($buchungsnr) { // get payment - $buchungResult = $this->loadWhere(array('buchungsnr' => $buchungsnr)); + $buchungResult = $this->loadWhere(array('buchungsnr' => $buchungsnr)); - if(isSuccess($buchungResult) && hasData($buchungResult)) + if (isSuccess($buchungResult) && hasData($buchungResult)) { + $buchung = getData($buchungResult)[0]; + // get already paid amount $this->addSelect('sum(betrag) as bezahlt'); $this->addGroupBy('buchungsnr_verweis'); - $buchungVerweisResult = $this->loadWhere(array('buchungsnr_verweis' => $buchungsnr)); + $buchungVerweisResult = $this->loadWhere(array('buchungsnr_verweis' => $buchungsnr)); - if(isSuccess($buchungVerweisResult)) + if (isSuccess($buchungVerweisResult)) { - if(hasData($buchungVerweisResult)) - { - $betragBezahltResult = getData($buchungVerweisResult); - $betragBezahlt = $betragBezahltResult->bezahlt; - } - else - $betragBezahlt = 0; + $betragBezahlt = 0; - $buchung = getData($buchungResult); - $buchung = $buchung[0]; + if (hasData($buchungVerweisResult)) + { + $betragBezahlt = getData($buchungVerweisResult)[0]->bezahlt; + } // calculate open amount - $betragOffen = $betragBezahlt - $buchung->betrag*(-1); + $betragOffen = $betragBezahlt - $buchung->betrag * (-1); - $data = array( - 'person_id' => $buchung->person_id, - 'studiengang_kz' => $buchung->studiengang_kz, - 'studiensemester_kurzbz' => $buchung->studiensemester_kurzbz, - 'buchungsnr_verweis' => $buchungsnr, - 'betrag' => str_replace(',','.',$betragOffen*(-1)), - 'buchungsdatum' => date('Y-m-d'), - 'buchungstext' => $buchung->buchungstext, - 'insertamum' => date('Y-m-d H:i:s'), - 'insertvon' => '', - 'buchungstyp_kurzbz' => $buchung->buchungstyp_kurzbz, - ); + if ($betragOffen != 0) + { + $data = array( + 'person_id' => $buchung->person_id, + 'studiengang_kz' => $buchung->studiengang_kz, + 'studiensemester_kurzbz' => $buchung->studiensemester_kurzbz, + 'buchungsnr_verweis' => $buchungsnr, + 'betrag' => str_replace(',', '.', $betragOffen * (-1)), + 'buchungsdatum' => date('Y-m-d'), + 'buchungstext' => $buchung->buchungstext, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => '', + 'buchungstyp_kurzbz' => $buchung->buchungstyp_kurzbz, + ); - return $this->insert($data); + return $this->insert($data); + } + else + { + return success(); + } } else { diff --git a/application/models/education/Zeugnisnote_model.php b/application/models/education/Zeugnisnote_model.php index 65607e252..a4185a7f4 100644 --- a/application/models/education/Zeugnisnote_model.php +++ b/application/models/education/Zeugnisnote_model.php @@ -86,9 +86,10 @@ class Zeugnisnote_model extends DB_Model * @param bool $lehre * @param bool $offiziell * @param bool $positiv + * @param bool $zeugnis * @return object */ - public function getByPerson($person_id, $studiensemester_kurzbz, $aktiv = true, $lehre = null, $offiziell = null, $positiv = null) + public function getByPerson($person_id, $studiensemester_kurzbz, $aktiv = true, $lehre = null, $offiziell = null, $positiv = null, $zeugnis = null) { $params = array($person_id, $studiensemester_kurzbz); @@ -129,6 +130,12 @@ class Zeugnisnote_model extends DB_Model $params[] = $positiv; } + if (isset($zeugnis)) + { + $qry .= ' AND lv.zeugnis = ?'; + $params[] = $zeugnis; + } + $qry .= ' ORDER BY zgnisnote.benotungsdatum'; return $this->execQuery($qry, $params); diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 6358ca81e..e2b3bdfb7 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -448,10 +448,11 @@ class Studiengang_model extends DB_Model return $this->execQuery($query, array($typ)); } - + /** - * Get Studiengangsleitung - * @param null $studiengang_kz + * Get Studiengangsleitung/en of Studiengang/Studiengaenge. + * + * @param null $studiengang_kz Numeric or Array * @return array */ public function getLeitung($studiengang_kz = null) @@ -460,7 +461,12 @@ class Studiengang_model extends DB_Model $this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz'); $this->addJoin('public.tbl_benutzer', 'uid'); $this->addJoin('public.tbl_person', 'person_id'); - + + if (!is_numeric($studiengang_kz) && !is_array($studiengang_kz)) + { + return error('Studiengangskennzahl ungültig'); + } + if (is_null($studiengang_kz)) { $condition = ' @@ -469,16 +475,21 @@ class Studiengang_model extends DB_Model AND ( datum_bis >= NOW() OR datum_bis IS NULL ) '; } - elseif (is_numeric($studiengang_kz)) + elseif (is_numeric($studiengang_kz) || is_array($studiengang_kz)) { + if (is_array($studiengang_kz)) + { + $studiengang_kz = array_map(array($this,'escape'), $studiengang_kz); + $studiengang_kz = implode(', ', $studiengang_kz); + } $condition = ' funktion_kurzbz = \'Leitung\' AND ( datum_von <= NOW() OR datum_von IS NULL ) AND ( datum_bis >= NOW() OR datum_bis IS NULL ) - AND studiengang_kz = ' . $this->db->escape($studiengang_kz) + AND studiengang_kz IN (' . $studiengang_kz. ')'; ; } - + return $this->loadWhere($condition); } diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index ec5522674..559700390 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -165,7 +165,7 @@ class Person_model extends DB_Model if (!hasData($person)) return success(null); - $this->KontaktModel->addSelect('kontakttyp, anmerkung, kontakt, zustellung'); + $this->KontaktModel->addSelect('kontakt_id, kontakttyp, anmerkung, kontakt, zustellung'); $this->KontaktModel->addOrder('kontakttyp'); $this->KontaktModel->addOrder('insertamum', 'DESC'); $where = $zustellung_only === true ? array('person_id' => $person_id, 'zustellung' => true) : array('person_id' => $person_id); @@ -268,16 +268,61 @@ class Person_model extends DB_Model public function checkDuplicate($person_id) { - $qry = "SELECT sp.person_id - FROM public.tbl_person p - LEFT JOIN public.tbl_person sp ON p.vorname = sp.vorname - AND p.nachname = sp.nachname - AND p.gebdatum = sp.gebdatum - JOIN public.tbl_prestudent ps ON sp.person_id = ps.person_id - JOIN public.tbl_prestudentstatus pss ON ps.prestudent_id = pss.prestudent_id - WHERE p.person_id = ? AND sp.person_id != ? AND pss.status_kurzbz = ?"; + $qry = "SELECT person_id + FROM public.tbl_prestudent p + JOIN + ( + SELECT DISTINCT ON(prestudent_id) * + FROM public.tbl_prestudentstatus + WHERE prestudent_id IN + ( + SELECT prestudent_id + FROM public.tbl_prestudent + WHERE person_id IN + ( + SELECT p2.person_id + FROM public.tbl_person p + JOIN public.tbl_person p2 + ON p.vorname = p2.vorname + AND p.nachname = p2.nachname + AND p.gebdatum = p2.gebdatum + AND p.person_id = ? + ) + ) + ORDER BY prestudent_id, datum DESC, insertamum DESC + ) ps USING(prestudent_id) + JOIN public.tbl_status USING(status_kurzbz) + WHERE status_kurzbz = 'Interessent' + AND studiengang_kz IN + ( + SELECT studiengang_kz + FROM public.tbl_prestudent p + JOIN + ( + SELECT DISTINCT ON(prestudent_id) * + FROM public.tbl_prestudentstatus + WHERE prestudent_id IN + ( + SELECT prestudent_id + FROM public.tbl_prestudent + WHERE person_id IN + ( + SELECT p2.person_id + FROM public.tbl_person p + JOIN public.tbl_person p2 + ON p.vorname = p2.vorname + AND p.nachname = p2.nachname + AND p.gebdatum = p2.gebdatum + AND p.person_id = ? + ) + ) + ORDER BY prestudent_id, datum DESC, insertamum DESC + ) ps USING(prestudent_id) + JOIN public.tbl_status USING(status_kurzbz) + WHERE status_kurzbz = 'Abbrecher' + ) + "; - - return $this->execQuery($qry, array($person_id, $person_id, 'Abbrecher')); + return $this->execQuery($qry, array($person_id, $person_id)); } } diff --git a/application/models/system/Issue_model.php b/application/models/system/Issue_model.php index 5dac85066..ab1f9ba6e 100644 --- a/application/models/system/Issue_model.php +++ b/application/models/system/Issue_model.php @@ -12,6 +12,45 @@ class Issue_model extends DB_Model $this->pk = 'issue_id'; } + /** + * Gets issues which are open, i.e. not resolved. + * @param array $fehlercodes only issues for given fehler are retrieved + * @param int $person_id + * @param string $oe_kurzbz + * @param string $fehlercode_extern + * @return object success with issues or error + */ + public function getOpenIssues($fehlercodes, $person_id = null, $oe_kurzbz = null, $fehlercode_extern = null) + { + $params = array($fehlercodes); + // issue exists for a fehlercode (or fehlercode_extern), person_id, oe_kurzbz, if not verarbeitet yet + $qry = 'SELECT issue_id, fehlercode, inhalt, fehlercode_extern, inhalt_extern, person_id, oe_kurzbz, + behebung_parameter, datum, verarbeitetvon, verarbeitetamum + FROM system.tbl_issue + WHERE fehlercode IN ? + AND verarbeitetamum IS NULL'; + + if (!isEmptyString($fehlercode_extern)) + { + $qry .= ' AND fehlercode_extern = ?'; + $params[] = $fehlercode_extern; + } + + if (isset($person_id)) + { + $qry .= ' AND person_id = ?'; + $params[] = $person_id; + } + + if (isset($oe_kurzbz)) + { + $qry .= ' AND oe_kurzbz = ?'; + $params[] = $oe_kurzbz; + } + + return $this->execQuery($qry, $params); + } + /** * Gets number of open (non-resolved) issues. * @param string $fehlercode unique error code diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 4603708f4..cd38fd9ac 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -25,7 +25,8 @@ $this->load->view( 'bitteBegruendungAngeben', 'empfehlungWurdeAngefordert', 'anrechnungenWurdenGenehmigt', - 'anrechnungenWurdenAbgelehnt' + 'anrechnungenWurdenAbgelehnt', + 'nurLeseberechtigung' ), 'person' => array( 'student', @@ -72,7 +73,7 @@ $this->load->view( -
+
diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php index 850affeea..308f702a3 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersicht.php @@ -48,7 +48,8 @@ $this->load->view( 'empfehlungWurdeAngefordert', 'empfehlungWurdeAngefordertAusnahmeWoKeineLektoren', 'anrechnungenWurdenGenehmigt', - 'anrechnungenWurdenAbgelehnt' + 'anrechnungenWurdenAbgelehnt', + 'nurLeseberechtigung' ), 'person' => array( 'student', @@ -101,7 +102,7 @@ $this->load->view(
-
+
widgetlib->widget( @@ -226,7 +227,7 @@ $this->load->view( class='fa fa-times'>
- ' target='_blank'> + ' target='_blank'> p->t('global', 'antragAnlegen'); ?>
diff --git a/application/views/person/bpk/bpkData.php b/application/views/person/bpk/bpkData.php index 3580ed4bc..1c70b44a6 100644 --- a/application/views/person/bpk/bpkData.php +++ b/application/views/person/bpk/bpkData.php @@ -3,7 +3,8 @@ 'query' => ' SELECT person_id, vorname, nachname, geschlecht, svnr, ersatzkennzeichen, matr_nr, - staatsbuergerschaft, gebdatum, false AS mitarbeiter + staatsbuergerschaft, gebdatum, false AS mitarbeiter, + (SELECT count(*) FROM public.tbl_akte WHERE person_id=tbl_person.person_id) AS anzahl_dokumente FROM public.tbl_person WHERE @@ -14,7 +15,8 @@ UNION SELECT person_id, vorname, nachname, geschlecht, svnr, ersatzkennzeichen, matr_nr, - staatsbuergerschaft, gebdatum, true AS mitarbeiter + staatsbuergerschaft, gebdatum, true AS mitarbeiter, + (SELECT count(*) FROM public.tbl_akte WHERE person_id=tbl_person.person_id) AS anzahl_dokumente FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) @@ -36,7 +38,8 @@ ucfirst($this->p->t('person', 'matrikelnummer')), ucfirst($this->p->t('person', 'staatsbuergerschaft')), ucfirst($this->p->t('person', 'geburtsdatum')), - 'Mitarbeiter' + 'Mitarbeiter', + 'Anzahl Dokumente' ), 'formatRow' => function($datasetRaw) { diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index d867c8613..f3849d622 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -414,6 +414,10 @@ { $datasetRaw->{'OnholdDate'} = '-'; } + else + { + $datasetRaw->{'OnholdDate'} = date_format(date_create($datasetRaw->{'OnholdDate'}), 'Y-m-d H:i'); + } if ($datasetRaw->{'StgAbgeschickt'} == null) { diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 39b1e3cca..92f062b62 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -11,6 +11,7 @@ $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $ORG_NAME = '\'InfoCenter\''; + $IDENTITY = '\'identity\''; $query = ' SELECT @@ -245,7 +246,15 @@ $query = ' LIMIT 1 ) LIMIT 1 - ) AS "InfoCenterMitarbeiter" + ) AS "InfoCenterMitarbeiter", + ( + SELECT akte.akte_id + FROM public.tbl_akte akte + JOIN public.tbl_dokument USING (dokument_kurzbz) + WHERE akte.person_id = p.person_id + AND dokument_kurzbz = '. $IDENTITY .' + LIMIT 1 + ) AS "AktenId" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -317,7 +326,8 @@ $query = ' 'Reihungstest date', 'ZGV Nation BA', 'ZGV Nation MA', - 'InfoCenter Mitarbeiter' + 'InfoCenter Mitarbeiter', + 'Identitätsnachweis' ), 'formatRow' => function($datasetRaw) { @@ -425,6 +435,19 @@ $query = ' $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } + if ($datasetRaw->{'AktenId'} !== null) + { + $datasetRaw->{'AktenId'} = sprintf( + 'Identitätsnachweis', + $datasetRaw->{'AktenId'} + ); + } + else + { + $datasetRaw->{'AktenId'} = '-'; + } + + return $datasetRaw; }, 'markRow' => function($datasetRaw) { diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index f4ba1bb4b..8620f8d1c 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -10,6 +10,7 @@ // By default set the parameters to null $title = isset($title) ? $title : null; + $refresh = isset($refresh) ? $refresh : null; $customCSSs = isset($customCSSs) ? $customCSSs : null; $customJSs = isset($customJSs) ? $customJSs : null; $phrases = isset($phrases) ? $phrases : null; @@ -48,6 +49,8 @@ + + - - - + '; + if (!$norefresh) + { + echo ''; + } +echo ' '; //Skript fuer den automatischen bildlauf diff --git a/cis/private/coodle/stammdaten.php b/cis/private/coodle/stammdaten.php index 4b939f728..17e19a4fc 100644 --- a/cis/private/coodle/stammdaten.php +++ b/cis/private/coodle/stammdaten.php @@ -25,6 +25,7 @@ require_once('../../../include/functions.inc.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/coodle.class.php'); require_once('../../../include/datum.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); $user = get_uid(); $sprache = getSprache(); @@ -36,6 +37,22 @@ $message=''; if(!check_lektor($user)) die($p->t('global/keineBerechtigung')); +// Administratoren duerfen die UID als Parameter uebergeben um die Umfragen von anderen Personen anzuzeigen +if(isset($_GET['uid'])) +{ + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); + if($rechte->isBerechtigt('admin')) + { + $user = $_GET['uid']; + $getParam = '&uid='.$user; + } + else + $getParam = ''; +} +else + $getParam = ''; + echo ' diff --git a/cis/private/coodle/uebersicht.php b/cis/private/coodle/uebersicht.php index bb515a1ea..94a7b9ab1 100644 --- a/cis/private/coodle/uebersicht.php +++ b/cis/private/coodle/uebersicht.php @@ -27,6 +27,7 @@ require_once('../../../include/functions.inc.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/datum.class.php'); require_once('../../../include/benutzer.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); $lang = getSprache(); @@ -35,6 +36,22 @@ $p = new phrasen($lang); $uid = get_uid(); $message = ''; +// Administratoren duerfen die UID als Parameter uebergeben um die Umfragen von anderen Personen anzuzeigen +if(isset($_GET['uid'])) +{ + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); + if($rechte->isBerechtigt('admin')) + { + $uid = $_GET['uid']; + $getParam = '&uid='.$uid; + } + else + $getParam = ''; +} +else + $getParam = ''; + echo ' @@ -170,7 +187,7 @@ foreach($coodle->result as $c) else $title=$p->t('coodle/bearbeiten'); - $row.= '  + $row.= '  '; } diff --git a/cis/private/lehre/anwesenheitsliste.php b/cis/private/lehre/anwesenheitsliste.php index 2cdf56d5f..8b1f28408 100644 --- a/cis/private/lehre/anwesenheitsliste.php +++ b/cis/private/lehre/anwesenheitsliste.php @@ -237,6 +237,10 @@ $covidhelper = new CovidHelper(); $aw_content=''; if(defined('CIS_ANWESENHEITSLISTE_ANWESENHEITSLISTE_BILD_ANZEIGEN') && !CIS_ANWESENHEITSLISTE_ANWESENHEITSLISTE_BILD_ANZEIGEN) $awbild_content=''; + if( defined('CIS_SHOW_COVID_STATUS') && !CIS_SHOW_COVID_STATUS ) + { + $covid_content = ''; + } echo " diff --git a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php index 080c6032e..3ff1f4695 100644 --- a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php +++ b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php @@ -1192,6 +1192,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG foreach ($grades as $uid => $data) //Ausgabe Array { + $htmlstring .= ' @@ -1219,6 +1220,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG $negativeteilnote = false; $note_zusatztext = ''; $note_zusatztext_tooltip = ''; + $ueberschreibbar = false; //Damit keine Notice Fehler kommt muss Variable bei jeden Schleifendurchgang neue gesetzt und berechnet werden. if (isset($data['grades'])) { diff --git a/cis/private/lehre/swd.php b/cis/private/lehre/swd.php index b7fa82ac5..248779aac 100644 --- a/cis/private/lehre/swd.php +++ b/cis/private/lehre/swd.php @@ -1,5 +1,5 @@ getBerechtigungen($user); + if($rechte->isBerechtigt('admin')) + { + $user = $_GET['uid']; + } +} + echo ' @@ -49,11 +61,11 @@ echo ''.$p->t('freebusy/titel').' - - - - - + + + + + '; + echo '

'.$p->t("zeitaufzeichnung/zeitaufzeichnungVon").' '.$db->convert_html_chars($bn->vorname).' '.$db->convert_html_chars($bn->nachname).'

'; // Wenn Kartennummer übergeben wurde dann hole uid von Karteninhaber @@ -790,388 +835,49 @@ if($kartennummer != '') } //Speichern der Daten -function checkVals ($oe_val, $project_val, $phase_val, $service_val) -{ - $error = 0; - if ($service_val && ( filter_var($service_val, FILTER_VALIDATE_INT) === false )) - $error = 1; - if ($phase_val && ( filter_var($phase_val, FILTER_VALIDATE_INT) === false )) - $error = 1; - if ($oe_val) - { - $oecheck = new organisationseinheit($oe_val); - if ($oecheck->errormsg) - $error = 1; - } - if ($project_val) - { - $procheck = new projekt($project_val); - if ($procheck->errormsg) - $error = 1; - } - return $error; -} - if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { - $zeit = new zeitaufzeichnung(); - - $projects_of_user = new projekt(); - $projects= $projects_of_user->getProjekteListForMitarbeiter($user); - $project_kurzbz_array = array(); - $projektph_of_user = new projektphase(); $projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user); - $projectphasen_kurzbz_array = array(); - - foreach($projects as $prjct) - { - array_push($project_kurzbz_array, (string) $prjct->projekt_kurzbz); - } - foreach ($projektphasen as $pp) - { - array_push($projectphasen_kurzbz_array, (string) $pp->projektphase_id); - } - - $projectphase = new projektphase(); if ($_FILES['csv']['error'] == 0 && isset($_POST['import'])) { - $name = $_FILES['csv']['name']; - $tmpName = $_FILES['csv']['tmp_name']; - $mimeType = mime_content_type($_FILES['csv']['tmp_name']); - //echo($mimeType); - if($mimeType=='text/plain') - { - if(($handle = fopen($tmpName, 'r')) !== FALSE) - { - if (mb_detect_encoding(fgets($handle), 'UTF-8', true)) - { - set_time_limit(0); - $anzahl = 0; - $importtage_array = array(); - $ende_vorher = date('Y-m-d H:i:s'); - - while(($data = fgetcsv($handle, 1000, ';', '"')) !== FALSE) - { - if($data[0] == $user){ - if(!empty($data[6]) && !in_array($data[6], $project_kurzbz_array) && empty($data[7])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$data[6].')
'; - } - elseif(!empty($data[7]) && !in_array($data[7], $projectphasen_kurzbz_array)) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$data[7].')
'; - } - else - { - $vonCSV = $datum->formatDatum($data[2], $format='Y-m-d'); - $bisCSV = $datum->formatDatum($data[3], $format='Y-m-d'); - $dateVonCSV = new DateTime($vonCSV); - $dateBisCSV = new DateTime($bisCSV); - - if (!isset($data[5])) - $data[5] = NULL; - if (!isset($data[6])) - $data[6] = NULL; - if (!isset($data[7])) - $data[7] = NULL; - if (!isset($data[8])) - $data[8] = NULL; - if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')
'; - elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.
'; - elseif ($dateVonCSV!=$dateBisCSV && $data[1]!="DienstreiseMT") - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; - } - elseif (empty($data[7]) && !empty($data[6]) && !$projects_of_user->checkProjectInCorrectTime($data[6], $data[2], $data[3])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; - } - elseif (!empty($data[7]) && !$projektph_of_user ->checkProjectphaseInCorrectTime($data[7], $data[2], $data[3])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; - } - elseif (checkVals($data[5],$data[6],$data[7],$data[8])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')
'; - } - else - { - if ($data[1] == 'LehreIntern') - $data[1] = 'Lehre'; - $zeit->new = true; - $zeit->beschreibung = NULL; - $zeit->oe_kurzbz_1 = NULL; - $zeit->projekt_kurzbz = NULL; - $zeit->projektphase_id = NULL; - $zeit->service_id = NULL; - - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->updateamum = date('Y-m-d H:i:s'); - $zeit->updatevon = $user; - $zeit->insertvon = $user; - $zeit->uid = $data[0]; - $zeit->aktivitaet_kurzbz = $data[1]; - $zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s'); - if (isset($data[4])) - $zeit->beschreibung = $data[4]; - if (isset($data[5])) - $zeit->oe_kurzbz_1 = $data[5]; - if (isset($data[6])) - $zeit->projekt_kurzbz = $data[6]; - if (isset($data[7])) - $zeit->projektphase_id = $data[7]; - if (isset($data[8])) - $zeit->service_id = $data[8]; - if (isset($data[9])) - { - if (strtolower($data[9] == 'true')) - { - // check, ob homeoffice gemäß Bisverwendung - $verwendung = new bisverwendung(); - $verwendung->getVerwendungDatum($data[0],$vonCSV); - - foreach ($verwendung->result as $v) - // echo "homeoffice für Tag " . $vonCSV . " ". $v->homeoffice . " " . $v->bisverwendung_id . "
"; - - if ($v->homeoffice) - { - - // echo "homeoffice erlaubt
"; - $zeit->homeoffice = true; - } - else - { - echo ''.$p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV)) .'
'; - - $zeit->homeoffice = false; - } - } - else - { - $zeit->homeoffice = false; - } - } - else - { - $zeit->homeoffice = false; - } - $tag = $datum->formatDatum($data[2], $format='Y-m-d'); - - if(!in_array($tag, $importtage_array)) - { - $importtage_array[] = $tag; - $zeit->deleteEntriesForUser($user, $tag); - $tag_aktuell = $tag; - } - else - { - if ($ende_vorher < $zeit->start) - { - $pause = new zeitaufzeichnung(); - $pause->new = true; - $pause->insertamum = date('Y-m-d H:i:s'); - $pause->updateamum = date('Y-m-d H:i:s'); - $pause->updatevon = $user; - $pause->insertvon = $user; - $pause->uid = $user; - $pause->aktivitaet_kurzbz = 'Pause'; - $pause->start = $ende_vorher; - $pause->ende = $zeit->start; - $pause->beschreibung = ''; - $pause->homeoffice = $homeoffice; - if(!$pause->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; - } - } - } - - $ende_vorher = $zeit->ende; - if($data[2] != $data[3]) - { - /* - if ($data[1] == 'LehreExtern') - { - $zeit->start = date('Y-m-d H:i:s', strtotime('+2 seconds', strtotime($data[2]))); - $zeit->ende = date('Y-m-d H:i:s', strtotime('-2 seconds', strtotime($data[3]))); - } - */ - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'('.$zeit->start.')
'; - } - else - $anzahl++; - } - else - $anzahl++; - - } - } - } - else if (strpos($data[0],'#') === false) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert ('.$data[0].')
'; - } - } - if($anzahl>0) - { - echo ''.$p->t("global/datenWurdenGespeichert").' ('.$anzahl.')'; - foreach ($importtage_array as $ptag) - { - $zeit->cleanPausenForUser($user, $ptag); - } - } - } - else - echo 'Datei konnte nicht importiert werden. Encoding ist nicht UTF-8!'; - } - } + $zeit_csv_import = new zeitaufzeichnung_import_csv($p, $user, $sperrdatum, $_FILES['csv']['tmp_name']); + $zeit_csv_import->import(); + echo $zeit_csv_import->OutputToHTML(); } else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum) - echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + // NOTE(chris): Save else if (isset($_POST['save']) || isset($_POST['edit'])) { - - if(isset($_POST['edit'])) + $zeit_post_import = new zeitaufzeichnung_import_post($p, $user, isset($_POST['edit']), [ + 'aktivitaet_kurzbz' => $aktivitaet_kurzbz, + 'beschreibung' => $beschreibung, + 'bis' => $bis, + 'bis_pause' => $bis_pause, + 'homeoffice' => $homeoffice, + 'kunde_uid' => $kunde_uid, + 'oe_kurzbz_1' => $oe_kurzbz_1, + 'oe_kurzbz_2' => $oe_kurzbz_2, + 'projekt_kurzbz' => $projekt_kurzbz, + 'projektphase_id' => $projektphase_id, + 'service_id' => $service_id, + 'von' => $von, + 'von_pause' => $von_pause, + 'zeitaufzeichnung_id' => $zeitaufzeichnung_id, + ]); + $zeit_post_import->import(); + echo $zeit_post_import->OutputToHTML(); + if (!$zeit_post_import->hasErrors() && !$zeit_post_import->hasWarnings()) { - if(!$zeit->load($zeitaufzeichnung_id)) - die($p->t("global/fehlerBeimLadenDesDatensatzes")); - - $zeit->new = false; - } - else - { - $zeit->new = true; - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->insertvon = $user; - } - - $zeit->uid = $user; - $zeit->aktivitaet_kurzbz = $aktivitaet_kurzbz; - $zeit->start = $datum->formatDatum($von, $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($bis, $format='Y-m-d H:i:s'); - $zeit->beschreibung = $beschreibung; - $zeit->oe_kurzbz_1 = $oe_kurzbz_1; - $zeit->oe_kurzbz_2 = $oe_kurzbz_2; - $zeit->updateamum = date('Y-m-d H:i:s'); - $zeit->updatevon = $user; - $zeit->projekt_kurzbz = $projekt_kurzbz; - $zeit->projektphase_id = $projektphase_id; - $zeit->homeoffice = $homeoffice; - $zeit->service_id = $service_id; - $zeit->kunde_uid = $kunde_uid; - $saveerror = 0; - - if (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.
'; - $saveerror = 1; - } - elseif ($datum->formatDatum($von, $format='Y-m-d') > $limitdatum || $datum->formatDatum($bis, $format='Y-m-d') > $limitdatum) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs oder Enddatum zu weit in der Zukunft liegt.
'; - $saveerror = 1; - } - elseif (!$projectphase->checkProjectphaseInCorrectTime($projektphase_id, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) - { - echo '

'.$p->t("global/fehlerBeimSpeichernDerDaten").': - Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt.


'; - $saveerror = 1; - - } - elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT") - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; - $saveerror = 1; - } - elseif (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit']))) - { - - $p_start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - $p_end = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - - // checken ob Pause innerhalb der Arbeitszeit ist - if ($zeit->start > $p_start || $zeit->ende < $p_end) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Pause außerhalb der Arbeitszeit
'; - $saveerror = 1; - - } - elseif ($p_start > $p_end) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Pausenzeiten
'; - $saveerror = 1; - } - else - { - //Eintrag Arbeit bis zur Pause - $zeit->ende = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; - $saveerror = 1; - } - //Eintrag für die Pause - $pause = new zeitaufzeichnung(); - $pause->new = true; - $pause->insertamum = date('Y-m-d H:i:s'); - $pause->updateamum = date('Y-m-d H:i:s'); - $pause->updatevon = $user; - $pause->insertvon = $user; - $pause->uid = $user; - $pause->aktivitaet_kurzbz = 'Pause'; - $pause->homeoffice = $homeoffice; - $pause->start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - $pause->ende = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - $pause->beschreibung = ''; - if(!$pause->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; - $saveerror = 1; - } - // Eintrag Arbeit ab der Pause - if ($zeit->new == false) - { - $zeit->new = true; - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->insertvon = $user; - } - - $zeit->start = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($bis, $format='Y-m-d H:i:s'); - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; - $saveerror = 1; - } - } - } - elseif (!isset($_POST['genPause'])) - { - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.''; - $saveerror = 1; - } - } - - if ($saveerror == 0) - { - echo ''.$p->t("global/datenWurdenGespeichert").''; - // Nach dem Speichern in den neu Modus springen und als Von Zeit // das Ende des letzten Eintrages eintragen $zeitaufzeichnung_id = ''; - $uid = $zeit->uid; + $uid = $user; $aktivitaet_kurzbz = ''; - $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)); - $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)+3600); + $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))); + $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))+3600); $beschreibung = ''; $oe_kurzbz_1 = ''; $oe_kurzbz_2 = ''; @@ -1183,7 +889,6 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } } - //Datensatz loeschen if(isset($_GET['type']) && $_GET['type']=='delete') { @@ -1193,13 +898,16 @@ if(isset($_GET['type']) && $_GET['type']=='delete') { if ($zeit->start < $sperrdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; else { if($zeit->uid==$user) { if($zeit->delete($zeitaufzeichnung_id)) + { + $zeitaufzeichnung_id = ''; echo ''.$p->t("global/eintragWurdeGeloescht").''; + } else echo ''.$p->t("global/fehlerBeimLoeschenDesEintrags").''; } @@ -1254,7 +962,6 @@ if (isset($_GET['type']) && $_GET['type'] == 'edit') } } - //Projekte holen zu denen der Benutzer zugeteilt ist $projekt = new projekt(); @@ -1266,13 +973,19 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo "
' . $db->convert_html_chars($uid) . '
@@ -1291,13 +1004,32 @@ if ($projekt->getProjekteMitarbeiter($user, true)) } echo '

'.$p->t("urlaubstool/meineZeitsperren").'

'; echo $p->t("zeitaufzeichnung/supportAnfragen"); - echo ' - -
- ".$p->t("zeitaufzeichnung/neu")." | + ".$p->t("zeitaufzeichnung/neu")." | "; - CSV Import | + if (!$adminView) + { + echo + " + CSV Import | - CSV Export | + CSV Export | + "; + } - Projektübersichtexport"; + echo " Projektübersichtexport"; if($anzprojekte > 0) echo " | ".$p->t("zeitaufzeichnung/projektexport").""; echo "
'; + + //Dropdown timesheets Mitarbeiter + if ($untergebenen_arr) + { + $mitarbeiter = new mitarbeiter(); + $mitarbeiter->getMitarbeiterArray($untergebenen_arr); + + echo " +

+ + "; + } + echo ' + '; echo ''; - - echo ''; + echo ' - - - '; - - - - $tag=$datumtag; - $tagessumme='00:00'; - $pausesumme='00:00'; - $elsumme='00:00'; - $ersumme = '00:00'; - $extlehrearr = array(); - $tagesbeginn = ''; - $tagesende = ''; - $pflichtpause = false; - $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); - //} - //else - //{ - // echo ''; - //} + $lang = getSprache(); + if ($lang == 'German') + $langindex = 1; + else + $langindex = 2; + echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').''.$zeitsperre_text.''.$pausefehlt_str; + if ($ersumme != '00:00') + $erstr = ' (+ '.$ersumme.' ER)'; + else + { + $erstr = ''; + } + echo ' + + + '; + $tag=$datumtag; + $tagessumme='00:00'; + $pausesumme='00:00'; + $elsumme='00:00'; + $ersumme = '00:00'; + $extlehrearr = array(); + $tagesbeginn = ''; + $tagesende = ''; + $pflichtpause = false; + $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); } // Nach jeder Woche eine Summenzeile einfuegen und eine neue Tabelle beginnen @@ -1907,7 +1646,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $ersumme_woche = '00:00'; } - // Diestreisen NEU + // Dienstreisen NEU if (array_key_exists($datumtag, $dr_arr)) { $colspan=($za_simple)?6:8; @@ -1926,8 +1665,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ''; echo ''; echo '\n"; echo "\n"; - echo " \n"; - echo " \n"; + + if (!$adminView) + { + if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) + echo ''.$p->t("global/bearbeiten").''; + } + echo "\n"; + echo " \n"; + echo " \n"; if (($tagesbeginn=='' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s')) > $datum->mktime_fromtimestamp($datum->formatDatum($row->start, $format='Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe') $tagesbeginn = $row->start; @@ -2021,17 +1766,8 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; } - - //echo $p->t("zeitaufzeichnung/gesamtdauer").": ".$db->convert_html_chars($summe); Aukommentiert. Irrelevant } echo '
'; echo ''; + if (isset($_GET['projektexport'])) { $projektexpurl = dirname($_SERVER["PHP_SELF"]) .'/zeitaufzeichnung_projektliste.php'; @@ -1331,10 +1063,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) //Formular echo '
'; -/* echo '
- - '; + echo ''; + else + { + echo ''; + echo '  '; + echo ''; + } + } + echo '
'; - echo '';*/ if (isset($_GET['csvimport'])) { echo ''; @@ -1360,31 +1088,23 @@ if ($projekt->getProjekteMitarbeiter($user, true)) if (isset($_GET['projektübersichtexport'])) { - echo ''; echo ''; echo ''; echo ''; echo ''; - } //Aktivitaet echo ''; echo ' + + + '; + //Zeitsperren + echo '

'; + //Homeoffice Checkbox echo ' @@ -1634,23 +1363,30 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; - //Beschreibung - echo ''; - echo ''; - else - { - echo ''; - echo '  '; - echo ''; - } - echo '


CSV-Export

'.$p->t("zeitaufzeichnung/aktivitaet").''; - //if ($za_simple == 1) - $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; - //else - // $qry = "SELECT * FROM fue.tbl_aktivitaet where sort != 5 or sort is null ORDER by sort,beschreibung"; + + $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; + if($result = $db->db_query($qry)) { echo '
'.$p->t("zeitaufzeichnung/organisationseinheiten").'
  +

+
'.$p->t("global/von").' - '.$p->t("global/bis").' @@ -1621,6 +1347,9 @@ if ($projekt->getProjekteMitarbeiter($user, true))
'.$p->t("global/beschreibung").'
'; - //SpeichernButton - if($zeitaufzeichnung_id=='') - echo '
'; + if (!$adminView) + { + //Beschreibung + echo '
'.$p->t("global/beschreibung").'
'; + //SpeichernButton + if($zeitaufzeichnung_id == '') + echo '
'; + echo '


'; - echo '


'; + if (!$adminView) + { + echo '
'; + } + echo '
'; // Summen Lehre anzeigen $bv = new bisverwendung(); @@ -1695,7 +1431,8 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ''; else echo ''; - //echo ''; + + $za = new zeitaufzeichnung(); if(isset($_GET['filter'])) @@ -1713,8 +1450,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $dr->getDienstreisenUser($user, 180); $dr_arr = $dr->result; - //var_dump($dr->result); - if(count($za->result)>0) { //Uebersichtstabelle @@ -1755,112 +1490,116 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $tag = $datumtag; if($tag!=$datumtag) { + if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') + $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; + else + $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; - //if ($row->uid) - //{ - if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') - $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; - else - $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; + // zeitsperren anzeigen + if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) + { + $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; + $style = 'style="background-color:#cccccc; font-size: 8pt;"'; + } + else + $zeitsperre_text = ''; + if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) + $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; - // zeitsperren anzeigen - if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) + list($h1, $m1) = explode(':', $pausesumme); + $pausesumme = $h1*3600+$m1*60; + $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; + foreach($extlehrearr as $el) + { + if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) + $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); + } + list($h2, $m2) = explode(':', $elsumme); + $elsumme = $h2*3600+$m2*60; + if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') + { + $pausesumme = $pausesumme; + } + else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) + { + $pausesumme = $tagessaldo-18000; + } + else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) + { + $pausesumme = $pausesumme+1800; + } + + if ($elsumme > 0){ + $pausesumme = $pausesumme + $elsumme; + $pflichtpause = true; + } + + $tagessaldo = $tagessaldo-$pausesumme; + // fehlende Pausen berechnen + $pausefehlt_str = ''; + + //Prüfung auf azgrelevant und blockierende Pausenfehler + $linkExclamation = APP_ROOT. 'skin/images/exclamation.png'; + $linkInformation = APP_ROOT. 'skin/images/information.png'; + + $za = new zeitaufzeichnung(); + $verwendung = new bisverwendung(); + if ($za->checkPausenErrors($user, $tag)) + { + $verwendung->getVerwendungDatum($user, $tag); + foreach ($verwendung->result as $v) { - $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; - $style = 'style="background-color:#cccccc; font-size: 8pt;"'; + if ($v->azgrelevant) + { + $pausefehlt_str = ' -- Pause fehlt oder zu kurz -- '; + } + else + { + $pausefehlt_str = ' -- Pause fehlt --'; + } } - else - $zeitsperre_text = ''; - //var_dump($zs->result); - if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) - $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; + } - list($h1, $m1) = explode(':', $pausesumme); - $pausesumme = $h1*3600+$m1*60; - $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; - foreach($extlehrearr as $el) - { - if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) - $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); - } - list($h2, $m2) = explode(':', $elsumme); - $elsumme = $h2*3600+$m2*60; - if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') - { - $pausesumme = $pausesumme; - } - else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) - { - $pausesumme = $tagessaldo-18000; - } - else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) - { - $pausesumme = $pausesumme+1800; - } + $tagessaldo = date('H:i', ($tagessaldo)); + $colspan = ($za_simple)?6:8; + echo '
'; - if ($elsumme > 0){ - $pausesumme = $pausesumme + $elsumme; - $pflichtpause = true; - } + // Zusaetzlicher span fuer Addon Informationen - $tagessaldo = $tagessaldo-$pausesumme; - // fehlende Pausen berechnen - $pausefehlt_str = ''; - if ($tagessaldo > 19800 && $pausesumme < 1800) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; - elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; - - - $tagessaldo = date('H:i', ($tagessaldo)); - $colspan = ($za_simple)?6:8; - echo '
'; - - // Zusaetzlicher span fuer Addon Informationen - - $lang = getSprache(); - if ($lang == 'German') - $langindex = 1; - else - $langindex = 2; - echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').''.$zeitsperre_text.''.$pausefehlt_str; - if ($ersumme != '00:00') - $erstr = ' (+ '.$ersumme.' ER)'; - else - { - $erstr = ''; - } - echo ' - '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
- '.$p->t("zeitaufzeichnung/pause").': -
'.$tagessaldo.$erstr.'
'.date('H:i', ($pausesumme-3600)).'
'; - if ($tag > $sperrdatum) - echo '<-'; - - echo '
'.$datum->formatDatum($row->datum,'D d.m.Y').'
+ '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
+ '.$p->t("zeitaufzeichnung/pause").': +
'.$tagessaldo.$erstr.'
'.date('H:i', ($pausesumme-3600)).'
'; + if ($tag > $sperrdatum) + echo '<-'; + echo '
'; -// if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) -// echo ''.$p->t("global/bearbeiten").''; echo ""; if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) @@ -1991,14 +1728,22 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '.$db->convert_html_chars($row->diff).' beschreibung)).'">'.StringCut($db->convert_html_chars($row->beschreibung),20,null,'...').' '; - if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) - echo ''.$p->t("global/bearbeiten").''; - echo ""; - if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) - echo ''.$p->t("global/loeschen").''; - echo "
"; + + if (!$adminView) + { + if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) + echo ''.$p->t("global/loeschen").''; + } + echo "
'; - /* - } - else - { - echo $p->t("zeitaufzeichnung/sieSindDerzeitKeinenProjektenZugeordnet"); - } - */ } else { diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index ce00eabc1..c96e816df 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -48,6 +48,11 @@ $sprache_index = $sprache_obj->index; $uid = get_uid(); +$mitarbeiter = new mitarbeiter(); +$mitarbeiter->getUntergebene($uid, true); +$untergebenen_arr = array(); +$untergebenen_arr = $mitarbeiter->untergebene; + //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung //des uebergebenen Users anzeigen if (isset($_GET['uid'])) @@ -55,7 +60,7 @@ if (isset($_GET['uid'])) $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); - if ($rechte->isBerechtigt('admin')) + if ($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr))) { $uid = $_GET['uid']; } @@ -74,9 +79,9 @@ $year = $_GET['projexpjahr']; $monthtext = $monatsname[$sprache_index][$month - 1]; $username = $benutzer->vorname." ".$benutzer->nachname; -$mitarbeiter = new mitarbeiter(); $mitarbeiter->load($uid); $persnr = $mitarbeiter->personalnummer; + $daysinmonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); $date = new datum(); diff --git a/cis/private/tools/zeitaufzeichnung_projektphasen.php b/cis/private/tools/zeitaufzeichnung_projektphasen.php index cd0acc0bd..053f38b91 100644 --- a/cis/private/tools/zeitaufzeichnung_projektphasen.php +++ b/cis/private/tools/zeitaufzeichnung_projektphasen.php @@ -27,12 +27,18 @@ require_once('../../../include/projektphase.class.php'); require_once('../../../include/datum.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/phrasen.class.php'); +require_once('../../../include/mitarbeiter.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); $user = get_uid(); +$mitarbeiter = new mitarbeiter(); +$mitarbeiter->getUntergebene($user, true); +$untergebenen_arr = array(); +$untergebenen_arr = $mitarbeiter->untergebene; + //Wenn User Administrator ist und UID uebergeben wurde, dann die Phasen //des uebergebenen Users anzeigen if (isset($_GET['uid']) && $user != $_GET['uid']) @@ -40,7 +46,7 @@ if (isset($_GET['uid']) && $user != $_GET['uid']) $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); - if ($rechte->isBerechtigt('admin')) + if ($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr))) { $user = $_GET['uid']; } diff --git a/cis/private/tools/zeitaufzeichnung_zeitsperren.php b/cis/private/tools/zeitaufzeichnung_zeitsperren.php new file mode 100644 index 000000000..47611ba6f --- /dev/null +++ b/cis/private/tools/zeitaufzeichnung_zeitsperren.php @@ -0,0 +1,68 @@ + + */ +/** + * Checks, if there is a zeitsperre for a certain date. It should not be possible + * to add a zeitaufzeichnung with a holiday (or else) entry on the same day. + */ + + +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/globals.inc.php'); +require_once('../../../include/phrasen.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/zeitsperre.class.php'); + +header('Content-Type: application/json; charset=utf-8'); +$sprache = getSprache(); +$p = new phrasen($sprache); + +if ( isset($_GET['day']) ) +{ + $auth = new authentication(); + $uid = $auth->getUser(); + $day = $_GET['day']; + + $zs = new zeitsperre(); + $sperreVorhanden = false; + $typ = ''; + $zs->getSperreByDate($uid, $day, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN); + $result_obj = array(); + $now = new DateTime($day); + $now = $now->format('d.m.Y'); + + foreach ($zs->result as $z) + { + if ($z->zeitsperretyp_kurzbz) + { + $item['typ'] = $z->zeitsperretyp_kurzbz; + $item['day'] = $now; + $item['sperreVorhanden'] = true; + $result_obj[] = $item; + } + } + echo json_encode($result_obj); +} else { + http_response_code(500); + echo json_encode(array( + array( + "error" => 'missing parameter day' + ) + )); +} diff --git a/cis/testtool/login.php b/cis/testtool/login.php index a738c0a88..df4874a4c 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -55,7 +55,7 @@ if (isset($_GET['logout']) && $_GET['logout'] == true) echo ' diff --git a/cis/testtool/logout.html b/cis/testtool/logout.html new file mode 100644 index 000000000..58a0b191f --- /dev/null +++ b/cis/testtool/logout.html @@ -0,0 +1,31 @@ + + + + TestTool - FH Technikum Wien + + + + + +
+
+
+
+

Vielen Dank für die Teilnahme an unserem Aufnahmeverfahren.

+

+ Die zuständige Assistenz wird sich in den nächsten Tagen bei Ihnen melden. +

+ Zurück zur Startseite +
+
+

Thank you for participating in our admission procedure.

+

+ The assistant in charge will contact you in the next few days. +

+ Back to startpage +
+
+
+
+ + diff --git a/composer.json b/composer.json index 814a27144..14e2ab141 100644 --- a/composer.json +++ b/composer.json @@ -246,7 +246,7 @@ "afarkas/html5shiv": "3.7.*", - "chriskacerguis/codeigniter-restserver": "3.0.*", + "chriskacerguis/codeigniter-restserver": "3.0.3", "christianbach/tablesorter": "1.0.*", "codeigniter/framework": "3.*", "components/jquery": "3.*", diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 148bd4824..000000000 --- a/composer.lock +++ /dev/null @@ -1,3179 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "9866ac02199f2092a1c27f8490ca349a", - "content-hash": "94017b5c538801e0eecc174607f84e83", - "packages": [ - { - "name": "BlackrockDigital/startbootstrap-sb-admin-2", - "version": "3.3.7.1", - "dist": { - "type": "zip", - "url": "https://github.com/BlackrockDigital/startbootstrap-sb-admin-2/archive/v3.3.7+1.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "afarkas/html5shiv", - "version": "3.7.3", - "source": { - "type": "git", - "url": "https://github.com/aFarkas/html5shiv.git", - "reference": "ed28c56c071bddfe7d635ad88995674957a016be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aFarkas/html5shiv/zipball/ed28c56c071bddfe7d635ad88995674957a016be", - "reference": "ed28c56c071bddfe7d635ad88995674957a016be", - "shasum": "" - }, - "type": "component", - "extra": { - "component": { - "scripts": [ - "dist/html5shiv.js" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "GPL-2.0" - ], - "description": "Defacto way to enable use of HTML5 sectioning elements in legacy Internet Explorer.", - "homepage": "http://paulirish.com/2011/the-history-of-the-html5-shiv/", - "time": "2015-07-20 20:04:00" - }, - { - "name": "alvaro-prieto/colResizable", - "version": "1.6", - "dist": { - "type": "zip", - "url": "https://github.com/alvaro-prieto/colResizable/archive/1.6.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "borgar/textile-js", - "version": "2.0.4", - "dist": { - "type": "zip", - "url": "https://github.com/borgar/textile-js/archive/v2.0.4.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "chriskacerguis/codeigniter-restserver", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/chriskacerguis/codeigniter-restserver.git", - "reference": "3a5ba0dffdebd24cc215ef714b72208c88304203" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/chriskacerguis/codeigniter-restserver/zipball/3a5ba0dffdebd24cc215ef714b72208c88304203", - "reference": "3a5ba0dffdebd24cc215ef714b72208c88304203", - "shasum": "" - }, - "require": { - "codeigniter/framework": "^3.0.4", - "php": ">=5.4.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "application/libraries/Format.php", - "application/libraries/REST_Controller.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Kacerguis", - "role": "Developer" - } - ], - "description": "REST Server for the CodeIgniter framework", - "homepage": "https://github.com/chriskacerguis/codeigniter-restserver", - "time": "2017-09-23 16:44:55" - }, - { - "name": "christianbach/tablesorter", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/akiyatkin/tablesorter.git", - "reference": "cff9cd482f5d3b0905494f77b5930d3a94bb4b5c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/akiyatkin/tablesorter/zipball/cff9cd482f5d3b0905494f77b5930d3a94bb4b5c", - "reference": "cff9cd482f5d3b0905494f77b5930d3a94bb4b5c", - "shasum": "" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "time": "2016-09-02 11:31:54" - }, - { - "name": "codeigniter/framework", - "version": "3.1.11", - "source": { - "type": "git", - "url": "https://github.com/bcit-ci/CodeIgniter.git", - "reference": "b73eb19aed66190c10c9cad476da7c36c271d6dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bcit-ci/CodeIgniter/zipball/b73eb19aed66190c10c9cad476da7c36c271d6dc", - "reference": "b73eb19aed66190c10c9cad476da7c36c271d6dc", - "shasum": "" - }, - "require": { - "php": ">=5.3.7" - }, - "require-dev": { - "mikey179/vfsstream": "1.1.*", - "phpunit/phpunit": "4.* || 5.*" - }, - "suggest": { - "paragonie/random_compat": "Provides better randomness in PHP 5.x" - }, - "type": "project", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The CodeIgniter framework", - "homepage": "https://codeigniter.com", - "time": "2019-09-19 12:08:45" - }, - { - "name": "components/angular.js", - "version": "1.3.16", - "source": { - "type": "git", - "url": "https://github.com/components/angular.js.git", - "reference": "84d0420402cf02b559d210b7286bd9a30655ca33" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/components/angular.js/zipball/84d0420402cf02b559d210b7286bd9a30655ca33", - "reference": "84d0420402cf02b559d210b7286bd9a30655ca33", - "shasum": "" - }, - "type": "component", - "extra": { - "component": { - "name": "angularjs", - "scripts": [ - "angular.js" - ], - "files": [ - "angular-animate.js", - "angular-animate.min.js", - "angular-animate.min.js.map", - "angular-cookies.js", - "angular-cookies.min.js", - "angular-cookies.min.js.map", - "angular-csp.css", - "angular-loader.js", - "angular-loader.min.js", - "angular-loader.min.js.map", - "angular-mocks.js", - "angular-resource.js", - "angular-resource.min.js", - "angular-resource.min.js.map", - "angular-route.js", - "angular-route.min.js", - "angular-route.min.js.map", - "angular-sanitize.js", - "angular-sanitize.min.js", - "angular-sanitize.min.js.map", - "angular-scenario.js", - "angular-touch.js", - "angular-touch.min.js", - "angular-touch.min.js.map", - "angular.min.js", - "angular.min.js.map", - "i18n/angular-locale_af-na.js", - "i18n/angular-locale_af-za.js", - "i18n/angular-locale_af.js", - "i18n/angular-locale_am-et.js", - "i18n/angular-locale_am.js", - "i18n/angular-locale_ar-001.js", - "i18n/angular-locale_ar-ae.js", - "i18n/angular-locale_ar-bh.js", - "i18n/angular-locale_ar-dz.js", - "i18n/angular-locale_ar-eg.js", - "i18n/angular-locale_ar-iq.js", - "i18n/angular-locale_ar-jo.js", - "i18n/angular-locale_ar-kw.js", - "i18n/angular-locale_ar-lb.js", - "i18n/angular-locale_ar-ly.js", - "i18n/angular-locale_ar-ma.js", - "i18n/angular-locale_ar-om.js", - "i18n/angular-locale_ar-qa.js", - "i18n/angular-locale_ar-sa.js", - "i18n/angular-locale_ar-sd.js", - "i18n/angular-locale_ar-sy.js", - "i18n/angular-locale_ar-tn.js", - "i18n/angular-locale_ar-ye.js", - "i18n/angular-locale_ar.js", - "i18n/angular-locale_bg-bg.js", - "i18n/angular-locale_bg.js", - "i18n/angular-locale_bn-bd.js", - "i18n/angular-locale_bn-in.js", - "i18n/angular-locale_bn.js", - "i18n/angular-locale_ca-ad.js", - "i18n/angular-locale_ca-es.js", - "i18n/angular-locale_ca.js", - "i18n/angular-locale_cs-cz.js", - "i18n/angular-locale_cs.js", - "i18n/angular-locale_da-dk.js", - "i18n/angular-locale_da.js", - "i18n/angular-locale_de-at.js", - "i18n/angular-locale_de-be.js", - "i18n/angular-locale_de-ch.js", - "i18n/angular-locale_de-de.js", - "i18n/angular-locale_de-li.js", - "i18n/angular-locale_de-lu.js", - "i18n/angular-locale_de.js", - "i18n/angular-locale_el-cy.js", - "i18n/angular-locale_el-gr.js", - "i18n/angular-locale_el.js", - "i18n/angular-locale_en-as.js", - "i18n/angular-locale_en-au.js", - "i18n/angular-locale_en-bb.js", - "i18n/angular-locale_en-be.js", - "i18n/angular-locale_en-bm.js", - "i18n/angular-locale_en-bw.js", - "i18n/angular-locale_en-bz.js", - "i18n/angular-locale_en-ca.js", - "i18n/angular-locale_en-dsrt-us.js", - "i18n/angular-locale_en-dsrt.js", - "i18n/angular-locale_en-fm.js", - "i18n/angular-locale_en-gb.js", - "i18n/angular-locale_en-gu.js", - "i18n/angular-locale_en-gy.js", - "i18n/angular-locale_en-hk.js", - "i18n/angular-locale_en-ie.js", - "i18n/angular-locale_en-in.js", - "i18n/angular-locale_en-iso.js", - "i18n/angular-locale_en-jm.js", - "i18n/angular-locale_en-mh.js", - "i18n/angular-locale_en-mp.js", - "i18n/angular-locale_en-mt.js", - "i18n/angular-locale_en-mu.js", - "i18n/angular-locale_en-na.js", - "i18n/angular-locale_en-nz.js", - "i18n/angular-locale_en-ph.js", - "i18n/angular-locale_en-pk.js", - "i18n/angular-locale_en-pr.js", - "i18n/angular-locale_en-pw.js", - "i18n/angular-locale_en-sg.js", - "i18n/angular-locale_en-tc.js", - "i18n/angular-locale_en-tt.js", - "i18n/angular-locale_en-um.js", - "i18n/angular-locale_en-us.js", - "i18n/angular-locale_en-vg.js", - "i18n/angular-locale_en-vi.js", - "i18n/angular-locale_en-za.js", - "i18n/angular-locale_en-zw.js", - "i18n/angular-locale_en.js", - "i18n/angular-locale_es-419.js", - "i18n/angular-locale_es-ar.js", - "i18n/angular-locale_es-bo.js", - "i18n/angular-locale_es-cl.js", - "i18n/angular-locale_es-co.js", - "i18n/angular-locale_es-cr.js", - "i18n/angular-locale_es-do.js", - "i18n/angular-locale_es-ea.js", - "i18n/angular-locale_es-ec.js", - "i18n/angular-locale_es-es.js", - "i18n/angular-locale_es-gq.js", - "i18n/angular-locale_es-gt.js", - "i18n/angular-locale_es-hn.js", - "i18n/angular-locale_es-ic.js", - "i18n/angular-locale_es-mx.js", - "i18n/angular-locale_es-ni.js", - "i18n/angular-locale_es-pa.js", - "i18n/angular-locale_es-pe.js", - "i18n/angular-locale_es-pr.js", - "i18n/angular-locale_es-py.js", - "i18n/angular-locale_es-sv.js", - "i18n/angular-locale_es-us.js", - "i18n/angular-locale_es-uy.js", - "i18n/angular-locale_es-ve.js", - "i18n/angular-locale_es.js", - "i18n/angular-locale_et-ee.js", - "i18n/angular-locale_et.js", - "i18n/angular-locale_eu-es.js", - "i18n/angular-locale_eu.js", - "i18n/angular-locale_fa-af.js", - "i18n/angular-locale_fa-ir.js", - "i18n/angular-locale_fa.js", - "i18n/angular-locale_fi-fi.js", - "i18n/angular-locale_fi.js", - "i18n/angular-locale_fil-ph.js", - "i18n/angular-locale_fil.js", - "i18n/angular-locale_fr-be.js", - "i18n/angular-locale_fr-bf.js", - "i18n/angular-locale_fr-bi.js", - "i18n/angular-locale_fr-bj.js", - "i18n/angular-locale_fr-bl.js", - "i18n/angular-locale_fr-ca.js", - "i18n/angular-locale_fr-cd.js", - "i18n/angular-locale_fr-cf.js", - "i18n/angular-locale_fr-cg.js", - "i18n/angular-locale_fr-ch.js", - "i18n/angular-locale_fr-ci.js", - "i18n/angular-locale_fr-cm.js", - "i18n/angular-locale_fr-dj.js", - "i18n/angular-locale_fr-fr.js", - "i18n/angular-locale_fr-ga.js", - "i18n/angular-locale_fr-gf.js", - "i18n/angular-locale_fr-gn.js", - "i18n/angular-locale_fr-gp.js", - "i18n/angular-locale_fr-gq.js", - "i18n/angular-locale_fr-km.js", - "i18n/angular-locale_fr-lu.js", - "i18n/angular-locale_fr-mc.js", - "i18n/angular-locale_fr-mf.js", - "i18n/angular-locale_fr-mg.js", - "i18n/angular-locale_fr-ml.js", - "i18n/angular-locale_fr-mq.js", - "i18n/angular-locale_fr-ne.js", - "i18n/angular-locale_fr-re.js", - "i18n/angular-locale_fr-yt.js", - "i18n/angular-locale_fr.js", - "i18n/angular-locale_gl-es.js", - "i18n/angular-locale_gl.js", - "i18n/angular-locale_gsw-ch.js", - "i18n/angular-locale_gsw.js", - "i18n/angular-locale_gu-in.js", - "i18n/angular-locale_gu.js", - "i18n/angular-locale_he-il.js", - "i18n/angular-locale_he.js", - "i18n/angular-locale_hi-in.js", - "i18n/angular-locale_hi.js", - "i18n/angular-locale_hr-hr.js", - "i18n/angular-locale_hr.js", - "i18n/angular-locale_hu-hu.js", - "i18n/angular-locale_hu.js", - "i18n/angular-locale_id-id.js", - "i18n/angular-locale_id.js", - "i18n/angular-locale_in.js", - "i18n/angular-locale_is-is.js", - "i18n/angular-locale_is.js", - "i18n/angular-locale_it-it.js", - "i18n/angular-locale_it-sm.js", - "i18n/angular-locale_it.js", - "i18n/angular-locale_iw.js", - "i18n/angular-locale_ja-jp.js", - "i18n/angular-locale_ja.js", - "i18n/angular-locale_kn-in.js", - "i18n/angular-locale_kn.js", - "i18n/angular-locale_ko-kr.js", - "i18n/angular-locale_ko.js", - "i18n/angular-locale_ln-cd.js", - "i18n/angular-locale_ln.js", - "i18n/angular-locale_lt-lt.js", - "i18n/angular-locale_lt.js", - "i18n/angular-locale_lv-lv.js", - "i18n/angular-locale_lv.js", - "i18n/angular-locale_ml-in.js", - "i18n/angular-locale_ml.js", - "i18n/angular-locale_mr-in.js", - "i18n/angular-locale_mr.js", - "i18n/angular-locale_ms-my.js", - "i18n/angular-locale_ms.js", - "i18n/angular-locale_mt-mt.js", - "i18n/angular-locale_mt.js", - "i18n/angular-locale_nl-cw.js", - "i18n/angular-locale_nl-nl.js", - "i18n/angular-locale_nl-sx.js", - "i18n/angular-locale_nl.js", - "i18n/angular-locale_no.js", - "i18n/angular-locale_or-in.js", - "i18n/angular-locale_or.js", - "i18n/angular-locale_pl-pl.js", - "i18n/angular-locale_pl.js", - "i18n/angular-locale_pt-br.js", - "i18n/angular-locale_pt-pt.js", - "i18n/angular-locale_pt.js", - "i18n/angular-locale_ro-ro.js", - "i18n/angular-locale_ro.js", - "i18n/angular-locale_ru-ru.js", - "i18n/angular-locale_ru.js", - "i18n/angular-locale_sk-sk.js", - "i18n/angular-locale_sk.js", - "i18n/angular-locale_sl-si.js", - "i18n/angular-locale_sl.js", - "i18n/angular-locale_sq-al.js", - "i18n/angular-locale_sq.js", - "i18n/angular-locale_sr-cyrl-rs.js", - "i18n/angular-locale_sr-latn-rs.js", - "i18n/angular-locale_sr.js", - "i18n/angular-locale_sv-se.js", - "i18n/angular-locale_sv.js", - "i18n/angular-locale_sw-tz.js", - "i18n/angular-locale_sw.js", - "i18n/angular-locale_ta-in.js", - "i18n/angular-locale_ta.js", - "i18n/angular-locale_te-in.js", - "i18n/angular-locale_te.js", - "i18n/angular-locale_th-th.js", - "i18n/angular-locale_th.js", - "i18n/angular-locale_tl.js", - "i18n/angular-locale_tr-tr.js", - "i18n/angular-locale_tr.js", - "i18n/angular-locale_uk-ua.js", - "i18n/angular-locale_uk.js", - "i18n/angular-locale_ur-pk.js", - "i18n/angular-locale_ur.js", - "i18n/angular-locale_vi-vn.js", - "i18n/angular-locale_vi.js", - "i18n/angular-locale_zh-cn.js", - "i18n/angular-locale_zh-hans-cn.js", - "i18n/angular-locale_zh-hk.js", - "i18n/angular-locale_zh-tw.js", - "i18n/angular-locale_zh.js", - "i18n/angular-locale_zu-za.js", - "i18n/angular-locale_zu.js" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Shim repository for Angular.js", - "homepage": "http://angularjs.org", - "time": "2015-06-07 20:10:38" - }, - { - "name": "components/font-awesome", - "version": "4.7.0", - "source": { - "type": "git", - "url": "https://github.com/components/font-awesome.git", - "reference": "885308b939369d147bec93174722786bc2c4eedd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/components/font-awesome/zipball/885308b939369d147bec93174722786bc2c4eedd", - "reference": "885308b939369d147bec93174722786bc2c4eedd", - "shasum": "" - }, - "type": "component", - "extra": { - "component": { - "styles": [ - "css/font-awesome.css" - ], - "files": [ - "css/font-awesome.min.css", - "css/font-awesome.css.map", - "fonts/*" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT", - "OFL-1.1" - ], - "description": "The iconic font designed for use with Twitter Bootstrap.", - "time": "2016-10-25 10:56:23" - }, - { - "name": "components/jquery", - "version": "3.6.0", - "source": { - "type": "git", - "url": "https://github.com/components/jquery.git", - "reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/components/jquery/zipball/6cf38ee1fd04b6adf8e7dda161283aa35be818c3", - "reference": "6cf38ee1fd04b6adf8e7dda161283aa35be818c3", - "shasum": "" - }, - "type": "component", - "extra": { - "component": { - "scripts": [ - "jquery.js" - ], - "files": [ - "jquery.min.js", - "jquery.min.map", - "jquery.slim.js", - "jquery.slim.min.js", - "jquery.slim.min.map" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "JS Foundation and other contributors" - } - ], - "description": "jQuery JavaScript Library", - "homepage": "http://jquery.com", - "time": "2021-03-20 19:13:42" - }, - { - "name": "components/jqueryui", - "version": "1.12.1", - "source": { - "type": "git", - "url": "https://github.com/components/jqueryui.git", - "reference": "44ecf3794cc56b65954cc19737234a3119d036cc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/components/jqueryui/zipball/44ecf3794cc56b65954cc19737234a3119d036cc", - "reference": "44ecf3794cc56b65954cc19737234a3119d036cc", - "shasum": "" - }, - "require": { - "components/jquery": ">=1.6" - }, - "type": "component", - "extra": { - "component": { - "name": "jquery-ui", - "scripts": [ - "jquery-ui.js" - ], - "files": [ - "ui/**", - "themes/**", - "jquery-ui.min.js" - ], - "shim": { - "deps": [ - "jquery" - ], - "exports": "jQuery" - } - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "jQuery UI Team", - "homepage": "http://jqueryui.com/about" - }, - { - "name": "Joern Zaefferer", - "email": "joern.zaefferer@gmail.com", - "homepage": "http://bassistance.de" - }, - { - "name": "Scott Gonzalez", - "email": "scott.gonzalez@gmail.com", - "homepage": "http://scottgonzalez.com" - }, - { - "name": "Kris Borchers", - "email": "kris.borchers@gmail.com", - "homepage": "http://krisborchers.com" - }, - { - "name": "Mike Sherov", - "email": "mike.sherov@gmail.com", - "homepage": "http://mike.sherov.com" - }, - { - "name": "TJ VanToll", - "email": "tj.vantoll@gmail.com", - "homepage": "http://tjvantoll.com" - }, - { - "name": "Corey Frang", - "email": "gnarf37@gmail.com", - "homepage": "http://gnarf.net" - }, - { - "name": "Felix Nagel", - "email": "info@felixnagel.com", - "homepage": "http://www.felixnagel.com" - } - ], - "description": "jQuery UI is a curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library. Whether you're building highly interactive web applications or you just need to add a date picker to a form control, jQuery UI is the perfect choice.", - "time": "2016-09-16 05:47:55" - }, - { - "name": "dapphp/securimage", - "version": "3.6.7", - "source": { - "type": "git", - "url": "https://github.com/dapphp/securimage.git", - "reference": "1ecb884797c66e01a875c058def46c85aecea45b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dapphp/securimage/zipball/1ecb884797c66e01a875c058def46c85aecea45b", - "reference": "1ecb884797c66e01a875c058def46c85aecea45b", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "php": ">=5.4" - }, - "suggest": { - "ext-pdo": "For database storage support", - "ext-pdo_mysql": "For MySQL database support", - "ext-pdo_sqlite": "For SQLite3 database support" - }, - "type": "library", - "autoload": { - "classmap": [ - "securimage.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Drew Phillips", - "email": "drew@drew-phillips.com" - } - ], - "description": "PHP CAPTCHA Library", - "homepage": "https://www.phpcaptcha.org", - "keywords": [ - "Forms", - "anti-spam", - "captcha", - "security" - ], - "abandoned": true, - "time": "2018-03-09 06:07:41" - }, - { - "name": "easyrdf/easyrdf", - "version": "0.9.1", - "source": { - "type": "git", - "url": "https://github.com/easyrdf/easyrdf.git", - "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566", - "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "ext-pcre": "*", - "php": ">=5.2.8" - }, - "require-dev": { - "phpunit/phpunit": "~3.5", - "sami/sami": "~1.4", - "squizlabs/php_codesniffer": "~1.4.3" - }, - "suggest": { - "ml/json-ld": "~1.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "EasyRdf_": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nicholas Humfrey", - "email": "njh@aelius.com", - "homepage": "http://www.aelius.com/njh/", - "role": "Developer" - }, - { - "name": "Alexey Zakhlestin", - "email": "indeyets@gmail.com", - "role": "Developer" - } - ], - "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", - "homepage": "http://www.easyrdf.org/", - "keywords": [ - "Linked Data", - "RDF", - "Semantic Web", - "Turtle", - "rdfa", - "sparql" - ], - "time": "2015-02-27 09:45:49" - }, - { - "name": "fgelinas/timepicker", - "version": "0.3.3", - "source": { - "type": "git", - "url": "https://github.com/fgelinas/timepicker", - "reference": "9aebe413b784696639220bc36b7c1e8a30fda129" - }, - "type": "library" - }, - { - "name": "fzaninotto/faker", - "version": "v1.9.2", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "abandoned": true, - "time": "2020-12-11 09:56:16" - }, - { - "name": "joeldbirch/superfish", - "version": "1.7.9", - "dist": { - "type": "zip", - "url": "https://github.com/joeldbirch/superfish/archive/v1.7.9.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "jquery-archive/jquery-metadata", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/jquery-archive/jquery-metadata.git", - "reference": "e5a9e4315675bf4d68716872ca754e858088f8ab" - }, - "type": "library" - }, - { - "name": "jquery/jqueryV1", - "version": "1.12.4", - "dist": { - "type": "file", - "url": "https://code.jquery.com/jquery-1.12.4.min.js", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "jquery/jqueryV2", - "version": "2.2.4", - "dist": { - "type": "file", - "url": "https://code.jquery.com/jquery-2.2.4.min.js", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "jquery/sizzle", - "version": "1.0", - "dist": { - "type": "zip", - "url": "https://github.com/jquery/sizzle/archive/1.0.0.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "json-forms", - "version": "1.4.0", - "dist": { - "type": "zip", - "url": "https://github.com/brutusin/json-forms/archive/v1.4.0.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "jsoneditor", - "version": "5.5.6", - "dist": { - "type": "zip", - "url": "https://github.com/josdejong/jsoneditor/archive/v5.5.6.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "justinrainbow/json-schema", - "version": "1.3.7", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "87b54b460febed69726c781ab67462084e97a105" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/87b54b460febed69726c781ab67462084e97a105", - "reference": "87b54b460febed69726c781ab67462084e97a105", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "json-schema/json-schema-test-suite": "1.1.0", - "phpdocumentor/phpdocumentor": "~2", - "phpunit/phpunit": "~3.7" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "JsonSchema": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "time": "2014-08-25 02:48:14" - }, - { - "name": "kingsquare/json-schema-form", - "version": "0.6", - "source": { - "type": "git", - "url": "https://github.com/kingsquare/json-schema-form.git", - "reference": "609049fab463e0b7d6d2a2b315e0f58172333b89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kingsquare/json-schema-form/zipball/609049fab463e0b7d6d2a2b315e0f58172333b89", - "reference": "609049fab463e0b7d6d2a2b315e0f58172333b89", - "shasum": "" - }, - "require": { - "justinrainbow/json-schema": "1.3.*", - "twig/twig": "1.*" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonSchemaForm": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "authors": [ - { - "name": "Kingsquare", - "email": "json-schema-form@kingsquare.nl" - } - ], - "description": "A framework-agnostic PHP Implementation for generating simple forms based on json-schema", - "time": "2014-07-10 12:27:19" - }, - { - "name": "ludo/jquery-treetable", - "version": "3.2.0", - "dist": { - "type": "zip", - "url": "https://github.com/ludo/jquery-treetable/archive/3.2.0.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "michelf/php-markdown", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/michelf/php-markdown.git", - "reference": "e1aabe18173231ebcefc90e615565742fc1c7fd9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/e1aabe18173231ebcefc90e615565742fc1c7fd9", - "reference": "e1aabe18173231ebcefc90e615565742fc1c7fd9", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-lib": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Michelf": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "John Gruber", - "homepage": "http://daringfireball.net/" - }, - { - "name": "Michel Fortin", - "email": "michel.fortin@michelf.ca", - "homepage": "https://michelf.ca/", - "role": "Developer" - } - ], - "description": "PHP Markdown", - "homepage": "https://michelf.ca/projects/php-markdown/", - "keywords": [ - "markdown" - ], - "time": "2015-03-01 12:03:08" - }, - { - "name": "ml/iri", - "version": "1.1.4", - "target-dir": "ML/IRI", - "source": { - "type": "git", - "url": "https://github.com/lanthaler/IRI.git", - "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lanthaler/IRI/zipball/cbd44fa913e00ea624241b38cefaa99da8d71341", - "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341", - "shasum": "" - }, - "require": { - "lib-pcre": ">=4.0", - "php": ">=5.3.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "ML\\IRI": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Markus Lanthaler", - "email": "mail@markus-lanthaler.com", - "homepage": "http://www.markus-lanthaler.com", - "role": "Developer" - } - ], - "description": "IRI handling for PHP", - "homepage": "http://www.markus-lanthaler.com", - "keywords": [ - "URN", - "iri", - "uri", - "url" - ], - "time": "2014-01-21 13:43:39" - }, - { - "name": "ml/json-ld", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/lanthaler/JsonLD.git", - "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/c74a1aed5979ed1cfb1be35a55a305fd30e30b93", - "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ml/iri": "^1.1.1", - "php": ">=5.3.0" - }, - "require-dev": { - "json-ld/tests": "1.0", - "phpunit/phpunit": "^4" - }, - "type": "library", - "autoload": { - "psr-4": { - "ML\\JsonLD\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Markus Lanthaler", - "email": "mail@markus-lanthaler.com", - "homepage": "http://www.markus-lanthaler.com", - "role": "Developer" - } - ], - "description": "JSON-LD Processor for PHP", - "homepage": "http://www.markus-lanthaler.com", - "keywords": [ - "JSON-LD", - "jsonld" - ], - "time": "2020-06-16 17:45:06" - }, - { - "name": "moment/momentjs", - "version": "2.24.0", - "dist": { - "type": "zip", - "url": "https://github.com/moment/moment/archive/2.24.0.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "mottie/tablesorter", - "version": "v2.31.3", - "source": { - "type": "git", - "url": "https://github.com/Mottie/tablesorter.git", - "reference": "7202d5faf8105a5ecd1a2b7a653777618713ffe5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Mottie/tablesorter/zipball/7202d5faf8105a5ecd1a2b7a653777618713ffe5", - "reference": "7202d5faf8105a5ecd1a2b7a653777618713ffe5", - "shasum": "" - }, - "require": { - "components/jquery": ">=1.2.6" - }, - "type": "component", - "extra": { - "component": { - "scripts": [ - "dist/js/jquery.tablesorter.combined.js" - ], - "files": "dist/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "(MIT OR GPL-2.0)" - ], - "authors": [ - { - "name": "Christian Bach" - }, - { - "name": "Rob Garrison", - "email": "wowmotty@gmail.com" - } - ], - "description": "tablesorter (FORK) is a jQuery plugin for turning a standard HTML table with THEAD and TBODY tags into a sortable table without page refreshes. tablesorter can successfully parse and sort many types of data including linked data in a cell.", - "homepage": "https://mottie.github.io/tablesorter/", - "keywords": [ - "alphanumeric", - "jquery-plugin", - "natural", - "sort", - "sorting", - "table" - ], - "time": "2020-03-03 13:46:03" - }, - { - "name": "nategood/httpful", - "version": "0.2.20", - "source": { - "type": "git", - "url": "https://github.com/nategood/httpful.git", - "reference": "c1cd4d46a4b281229032cf39d4dd852f9887c0f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nategood/httpful/zipball/c1cd4d46a4b281229032cf39d4dd852f9887c0f6", - "reference": "c1cd4d46a4b281229032cf39d4dd852f9887c0f6", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "type": "library", - "autoload": { - "psr-0": { - "Httpful": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nate Good", - "email": "me@nategood.com", - "homepage": "http://nategood.com" - } - ], - "description": "A Readable, Chainable, REST friendly, PHP HTTP Client", - "homepage": "http://github.com/nategood/httpful", - "keywords": [ - "api", - "curl", - "http", - "requests", - "rest", - "restful" - ], - "time": "2015-10-26 16:11:30" - }, - { - "name": "netcarver/textile", - "version": "v3.7.6", - "source": { - "type": "git", - "url": "https://github.com/textile/php-textile.git", - "reference": "1846fd5aeace2a0dd57c4f770f693d12bcd7fa26" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/textile/php-textile/zipball/1846fd5aeace2a0dd57c4f770f693d12bcd7fa26", - "reference": "1846fd5aeace2a0dd57c4f770f693d12bcd7fa26", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "2.1.*", - "phpunit/phpunit": "5.7.*", - "squizlabs/php_codesniffer": "3.*", - "symfony/yaml": "2.4.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.7-dev" - } - }, - "autoload": { - "psr-4": { - "Netcarver\\Textile\\": "src/Netcarver/Textile/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Textile markup language parser", - "homepage": "https://github.com/textile/php-textile", - "keywords": [ - "document", - "format", - "html", - "language", - "markup", - "parser", - "php-textile", - "plaintext", - "textile" - ], - "time": "2020-01-08 21:13:37" - }, - { - "name": "nicolaskruchten/pivottable", - "version": "2.23.0", - "dist": { - "type": "zip", - "url": "https://github.com/nicolaskruchten/pivottable/archive/v2.23.0.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "olifolkerd/tabulator", - "version": "4.2.7", - "dist": { - "type": "zip", - "url": "https://github.com/olifolkerd/tabulator/archive/4.2.7.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "phpseclib/phpseclib", - "version": "2.0.36", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "a97547126396548c224703a267a30af1592be146" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/a97547126396548c224703a267a30af1592be146", - "reference": "a97547126396548c224703a267a30af1592be146", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", - "squizlabs/php_codesniffer": "~2.0" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "time": "2022-01-30 08:48:36" - }, - { - "name": "rmariuzzo/jquery-checkboxes", - "version": "1.0.7", - "dist": { - "type": "zip", - "url": "https://github.com/rmariuzzo/checkboxes.js/archive/v1.0.7.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "scottjehl/Respond", - "version": "1.4.2", - "dist": { - "type": "zip", - "url": "https://github.com/scottjehl/Respond/archive/1.4.2.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", - "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "time": "2020-10-23 09:01:57" - }, - { - "name": "tapmodo/Jcrop", - "version": "2.0.4", - "dist": { - "type": "zip", - "url": "https://github.com/tapmodo/Jcrop/archive/v2.0.4.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, - { - "name": "tinymce/tinymce", - "version": "4.9.11", - "source": { - "type": "git", - "url": "https://github.com/tinymce/tinymce-dist.git", - "reference": "3a68b67d1120ab89c6760afeb787291703c9a7d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/3a68b67d1120ab89c6760afeb787291703c9a7d5", - "reference": "3a68b67d1120ab89c6760afeb787291703c9a7d5", - "shasum": "" - }, - "type": "component", - "extra": { - "component": { - "scripts": [ - "tinymce.js", - "plugins/*/plugin.js", - "themes/*/theme.js" - ], - "files": [ - "tinymce.min.js", - "plugins/*/plugin.min.js", - "themes/*/theme.min.js", - "skins/**" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-only" - ], - "description": "Web based JavaScript HTML WYSIWYG editor control.", - "homepage": "http://www.tinymce.com", - "keywords": [ - "editor", - "html", - "javascript", - "richtext", - "tinymce", - "wysiwyg" - ], - "time": "2020-07-13 05:29:19" - }, - { - "name": "tomazdragar/SimpleCropper", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/tomazdragar/SimpleCropper.git", - "reference": "9750b81fa55ed07b3b429297d18ffbeac07a2cde" - }, - "type": "library" - }, - { - "name": "twbs/bootstrap", - "version": "v3.4.1", - "source": { - "type": "git", - "url": "https://github.com/twbs/bootstrap.git", - "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twbs/bootstrap/zipball/68b0d231a13201eb14acd3dc84e51543d16e5f7e", - "reference": "68b0d231a13201eb14acd3dc84e51543d16e5f7e", - "shasum": "" - }, - "replace": { - "twitter/bootstrap": "self.version" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jacob Thornton", - "email": "jacobthornton@gmail.com" - }, - { - "name": "Mark Otto", - "email": "markdotto@gmail.com" - } - ], - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "homepage": "https://getbootstrap.com/", - "keywords": [ - "JS", - "css", - "framework", - "front-end", - "less", - "mobile-first", - "responsive", - "web" - ], - "time": "2019-02-13 15:55:38" - }, - { - "name": "twig/twig", - "version": "v1.42.5", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.42-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_": "lib/" - }, - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "time": "2020-02-11 05:59:23" - }, - { - "name": "zetacomponents/base", - "version": "1.9.3", - "source": { - "type": "git", - "url": "https://github.com/zetacomponents/Base.git", - "reference": "2f432f4117a5aa2164d4fb1784f84db91dbdd3b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Base/zipball/2f432f4117a5aa2164d4fb1784f84db91dbdd3b8", - "reference": "2f432f4117a5aa2164d4fb1784f84db91dbdd3b8", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "~8.0", - "zetacomponents/unit-test": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Sergey Alexeev" - }, - { - "name": "Sebastian Bergmann" - }, - { - "name": "Jan Borsodi" - }, - { - "name": "Raymond Bosman" - }, - { - "name": "Frederik Holljen" - }, - { - "name": "Kore Nordmann" - }, - { - "name": "Derick Rethans" - }, - { - "name": "Vadym Savchuk" - }, - { - "name": "Tobias Schlitt" - }, - { - "name": "Alexandru Stanoi" - } - ], - "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", - "homepage": "https://github.com/zetacomponents", - "time": "2021-07-25 15:46:08" - }, - { - "name": "zetacomponents/database", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/zetacomponents/Database.git", - "reference": "1750d34bf64b62f064c5b1aeb5374fbd06400904" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Database/zipball/1750d34bf64b62f064c5b1aeb5374fbd06400904", - "reference": "1750d34bf64b62f064c5b1aeb5374fbd06400904", - "shasum": "" - }, - "require": { - "zetacomponents/base": "~1.8" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "zetacomponents/database-schema": "~1.5", - "zetacomponents/unit-test": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Sergey Alexeev" - }, - { - "name": "Sebastian Bergmann" - }, - { - "name": "Jan Borsodi" - }, - { - "name": "Raymond Bosman" - }, - { - "name": "Frederik Holljen" - }, - { - "name": "Kore Nordmann" - }, - { - "name": "Derick Rethans" - }, - { - "name": "Vadym Savchuk" - }, - { - "name": "Tobias Schlitt" - }, - { - "name": "Alexandru Stanoi" - }, - { - "name": "Joel Arvidsson" - }, - { - "name": "Friedel Hill" - }, - { - "name": "Christian Michel" - } - ], - "description": "A lightweight database layer on top of PHP's PDO that allows you to utilize a database without having to take care of differences in SQL dialects.", - "homepage": "https://github.com/zetacomponents", - "time": "2017-11-28 10:55:26" - }, - { - "name": "zetacomponents/document", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/zetacomponents/Document.git", - "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Document/zipball/688abfde573cf3fe0730f82538fbd7aa9fc95bc8", - "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8", - "shasum": "" - }, - "require": { - "zetacomponents/base": "*" - }, - "require-dev": { - "zetacomponents/unit-test": "dev-master" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Sebastian Bergmann" - }, - { - "name": "Kore Nordmann" - }, - { - "name": "Derick Rethans" - }, - { - "name": "Tobias Schlitt" - }, - { - "name": "Alexandru Stanoi" - } - ], - "description": "The Document components provides a general conversion framework for different semantic document markup languages like XHTML, Docbook, RST and similar.", - "homepage": "https://github.com/zetacomponents", - "time": "2013-12-19 11:40:00" - }, - { - "name": "zetacomponents/workflow", - "version": "1.5", - "source": { - "type": "git", - "url": "https://github.com/zetacomponents/Workflow.git", - "reference": "44744003c131acc35ee3275a568fbfcb215c3bc8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/Workflow/zipball/44744003c131acc35ee3275a568fbfcb215c3bc8", - "reference": "44744003c131acc35ee3275a568fbfcb215c3bc8", - "shasum": "" - }, - "require": { - "zetacomponents/base": "~1.8" - }, - "require-dev": { - "zetacomponents/unit-test": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Sergey Alexeev" - }, - { - "name": "Sebastian Bergmann" - }, - { - "name": "Jan Borsodi" - }, - { - "name": "Raymond Bosman" - }, - { - "name": "Frederik Holljen" - }, - { - "name": "Kore Nordmann" - }, - { - "name": "Derick Rethans" - }, - { - "name": "Vadym Savchuk" - }, - { - "name": "Tobias Schlitt" - }, - { - "name": "Alexandru Stanoi" - } - ], - "description": "The purpose of the Workflow component is to provide the core functionality of an activity-based workflow system including the definition and execution of workflow specifications.", - "homepage": "https://github.com/zetacomponents", - "time": "2014-09-27 19:26:10" - }, - { - "name": "zetacomponents/workflow-database-tiein", - "version": "1.5", - "source": { - "type": "git", - "url": "https://github.com/zetacomponents/WorkflowDatabaseTiein.git", - "reference": "953af80e8e642b41839275f11ff0301a2a267fde" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/WorkflowDatabaseTiein/zipball/953af80e8e642b41839275f11ff0301a2a267fde", - "reference": "953af80e8e642b41839275f11ff0301a2a267fde", - "shasum": "" - }, - "require": { - "zetacomponents/database": "~1.4", - "zetacomponents/workflow": "~1.4" - }, - "require-dev": { - "zetacomponents/unit-test": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Sergey Alexeev" - }, - { - "name": "Sebastian Bergmann" - }, - { - "name": "Jan Borsodi" - }, - { - "name": "Raymond Bosman" - }, - { - "name": "Frederik Holljen" - }, - { - "name": "Kore Nordmann" - }, - { - "name": "Derick Rethans" - }, - { - "name": "Vadym Savchuk" - }, - { - "name": "Tobias Schlitt" - }, - { - "name": "Alexandru Stanoi" - } - ], - "description": "Contains the database backend for the Workflow component.", - "homepage": "https://github.com/zetacomponents", - "time": "2014-09-27 19:26:10" - }, - { - "name": "zetacomponents/workflow-event-log-tiein", - "version": "1.1", - "source": { - "type": "git", - "url": "https://github.com/zetacomponents/WorkflowEventLogTiein.git", - "reference": "3e157156d1d5aaac6fadaee86c9b884c18a2b86f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zetacomponents/WorkflowEventLogTiein/zipball/3e157156d1d5aaac6fadaee86c9b884c18a2b86f", - "reference": "3e157156d1d5aaac6fadaee86c9b884c18a2b86f", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "apache2" - ], - "authors": [ - { - "name": "Sergey Alexeev" - }, - { - "name": "Sebastian Bergmann" - }, - { - "name": "Jan Borsodi" - }, - { - "name": "Raymond Bosman" - }, - { - "name": "Frederik Holljen" - }, - { - "name": "Kore Nordmann" - }, - { - "name": "Derick Rethans" - }, - { - "name": "Vadym Savchuk" - }, - { - "name": "Tobias Schlitt" - }, - { - "name": "Alexandru Stanoi" - } - ], - "description": "Contains the EventLog listener for the Workflow component.", - "homepage": "https://github.com/zetacomponents", - "time": "2007-12-17 09:04:44" - } - ], - "packages-dev": [ - { - "name": "composer/pcre", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "time": "2022-01-21 20:24:37" - }, - { - "name": "composer/xdebug-handler", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "0c1a3925ec58a4ec98e992b9c7d171e9e184be0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/0c1a3925ec58a4ec98e992b9c7d171e9e184be0a", - "reference": "0c1a3925ec58a4ec98e992b9c7d171e9e184be0a", - "shasum": "" - }, - "require": { - "composer/pcre": "^1", - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "time": "2022-01-04 17:06:45" - }, - { - "name": "nikic/php-parser", - "version": "v4.13.2", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2021-11-30 19:35:32" - }, - { - "name": "pdepend/pdepend", - "version": "2.10.2", - "source": { - "type": "git", - "url": "https://github.com/pdepend/pdepend.git", - "reference": "c8c1d2af43fb8c2b5387d50e9c42a9c56de13686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/c8c1d2af43fb8c2b5387d50e9c42a9c56de13686", - "reference": "c8c1d2af43fb8c2b5387d50e9c42a9c56de13686", - "shasum": "" - }, - "require": { - "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5", - "symfony/filesystem": "^2.3.0|^3|^4|^5" - }, - "require-dev": { - "easy-doc/easy-doc": "0.0.0|^1.2.3", - "gregwar/rst": "^1.0", - "phpunit/phpunit": "^4.8.36|^5.7.27", - "squizlabs/php_codesniffer": "^2.0.0" - }, - "bin": [ - "src/bin/pdepend" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "PDepend\\": "src/main/php/PDepend" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Official version of pdepend to be handled with Composer", - "time": "2021-11-16 20:05:32" - }, - { - "name": "phpmd/phpmd", - "version": "2.11.1", - "source": { - "type": "git", - "url": "https://github.com/phpmd/phpmd.git", - "reference": "08b60a2eb7e14c23f46ff8865b510ae08b75d0fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/08b60a2eb7e14c23f46ff8865b510ae08b75d0fd", - "reference": "08b60a2eb7e14c23f46ff8865b510ae08b75d0fd", - "shasum": "" - }, - "require": { - "composer/xdebug-handler": "^1.0 || ^2.0", - "ext-xml": "*", - "pdepend/pdepend": "^2.10.2", - "php": ">=5.3.9" - }, - "require-dev": { - "easy-doc/easy-doc": "0.0.0 || ^1.3.2", - "ext-json": "*", - "ext-simplexml": "*", - "gregwar/rst": "^1.0", - "mikey179/vfsstream": "^1.6.8", - "phpunit/phpunit": "^4.8.36 || ^5.7.27", - "squizlabs/php_codesniffer": "^2.0" - }, - "bin": [ - "src/bin/phpmd" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPMD\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Manuel Pichler", - "email": "github@manuel-pichler.de", - "homepage": "https://github.com/manuelpichler", - "role": "Project Founder" - }, - { - "name": "Marc Würth", - "email": "ravage@bluewin.ch", - "homepage": "https://github.com/ravage84", - "role": "Project Maintainer" - }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" - } - ], - "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "https://phpmd.org/", - "keywords": [ - "mess detection", - "mess detector", - "pdepend", - "phpmd", - "pmd" - ], - "time": "2021-12-17 11:25:43" - }, - { - "name": "phpmetrics/phpmetrics", - "version": "v2.7.4", - "source": { - "type": "git", - "url": "https://github.com/phpmetrics/PhpMetrics.git", - "reference": "e6a7aee0e0948e363eb78ce9d58573cd5af2cdec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpmetrics/PhpMetrics/zipball/e6a7aee0e0948e363eb78ce9d58573cd5af2cdec", - "reference": "e6a7aee0e0948e363eb78ce9d58573cd5af2cdec", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^3|^4", - "php": ">=5.5" - }, - "replace": { - "halleck45/php-metrics": "*", - "halleck45/phpmetrics": "*" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14", - "sebastian/comparator": ">=1.2.3", - "squizlabs/php_codesniffer": "^3.5" - }, - "bin": [ - "bin/phpmetrics" - ], - "type": "library", - "autoload": { - "psr-0": { - "Hal\\": "./src/" - }, - "files": [ - "./src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jean-François Lépine", - "email": "lepinejeanfrancois@yahoo.fr", - "homepage": "http://www.lepine.pro", - "role": "Copyright Holder" - } - ], - "description": "Static analyzer tool for PHP : Coupling, Cyclomatic complexity, Maintainability Index, Halstead's metrics... and more !", - "homepage": "http://www.phpmetrics.org", - "keywords": [ - "analysis", - "qa", - "quality", - "testing" - ], - "time": "2020-06-30 20:33:55" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2017-02-26 11:10:40" - }, - { - "name": "psr/container", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "time": "2017-02-14 16:28:37" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2021-05-03 11:20:27" - }, - { - "name": "sebastian/finder-facade", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/finder-facade.git", - "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", - "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", - "shasum": "" - }, - "require": { - "symfony/finder": "~2.3|~3.0|~4.0", - "theseer/fdomdocument": "~1.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", - "homepage": "https://github.com/sebastianbergmann/finder-facade", - "abandoned": true, - "time": "2017-11-18 17:31:49" - }, - { - "name": "sebastian/phpcpd", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/dfed51c1288790fc957c9433e2f49ab152e8a564", - "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564", - "shasum": "" - }, - "require": { - "php": "^5.6|^7.0", - "phpunit/php-timer": "^1.0.6", - "sebastian/finder-facade": "^1.1", - "sebastian/version": "^1.0|^2.0", - "symfony/console": "^2.7|^3.0|^4.0" - }, - "bin": [ - "phpcpd" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Copy/Paste Detector (CPD) for PHP code.", - "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2017-11-16 08:49:28" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03 07:35:21" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "time": "2021-12-12 21:44:58" - }, - { - "name": "symfony/config", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", - "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" - }, - "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Config Component", - "homepage": "https://symfony.com", - "time": "2020-10-24 10:57:07" - }, - { - "name": "symfony/console", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a10b1da6fc93080c180bba7219b5ff5b7518fe81", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2020-10-24 10:57:07" - }, - { - "name": "symfony/debug", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", - "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2020-10-24 10:57:07" - }, - { - "name": "symfony/dependency-injection", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51d2a2708c6ceadad84393f8581df1dcf9e5e84b", - "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" - }, - "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", - "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "psr/container-implementation": "1.0" - }, - "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DependencyInjection Component", - "homepage": "https://symfony.com", - "time": "2020-10-24 10:57:07" - }, - { - "name": "symfony/filesystem", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", - "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2020-10-24 10:57:07" - }, - { - "name": "symfony/finder", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", - "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2020-11-16 17:02:08" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b5f7b932ee6fa802fc792eabd77c4c88084517ce", - "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2020-10-23 09:01:57" - }, - { - "name": "theseer/fdomdocument", - "version": "1.6.7", - "source": { - "type": "git", - "url": "https://github.com/theseer/fDOMDocument.git", - "reference": "5cddd4f9076a9a2b85c5135935bba2dcb3ed7574" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/5cddd4f9076a9a2b85c5135935bba2dcb3ed7574", - "reference": "5cddd4f9076a9a2b85c5135935bba2dcb3ed7574", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "lib-libxml": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "php": ">=7.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "lead" - } - ], - "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", - "homepage": "https://github.com/theseer/fDOMDocument", - "time": "2022-01-25 23:10:35" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.6.40" - }, - "platform-dev": [] -} diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index 64fcb9a7c..9d31548f6 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -254,4 +254,6 @@ define('JAHRESPLAN_TICKET_LINK','https://bug.technikum-wien.at/otrs/index.pl?Act //Gibt an ob der Block zu Verplanung in geteilter Arbeitszeit bei den Zeitwünschen angezeigt wird. Default: false define('CIS_ZEITWUNSCH_GD', false); +// Covid-Status anzeigen +define('CIS_SHOW_COVID_STATUS', false); ?> diff --git a/content/fas.xul.php b/content/fas.xul.php index d1d43f473..19b24b0f0 100644 --- a/content/fas.xul.php +++ b/content/fas.xul.php @@ -903,7 +903,7 @@ foreach($addon_obj->result as $addon) echo ''; //echo ''; echo ''; - echo ''; + echo ''; } if($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter')) { diff --git a/content/fasoverlay.js.php b/content/fasoverlay.js.php index db26a9180..fcdc20228 100644 --- a/content/fasoverlay.js.php +++ b/content/fasoverlay.js.php @@ -741,6 +741,10 @@ function onLektorSelect(event) var uid=tree.view.getCellText(tree.currentIndex,col); var stg_idx = tree.view.getParentIndex(tree.currentIndex); + //Wenn der Filter angewendet wurde, gibt es keinen Parent. Daher wird hier der stg_idx auf 0 gesetzt. + if(stg_idx == -1 && uid != '') + stg_idx = 0; + //wenn direkt ein studiengang markiert wurde dann abbrechen if(stg_idx==-1) return; @@ -789,6 +793,58 @@ function onLektorSelect(event) } } +// Lektorenliste aktualisieren +function onLektorRefresh() +{ + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + var treeLektorenTree=document.getElementById('tree-lektor'); + // Input-Feld leeren + document.getElementById('fas-lektor-filter').value = ''; + var url = 'rdf/mitarbeiter.rdf.php?user=true&'+gettimestamp(); + + var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); + var datasource = rdfService.GetDataSource(url); + var oldDatasources = treeLektorenTree.database.GetDataSources(); + + datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); + datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink); + + treeLektorenTree.database.RemoveDataSource(oldDatasources.getNext()); + treeLektorenTree.database.AddDataSource(datasource); + treeLektorenTree.builder.rebuild(); +} + +// Lektorenliste filtern +function onLektorFilter() +{ + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + var filter=document.getElementById('fas-lektor-filter').value; + + var treeLektorenTree=document.getElementById('tree-lektor'); + + if(filter.length>2) + { + var url = 'rdf/mitarbeiter.rdf.php?filter='+encodeURIComponent(filter)+'&'+gettimestamp(); + var oldDatasources = treeLektorenTree.database.GetDataSources(); + + //Refresh damit die entfernten DS auch wirklich entfernt werden + treeLektorenTree.builder.rebuild(); + + var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); + if(typeof(filter)=='undefined') + var datasource = rdfService.GetDataSource(url); + else + var datasource = rdfService.GetDataSourceBlocking(url); + datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); + datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink); + treeLektorenTree.database.RemoveDataSource(oldDatasources.getNext()); + treeLektorenTree.database.AddDataSource(datasource); + if(typeof(filter)!='undefined') + treeLektorenTree.builder.rebuild(); + treeLektorenTree.builder.addListener(LektorTreeListener); + } +} + function loadURL(event) { var contentFrame = document.getElementById('contentFrame'); diff --git a/content/fasoverlay.xul.php b/content/fasoverlay.xul.php index 51564dc19..eea32279b 100644 --- a/content/fasoverlay.xul.php +++ b/content/fasoverlay.xul.php @@ -133,52 +133,68 @@ echo ' - - - - - + + + + + + + + + + + + + + + + - - + + +