Merge branch 'master' into feature-4822/Sonderzeichen_uid

This commit is contained in:
Manfred Kindl
2019-10-30 20:14:21 +01:00
39 changed files with 1946 additions and 4062 deletions
+12
View File
@@ -503,3 +503,15 @@ $config['rewrite_short_tags'] = FALSE;
| Array: array('10.0.1.200', '192.168.5.0/24')
*/
$config['proxy_ips'] = '';
/*
|--------------------------------------------------------------------------
| FHComplete Build Version
|--------------------------------------------------------------------------
|
| Version Number of the Current Build
| This is used to invalidate Cache for JS and CSS Files
|
| Example: 2019102901
*/
$config['fhcomplete_build_version'] = '2019102903';
+7
View File
@@ -82,6 +82,13 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 10,
'requiredPermissions' => 'admin:r'
),
'logsviewer' => array(
'link' => site_url('system/LogsViewer'),
'description' => 'Logs',
'expand' => true,
'sort' => 20,
'requiredPermissions' => 'system/developer:r'
)
)
)
+19 -372
View File
@@ -1,6 +1,6 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
defined('BASEPATH') OR exit('No direct script access allowed');
/*
|--------------------------------------------------------------------------
@@ -10,79 +10,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
| Set to force the use of HTTPS for REST API calls
|
*/
$config['force_https'] = FALSE;
/*
|--------------------------------------------------------------------------
| REST Output Format
|--------------------------------------------------------------------------
|
| The default format of the response
|
| 'array': Array data structure
| 'csv': Comma separated file
| 'json': Uses json_encode(). Note: If a GET query string
| called 'callback' is passed, then jsonp will be returned
| 'html' HTML using the table library in CodeIgniter
| 'php': Uses var_export()
| 'serialized': Uses serialize()
| 'xml': Uses simplexml_load_string()
|
*/
$config['rest_default_format'] = 'json';
/*
|--------------------------------------------------------------------------
| REST Supported Output Formats
|--------------------------------------------------------------------------
|
| The following setting contains a list of the supported/allowed formats.
| You may remove those formats that you don't want to use.
| If the default format $config['rest_default_format'] is missing within
| $config['rest_supported_formats'], it will be added silently during
| REST_Controller initialization.
|
*/
$config['rest_supported_formats'] = [
'json',
'array',
'csv',
'html',
'jsonp',
'php',
'serialized',
'xml',
];
/*
|--------------------------------------------------------------------------
| REST Status Field Name
|--------------------------------------------------------------------------
|
| The field name for the status inside the response
|
*/
$config['rest_status_field_name'] = 'status';
/*
|--------------------------------------------------------------------------
| REST Message Field Name
|--------------------------------------------------------------------------
|
| The field name for the message inside the response
|
*/
$config['rest_message_field_name'] = 'error';
/*
|--------------------------------------------------------------------------
| Enable Emulate Request
|--------------------------------------------------------------------------
|
| Should we enable emulation of the request (e.g. used in Mootools request)
|
*/
$config['enable_emulate_request'] = TRUE;
$config['force_https'] = TRUE;
/*
|--------------------------------------------------------------------------
@@ -104,8 +32,8 @@ $config['rest_realm'] = 'FHC REST API';
| Set to specify the REST API requires to be logged in
|
| FALSE No login required
| 'basic' Unsecure login
| 'digest' More secure login
| 'basic' Unsecured login
| 'digest' More secured login
| 'session' Check for a PHP session variable. See 'auth_source' to set the
| authorization key
|
@@ -119,8 +47,7 @@ $config['rest_auth'] = 'basic';
|
| Is login required and if so, the user store to use
|
| '' Use config based users or wildcard testing, only for testing purpose
| it would be very unsecure to let unset in a production environment
| '' Use config based users or wildcard testing
| 'ldap' Use LDAP authentication
| 'library' Use a authentication library
|
@@ -140,94 +67,34 @@ $config['auth_source'] = 'library';
| In other cases override the function _perform_library_auth in your controller
|
| For digest authentication the library function should return already a stored
| password for that username, even if it is hashed
| md5(username:restrealm:password) for that username
|
| e.g: md5('admin:REST API:1234') = '1e957ebc35631ab22d5bd6526bd14ea2'
|
*/
$config['auth_library_class'] = 'AuthLib';
// rest_auth is basic
$config['auth_library_function'] = 'basicAuthentication';
// rest_auth is digest
//$config['auth_library_function'] = 'digestAuthentication';
/*
|--------------------------------------------------------------------------
| Override auth types for specific class/method
| Global IP White-listing
|--------------------------------------------------------------------------
|
| Set specific authentication types for methods within a class (controller)
|
| Set as many config entries as needed. Any methods not set will use the default 'rest_auth' config value.
|
| e.g:
|
| $config['auth_override_class_method']['deals']['view'] = 'none';
| $config['auth_override_class_method']['deals']['insert'] = 'digest';
| $config['auth_override_class_method']['accounts']['user'] = 'basic';
| $config['auth_override_class_method']['dashboard']['*'] = 'none|digest|basic';
|
| Here 'deals', 'accounts' and 'dashboard' are controller names, 'view', 'insert' and 'user' are methods within.
* An asterisk may also be used to specify an authentication method for an entire classes methods.
* Ex: $config['auth_override_class_method']['dashboard']['*'] = 'basic'; (NOTE: leave off the '_get' or '_post' from the end
* of the method name)
| Acceptable values are; 'none', 'digest' and 'basic'.
|
*/
// $config['auth_override_class_method']['deals']['view'] = 'none';
// $config['auth_override_class_method']['deals']['insert'] = 'digest';
// $config['auth_override_class_method']['accounts']['user'] = 'basic';
// $config['auth_override_class_method']['dashboard']['*'] = 'basic';
// ---Uncomment list line for the wildard unit test
// $config['auth_override_class_method']['wildcard_test_cases']['*'] = 'basic';
/*
|--------------------------------------------------------------------------
| Override auth types for specfic 'class/method/HTTP method'
|--------------------------------------------------------------------------
|
| example:
|
| $config['auth_override_class_method_http']['deals']['view']['get'] = 'none';
| $config['auth_override_class_method_http']['deals']['insert']['post'] = 'none';
| $config['auth_override_class_method_http']['deals']['*']['options'] = 'none';
*/
// ---Uncomment list line for the wildard unit test
// $config['auth_override_class_method_http']['wildcard_test_cases']['*']['options'] = 'basic';
/*
|--------------------------------------------------------------------------
| REST Login Usernames
|--------------------------------------------------------------------------
|
| Array of usernames and passwords for login, if ldap (even library) is configured this is ignored
|
*/
//$config['rest_valid_logins'] = ['admin' => '1234', 'test' => 'test'];
/*
|--------------------------------------------------------------------------
| Global IP Whitelisting
|--------------------------------------------------------------------------
|
| Limit connections to your REST server to whitelisted IP addresses
| Limit connections to your REST server to White-listed IP addresses
|
| Usage:
| 1. Set to TRUE and select an auth option for extreme security (client's IP
| address must be in whitelist and they must also log in)
| 2. Set to TRUE with auth set to FALSE to allow whitelisted IPs access with no login
| 3. Set to FALSE but set 'auth_override_class_method' to 'whitelist' to
| restrict certain methods to IPs in your whitelist
| address must be in white-list and they must also log in)
| 2. Set to TRUE with auth set to FALSE to allow White-listed IPs access with no login
| 3. Set to FALSE but set 'auth_override_class_method' to 'white-list' to
| restrict certain methods to IPs in your white-list
|
*/
$config['rest_ip_whitelist_enabled'] = TRUE;
/*
|--------------------------------------------------------------------------
| REST IP Whitelist
| REST IP White-list
|--------------------------------------------------------------------------
|
| Limit connections to your REST server with a comma separated
@@ -240,42 +107,6 @@ $config['rest_ip_whitelist_enabled'] = TRUE;
*/
$config['rest_ip_whitelist'] = '127.0.0.1';
/*
|--------------------------------------------------------------------------
| Global IP Blacklisting
|--------------------------------------------------------------------------
|
| Prevent connections to the REST server from blacklisted IP addresses
|
| Usage:
| 1. Set to TRUE and add any IP address to 'rest_ip_blacklist'
|
*/
$config['rest_ip_blacklist_enabled'] = FALSE;
/*
|--------------------------------------------------------------------------
| REST IP Blacklist
|--------------------------------------------------------------------------
|
| Prevent connections from the following IP addresses
|
| e.g: '123.456.789.0, 987.654.32.1'
|
*/
$config['rest_ip_blacklist'] = '';
/*
|--------------------------------------------------------------------------
| REST Database Group
|--------------------------------------------------------------------------
|
| Connect to a database group for keys, logging, etc. It will only connect
| if you have any of these features enabled
|
*/
$config['rest_database_group'] = 'default';
/*
|--------------------------------------------------------------------------
| REST API Keys Table Name
@@ -298,6 +129,7 @@ $config['rest_keys_table'] = 'ci_apikey';
| Default table schema:
| CREATE TABLE `keys` (
| `id` INT(11) NOT NULL AUTO_INCREMENT,
| `user_id` INT(11) NOT NULL,
| `key` VARCHAR(40) NOT NULL,
| `level` INT(2) NOT NULL,
| `ignore_limits` TINYINT(1) NOT NULL DEFAULT '0',
@@ -310,45 +142,6 @@ $config['rest_keys_table'] = 'ci_apikey';
*/
$config['rest_enable_keys'] = TRUE;
/*
|--------------------------------------------------------------------------
| REST Table Key Column Name
|--------------------------------------------------------------------------
|
| If not using the default table schema in 'rest_enable_keys', specify the
| column name to match e.g. my_key
|
*/
$config['rest_key_column'] = 'key';
/*
|--------------------------------------------------------------------------
| REST API Limits method
|--------------------------------------------------------------------------
|
| Specify the method used to limit the API calls
|
| Available methods are :
| $config['rest_limits_method'] = 'API_KEY'; // Put a limit per api key
| $config['rest_limits_method'] = 'METHOD_NAME'; // Put a limit on method calls
| $config['rest_limits_method'] = 'ROUTED_URL'; // Put a limit on the routed URL
|
*/
$config['rest_limits_method'] = 'ROUTED_URL';
/*
|--------------------------------------------------------------------------
| REST Key Length
|--------------------------------------------------------------------------
|
| Length of the created keys. Check your default database schema on the
| maximum length allowed
|
| Note: The maximum length is 40
|
*/
$config['rest_key_length'] = 40;
/*
|--------------------------------------------------------------------------
| REST API Key Variable
@@ -364,156 +157,10 @@ $config['rest_key_name'] = 'FHC-API-KEY';
/*
|--------------------------------------------------------------------------
| REST Enable Logging
| REST Methods name format
|--------------------------------------------------------------------------
|
| When set to TRUE, the REST API will log actions based on the column names 'key', 'date',
| 'time' and 'ip_address'. This is a general rule that can be overridden in the
| $this->method array for each controller
|
| Default table schema:
| CREATE TABLE `logs` (
| `id` INT(11) NOT NULL AUTO_INCREMENT,
| `uri` VARCHAR(255) NOT NULL,
| `method` VARCHAR(6) NOT NULL,
| `params` TEXT DEFAULT NULL,
| `api_key` VARCHAR(40) NOT NULL,
| `ip_address` VARCHAR(45) NOT NULL,
| `time` INT(11) NOT NULL,
| `rtime` FLOAT DEFAULT NULL,
| `authorized` VARCHAR(1) NOT NULL,
| `response_code` smallint(3) DEFAULT '0',
| PRIMARY KEY (`id`)
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
| REST Controllers methods name format
|
*/
$config['rest_enable_logging'] = FALSE;
/*
|--------------------------------------------------------------------------
| REST API Logs Table Name
|--------------------------------------------------------------------------
|
| If not using the default table schema in 'rest_enable_logging', specify the
| table name to match e.g. my_logs
|
*/
$config['rest_logs_table'] = 'logs';
/*
|--------------------------------------------------------------------------
| REST Method Access Control
|--------------------------------------------------------------------------
| When set to TRUE, the REST API will check the access table to see if
| the API key can access that controller. 'rest_enable_keys' must be enabled
| to use this
|
| Default table schema:
| CREATE TABLE `access` (
| `id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
| `key` VARCHAR(40) NOT NULL DEFAULT '',
| `controller` VARCHAR(50) NOT NULL DEFAULT '',
| `date_created` DATETIME DEFAULT NULL,
| `date_modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
| PRIMARY KEY (`id`)
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
*/
$config['rest_enable_access'] = FALSE;
/*
|--------------------------------------------------------------------------
| REST API Access Table Name
|--------------------------------------------------------------------------
|
| If not using the default table schema in 'rest_enable_access', specify the
| table name to match e.g. my_access
|
*/
$config['rest_access_table'] = 'access';
/*
|--------------------------------------------------------------------------
| REST API Param Log Format
|--------------------------------------------------------------------------
|
| When set to TRUE, the REST API log parameters will be stored in the database as JSON
| Set to FALSE to log as serialized PHP
|
*/
$config['rest_logs_json_params'] = FALSE;
/*
|--------------------------------------------------------------------------
| REST Enable Limits
|--------------------------------------------------------------------------
|
| When set to TRUE, the REST API will count the number of uses of each method
| by an API key each hour. This is a general rule that can be overridden in the
| $this->method array in each controller
|
| Default table schema:
| CREATE TABLE `limits` (
| `id` INT(11) NOT NULL AUTO_INCREMENT,
| `uri` VARCHAR(255) NOT NULL,
| `count` INT(10) NOT NULL,
| `hour_started` INT(11) NOT NULL,
| `api_key` VARCHAR(40) NOT NULL,
| PRIMARY KEY (`id`)
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
| To specify the limits within the controller's __construct() method, add per-method
| limits with:
|
| $this->method['METHOD_NAME']['limit'] = [NUM_REQUESTS_PER_HOUR];
|
| See application/controllers/api/example.php for examples
*/
$config['rest_enable_limits'] = FALSE;
/*
|--------------------------------------------------------------------------
| REST API Limits Table Name
|--------------------------------------------------------------------------
|
| If not using the default table schema in 'rest_enable_limits', specify the
| table name to match e.g. my_limits
|
*/
$config['rest_limits_table'] = 'limits';
/*
|--------------------------------------------------------------------------
| REST Ignore HTTP Accept
|--------------------------------------------------------------------------
|
| Set to TRUE to ignore the HTTP Accept and speed up each request a little.
| Only do this if you are using the $this->rest_format or /format/xml in URLs
|
*/
$config['rest_ignore_http_accept'] = FALSE;
/*
|--------------------------------------------------------------------------
| REST AJAX Only
|--------------------------------------------------------------------------
|
| Set to TRUE to allow AJAX requests only. Set to FALSE to accept HTTP requests
|
| Note: If set to TRUE and the request is not AJAX, a 505 response with the
| error message 'Only AJAX requests are accepted.' will be returned.
|
| Hint: This is good for production environments
|
*/
$config['rest_ajax_only'] = FALSE;
/*
|--------------------------------------------------------------------------
| REST Language File
|--------------------------------------------------------------------------
|
| Language file to load from the language directory
|
*/
$config['rest_language'] = 'english';
$config['rest_methods_name_format'] = '%2$s%1$s';
+10 -10
View File
@@ -1,5 +1,6 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
defined('BASEPATH') OR exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
@@ -11,7 +12,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
| example.com/class/method/id/
| example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
@@ -19,7 +20,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
| Please see the user guide for complete details:
|
| http://codeigniter.com/user_guide/general/routing.html
| https://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
@@ -27,18 +28,18 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
| There are three reserved routes:
|
| $route['default_controller'] = 'welcome';
| $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
| $route['404_override'] = 'errors/page_missing';
| $route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router which controller/method to use if those
| provided in the URL cannot be matched to a valid route.
|
| $route['translate_uri_dashes'] = FALSE;
| $route['translate_uri_dashes'] = FALSE;
|
| This is not exactly a route, but allows you to automatically route
| controller and method names that contain dashes. '-' isn't a valid
@@ -46,11 +47,10 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
| When you set this option to TRUE, it will replace ALL dashes in the
| controller and method URI segments.
|
| Examples: my-controller/index -> my_controller/index
| my-controller/my-method -> my_controller/my_method
| Examples: my-controller/index -> my_controller/index
| my-controller/my-method -> my_controller/my_method
*/
$route['default_controller'] = 'Vilesci';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
// Class name conflicts
@@ -59,4 +59,4 @@ $route['api/v1/organisation/[F|f]achbereich/(:any)'] = 'api/v1/organisation/fach
$route['api/v1/organisation/[G|g]eschaeftsjahr/(:any)'] = 'api/v1/organisation/geschaeftsjahr2/$1';
$route['api/v1/organisation/[O|o]rganisationseinheit/(:any)'] = 'api/v1/organisation/organisationseinheit2/$1';
$route['api/v1/ressource/[B|b]etriebsmittelperson/(:any)'] = 'api/v1/ressource/betriebsmittelperson2/$1';
$route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
$route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
@@ -2,7 +2,7 @@
if (!defined('BASEPATH')) exit('No direct script access allowed');
class CheckUserAuth extends REST_Controller
class CheckUserAuth extends RESTFul_Controller
{
/**
* Course API constructor.
+1 -1
View File
@@ -5,7 +5,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Testing class for REST calls and authentication
*/
class Test extends REST_Controller
class Test extends RESTFul_Controller
{
public function __construct()
{
@@ -37,7 +37,7 @@ class Benutzer extends APIv1_Controller
if (isset($uid))
{
$result = $this->BenutzerModel->load($uid);
$result = $this->BenutzerModel->load(array('uid' => $uid));
$this->response($result, REST_Controller::HTTP_OK);
}
@@ -14,7 +14,7 @@ class LogsViewer extends Auth_Controller
{
parent::__construct(
array(
'index' => 'admin:r'
'index' => 'system/developer:r'
)
);
@@ -24,6 +24,8 @@ class InfoCenter extends Auth_Controller
const FILTER_ID = 'filter_id';
const PREV_FILTER_ID = 'prev_filter_id';
const RELOAD_DATASET = 'reloadDataset';
const KEEP_TABLESORTER_FILTER = 'keepTsFilter';
private $_uid; // contains the UID of the logged user
@@ -100,9 +102,11 @@ class InfoCenter extends Auth_Controller
'reloadNotizen' => 'infocenter:r',
'reloadLogs' => 'infocenter:r',
'outputAkteContent' => 'infocenter:r',
'getParkedDate' => 'infocenter:r',
'getPostponeDate' => 'infocenter:r',
'park' => 'infocenter:rw',
'unpark' => 'infocenter:rw',
'setOnHold' => 'infocenter:rw',
'removeOnHold' => 'infocenter:rw',
'getStudienjahrEnd' => 'infocenter:r',
'setNavigationMenuArrayJson' => 'infocenter:r'
)
@@ -234,7 +238,7 @@ class InfoCenter extends Auth_Controller
$redirectLink = '/'.self::INFOCENTER_URI.'?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId();
// Force reload of Dataset after Unlock
$redirectLink .= '&reloadDataset=true';
$redirectLink .= '&'.self::RELOAD_DATASET.'=true&'.self::KEEP_TABLESORTER_FILTER.'=true';
$currentFilterId = $this->input->get(self::FILTER_ID);
if (isset($currentFilterId))
@@ -711,11 +715,32 @@ class InfoCenter extends Auth_Controller
* Gets the date until which a person is parked
* @param $person_id
*/
public function getParkedDate($person_id)
public function getPostponeDate($person_id)
{
$result = array(
'type' => null,
'date' => null
);
$parkedDate = $this->personloglib->getParkedDate($person_id);
$this->outputJsonSuccess(array($parkedDate));
if (isset($parkedDate))
{
$result['type'] = 'parked';
$result['date'] = $parkedDate;
}
else
{
$onholdDate = $this->personloglib->getOnHoldDate($person_id);
if (isset($onholdDate))
{
$result['type'] = 'onhold';
$result['date'] = $onholdDate;
}
}
$this->outputJsonSuccess($result);
}
/**
@@ -743,6 +768,31 @@ class InfoCenter extends Auth_Controller
$this->outputJson($result);
}
/**
* Sets a person on hold ("zurückstellen")
*/
public function setOnHold()
{
$person_id = $this->input->post('person_id');
$date = $this->input->post('onholddate');
$result = $this->personloglib->setOnHold($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
$this->outputJson($result);
}
/**
* Removed on hold status of a person
*/
public function removeOnHold()
{
$person_id = $this->input->post('person_id');
$result = $this->personloglib->removeOnHold($person_id);
$this->outputJson($result);
}
/**
* Gets the End date of the current Studienjahr
*/
@@ -894,10 +944,16 @@ class InfoCenter extends Auth_Controller
$freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE);
$reihungstestAbsolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE);
$currentFilterId = $this->input->get(self::FILTER_ID);
$reloadDatasetParam = self::RELOAD_DATASET.'=true';
if (isset($currentFilterId))
{
$freigegebenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
$reihungstestAbsolviertLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
$freigegebenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId.'&'.$reloadDatasetParam;
$reihungstestAbsolviertLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId.'&'.$reloadDatasetParam;
}
else
{
$freigegebenLink .= '?'.$reloadDatasetParam;
$reihungstestAbsolviertLink .= '?'.$reloadDatasetParam;
}
$this->navigationlib->setSessionMenu(
@@ -950,7 +1006,7 @@ class InfoCenter extends Auth_Controller
$origin_page = $this->input->get(self::ORIGIN_PAGE);
$link = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE);
$link = site_url(self::INFOCENTER_URI);
if ($origin_page == self::FREIGEGEBEN_PAGE)
{
$link = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE);
@@ -963,7 +1019,7 @@ class InfoCenter extends Auth_Controller
$prevFilterId = $this->input->get(self::PREV_FILTER_ID);
if (isset($prevFilterId))
{
$link .= '?'.self::FILTER_ID.'='.$prevFilterId;
$link .= '?'.self::FILTER_ID.'='.$prevFilterId.'&'.self::RELOAD_DATASET.'=true&'.self::KEEP_TABLESORTER_FILTER.'=true';
}
$this->navigationlib->setSessionMenu(
@@ -993,13 +1049,14 @@ class InfoCenter extends Auth_Controller
$this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.$page));
// Generate the home link with the eventually loaded filter
$homeLink = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE);
$freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE);
$absolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE);
$reloadDatasetParam = '?'.self::RELOAD_DATASET.'=true';
$homeLink = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE.$reloadDatasetParam);
$freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE.$reloadDatasetParam);
$absolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE.$reloadDatasetParam);
$prevFilterId = $this->input->get(self::PREV_FILTER_ID);
if (isset($prevFilterId))
{
$homeLink .= '?'.self::FILTER_ID.'='.$prevFilterId;
$homeLink .= '&'.self::FILTER_ID.'='.$prevFilterId;
}
$this->navigationlib->setSessionElementMenu(
+5 -4
View File
@@ -3,9 +3,9 @@
if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* REST_Controller takes care about authentication and it loads the AuthLib
*
*/
abstract class APIv1_Controller extends REST_Controller
abstract class APIv1_Controller extends RESTFul_Controller
{
private $_requiredPermissions;
@@ -23,13 +23,14 @@ abstract class APIv1_Controller extends REST_Controller
/**
* This method is automatically called by CodeIgniter after the execution of the constructor is completed
* - Cheks if the AuthLib was loaded, if not it means that the authentication failed
* - Cheks if the Authlib was loaded, if not it means that the authentication failed
* - Loads the permsission lib and calls permissionlib->isEntitled
* - Checks if the caller is allowed to access to this content with the given permissions
* if it is not allowed will set the HTTP header with code 401
* - Calls the parent (REST_Controller) _remap method to performs other checks
* NOTE: this methods override the parent method!!!
*/
public function _remap($object_called, $arguments)
public function _remap($object_called, $arguments = [])
{
if (isset($this->authlib)) // if set then the authentication is ok
{
+215
View File
@@ -0,0 +1,215 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* NOTE: this class overrides parent's methods and properties
*/
class RESTFul_Controller extends REST_Controller
{
protected $is_valid_request = TRUE; // Change the accessibility of this property
/**
* Totally overriden
*/
protected function early_checks()
{
// Loads helper message to manage returning messages
$this->load->helper('hlp_return_object');
// Loads helper session to manage the php session
$this->load->helper('hlp_session');
// Loads helper with generic utility function
$this->load->helper('hlp_common');
}
/**
* Totally overrode parent's _perform_library_auth method to keep file and class name
* for AuthLib and to call AuthLib with the extra parameter
*/
protected function _perform_library_auth($username = '', $password = NULL)
{
if (empty($username))
{
log_message('error', 'Library Auth: Failure, empty username');
return FALSE;
}
$auth_library_class = $this->config->item('auth_library_class');
$auth_library_function = $this->config->item('auth_library_function');
if (empty($auth_library_class))
{
log_message('debug', 'Library Auth: Failure, empty auth_library_class');
return FALSE;
}
if (empty($auth_library_function))
{
log_message('debug', 'Library Auth: Failure, empty auth_library_function');
return FALSE;
}
if (is_callable([$auth_library_class, $auth_library_function]) === FALSE)
{
$this->load->library($auth_library_class, array(false));
}
return $this->{strtolower($auth_library_class)}->$auth_library_function($username, $password);
}
/**
* Totally overrode parent's _remap method to change the naming convention of controllers methods
*/
public function _remap($object_called, $arguments = [])
{
// Should we answer if not over SSL?
if ($this->config->item('force_https') && $this->request->ssl === FALSE)
{
$this->response([
$this->config->item('rest_status_field_name') => FALSE,
$this->config->item('rest_message_field_name') => $this->lang->line('text_rest_unsupported')
], self::HTTP_FORBIDDEN);
$this->is_valid_request = false;
}
// Remove the supported format from the function name e.g. index.json => index
$object_called = preg_replace('/^(.*)\.(?:'.implode('|', array_keys($this->_supported_formats)).')$/', '$1', $object_called);
// NOTE: START changes
$controller_method = $object_called.'_'.$this->request->method; // Method name fallback
// If the config entry rest_methods_name_format is provided and is not empty then use it to produce the method name
if (!empty($this->config->item('rest_methods_name_format')))
{
$controller_method = sprintf($this->config->item('rest_methods_name_format'), $object_called, $this->request->method);
}
// END changes
// Does this method exist? If not, try executing an index method
if (!method_exists($this, $controller_method)) {
$controller_method = "index_" . $this->request->method;
array_unshift($arguments, $object_called);
}
// Do we want to log this method (if allowed by config)?
$log_method = ! (isset($this->methods[$controller_method]['log']) && $this->methods[$controller_method]['log'] === FALSE);
// Use keys for this method?
$use_key = ! (isset($this->methods[$controller_method]['key']) && $this->methods[$controller_method]['key'] === FALSE);
// They provided a key, but it wasn't valid, so get them out of here
if ($this->config->item('rest_enable_keys') && $use_key && $this->_allow === FALSE)
{
if ($this->config->item('rest_enable_logging') && $log_method)
{
$this->_log_request();
}
// fix cross site to option request error
if($this->request->method == 'options') {
exit;
}
$this->response([
$this->config->item('rest_status_field_name') => FALSE,
$this->config->item('rest_message_field_name') => sprintf($this->lang->line('text_rest_invalid_api_key'), $this->rest->key)
], self::HTTP_FORBIDDEN);
$this->is_valid_request = false;
}
// Check to see if this key has access to the requested controller
if ($this->config->item('rest_enable_keys') && $use_key && empty($this->rest->key) === FALSE && $this->_check_access() === FALSE)
{
if ($this->config->item('rest_enable_logging') && $log_method)
{
$this->_log_request();
}
$this->response([
$this->config->item('rest_status_field_name') => FALSE,
$this->config->item('rest_message_field_name') => $this->lang->line('text_rest_api_key_unauthorized')
], self::HTTP_UNAUTHORIZED);
$this->is_valid_request = false;
}
// Sure it exists, but can they do anything with it?
if (! method_exists($this, $controller_method))
{
$this->response([
$this->config->item('rest_status_field_name') => FALSE,
$this->config->item('rest_message_field_name') => $this->lang->line('text_rest_unknown_method')
], self::HTTP_METHOD_NOT_ALLOWED);
$this->is_valid_request = false;
}
// Doing key related stuff? Can only do it if they have a key right?
if ($this->config->item('rest_enable_keys') && empty($this->rest->key) === FALSE)
{
// Check the limit
if ($this->config->item('rest_enable_limits') && $this->_check_limit($controller_method) === FALSE)
{
$response = [$this->config->item('rest_status_field_name') => FALSE, $this->config->item('rest_message_field_name') => $this->lang->line('text_rest_api_key_time_limit')];
$this->response($response, self::HTTP_UNAUTHORIZED);
$this->is_valid_request = false;
}
// If no level is set use 0, they probably aren't using permissions
$level = isset($this->methods[$controller_method]['level']) ? $this->methods[$controller_method]['level'] : 0;
// If no level is set, or it is lower than/equal to the key's level
$authorized = $level <= $this->rest->level;
// IM TELLIN!
if ($this->config->item('rest_enable_logging') && $log_method)
{
$this->_log_request($authorized);
}
if($authorized === FALSE)
{
// They don't have good enough perms
$response = [$this->config->item('rest_status_field_name') => FALSE, $this->config->item('rest_message_field_name') => $this->lang->line('text_rest_api_key_permissions')];
$this->response($response, self::HTTP_UNAUTHORIZED);
$this->is_valid_request = false;
}
}
//check request limit by ip without login
elseif ($this->config->item('rest_limits_method') == "IP_ADDRESS" && $this->config->item('rest_enable_limits') && $this->_check_limit($controller_method) === FALSE)
{
$response = [$this->config->item('rest_status_field_name') => FALSE, $this->config->item('rest_message_field_name') => $this->lang->line('text_rest_ip_address_time_limit')];
$this->response($response, self::HTTP_UNAUTHORIZED);
$this->is_valid_request = false;
}
// No key stuff, but record that stuff is happening
elseif ($this->config->item('rest_enable_logging') && $log_method)
{
$this->_log_request($authorized = TRUE);
}
// Call the controller method and passed arguments
try
{
if ($this->is_valid_request) {
call_user_func_array([$this, $controller_method], $arguments);
}
}
catch (Exception $ex)
{
if ($this->config->item('rest_handle_exceptions') === FALSE) {
throw $ex;
}
// If the method doesn't exist, then the error will be caught and an error response shown
$_error = &load_class('Exceptions', 'core');
$_error->show_exception($ex);
}
}
}
File diff suppressed because it is too large Load Diff
@@ -34,3 +34,31 @@ function getAuthUID()
return isLogged() ? ($ci->authlib->getAuthObj())->{AuthLib::AO_USERNAME} : null;
}
/**
* If the user is NOT logged then a null value is returned.
* If the user is alredy logged, then it is possible to access to the authentication object
* that contains the firstname of the logged user
* NOTE: if the user is logged with a "foreign" method (ex. Bewerbungstool),
* then it is possible that the firstname is null!
*/
function getAuthFirstname()
{
$ci =& get_instance(); // get CI instance
return isLogged() ? ($ci->authlib->getAuthObj())->{AuthLib::AO_NAME} : null;
}
/**
* If the user is NOT logged then a null value is returned.
* If the user is alredy logged, then it is possible to access to the authentication object
* that contains the surname of the logged user
* NOTE: if the user is logged with a "foreign" method (ex. Bewerbungstool),
* then it is possible that the surname is null!
*/
function getAuthSurname()
{
$ci =& get_instance(); // get CI instance
return isLogged() ? ($ci->authlib->getAuthObj())->{AuthLib::AO_SURNAME} : null;
}
+8 -2
View File
@@ -46,13 +46,16 @@ function generateCSSsInclude($CSSs)
{
$cssLink = '<link rel="stylesheet" type="text/css" href="%s" />';
$ci =& get_instance();
$cachetoken = '?'.$ci->config->item('fhcomplete_build_version');
if (isset($CSSs))
{
$tmpCSSs = is_array($CSSs) ? $CSSs : array($CSSs);
for ($tmpCSSsCounter = 0; $tmpCSSsCounter < count($tmpCSSs); $tmpCSSsCounter++)
{
$toPrint = sprintf($cssLink, base_url($tmpCSSs[$tmpCSSsCounter])).PHP_EOL;
$toPrint = sprintf($cssLink, base_url($tmpCSSs[$tmpCSSsCounter]).$cachetoken).PHP_EOL;
if ($tmpCSSsCounter > 0) $toPrint = "\t\t".$toPrint;
@@ -108,13 +111,16 @@ function generateJSsInclude($JSs)
{
$jsInclude = '<script type="text/javascript" src="%s"></script>';
$ci =& get_instance();
$cachetoken = '?'.$ci->config->item('fhcomplete_build_version');
if (isset($JSs))
{
$tmpJSs = is_array($JSs) ? $JSs : array($JSs);
for ($tmpJSsCounter = 0; $tmpJSsCounter < count($tmpJSs); $tmpJSsCounter++)
{
$toPrint = sprintf($jsInclude, base_url($tmpJSs[$tmpJSsCounter])).PHP_EOL;
$toPrint = sprintf($jsInclude, base_url($tmpJSs[$tmpJSsCounter].$cachetoken)).PHP_EOL;
if ($tmpJSsCounter > 0) $toPrint = "\t\t".$toPrint;
@@ -1,17 +0,0 @@
<?php
/*
* English language
*/
$lang['text_rest_invalid_api_key'] = 'Invalid API key %s'; // %s is the REST API key
$lang['text_rest_invalid_credentials'] = 'Invalid credentials';
$lang['text_rest_ip_denied'] = 'IP denied';
$lang['text_rest_ip_unauthorized'] = 'IP unauthorized';
$lang['text_rest_unauthorized'] = 'Unauthorized';
$lang['text_rest_ajax_only'] = 'Only AJAX requests are allowed';
$lang['text_rest_api_key_unauthorized'] = 'This API key does not have access to the requested controller';
$lang['text_rest_api_key_permissions'] = 'This API key does not have enough permissions';
$lang['text_rest_api_key_time_limit'] = 'This API key has reached the time limit for this method';
$lang['text_rest_unknown_method'] = 'Unknown method';
$lang['text_rest_unsupported'] = 'Unsupported protocol';
-531
View File
@@ -1,531 +0,0 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Format class
* Help convert between various formats such as XML, JSON, CSV, etc.
*
* @author Phil Sturgeon, Chris Kacerguis, @softwarespot
* @license http://www.dbad-license.org/
*/
class Format {
/**
* Array output format
*/
const ARRAY_FORMAT = 'array';
/**
* Comma Separated Value (CSV) output format
*/
const CSV_FORMAT = 'csv';
/**
* Json output format
*/
const JSON_FORMAT = 'json';
/**
* HTML output format
*/
const HTML_FORMAT = 'html';
/**
* PHP output format
*/
const PHP_FORMAT = 'php';
/**
* Serialized output format
*/
const SERIALIZED_FORMAT = 'serialized';
/**
* XML output format
*/
const XML_FORMAT = 'xml';
/**
* Default format of this class
*/
const DEFAULT_FORMAT = self::JSON_FORMAT; // Couldn't be DEFAULT, as this is a keyword
/**
* CodeIgniter instance
*
* @var object
*/
private $_CI;
/**
* Data to parse
*
* @var mixed
*/
protected $_data = [];
/**
* Type to convert from
*
* @var string
*/
protected $_from_type = NULL;
/**
* DO NOT CALL THIS DIRECTLY, USE factory()
*
* @param NULL $data
* @param NULL $from_type
* @throws Exception
*/
public function __construct($data = NULL, $from_type = NULL)
{
// Get the CodeIgniter reference
$this->_CI = &get_instance();
// Load the inflector helper
$this->_CI->load->helper('inflector');
// If the provided data is already formatted we should probably convert it to an array
if ($from_type !== NULL)
{
if (method_exists($this, '_from_' . $from_type))
{
$data = call_user_func([$this, '_from_' . $from_type], $data);
}
else
{
throw new Exception('Format class does not support conversion from "' . $from_type . '".');
}
}
// Set the member variable to the data passed
$this->_data = $data;
}
/**
* Create an instance of the format class
* e.g: echo $this->format->factory(['foo' => 'bar'])->to_csv();
*
* @param mixed $data Data to convert/parse
* @param string $from_type Type to convert from e.g. json, csv, html
*
* @return object Instance of the format class
*/
public function factory($data, $from_type = NULL)
{
// $class = __CLASS__;
// return new $class();
return new static($data, $from_type);
}
// FORMATTING OUTPUT ---------------------------------------------------------
/**
* Format data as an array
*
* @param mixed|NULL $data Optional data to pass, so as to override the data passed
* to the constructor
* @return array Data parsed as an array; otherwise, an empty array
*/
public function to_array($data = NULL)
{
// If no data is passed as a parameter, then use the data passed
// via the constructor
if ($data === NULL && func_num_args() === 0)
{
$data = $this->_data;
}
// Cast as an array if not already
if (is_array($data) === FALSE)
{
$data = (array) $data;
}
$array = [];
foreach ((array) $data as $key => $value)
{
if (is_object($value) === TRUE || is_array($value) === TRUE)
{
$array[$key] = $this->to_array($value);
}
else
{
$array[$key] = $value;
}
}
return $array;
}
/**
* Format data as XML
*
* @param mixed|NULL $data Optional data to pass, so as to override the data passed
* to the constructor
* @param NULL $structure
* @param string $basenode
* @return mixed
*/
public function to_xml($data = NULL, $structure = NULL, $basenode = 'xml')
{
if ($data === NULL && func_num_args() === 0)
{
$data = $this->_data;
}
// turn off compatibility mode as simple xml throws a wobbly if you don't.
if (ini_get('zend.ze1_compatibility_mode') == 1)
{
ini_set('zend.ze1_compatibility_mode', 0);
}
if ($structure === NULL)
{
$structure = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$basenode />");
}
// Force it to be something useful
if (is_array($data) === FALSE && is_object($data) === FALSE)
{
$data = (array) $data;
}
foreach ($data as $key => $value)
{
//change false/true to 0/1
if (is_bool($value))
{
$value = (int) $value;
}
// no numeric keys in our xml please!
if (is_numeric($key))
{
// make string key...
$key = (singular($basenode) != $basenode) ? singular($basenode) : 'item';
}
// replace anything not alpha numeric
$key = preg_replace('/[^a-z_\-0-9]/i', '', $key);
if ($key === '_attributes' && (is_array($value) || is_object($value)))
{
$attributes = $value;
if (is_object($attributes))
{
$attributes = get_object_vars($attributes);
}
foreach ($attributes as $attribute_name => $attribute_value)
{
$structure->addAttribute($attribute_name, $attribute_value);
}
}
// if there is another array found recursively call this function
elseif (is_array($value) || is_object($value))
{
$node = $structure->addChild($key);
// recursive call.
$this->to_xml($value, $node, $key);
}
else
{
// add single node.
$value = htmlspecialchars(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
$structure->addChild($key, $value);
}
}
return $structure->asXML();
}
/**
* Format data as HTML
*
* @param mixed|NULL $data Optional data to pass, so as to override the data passed
* to the constructor
* @return mixed
*/
public function to_html($data = NULL)
{
// If no data is passed as a parameter, then use the data passed
// via the constructor
if ($data === NULL && func_num_args() === 0)
{
$data = $this->_data;
}
// Cast as an array if not already
if (is_array($data) === FALSE)
{
$data = (array) $data;
}
// Check if it's a multi-dimensional array
if (isset($data[0]) && count($data) !== count($data, COUNT_RECURSIVE))
{
// Multi-dimensional array
$headings = array_keys($data[0]);
}
else
{
// Single array
$headings = array_keys($data);
$data = [$data];
}
// Load the table library
$this->_CI->load->library('table');
$this->_CI->table->set_heading($headings);
foreach ($data as $row)
{
// Suppressing the "array to string conversion" notice
// Keep the "evil" @ here
$row = @array_map('strval', $row);
$this->_CI->table->add_row($row);
}
return $this->_CI->table->generate();
}
/**
* @link http://www.metashock.de/2014/02/create-csv-file-in-memory-php/
* @param mixed|NULL $data Optional data to pass, so as to override the data passed
* to the constructor
* @param string $delimiter The optional delimiter parameter sets the field
* delimiter (one character only). NULL will use the default value (,)
* @param string $enclosure The optional enclosure parameter sets the field
* enclosure (one character only). NULL will use the default value (")
* @return string A csv string
*/
public function to_csv($data = NULL, $delimiter = ',', $enclosure = '"')
{
// Use a threshold of 1 MB (1024 * 1024)
$handle = fopen('php://temp/maxmemory:1048576', 'w');
if ($handle === FALSE)
{
return NULL;
}
// If no data is passed as a parameter, then use the data passed
// via the constructor
if ($data === NULL && func_num_args() === 0)
{
$data = $this->_data;
}
// If NULL, then set as the default delimiter
if ($delimiter === NULL)
{
$delimiter = ',';
}
// If NULL, then set as the default enclosure
if ($enclosure === NULL)
{
$enclosure = '"';
}
// Cast as an array if not already
if (is_array($data) === FALSE)
{
$data = (array) $data;
}
// Check if it's a multi-dimensional array
if (isset($data[0]) && count($data) !== count($data, COUNT_RECURSIVE))
{
// Multi-dimensional array
$headings = array_keys($data[0]);
}
else
{
// Single array
$headings = array_keys($data);
$data = [$data];
}
// Apply the headings
fputcsv($handle, $headings, $delimiter, $enclosure);
foreach ($data as $record)
{
// If the record is not an array, then break. This is because the 2nd param of
// fputcsv() should be an array
if (is_array($record) === FALSE)
{
break;
}
// Suppressing the "array to string conversion" notice.
// Keep the "evil" @ here.
$record = @ array_map('strval', $record);
// Returns the length of the string written or FALSE
fputcsv($handle, $record, $delimiter, $enclosure);
}
// Reset the file pointer
rewind($handle);
// Retrieve the csv contents
$csv = stream_get_contents($handle);
// Close the handle
fclose($handle);
return $csv;
}
/**
* Encode data as json
*
* @param mixed|NULL $data Optional data to pass, so as to override the data passed
* to the constructor
* @return string Json representation of a value
*/
public function to_json($data = NULL)
{
// If no data is passed as a parameter, then use the data passed
// via the constructor
if ($data === NULL && func_num_args() === 0)
{
$data = $this->_data;
}
// Get the callback parameter (if set)
$callback = $this->_CI->input->get('callback');
if (empty($callback) === TRUE)
{
return json_encode($data);
}
// We only honour a jsonp callback which are valid javascript identifiers
elseif (preg_match('/^[a-z_\$][a-z0-9\$_]*(\.[a-z_\$][a-z0-9\$_]*)*$/i', $callback))
{
// Return the data as encoded json with a callback
return $callback . '(' . json_encode($data) . ');';
}
// An invalid jsonp callback function provided.
// Though I don't believe this should be hardcoded here
$data['warning'] = 'INVALID JSONP CALLBACK: ' . $callback;
return json_encode($data);
}
/**
* Encode data as a serialized array
*
* @param mixed|NULL $data Optional data to pass, so as to override the data passed
* to the constructor
* @return string Serialized data
*/
public function to_serialized($data = NULL)
{
// If no data is passed as a parameter, then use the data passed
// via the constructor
if ($data === NULL && func_num_args() === 0)
{
$data = $this->_data;
}
return serialize($data);
}
/**
* Format data using a PHP structure
*
* @param mixed|NULL $data Optional data to pass, so as to override the data passed
* to the constructor
* @return mixed String representation of a variable
*/
public function to_php($data = NULL)
{
// If no data is passed as a parameter, then use the data passed
// via the constructor
if ($data === NULL && func_num_args() === 0)
{
$data = $this->_data;
}
return var_export($data, TRUE);
}
// INTERNAL FUNCTIONS
/**
* @param $data XML string
* @return SimpleXMLElement XML element object; otherwise, empty array
*/
protected function _from_xml($data)
{
return $data ? (array) simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA) : [];
}
/**
* @param string $data CSV string
* @param string $delimiter The optional delimiter parameter sets the field
* delimiter (one character only). NULL will use the default value (,)
* @param string $enclosure The optional enclosure parameter sets the field
* enclosure (one character only). NULL will use the default value (")
* @return array A multi-dimensional array with the outer array being the number of rows
* and the inner arrays the individual fields
*/
protected function _from_csv($data, $delimiter = ',', $enclosure = '"')
{
// If NULL, then set as the default delimiter
if ($delimiter === NULL)
{
$delimiter = ',';
}
// If NULL, then set as the default enclosure
if ($enclosure === NULL)
{
$enclosure = '"';
}
return str_getcsv($data, $delimiter, $enclosure);
}
/**
* @param $data Encoded json string
* @return mixed Decoded json string with leading and trailing whitespace removed
*/
protected function _from_json($data)
{
return json_decode(trim($data));
}
/**
* @param string Data to unserialized
* @return mixed Unserialized data
*/
protected function _from_serialize($data)
{
return unserialize(trim($data));
}
/**
* @param $data Data to trim leading and trailing whitespace
* @return string Data with leading and trailing whitespace removed
*/
protected function _from_php($data)
{
return trim($data);
}
}
+116 -22
View File
@@ -8,6 +8,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
class PersonLogLib
{
const PARKED_LOGNAME = 'Parked';
const ONHOLD_LOGNAME = 'Onhold';
/**
* Constructor
@@ -91,26 +92,20 @@ class PersonLogLib
*/
public function park($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$logdata = array(
$onhold = $this->getOnHoldDate($person_id);
if (hasData($onhold))
return error("Person already on hold");
$logjson = array(
'name' => self::PARKED_LOGNAME
);
$data = array(
'person_id' => $person_id,
'zeitpunkt' => $date,
'taetigkeit_kurzbz' => $taetigkeit_kurzbz,
'app' => $app,
'oe_kurzbz' => $oe_kurzbz,
'logtype_kurzbz' => 'Processstate',
'logdata' => json_encode($logdata),
'insertvon' => $user
);
return $this->ci->PersonLogModel->insert($data);
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
}
/**
* Unparks a person, i.e. removes all log entries in the future
* Unparks a person, i.e. removes all log entries in the future with logname for parking
* @param $person_id
* @return array with deleted logids
*/
@@ -131,17 +126,9 @@ class PersonLogLib
{
$deleted[] = $log->log_id;
}
else
{
return $delresult;
}
}
}
}
else
{
return $result;
}
return success($deleted);
}
@@ -172,4 +159,111 @@ class PersonLogLib
return $parkeddate;
}
/**
* Sets person on hold, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent).
* Done by adding a logentry with a special name. can be undone only manually by clicking button.
* @param $person_id
* @param $date
* @param $taetigkeit_kurzbz
* @param string $app
* @param null $oe_kurzbz
* @param null $user
* @return array
*/
public function setOnHold($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$parked = $this->getParkedDate($person_id);
if (hasData($parked))
return error("Person already parked");
$logjson = array(
'name' => self::ONHOLD_LOGNAME
);
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
}
/**
* Removes on hold status, i.e. removes all log entries with logname for on hold
* @param $person_id
* @return array
*/
public function removeOnHold($person_id)
{
$deleted = array();
$result = $this->ci->PersonLogModel->filterLog($person_id);
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
{
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
if (isSuccess($delresult))
{
$deleted[] = $log->log_id;
}
}
}
}
return success($deleted);
}
/**
* Gets date until which a person is on hold
* @param $person_id
* @return the date if person is on hold, null otherwise
*/
public function getOnHoldDate($person_id)
{
$result = $this->ci->PersonLogModel->filterLog($person_id);
$onholddate = null;
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
{
$onholddate = $log->zeitpunkt;
break;
}
}
}
return $onholddate;
}
/**
* Saves a processstate log with specified parameters, including a specified log date.
* @param $person_id
* @param $date
* @param $taetigkeit_kurzbz
* @param $logjson
* @param string $app
* @param null $oe_kurzbz
* @param null $user
* @return mixed
*/
private function _savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app = 'core', $oe_kurzbz = null, $user = null)
{
$data = array(
'person_id' => $person_id,
'zeitpunkt' => $date,
'taetigkeit_kurzbz' => $taetigkeit_kurzbz,
'app' => $app,
'oe_kurzbz' => $oe_kurzbz,
'logtype_kurzbz' => 'Processstate',
'logdata' => json_encode($logjson),
'insertvon' => $user
);
return $this->ci->PersonLogModel->insert($data);
}
}
@@ -7,6 +7,7 @@
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\', \'Interessent rejected\'';
$LOGDATA_NAME_PARKED = '\'Parked\'';
$LOGDATA_NAME_ONHOLD = '\'Onhold\'';
$LOGTYPE_KURZBZ = '\'Processstate\'';
$STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\'';
$ADDITIONAL_STG = '10021,10027';
@@ -24,6 +25,7 @@
pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser",
pd.parkdate AS "ParkDate",
ohd.onholddate AS "OnholdDate",
(
SELECT l.zeitpunkt
FROM system.tbl_log l
@@ -228,6 +230,14 @@
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.'
AND l.zeitpunkt >= NOW()
) pd USING(person_id)
LEFT JOIN (
SELECT l.person_id,
l.zeitpunkt AS onholddate
FROM system.tbl_log l
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_ONHOLD.'
AND l.zeitpunkt >= NOW()
) ohd USING(person_id)
WHERE
EXISTS (
SELECT 1
@@ -278,6 +288,7 @@
ucfirst($this->p->t('global', 'sperrdatum')),
ucfirst($this->p->t('global', 'gesperrtVon')),
ucfirst($this->p->t('global', 'parkdatum')),
ucfirst($this->p->t('global', 'rueckstelldatum')),
ucfirst($this->p->t('global', 'letzteAktion')),
'Aktionstyp',
'AnzahlAktePflicht',
@@ -340,6 +351,11 @@
$datasetRaw->{'ParkDate'} = '-';
}
if ($datasetRaw->{'OnholdDate'} == null)
{
$datasetRaw->{'OnholdDate'} = '-';
}
if ($datasetRaw->{'StgAbgeschickt'} == null)
{
$datasetRaw->{'StgAbgeschickt'} = '-';
@@ -376,6 +392,11 @@
$mark = FilterWidget::DEFAULT_MARK_ROW_CLASS;
}
if ($datasetRaw->OnholdDate != null)
{
$mark = "text-success";
}
// Parking has priority over locking
if ($datasetRaw->ParkDate != null)
{
@@ -34,7 +34,14 @@
'nichtsZumAusparken',
'fehlerBeimAusparken',
'fehlerBeimParken',
'bewerberGeparktBis'
'bewerberGeparktBis',
'bewerberOnHold',
'bewerberOnHoldEntfernen',
'bewerberOnHoldBis',
'nichtsZumEntfernen',
'fehlerBeimEntfernen',
'rueckstelldatumUeberschritten',
'parkenZurueckstellenInfo'
),
'ui' => array(
'gespeichert',
@@ -176,7 +183,7 @@
</div>
</div>
<div class="col-lg-6">
<div id="parking"></div>
<div id="postponing"></div>
<div id="logs">
<?php $this->load->view('system/infocenter/logs.php'); ?>
</div>
@@ -235,6 +235,7 @@
'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'infocenter',
'datasetRepresentation' => 'tablesorter',
'reloadDataset' => ($this->input->get('reloadDataset')=='true'?true:false),
'checkboxes' => 'PersonId',
'additionalColumns' => array('Details'),
'columnsAliases' => array(
@@ -204,6 +204,7 @@
'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'infocenter',
'datasetRepresentation' => 'tablesorter',
'reloadDataset' => ($this->input->get('reloadDataset')=='true'?true:false),
'checkboxes' => 'PersonId',
'additionalColumns' => array('Details'),
'columnsAliases' => array(
+13 -2
View File
@@ -35,6 +35,7 @@ require_once('../../../include/ort.class.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/mitarbeiter.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
@@ -231,11 +232,21 @@ if ($num_rows_stpl>0)
$titel = trim($row->titel);
$gesamtanzahl = ($anzahl_grp!=0?$anzahl_grp:$anzahl_lvb);
$ort->load($ortkurzbz);
// no profile link for fake Mitarbeiter like Dummylektor, Personalnr must be > 0
$profileLink = true;
$mitarbeiter = new mitarbeiter();
if ($mitarbeiter->load($row->uid))
{
if (isset($mitarbeiter->personalnummer) && is_numeric($mitarbeiter->personalnummer) && (int)$mitarbeiter->personalnummer < 0)
$profileLink = false;
}
echo '
<tr class="liste'.($i%2).'">
<td>'.$db->convert_html_chars($unr).'</td>
<td><A class="Item" href="../profile/index.php?uid='.$row->uid.'" target="_self" onClick="window.resizeTo(1200,880)">'.$db->convert_html_chars($titelpre.' '.$pers_vorname.' '.$pers_nachname.' '.$titelpost).'</A></td>
<td>'.($profileLink ? '<A class="Item" href="../profile/index.php?uid='.$row->uid.'" target="_self" onClick="window.resizeTo(1200,880)">' : '').$db->convert_html_chars($titelpre.' '.$pers_vorname.' '.$pers_nachname.' '.$titelpost).($profileLink ? '</A>' : '').'</td>
<td title="'.$db->convert_html_chars($ort->bezeichnung).'">'.(!empty($ortkurzbz)?($ort->content_id!=''?'<a href="../../../cms/content.php?content_id='.$ort->content_id.'" target="_self" onClick="window.resizeTo(1200,880)">'.$db->convert_html_chars($ortkurzbz).'</a>':$db->convert_html_chars($ortkurzbz)):$db->convert_html_chars($ortkurzbz)).'</td>
<td>'.$db->convert_html_chars($lehrfachkurzbz).'</td>
<td>'.$db->convert_html_chars($bezeichnung).'</td>
+79 -22
View File
@@ -66,6 +66,9 @@ if (isset($_GET['uid']) && $_GET['uid'] != $uid)
$uid = stripslashes($_GET['uid']);
$ansicht = true;
}
$adminOrOwnUser = $rechte->isBerechtigt('admin') || !$ansicht;
if ($rechte->isBerechtigt('basis/kontakt'))
$ansicht = false;
@@ -127,6 +130,9 @@ if (!$user->load($uid))
if ($type == 'mitarbeiter')
{
if (isset($user->personalnummer) && is_numeric($user->personalnummer) && (int)$user->personalnummer < 0)
die($p->t('profil/keinGueltigesProfil'));
$vorwahl = '';
$kontakt = new kontakt();
$kontakt->loadFirmaKontakttyp($user->standort_id,'telefon');
@@ -156,12 +162,7 @@ echo '<!DOCTYPE HTML>
$(document).ready(function()
{
$("#t1").tablesorter(
{
sortList: [[0,0]],
widgets: ["zebra"]
});
$("#t2").tablesorter(
$("#t1, #t2, #tfuture").tablesorter(
{
sortList: [[0,0]],
widgets: ["zebra"]
@@ -504,36 +505,55 @@ echo '<tr>
if (!defined('CIS_PROFIL_FUNKTIONEN_ANZEIGEN') || CIS_PROFIL_FUNKTIONEN_ANZEIGEN)
{
//Funktionen
$qry = "SELECT
$baseqry = "SELECT
*, tbl_benutzerfunktion.oe_kurzbz as oe_kurzbz, tbl_organisationseinheit.bezeichnung as oe_bezeichnung,
tbl_benutzerfunktion.semester, tbl_benutzerfunktion.bezeichnung as bf_bezeichnung,
tbl_benutzerfunktion.datum_von, tbl_benutzerfunktion.datum_bis
tbl_benutzerfunktion.wochenstunden, tbl_benutzerfunktion.datum_von, tbl_benutzerfunktion.datum_bis
FROM
public.tbl_benutzerfunktion
JOIN public.tbl_funktion USING(funktion_kurzbz)
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE
uid=".$db->db_add_param($uid)." AND
(tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now())";
uid=".$db->db_add_param($uid);
if ($result_funktion = $db->db_query($qry))
$currfunkqry = $baseqry . " AND ((tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now())
AND (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()))";
$futurefunkqry = $baseqry . " AND (tbl_benutzerfunktion.datum_von>now())";
printFunctionsTable($currfunkqry, 'profil/funktionen', 't1', true);
printFunctionsTable($futurefunkqry, 'profil/zukuenftigeFunktionen', 'tfuture');
}
/**
* Print html table containing user functions.
* @param $query string execute for getting data
* @param $tableid string html table id
* @param $showVertragsstunden bool show Vertragsstunden sum near Wochenstunden sum
*/
function printFunctionsTable($query, $headingphrase, $tableid, $showVertragsstunden = false)
{
global $db, $p, $datum_obj, $uid, $adminOrOwnUser;
if ($result_funktion = $db->db_query($query))
{
if ($db->db_num_rows($result_funktion) > 0)
{
echo '<b>'.$p->t('profil/funktionen').'</b>
<table class="tablesorter" id="t1">
echo '<b>'.$p->t($headingphrase).'</b>';
echo '
<table class="tablesorter" id="'.$tableid.'">
<thead>
<tr>
<th>'.$p->t('global/bezeichnung').'</th>
<th>'.$p->t('global/organisationseinheit').'</th>
<th>'.$p->t('global/semester').'</th>
<th>'.$p->t('global/institut').'</th>
<th>'.$p->t('profil/gueltigvon').'</th>
<th>'.$p->t('profil/gueltigbis').'</th>
</tr>
<th>'.$p->t('profil/gueltigbis').'</th>'.
($adminOrOwnUser ? '<th>'.$p->t('profil/wochenstunden').'</th>' : '').
'</tr>
</thead>
<tbody>';
$wochenstunden_sum = 0.00;
while($row_funktion = $db->db_fetch_object($result_funktion))
{
echo "
@@ -544,13 +564,50 @@ if (!defined('CIS_PROFIL_FUNKTIONEN_ANZEIGEN') || CIS_PROFIL_FUNKTIONEN_ANZEIGEN
echo ' - '.$row_funktion->bf_bezeichnung;
echo "</td>
<td nowrap>".$row_funktion->organisationseinheittyp_kurzbz.' '.$row_funktion->oe_bezeichnung."</td>
<td>$row_funktion->semester</td>
<td>$row_funktion->fachbereich_kurzbz</td>
<td>".$datum_obj->formatDatum($row_funktion->datum_von,'d.m.Y')."</td>
<td>".$datum_obj->formatDatum($row_funktion->datum_bis,'d.m.Y')."</td>
</tr>";
<td>".$datum_obj->formatDatum($row_funktion->datum_bis,'d.m.Y')."</td>".
($adminOrOwnUser ? "<td>".number_format($row_funktion->wochenstunden, 2)."</td>" : "").
"</tr>";
if(isset($row_funktion->wochenstunden) && $adminOrOwnUser)
$wochenstunden_sum += (double)$row_funktion->wochenstunden;
}
echo '</tbody></table><br>';
echo '</tbody><br>';
//vertragsstunden
if ($showVertragsstunden === true && $adminOrOwnUser)
{
$vertragsstunden = 0.00;
$qry = "SELECT sum(vertragsstunden) AS vertragsstdsumme from bis.tbl_bisverwendung
WHERE mitarbeiter_uid = ".$db->db_add_param($uid)."
AND (ende > now() OR ende IS NULL)";
if ($result_vertragsstd = $db->db_query($qry))
{
if ($db->db_num_rows($result_vertragsstd) > 0)
{
while($row_vertragsstd = $db->db_fetch_object($result_vertragsstd))
{
$vertragsstunden = $row_vertragsstd->vertragsstdsumme;
}
}
}
}
if ($adminOrOwnUser)
{
echo "
<tfoot>
<tr>
<td></td>
<td></td>
<th colspan ='2'>Summe Wochenstunden".($showVertragsstunden === true ? " (".$p->t('profil/vertragsstunden').")" : "")."</th>
<th style='padding: 4pt 0'>&nbsp;".number_format($wochenstunden_sum, 2).($showVertragsstunden === true ?
"&nbsp;(".number_format($vertragsstunden, 2).")" : "")."</th>
</tr>
</tfoot>";
}
echo "</table>";
}
}
}
+2 -1
View File
@@ -113,7 +113,8 @@ function searchPerson($searchItems)
{
global $db, $p, $noalias, $uid;
$bn = new benutzer();
$bn->search($searchItems, 21);
//search only active and Mitarbeiter with positive Personalnr
$bn->search($searchItems, 21, true, true);
if(count($bn->result)>0)
{
+1
View File
@@ -228,6 +228,7 @@
"borgar/textile-js": "2.0.4",
"BlackrockDigital/startbootstrap-sb-admin-2": "^3.3",
"chriskacerguis/codeigniter-restserver": "^3.0",
"christianbach/tablesorter": "^1.0",
"codeigniter/framework": "3.*",
"components/jquery": "^3.2",
Generated
+41 -1
View File
@@ -4,7 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "ad1bf16a24075268ce1cf2a033f9e7fb",
"hash": "44a02c1e72626f05e682de2030c8adad",
"content-hash": "e0898c2ba3d18593851989029e54bedb",
"packages": [
{
"name": "BlackrockDigital/startbootstrap-sb-admin-2",
@@ -70,6 +71,45 @@
},
"type": "library"
},
{
"name": "chriskacerguis/codeigniter-restserver",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/chriskacerguis/codeigniter-restserver.git",
"reference": "3a5ba0dffdebd24cc215ef714b72208c88304203"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/chriskacerguis/codeigniter-restserver/zipball/3a5ba0dffdebd24cc215ef714b72208c88304203",
"reference": "3a5ba0dffdebd24cc215ef714b72208c88304203",
"shasum": ""
},
"require": {
"codeigniter/framework": "^3.0.4",
"php": ">=5.4.0"
},
"type": "library",
"autoload": {
"classmap": [
"application/libraries/Format.php",
"application/libraries/REST_Controller.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Kacerguis",
"role": "Developer"
}
],
"description": "REST Server for the CodeIgniter framework",
"homepage": "https://github.com/chriskacerguis/codeigniter-restserver",
"time": "2017-09-23 16:44:55"
},
{
"name": "christianbach/tablesorter",
"version": "1.0.1",
+524 -520
View File
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -867,7 +867,7 @@ class mitarbeiter extends benutzer
* Nachname, Vorname, UID $filter enthaelt
* @param $filter
*/
public function search($filter, $limit=null, $aktiv=true)
public function search($filter, $limit=null, $aktiv=true, $positivePersonalnr=false)
{
$qry = "SELECT vorname, nachname, titelpre, titelpost, kurzbz, vornamen, uid
FROM campus.vw_mitarbeiter
@@ -882,7 +882,6 @@ class mitarbeiter extends benutzer
if(!is_null($limit) && is_numeric($limit))
$qry.=" LIMIT ".$limit;
//echo $qry;
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
+35 -1
View File
@@ -165,7 +165,7 @@ class pruefling extends basis_db
}
/**
* Laedt einen Puefling anhand der Prestudent_id
* Laedt einen Pruefling anhand der Prestudent_id
*
* @param $prestudent_id
* @return boolean
@@ -199,6 +199,40 @@ class pruefling extends basis_db
}
}
/**
* Laedt alle Prueflinge anhand der Prestudent_id
*
* @param $prestudent_id
* @return boolean
*/
public function getPrueflinge($prestudent_id)
{
$qry = "SELECT * FROM testtool.tbl_pruefling WHERE prestudent_id=".$this->db_add_param($prestudent_id, FHC_INTEGER);
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new pruefling();
$obj->pruefling_id = $row->pruefling_id;
$obj->studiengang_kz = $row->studiengang_kz;
$obj->idnachweis = $row->idnachweis;
$obj->registriert = $row->registriert;
$obj->prestudent_id = $row->prestudent_id;
$obj->semester = $row->semester;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = "Fehler beim Laden";
return false;
}
}
/**
* Ermittelt den aktuellen Level (schwierigkeitsgrad der Frage)
* des Prueflings fuer das uebergebene Gebiet
+87 -83
View File
@@ -1,83 +1,87 @@
<?php
$this->phrasen['profil/profil']='Profil';
$this->phrasen['profil/mitarbeiter']='MitarbeiterIn';
$this->phrasen['profil/home']='HOME';
$this->phrasen['profil/meinCis']='Mein CIS';
$this->phrasen['profil/bildHochladen']='Profilfoto hochladen';
$this->phrasen['profil/email']='eMail';
$this->phrasen['profil/kontaktPrivat']='Private Kontakte';
$this->phrasen['profil/mobil']='Mobil';
$this->phrasen['profil/telefon']='Telefon';
$this->phrasen['profil/intern']='Intern';
$this->phrasen['profil/alias']='Alias';
$this->phrasen['profil/homepage']='Homepage';
$this->phrasen['profil/student']='StudentIn';
$this->phrasen['profil/martrikelnummer']='Personenkennzeichen';
$this->phrasen['profil/leistungsbeurteilung']='Leistungsbeurteilung';
$this->phrasen['profil/kurzzeichen']='Kurzzeichen';
$this->phrasen['profil/telefonTw']='Telefon';
$this->phrasen['profil/faxTw']='Fax';
$this->phrasen['profil/zeitwuensche']='Zeitwünsche';
$this->phrasen['profil/funktionen']='Funktionen';
$this->phrasen['profil/entlehnteBetriebsmittel']='Entlehnte Betriebsmittel';
$this->phrasen['profil/betriebsmittel']='Betriebsmittel';
$this->phrasen['profil/nummer']='Nummer';
$this->phrasen['profil/ausgegebenAm']='Ausgegeben am';
$this->phrasen['profil/sieSindMitgliedInFolgendenVerteilern']='Sie sind Mitglied in folgenden Verteilern';
$this->phrasen['profil/derUserIstInFolgendenVerteilern'] = 'Der User %s ist Mitglied in folgenden Verteilern';
$this->phrasen['profil/alleStudentenVon']='Alle StudentInnen von';
$this->phrasen['profil/kurzbeschreibungFuerOeh']='Kurzbeschreibung für die ÖH-Kandidatur';
$this->phrasen['profil/solltenDatenNichtStimmen']='Sollten Ihre Daten nicht stimmen, wenden Sie sich bitte an die zuständige Assistenz';
$this->phrasen['profil/esWurdenKeineProfileGefunden']='Es wurden keine oder mehrere Profile f&uuml;r Ihren Useraccount gefunden';
$this->phrasen['profil/adminstration']='Administration';
$this->phrasen['profil/zustaendigeAssistenz']='zuständige Assistenz';
$this->phrasen['profil/wendenSieSichAn']='Bitte wenden Sie sich an die';
$this->phrasen['profil/solltenDatenNichtStimmen']='Sollten Ihre Daten nicht stimmen, wenden Sie sich bitte an die';
$this->phrasen['profil/buero']='Büro';
$this->phrasen['profil/zeitsperrenVon']='Zeitsperren von';
$this->phrasen['profil/lvplanVon']='LV-Plan von';
$this->phrasen['profil/AccountInaktiv']='Achtung: Dieser Account ist nicht mehr aktiv';
$this->phrasen['profil/inaktivStudent']='Achtung!<br> Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz
deaktiviert wurde.Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht. <br><br>
Sollte innerhalb von 6 Monaten (für Studierende) bzw. 3 Wochen (für AbbrecherInnen) nach der Deaktivierung keine
neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch<br>- Ihr Account, <br>- Ihre Mailbox (inkl. aller E-Mails) und<br>
- Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht.<br><br>Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten,
sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.<br>';
$this->phrasen['profil/inaktivMitarbeiter']='Achtung!<br> Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz
deaktiviert wurde.Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht. <br><br>
Sollte innerhalb von 12 Monaten nach der Deaktivierung keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch<br>
- Ihr Account, <br>- Ihre Mailbox (inkl. aller E-Mails) und<br>
- Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht.<br><br>Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten,
sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.<br>';
$this->phrasen['profil/inaktivSonstige']='Achtung!<br> Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz
deaktiviert wurde.Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht. <br><br>
Sollte innerhalb der nächsten Tagen keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch<br>
- Ihr Account, <br>- Ihre Mailbox (inkl. aller E-Mails) und<br>
- Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht.<br><br>Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten,
sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.<br>';
$this->phrasen['profil/nurJPGBilder']='Derzeit können nur Bilder im JPG Format hochgeladen werden';
$this->phrasen['profil/BilduploadInfotext']='Derzeit können nur Bilder im JPG Format mit einer Maximalgröße von 15MB hochgeladen werden!<br><br><b>Bitte beachten Sie die <a href="'.APP_ROOT.'cms/content.php?content_id=%s">Richtlinien für den Bildupload</a></b>';
$this->phrasen['profil/Bild']='Profilfoto';
$this->phrasen['profil/Bildupload']='Bildupload';
$this->phrasen['profil/fotofreigeben']='Sperre des Profilfotos aufheben';
$this->phrasen['profil/fotosperren']='Profilfoto sperren';
$this->phrasen['profil/infotextSperre']='Gesperrte Profilbilder werden nur für Zutrittskarten verwendet und scheinen nicht auf Anwesenheitslisten oder in der Personensuche auf';
$this->phrasen['profil/profilfotoGesperrt']='Profilfoto gesperrt';
$this->phrasen['profil/profilfotoUploadGesperrt']='Der Upload des Profilfotos ist nicht mehr möglich';
$this->phrasen['profil/fhausweisStatus']='FH-Ausweis Status';
$this->phrasen['profil/fhausweisWurdeBereitsAusgegeben']='Der FH Ausweis ist am %s ausgegeben worden.';
$this->phrasen['profil/ladenSieBitteEinGueltigesFotoHoch']='Laden Sie bitte ein gültiges Foto hoch';
$this->phrasen['profil/fotoWurdeNochNichtAkzeptiert']='Foto wurde noch nicht akzeptiert';
$this->phrasen['profil/fhausweisGedrucktAm']='FH-Ausweis gedruckt am';
$this->phrasen['profil/fhausweisAbholbereitAmEmpfangAb']='FH-Ausweis abholbereit am Empfang ab';
$this->phrasen['profil/fhausweisWurdeNochNichtGedruckt']='FH-Ausweis wurde noch nicht gedruckt';
$this->phrasen['profil/ihrFotoWurdeNochNichtGeprueft']='Ihr Foto wurde noch nicht geprüft';
$this->phrasen['profil/fotoAuswählen']='Klicken Sie auf das Bild um ein Foto hochzuladen';
$this->phrasen['profil/bildSpeichern']='Bild speichern';
$this->phrasen['profil/gueltigvon']='Gültig von';
$this->phrasen['profil/gueltigbis']='Gültig bis';
?>
<?php
$this->phrasen['profil/profil']='Profil';
$this->phrasen['profil/mitarbeiter']='MitarbeiterIn';
$this->phrasen['profil/home']='HOME';
$this->phrasen['profil/meinCis']='Mein CIS';
$this->phrasen['profil/bildHochladen']='Profilfoto hochladen';
$this->phrasen['profil/email']='eMail';
$this->phrasen['profil/kontaktPrivat']='Private Kontakte';
$this->phrasen['profil/mobil']='Mobil';
$this->phrasen['profil/telefon']='Telefon';
$this->phrasen['profil/intern']='Intern';
$this->phrasen['profil/alias']='Alias';
$this->phrasen['profil/homepage']='Homepage';
$this->phrasen['profil/student']='StudentIn';
$this->phrasen['profil/martrikelnummer']='Personenkennzeichen';
$this->phrasen['profil/leistungsbeurteilung']='Leistungsbeurteilung';
$this->phrasen['profil/kurzzeichen']='Kurzzeichen';
$this->phrasen['profil/telefonTw']='Telefon';
$this->phrasen['profil/faxTw']='Fax';
$this->phrasen['profil/zeitwuensche']='Zeitwünsche';
$this->phrasen['profil/funktionen']='Funktionen';
$this->phrasen['profil/entlehnteBetriebsmittel']='Entlehnte Betriebsmittel';
$this->phrasen['profil/betriebsmittel']='Betriebsmittel';
$this->phrasen['profil/nummer']='Nummer';
$this->phrasen['profil/ausgegebenAm']='Ausgegeben am';
$this->phrasen['profil/sieSindMitgliedInFolgendenVerteilern']='Sie sind Mitglied in folgenden Verteilern';
$this->phrasen['profil/derUserIstInFolgendenVerteilern'] = 'Der User %s ist Mitglied in folgenden Verteilern';
$this->phrasen['profil/alleStudentenVon']='Alle StudentInnen von';
$this->phrasen['profil/kurzbeschreibungFuerOeh']='Kurzbeschreibung für die ÖH-Kandidatur';
$this->phrasen['profil/solltenDatenNichtStimmen']='Sollten Ihre Daten nicht stimmen, wenden Sie sich bitte an die zuständige Assistenz';
$this->phrasen['profil/esWurdenKeineProfileGefunden']='Es wurden keine oder mehrere Profile f&uuml;r Ihren Useraccount gefunden';
$this->phrasen['profil/keinGueltigesProfil']='Kein gültiges Profil';
$this->phrasen['profil/adminstration']='Administration';
$this->phrasen['profil/zustaendigeAssistenz']='zuständige Assistenz';
$this->phrasen['profil/wendenSieSichAn']='Bitte wenden Sie sich an die';
$this->phrasen['profil/solltenDatenNichtStimmen']='Sollten Ihre Daten nicht stimmen, wenden Sie sich bitte an die';
$this->phrasen['profil/buero']='Büro';
$this->phrasen['profil/zeitsperrenVon']='Zeitsperren von';
$this->phrasen['profil/lvplanVon']='LV-Plan von';
$this->phrasen['profil/AccountInaktiv']='Achtung: Dieser Account ist nicht mehr aktiv';
$this->phrasen['profil/inaktivStudent']='Achtung!<br> Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz
deaktiviert wurde.Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht. <br><br>
Sollte innerhalb von 6 Monaten (für Studierende) bzw. 3 Wochen (für AbbrecherInnen) nach der Deaktivierung keine
neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch<br>- Ihr Account, <br>- Ihre Mailbox (inkl. aller E-Mails) und<br>
- Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht.<br><br>Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten,
sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.<br>';
$this->phrasen['profil/inaktivMitarbeiter']='Achtung!<br> Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz
deaktiviert wurde.Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht. <br><br>
Sollte innerhalb von 12 Monaten nach der Deaktivierung keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch<br>
- Ihr Account, <br>- Ihre Mailbox (inkl. aller E-Mails) und<br>
- Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht.<br><br>Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten,
sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.<br>';
$this->phrasen['profil/inaktivSonstige']='Achtung!<br> Wir möchten Sie darauf aufmerksam machen, dass Ihr Benutzerdatensatz
deaktiviert wurde.Durch diese Deaktivierung wurden Sie auch aus allen Email-Verteilern gelöscht. <br><br>
Sollte innerhalb der nächsten Tagen keine neuerliche Aktivierung Ihres Benutzerdatensatzes erfolgen, dann werden automatisch auch<br>
- Ihr Account, <br>- Ihre Mailbox (inkl. aller E-Mails) und<br>
- Ihr Home-Verzeichnis (inkl. aller Dateien) gelöscht.<br><br>Falls es sich bei der Deaktivierung um einen Irrtum handelt, würden wir Sie bitten,
sich umgehend mit Ihrer Studiengangsassistenz in Verbindung zu setzen.<br>';
$this->phrasen['profil/nurJPGBilder']='Derzeit können nur Bilder im JPG Format hochgeladen werden';
$this->phrasen['profil/BilduploadInfotext']='Derzeit können nur Bilder im JPG Format mit einer Maximalgröße von 15MB hochgeladen werden!<br><br><b>Bitte beachten Sie die <a href="'.APP_ROOT.'cms/content.php?content_id=%s">Richtlinien für den Bildupload</a></b>';
$this->phrasen['profil/Bild']='Profilfoto';
$this->phrasen['profil/Bildupload']='Bildupload';
$this->phrasen['profil/fotofreigeben']='Sperre des Profilfotos aufheben';
$this->phrasen['profil/fotosperren']='Profilfoto sperren';
$this->phrasen['profil/infotextSperre']='Gesperrte Profilbilder werden nur für Zutrittskarten verwendet und scheinen nicht auf Anwesenheitslisten oder in der Personensuche auf';
$this->phrasen['profil/profilfotoGesperrt']='Profilfoto gesperrt';
$this->phrasen['profil/profilfotoUploadGesperrt']='Der Upload des Profilfotos ist nicht mehr möglich';
$this->phrasen['profil/fhausweisStatus']='FH-Ausweis Status';
$this->phrasen['profil/fhausweisWurdeBereitsAusgegeben']='Der FH Ausweis ist am %s ausgegeben worden.';
$this->phrasen['profil/ladenSieBitteEinGueltigesFotoHoch']='Laden Sie bitte ein gültiges Foto hoch';
$this->phrasen['profil/fotoWurdeNochNichtAkzeptiert']='Foto wurde noch nicht akzeptiert';
$this->phrasen['profil/fhausweisGedrucktAm']='FH-Ausweis gedruckt am';
$this->phrasen['profil/fhausweisAbholbereitAmEmpfangAb']='FH-Ausweis abholbereit am Empfang ab';
$this->phrasen['profil/fhausweisWurdeNochNichtGedruckt']='FH-Ausweis wurde noch nicht gedruckt';
$this->phrasen['profil/ihrFotoWurdeNochNichtGeprueft']='Ihr Foto wurde noch nicht geprüft';
$this->phrasen['profil/fotoAuswählen']='Klicken Sie auf das Bild um ein Foto hochzuladen';
$this->phrasen['profil/bildSpeichern']='Bild speichern';
$this->phrasen['profil/gueltigvon']='Gültig von';
$this->phrasen['profil/gueltigbis']='Gültig bis';
$this->phrasen['profil/wochenstunden']='Wochenstunden';
$this->phrasen['profil/vertragsstunden']='Vertragsstunden';
$this->phrasen['profil/zukuenftigeFunktionen']='Zukünftige Funktionen';
?>
+85 -81
View File
@@ -1,81 +1,85 @@
<?php
$this->phrasen['profil/home']='HOME';
$this->phrasen['profil/profil']='Profile';
$this->phrasen['profil/mitarbeiter']='Employee';
$this->phrasen['profil/meinCis']='My CIS';
$this->phrasen['profil/bildHochladen']='Upload picture';
$this->phrasen['profil/email']='eMail';
$this->phrasen['profil/kontaktPrivat']='Private Contacts';
$this->phrasen['profil/intern']='Intern';
$this->phrasen['profil/alias']='Alias';
$this->phrasen['profil/homepage']='Homepage';
$this->phrasen['profil/student']='Student';
$this->phrasen['profil/martrikelnummer']='matriculation number';
$this->phrasen['profil/leistungsbeurteilung']='Performance assessment';
$this->phrasen['profil/kurzzeichen']='Abbreviation';
$this->phrasen['profil/telefonTw']='Telephone';
$this->phrasen['profil/faxTw']='Fax';
$this->phrasen['profil/zeitwuensche']='Preferred teaching times';
$this->phrasen['profil/funktionen']='Functions';
$this->phrasen['profil/entlehnteBetriebsmittel']='Borrowed equipment';
$this->phrasen['profil/betriebsmittel']='Equipment';
$this->phrasen['profil/nummer']='Number';
$this->phrasen['profil/ausgegebenAm']='Issued on';
$this->phrasen['profil/sieSindMitgliedInFolgendenVerteilern']='You are member of the following mailing lists';
$this->phrasen['profil/derUserIstInFolgendenVerteilern'] = 'User %s is a member of the following mailing lists';
$this->phrasen['profil/alleStudentenVon']='All students from';
$this->phrasen['profil/kurzbeschreibungFuerOeh']='Brief description for the Austian Student Union candidacy';
$this->phrasen['profil/solltenDatenNichtStimmen']='If your data is incorrect, please contact the responsible assistant';
$this->phrasen['profil/esWurdenKeineProfileGefunden']='No profile ore multiple profiles were found for your user account';
$this->phrasen['profil/adminstration']='Administration';
$this->phrasen['profil/zustaendigeAssistenz']='Administrative Assistant';
$this->phrasen['profil/wendenSieSichAn']='Please contact the';
$this->phrasen['profil/solltenDatenNichtStimmen']='If your data is incorrect, please contact the responsible';
$this->phrasen['profil/buero']='Office';
$this->phrasen['profil/zeitsperrenVon']='Unavailabilities of';
$this->phrasen['profil/lvplanVon']='Schedule from';
$this->phrasen['profil/AccountInaktiv']='NOTICE: This account is no longer active';
$this->phrasen['profil/inaktivStudent']='NOTICE!<br> We would like to remind you that your user record has been deactivated.
You were also removed from all e-mail distribution lists when your account was deactivated.<br><br>
If your user account is not reactivated within 6 months (for students) or 3 weeks (for dropouts) of being deactivated, the following data will be automatically deleted:<br>
- Your account<br>- Your mailbox (including all e-mails) and<br>- Your home directory (including all files).<br><br>
If your account has been deactivated by mistake, please contact the administrative assistant for your degree program immediately.<br>';
$this->phrasen['profil/inaktivMitarbeiter']='NOTICE!<br> We would like to remind you that your user record has been deactivated.
You were also removed from all e-mail distribution lists when your account was deactivated.<br><br>
If your user account is not reactivated within 12 months of being deactivated, the following data will be automatically deleted:<br>
- Your account<br>- Your mailbox (including all e-mails) and<br>- Your home directory (including all files).<br><br>
If your account has been deactivated by mistake, please contact the administrative assistant for your degree program immediately.<br>';
$this->phrasen['profil/inaktivSonstige']='NOTICE!<br> We would like to remind you that your user record has been deactivated.
You were also removed from all e-mail distribution lists when your account was deactivated.<br><br>
If your user account is not reactivated within the next days of being deactivated, the following data will be automatically deleted:<br>
- Your account<br>- Your mailbox (including all e-mails) and<br>- Your home directory (including all files).<br><br>
If your account has been deactivated by mistake, please contact the administrative assistant for your degree program immediately.<br>';
$this->phrasen['profil/nurJPGBilder']='Currently it is only possible to upload JPEG images';
$this->phrasen['profil/BilduploadInfotext']='Currently it is only possible to upload JPG images with a maximum size of 15MB!<br><br><b>Please follow the <a href="'.APP_ROOT.'cms/content.php?content_id=%s">guidelines for uploading images</a></b>';
$this->phrasen['profil/Bild']='Picture';
$this->phrasen['profil/Bildupload']='Upload Picture';
$this->phrasen['profil/fotofreigeben']='Unlock your profile photo';
$this->phrasen['profil/fotosperren']='Lock your profile photo';
$this->phrasen['profil/infotextSperre']='Locked profile photos are only used for access cards, and do not appear on attendance lists or in the people search';
$this->phrasen['profil/profilfotoGesperrt']='Profile photo locked';
$this->phrasen['profil/profilfotoUploadGesperrt']='It is no longer possible to upload a profile photo';
$this->phrasen['profil/fhausweisStatus']='UAS ID card status';
$this->phrasen['profil/fhausweisWurdeBereitsAusgegeben']='UAS ID card has already been issued on %s.';
$this->phrasen['profil/ladenSieBitteEinGueltigesFotoHoch']='Please upload a valid photo';
$this->phrasen['profil/fotoWurdeNochNichtAkzeptiert']='Photo has not yet been accepted';
$this->phrasen['profil/fhausweisGedrucktAm']='UAS ID card printed on';
$this->phrasen['profil/fhausweisAbholbereitAmEmpfangAb']='UAS ID card will be ready for pick-up at the information desk on';
$this->phrasen['profil/fhausweisWurdeNochNichtGedruckt']='UAS ID card has not yet been printed';
$this->phrasen['profil/ihrFotoWurdeNochNichtGeprueft']='Your photo has not yet been approved';
$this->phrasen['profil/fotoAuswählen']='Click on the image below to upload a photo';
$this->phrasen['profil/bildSpeichern']='Save image';
$this->phrasen['profil/gueltigvon']='Valid from';
$this->phrasen['profil/gueltigbis']='Valid to';
?>
<?php
$this->phrasen['profil/home']='HOME';
$this->phrasen['profil/profil']='Profile';
$this->phrasen['profil/mitarbeiter']='Employee';
$this->phrasen['profil/meinCis']='My CIS';
$this->phrasen['profil/bildHochladen']='Upload picture';
$this->phrasen['profil/email']='eMail';
$this->phrasen['profil/kontaktPrivat']='Private Contacts';
$this->phrasen['profil/intern']='Intern';
$this->phrasen['profil/alias']='Alias';
$this->phrasen['profil/homepage']='Homepage';
$this->phrasen['profil/student']='Student';
$this->phrasen['profil/martrikelnummer']='matriculation number';
$this->phrasen['profil/leistungsbeurteilung']='Performance assessment';
$this->phrasen['profil/kurzzeichen']='Abbreviation';
$this->phrasen['profil/telefonTw']='Telephone';
$this->phrasen['profil/faxTw']='Fax';
$this->phrasen['profil/zeitwuensche']='Preferred teaching times';
$this->phrasen['profil/funktionen']='Functions';
$this->phrasen['profil/entlehnteBetriebsmittel']='Borrowed equipment';
$this->phrasen['profil/betriebsmittel']='Equipment';
$this->phrasen['profil/nummer']='Number';
$this->phrasen['profil/ausgegebenAm']='Issued on';
$this->phrasen['profil/sieSindMitgliedInFolgendenVerteilern']='You are member of the following mailing lists';
$this->phrasen['profil/derUserIstInFolgendenVerteilern'] = 'User %s is a member of the following mailing lists';
$this->phrasen['profil/alleStudentenVon']='All students from';
$this->phrasen['profil/kurzbeschreibungFuerOeh']='Brief description for the Austian Student Union candidacy';
$this->phrasen['profil/solltenDatenNichtStimmen']='If your data is incorrect, please contact the responsible assistant';
$this->phrasen['profil/esWurdenKeineProfileGefunden']='No profile ore multiple profiles were found for your user account';
$this->phrasen['profil/keinGueltigesProfil']='Not a valid profile';
$this->phrasen['profil/adminstration']='Administration';
$this->phrasen['profil/zustaendigeAssistenz']='Administrative Assistant';
$this->phrasen['profil/wendenSieSichAn']='Please contact the';
$this->phrasen['profil/solltenDatenNichtStimmen']='If your data is incorrect, please contact the responsible';
$this->phrasen['profil/buero']='Office';
$this->phrasen['profil/zeitsperrenVon']='Unavailabilities of';
$this->phrasen['profil/lvplanVon']='Schedule from';
$this->phrasen['profil/AccountInaktiv']='NOTICE: This account is no longer active';
$this->phrasen['profil/inaktivStudent']='NOTICE!<br> We would like to remind you that your user record has been deactivated.
You were also removed from all e-mail distribution lists when your account was deactivated.<br><br>
If your user account is not reactivated within 6 months (for students) or 3 weeks (for dropouts) of being deactivated, the following data will be automatically deleted:<br>
- Your account<br>- Your mailbox (including all e-mails) and<br>- Your home directory (including all files).<br><br>
If your account has been deactivated by mistake, please contact the administrative assistant for your degree program immediately.<br>';
$this->phrasen['profil/inaktivMitarbeiter']='NOTICE!<br> We would like to remind you that your user record has been deactivated.
You were also removed from all e-mail distribution lists when your account was deactivated.<br><br>
If your user account is not reactivated within 12 months of being deactivated, the following data will be automatically deleted:<br>
- Your account<br>- Your mailbox (including all e-mails) and<br>- Your home directory (including all files).<br><br>
If your account has been deactivated by mistake, please contact the administrative assistant for your degree program immediately.<br>';
$this->phrasen['profil/inaktivSonstige']='NOTICE!<br> We would like to remind you that your user record has been deactivated.
You were also removed from all e-mail distribution lists when your account was deactivated.<br><br>
If your user account is not reactivated within the next days of being deactivated, the following data will be automatically deleted:<br>
- Your account<br>- Your mailbox (including all e-mails) and<br>- Your home directory (including all files).<br><br>
If your account has been deactivated by mistake, please contact the administrative assistant for your degree program immediately.<br>';
$this->phrasen['profil/nurJPGBilder']='Currently it is only possible to upload JPEG images';
$this->phrasen['profil/BilduploadInfotext']='Currently it is only possible to upload JPG images with a maximum size of 15MB!<br><br><b>Please follow the <a href="'.APP_ROOT.'cms/content.php?content_id=%s">guidelines for uploading images</a></b>';
$this->phrasen['profil/Bild']='Picture';
$this->phrasen['profil/Bildupload']='Upload Picture';
$this->phrasen['profil/fotofreigeben']='Unlock your profile photo';
$this->phrasen['profil/fotosperren']='Lock your profile photo';
$this->phrasen['profil/infotextSperre']='Locked profile photos are only used for access cards, and do not appear on attendance lists or in the people search';
$this->phrasen['profil/profilfotoGesperrt']='Profile photo locked';
$this->phrasen['profil/profilfotoUploadGesperrt']='It is no longer possible to upload a profile photo';
$this->phrasen['profil/fhausweisStatus']='UAS ID card status';
$this->phrasen['profil/fhausweisWurdeBereitsAusgegeben']='UAS ID card has already been issued on %s.';
$this->phrasen['profil/ladenSieBitteEinGueltigesFotoHoch']='Please upload a valid photo';
$this->phrasen['profil/fotoWurdeNochNichtAkzeptiert']='Photo has not yet been accepted';
$this->phrasen['profil/fhausweisGedrucktAm']='UAS ID card printed on';
$this->phrasen['profil/fhausweisAbholbereitAmEmpfangAb']='UAS ID card will be ready for pick-up at the information desk on';
$this->phrasen['profil/fhausweisWurdeNochNichtGedruckt']='UAS ID card has not yet been printed';
$this->phrasen['profil/ihrFotoWurdeNochNichtGeprueft']='Your photo has not yet been approved';
$this->phrasen['profil/fotoAuswählen']='Click on the image below to upload a photo';
$this->phrasen['profil/bildSpeichern']='Save image';
$this->phrasen['profil/gueltigvon']='Valid from';
$this->phrasen['profil/gueltigbis']='Valid to';
$this->phrasen['profil/wochenstunden']='week hours';
$this->phrasen['profil/vertragsstunden']='contract hours';
$this->phrasen['profil/zukuenftigeFunktionen']='Future functions';
?>
+65 -62
View File
@@ -1,62 +1,65 @@
<?php
$this->phrasen['profil/AccountInaktiv']='Attenzione: questo account non è più attivo';
$this->phrasen['profil/adminstration']='Gestione notizie';
$this->phrasen['profil/alias']='alias';
$this->phrasen['profil/alleStudentenVon']='Tutti gli studenti di';
$this->phrasen['profil/ausgegebenAm']='';
$this->phrasen['profil/betriebsmittel']='';
$this->phrasen['profil/Bild']='';
$this->phrasen['profil/bildHochladen']='';
$this->phrasen['profil/bildSpeichern']='';
$this->phrasen['profil/Bildupload']='';
$this->phrasen['profil/BilduploadInfotext']='';
$this->phrasen['profil/buero']='';
$this->phrasen['profil/derUserIstInFolgendenVerteilern ']='';
$this->phrasen['profil/email']='Email';
$this->phrasen['profil/entlehnteBetriebsmittel']='';
$this->phrasen['profil/esWurdenKeineProfileGefunden']='Nessun profilo o più profili per l\'utente richiesto';
$this->phrasen['profil/faxTw']='fax';
$this->phrasen['profil/fhausweisAbholbereitAmEmpfangAb']='';
$this->phrasen['profil/fhausweisGedrucktAm']='';
$this->phrasen['profil/fhausweisStatus']='';
$this->phrasen['profil/fhausweisWurdeBereitsAusgegeben']='Tesserino consegnato il %s.';
$this->phrasen['profil/fhausweisWurdeNochNichtGedruckt']='';
$this->phrasen['profil/fotoAuswählen']='';
$this->phrasen['profil/fotofreigeben']='';
$this->phrasen['profil/fotosperren']='';
$this->phrasen['profil/fotoWurdeNochNichtAkzeptiert']='';
$this->phrasen['profil/funktionen']='';
$this->phrasen['profil/home']='';
$this->phrasen['profil/homepage']='';
$this->phrasen['profil/ihrFotoWurdeNochNichtGeprueft']='';
$this->phrasen['profil/inaktivMitarbeiter']='';
$this->phrasen['profil/inaktivSonstige']='';
$this->phrasen['profil/inaktivStudent']='';
$this->phrasen['profil/infotextSperre']='';
$this->phrasen['profil/intern']='E-mail di Ateneo';
$this->phrasen['profil/kontaktPrivat']='Contatti Personali';
$this->phrasen['profil/kurzbeschreibungFuerOeh']='';
$this->phrasen['profil/kurzzeichen']='ID breve';
$this->phrasen['profil/ladenSieBitteEinGueltigesFotoHoch']='';
$this->phrasen['profil/leistungsbeurteilung']='';
$this->phrasen['profil/lvplanVon']='';
$this->phrasen['profil/martrikelnummer']='Codice Persona';
$this->phrasen['profil/meinCis']='';
$this->phrasen['profil/mitarbeiter']='';
$this->phrasen['profil/mobil']='Cellulare';
$this->phrasen['profil/nummer']='';
$this->phrasen['profil/nurJPGBilder']='';
$this->phrasen['profil/profil']='';
$this->phrasen['profil/profilfotoGesperrt']='';
$this->phrasen['profil/profilfotoUploadGesperrt']='';
$this->phrasen['profil/sieSindMitgliedInFolgendenVerteilern']='';
$this->phrasen['profil/solltenDatenNichtStimmen']='La preghiamo di rivolgersi alla segreteria nel caso i dati non risultino essere corretti.';
$this->phrasen['profil/student']='Studente';
$this->phrasen['profil/telefon']='';
$this->phrasen['profil/telefonTw']='';
$this->phrasen['profil/wendenSieSichAn']='';
$this->phrasen['profil/zeitsperrenVon']='';
$this->phrasen['profil/zeitwuensche']='';
$this->phrasen['profil/zustaendigeAssistenz']='';
?>
<?php
$this->phrasen['profil/AccountInaktiv']='Attenzione: questo account non è più attivo';
$this->phrasen['profil/adminstration']='Gestione notizie';
$this->phrasen['profil/alias']='alias';
$this->phrasen['profil/alleStudentenVon']='Tutti gli studenti di';
$this->phrasen['profil/ausgegebenAm']='';
$this->phrasen['profil/betriebsmittel']='';
$this->phrasen['profil/Bild']='';
$this->phrasen['profil/bildHochladen']='';
$this->phrasen['profil/bildSpeichern']='';
$this->phrasen['profil/Bildupload']='';
$this->phrasen['profil/BilduploadInfotext']='';
$this->phrasen['profil/buero']='';
$this->phrasen['profil/derUserIstInFolgendenVerteilern ']='';
$this->phrasen['profil/email']='Email';
$this->phrasen['profil/entlehnteBetriebsmittel']='';
$this->phrasen['profil/esWurdenKeineProfileGefunden']='Nessun profilo o più profili per l\'utente richiesto';
$this->phrasen['profil/keinGueltigesProfil']='';
$this->phrasen['profil/faxTw']='fax';
$this->phrasen['profil/fhausweisAbholbereitAmEmpfangAb']='';
$this->phrasen['profil/fhausweisGedrucktAm']='';
$this->phrasen['profil/fhausweisStatus']='';
$this->phrasen['profil/fhausweisWurdeBereitsAusgegeben']='Tesserino consegnato il %s.';
$this->phrasen['profil/fhausweisWurdeNochNichtGedruckt']='';
$this->phrasen['profil/fotoAuswählen']='';
$this->phrasen['profil/fotofreigeben']='';
$this->phrasen['profil/fotosperren']='';
$this->phrasen['profil/fotoWurdeNochNichtAkzeptiert']='';
$this->phrasen['profil/funktionen']='';
$this->phrasen['profil/home']='';
$this->phrasen['profil/homepage']='';
$this->phrasen['profil/ihrFotoWurdeNochNichtGeprueft']='';
$this->phrasen['profil/inaktivMitarbeiter']='';
$this->phrasen['profil/inaktivSonstige']='';
$this->phrasen['profil/inaktivStudent']='';
$this->phrasen['profil/infotextSperre']='';
$this->phrasen['profil/intern']='E-mail di Ateneo';
$this->phrasen['profil/kontaktPrivat']='Contatti Personali';
$this->phrasen['profil/kurzbeschreibungFuerOeh']='';
$this->phrasen['profil/kurzzeichen']='ID breve';
$this->phrasen['profil/ladenSieBitteEinGueltigesFotoHoch']='';
$this->phrasen['profil/leistungsbeurteilung']='';
$this->phrasen['profil/lvplanVon']='';
$this->phrasen['profil/martrikelnummer']='Codice Persona';
$this->phrasen['profil/meinCis']='';
$this->phrasen['profil/mitarbeiter']='';
$this->phrasen['profil/mobil']='Cellulare';
$this->phrasen['profil/nummer']='';
$this->phrasen['profil/nurJPGBilder']='';
$this->phrasen['profil/profil']='';
$this->phrasen['profil/profilfotoGesperrt']='';
$this->phrasen['profil/profilfotoUploadGesperrt']='';
$this->phrasen['profil/sieSindMitgliedInFolgendenVerteilern']='';
$this->phrasen['profil/solltenDatenNichtStimmen']='La preghiamo di rivolgersi alla segreteria nel caso i dati non risultino essere corretti.';
$this->phrasen['profil/student']='Studente';
$this->phrasen['profil/telefon']='';
$this->phrasen['profil/telefonTw']='';
$this->phrasen['profil/wendenSieSichAn']='';
$this->phrasen['profil/zeitsperrenVon']='';
$this->phrasen['profil/zeitwuensche']='';
$this->phrasen['profil/zustaendigeAssistenz']='';
$this->phrasen['profil/wochenstunden']='';
$this->phrasen['profil/vertragsstunden']='';
$this->phrasen['profil/zukuenftigeFunktionen']='';
?>
+14
View File
@@ -2,22 +2,36 @@
margin: 10px 0 5px;
}
h1 {
margin-top: 0px;
font-size: 2rem;
}
h2 {
margin-top: 0px;
font-size: 1.8rem;
}
h3 {
margin-top: 0px;
font-size: 1.6rem;
}
h4 {
margin-top: 0px;
font-size: 1.4rem;
}
h5 {
margin-top: 0px;
font-size: 1.2rem;
}
h6 {
margin-top: 0px;
font-size: 1rem;
}
body
{
background-color: white;
color: black;
font-family: Arial, Helvetica, sans-serif;
font-size: 13px;
line-height: 1;
}
+28 -1
View File
@@ -65,4 +65,31 @@
#scrollToTop:hover{
background-color: lightgrey;
}
}
#postponedate{
height: 25px;
width: 99px
}
#postponedatelabel{
font-weight: normal;
}
@media screen and (max-width: 1510px)
{
#postponing{
text-align: center;
}
#postponedatelabel{
display: block;
margin-top: 20px;
}
}
@media screen and (max-width: 768px)
{
#postponedate {
display: inline-block
}
}
+11 -10
View File
@@ -84,7 +84,7 @@ var FHC_FilterWidget = {
// Public methods
/**
* To display the FilterWidget using the loaded data prenset in the session
* To display the FilterWidget using the loaded data present in the session
*/
display: function() {
@@ -392,7 +392,6 @@ var FHC_FilterWidget = {
},
{
successCallback: function(data, textStatus, jqXHR) {
FHC_FilterWidget._cleanTablesorterLocalStorage();
FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR);
}
}
@@ -453,7 +452,6 @@ var FHC_FilterWidget = {
},
{
successCallback: function(data, textStatus, jqXHR) {
FHC_FilterWidget._cleanTablesorterLocalStorage();
FHC_FilterWidget._failOrRefresh(data, textStatus, jqXHR);
}
}
@@ -837,6 +835,14 @@ var FHC_FilterWidget = {
*/
_renderDatasetTablesorter: function(data) {
//clear tablesorter filter storage
var keepTsFilter = FHC_AjaxClient.getUrlParameter("keepTsFilter");
if (typeof keepTsFilter === "undefined" || keepTsFilter !== "true")
{
FHC_FilterWidget._clearTablesorterLocalStorage();
}
if (data.hasOwnProperty("checkboxes") && data.checkboxes!=null && data.checkboxes.trim() != "")
{
$("#filterTableDataset > thead > tr").append("<th data-filter='false' title='Select'>Select</th>");
@@ -935,10 +941,6 @@ var FHC_FilterWidget = {
}
});
// Reset filter storage if there is a filter id in url TODO: find better solution
var filter_id = FHC_AjaxClient.getUrlParameter("filter_id");
if (typeof filter_id !== "undefined") FHC_FilterWidget._cleanTablesorterLocalStorage();
$.tablesorter.updateAll($("#filterTableDataset")[0].config, true, null);
}
},
@@ -1057,9 +1059,8 @@ var FHC_FilterWidget = {
/**
* Tablesorter filter local storage clean
*/
_cleanTablesorterLocalStorage: function() {
$("#filterTableDataset").trigger("filterResetSaved");
_clearTablesorterLocalStorage: function() {
localStorage.removeItem("tablesorter-filters");
},
/**
+224 -129
View File
@@ -10,111 +10,113 @@ const STGFREIGABE_MESSAGE_VORLAGE = "InfocenterSTGfreigegeben";
//Statusgründe for which no Studiengang Freigabe Message should be sent
const FIT_PROGRAMM_STUDIENGAENGE = [10021, 10027];
const PARKEDNAME = 'parked';
const ONHOLDNAME = 'onhold';
/**
* javascript file for infocenterDetails page
*/
$(document).ready(function ()
{
//initialise table sorter
Tablesort.addTablesorter("doctable", [[2, 1], [1, 0]], ["zebra"]);
Tablesort.addTablesorter("nachgdoctable", [[2, 0], [1, 1]], ["zebra"]);
//initialise table sorter
Tablesort.addTablesorter("doctable", [[2, 1], [1, 0]], ["zebra"]);
Tablesort.addTablesorter("nachgdoctable", [[2, 0], [1, 1]], ["zebra"]);
InfocenterDetails._formatMessageTable();
InfocenterDetails._formatNotizTable();
InfocenterDetails._formatLogTable();
InfocenterDetails._formatMessageTable();
InfocenterDetails._formatNotizTable();
InfocenterDetails._formatLogTable();
var personid = $("#hiddenpersonid").val();
//add submit event to message send link
$("#sendmsglink").click(function ()
{
$("#sendmsgform").submit();
});
//add click events to "formal geprüft" checkboxes
$(".prchbox").click(function ()
{
var boxid = this.id;
var akteid = boxid.substr(boxid.indexOf("_") + 1);
var checked = this.checked;
InfocenterDetails.saveFormalGeprueft(personid, akteid, checked)
});
//add click events to zgv Prüfung section
InfocenterDetails._addZgvPruefungEvents(personid);
MessageList.initMessageList();
//save notiz
$("#notizform").on("submit", function (e)
{
e.preventDefault();
var notizid = $("#notizform :input[name='hiddenNotizId']").val();
var formdata = $(this).serializeArray();
var data = {};
data.person_id = personid;
for (var i = 0; i < formdata.length; i++)
{
data[formdata[i].name] = formdata[i].value;
}
$("#notizmsg").empty();
if (notizid !== '')
{
InfocenterDetails.updateNotiz(notizid, data);
}
else
{
InfocenterDetails.saveNotiz(personid, data);
}
}
);
//update notiz - autofill notizform
$(document).on("click", "#notiztable tbody tr", function ()
{
$("#notizmsg").empty();
var notizid = $(this).find("td.hiddennotizid").html();
InfocenterDetails.getNotiz(notizid);
}
);
//update notiz - abbrechen-button: reset styles
$("#notizform :input[type='reset']").click(function ()
{
InfocenterDetails._resetNotizFields();
}
);
//check if person is parked and display it
InfocenterDetails.getParkedDate(personid);
if ($(document).scrollTop() > 20)
$("#scrollToTop").show();
//scroll to top button
$(window).scroll(function()
{
if ($(document).scrollTop() > 20)
$("#scrollToTop").show();
else
$("#scrollToTop").hide();
}
);
$("#scrollToTop").click(function()
{
$('html,body').animate({scrollTop:0},250,'linear');
}
)
var personid = $("#hiddenpersonid").val();
//add submit event to message send link
$("#sendmsglink").click(function ()
{
$("#sendmsgform").submit();
});
//add click events to "formal geprüft" checkboxes
$(".prchbox").click(function ()
{
var boxid = this.id;
var akteid = boxid.substr(boxid.indexOf("_") + 1);
var checked = this.checked;
InfocenterDetails.saveFormalGeprueft(personid, akteid, checked)
});
//add click events to zgv Prüfung section
InfocenterDetails._addZgvPruefungEvents(personid);
MessageList.initMessageList();
//save notiz
$("#notizform").on("submit", function (e)
{
e.preventDefault();
var notizid = $("#notizform :input[name='hiddenNotizId']").val();
var formdata = $(this).serializeArray();
var data = {};
data.person_id = personid;
for (var i = 0; i < formdata.length; i++)
{
data[formdata[i].name] = formdata[i].value;
}
$("#notizmsg").empty();
if (notizid !== '')
{
InfocenterDetails.updateNotiz(notizid, data);
}
else
{
InfocenterDetails.saveNotiz(personid, data);
}
}
);
//update notiz - autofill notizform
$(document).on("click", "#notiztable tbody tr", function ()
{
$("#notizmsg").empty();
var notizid = $(this).find("td.hiddennotizid").html();
InfocenterDetails.getNotiz(notizid);
}
);
//update notiz - abbrechen-button: reset styles
$("#notizform :input[type='reset']").click(function ()
{
InfocenterDetails._resetNotizFields();
}
);
//check if person is postponed (parked, on hold...) and display it
InfocenterDetails.getPostponeDate(personid);
if ($(document).scrollTop() > 20)
$("#scrollToTop").show();
//scroll to top button
$(window).scroll(function()
{
if ($(document).scrollTop() > 20)
$("#scrollToTop").show();
else
$("#scrollToTop").hide();
}
);
$("#scrollToTop").click(function()
{
$('html,body').animate({scrollTop:0},250,'linear');
}
)
});
var InfocenterDetails = {
openZgvInfoForPrestudent: function(prestudent_id)
@@ -397,7 +399,7 @@ var InfocenterDetails = {
{
var engdate = $.datepicker.parseDate("yy-mm-dd", FHC_AjaxClient.getData(data)[0]);
var gerdate = $.datepicker.formatDate("dd.mm.yy", engdate);
$("#parkdate").val(gerdate);
$("#postponedate").val(gerdate);
}
},
errorCallback: function()
@@ -408,19 +410,19 @@ var InfocenterDetails = {
}
);
},
getParkedDate: function(personid)
getPostponeDate: function(personid)
{
FHC_AjaxClient.ajaxCallGet(
CALLED_PATH + "/getParkedDate/"+encodeURIComponent(personid),
CALLED_PATH + "/getPostponeDate/"+encodeURIComponent(personid),
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var parkedDate = FHC_AjaxClient.getData(data)[0];
InfocenterDetails._refreshParking(parkedDate);
var postponeobj = FHC_AjaxClient.getData(data);
InfocenterDetails._refreshPostpone(postponeobj);
InfocenterDetails._refreshLog();
if (parkedDate === null)
if (postponeobj === null || postponeobj.type === null)
InfocenterDetails.getStudienjahrEnd();
}
},
@@ -435,7 +437,7 @@ var InfocenterDetails = {
parkPerson: function(personid, date)
{
var parkError = function(){
$("#parkmsg").text(" Fehler beim Parken!");
$("#postponemsg").text(" Fehler beim Parken!");
};
FHC_AjaxClient.ajaxCallPost(
@@ -447,7 +449,7 @@ var InfocenterDetails = {
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
InfocenterDetails.getParkedDate(personid);
InfocenterDetails.getPostponeDate(personid);
else
{
parkError();
@@ -469,13 +471,62 @@ var InfocenterDetails = {
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
InfocenterDetails.getParkedDate(personid);
InfocenterDetails.getPostponeDate(personid);
}
else
$("#unparkmsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumAusparken'));
$("#unpostponemsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumAusparken'));
},
errorCallback: function(){
$("#unparkmsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimAusparken'));
$("#unpostponemsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimAusparken'));
},
veilTimeout: 0
}
);
},
setPersonOnHold: function(personid, date)
{
var onHoldError = function(){
$("#postponemsg").text(" Fehler beim Setzen auf On Hold!");
};
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/setOnHold',
{
"person_id": personid,
"onholddate": date
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
InfocenterDetails.getPostponeDate(personid);
else
{
onHoldError();
}
},
errorCallback: onHoldError,
veilTimeout: 0
}
);
},
removePersonOnHold: function(personid)
{
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/removeOnHold',
{
"person_id": personid
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
InfocenterDetails.getPostponeDate(personid);
}
else
$("#unpostponemsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumEntfernen'));
},
errorCallback: function(){
$("#unpostponemsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimEntfernen'));
},
veilTimeout: 0
}
@@ -864,50 +915,94 @@ var InfocenterDetails = {
}
);
},
_refreshParking: function(date)
_refreshPostpone: function(postponeobj)
{
if (date === null)
var personid = $("#hiddenpersonid").val();
if (postponeobj === null || postponeobj.date === null || postponeobj.type === null)
{
$("#parking").html(
//show both park and on hold buttons if not parked and not on hold
$("#postponing").html(
'<div class="form-group form-inline">'+
'<button class="btn btn-default" id="parklink" type="button""><i class="fa fa-clock-o"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'bewerberParken') + '</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
FHC_PhrasesLib.t('global', 'bis') + '&nbsp;&nbsp;'+
'<input id="parkdate" type="text" class="form-control" placeholder="Parkdatum" style="height: 25px; width: 99px">&nbsp;'+
'<span class="text-danger" id="parkmsg"></span>'+
'<button class="btn btn-default" id="onholdlink" type="button""><i class="fa fa-anchor"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'bewerberOnHold') + '</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<label id="postponedatelabel">'+FHC_PhrasesLib.t('global', 'bis') + '&nbsp;&nbsp;'+
'<input id="postponedate" type="text" class="form-control" placeholder="Parkdatum">&nbsp;'+
'<i class="fa fa-info-circle" data-toggle="tooltip" title="'+FHC_PhrasesLib.t('infocenter', 'parkenZurueckstellenInfo')+'"></i></label>'+
'<span class="text-danger" id="postponemsg"></span>'+
'</div>');
$("#parkdate").datepicker({
$("#postponedate").datepicker({
"dateFormat": "dd.mm.yy",
"minDate": 0
"minDate": 1
});
$("#parklink").click(
function ()
{
var personid = $("#hiddenpersonid").val();
var date = $("#parkdate").val();
var date = $("#postponedate").val();
InfocenterDetails.parkPerson(personid, date);
}
);
$("#onholdlink").click(
function ()
{
var date = $("#postponedate").val();
InfocenterDetails.setPersonOnHold(personid, date);
}
);
}
else
{
var parkdate = $.datepicker.parseDate("yy-mm-dd", date);
var gerparkdate = $.datepicker.formatDate("dd.mm.yy", parkdate);
$("#parking").html(
FHC_PhrasesLib.t('infocenter', 'bewerberGeparktBis')+'&nbsp;&nbsp;'+gerparkdate+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unparklink"><i class="fa fa-sign-out"></i>&nbsp;'+FHC_PhrasesLib.t('infocenter', 'bewerberAusparken')+'</button>&nbsp;'+
'<span id="unparkmsg"></span>'
//info if parked/on hold and possibility to undo parking/on hold
var postponedate = $.datepicker.parseDate("yy-mm-dd", postponeobj.date);
var gerpostponedate = $.datepicker.formatDate("dd.mm.yy", postponedate);
//var postponehtml = "";
var callbackforundo = null;
var removePhrase = "";
var postponedPhrase = "";
var postponedtext = "";
if (postponeobj.type === PARKEDNAME)
{
removePhrase = 'bewerberAusparken';
postponedtext = FHC_PhrasesLib.t('infocenter', 'bewerberGeparktBis')+'&nbsp;&nbsp;'+gerpostponedate;
callbackforundo = function ()
{
InfocenterDetails.unparkPerson(personid);
}
}
else if (postponeobj.type === ONHOLDNAME)
{
removePhrase = 'bewerberOnHoldEntfernen';
postponedtext = FHC_PhrasesLib.t('infocenter', 'bewerberOnHoldBis')+'&nbsp;&nbsp;'+gerpostponedate;
var currdate = new Date();
if (currdate > postponedate)
postponedtext = "<span class='alert-danger' data-toggle='tooltip' title='"+FHC_PhrasesLib.t('infocenter', 'rueckstelldatumUeberschritten')+"'>"+postponedtext+"</span>";
callbackforundo = function ()
{
InfocenterDetails.removePersonOnHold(personid);
}
}
var postponehtml = postponedtext+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unpostponelink"><i class="fa fa-sign-out"></i>&nbsp;'+FHC_PhrasesLib.t('infocenter', removePhrase)+'</button>&nbsp;'+
'<span id="unpostponemsg"></span>';
$("#postponing").html(
postponehtml
);
$("#unparklink").click(
function ()
{
var personid = $("#hiddenpersonid").val();
InfocenterDetails.unparkPerson(personid, date);
}
$("#unpostponelink").click(
callbackforundo
);
}
},
@@ -50,7 +50,8 @@ var InfocenterPersonDataset = {
'<i class="fa fa-envelope"></i>&nbsp;Nachricht senden</a>';
var legendHtml = '<i class="fa fa-circle text-danger"></i> Gesperrt&nbsp;&nbsp;&nbsp;&nbsp;' +
'<i class="fa fa-circle text-info"></i> Geparkt';
'<i class="fa fa-circle text-info"></i> Geparkt&nbsp;&nbsp;&nbsp;&nbsp;' +
'<i class="fa fa-circle text-success"></i> Zurückgestellt';
// userdefined Semestervariable shown independently of personcount,
// it is possible to change the semester
@@ -148,6 +149,28 @@ var InfocenterPersonDataset = {
trs.find("input[name=PersonId\\[\\]]").prop("checked", false);
}
);
//make sure tablesorter local storage for homepage url with and without "/index" shares same values
$("#filterTableDataset").bind('filterEnd', function()
{
if (FHC_JS_DATA_STORAGE_OBJECT.called_method === 'index')
{
var pathname = window.location.pathname;
var storageobj = localStorage.getItem("tablesorter-filters");
var parsed = JSON.parse(storageobj);
var regex = new RegExp(/\/index(?!\.ci\.php)/);
if (regex.test(pathname))
{
parsed[pathname.replace(regex, "")] = parsed[pathname];
}
else
{
parsed[pathname + "/index"] = parsed[pathname];
}
storageobj = JSON.stringify(parsed);
localStorage.setItem("tablesorter-filters", storageobj);
}
});
},
/**
+144 -3
View File
@@ -3451,9 +3451,150 @@ $phrases = array(
)
)
),
//
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'bewerberOnHold',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'BewerberIn zurückstellen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Put applicant on hold',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'bewerberOnHoldEntfernen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Zurückstellung entfernen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Remove on hold state',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'bewerberOnHoldBis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'BewerberIn zurückgestellt bis',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Applicant on hold until',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'nichtsZumEntfernen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nichts zum Entfernen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Nothing to remove',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'fehlerBeimEntfernen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Fehler beim Entfernen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Error when removing',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'rueckstelldatumUeberschritten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Zurückstelldatum überschritten!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Exceeded date for on hold!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'parkenZurueckstellenInfo',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Geparkte und zurückgestellte BewerberInnen werden von der Bearbeitung temporär ausgenommen.
Geparkte BewerberInnen werden zum angegebenen Datum automatisch entparkt, während zurückgestellte BewerberInnen nur manuell durch Drücken des Buttons den Zurückgestellt-Status verlieren.
Bei einer Zurückstellung dient das Datum nur der Erinnerung.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Parked applicants and applicants on hold are temporarily excluded from the infocenter workflow.
Parked applicants are unparked automatically, whereas applicants on hold loose the status only when clicking the button manually.
When on hold, the date is only a reminder.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'password',
+43 -1
View File
@@ -41,6 +41,7 @@ require_once ('../../include/fotostatus.class.php');
require_once ('../../include/kontakt.class.php');
require_once ('../../include/dokument.class.php');
require_once ('../../include/reihungstest.class.php');
require_once ('../../include/pruefling.class.php');
if (! $db = new basis_db())
@@ -560,7 +561,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p
*/
$prestudenten = new prestudent();
$prestudenten->getPrestudenten($personToKeep);
$statusArrayWichtigeWichtige = array(); // Array mit allen PreStudentStatus die NICHT Interessent oder Abgewiesener sind
$statusArrayWichtige = array(); // Array mit allen PreStudentStatus die NICHT Interessent oder Abgewiesener sind
foreach ($prestudenten->result AS $key => $value)
{
@@ -673,6 +674,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p
$studiengang_kz = '';
$anmerkung = '';
$prestudentLoeschArray = array();
$prueflingTransferArray = array();
$warningList = array();
$i = 0;
foreach ($prestudentenArray AS $key => $value)
@@ -715,6 +717,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p
// Wenn kein Status außer Interessent und Abgewiesener mehr vorhanden ist, löschen
if (!isset($statusArrayWichtige[$value['prestudent_id']]))
{
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
unset($prestudentenArray[$key]);
$prestudentLoeschArray[] = $value['prestudent_id'];
}
@@ -732,6 +735,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p
// Wenn kein Status außer Interessent und Abgewiesener mehr vorhanden ist, löschen
if (!isset($statusArrayWichtige[$value['prestudent_id']]))
{
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
unset($prestudentenArray[$key]);
$prestudentLoeschArray[] = $value['prestudent_id'];
}
@@ -748,6 +752,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p
$prestudentenArray[$previousKey]['zgvort'] = $zgvort = $value['zgvort'];
$prestudentenArray[$previousKey]['zgvdatum'] = $zgvdatum = $value['zgvdatum'];
$prestudentenArray[$previousKey]['zgvnation'] = $zgvnation = $value['zgvnation'];
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
unset($prestudentenArray[$key]);
$prestudentLoeschArray[] = $value['prestudent_id'];
continue;
@@ -761,6 +766,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p
$warningList['zgvUnklar'][$prestudentId][$i]['zgvort'] = $value['zgvort'];
$warningList['zgvUnklar'][$prestudentId][$i]['zgvdatum'] = $value['zgvdatum'];
$warningList['zgvUnklar'][$prestudentId][$i]['zgvnation'] = $value['zgvnation'];
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
unset($prestudentenArray[$key]);
$prestudentLoeschArray[] = $value['prestudent_id'];
$i++;
@@ -769,6 +775,7 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p
}
}
}
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
unset($prestudentenArray[$key]);
$prestudentLoeschArray[] = $value['prestudent_id'];
continue;
@@ -834,6 +841,19 @@ if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $p
$msg_warning[] = $messageOutput;
//Wenn Prüfling auf zu löschenden Prestudenten zeigt und ggf auf bleibenden umhängen.
foreach ($prueflingTransferArray as $pruefling_id => $prestudent_id)
{
$transferqry = "UPDATE testtool.tbl_pruefling SET prestudent_id=" . $db->db_add_param($prestudent_id, FHC_INTEGER) . " WHERE pruefling_id=" . $db->db_add_param($pruefling_id, FHC_INTEGER) . ";";
if (!$db->db_query($transferqry))
{
$msg_error[] = 'Fehler beim Aktualisieren des Prüflings '.$pruefling_id;
}
else
$msg_warning[] = 'Prüfling '.$pruefling_id.' auf prestudent '.$prestudent_id.' aktualisiert';
}
// Prestudenten in $prestudentLoeschArray löschen
foreach ($prestudentLoeschArray AS $key => $value)
{
@@ -884,6 +904,28 @@ if ((isset($personToDelete) && ! isset($personToKeep)) || (! isset($personToDele
{
$msg_info[] = "Es muß je ein Radio-Button pro Tabelle angeklickt werden";
}
/**
* Holt sich Prüflinge zu einem zu löschenden Prestudenten,
* speichert auf welchen Prestudenten die Prüflinge "umgehängt" werden sollen.
* @param $prestudentIdToDelete prestudent_id des zu löschenden Prestudenten
* @param $prestudentIdToKeep prestudent_id des behaltenen Prestundenten
* @param $prueflingTransferArray zum Speichern, form [pruefling_id] => neue_prestudent_id
*/
function setPrueflingTransfer($prestudentIdToDelete, $prestudentIdToKeep, &$prueflingTransferArray)
{
$pruefling = new pruefling();
if (is_numeric($prestudentIdToDelete) && is_numeric($prestudentIdToKeep) &&
$pruefling->getPrueflinge($prestudentIdToDelete))
{
foreach ($pruefling->result as $pr)
{
$prueflingTransferArray[$pr->pruefling_id] = (int)$prestudentIdToKeep;
}
}
}
function resize($base64, $width, $height) // 828 x 1104 -> 240 x 320
{
ob_start();