mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-24 23:49:28 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -31,6 +31,13 @@ define('EXIT_VALIDATION_UDF_NOT_VALID_VAL', 17); // UDF validation has been fail
|
||||
define('EXIT_AUTO_MIN', 1000); // lowest automatically-assigned error code
|
||||
define('EXIT_AUTO_MAX', 2000); // highest automatically-assigned error code
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| General purpose
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
define('BEGINNING_OF_TIME', '1970-01-01');
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication constants
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
// White list of permissions (write mode have to be set) that are able to store a specific job type in database
|
||||
$config['job_type_permissions_white_list'] = array(
|
||||
'SAPStammdatenUpdate' => array(
|
||||
'admin:rw',
|
||||
'developer:rw'
|
||||
),
|
||||
'OEHPayment' => 'developer:rw',
|
||||
'SAPPayment' => 'developer:rw'
|
||||
);
|
||||
|
||||
@@ -109,6 +109,13 @@ $config['navigation_header'] = array(
|
||||
'expand' => true,
|
||||
'sort' => 20,
|
||||
'requiredPermissions' => 'system/developer:r'
|
||||
),
|
||||
'jobsqueueviewer' => array(
|
||||
'link' => site_url('system/jq/JobsQueueViewer'),
|
||||
'description' => 'Jobs Queue Viewer',
|
||||
'expand' => true,
|
||||
'sort' => 20,
|
||||
'requiredPermissions' => 'system/developer:r'
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -51,7 +51,14 @@ class Pruefungsprotokoll extends Auth_Controller
|
||||
public function index()
|
||||
{
|
||||
$this->load->library('WidgetLib');
|
||||
$this->load->view('lehre/pruefungsprotokollUebersicht.php');
|
||||
|
||||
// Protokolle anzeigen seit heute / letzte Woche / alle
|
||||
$period = $this->input->post('period');
|
||||
$period = (!is_null($period)) ? $period : 'today';
|
||||
|
||||
$data = array('period' => $period);
|
||||
|
||||
$this->load->view('lehre/pruefungsprotokollUebersicht.php', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -35,7 +35,7 @@ class LogsViewer extends Auth_Controller
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Main page of the InfoCenter tool
|
||||
* Everything has a beginning
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller acts as REST JSON interface between the JobsQueueLib, that contains all the needed functionalities to
|
||||
* operate with the Jobs Queue System, and other tools that cannot access directly to such library
|
||||
*/
|
||||
class JobsQueueManager extends Auth_Controller
|
||||
{
|
||||
// Config entry name for White list of permissions...
|
||||
const JOB_TYPE_PERMISSIONS_WHITE_LIST = 'job_type_permissions_white_list';
|
||||
// Parameter names
|
||||
const PARAM_JOBS = 'jobs';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'getLastJobs' => 'admin:r',
|
||||
'addNewJobsToQueue' => 'admin:rw',
|
||||
'updateJobsQueue' => 'admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Loading config file jqm
|
||||
$this->config->load('jqm');
|
||||
|
||||
// Loads JobsQueueLib
|
||||
$this->load->library('JobsQueueLib');
|
||||
// Loads permission lib
|
||||
$this->load->library('PermissionLib');
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* To get all the most recently added jobs using the given job type
|
||||
*/
|
||||
public function getLastJobs()
|
||||
{
|
||||
$type = $this->input->get(JobsQueueLib::PROPERTY_TYPE);
|
||||
|
||||
$this->_checkPermissions($type);
|
||||
|
||||
$this->outputJson($this->jobsqueuelib->getLastJobs($type));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new jobs in the jobs queue with the given type
|
||||
* jobs is an array of job objects
|
||||
*/
|
||||
public function addNewJobsToQueue()
|
||||
{
|
||||
$type = $this->input->post(JobsQueueLib::PROPERTY_TYPE);
|
||||
$jobs = $this->input->post(self::PARAM_JOBS);
|
||||
|
||||
$this->_checkPermissions($type);
|
||||
|
||||
// Otherwise convert jobs from json to php and call JobsQueueLib library
|
||||
$this->outputJson($this->jobsqueuelib->addNewJobsToQueue($type, $this->_convertJobs($jobs)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new jobs in the jobs queue with the given type
|
||||
* jobs is an array of job objects
|
||||
*/
|
||||
public function updateJobsQueue()
|
||||
{
|
||||
$type = $this->input->post(JobsQueueLib::PROPERTY_TYPE);
|
||||
$jobs = $this->input->post(self::PARAM_JOBS);
|
||||
|
||||
$this->_checkPermissions($type);
|
||||
|
||||
// Otherwise convert jobs from json to php and call JobsQueueLib library
|
||||
$this->outputJson($this->jobsqueuelib->updateJobsQueue($type, $this->_convertJobs($jobs)));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private function _checkPermissions($type)
|
||||
{
|
||||
// Checks if the caller has the permissions to add new jobs with the given type in the queue
|
||||
if (!$this->permissionlib->isEntitled($this->config->item(self::JOB_TYPE_PERMISSIONS_WHITE_LIST), $type))
|
||||
{
|
||||
// Permissions NOT valid
|
||||
$this->terminateWithJsonError('You are not allowed to access to this content');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private function _convertJobs($jobs)
|
||||
{
|
||||
if (isEmptyArray($jobs)) return null; // if not a valid array then return null
|
||||
|
||||
$convertedJobsArray = array(); // returned values
|
||||
|
||||
// Loops through all the provided jobs
|
||||
foreach ($jobs as $job)
|
||||
{
|
||||
$tmpObj = json_decode($job); // Try to decode json to php
|
||||
|
||||
// If decode was a success
|
||||
if ($tmpObj != null)
|
||||
{
|
||||
$convertedJobsArray[] = $tmpObj; // then store the decoded object in the result array
|
||||
}
|
||||
else // otherwise
|
||||
{
|
||||
// Create a new object and store the error message in it
|
||||
$tmpObj = new stdClass();
|
||||
$tmpObj->{JobsQueueLib::PROPERTY_ERROR} = 'A not valid json was provided';
|
||||
|
||||
$convertedJobsArray[] = $tmpObj; // store this object into the result array
|
||||
}
|
||||
}
|
||||
|
||||
return $convertedJobsArray;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Jobs Queue Viewer
|
||||
*
|
||||
* This controller renders a FilterWidget to monitor the current status of the Jobs Queue System
|
||||
*/
|
||||
class JobsQueueViewer extends Auth_Controller
|
||||
{
|
||||
const PARAM_START_DATE = 'startDate';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'system/developer:r'
|
||||
)
|
||||
);
|
||||
|
||||
// Loads WidgetLib
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Loads JobsQueueLib
|
||||
$this->load->library('JobsQueueLib');
|
||||
|
||||
// Loads phrases system
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'global',
|
||||
'ui',
|
||||
'filter'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Everything has a beginning
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view('system/jq/jobsQueueViewer.php');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
if (!defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
/**
|
||||
* Job Queue Worker
|
||||
*
|
||||
* This controller acts as interface of the JobsQueueLib that contains all the needed functionalities to operate with
|
||||
* the Jobs Queue System
|
||||
* This is an abstract class that provide basic functionalities, it has to be extended to broaden its logic
|
||||
*/
|
||||
abstract class JQW_Controller extends JOB_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Loads LogLib with different parameters
|
||||
$this->load->library('LogLib', array(
|
||||
'classIndex' => 5,
|
||||
'functionIndex' => 5,
|
||||
'lineIndex' => 4,
|
||||
'dbLogType' => 'job', // required
|
||||
'dbExecuteUser' => 'Jobs queue system'
|
||||
));
|
||||
|
||||
// Loads JobsQueueLib library
|
||||
$this->load->library('JobsQueueLib');
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Protected methods
|
||||
|
||||
/**
|
||||
* To get all the most recently added jobs using the given job type
|
||||
*/
|
||||
protected function getLastJobs($type)
|
||||
{
|
||||
$jobs = $this->jobsqueuelib->getLastJobs($type);
|
||||
|
||||
// If an error occurred then log it in database
|
||||
if (isError($jobs)) $this->logError(getError($jobs), $type);
|
||||
|
||||
return $jobs;
|
||||
}
|
||||
|
||||
/**
|
||||
* To get all the jobs specified by the given parameters
|
||||
*/
|
||||
protected function getJobsByTypeStatusInput($type, $status, $input)
|
||||
{
|
||||
$jobs = $this->jobsqueuelib->getJobsByTypeStatusInput($type, $status, $input);
|
||||
|
||||
// If an error occurred then log it in database
|
||||
if (isError($jobs)) $this->logError(getError($jobs), array($type, $status, $input));
|
||||
|
||||
return $jobs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new jobs in the jobs queue with the given type
|
||||
* jobs is an array of job objects
|
||||
*/
|
||||
protected function addNewJobsToQueue($type, $jobs)
|
||||
{
|
||||
$result = $this->jobsqueuelib->addNewJobsToQueue($type, $jobs);
|
||||
|
||||
// If an error occurred then log it in database
|
||||
if (isError($result)) $this->logError(getError($result), $type);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates jobs already present in the jobs queue
|
||||
* jobs is an array of job objects
|
||||
*/
|
||||
protected function updateJobsQueue($type, $jobs)
|
||||
{
|
||||
$result = $this->jobsqueuelib->updateJobsQueue($type, $jobs);
|
||||
|
||||
// If an error occurred then log it in database
|
||||
if (isError($result)) $this->logError(getError($result), $type);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to update the specified properties of the given jobs with the given values
|
||||
*/
|
||||
protected function updateJobs($jobs, $properties, $values)
|
||||
{
|
||||
// If not valid arrays of properties and values arrays are not of the same size then exit
|
||||
if (isEmptyArray($jobs) || isEmptyArray($properties) || isEmptyArray($values)) return;
|
||||
if (count($properties) != count($values)) return;
|
||||
|
||||
// For each job
|
||||
foreach ($jobs as $job)
|
||||
{
|
||||
// For each propery of the job
|
||||
for ($pI = 0; $pI < count($properties); $pI++)
|
||||
{
|
||||
// If this property is present in the job object
|
||||
if (property_exists($job, $properties[$pI]))
|
||||
{
|
||||
$job->{$properties[$pI]} = $values[$pI]; // set a new value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to generate a job with the given parameters and return it inside an array
|
||||
* ready to be used by addNewJobsToQueue and updateJobsQueue
|
||||
*/
|
||||
protected function generateJobs($status, $input)
|
||||
{
|
||||
$job = new stdClass();
|
||||
|
||||
$job->{JobsQueueLib::PROPERTY_STATUS} = $status;
|
||||
$job->{JobsQueueLib::PROPERTY_INPUT} = $input;
|
||||
|
||||
return array($job);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,3 +301,45 @@ function isLogged()
|
||||
|
||||
return isset($ci->authlib) && $ci->authlib->getAuthObj() != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Konvertiert Problematische Sonderzeichen in Strings fuer
|
||||
* Accountnamen und EMail-Aliase
|
||||
*
|
||||
* @param $str
|
||||
* @return bereinigter String
|
||||
*/
|
||||
function sanitizeProblemChars($str)
|
||||
{
|
||||
$enc = 'UTF-8';
|
||||
|
||||
$acentos = array(
|
||||
'A' => '/À|Á|Â|Ã|Å/',
|
||||
'Ae' => '/Ä/',
|
||||
'a' => '/à|á|â|ã|å/',
|
||||
'ae'=> '/ä/',
|
||||
'C' => '/Ç/',
|
||||
'c' => '/ç/',
|
||||
'E' => '/È|É|Ê|Ë/',
|
||||
'e' => '/è|é|ê|ë/',
|
||||
'I' => '/Ì|Í|Î|Ï/',
|
||||
'i' => '/ì|í|î|ï/',
|
||||
'N' => '/Ñ/',
|
||||
'n' => '/ñ/',
|
||||
'O' => '/Ò|Ó|Ô|Õ/',
|
||||
'Oe' => '/Ö/',
|
||||
'o' => '/ò|ó|ô|õ/',
|
||||
'oe' => '/ö/',
|
||||
'U' => '/Ù|Ú|Û/',
|
||||
'Ue' => '/Ü/',
|
||||
'u' => '/ù|ú|û/',
|
||||
'ue' => '/ü/',
|
||||
'Y' => '/Ý/',
|
||||
'y' => '/ý|ÿ/',
|
||||
'a.' => '/ª/',
|
||||
'o.' => '/º/',
|
||||
'ss' => '/ß/'
|
||||
);
|
||||
|
||||
return preg_replace($acentos, array_keys($acentos), htmlentities($str,ENT_NOQUOTES, $enc));
|
||||
}
|
||||
|
||||
@@ -93,6 +93,7 @@ class FilterWidgetLib
|
||||
const OP_NOT_SET = 'nset';
|
||||
|
||||
// Filter options values
|
||||
const OPT_HOURS = 'hours';
|
||||
const OPT_DAYS = 'days';
|
||||
const OPT_MONTHS = 'months';
|
||||
|
||||
@@ -884,7 +885,8 @@ class FilterWidgetLib
|
||||
// It it's a date type
|
||||
if (is_numeric($filterDefinition->condition)
|
||||
&& isset($filterDefinition->option)
|
||||
&& ($filterDefinition->option == self::OPT_DAYS
|
||||
&& ($filterDefinition->option == self::OPT_HOURS
|
||||
|| $filterDefinition->option == self::OPT_DAYS
|
||||
|| $filterDefinition->option == self::OPT_MONTHS))
|
||||
{
|
||||
$condition = '< (NOW() - \''.$filterDefinition->condition.' '.$filterDefinition->option.'\'::interval)';
|
||||
@@ -899,7 +901,8 @@ class FilterWidgetLib
|
||||
// It it's a date type
|
||||
if (is_numeric($filterDefinition->condition)
|
||||
&& isset($filterDefinition->option)
|
||||
&& ($filterDefinition->option == self::OPT_DAYS
|
||||
&& ($filterDefinition->option == self::OPT_HOURS
|
||||
|| $filterDefinition->option == self::OPT_DAYS
|
||||
|| $filterDefinition->option == self::OPT_MONTHS))
|
||||
{
|
||||
$condition = '> (NOW() - \''.$filterDefinition->condition.' '.$filterDefinition->option.'\'::interval)';
|
||||
|
||||
@@ -0,0 +1,370 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Library that contains all the needed functionalities to operate with the Jobs Queue System
|
||||
*/
|
||||
class JobsQueueLib
|
||||
{
|
||||
// Job statuses
|
||||
const STATUS_NEW = 'new';
|
||||
const STATUS_RUNNING = 'running';
|
||||
const STATUS_DONE = 'done';
|
||||
const STATUS_FAILED = 'failed';
|
||||
|
||||
// Job object properties
|
||||
const PROPERTY_JOBID = 'jobid';
|
||||
const PROPERTY_CREATIONTIME = 'creationtime';
|
||||
const PROPERTY_TYPE = 'type';
|
||||
const PROPERTY_STATUS = 'status';
|
||||
const PROPERTY_INPUT = 'input';
|
||||
const PROPERTY_OUTPUT = 'output';
|
||||
const PROPERTY_START_TIME = 'starttime';
|
||||
const PROPERTY_END_TIME = 'endtime';
|
||||
const PROPERTY_ERROR = 'error';
|
||||
|
||||
private $_ci; // CI instance
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct($authenticate = true)
|
||||
{
|
||||
// Gets CI instance
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
// Loads all needed models
|
||||
$this->_ci->load->model('system/JobsQueue_model', 'JobsQueueModel');
|
||||
$this->_ci->load->model('system/JobTypes_model', 'JobTypesModel');
|
||||
$this->_ci->load->model('system/JobStatuses_model', 'JobStatusesModel');
|
||||
$this->_ci->load->model('system/JobTriggers_model', 'JobTriggersModel');
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* To get all the most recently added jobs using the given job type
|
||||
*/
|
||||
public function getLastJobs($type)
|
||||
{
|
||||
$this->_ci->JobsQueueModel->resetQuery();
|
||||
|
||||
$this->_ci->JobsQueueModel->addOrder('creationtime', 'DESC');
|
||||
|
||||
return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type));
|
||||
}
|
||||
|
||||
/**
|
||||
* To get all the jobs specified by the given parameters
|
||||
*/
|
||||
public function getJobsByTypeStatusInput($type, $status, $input)
|
||||
{
|
||||
$this->_ci->JobsQueueModel->resetQuery();
|
||||
|
||||
$this->_ci->JobsQueueModel->addOrder('creationtime', 'DESC');
|
||||
|
||||
return $this->_ci->JobsQueueModel->loadWhere(array('status' => $status, 'type' => $type, 'input' => $input));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new jobs in the jobs queue with the given type
|
||||
* jobs is an array of job objects
|
||||
*/
|
||||
public function addNewJobsToQueue($type, $jobs)
|
||||
{
|
||||
// Checks parameters
|
||||
if (isEmptyString($type)) return error('The provided type parameter is not a valid string');
|
||||
if (isEmptyArray($jobs)) return error('The provided jobs parameter is not a valid array');
|
||||
|
||||
// Get all the job types
|
||||
$dbResult = $this->_ci->JobTypesModel->load();
|
||||
if (isError($dbResult)) return $dbResult;
|
||||
$types = getData($dbResult);
|
||||
|
||||
// If the given type is not present in database
|
||||
if (!$this->_checkJobType($type, $types)) return error('The provided type parameter is not valid');
|
||||
|
||||
$results = $jobs; // returned values
|
||||
$errorOccurred = false; // very optimistic
|
||||
|
||||
// Get all the job statuses
|
||||
$dbResult = $this->_ci->JobStatusesModel->load();
|
||||
if (isError($dbResult)) return $dbResult;
|
||||
$statuses = getData($dbResult);
|
||||
|
||||
// Loops through all the provided jobs
|
||||
foreach ($results as $job)
|
||||
{
|
||||
// If the structure of the job object is valid AND the type is valid AND the status is valid
|
||||
if ($this->_checkNewJobStructure($job) && $this->_checkJobStatus($job, $statuses))
|
||||
{
|
||||
$this->_dropNotAllowedPropertiesNewJob($job); // remove the black listed properties from this object
|
||||
|
||||
$job->{self::PROPERTY_TYPE} = $type; // What you asked is what you get!
|
||||
|
||||
// Try to insert the single job into database
|
||||
$dbNewJobResult = $this->_ci->JobsQueueModel->insert($job);
|
||||
|
||||
// If an error occurred during while inserting in database
|
||||
if (isError($dbNewJobResult))
|
||||
{
|
||||
$job->{self::PROPERTY_ERROR} = getError($dbNewJobResult); // retrieve the cause and store it in job object
|
||||
$errorOccurred = true; // set error occurred flag
|
||||
}
|
||||
else // otherwise
|
||||
{
|
||||
$job->{self::PROPERTY_JOBID} = getData($dbNewJobResult); // get the jobid and store it in job object
|
||||
|
||||
$dbNewTriggeredJobResult = $this->_addNewTriggeredJobToQueue($type, $job, array(self::STATUS_NEW));
|
||||
// If an error occurred during while inserting in database
|
||||
if (isError($dbNewTriggeredJobResult)) return $dbNewTriggeredJobResult;
|
||||
}
|
||||
}
|
||||
else // otherwise
|
||||
{
|
||||
$errorOccurred = true; // set error occurred flag
|
||||
}
|
||||
}
|
||||
|
||||
// If an error occurred then returns the results in an error object
|
||||
if ($errorOccurred) return error($results);
|
||||
|
||||
return success($results); // otherwise return results in a success object
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates jobs already present in the jobs queue
|
||||
* jobs is an array of job objects
|
||||
*/
|
||||
public function updateJobsQueue($type, $jobs)
|
||||
{
|
||||
// Checks parameters
|
||||
if (isEmptyArray($jobs)) return error('The provided jobs parameter is not a valid array');
|
||||
|
||||
$results = $jobs; // returned values
|
||||
$errorOccurred = false; // very optimistic
|
||||
|
||||
// Get all the job statuses
|
||||
$dbResultStatuses = $this->_ci->JobStatusesModel->load();
|
||||
if (isError($dbResultStatuses)) return $dbResultStatuses;
|
||||
$statuses = getData($dbResultStatuses);
|
||||
|
||||
// Loops through all the provided jobs
|
||||
foreach ($results as $job)
|
||||
{
|
||||
// Check if the required job is present in the database
|
||||
$dbResultJobs = $this->_ci->JobsQueueModel->load($job->{self::PROPERTY_JOBID});
|
||||
if (isError($dbResultJobs))
|
||||
{
|
||||
$job->{self::PROPERTY_ERROR} = getError($dbResultJobs); // retrieve the cause and store it in job object
|
||||
$errorOccurred = true; // set error occurred flag
|
||||
}
|
||||
elseif (!hasData($dbResultJobs)) // if no jobs were found
|
||||
{
|
||||
$job->{self::PROPERTY_ERROR} = 'The required job is not present';
|
||||
$errorOccurred = true; // set error occurred flag
|
||||
}
|
||||
else // if a job was found then it could be updated
|
||||
{
|
||||
// If the structure of the job object is valid
|
||||
if ($this->_checkUpdateJobStructure($job) && $this->_checkJobStatus($job, $statuses))
|
||||
{
|
||||
$this->_dropNotAllowedPropertiesUpdateJob($job); // remove the black listed properties from this object
|
||||
|
||||
$job->{self::PROPERTY_TYPE} = $type; // What you asked is what you get!
|
||||
|
||||
// Try to update the single job into database
|
||||
$dbResult = $this->_ci->JobsQueueModel->update($job->{self::PROPERTY_JOBID}, (array)$job);
|
||||
|
||||
// If an error occurred during while updating in database
|
||||
if (isError($dbResult))
|
||||
{
|
||||
$job->{self::PROPERTY_ERROR} = getError($dbResult); // retrieve the cause and store it in job object
|
||||
$errorOccurred = true; // set error occurred flag
|
||||
}
|
||||
else // otherwise
|
||||
{
|
||||
$dbNewTriggeredJobResult = $this->_addNewTriggeredJobToQueue(
|
||||
$type,
|
||||
$job,
|
||||
array($job->status)
|
||||
);
|
||||
// If an error occurred during while inserting in database
|
||||
if (isError($dbNewTriggeredJobResult)) return $dbNewTriggeredJobResult;
|
||||
}
|
||||
}
|
||||
else // otherwise
|
||||
{
|
||||
$errorOccurred = true; // set error occurred flag
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If an error occurred then returns the results in an error object
|
||||
if ($errorOccurred) return error($results);
|
||||
|
||||
return success($results); // otherwise return results in a success object
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Checks the job object structure when needed for insert
|
||||
*/
|
||||
private function _checkNewJobStructure(&$job)
|
||||
{
|
||||
// If job is a valid object and contains the required properties AND does NOT already contain the property error
|
||||
if (is_object($job)
|
||||
&& property_exists($job, self::PROPERTY_STATUS)
|
||||
&& !property_exists($job, self::PROPERTY_ERROR))
|
||||
{
|
||||
return true; // it is valid!
|
||||
}
|
||||
|
||||
// If not object then object it!
|
||||
if (!is_object($job)) $job = new stdClass();
|
||||
|
||||
// If an error property was not already previously stored then store an error message in job object
|
||||
if (!property_exists($job, self::PROPERTY_ERROR))
|
||||
{
|
||||
$job->{self::PROPERTY_ERROR} = 'The structure of the provided job is not valid';
|
||||
}
|
||||
|
||||
return false; // better sorry than wrong
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the job object structure when needed for update
|
||||
*/
|
||||
private function _checkUpdateJobStructure(&$job)
|
||||
{
|
||||
// If job is a valid object
|
||||
if (is_object($job) && property_exists($job, self::PROPERTY_JOBID)) return true; // it is valid!
|
||||
|
||||
// If not object then object it!
|
||||
if (!is_object($job)) $job = new stdClass();
|
||||
|
||||
// If an error property was not already previously stored then store an error message in job object
|
||||
if (!property_exists($job, self::PROPERTY_ERROR))
|
||||
{
|
||||
$job->{self::PROPERTY_ERROR} = 'The structure of the provided job is not valid';
|
||||
}
|
||||
|
||||
return false; // better sorry than wrong
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given job contains a valid type
|
||||
*/
|
||||
private function _checkJobType($type, $types)
|
||||
{
|
||||
return $this->_inArray($type, $types, self::PROPERTY_TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given job contains a valid status
|
||||
*/
|
||||
private function _checkJobStatus(&$job, $statuses)
|
||||
{
|
||||
// If the given job doesn't have the property status then it is not valid
|
||||
if (!isset($job->{self::PROPERTY_STATUS}))
|
||||
{
|
||||
$found = false;
|
||||
}
|
||||
else // otherwise test if it valid
|
||||
{
|
||||
$found = $this->_inArray($job->{self::PROPERTY_STATUS}, $statuses, self::PROPERTY_STATUS);
|
||||
}
|
||||
|
||||
// No status was found and does NOT already contain the property error
|
||||
if (!$found && !property_exists($job, self::PROPERTY_ERROR))
|
||||
{
|
||||
$job->{self::PROPERTY_ERROR} = 'The provided status of this job is not valid'; // store the error message in the object
|
||||
}
|
||||
|
||||
return $found;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search in an array the given value
|
||||
* The elements of the given array are objects
|
||||
* The given value is compared with the property specified by the $propertyName parameter of each object of the given array
|
||||
*/
|
||||
private function _inArray($value, $array, $propertyName)
|
||||
{
|
||||
$found = false;
|
||||
|
||||
foreach ($array as $element)
|
||||
{
|
||||
if ($value == $element->{$propertyName})
|
||||
{
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $found;
|
||||
}
|
||||
|
||||
/**
|
||||
* Drop not allowed properties from the given job
|
||||
*/
|
||||
private function _dropNotAllowedPropertiesNewJob(&$job)
|
||||
{
|
||||
unset($job->{self::PROPERTY_JOBID});
|
||||
unset($job->{self::PROPERTY_CREATIONTIME});
|
||||
unset($job->{self::PROPERTY_TYPE});
|
||||
}
|
||||
|
||||
/**
|
||||
* Drop not allowed properties from the given job
|
||||
*/
|
||||
private function _dropNotAllowedPropertiesUpdateJob(&$job)
|
||||
{
|
||||
unset($job->{self::PROPERTY_CREATIONTIME});
|
||||
unset($job->{self::PROPERTY_TYPE});
|
||||
}
|
||||
|
||||
/**
|
||||
* Add e new triggered job to the jobs queue
|
||||
* NOTE:
|
||||
* - In this method there are less checks compared to addNewJobsToQueue method because
|
||||
* the new jobs that will be added are generate in this method
|
||||
* - Job ids in this case are not returned, therefore the caller is not going to be informed about these new jobs
|
||||
*/
|
||||
private function _addNewTriggeredJobToQueue($type, $job, $triggeredStatuses)
|
||||
{
|
||||
// Get all the job trigggers for the given type and for the given statuses
|
||||
$dbTriggersResult = $this->_ci->JobTriggersModel->getJobtriggersByTypeStatuses($type, $triggeredStatuses);
|
||||
|
||||
// If an error occurred while getting job triggers from database then return it
|
||||
if (isError($dbTriggersResult)) return $dbTriggersResult;
|
||||
if (hasData($dbTriggersResult)) // If triggers were retrieved
|
||||
{
|
||||
// The output of the trigging job is the input of the trigged job
|
||||
$triggeredJobInput = null;
|
||||
if (isset($job->{self::PROPERTY_OUTPUT})) $triggeredJobInput = $job->{self::PROPERTY_OUTPUT};
|
||||
|
||||
// For each trigger
|
||||
foreach (getData($dbTriggersResult) as $trigger)
|
||||
{
|
||||
$triggeredJob = array(
|
||||
self::PROPERTY_TYPE => $trigger->following_type, // the new type is the one defined in tbl_jobtriggers
|
||||
self::PROPERTY_STATUS => self::STATUS_NEW, // new job status is new
|
||||
self::PROPERTY_INPUT => $triggeredJobInput // new job input
|
||||
);
|
||||
|
||||
// Try to insert the single job into database
|
||||
$dbNewJob = $this->_ci->JobsQueueModel->insert($triggeredJob);
|
||||
// If an error occurred during while inserting in database
|
||||
if (isError($dbNewJob)) return $dbNewJob;
|
||||
}
|
||||
}
|
||||
|
||||
return success(); // if here then it was a success!
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +147,7 @@ class PermissionLib
|
||||
|
||||
$accessType = '';
|
||||
|
||||
// Checks if the required access type is compliant with the HTTP method (GET => r, POST => w)
|
||||
// Set the access type
|
||||
if (strpos($requiredAccessType, PermissionLib::READ_RIGHT) !== false)
|
||||
{
|
||||
$accessType = PermissionLib::SELECT_RIGHT; // S
|
||||
@@ -184,12 +184,12 @@ class PermissionLib
|
||||
}
|
||||
else
|
||||
{
|
||||
show_error('The given permission array does not contain the called method or is not correctly set');
|
||||
show_error('The given permission array does not contain the given method or is not correctly set');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
show_error('You must give the permissions array as parameter to the constructor of the controller');
|
||||
show_error('The given permissions is not a valid array or it is an empty one');
|
||||
}
|
||||
|
||||
return $checkPermissions;
|
||||
|
||||
@@ -284,9 +284,11 @@ class Messages_model extends CI_Model
|
||||
|
||||
$sender = getData($senderResult)[0]; // Found sender data
|
||||
|
||||
// If the sender is not the system sender and are present configurations to reply
|
||||
// If the sender is not the system sender and the receiver is not the system sender
|
||||
// and are present configurations to reply
|
||||
$hrefReply = '';
|
||||
if ($message->sender_id != $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)
|
||||
&& $message->receiver_id != $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)
|
||||
&& !isEmptyString($this->config->item(MessageLib::CFG_REDIRECT_VIEW_MESSAGE_URL)))
|
||||
{
|
||||
$hrefReply = $this->config->item(MessageLib::CFG_MESSAGE_SERVER).
|
||||
@@ -294,6 +296,13 @@ class Messages_model extends CI_Model
|
||||
$token;
|
||||
}
|
||||
|
||||
// If the receiver is the system sender (the message was sent to an organization unit)
|
||||
// redirect the reply to an authenticated controller to reply
|
||||
if ($message->receiver_id == $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID))
|
||||
{
|
||||
$hrefReply = site_url('system/messages/MessageClient/writeReply?token='.$token);
|
||||
}
|
||||
|
||||
return array (
|
||||
'sender' => $sender,
|
||||
'message' => $message,
|
||||
|
||||
@@ -41,4 +41,35 @@ class Bisverwendung_model extends DB_Model
|
||||
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Verwendungen of the user, optionally in a time span.
|
||||
* @param string $uid
|
||||
* @param string $beginn
|
||||
* @param string $ende
|
||||
* @return array
|
||||
*/
|
||||
public function getVerwendungen($uid, $beginn = null, $ende = null)
|
||||
{
|
||||
$params = array($uid);
|
||||
|
||||
$qry = 'SELECT * FROM bis.tbl_bisverwendung
|
||||
WHERE mitarbeiter_uid = ?';
|
||||
|
||||
if (isset($beginn))
|
||||
{
|
||||
$qry .= ' AND ( ende >= ? OR ende IS NULL )';
|
||||
$params[] = $beginn;
|
||||
}
|
||||
|
||||
if (isset($ende))
|
||||
{
|
||||
$qry .= ' AND ( beginn <= ? OR beginn IS NULL )';
|
||||
$params[] = $ende;
|
||||
}
|
||||
|
||||
$qry .= ' ORDER BY beginn, ende';
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,58 @@ class Konto_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_konto';
|
||||
$this->pk = 'buchungsnr';
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a Payment as paid
|
||||
*/
|
||||
public function setPaid($buchungsnr)
|
||||
{
|
||||
// get payment
|
||||
$buchungResult = $this->loadWhere(array('buchungsnr' => $buchungsnr));
|
||||
|
||||
if(isSuccess($buchungResult) && hasData($buchungResult))
|
||||
{
|
||||
// get already paid amount
|
||||
$this->addSelect('sum(betrag) as bezahlt');
|
||||
$this->addGroupBy('buchungsnr_verweis');
|
||||
$buchungVerweisResult = $this->loadWhere(array('buchungsnr_verweis' => $buchungsnr));
|
||||
|
||||
if(isSuccess($buchungVerweisResult))
|
||||
{
|
||||
if(hasData($buchungVerweisResult))
|
||||
{
|
||||
$betragBezahltResult = getData($buchungVerweisResult);
|
||||
$betragBezahlt = $betragBezahltResult->bezahlt;
|
||||
}
|
||||
else
|
||||
$betragBezahlt = 0;
|
||||
|
||||
$buchung = getData($buchungResult);
|
||||
$buchung = $buchung[0];
|
||||
|
||||
// calculate open amount
|
||||
$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' => $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);
|
||||
}
|
||||
else
|
||||
return error('Failed to load Payment');
|
||||
}
|
||||
else
|
||||
{
|
||||
return error('Failed to load Payment');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,4 +182,30 @@ class Prestudentstatus_model extends DB_Model
|
||||
return success(array());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* getLastStatuses
|
||||
*/
|
||||
public function getLastStatusPerson($person_id, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$query = 'SELECT *
|
||||
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 = ?)
|
||||
ORDER BY prestudent_id, datum desc, insertamum desc
|
||||
) ps USING(prestudent_id)
|
||||
JOIN public.tbl_status USING(status_kurzbz)';
|
||||
|
||||
$parametersArray = array($person_id);
|
||||
|
||||
if ($studiensemester_kurzbz != '')
|
||||
{
|
||||
array_push($parametersArray, $studiensemester_kurzbz);
|
||||
$query .= ' AND ps.studiensemester_kurzbz = ?';
|
||||
}
|
||||
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ class Abschlusspruefung_model extends DB_Model
|
||||
|
||||
$abschlusspruefungdata = array();
|
||||
|
||||
$this->addSelect('tbl_abschlusspruefung.abschlusspruefung_id, tbl_abschlusspruefung.datum, tbl_abschlusspruefung.abschlussbeurteilung_kurzbz, tbl_abschlusspruefung.uhrzeit AS pruefungsbeginn, tbl_abschlusspruefung.endezeit AS pruefungsende,
|
||||
$this->addSelect('tbl_abschlusspruefung.abschlusspruefung_id, tbl_abschlusspruefung.datum, tbl_abschlusspruefung.pruefungstyp_kurzbz AS studiengangstyp, tbl_abschlusspruefung.abschlussbeurteilung_kurzbz, tbl_abschlusspruefung.uhrzeit AS pruefungsbeginn, tbl_abschlusspruefung.endezeit AS pruefungsende,
|
||||
tbl_abschlusspruefung.freigabedatum, tbl_abschlusspruefung_antritt.bezeichnung AS pruefungsantritt_bezeichnung, tbl_abschlusspruefung_antritt.bezeichnung_english AS pruefungsantritt_bezeichnung_english, tbl_abschlusspruefung.protokoll,
|
||||
studentpers.vorname AS vorname_student, studentpers.nachname AS nachname_student, studentpers.titelpre AS titelpre_student, studentpers.titelpost AS titelpost_student, studentben.uid AS uid_student, matrikelnr,
|
||||
vorsitzenderben.uid AS uid_vorsitz, vorsitzenderpers.vorname AS vorname_vorsitz, vorsitzenderpers.nachname AS nachname_vorsitz, vorsitzenderpers.titelpre AS titelpre_vorsitz, vorsitzenderpers.titelpost AS titelpost_vorsitz,
|
||||
@@ -71,29 +71,42 @@ class Abschlusspruefung_model extends DB_Model
|
||||
$abschlusspruefungdata->studiengang_kz = $studienordnungdata->studiengang_kz;
|
||||
$abschlusspruefungdata->studiengangbezeichnung = $studienordnungdata->studiengangbezeichnung;
|
||||
$abschlusspruefungdata->studiengangbezeichnung_englisch = $studienordnungdata->studiengangbezeichnung_englisch;
|
||||
|
||||
$this->StudiengangModel->addSelect('typ');
|
||||
$typ = $this->StudiengangModel->load($studienordnungdata->studiengang_kz);
|
||||
if (isError($typ))
|
||||
return $typ;
|
||||
elseif (hasData($typ))
|
||||
}
|
||||
// if no Studienordnung available (e.g. Incomings), use Studiengangname provided by table student
|
||||
elseif (!hasData($studienordnung))
|
||||
{
|
||||
$this->resetQuery();
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->addSelect('studiengang_kz, bezeichnung, english');
|
||||
$this->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||
$result = $this->StudentModel->load(array(
|
||||
'student_uid' => $student_uid)
|
||||
);
|
||||
|
||||
if ($result = getData($result)[0])
|
||||
{
|
||||
$abschlusspruefungdata->studiengangstyp = getData($typ)[0]->typ;
|
||||
$abschlusspruefungdata->studiengang_kz = $result->studiengang_kz;
|
||||
$abschlusspruefungdata->studiengangbezeichnung = $result->bezeichnung;
|
||||
$abschlusspruefungdata->studiengangbezeichnung_englisch = $result->english;
|
||||
}
|
||||
|
||||
// get Abschlussarbeit
|
||||
}
|
||||
|
||||
// get Abschlussarbeit
|
||||
if (isset($abschlusspruefungdata->studiengang_kz) && !empty($abschlusspruefungdata->studiengang_kz))
|
||||
{
|
||||
$projekttyp = array('Bachelor','Diplom','Master','Dissertation','Lizenziat','Magister');
|
||||
$abschlussarbeit = $this->ProjektarbeitModel->getProjektarbeit($student_uid, $studienordnungdata->studiengang_kz, null, $projekttyp, true);
|
||||
$abschlussarbeit = $this->ProjektarbeitModel->getProjektarbeit($student_uid, $abschlusspruefungdata->studiengang_kz, null, $projekttyp, true);
|
||||
|
||||
if (isError($abschlussarbeit))
|
||||
return $abschlussarbeit;
|
||||
if (hasData($abschlussarbeit))
|
||||
{
|
||||
$abschlussarbeit = getData($abschlussarbeit)[0];
|
||||
$abschlusspruefungdata->projektarbeit_studiengangstyp_name = $abschlussarbeit->projekttyp_kurzbz;
|
||||
$abschlusspruefungdata->abschlussarbeit_titel = $abschlussarbeit->titel;
|
||||
$abschlusspruefungdata->abschlussarbeit_note = $abschlussarbeit->note;
|
||||
}
|
||||
$abschlussarbeit = getData($abschlussarbeit)[0];
|
||||
$abschlusspruefungdata->projektarbeit_studiengangstyp_name = $abschlussarbeit->projekttyp_kurzbz;
|
||||
$abschlusspruefungdata->abschlussarbeit_titel = $abschlussarbeit->titel;
|
||||
$abschlusspruefungdata->abschlussarbeit_note = $abschlussarbeit->note;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ class Studiensemester_model extends DB_Model
|
||||
$days = 60;
|
||||
}
|
||||
|
||||
$query = 'SELECT studiensemester_kurzbz
|
||||
$query = 'SELECT studiensemester_kurzbz, start, ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE start < NOW() - \'' . $days . ' DAYS\'::INTERVAL
|
||||
ORDER BY start DESC
|
||||
@@ -59,7 +59,7 @@ class Studiensemester_model extends DB_Model
|
||||
$days = 62;
|
||||
}
|
||||
|
||||
$query = 'SELECT studiensemester_kurzbz
|
||||
$query = 'SELECT studiensemester_kurzbz, start, ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE start < NOW() + \'' . $days . ' DAYS\':: INTERVAL
|
||||
ORDER BY start DESC
|
||||
|
||||
@@ -14,12 +14,14 @@ class Adresse_model extends DB_Model
|
||||
|
||||
|
||||
/**
|
||||
* gets person data from uid
|
||||
* @param $uid
|
||||
* Get Zustelladress of given person.
|
||||
* @param string $person_id
|
||||
* @param string $select
|
||||
* @return array
|
||||
*/
|
||||
public function getZustellAdresse($person_id)
|
||||
public function getZustellAdresse($person_id, $select = '*')
|
||||
{
|
||||
$this->addSelect($select);
|
||||
return $this->loadWhere(array('person_id' => $person_id, 'zustelladresse'=> true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,4 +33,67 @@ class Benutzer_model extends DB_Model
|
||||
|
||||
return $this->execQuery($sql, array($person_id, $oe_kurzbz));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if alias exists
|
||||
* @param $alias
|
||||
*/
|
||||
public function aliasExists($alias)
|
||||
{
|
||||
$this->addSelect('1');
|
||||
$result = $this->loadWhere(array('alias' => $alias));
|
||||
|
||||
if (isSuccess($result))
|
||||
{
|
||||
if (hasData($result))
|
||||
{
|
||||
$result = success(array(true));
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = success(array(false));
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates alias for a uid.
|
||||
* @param $uid
|
||||
* @return array the alias if newly generated
|
||||
*/
|
||||
public function generateAlias($uid)
|
||||
{
|
||||
$aliasres = '';
|
||||
$this->addLimit(1);
|
||||
$this->addSelect('vorname, nachname');
|
||||
$this->addJoin('public.tbl_person', 'person_id');
|
||||
$nameresult = $this->loadWhere(array('uid' => $uid));
|
||||
|
||||
if (hasData($nameresult))
|
||||
{
|
||||
$aliasdata = getData($nameresult);
|
||||
$alias = $this->_sanitizeAliasName($aliasdata[0]->vorname).'.'.$this->_sanitizeAliasName($aliasdata[0]->nachname);
|
||||
$aliasexists = $this->aliasExists($alias);
|
||||
|
||||
if (hasData($aliasexists) && !getData($aliasexists)[0])
|
||||
$aliasres = $alias;
|
||||
}
|
||||
return success($aliasres);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Sanitizes a string used for alias. Replaces special characters, spaces, sets lower case.
|
||||
* @param string $str
|
||||
* @return string
|
||||
*/
|
||||
private function _sanitizeAliasName($str)
|
||||
{
|
||||
$str = sanitizeProblemChars($str);
|
||||
return mb_strtolower(str_replace(' ','_', $str));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,44 @@ class Benutzerfunktion_model extends DB_Model
|
||||
$this->pk = 'benutzerfunktion_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Lädt alle Benutzerfunktionen zu einer UID
|
||||
* @param type $uid UID des Mitarbeiters
|
||||
* @param type $funktion_kurzbz OPTIONAL Kurzbezeichnung der Funktion
|
||||
* @param type $startZeitraum OPTIONAL Start Zeitraum in dem die Funktion aktiv ist
|
||||
* @param type $endeZeitraum OPTIONAL Ende Zeitraum in dem die Funktion aktiv ist
|
||||
* @return boolean
|
||||
*/
|
||||
public function getBenutzerFunktionByUid($uid, $funktion_kurzbz=null, $startZeitraum=null, $endeZeitraum=null)
|
||||
{
|
||||
$params = array($uid);
|
||||
|
||||
$qry = "SELECT tbl_benutzerfunktion.*, tbl_organisationseinheit.bezeichnung as organisationseinheit_bezeichnung,
|
||||
tbl_organisationseinheit.organisationseinheittyp_kurzbz
|
||||
FROM public.tbl_benutzerfunktion
|
||||
LEFT JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
|
||||
WHERE uid=?";
|
||||
if(!is_null($funktion_kurzbz))
|
||||
{
|
||||
$qry .= ' AND funktion_kurzbz = ?';
|
||||
$params[] = $funktion_kurzbz;
|
||||
}
|
||||
if(!is_null($startZeitraum))
|
||||
{
|
||||
$qry .=' AND (datum_bis IS NULL OR datum_bis >= ?)';
|
||||
$params[] = $startZeitraum;
|
||||
}
|
||||
if(!is_null($endeZeitraum))
|
||||
{
|
||||
$qry .=' AND (datum_von IS NULL OR datum_von <= ?)';
|
||||
$params[] = $endeZeitraum;
|
||||
}
|
||||
|
||||
$qry .= "ORDER BY datum_bis NULLS LAST, datum_von NULLS LAST;";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Benutzerfunktion using the person_id
|
||||
*/
|
||||
|
||||
@@ -10,6 +10,7 @@ class Kontakt_model extends DB_Model
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_kontakt';
|
||||
$this->pk = 'kontakt_id';
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
}
|
||||
|
||||
public function getWholeKontakt($kontakt_id, $person_id = null, $kontakttyp = null)
|
||||
@@ -59,4 +60,113 @@ class Kontakt_model extends DB_Model
|
||||
|
||||
return $this->execQuery($sql, array($person_id, $kontakttyp));
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt einen Kontakt eines Standortes
|
||||
* Es wird nur der erste Eintrag zurueckgeliefert!
|
||||
* @param $standort_id
|
||||
* @param $kontakttyp
|
||||
*/
|
||||
public function getFirmaKontakttyp($standort_id, $kontakttyp)
|
||||
{
|
||||
if (!is_numeric($standort_id))
|
||||
{
|
||||
return error('StandortID ist ungueltig');
|
||||
}
|
||||
|
||||
$qry = "SELECT kontakt, kontakt_id FROM public.tbl_kontakt WHERE standort_id=? AND kontakttyp=? ORDER BY kontakt_id LIMIT 1;";
|
||||
|
||||
return $this->execQuery($qry, array('standort_id' => $standort_id, 'kontakttyp' => $kontakttyp));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Firmentelefon for a uid, can be Vorwahl with Telefonklappe or Firmenhandy
|
||||
* @param $uid
|
||||
*/
|
||||
public function getFirmentelefon($uid)
|
||||
{
|
||||
$firmentelefon = success(array());
|
||||
|
||||
$this->MitarbeiterModel->addSelect('standort_id, telefonklappe, person_id');
|
||||
$this->MitarbeiterModel->addJoin('public.tbl_benutzer', 'tbl_mitarbeiter.mitarbeiter_uid = tbl_benutzer.uid');
|
||||
$mitarbeiter = $this->MitarbeiterModel->load(array('uid' => $uid));
|
||||
|
||||
if (hasData($mitarbeiter))
|
||||
{
|
||||
$mitarbeiter = getData($mitarbeiter);
|
||||
if (isEmptyString($mitarbeiter[0]->telefonklappe))
|
||||
{
|
||||
$this->addSelect('kontakt');
|
||||
$this->addOrder('updateamum, insertamum', 'DESC');
|
||||
$this->addLimit(1);
|
||||
$firmenhandy = $this->loadWhere(array('person_id' => $mitarbeiter[0]->person_id, 'kontakttyp' => 'firmenhandy'));
|
||||
if (hasData($firmenhandy))
|
||||
{
|
||||
$firmenhandy = getData($firmenhandy);
|
||||
$firmentelefon = success(array('kontakt' => $firmenhandy[0]->kontakt, 'telefonklappe' => ''));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$firmaKontakttyp = $this->getFirmaKontakttyp($mitarbeiter[0]->standort_id, 'telefon');
|
||||
if (hasData($firmaKontakttyp))
|
||||
{
|
||||
$vorwahl = getData($firmaKontakttyp);
|
||||
$vorwahl = $vorwahl[0]->kontakt;
|
||||
$firmentelefon = success(array('kontakt' => $vorwahl, 'telefonklappe' => $mitarbeiter[0]->telefonklappe));
|
||||
}
|
||||
}
|
||||
}
|
||||
return $firmentelefon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all latest contact data of person, where Zustellung is true
|
||||
* @param $person_id
|
||||
* @return array
|
||||
*/
|
||||
public function getAll_byPersonID($person_id)
|
||||
{
|
||||
$this->addSelect('DISTINCT ON (kontakttyp) kontakttyp, kontakt');
|
||||
$this->addJoin('public.tbl_standort', 'standort_id', 'LEFT');
|
||||
$this->addJoin('public.tbl_firma', 'firma_id', 'LEFT');
|
||||
$this->addOrder('kontakttyp, kontakt, tbl_kontakt.updateamum, tbl_kontakt.insertamum');
|
||||
|
||||
return $this->loadWhere(array(
|
||||
'zustellung' => TRUE,
|
||||
'person_id' => $person_id
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all latest phones of person where zustellung is true. Ordered by
|
||||
* telefon > mobil > firmenhandy > else.
|
||||
* @param string person_id
|
||||
*/
|
||||
public function getPhones_byPerson($person_id)
|
||||
{
|
||||
$qry = '
|
||||
WITH latest_phones AS(
|
||||
SELECT DISTINCT ON (kontakttyp) kontakttyp, kontakt
|
||||
FROM public.tbl_kontakt kontakt
|
||||
LEFT JOIN public.tbl_standort USING (standort_id)
|
||||
LEFT JOIN public.tbl_firma USING (firma_id)
|
||||
WHERE person_id = ?
|
||||
AND zustellung
|
||||
AND kontakttyp IN (\'telefon\', \'mobil\', \'firmenhandy\')
|
||||
ORDER BY kontakttyp, kontakt, kontakt.updateamum
|
||||
)
|
||||
|
||||
SELECT * FROM latest_phones
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN kontakttyp = \'telefon\' THEN 0
|
||||
WHEN kontakttyp = \'mobil\' THEN 1
|
||||
WHEN kontakttyp = \'firmenhandy\' THEN 2
|
||||
ELSE 3
|
||||
END
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, array($person_id));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
class Betriebsmittelperson_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@@ -11,4 +10,45 @@ class Betriebsmittelperson_model extends DB_Model
|
||||
$this->dbTable = 'wawi.tbl_betriebsmittelperson';
|
||||
$this->pk = 'betriebsmittelperson_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Betriebsmittel by person.
|
||||
* @param string $person_id
|
||||
* @param string $betriebsmitteltyp
|
||||
* @param bool $isRetourniert False to retrieve only active Betriebsmittel.
|
||||
* @return array|bool
|
||||
*/
|
||||
public function getBetriebsmittel($person_id, $betriebsmitteltyp = null, $isRetourniert = null)
|
||||
{
|
||||
if (!is_numeric($person_id))
|
||||
{
|
||||
$this->errormsg = 'Person_id type is not valid.';
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id');
|
||||
|
||||
$condition = '
|
||||
person_id = '. $this->escape($person_id). '
|
||||
';
|
||||
|
||||
if (is_string($betriebsmitteltyp)) {
|
||||
$condition .= '
|
||||
AND betriebsmitteltyp = ' . $this->escape($betriebsmitteltyp);
|
||||
}
|
||||
|
||||
if ($isRetourniert === true) {
|
||||
$condition .= '
|
||||
AND retouram IS NOT NULL'; // return date is given
|
||||
}
|
||||
elseif ($isRetourniert === false)
|
||||
{
|
||||
$condition .= '
|
||||
AND retouram IS NULL'; // default
|
||||
}
|
||||
|
||||
$this->addOrder('ausgegebenam', 'DESC'); // default
|
||||
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,4 +40,159 @@ class Mitarbeiter_model extends DB_Model
|
||||
return success(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt das Personal
|
||||
*
|
||||
* @param $aktiv wenn true werden nur aktive geladen, wenn false dann nur inaktve, wenn null dann alle
|
||||
* @param $fix wenn true werden nur fixangestellte geladen
|
||||
* @param $verwendung wenn true werden alle geladen die eine BIS-Verwendung eingetragen haben
|
||||
* @param $personaccount wenn true werden alle geladen die personalnr >= 0 haben, also "echte" Personaccounts
|
||||
* @return array
|
||||
*/
|
||||
public function getPersonal($aktiv, $fix, $verwendung, $personaccount = null)
|
||||
{
|
||||
$qry = "SELECT DISTINCT ON(mitarbeiter_uid) staatsbuergerschaft, geburtsnation, sprache, anrede, titelpost, titelpre,
|
||||
nachname, vorname, vornamen, gebdatum, gebort, gebzeit, tbl_person.anmerkung AS person_anmerkung, homepage, svnr, ersatzkennzeichen, familienstand,
|
||||
geschlecht, anzahlkinder, tbl_person.insertamum AS person_insertamum, tbl_person.updateamum as person_updateamum,
|
||||
tbl_person.updatevon AS person_updatevon, kompetenzen, kurzbeschreibung, zugangscode, zugangscode_timestamp, bpk,
|
||||
tbl_benutzer.*, tbl_mitarbeiter.*, akt_funk.oe_kurzbz AS funktionale_zuordnung, akt_funk.wochenstunden
|
||||
FROM ((public.tbl_mitarbeiter JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid))
|
||||
JOIN public.tbl_person USING(person_id))
|
||||
LEFT JOIN public.tbl_benutzerfunktion USING(uid)
|
||||
LEFT JOIN public.tbl_benutzerfunktion akt_funk ON tbl_mitarbeiter.mitarbeiter_uid = akt_funk.uid AND akt_funk.funktion_kurzbz = 'fachzuordnung'
|
||||
AND (akt_funk.datum_von IS NULL OR akt_funk.datum_von <= now()) AND (akt_funk.datum_bis IS NULL OR akt_funk.datum_bis >= now())
|
||||
WHERE true";
|
||||
|
||||
if ($fix === true)
|
||||
$qry .= " AND fixangestellt=true";
|
||||
elseif ($fix === false)
|
||||
$qry .= " AND fixangestellt=false";
|
||||
|
||||
if ($aktiv === true)
|
||||
$qry .= " AND tbl_benutzer.aktiv=true";
|
||||
elseif ($aktiv === false)
|
||||
$qry .= " AND tbl_benutzer.aktiv=false";
|
||||
|
||||
if ($verwendung === true)
|
||||
{
|
||||
$qry.=" AND EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)";
|
||||
}
|
||||
elseif ($verwendung === false)
|
||||
{
|
||||
$qry.=" AND NOT EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)";
|
||||
}
|
||||
|
||||
if ($personaccount === true)
|
||||
$qry .= " AND tbl_mitarbeiter.personalnummer >= 0";
|
||||
elseif ($personaccount === false)
|
||||
$qry .= " AND tbl_mitarbeiter.personalnummer < 0";
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt ein Array mit den UIDs der Vorgesetzten zurück
|
||||
* @return object
|
||||
*/
|
||||
public function getVorgesetzte($uid, $datum_von = null, $datum_bis = null)
|
||||
{
|
||||
$datum_von_var = isset($datum_von) ? '?' : 'now()';
|
||||
$datum_bis_var = isset($datum_bis) ? '?' : 'now()';
|
||||
$qry = "SELECT
|
||||
DISTINCT uid as vorgesetzter
|
||||
FROM
|
||||
public.tbl_benutzerfunktion
|
||||
WHERE
|
||||
funktion_kurzbz='Leitung' AND
|
||||
(datum_von is null OR datum_von<=%s) AND
|
||||
(datum_bis is null OR datum_bis>=%s) AND
|
||||
oe_kurzbz in (SELECT oe_kurzbz
|
||||
FROM public.tbl_benutzerfunktion
|
||||
WHERE
|
||||
funktion_kurzbz='oezuordnung' AND uid=? AND
|
||||
(datum_von is null OR datum_von<=%s) AND
|
||||
(datum_bis is null OR datum_bis>=%s)
|
||||
);";
|
||||
|
||||
$qry = sprintf($qry, $datum_von_var, $datum_bis_var, $datum_von_var, $datum_bis_var);
|
||||
|
||||
$params = array();
|
||||
if (isset($datum_von))
|
||||
$params[] = $datum_von;
|
||||
if (isset($datum_bis))
|
||||
$params[] = $datum_bis;
|
||||
|
||||
$params[] = $uid;
|
||||
|
||||
if (isset($datum_von))
|
||||
$params[] = $datum_von;
|
||||
if (isset($datum_bis))
|
||||
$params[] = $datum_bis;
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if alias exists
|
||||
* @param $kurzbz
|
||||
*/
|
||||
public function kurzbzExists($kurzbz)
|
||||
{
|
||||
$this->addSelect('1');
|
||||
$result = $this->loadWhere(array('kurzbz' => $kurzbz));
|
||||
|
||||
if (isSuccess($result))
|
||||
{
|
||||
if (hasData($result))
|
||||
{
|
||||
$result = success(array(true));
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = success(array(false));
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates alias for a uid.
|
||||
* @param $uid
|
||||
* @return array the alias if newly generated
|
||||
*/
|
||||
public function generateKurzbz($uid)
|
||||
{
|
||||
$kurzbz = '';
|
||||
$this->addLimit(1);
|
||||
$this->addSelect('vorname, nachname');
|
||||
$this->addJoin('public.tbl_benutzer', 'tbl_mitarbeiter.mitarbeiter_uid = tbl_benutzer.uid');
|
||||
$this->addJoin('public.tbl_person', 'person_id');
|
||||
$nameresult = $this->loadWhere(array('uid' => $uid));
|
||||
|
||||
if (hasData($nameresult))
|
||||
{
|
||||
$kurzbzdata = getData($nameresult);
|
||||
$nachname_clean = sanitizeProblemChars($kurzbzdata[0]->nachname);
|
||||
$vorname_clean = sanitizeProblemChars($kurzbzdata[0]->vorname);
|
||||
|
||||
for ($nn = 6, $vn = 2; $nn != 0; $nn--, $vn++)
|
||||
{
|
||||
$kurzbz = mb_substr($nachname_clean, 0, $nn);
|
||||
$kurzbz .= mb_substr($vorname_clean, 0, $vn);
|
||||
|
||||
$kurzbzexists = $this->kurzbzExists($kurzbz);
|
||||
|
||||
if (hasData($kurzbzexists) && !getData($kurzbzexists)[0])
|
||||
break;
|
||||
}
|
||||
|
||||
$kurzbzexists = $this->kurzbzExists($kurzbz);
|
||||
|
||||
if (hasData($kurzbzexists) && getData($kurzbzexists)[0])
|
||||
return error('No Kurzbezeichnung could be generated');
|
||||
}
|
||||
return success($kurzbz);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,14 @@ class Zeitaufzeichnung_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_zeitaufzeichnung';
|
||||
$this->pk = 'zeitaufzeichnung_id';
|
||||
}
|
||||
|
||||
public function deleteEntriesForCurrentDay()
|
||||
{
|
||||
$today = date('Y-m-d');
|
||||
$qry = "DELETE FROM " . $this->dbTable . "
|
||||
WHERE start >= '" . $today . " 00:00:00'
|
||||
AND start <= '" . $today . " 23:59:59';";
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,13 @@ class Zeitsperre_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_zeitsperre';
|
||||
$this->pk = 'zeitsperre_id';
|
||||
}
|
||||
|
||||
public function deleteEntriesForCurrentDay()
|
||||
{
|
||||
$today = date('Y-m-d');
|
||||
$qry = "DELETE FROM " . $this->dbTable . "
|
||||
WHERE vondatum = '" . $today . "';";
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class JobStatuses_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->dbTable = 'system.tbl_jobstatuses';
|
||||
$this->pk = 'status';
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
class JobTriggers_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->dbTable = 'system.tbl_jobtriggers';
|
||||
$this->pk = array('type', 'status', 'followingType');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function getJobtriggersByTypeStatuses($type, $triggeredStatuses)
|
||||
{
|
||||
$query = 'SELECT jt.type,
|
||||
jt.status,
|
||||
jt.following_type
|
||||
FROM system.tbl_jobtriggers jt
|
||||
WHERE jt.type = ?
|
||||
AND jt.status IN ?
|
||||
ORDER BY jt.type, jt.status';
|
||||
|
||||
return $this->execQuery($query, array($type, $triggeredStatuses));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class JobTypes_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->dbTable = 'system.tbl_jobtypes';
|
||||
$this->pk = 'type';
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
class JobsQueue_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->dbTable = 'system.tbl_jobsqueue';
|
||||
$this->pk = 'jobid';
|
||||
}
|
||||
}
|
||||
@@ -189,7 +189,7 @@ $this->load->view(
|
||||
|
||||
<div class="col-xs-4 col-md-offset-0 col-md-4">
|
||||
<div class="input-group">
|
||||
<input id="username" type="hidden" value=""><!-- this is to prevent Chrome autofilling a random input field with the username-->
|
||||
<input id="username" type="hidden" autocomplete="username" value=""><!-- this is to prevent Chrome autofilling a random input field with the username-->
|
||||
<input id="password" type="password" autocomplete="new-password" class="form-control" placeholder="CIS-<?php echo ucfirst($this->p->t('password', 'password')); ?>">
|
||||
<span class="input-group-btn">
|
||||
<button id="accept-lehrauftraege" class="btn btn-primary pull-right"><?php echo ucfirst($this->p->t('global', 'lehrauftraegeAnnehmen')); ?></button>
|
||||
|
||||
@@ -45,10 +45,10 @@ $this->load->view(
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<?php if (isset($abschlusspruefung)):
|
||||
$studiengangstyp_name = $abschlusspruefung->studiengangstyp == 'b' ? 'Bachelor' : 'Master';
|
||||
$pruefung_name = $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'pruefungBachelor') : $this->p->t('abschlusspruefung', 'pruefungMaster');
|
||||
$arbeit_name = $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'arbeitBachelor') : $this->p->t('abschlusspruefung', 'arbeitMaster');
|
||||
$protokolltextvorlage = $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'pruefungsnotizenBachelor') : $this->p->t('abschlusspruefung', 'pruefungsnotizenMaster');
|
||||
$studiengangstyp_name = $abschlusspruefung->studiengangstyp == 'Bachelor' ? 'Bachelor' : 'Master';
|
||||
$pruefung_name = $abschlusspruefung->studiengangstyp == 'Bachelor' ? $this->p->t('abschlusspruefung', 'pruefungBachelor') : $this->p->t('abschlusspruefung', 'pruefungMaster');
|
||||
$arbeit_name = $abschlusspruefung->studiengangstyp == 'Bachelor' ? $this->p->t('abschlusspruefung', 'arbeitBachelor') : $this->p->t('abschlusspruefung', 'arbeitMaster');
|
||||
$protokolltextvorlage = $abschlusspruefung->studiengangstyp == 'Bachelor' ? $this->p->t('abschlusspruefung', 'pruefungsnotizenBachelor') : $this->p->t('abschlusspruefung', 'pruefungsnotizenMaster');
|
||||
$protokolltext = isset($abschlusspruefung->protokoll) ? $abschlusspruefung->protokoll : $protokolltextvorlage;
|
||||
?>
|
||||
<div class="row">
|
||||
@@ -57,7 +57,7 @@ $this->load->view(
|
||||
<?php echo $this->p->t('abschlusspruefung', 'protokoll') ?> <?php echo $pruefung_name ?>
|
||||
</h3>
|
||||
<p>
|
||||
<?php echo $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'abgehaltenAmBachelor') : $this->p->t('abschlusspruefung', 'abgehaltenAmMaster'); ?>
|
||||
<?php echo $abschlusspruefung->studiengangstyp == 'Bachelor' ? $this->p->t('abschlusspruefung', 'abgehaltenAmBachelor') : $this->p->t('abschlusspruefung', 'abgehaltenAmMaster'); ?>
|
||||
<?php echo $language == 'German' ? $abschlusspruefung->studiengangbezeichnung : $abschlusspruefung->studiengangbezeichnung_englisch ?>, <?php echo $this->p->t('abschlusspruefung', 'studiengangskennzahl') ?>
|
||||
<?php echo $abschlusspruefung->studiengang_kz ?>
|
||||
</p>
|
||||
@@ -156,7 +156,7 @@ $this->load->view(
|
||||
<?php echo $this->p->t('abschlusspruefung', 'pruefungsgegenstand') ?>
|
||||
</td>
|
||||
<td colspan="5">
|
||||
<?php echo ($abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'pruefungsgegenstandBachelor') : $this->p->t('abschlusspruefung', 'pruefungsgegenstandMaster')) ?>
|
||||
<?php echo ($abschlusspruefung->studiengangstyp == 'Bachelor' ? $this->p->t('abschlusspruefung', 'pruefungsgegenstandBachelor') : $this->p->t('abschlusspruefung', 'pruefungsgegenstandMaster')) ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -172,12 +172,12 @@ $this->load->view(
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<?php echo $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'beurteilungKriterienBachelor') : $this->p->t('abschlusspruefung', 'beurteilungKriterienMaster') ?>
|
||||
<?php echo $abschlusspruefung->studiengangstyp == 'Bachelor' ? $this->p->t('abschlusspruefung', 'beurteilungKriterienBachelor') : $this->p->t('abschlusspruefung', 'beurteilungKriterienMaster') ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<?php echo $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'beurteilungBachelor') : $this->p->t('abschlusspruefung', 'beurteilungMaster') ?>:
|
||||
<?php echo $abschlusspruefung->studiengangstyp == 'Bachelor' ? $this->p->t('abschlusspruefung', 'beurteilungBachelor') : $this->p->t('abschlusspruefung', 'beurteilungMaster') ?>:
|
||||
<select name="abschlussbeurteilung_kurzbz" id="abschlussbeurteilung_kurzbz" class="form-control">
|
||||
<option value="">-- <?php echo $this->p->t('ui', 'bitteWaehlen'); ?> --</option>
|
||||
<?php foreach ($abschlussbeurteilung as $beurteilung):
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
'phrases' => array(
|
||||
'ui' => array(
|
||||
'keineDatenVorhanden',
|
||||
'heute',
|
||||
'letzteWoche',
|
||||
'alle',
|
||||
'zeitraum'
|
||||
)
|
||||
),
|
||||
'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css'),
|
||||
@@ -34,6 +38,22 @@
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $this->p->t('abschlusspruefung','einfuehrungstext'); ?>
|
||||
<br><br>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<form action="" method="post">
|
||||
<label><?php echo $this->p->t('ui','zeitraum'); ?>: </label>
|
||||
<div class="btn-group" role="group">
|
||||
<button type="submit" class="btn btn-default <?php echo $period == 'today' ? 'active' : ''?>"
|
||||
name="period" value="today"><?php echo $this->p->t('ui','heute'); ?></button>
|
||||
<button type="submit" class="btn btn-default <?php echo $period == 'lastWeek' ? 'active' : ''?>"
|
||||
name="period" value="lastWeek"><?php echo $this->p->t('ui','letzteWoche'); ?></button>
|
||||
<button type="submit" class="btn btn-default <?php echo $period == 'all' ? 'active' : ''?>"
|
||||
name="period" value="all"><?php echo $this->p->t('ui','alle'); ?></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<?php $this->load->view('lehre/pruefungsprotokollUebersichtData.php'); ?>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
$UID = getAuthUID();
|
||||
$PERIOD = $period; // filter Pruefungsprotokolle for given period
|
||||
|
||||
$query = "
|
||||
SELECT
|
||||
@@ -14,10 +15,14 @@ FROM
|
||||
JOIN public.tbl_benutzer ON(student_uid=uid)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_studiengang ON(tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz)
|
||||
JOIN public.tbl_studiengangstyp USING(typ);
|
||||
JOIN public.tbl_studiengangstyp USING(typ)
|
||||
WHERE
|
||||
vorsitz='".$UID."'
|
||||
AND datum>='2020-05-27'
|
||||
AND (
|
||||
'". $PERIOD. "' = 'today' AND datum = NOW()::date OR
|
||||
'". $PERIOD. "' = 'lastWeek' AND datum = (NOW() - interval '1 week')::date OR
|
||||
'". $PERIOD. "' = 'all' AND datum >= '2020-05-27'
|
||||
)
|
||||
ORDER BY datum, nachname, vorname
|
||||
";
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
'query' => '
|
||||
SELECT
|
||||
person_id, vorname, nachname, geschlecht, svnr, ersatzkennzeichen, matr_nr,
|
||||
staatsbuergerschaft, gebdatum
|
||||
staatsbuergerschaft, gebdatum, false AS mitarbeiter
|
||||
FROM
|
||||
public.tbl_person
|
||||
WHERE
|
||||
@@ -11,6 +11,17 @@
|
||||
AND bpk is null
|
||||
AND EXISTS(SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) AND
|
||||
person_id=tbl_person.person_id AND tbl_benutzer.aktiv=true)
|
||||
UNION
|
||||
SELECT
|
||||
person_id, vorname, nachname, geschlecht, svnr, ersatzkennzeichen, matr_nr,
|
||||
staatsbuergerschaft, gebdatum, true AS mitarbeiter
|
||||
FROM
|
||||
public.tbl_person
|
||||
JOIN public.tbl_benutzer USING(person_id)
|
||||
JOIN public.tbl_mitarbeiter ON (mitarbeiter_uid=uid)
|
||||
WHERE
|
||||
bpk is null
|
||||
AND tbl_benutzer.aktiv=true
|
||||
',
|
||||
'requiredPermissions' => 'admin',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
@@ -25,6 +36,7 @@
|
||||
ucfirst($this->p->t('person', 'matrikelnummer')),
|
||||
ucfirst($this->p->t('person', 'staatsbuergerschaft')),
|
||||
ucfirst($this->p->t('person', 'geburtsdatum')),
|
||||
'Mitarbeiter'
|
||||
),
|
||||
'formatRow' => function($datasetRaw) {
|
||||
|
||||
@@ -45,6 +57,11 @@
|
||||
{
|
||||
$datasetRaw->{'svnr'} = '-';
|
||||
}
|
||||
if ($datasetRaw->{'matr_nr'} == null)
|
||||
{
|
||||
$datasetRaw->{'matr_nr'} = '-';
|
||||
}
|
||||
$datasetRaw->{'mitarbeiter'} = $datasetRaw->{'mitarbeiter'} == 'true' ? 'ja' : 'nein';
|
||||
|
||||
return $datasetRaw;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Jobs Queue Viewer',
|
||||
'jquery' => true,
|
||||
'jqueryui' => true,
|
||||
'bootstrap' => true,
|
||||
'fontawesome' => true,
|
||||
'sbadmintemplate' => true,
|
||||
'tablesorter' => true,
|
||||
'ajaxlib' => true,
|
||||
'filterwidget' => true,
|
||||
'navigationwidget' => true,
|
||||
'phrases' => array(
|
||||
'global' => array('mailAnXversandt'),
|
||||
'ui' => array('bitteEintragWaehlen')
|
||||
),
|
||||
'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
|
||||
'customJSs' => array('public/js/bootstrapper.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
Jobs Queue Viewer
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<?php $this->load->view('system/jq/jobsQueueViewerData.php'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
$filterWidgetArray = array(
|
||||
'query' => '
|
||||
SELECT jq.jobid AS "JobId",
|
||||
jq.creationtime AS "CreationTime",
|
||||
jq.type AS "Type",
|
||||
jq.status AS "Status",
|
||||
jq.starttime AS "StartTime",
|
||||
jq.endtime AS "EndTime",
|
||||
jq.insertvon AS "UserService"
|
||||
FROM system.tbl_jobsqueue jq
|
||||
ORDER BY jq.creationtime DESC, jq.starttime DESC, jq.endtime DESC
|
||||
',
|
||||
'requiredPermissions' => 'admin',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'columnsAliases' => array(
|
||||
'Job id',
|
||||
'Creation time',
|
||||
'Type',
|
||||
'Status',
|
||||
'Start time',
|
||||
'End time',
|
||||
'User/Service'
|
||||
),
|
||||
'formatRow' => function($datasetRaw) {
|
||||
|
||||
$datasetRaw->CreationTime = date_format(date_create($datasetRaw->CreationTime), 'd.m.Y H:i:s');
|
||||
$datasetRaw->StartTime = date_format(date_create($datasetRaw->StartTime), 'd.m.Y H:i:s');
|
||||
$datasetRaw->EndTime = date_format(date_create($datasetRaw->EndTime), 'd.m.Y H:i:s');
|
||||
|
||||
return $datasetRaw;
|
||||
},
|
||||
'markRow' => function($datasetRaw) {
|
||||
|
||||
$mark = '';
|
||||
|
||||
if ($datasetRaw->Status == JobsQueueLib::STATUS_FAILED)
|
||||
{
|
||||
$mark = 'text-red';
|
||||
}
|
||||
|
||||
if ($datasetRaw->Status == JobsQueueLib::STATUS_DONE)
|
||||
{
|
||||
$mark = 'text-green';
|
||||
}
|
||||
|
||||
if ($datasetRaw->Status == JobsQueueLib::STATUS_RUNNING)
|
||||
{
|
||||
$mark = 'text-orange';
|
||||
}
|
||||
|
||||
if ($datasetRaw->Status == JobsQueueLib::STATUS_NEW)
|
||||
{
|
||||
$mark = 'text-info';
|
||||
}
|
||||
|
||||
return $mark;
|
||||
}
|
||||
);
|
||||
|
||||
$filterWidgetArray['app'] = 'core';
|
||||
$filterWidgetArray['datasetName'] = 'jq';
|
||||
$filterWidgetArray['filter_id'] = $this->input->get('filter_id');
|
||||
|
||||
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
|
||||
?>
|
||||
@@ -2,7 +2,7 @@
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Logs viewer',
|
||||
'title' => 'Logs Viewer',
|
||||
'jquery' => true,
|
||||
'jqueryui' => true,
|
||||
'bootstrap' => true,
|
||||
@@ -32,7 +32,7 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
JobsViewer
|
||||
Job Logs Viewer
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -812,6 +812,7 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1))
|
||||
{
|
||||
$studlist .= "
|
||||
<td><b>" . $p->t('global/personenkz') . "</b></td>
|
||||
<td><b>" . $p->t('global/studiengang') . "</b></td>
|
||||
<td><b>" . $p->t('global/nachname') . "</b></td>
|
||||
<td><b>" . $p->t('global/vorname') . "</b></td>
|
||||
";
|
||||
@@ -834,10 +835,11 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1))
|
||||
|
||||
// studentenquery
|
||||
$qry_stud = "SELECT
|
||||
DISTINCT uid, vorname, nachname, matrikelnr
|
||||
DISTINCT uid, vorname, nachname, matrikelnr, kurzbzlang
|
||||
FROM
|
||||
campus.vw_student_lehrveranstaltung
|
||||
JOIN campus.vw_student USING(uid)
|
||||
JOIN public.tbl_studiengang ON campus.vw_student.studiengang_kz = public.tbl_studiengang.studiengang_kz
|
||||
WHERE
|
||||
studiensemester_kurzbz = " . $db->db_add_param($stsem) . "
|
||||
AND lehrveranstaltung_id = " . $db->db_add_param($lvid, FHC_INTEGER) . "
|
||||
@@ -859,6 +861,7 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1))
|
||||
if (defined('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE') && CIS_GESAMTNOTE_FREIGABEMAIL_NOTE)
|
||||
{
|
||||
$studlist .= "<tr><td>" . trim($row_stud->matrikelnr) . "</td>";
|
||||
$studlist .= "<td>" . trim($row_stud->kurzbzlang) . "</td>";
|
||||
$studlist .= "<td>" . trim($row_stud->nachname) . "</td>";
|
||||
$studlist .= "<td>" . trim($row_stud->vorname) . "</td>";
|
||||
|
||||
|
||||
@@ -725,6 +725,11 @@ function refresh()
|
||||
loadPruefungen();
|
||||
loadPruefungenOfStudiengang();
|
||||
loadPruefungenGesamt();
|
||||
|
||||
if ($("#filter_studiensemester").val() == "0")
|
||||
$("#additional-exams").hide();
|
||||
else
|
||||
$("#additional-exams").show();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -53,7 +53,7 @@ $method = isset($_REQUEST['method'])?$_REQUEST['method']:'';
|
||||
switch($method)
|
||||
{
|
||||
case 'getPruefungByLv':
|
||||
$studiensemester = isset($_REQUEST['studiensemester']) ? $_REQUEST['studiensemester'] : NULL;
|
||||
$studiensemester = isset($_REQUEST['studiensemester']) && $_REQUEST['studiensemester'] != '0' ? $_REQUEST['studiensemester'] : NULL;
|
||||
$data = getPruefungByLv($studiensemester, $uid);
|
||||
break;
|
||||
case 'getPruefungByLvFromStudiengang':
|
||||
@@ -164,7 +164,10 @@ function getPruefungByLv($aktStudiensemester = null, $uid = null)
|
||||
$lehrveranstaltung = new lehrveranstaltung($lv->lehrveranstaltung_id);
|
||||
$lehrveranstaltung = $lehrveranstaltung->cleanResult();
|
||||
$lehreinheit = new lehreinheit();
|
||||
$lehreinheit->load_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id, $aktStudiensemester);
|
||||
if ($aktStudiensemester == null)
|
||||
$lehreinheit->load_all_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id);
|
||||
else
|
||||
$lehreinheit->load_lehreinheiten($lehrveranstaltung[0]->lehrveranstaltung_id, $aktStudiensemester);
|
||||
$lehreinheiten = $lehreinheit->lehreinheiten;
|
||||
$prf = new stdClass();
|
||||
$temp = new pruefungCis($lv->pruefung_id);
|
||||
|
||||
@@ -187,21 +187,15 @@ $studiensemester->getAll();
|
||||
<body>
|
||||
<?php
|
||||
echo "<h1>".$p->t('pruefung/anmeldungFuer')." ".$benutzer->vorname." ".$benutzer->nachname." (".$uid.")</h1>";
|
||||
echo '<h3>'.$p->t('pruefung/filter').'</h3>';
|
||||
echo '<p>'.$p->t('global/studiensemester').': ';
|
||||
echo '<h3 style="display: none">'.$p->t('pruefung/filter').'</h3>';
|
||||
echo '<p style="display: none">'.$p->t('global/studiensemester').': ';
|
||||
echo '<select id="filter_studiensemester" onchange="refresh();">';
|
||||
$aktuellesSemester = $studiensemester->getaktorNext();
|
||||
foreach ($studiensemester->studiensemester as $sem)
|
||||
{
|
||||
if ($aktuellesSemester == $sem->studiensemester_kurzbz)
|
||||
{
|
||||
echo '<option selected value="'.$sem->studiensemester_kurzbz.'">'.$sem->studiensemester_kurzbz.'</option>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<option value="'.$sem->studiensemester_kurzbz.'">'.$sem->studiensemester_kurzbz.'</option>';
|
||||
}
|
||||
echo '<option value="'.$sem->studiensemester_kurzbz.'">'.$sem->studiensemester_kurzbz.'</option>';
|
||||
}
|
||||
echo '<option selected value="0">alle Semester</option>';
|
||||
echo '</select></p>';
|
||||
?>
|
||||
<div id="details" title="<?php echo $p->t('pruefung/details'); ?>">
|
||||
@@ -240,43 +234,45 @@ $studiensemester->getAll();
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php
|
||||
if (!defined('CIS_PRUEFUNGSANMELDUNG_LEHRVERANSTALTUNGEN_AUS_STUDIENGANG')
|
||||
|| CIS_PRUEFUNGSANMELDUNG_LEHRVERANSTALTUNGEN_AUS_STUDIENGANG == true):
|
||||
?>
|
||||
<h2><?php echo $p->t('pruefung/lvVonStudiengang'); ?></h2>
|
||||
<div>
|
||||
<table id="table2" class="tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="columnheader1"><?php echo $p->t('global/institut'); ?></th>
|
||||
<th class="columnheader2"><?php echo $p->t('global/lehrveranstaltung'); ?></th>
|
||||
<th class="columnheader3"><?php echo $p->t('pruefung/pruefungTermin'); ?></th>
|
||||
<th class="columnheader4"><?php echo $p->t('pruefung/freiePlaetze'); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="pruefungenStudiengang">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div id="additional-exams" style="display: none">
|
||||
<?php
|
||||
if (!defined('CIS_PRUEFUNGSANMELDUNG_LEHRVERANSTALTUNGEN_AUS_STUDIENGANG')
|
||||
|| CIS_PRUEFUNGSANMELDUNG_LEHRVERANSTALTUNGEN_AUS_STUDIENGANG == true):
|
||||
?>
|
||||
<h2><?php echo $p->t('pruefung/lvVonStudiengang'); ?></h2>
|
||||
<div>
|
||||
<table id="table2" class="tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="columnheader1"><?php echo $p->t('global/institut'); ?></th>
|
||||
<th class="columnheader2"><?php echo $p->t('global/lehrveranstaltung'); ?></th>
|
||||
<th class="columnheader3"><?php echo $p->t('pruefung/pruefungTermin'); ?></th>
|
||||
<th class="columnheader4"><?php echo $p->t('pruefung/freiePlaetze'); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="pruefungenStudiengang">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<h2><?php echo $p->t('pruefung/lvAlle'); ?></h2>
|
||||
<div>
|
||||
<table id="table3" class="tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="columnheader1"><?php echo $p->t('global/institut'); ?></th>
|
||||
<th class="columnheader2"><?php echo $p->t('global/lehrveranstaltung'); ?></th>
|
||||
<th class="columnheader3"><?php echo $p->t('pruefung/pruefungTermin'); ?></th>
|
||||
<th class="columnheader4"><?php echo $p->t('pruefung/freiePlaetze'); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="pruefungenGesamt">
|
||||
<h2><?php echo $p->t('pruefung/lvAlle'); ?></h2>
|
||||
<div>
|
||||
<table id="table3" class="tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="columnheader1"><?php echo $p->t('global/institut'); ?></th>
|
||||
<th class="columnheader2"><?php echo $p->t('global/lehrveranstaltung'); ?></th>
|
||||
<th class="columnheader3"><?php echo $p->t('pruefung/pruefungTermin'); ?></th>
|
||||
<th class="columnheader4"><?php echo $p->t('pruefung/freiePlaetze'); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="pruefungenGesamt">
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="saveDialog" title="<?php echo $p->t('pruefung/anmeldungSpeichern'); ?>">
|
||||
<form id="saveAnmeldungForm">
|
||||
|
||||
+283
-277
@@ -1,277 +1,283 @@
|
||||
<?php
|
||||
/* Copyright (C) 2006 fhcomplete.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
|
||||
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
||||
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
||||
*/
|
||||
|
||||
require_once('../../../config/cis.config.inc.php');
|
||||
require_once('../../../include/functions.inc.php');
|
||||
require_once('../../../include/studiensemester.class.php');
|
||||
require_once('../../../include/konto.class.php');
|
||||
require_once('../../../include/person.class.php');
|
||||
require_once('../../../include/benutzer.class.php');
|
||||
require_once('../../../include/datum.class.php');
|
||||
require_once('../../../include/studiengang.class.php');
|
||||
require_once('../../../include/phrasen.class.php');
|
||||
require_once('../../../include/benutzerberechtigung.class.php');
|
||||
|
||||
$sprache = getSprache();
|
||||
$p = new phrasen($sprache);
|
||||
$uid=get_uid();
|
||||
|
||||
if(isset($_GET['uid']))
|
||||
{
|
||||
// Administratoren duerfen die UID als Parameter uebergeben um die Zahlungen
|
||||
// von anderen Personen anzuzeigen
|
||||
|
||||
$rechte = new benutzerberechtigung();
|
||||
$rechte->getBerechtigungen($uid);
|
||||
if($rechte->isBerechtigt('admin'))
|
||||
{
|
||||
$uid = $_GET['uid'];
|
||||
$getParam = "&uid=" . $uid;
|
||||
}
|
||||
else
|
||||
$getParam = "";
|
||||
}
|
||||
else
|
||||
$getParam='';
|
||||
|
||||
$datum_obj = new datum();
|
||||
|
||||
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>'.$p->t('tools/zahlungen').'</title>
|
||||
<link href="../../../skin/style.css.php" rel="stylesheet" type="text/css">
|
||||
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>';
|
||||
|
||||
include('../../../include/meta/jquery.php');
|
||||
include('../../../include/meta/jquery-tablesorter.php');
|
||||
|
||||
echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
|
||||
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
|
||||
</head>
|
||||
<style>
|
||||
table.tablesorter
|
||||
{
|
||||
width: auto;
|
||||
}
|
||||
table.tablesorter tbody td
|
||||
{
|
||||
padding: 1px 3px;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
// Parser für Datum DD.MM.YYYY
|
||||
$.tablesorter.addParser({
|
||||
id: "customDate",
|
||||
is: function(s) {
|
||||
//return false;
|
||||
//use the above line if you don\'t want table sorter to auto detected this parser
|
||||
// match dd.mm.yyyy e.g. 01.01.2001 as regex
|
||||
return /\d{1,2}.\d{1,2}.\d{1,4}/.test(s);
|
||||
},
|
||||
// replace regex-wildcards and return new date
|
||||
format: function(s) {
|
||||
s = s.replace(/\-/g," ");
|
||||
s = s.replace(/:/g," ");
|
||||
s = s.replace(/\./g," ");
|
||||
s = s.split(" ");
|
||||
return $.tablesorter.formatFloat(new Date(s[2], s[1]-1, s[0]).getTime());
|
||||
},
|
||||
type: "numeric"
|
||||
});
|
||||
// Parser für Betrag
|
||||
$.tablesorter.addParser({
|
||||
id: "customCurrancy",
|
||||
is: function(s) {
|
||||
//return false;
|
||||
//use the above line if you don\'t want table sorter to auto detected this parser
|
||||
// match dd.mm.yyyy e.g. 01.01.2001 as regex
|
||||
//alert(/€\s\d*.*/.test(s))
|
||||
return /€\s\d*.*/.test(s);
|
||||
},
|
||||
// replace regex-wildcards and return new date
|
||||
format: function(s) {
|
||||
s = s.replace(/\-/g," ");
|
||||
s = s.replace(/:/g," ");
|
||||
s = s.replace(/\./g," ");
|
||||
s = s.split(" ");
|
||||
return $.tablesorter.formatFloat(s[1]);
|
||||
},
|
||||
type: "numeric"
|
||||
});
|
||||
// Parser für Studiensemester
|
||||
$.tablesorter.addParser({
|
||||
// set a unique id
|
||||
id: "studiensemester",
|
||||
is: function(s) {
|
||||
// return false so this parser is not auto detected
|
||||
return false;
|
||||
},
|
||||
format: function(s) {
|
||||
// format data for normalization
|
||||
var result = s.substr(2) + s.substr(0, 2);
|
||||
return result;
|
||||
},
|
||||
// set type, either numeric or text
|
||||
type: "text"
|
||||
});
|
||||
// For correct sorting of Umlauts
|
||||
$.tablesorter.characterEquivalents = {
|
||||
"a" : "\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5", // áàâãäąå
|
||||
"A" : "\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5", // ÁÀÂÃÄĄÅ
|
||||
"c" : "\u00e7\u0107\u010d", // çćč
|
||||
"C" : "\u00c7\u0106\u010c", // ÇĆČ
|
||||
"e" : "\u00e9\u00e8\u00ea\u00eb\u011b\u0119", // éèêëěę
|
||||
"E" : "\u00c9\u00c8\u00ca\u00cb\u011a\u0118", // ÉÈÊËĚĘ
|
||||
"i" : "\u00ed\u00ec\u0130\u00ee\u00ef\u0131", // íìİîïı
|
||||
"I" : "\u00cd\u00cc\u0130\u00ce\u00cf", // ÍÌİÎÏ
|
||||
"o" : "\u00f3\u00f2\u00f4\u00f5\u00f6\u014d", // óòôõöō
|
||||
"O" : "\u00d3\u00d2\u00d4\u00d5\u00d6\u014c", // ÓÒÔÕÖŌ
|
||||
"ss": "\u00df", // ß (s sharp)
|
||||
"SS": "\u1e9e", // ẞ (Capital sharp s)
|
||||
"u" : "\u00fa\u00f9\u00fb\u00fc\u016f", // úùûüů
|
||||
"U" : "\u00da\u00d9\u00db\u00dc\u016e" // ÚÙÛÜŮ
|
||||
};
|
||||
$(document).ready(function()
|
||||
{
|
||||
$("#t1").tablesorter(
|
||||
{
|
||||
// Adding Function for sorting images by title
|
||||
textExtraction:function(s)
|
||||
{
|
||||
if($(s).find(\'img\').length == 0) return $(s).text();
|
||||
return $(s).find(\'img\').attr(\'title\');
|
||||
},
|
||||
sortList: [[0,1],[1,1]],
|
||||
widgets: ["zebra"],
|
||||
sortLocaleCompare : true,
|
||||
headers: { 0: { sorter: "customDate"}, 3: { sorter: "studiensemester"}, 5: { sorter: "customCurrancy"}, 6: { sorter: false}}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<body>';
|
||||
|
||||
$studiengang = new studiengang();
|
||||
$studiengang->getAll(null,null);
|
||||
|
||||
$stg_arr = array();
|
||||
foreach ($studiengang->result as $row)
|
||||
$stg_arr[$row->studiengang_kz]=$row->kuerzel;
|
||||
|
||||
$benutzer = new benutzer();
|
||||
if(!$benutzer->load($uid))
|
||||
die('Benutzer wurde nicht gefunden');
|
||||
|
||||
echo '<h1>'.$p->t('tools/zahlungen').' - '.$benutzer->vorname.' '.$benutzer->nachname.'</h1>';
|
||||
|
||||
$konto = new konto();
|
||||
$konto->getBuchungstyp();
|
||||
$buchungstyp = array();
|
||||
|
||||
foreach ($konto->result as $row)
|
||||
$buchungstyp[$row->buchungstyp_kurzbz]=$row->beschreibung;
|
||||
|
||||
$konto = new konto();
|
||||
$konto->getBuchungen($benutzer->person_id);
|
||||
if(count($konto->result)>0)
|
||||
{
|
||||
echo '<br><br><table class="tablesorter" id="t1"><thead>';
|
||||
echo '<tr>';
|
||||
echo '
|
||||
<th>'.$p->t('global/datum').'</th>
|
||||
<th>'.$p->t('tools/zahlungstyp').'</th>
|
||||
<th>'.$p->t('lvplan/stg').'</th>
|
||||
<th>'.$p->t('global/studiensemester').'</th>
|
||||
<th>'.$p->t('tools/buchungstext').'</th>
|
||||
<th>'.$p->t('tools/betrag').'</th>
|
||||
<th>'.$p->t('tools/zahlungsbestaetigung').'</th>';
|
||||
echo '</tr></thead><tbody>';
|
||||
|
||||
foreach ($konto->result as $row)
|
||||
{
|
||||
$i=0; //Zaehler fuer Anzahl Gegenbuchungen
|
||||
$buchungsnummern='';
|
||||
|
||||
if(!isset($row['parent']))
|
||||
continue;
|
||||
$betrag = $row['parent']->betrag;
|
||||
|
||||
|
||||
if(isset($row['childs']))
|
||||
{
|
||||
foreach ($row['childs'] as $key => $row_child)
|
||||
{
|
||||
$betrag += $row_child->betrag;
|
||||
$betrag = round($betrag, 2);
|
||||
$buchungsnummern .= ';'.$row['childs'][$key]->buchungsnr;
|
||||
$i = $key; //Zaehler auf letzten Gegenbuchungseintrag setzen
|
||||
}
|
||||
}
|
||||
else
|
||||
$buchungsnummern = $row['parent']->buchungsnr;
|
||||
|
||||
if($betrag<0)
|
||||
$style='style="background-color: #FF8888;"';
|
||||
elseif($betrag>0)
|
||||
$style='style="background-color: #88DD88;"';
|
||||
else
|
||||
$style='';
|
||||
|
||||
echo "<tr>";
|
||||
echo '<td '.$style.'>'.date('d.m.Y',$datum_obj->mktime_fromdate(isset($row['childs'][$i])?$row['childs'][$i]->buchungsdatum:$row['parent']->buchungsdatum)).'</td>';
|
||||
echo '<td '.$style.'>'.$buchungstyp[$row['parent']->buchungstyp_kurzbz].'</td>';
|
||||
echo '<td '.$style.'>'.$stg_arr[$row['parent']->studiengang_kz].'</td>';
|
||||
echo '<td '.$style.'>'.$row['parent']->studiensemester_kurzbz.'</td>';
|
||||
|
||||
echo '<td '.$style.'>'.$row['parent']->buchungstext.'</td>';
|
||||
echo '<td align="right" '.$style.'>€ '.($betrag<0?'-':($betrag>0?'+':'')).sprintf('%.2f',abs($row['parent']->betrag)).'</td>';
|
||||
echo '<td align="center" '.$style.'>';
|
||||
if($betrag>=0 && $row['parent']->betrag<=0)
|
||||
{
|
||||
echo '<a href="../pdfExport.php?xml=konto.rdf.php&xsl=Zahlung&uid='.$uid.'&buchungsnummern='.$buchungsnummern.'" title="'.$p->t('tools/bestaetigungDrucken').'"><img src="../../../skin/images/pdfpic.gif" alt="'.$p->t('tools/bestaetigungDrucken').'"></a>';
|
||||
}
|
||||
elseif($row['parent']->betrag>0)
|
||||
{
|
||||
//Auszahlung
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<a onclick="window.open(';
|
||||
echo "'zahlungen_details.php?buchungsnr=".$row['parent']->buchungsnr.$getParam."','Zahlungsdetails','height=500,width=550,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=no,toolbar=no,location=no,menubar=no,dependent=yes');return false;";
|
||||
echo '" href="#">'.$p->t('tools/offen').'</a>(€ '.sprintf('%.2f',$betrag*-1).')';
|
||||
|
||||
echo '</td>';
|
||||
}
|
||||
echo '</tr>';
|
||||
}
|
||||
echo '</tbody></table>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $p->t('tools/keineZahlungenVorhanden');
|
||||
}
|
||||
echo '</td></tr></table';
|
||||
|
||||
echo '</body></html>';
|
||||
?>
|
||||
<?php
|
||||
/* Copyright (C) 2006 fhcomplete.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
|
||||
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
||||
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
||||
*/
|
||||
|
||||
require_once('../../../config/cis.config.inc.php');
|
||||
require_once('../../../config/global.config.inc.php');
|
||||
require_once('../../../include/functions.inc.php');
|
||||
require_once('../../../include/studiensemester.class.php');
|
||||
require_once('../../../include/konto.class.php');
|
||||
require_once('../../../include/person.class.php');
|
||||
require_once('../../../include/benutzer.class.php');
|
||||
require_once('../../../include/datum.class.php');
|
||||
require_once('../../../include/studiengang.class.php');
|
||||
require_once('../../../include/phrasen.class.php');
|
||||
require_once('../../../include/benutzerberechtigung.class.php');
|
||||
|
||||
$sprache = getSprache();
|
||||
$p = new phrasen($sprache);
|
||||
$uid=get_uid();
|
||||
|
||||
if(isset($_GET['uid']))
|
||||
{
|
||||
// Administratoren duerfen die UID als Parameter uebergeben um die Zahlungen
|
||||
// von anderen Personen anzuzeigen
|
||||
|
||||
$rechte = new benutzerberechtigung();
|
||||
$rechte->getBerechtigungen($uid);
|
||||
if($rechte->isBerechtigt('admin'))
|
||||
{
|
||||
$uid = $_GET['uid'];
|
||||
$getParam = "&uid=" . $uid;
|
||||
}
|
||||
else
|
||||
$getParam = "";
|
||||
}
|
||||
else
|
||||
$getParam='';
|
||||
|
||||
if (defined('ZAHLUNGSBESTAETIGUNG_ANZEIGEN') && !ZAHLUNGSBESTAETIGUNG_ANZEIGEN)
|
||||
{
|
||||
die('Um diese Seite anzuzeigen, ist ein entsprechender Eintrag in der Konfigurationsdatei nötig.');
|
||||
}
|
||||
|
||||
$datum_obj = new datum();
|
||||
|
||||
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>'.$p->t('tools/zahlungen').'</title>
|
||||
<link href="../../../skin/style.css.php" rel="stylesheet" type="text/css">
|
||||
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>';
|
||||
|
||||
include('../../../include/meta/jquery.php');
|
||||
include('../../../include/meta/jquery-tablesorter.php');
|
||||
|
||||
echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
|
||||
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
|
||||
</head>
|
||||
<style>
|
||||
table.tablesorter
|
||||
{
|
||||
width: auto;
|
||||
}
|
||||
table.tablesorter tbody td
|
||||
{
|
||||
padding: 1px 3px;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
// Parser für Datum DD.MM.YYYY
|
||||
$.tablesorter.addParser({
|
||||
id: "customDate",
|
||||
is: function(s) {
|
||||
//return false;
|
||||
//use the above line if you don\'t want table sorter to auto detected this parser
|
||||
// match dd.mm.yyyy e.g. 01.01.2001 as regex
|
||||
return /\d{1,2}.\d{1,2}.\d{1,4}/.test(s);
|
||||
},
|
||||
// replace regex-wildcards and return new date
|
||||
format: function(s) {
|
||||
s = s.replace(/\-/g," ");
|
||||
s = s.replace(/:/g," ");
|
||||
s = s.replace(/\./g," ");
|
||||
s = s.split(" ");
|
||||
return $.tablesorter.formatFloat(new Date(s[2], s[1]-1, s[0]).getTime());
|
||||
},
|
||||
type: "numeric"
|
||||
});
|
||||
// Parser für Betrag
|
||||
$.tablesorter.addParser({
|
||||
id: "customCurrancy",
|
||||
is: function(s) {
|
||||
//return false;
|
||||
//use the above line if you don\'t want table sorter to auto detected this parser
|
||||
// match dd.mm.yyyy e.g. 01.01.2001 as regex
|
||||
//alert(/€\s\d*.*/.test(s))
|
||||
return /€\s\d*.*/.test(s);
|
||||
},
|
||||
// replace regex-wildcards and return new date
|
||||
format: function(s) {
|
||||
s = s.replace(/\-/g," ");
|
||||
s = s.replace(/:/g," ");
|
||||
s = s.replace(/\./g," ");
|
||||
s = s.split(" ");
|
||||
return $.tablesorter.formatFloat(s[1]);
|
||||
},
|
||||
type: "numeric"
|
||||
});
|
||||
// Parser für Studiensemester
|
||||
$.tablesorter.addParser({
|
||||
// set a unique id
|
||||
id: "studiensemester",
|
||||
is: function(s) {
|
||||
// return false so this parser is not auto detected
|
||||
return false;
|
||||
},
|
||||
format: function(s) {
|
||||
// format data for normalization
|
||||
var result = s.substr(2) + s.substr(0, 2);
|
||||
return result;
|
||||
},
|
||||
// set type, either numeric or text
|
||||
type: "text"
|
||||
});
|
||||
// For correct sorting of Umlauts
|
||||
$.tablesorter.characterEquivalents = {
|
||||
"a" : "\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5", // áàâãäąå
|
||||
"A" : "\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5", // ÁÀÂÃÄĄÅ
|
||||
"c" : "\u00e7\u0107\u010d", // çćč
|
||||
"C" : "\u00c7\u0106\u010c", // ÇĆČ
|
||||
"e" : "\u00e9\u00e8\u00ea\u00eb\u011b\u0119", // éèêëěę
|
||||
"E" : "\u00c9\u00c8\u00ca\u00cb\u011a\u0118", // ÉÈÊËĚĘ
|
||||
"i" : "\u00ed\u00ec\u0130\u00ee\u00ef\u0131", // íìİîïı
|
||||
"I" : "\u00cd\u00cc\u0130\u00ce\u00cf", // ÍÌİÎÏ
|
||||
"o" : "\u00f3\u00f2\u00f4\u00f5\u00f6\u014d", // óòôõöō
|
||||
"O" : "\u00d3\u00d2\u00d4\u00d5\u00d6\u014c", // ÓÒÔÕÖŌ
|
||||
"ss": "\u00df", // ß (s sharp)
|
||||
"SS": "\u1e9e", // ẞ (Capital sharp s)
|
||||
"u" : "\u00fa\u00f9\u00fb\u00fc\u016f", // úùûüů
|
||||
"U" : "\u00da\u00d9\u00db\u00dc\u016e" // ÚÙÛÜŮ
|
||||
};
|
||||
$(document).ready(function()
|
||||
{
|
||||
$("#t1").tablesorter(
|
||||
{
|
||||
// Adding Function for sorting images by title
|
||||
textExtraction:function(s)
|
||||
{
|
||||
if($(s).find(\'img\').length == 0) return $(s).text();
|
||||
return $(s).find(\'img\').attr(\'title\');
|
||||
},
|
||||
sortList: [[0,1],[1,1]],
|
||||
widgets: ["zebra"],
|
||||
sortLocaleCompare : true,
|
||||
headers: { 0: { sorter: "customDate"}, 3: { sorter: "studiensemester"}, 5: { sorter: "customCurrancy"}, 6: { sorter: false}}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<body>';
|
||||
|
||||
$studiengang = new studiengang();
|
||||
$studiengang->getAll(null,null);
|
||||
|
||||
$stg_arr = array();
|
||||
foreach ($studiengang->result as $row)
|
||||
$stg_arr[$row->studiengang_kz]=$row->kuerzel;
|
||||
|
||||
$benutzer = new benutzer();
|
||||
if(!$benutzer->load($uid))
|
||||
die('Benutzer wurde nicht gefunden');
|
||||
|
||||
echo '<h1>'.$p->t('tools/zahlungen').' - '.$benutzer->vorname.' '.$benutzer->nachname.'</h1>';
|
||||
|
||||
$konto = new konto();
|
||||
$konto->getBuchungstyp();
|
||||
$buchungstyp = array();
|
||||
|
||||
foreach ($konto->result as $row)
|
||||
$buchungstyp[$row->buchungstyp_kurzbz]=$row->beschreibung;
|
||||
|
||||
$konto = new konto();
|
||||
$konto->getBuchungen($benutzer->person_id);
|
||||
if(count($konto->result)>0)
|
||||
{
|
||||
echo '<br><br><table class="tablesorter" id="t1"><thead>';
|
||||
echo '<tr>';
|
||||
echo '
|
||||
<th>'.$p->t('global/datum').'</th>
|
||||
<th>'.$p->t('tools/zahlungstyp').'</th>
|
||||
<th>'.$p->t('lvplan/stg').'</th>
|
||||
<th>'.$p->t('global/studiensemester').'</th>
|
||||
<th>'.$p->t('tools/buchungstext').'</th>
|
||||
<th>'.$p->t('tools/betrag').'</th>
|
||||
<th>'.$p->t('tools/zahlungsbestaetigung').'</th>';
|
||||
echo '</tr></thead><tbody>';
|
||||
|
||||
foreach ($konto->result as $row)
|
||||
{
|
||||
$i=0; //Zaehler fuer Anzahl Gegenbuchungen
|
||||
$buchungsnummern='';
|
||||
|
||||
if(!isset($row['parent']))
|
||||
continue;
|
||||
$betrag = $row['parent']->betrag;
|
||||
|
||||
|
||||
if(isset($row['childs']))
|
||||
{
|
||||
foreach ($row['childs'] as $key => $row_child)
|
||||
{
|
||||
$betrag += $row_child->betrag;
|
||||
$betrag = round($betrag, 2);
|
||||
$buchungsnummern .= ';'.$row['childs'][$key]->buchungsnr;
|
||||
$i = $key; //Zaehler auf letzten Gegenbuchungseintrag setzen
|
||||
}
|
||||
}
|
||||
else
|
||||
$buchungsnummern = $row['parent']->buchungsnr;
|
||||
|
||||
if($betrag<0)
|
||||
$style='style="background-color: #FF8888;"';
|
||||
elseif($betrag>0)
|
||||
$style='style="background-color: #88DD88;"';
|
||||
else
|
||||
$style='';
|
||||
|
||||
echo "<tr>";
|
||||
echo '<td '.$style.'>'.date('d.m.Y',$datum_obj->mktime_fromdate(isset($row['childs'][$i])?$row['childs'][$i]->buchungsdatum:$row['parent']->buchungsdatum)).'</td>';
|
||||
echo '<td '.$style.'>'.$buchungstyp[$row['parent']->buchungstyp_kurzbz].'</td>';
|
||||
echo '<td '.$style.'>'.$stg_arr[$row['parent']->studiengang_kz].'</td>';
|
||||
echo '<td '.$style.'>'.$row['parent']->studiensemester_kurzbz.'</td>';
|
||||
|
||||
echo '<td '.$style.'>'.$row['parent']->buchungstext.'</td>';
|
||||
echo '<td align="right" '.$style.'>€ '.($betrag<0?'-':($betrag>0?'+':'')).sprintf('%.2f',abs($row['parent']->betrag)).'</td>';
|
||||
echo '<td align="center" '.$style.'>';
|
||||
if($betrag>=0 && $row['parent']->betrag<=0)
|
||||
{
|
||||
echo '<a href="../pdfExport.php?xml=konto.rdf.php&xsl=Zahlung&uid='.$uid.'&buchungsnummern='.$buchungsnummern.'" title="'.$p->t('tools/bestaetigungDrucken').'"><img src="../../../skin/images/pdfpic.gif" alt="'.$p->t('tools/bestaetigungDrucken').'"></a>';
|
||||
}
|
||||
elseif($row['parent']->betrag>0)
|
||||
{
|
||||
//Auszahlung
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<a onclick="window.open(';
|
||||
echo "'zahlungen_details.php?buchungsnr=".$row['parent']->buchungsnr.$getParam."','Zahlungsdetails','height=500,width=550,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=no,toolbar=no,location=no,menubar=no,dependent=yes');return false;";
|
||||
echo '" href="#">'.$p->t('tools/offen').'</a>(€ '.sprintf('%.2f',$betrag*-1).')';
|
||||
|
||||
echo '</td>';
|
||||
}
|
||||
echo '</tr>';
|
||||
}
|
||||
echo '</tbody></table>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $p->t('tools/keineZahlungenVorhanden');
|
||||
}
|
||||
echo '</td></tr></table';
|
||||
|
||||
echo '</body></html>';
|
||||
?>
|
||||
|
||||
@@ -1039,9 +1039,10 @@ if($projekt->getProjekteMitarbeiter($user, true))
|
||||
echo '<p><a href="../../../cms/dms.php?id='.$p->t("dms_link/fiktiveNormalarbeitszeit").'" target="_blank">'.$p->t("zeitaufzeichnung/fiktiveNormalarbeitszeit").'</a></p>';
|
||||
}
|
||||
echo '<p><a href="../profile/zeitsperre_resturlaub.php">'.$p->t("urlaubstool/meineZeitsperren").'</a></p>';
|
||||
echo "</td>
|
||||
echo $p->t("zeitaufzeichnung/supportAnfragen");
|
||||
echo '</td>
|
||||
</tr>
|
||||
</table>";
|
||||
</table>';
|
||||
echo '<table>
|
||||
<tr>
|
||||
<td rowspan="2">';
|
||||
|
||||
@@ -294,4 +294,10 @@ define('STUDIENGANG_KZ_QUALIFIKATIONKURSE', null);
|
||||
|
||||
// Gibt an ob der Login ins Testtool ueber das Bewerbungstool stattfindet oder nicht
|
||||
define('TESTTOOL_LOGIN_BEWERBUNGSTOOL', false);
|
||||
|
||||
// Prueft ob Buchungen bereits ins SAP uebertragen wurden und sperrt ggf die Bearbeitung
|
||||
define('BUCHUNGEN_CHECK_SAP', true);
|
||||
|
||||
// Gibt an, ob im FAS die Zahlungsbestaetigungen zum Download / im CIS generell die Zahlungen angezeigt werden
|
||||
define ('ZAHLUNGSBESTAETIGUNG_ANZEIGEN', true);
|
||||
?>
|
||||
|
||||
@@ -249,4 +249,7 @@ define('BIS_FUNKTIONSCODE_6_ARR', array(
|
||||
'Team'
|
||||
));
|
||||
|
||||
// bPk Abfrage
|
||||
define('BPK_FUER_ALLE_BENUTZER_ABFRAGEN', false);
|
||||
|
||||
?>
|
||||
|
||||
@@ -280,6 +280,35 @@ function NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranst
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob die Kontobuchung bereits ins SAP Ubertragen wurde oder noch geändert werden darf
|
||||
*/
|
||||
function isBuchungAllowedToChange($buchung_obj)
|
||||
{
|
||||
global $db;
|
||||
|
||||
if(defined('BUCHUNGEN_CHECK_SAP') && BUCHUNGEN_CHECK_SAP == true)
|
||||
{
|
||||
$qry = "SELECT * FROM sync.tbl_sap_salesorder WHERE buchungsnr=".$db->db_add_param($buchung_obj->buchungsnr);
|
||||
if ($buchung_obj->buchungsnr_verweis != '')
|
||||
$qry .= " OR buchungsnr=".$db->db_add_param($buchung_obj->buchungsnr_verweis);
|
||||
|
||||
if ($result = $db->db_query($qry))
|
||||
{
|
||||
if($db->db_num_rows($result) > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!$error)
|
||||
{
|
||||
|
||||
@@ -1952,27 +1981,35 @@ if(!$error)
|
||||
}
|
||||
else
|
||||
{
|
||||
$buchung->betrag = $_POST['betrag'];
|
||||
$buchung->buchungsdatum = $_POST['buchungsdatum'];
|
||||
$buchung->buchungstext = $_POST['buchungstext'];
|
||||
$buchung->mahnspanne = $_POST['mahnspanne'];
|
||||
$buchung->buchungstyp_kurzbz = $_POST['buchungstyp_kurzbz'];
|
||||
$buchung->studiensemester_kurzbz = $_POST['studiensemester_kurzbz'];
|
||||
$buchung->studiengang_kz = $_POST['studiengang_kz'];
|
||||
$buchung->credit_points = $_POST['credit_points'];
|
||||
$buchung->new = false;
|
||||
$buchung->updateamum = date('Y-m-d H:i:s');
|
||||
$buchung->updatevon = $user;
|
||||
$buchung->anmerkung = $_POST['anmerkung'];
|
||||
|
||||
if($buchung->save())
|
||||
if(isBuchungAllowedToChange($buchung))
|
||||
{
|
||||
$return = true;
|
||||
$buchung->betrag = $_POST['betrag'];
|
||||
$buchung->buchungsdatum = $_POST['buchungsdatum'];
|
||||
$buchung->buchungstext = $_POST['buchungstext'];
|
||||
$buchung->mahnspanne = $_POST['mahnspanne'];
|
||||
$buchung->buchungstyp_kurzbz = $_POST['buchungstyp_kurzbz'];
|
||||
$buchung->studiensemester_kurzbz = $_POST['studiensemester_kurzbz'];
|
||||
$buchung->studiengang_kz = $_POST['studiengang_kz'];
|
||||
$buchung->credit_points = $_POST['credit_points'];
|
||||
$buchung->new = false;
|
||||
$buchung->updateamum = date('Y-m-d H:i:s');
|
||||
$buchung->updatevon = $user;
|
||||
$buchung->anmerkung = $_POST['anmerkung'];
|
||||
|
||||
if($buchung->save())
|
||||
{
|
||||
$return = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$return = false;
|
||||
$errormsg = 'Fehler beim Speichern:'.$buchung->errormsg;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$return = false;
|
||||
$errormsg = 'Fehler beim Speichern:'.$buchung->errormsg;
|
||||
$errormsg = 'Buchung wurde bereits übertragen und darf nicht geändert werden';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2025,26 +2062,34 @@ if(!$error)
|
||||
{
|
||||
if($buchung->buchungsnr_verweis=='')
|
||||
{
|
||||
$kto = new konto();
|
||||
//$buchung->betrag*(-1);
|
||||
$buchung->betrag = $kto->getDifferenz($buchungsnr);
|
||||
$buchung->buchungsdatum = $gegenbuchungsdatum;
|
||||
$buchung->mahnspanne = '0';
|
||||
$buchung->buchungsnr_verweis = $buchung->buchungsnr;
|
||||
$buchung->new = true;
|
||||
$buchung->insertamum = date('Y-m-d H:i:s');
|
||||
$buchung->insertvon = $user;
|
||||
$buchung->anmerkung = '';
|
||||
|
||||
if($buchung->save())
|
||||
if(isBuchungAllowedToChange($buchung))
|
||||
{
|
||||
//$data = $buchung->buchungsnr;
|
||||
$return = true;
|
||||
$kto = new konto();
|
||||
//$buchung->betrag*(-1);
|
||||
$buchung->betrag = $kto->getDifferenz($buchungsnr);
|
||||
$buchung->buchungsdatum = $gegenbuchungsdatum;
|
||||
$buchung->mahnspanne = '0';
|
||||
$buchung->buchungsnr_verweis = $buchung->buchungsnr;
|
||||
$buchung->new = true;
|
||||
$buchung->insertamum = date('Y-m-d H:i:s');
|
||||
$buchung->insertvon = $user;
|
||||
$buchung->anmerkung = '';
|
||||
|
||||
if($buchung->save())
|
||||
{
|
||||
//$data = $buchung->buchungsnr;
|
||||
$return = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$return = false;
|
||||
$errormsg .= "\n".'Fehler beim Speichern:'.$buchung->errormsg;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$return = false;
|
||||
$errormsg .= "\n".'Fehler beim Speichern:'.$buchung->errormsg;
|
||||
$errormsg .= "\n".'Buchung wurde bereits Übertragen und darf nicht geändert werden';
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2094,14 +2139,23 @@ if(!$error)
|
||||
}
|
||||
else
|
||||
{
|
||||
if($buchung->delete($_POST['buchungsnr']))
|
||||
if(isBuchungAllowedToChange($buchung))
|
||||
{
|
||||
$return = true;
|
||||
if($buchung->delete($_POST['buchungsnr']))
|
||||
{
|
||||
$return = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$errormsg = $buchung->errormsg;
|
||||
$return = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$errormsg = $buchung->errormsg;
|
||||
$error = true;
|
||||
$return = false;
|
||||
$errormsg = 'Diese Buchung darf nicht gelöscht werden da diese bereits übertragen wurde';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,13 +195,16 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
|
||||
</tree>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<?php
|
||||
$is_hidden = (defined('ZAHLUNGSBESTAETIGUNG_ANZEIGEN') && ZAHLUNGSBESTAETIGUNG_ANZEIGEN) ? 'false' : 'true';
|
||||
?>
|
||||
<hbox>
|
||||
<button id="student-konto-button-neu" label="Neu" oncommand="StudentKontoNeu();" disabled="true"/>
|
||||
<button id="student-konto-button-gegenbuchung" label="Gegenbuchung" oncommand="StudentKontoGegenbuchung();" disabled="true"/>
|
||||
<box class="Datum" id="student-konto-textbox-gegenbuchungsdatum" disabled="true" tooltiptext="Optionales Datum der Gegenbuchung"/>
|
||||
<button id="student-konto-button-loeschen" label="Loeschen" oncommand="StudentKontoDelete();" disabled="true"/>
|
||||
<spacer flex="1"/>
|
||||
<button id="student-konto-button-zahlungsbestaetigung" label="Zahlungsbestaetigung drucken" oncommand="StudentKontoZahlungsbestaetigung();" disabled="true"/>
|
||||
<button id="student-konto-button-zahlungsbestaetigung" label="Zahlungsbestaetigung drucken" oncommand="StudentKontoZahlungsbestaetigung();" disabled="true" hidden="<?php echo $is_hidden?>"/>
|
||||
</hbox>
|
||||
<vbox hidden="true">
|
||||
<label value="Buchungsnr" control="student-konto-textbox-buchungsnr"/>
|
||||
|
||||
@@ -3205,6 +3205,11 @@ function StudentZeugnisDokumentArchivieren()
|
||||
alert('Dieses Dokument kann nur für Studierende erstellt werden. Mindestens eine ausgewählte Person hat keine UID');
|
||||
continue;
|
||||
}
|
||||
if(vorlage == 'Ausbildungsver' || vorlage == 'AusbVerEng')
|
||||
{
|
||||
// Ausbildungsvertrag nimmt nur PrestudentID
|
||||
uid = '';
|
||||
}
|
||||
|
||||
var req = new phpRequest(url,'','');
|
||||
req.add('xsl', vorlage);
|
||||
|
||||
@@ -267,7 +267,7 @@ foreach ($uid_arr as $uid)
|
||||
'titelpost' => $bn->titelpost,
|
||||
'studiengang' => $studiengang->kurzbzlang,
|
||||
'gebdatum' => $datum_obj->formatDatum($bn->gebdatum, 'd.m.Y'),
|
||||
'matrikelnummer' => $student->matrikelnr,
|
||||
'matrikelnummer' => rtrim($student->matrikelnr),
|
||||
'matr_nr' => $person->matr_nr,
|
||||
'ausstellungsdatum' => date('M.Y'),
|
||||
'gueltigbis' => $datum_obj->formatDatum($gueltigbis, 'd.m.Y')
|
||||
|
||||
+25
-16
@@ -41,7 +41,7 @@ class dvb extends basis_db
|
||||
const DVB_URL_WEBSERVICE_MATRIKELNUMMER = DVB_PORTAL.'/rws/0.2/simpleStudentByMatrikelnummer.xml';
|
||||
const DVB_URL_WEBSERVICE_RESERVIERUNG = DVB_PORTAL.'/rws/0.5/matrikelreservierung.xml';
|
||||
const DVB_URL_WEBSERVICE_MELDUNG = DVB_PORTAL.'/rws/0.5/matrikelmeldung.xml';
|
||||
const DVB_URL_WEBSERVICE_BPK = DVB_PORTAL.'/rws/0.2/pruefeBpk.xml';
|
||||
const DVB_URL_WEBSERVICE_BPK = DVB_PORTAL.'/rws/0.5/pruefebpk.xml';
|
||||
|
||||
public $authentication;
|
||||
private $username;
|
||||
@@ -1139,11 +1139,14 @@ class dvb extends basis_db
|
||||
|
||||
$curl = curl_init();
|
||||
|
||||
$uuid = $this->getUUID();
|
||||
|
||||
$url = self::DVB_URL_WEBSERVICE_BPK;
|
||||
$url .= '?geburtsDatum='.curl_escape($curl, $geburtsdatum);
|
||||
$url .= '?geburtsdatum='.curl_escape($curl, $geburtsdatum);
|
||||
$url .= '&vorname='.curl_escape($curl, $vorname);
|
||||
$url .= '&nachname='.curl_escape($curl, $nachname);
|
||||
$url .= '&geschlecht='.curl_escape($curl, $geschlecht);
|
||||
$url .= '&uuid='.curl_escape($curl, $uuid);
|
||||
|
||||
if (!is_null($plz))
|
||||
$url .= '&plz='.curl_escape($curl, $plz);
|
||||
@@ -1178,19 +1181,22 @@ class dvb extends basis_db
|
||||
if ($curl_info['http_code'] == '200')
|
||||
{
|
||||
/* Example Response:
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<simpleBpkResponse xmlns="http://www.brz.gv.at/datenverbund-unis">
|
||||
<personenkennzeichen>1234567890ABCDEFGH=</personenkennzeichen>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<simpleBpkResponse xmlns="http://www.brz.gv.at/datenverbund-unis">
|
||||
<bpk>12345ABCDEFGHXXXXXXX=</bpk>
|
||||
<personInfo>
|
||||
<person>
|
||||
<vorname>Max</vorname>
|
||||
<nachname>Mustermann</nachname>
|
||||
<geschlecht>M</geschlecht>
|
||||
<gebdat>19901231</gebdat>
|
||||
</person>
|
||||
<adresse>
|
||||
<ort></ort>
|
||||
</adresse>
|
||||
<person>
|
||||
<vorname>Hans</vorname>
|
||||
<nachname>Huber</nachname>
|
||||
<geschlecht>M</geschlecht>
|
||||
<gebdat>1990-01-01</gebdat>
|
||||
</person>
|
||||
<adresse>
|
||||
<staat></staat>
|
||||
<plz>1100</plz>
|
||||
<ort></ort>
|
||||
<strasse></strasse>
|
||||
</adresse>
|
||||
</personInfo>
|
||||
</simpleBpkResponse>
|
||||
|
||||
@@ -1232,7 +1238,7 @@ class dvb extends basis_db
|
||||
}
|
||||
}
|
||||
|
||||
$domnodes_bpk = $dom->getElementsByTagNameNS($namespace, 'personenkennzeichen');
|
||||
$domnodes_bpk = $dom->getElementsByTagNameNS($namespace, 'bpk');
|
||||
if ($domnodes_bpk->length > 0)
|
||||
{
|
||||
$retval = new stdClass();
|
||||
@@ -1602,8 +1608,11 @@ class dvb extends basis_db
|
||||
|
||||
$curl = curl_init();
|
||||
|
||||
$url = self::DVB_URL_WEBSERVICE_MATRIKELNUMMER;
|
||||
$uuid = $this->getUUID();
|
||||
|
||||
$url = self::DVB_URL_WEBSERVICE_MATRIKELNUMMER;
|
||||
$url .= '?matrikelNummer='.curl_escape($curl, $matrikelnr);
|
||||
$url .= '&uuid='.curl_escape($curl, $uuid);
|
||||
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
|
||||
@@ -62,3 +62,4 @@ $this->phrasen['zeitaufzeichnung/dienstreise']='Dienstreise';
|
||||
$this->phrasen['zeitaufzeichnung/projektphase']='AP';
|
||||
$this->phrasen['zeitaufzeichnung/pauseEinfuegen']='Pause automatisch einfügen';
|
||||
$this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Zeitraum zu kurz für automatische Pause';
|
||||
$this->phrasen['zeitaufzeichnung/supportAnfragen']='<p><hr>Supportanfragen unter<br><a href="mailto:zeiterfassung@technikum-wien.at">zeiterfassung@technikum-wien.at</a></p>';
|
||||
|
||||
@@ -62,3 +62,4 @@ $this->phrasen['zeitaufzeichnung/dienstreise']='Business Trip';
|
||||
$this->phrasen['zeitaufzeichnung/projektphase']='WP';
|
||||
$this->phrasen['zeitaufzeichnung/pauseEinfuegen']='insert break automatically';
|
||||
$this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Timeslot too short for automatic break.';
|
||||
$this->phrasen['zeitaufzeichnung/supportAnfragen']='<p><hr>Contact for support<br><a href="mailto:zeiterfassung@technikum-wien.at">zeiterfassung@technikum-wien.at</a></p>';
|
||||
|
||||
+206
-1
@@ -3840,6 +3840,195 @@ if ($result = $db->db_query("SELECT 1 FROM pg_class WHERE relname = 'unq_idx_abl
|
||||
}
|
||||
}
|
||||
|
||||
// Creates table system.tbl_jobstatuses if it doesn't exist and grants privileges
|
||||
if (!$result = @$db->db_query('SELECT 1 FROM system.tbl_jobstatuses LIMIT 1'))
|
||||
{
|
||||
$qry = 'CREATE TABLE system.tbl_jobstatuses (
|
||||
status character varying(64) NOT NULL
|
||||
);
|
||||
|
||||
COMMENT ON TABLE system.tbl_jobstatuses IS \'All possible job statuses\';
|
||||
COMMENT ON COLUMN system.tbl_jobstatuses.status IS \'Job status value and primary key\';
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobstatuses ADD CONSTRAINT pk_jobstatuses PRIMARY KEY (status);
|
||||
|
||||
INSERT INTO system.tbl_jobstatuses(status) VALUES(\'new\');
|
||||
INSERT INTO system.tbl_jobstatuses(status) VALUES(\'running\');
|
||||
INSERT INTO system.tbl_jobstatuses(status) VALUES(\'done\');
|
||||
INSERT INTO system.tbl_jobstatuses(status) VALUES(\'failed\');
|
||||
';
|
||||
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobstatuses: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>system.tbl_jobstatuses table created';
|
||||
|
||||
$qry = 'GRANT SELECT ON TABLE system.tbl_jobstatuses TO web;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobstatuses: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>web</strong> on system.tbl_jobstatuses';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_jobstatuses TO vilesci;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobstatuses: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>vilesci</strong> on system.tbl_jobstatuses';
|
||||
}
|
||||
|
||||
// Creates table system.tbl_jobtypes if it doesn't exist and grants privileges
|
||||
if (!$result = @$db->db_query('SELECT 1 FROM system.tbl_jobtypes LIMIT 1'))
|
||||
{
|
||||
$qry = 'CREATE TABLE system.tbl_jobtypes (
|
||||
type character varying(128) NOT NULL,
|
||||
description text NOT NULL
|
||||
);
|
||||
|
||||
COMMENT ON TABLE system.tbl_jobtypes IS \'All possible job types\';
|
||||
COMMENT ON COLUMN system.tbl_jobtypes.type IS \'Job type value and primary key\';
|
||||
COMMENT ON COLUMN system.tbl_jobtypes.description IS \'Job type description\';
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobtypes ADD CONSTRAINT pk_jobtypes PRIMARY KEY (type);
|
||||
';
|
||||
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobtypes: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>system.tbl_jobtypes table created';
|
||||
|
||||
$qry = 'GRANT SELECT ON TABLE system.tbl_jobtypes TO web;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobtypes: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>web</strong> on system.tbl_jobtypes';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_jobtypes TO vilesci;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobtypes: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>vilesci</strong> on system.tbl_jobtypes';
|
||||
}
|
||||
|
||||
// Creates table system.tbl_jobsqueue if it doesn't exist and grants privileges
|
||||
if (!$result = @$db->db_query('SELECT 1 FROM system.tbl_jobsqueue LIMIT 1'))
|
||||
{
|
||||
$qry = 'CREATE TABLE system.tbl_jobsqueue (
|
||||
jobid integer NOT NULL,
|
||||
type character varying(128) NOT NULL,
|
||||
creationtime timestamp without time zone DEFAULT now(),
|
||||
status character varying(64) NOT NULL,
|
||||
input jsonb,
|
||||
output jsonb,
|
||||
starttime timestamp without time zone,
|
||||
endtime timestamp without time zone,
|
||||
insertvon character varying(32),
|
||||
insertamum timestamp without time zone DEFAULT now()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE system.tbl_jobsqueue IS \'Table to schedule/manage the jobs queue\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.jobid IS \'Primary key\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.type IS \'Job type\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.creationtime IS \'Job creation timestamp\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.status IS \'Job current status\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.input IS \'Job input in JSON format\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.output IS \'Job output in JSON format\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.starttime IS \'Job start timestamp\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.endtime IS \'Job end timestamp\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.insertvon IS \'User/Service who/that inserted this record\';
|
||||
COMMENT ON COLUMN system.tbl_jobsqueue.insertamum IS \'Record insert time stamp\';
|
||||
|
||||
CREATE SEQUENCE system.seq_jobsqueue_jobid
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
ALTER SEQUENCE system.seq_jobsqueue_jobid OWNED BY system.tbl_jobsqueue.jobid;
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobsqueue ALTER COLUMN jobid SET DEFAULT nextval(\'system.seq_jobsqueue_jobid\'::regclass);
|
||||
|
||||
GRANT SELECT, UPDATE ON SEQUENCE system.seq_jobsqueue_jobid TO vilesci;
|
||||
GRANT SELECT, UPDATE ON SEQUENCE system.seq_jobsqueue_jobid TO fhcomplete;
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobsqueue ADD CONSTRAINT pk_jobsqueue PRIMARY KEY (jobid);
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobsqueue ADD CONSTRAINT fk_jobsqueue_status FOREIGN KEY (status) REFERENCES system.tbl_jobstatuses(status) ON UPDATE CASCADE ON DELETE RESTRICT;
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobsqueue ADD CONSTRAINT fk_jobsqueue_type FOREIGN KEY (type) REFERENCES system.tbl_jobtypes(type) ON UPDATE CASCADE ON DELETE RESTRICT;
|
||||
';
|
||||
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobsqueue: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>system.tbl_jobsqueue table created';
|
||||
|
||||
$qry = 'GRANT SELECT ON TABLE system.tbl_jobsqueue TO web;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobsqueue: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>web</strong> on system.tbl_jobsqueue';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_jobsqueue TO vilesci;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobsqueue: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>vilesci</strong> on system.tbl_jobsqueue';
|
||||
}
|
||||
|
||||
// Creates table system.tbl_jobtriggers if it doesn't exist and grants privileges
|
||||
if (!$result = @$db->db_query('SELECT 1 FROM system.tbl_jobtriggers LIMIT 1'))
|
||||
{
|
||||
$qry = 'CREATE TABLE system.tbl_jobtriggers (
|
||||
type character varying(128) NOT NULL,
|
||||
status character varying(64) NOT NULL,
|
||||
following_type character varying(128) NOT NULL
|
||||
);
|
||||
|
||||
COMMENT ON TABLE system.tbl_jobtriggers IS \'Table to manage the job triggers\';
|
||||
COMMENT ON COLUMN system.tbl_jobtriggers.type IS \'Job type\';
|
||||
COMMENT ON COLUMN system.tbl_jobtriggers.status IS \'Job status\';
|
||||
COMMENT ON COLUMN system.tbl_jobtriggers.following_type IS \'New job type\';
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobtriggers ADD CONSTRAINT pk_jobtriggers PRIMARY KEY (type, status, following_type);
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobtriggers ADD CONSTRAINT fk_jobtriggers_status FOREIGN KEY (status) REFERENCES system.tbl_jobstatuses(status) ON UPDATE CASCADE ON DELETE RESTRICT;
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobtriggers ADD CONSTRAINT fk_jobtriggers_type FOREIGN KEY (type) REFERENCES system.tbl_jobtypes(type) ON UPDATE CASCADE ON DELETE RESTRICT;
|
||||
|
||||
ALTER TABLE ONLY system.tbl_jobtriggers ADD CONSTRAINT fk_jobtriggers_following_type FOREIGN KEY (following_type) REFERENCES system.tbl_jobtypes(type) ON UPDATE CASCADE ON DELETE RESTRICT;
|
||||
';
|
||||
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobtriggers: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>system.tbl_jobtriggers table created';
|
||||
|
||||
$qry = 'GRANT SELECT ON TABLE system.tbl_jobtriggers TO web;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobtriggers: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>web</strong> on system.tbl_jobtriggers';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE system.tbl_jobtriggers TO vilesci;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_jobtriggers: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>vilesci</strong> on system.tbl_jobtriggers';
|
||||
}
|
||||
|
||||
// Add column iso3166_1_a2 to bis.tbl_nation
|
||||
if (!$result = @$db->db_query("SELECT iso3166_1_a2 FROM bis.tbl_nation LIMIT 1"))
|
||||
{
|
||||
$qry = "ALTER TABLE bis.tbl_nation ADD COLUMN iso3166_1_a2 character varying(2);";
|
||||
$qry .= "COMMENT ON COLUMN bis.tbl_nation.iso3166_1_a2 IS 'ISO 3166-1 alpha-2 country code';";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_nation.iso3166_1_a2: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>bis.tbl_nation.iso3166_1_a2: Spalte iso3166_1_a2 hinzugefuegt';
|
||||
}
|
||||
|
||||
// Spalte bezeichnung_mehrsprachig in public.tbl_studiengangstyp
|
||||
if(!$result = @$db->db_query("SELECT bezeichnung_mehrsprachig FROM public.tbl_studiengangstyp LIMIT 1"))
|
||||
{
|
||||
@@ -4200,6 +4389,18 @@ if(!$result = @$db->db_query("SELECT sort FROM lehre.tbl_abschlussbeurteilung LI
|
||||
echo '<br>lehre.tbl_abschlussbeurteilung: Spalte sort hinzugefuegt!<br>';
|
||||
}
|
||||
|
||||
// Add column iso3166_1_a3 to tbl_nation
|
||||
if(!$result = @$db->db_query("SELECT iso3166_1_a3 FROM bis.tbl_nation LIMIT 1"))
|
||||
{
|
||||
$qry = "ALTER table bis.tbl_nation ADD COLUMN iso3166_1_a3 VARCHAR(3);
|
||||
COMMENT ON COLUMN bis.tbl_nation.iso3166_1_a3 IS 'ISO 3166-1 alpha-3 country code';";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>bis.tbl_nation: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>bis.tbl_nation: Spalte iso3166_1_a3 hinzugefuegt';
|
||||
}
|
||||
|
||||
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
|
||||
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
|
||||
|
||||
@@ -4229,7 +4430,7 @@ $tabellen=array(
|
||||
"bis.tbl_mobilitaet" => array("mobilitaet_id","prestudent_id","mobilitaetstyp_kurzbz","studiensemester_kurzbz","mobilitaetsprogramm_code","gsprogramm_id","firma_id","status_kurzbz","ausbildungssemester","insertvon","insertamum","updatevon","updateamum"),
|
||||
"bis.tbl_mobilitaetstyp" => array("mobilitaetstyp_kurzbz","bezeichnung","aktiv"),
|
||||
"bis.tbl_mobilitaetsprogramm" => array("mobilitaetsprogramm_code","kurzbz","beschreibung","sichtbar","sichtbar_outgoing"),
|
||||
"bis.tbl_nation" => array("nation_code","entwicklungsstand","eu","ewr","kontinent","kurztext","langtext","engltext","sperre","nationengruppe_kurzbz"),
|
||||
"bis.tbl_nation" => array("nation_code","entwicklungsstand","eu","ewr","kontinent","kurztext","langtext","engltext","sperre","nationengruppe_kurzbz", "iso3166_1_a2","iso3166_1_a3"),
|
||||
"bis.tbl_nationengruppe" => array("nationengruppe_kurzbz","nationengruppe_bezeichnung","aktiv"),
|
||||
"bis.tbl_orgform" => array("orgform_kurzbz","code","bezeichnung","rolle","bisorgform_kurzbz","bezeichnung_mehrsprachig"),
|
||||
"bis.tbl_verwendung" => array("verwendung_code","verwendungbez"),
|
||||
@@ -4459,6 +4660,10 @@ $tabellen=array(
|
||||
"system.tbl_log" => array("log_id","person_id","zeitpunkt","app","oe_kurzbz","logtype_kurzbz","logdata","insertvon","taetigkeit_kurzbz"),
|
||||
"system.tbl_logtype" => array("logtype_kurzbz", "data_schema"),
|
||||
"system.tbl_filters" => array("filter_id","app","dataset_name","filter_kurzbz","person_id","description","sort","default_filter","filter","oe_kurzbz","statistik_kurzbz"),
|
||||
"system.tbl_jobsqueue" => array("jobid", "type", "creationtime", "status", "input", "output", "starttime", "endtime", "insertvon", "insertamum"),
|
||||
"system.tbl_jobstatuses" => array("status"),
|
||||
"system.tbl_jobtriggers" => array("type", "status", "following_type"),
|
||||
"system.tbl_jobtypes" => array("type", "description"),
|
||||
"system.tbl_phrase" => array("phrase_id","app","phrase","insertamum","insertvon","category"),
|
||||
"system.tbl_phrasentext" => array("phrasentext_id","phrase_id","sprache","orgeinheit_kurzbz","orgform_kurzbz","text","description","insertamum","insertvon"),
|
||||
"system.tbl_rolle" => array("rolle_kurzbz","beschreibung"),
|
||||
|
||||
@@ -633,6 +633,37 @@ $filters = array(
|
||||
}
|
||||
',
|
||||
'oe_kurzbz' => null,
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'dataset_name' => 'jq',
|
||||
'filter_kurzbz' => 'lastHour',
|
||||
'description' => '{Last hour queued jobs}',
|
||||
'sort' => 1,
|
||||
'default_filter' => true,
|
||||
'filter' => '
|
||||
{
|
||||
"name": "All jobs queued in the last hour",
|
||||
"columns": [
|
||||
{"name": "JobId"},
|
||||
{"name": "CreationTime"},
|
||||
{"name": "Type"},
|
||||
{"name": "Status"},
|
||||
{"name": "StartTime"},
|
||||
{"name": "EndTime"},
|
||||
{"name": "UserService"}
|
||||
],
|
||||
"filters": [
|
||||
{
|
||||
"name": "CreationTime",
|
||||
"operation": "lt",
|
||||
"condition": "1",
|
||||
"option": "hours"
|
||||
}
|
||||
]
|
||||
}
|
||||
',
|
||||
'oe_kurzbz' => null,
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -7868,6 +7868,106 @@ Any unusual occurrences
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'ui',
|
||||
'phrase' => 'alle',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Alle',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'All',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'ui',
|
||||
'phrase' => 'heute',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Heute',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Today',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'ui',
|
||||
'phrase' => 'letzteWoche',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Letzte Woche',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Last week',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'ui',
|
||||
'phrase' => 'gestern',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Gestern',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Yesterday',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'ui',
|
||||
'phrase' => 'zeitraum',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Zeitraum',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Period',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -75,7 +75,22 @@ else
|
||||
|
||||
$webservice = new dvb(DVB_USERNAME, DVB_PASSWORD, $debug);
|
||||
|
||||
$qry = "
|
||||
if (defined('BPK_FUER_ALLE_BENUTZER_ABFRAGEN') && BPK_FUER_ALLE_BENUTZER_ABFRAGEN)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
distinct person_id, vorname, nachname
|
||||
FROM
|
||||
public.tbl_person
|
||||
JOIN public.tbl_benutzer USING(person_id)
|
||||
WHERE
|
||||
public.tbl_benutzer.aktiv = true
|
||||
AND tbl_person.bpk is null
|
||||
AND gebdatum is not null";
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
distinct person_id, vorname, nachname
|
||||
FROM
|
||||
@@ -89,6 +104,7 @@ $qry = "
|
||||
AND studiengang_kz<10000
|
||||
AND EXISTS(SELECT 1 FROM public.tbl_prestudent WHERE person_id=tbl_person.person_id AND bismelden=true)
|
||||
AND gebdatum is not null";
|
||||
}
|
||||
|
||||
if ($limit != '')
|
||||
$qry .= " LIMIT ".$limit;
|
||||
|
||||
Reference in New Issue
Block a user