mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 07:00:29 +01:00
736 lines
18 KiB
PHP
736 lines
18 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
||
|
*
|
||
|
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
||
|
*
|
||
|
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
||
|
*
|
||
|
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
||
|
* to obtain the text of the corresponding license version.
|
||
|
*
|
||
|
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
||
|
*/
|
||
|
?>
|
||
|
<?php
|
||
|
|
||
|
class User
|
||
|
{
|
||
|
/** @var array */
|
||
|
var $cache;
|
||
|
|
||
|
/**
|
||
|
* User constructor.
|
||
|
*
|
||
|
* @param ApplicationCore $app
|
||
|
*/
|
||
|
public function __construct($app)
|
||
|
{
|
||
|
$this->app = $app;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getUserProjects()
|
||
|
{
|
||
|
return $this->getUserProjectsByParameter($this->GetAdresse(), $this->GetType());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getPublicProjects()
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]['public_projects'])) {
|
||
|
return $this->cache[$cacheKey]['public_projects'];
|
||
|
}
|
||
|
$this->loadProjectsInCacheProperty();
|
||
|
|
||
|
return $this->cache[$cacheKey]['public_projects'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getAllProjects()
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]['all_projects'])) {
|
||
|
return $this->cache[$cacheKey]['all_projects'];
|
||
|
}
|
||
|
$this->loadProjectsInCacheProperty();
|
||
|
|
||
|
return $this->cache[$cacheKey]['all_projects'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function createCache()
|
||
|
{
|
||
|
$allProjects = $this->getAllProjects();
|
||
|
$file = $this->app->getTmpFolder().'cache_useronline';
|
||
|
$arr = $this->app->DB->SelectArr(
|
||
|
"SELECT uo.user_id, uo.sessionid, u.type, u.adresse
|
||
|
FROM `useronline` AS `uo`
|
||
|
INNER JOIN `user` AS `u` ON uo.user_id = u.id AND u.activ = 1
|
||
|
WHERE uo.login = 1"
|
||
|
);
|
||
|
$ret = [];
|
||
|
if(is_file($file)) {
|
||
|
$ret = file_get_contents($file);
|
||
|
if(empty(!$ret)) {
|
||
|
$ret = json_decode($ret, true);
|
||
|
}
|
||
|
if(empty($ret)) {
|
||
|
$ret = [];
|
||
|
}
|
||
|
}
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
$ret[$cacheKey] = [];
|
||
|
if(!empty($arr)) {
|
||
|
foreach($arr as $row) {
|
||
|
if($row['type'] === 'admin') {
|
||
|
$projects = $allProjects;
|
||
|
} else {
|
||
|
$projects = $this->getUserProjectsByParameter($row['adresse'], $row['type']);
|
||
|
}
|
||
|
$sessionId = $row['sessionid'];
|
||
|
$sha1SessionId = sha1($sessionId);
|
||
|
$ret[$cacheKey][$sha1SessionId] = ['type'=>$row['type'],'project'=>$projects];
|
||
|
}
|
||
|
}
|
||
|
file_put_contents($file, json_encode($ret));
|
||
|
|
||
|
return $ret[$cacheKey];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param bool $createIfEmpty
|
||
|
*
|
||
|
* @return array|null
|
||
|
*/
|
||
|
public function getUserByCache($createIfEmpty = true)
|
||
|
{
|
||
|
$file = $this->app->getTmpFolder().'cache_useronline';
|
||
|
if(isset($_COOKIE['CH42SESSION']) && $_COOKIE['CH42SESSION']!='') {
|
||
|
$tmp = $_COOKIE['CH42SESSION'];
|
||
|
} else {
|
||
|
$tmp = session_id();
|
||
|
}
|
||
|
$sha1Tmp = sha1($tmp);
|
||
|
$content = '';
|
||
|
if(is_file($file)){
|
||
|
$content = file_get_contents($file);
|
||
|
}
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($content)) {
|
||
|
$content = json_decode($content, true);
|
||
|
if(empty($content[$cacheKey])) {
|
||
|
$content[$cacheKey] = $this->createCache();
|
||
|
}
|
||
|
$content = $content[$cacheKey];
|
||
|
if(!empty($content[$sha1Tmp])) {
|
||
|
return $content[$sha1Tmp];
|
||
|
}
|
||
|
} else {
|
||
|
if(!$createIfEmpty) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
if(!empty($tmp)) {
|
||
|
$content = $this->createCache();
|
||
|
if(!empty($content[$sha1Tmp])) {
|
||
|
return $content[$sha1Tmp];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param int $projektId
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function projectOk($projektId): ?bool
|
||
|
{
|
||
|
$user = $this->getUserByCache(false);
|
||
|
if(empty($user)) {
|
||
|
return null;
|
||
|
}
|
||
|
if($projektId <= 0) {
|
||
|
return true;
|
||
|
}
|
||
|
if($user['type'] === 'admin') {
|
||
|
return true;
|
||
|
}
|
||
|
if(empty($user['project'])) {
|
||
|
return false;
|
||
|
}
|
||
|
if(in_array($projektId, $user['project'])) {
|
||
|
return true;
|
||
|
}
|
||
|
//@todo Projekt aus Cache holen
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return int
|
||
|
*/
|
||
|
public function GetID(): int
|
||
|
{
|
||
|
if(isset($_COOKIE['CH42SESSION']) && $_COOKIE['CH42SESSION']!='') {
|
||
|
$tmp = $_COOKIE['CH42SESSION'];
|
||
|
} else {
|
||
|
$tmp = session_id();
|
||
|
}
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(empty($this->cache[$cacheKey])
|
||
|
|| !isset($this->cache[$cacheKey]['time']) || !isset($this->cache[$cacheKey]['tmp'])
|
||
|
|| $this->cache[$cacheKey]['time'] + 10 < microtime(true) || $this->cache[$cacheKey]['tmp'] != $tmp) {
|
||
|
$this->cache = null;
|
||
|
$user_id = (int)$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
"SELECT `user_id`
|
||
|
FROM `useronline`
|
||
|
WHERE `sessionid` != '' AND `sessionid` = '%s' AND `login` = 1
|
||
|
LIMIT 1",
|
||
|
$this->app->DB->real_escape_string($tmp)
|
||
|
)
|
||
|
);
|
||
|
if($user_id > 0) {
|
||
|
$this->cache[$cacheKey]['user_id'] = $user_id;
|
||
|
$this->cache[$cacheKey]['tmp'] = $tmp;
|
||
|
$this->cache[$cacheKey]['time'] = microtime(true);
|
||
|
}
|
||
|
|
||
|
return $user_id;
|
||
|
}
|
||
|
|
||
|
return (int)$this->cache[$cacheKey]['user_id'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GetType(): string
|
||
|
{
|
||
|
$userId = (int)$this->GetID();
|
||
|
if($userId <= 0) {
|
||
|
return (string)$this->app->Conf->WFconf['defaultgroup'];
|
||
|
}
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['type'])) {
|
||
|
return (string)$this->cache[$cacheKey]['type'];
|
||
|
}
|
||
|
$this->loadUserRowInCacheProperty($userId);
|
||
|
|
||
|
return (string)$this->cache[$cacheKey]['type'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param null|string|array $settings
|
||
|
*/
|
||
|
function SettingsToUserKonfiguration($settings = null)
|
||
|
{
|
||
|
$id = (int)$this->GetID();
|
||
|
if(!$id) {
|
||
|
return;
|
||
|
}
|
||
|
if($settings === null) {
|
||
|
$settings = $this->app->DB->Select(sprintf('SELECT `settings` FROM `user` WHERE `id` = %d LIMIT 1', $id));
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
$this->cache[$cacheKey]['settings'] = $settings;
|
||
|
}
|
||
|
if(empty($settings)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if($settings != '') {
|
||
|
$settings = @unserialize($settings);
|
||
|
}
|
||
|
if(empty($settings) || !is_array($settings)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
foreach($settings as $k => $v) {
|
||
|
$check = $this->app->DB->Select("SELECT `id` FROM `userkonfiguration` WHERE `name` = '".$this->app->DB->real_escape_string($k)."' AND `user` = '$id' LIMIT 1");
|
||
|
if($check) {
|
||
|
$this->app->DB->Update("UPDATE `userkonfiguration` set `value` = '".$this->app->DB->real_escape_string($v)."' WHERE `id` = '$check' LIMIT 1");
|
||
|
}else{
|
||
|
$this->app->DB->Insert("INSERT INTO `userkonfiguration` (`user`,`name`,`value`) VALUES ('$id','".$this->app->DB->real_escape_string($k)."','".$this->app->DB->real_escape_string($v)."')");
|
||
|
}
|
||
|
}
|
||
|
if(!$this->app->DB->error()) {
|
||
|
$this->app->DB->Update(sprintf("UPDATE `user` SET `settings` = '' WHERE `id` = %d LIMIT 1", $id));
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
$this->cache[$cacheKey]['settings'] = '';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @var int|null $userId
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function GetSettings($userId = null)
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['settings'])) {
|
||
|
return $this->cache[$cacheKey]['settings'];
|
||
|
}
|
||
|
$this->loadUserRowInCacheProperty($userId);
|
||
|
|
||
|
return $this->cache[$cacheKey]['settings'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string|array $index
|
||
|
*
|
||
|
* @return array|mixed|string|null
|
||
|
*/
|
||
|
public function GetParameter($index)
|
||
|
{
|
||
|
$userId = (int)$this->GetID();
|
||
|
$settings = $this->GetSettings($userId);
|
||
|
if(!empty($settings)) {
|
||
|
$this->SettingsToUserKonfiguration($settings);
|
||
|
}
|
||
|
|
||
|
if((is_array($index) && count($index) === 0) || (!is_array($index) && (string)$index === '')) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
if(is_array($index)) {
|
||
|
$index = array_map('trim', $index);
|
||
|
$indexNames = array_map([$this->app->DB, 'real_escape_string'], $index);
|
||
|
$sql = sprintf(
|
||
|
"SELECT `name`, MAX(`value`) AS `value`
|
||
|
FROM `userkonfiguration`
|
||
|
WHERE `user` = %d AND `name` IN ('%s')
|
||
|
GROUP BY `name`",
|
||
|
$userId, implode("', '", $indexNames)
|
||
|
);
|
||
|
$arr = $this->app->DB->SelectPairs($sql);
|
||
|
$ret = null;
|
||
|
foreach($index as $ind) {
|
||
|
if(isset($arr[$ind])) {
|
||
|
$ret[] = [ 'name'=>$ind, 'value'=> $arr[$ind] ];
|
||
|
}
|
||
|
else {
|
||
|
$ret[] = [ 'name'=>$ind, 'value'=> '' ];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
return $this->app->DB->Select(
|
||
|
sprintf(
|
||
|
"SELECT `value`
|
||
|
FROM `userkonfiguration`
|
||
|
WHERE `name` = '%s' AND `user` = %d
|
||
|
LIMIT 1",
|
||
|
$this->app->DB->real_escape_string($index), $userId
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// value koennen beliebige Datentypen aus php sein (serialisiert)
|
||
|
|
||
|
/**
|
||
|
* @param string $index
|
||
|
* @param mixed $value
|
||
|
*/
|
||
|
public function SetParameter($index, $value)
|
||
|
{
|
||
|
if((string)$index === '' || $value === null) {
|
||
|
return;
|
||
|
}
|
||
|
$id = (int)$this->GetID();
|
||
|
|
||
|
$settings = $this->GetSettings($id);
|
||
|
if(!empty($settings)) {
|
||
|
$this->SettingsToUserKonfiguration($settings);
|
||
|
}
|
||
|
|
||
|
$check = $this->app->DB->SelectRow(
|
||
|
sprintf(
|
||
|
"SELECT `id`, `value`
|
||
|
FROM `userkonfiguration` WHERE `name` = '%s' AND `user` = %d
|
||
|
LIMIT 1",
|
||
|
$this->app->DB->real_escape_string($index), $id
|
||
|
)
|
||
|
);
|
||
|
if(empty($check)) {
|
||
|
$this->app->DB->Insert(
|
||
|
sprintf(
|
||
|
"INSERT INTO `userkonfiguration` (`user`, `name`, `value`) VALUES (%d, '%s', '%s')",
|
||
|
$id, $this->app->DB->real_escape_string($index), $this->app->DB->real_escape_string($value)
|
||
|
)
|
||
|
);
|
||
|
$this->cache = null;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if((string)$value === (string)$check['value']) {
|
||
|
return;
|
||
|
}
|
||
|
$this->app->DB->Update(
|
||
|
sprintf(
|
||
|
"UPDATE `userkonfiguration`
|
||
|
SET `value` = '%s'
|
||
|
WHERE `id` = %d
|
||
|
LIMIT 1",
|
||
|
$this->app->DB->real_escape_string($value), $check['id']
|
||
|
)
|
||
|
);
|
||
|
$this->cache = null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $index
|
||
|
*/
|
||
|
public function deleteParameter($index)
|
||
|
{
|
||
|
if(empty($index)) {
|
||
|
return;
|
||
|
}
|
||
|
$id = $this->GetID();
|
||
|
$this->app->DB->Delete(
|
||
|
sprintf(
|
||
|
'DELETE FROM `userkonfiguration` WHERE `user` = %d AND `name` = \'%s\'',
|
||
|
$id, $this->app->DB->real_escape_string($index)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $prefix
|
||
|
*/
|
||
|
public function deleteParameterPrefix($prefix)
|
||
|
{
|
||
|
if(empty($prefix)) {
|
||
|
return;
|
||
|
}
|
||
|
$id = $this->GetID();
|
||
|
$this->app->DB->Delete(
|
||
|
sprintf(
|
||
|
'DELETE FROM `userkonfiguration` WHERE `user` = %d AND `name` LIKE \'%s%%\'',
|
||
|
$id, $this->app->DB->real_escape_string($prefix)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function GetUsername()
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['username'])) {
|
||
|
return $this->cache[$cacheKey]['username'];
|
||
|
}
|
||
|
$this->loadUserRowInCacheProperty();
|
||
|
|
||
|
return $this->cache[$cacheKey]['username'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function GetDescription()
|
||
|
{
|
||
|
return $this->GetName();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function GetMail()
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['email'])) {
|
||
|
return $this->cache[$cacheKey]['email'];
|
||
|
}
|
||
|
$this->loadAddressRowInCacheProperty();
|
||
|
|
||
|
return $this->cache[$cacheKey]['email'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function GetName()
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['name'])) {
|
||
|
return $this->cache[$cacheKey]['name'];
|
||
|
}
|
||
|
$this->loadAddressRowInCacheProperty();
|
||
|
|
||
|
return $this->cache[$cacheKey]['name'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function GetSprachen()
|
||
|
{
|
||
|
$userId = (int)$this->GetId();
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(empty($this->cache[$cacheKey]) || !isset($this->cache[$cacheKey]['sprachebevorzugen'])) {
|
||
|
$this->loadUserRowInCacheProperty($userId);
|
||
|
}
|
||
|
$defaultLanguages = ['german','english'];
|
||
|
$languages = $this->cache[$cacheKey]['sprachebevorzugen'];
|
||
|
|
||
|
if(empty($languages)) {
|
||
|
return $defaultLanguages;
|
||
|
}
|
||
|
$ret = [];
|
||
|
$languagesArray = explode(';',str_replace(',',';',$languages));
|
||
|
foreach($languagesArray as $language) {
|
||
|
$language = trim($language);
|
||
|
if($language != '') {
|
||
|
$ret[] = $language;
|
||
|
}
|
||
|
}
|
||
|
if(empty($ret)) {
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
return $defaultLanguages;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GetSprache()
|
||
|
{
|
||
|
$sprachen = $this->GetSprachen();
|
||
|
|
||
|
return reset($sprachen);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return int|null
|
||
|
*/
|
||
|
public function GetAdresse()
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['adresse'])) {
|
||
|
return $this->cache[$cacheKey]['adresse'];
|
||
|
}
|
||
|
$this->loadUserRowInCacheProperty();
|
||
|
|
||
|
return $this->cache[$cacheKey]['adresse'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
function GetProjektleiter()
|
||
|
{
|
||
|
$result = $this->app->DB->SelectRow(
|
||
|
"SELECT `parameter`
|
||
|
FROM `adresse_rolle`
|
||
|
WHERE `subjekt` = 'Projektleiter' AND (`bis` = '0000-00-00' OR `bis` <= CURDATE())
|
||
|
AND `adresse` = '".$this->app->User->GetAdresse()."'
|
||
|
LIMIT 1"
|
||
|
);
|
||
|
|
||
|
return !empty($result);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return int
|
||
|
*/
|
||
|
function DefaultProjekt()
|
||
|
{
|
||
|
$adresse = $this->GetAdresse();
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(empty($this->cache[$cacheKey]) || !isset($this->cache[$cacheKey]['projekt'])) {
|
||
|
$this->loadAddressRowInCacheProperty($adresse);
|
||
|
$projekt = $this->cache[$cacheKey]['projekt'];
|
||
|
}
|
||
|
else {
|
||
|
$projekt = $this->cache[$cacheKey]['projekt'];
|
||
|
}
|
||
|
if($projekt <=0){
|
||
|
$projekt = $this->app->DB->Select(
|
||
|
"SELECT `standardprojekt` FROM `firma` WHERE `id`='" . $this->app->User->GetFirma() . "' LIMIT 1"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return $projekt;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string|null
|
||
|
*/
|
||
|
function GetEmail()
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['email'])) {
|
||
|
return $this->cache[$cacheKey]['email'];
|
||
|
}
|
||
|
$this->loadAddressRowInCacheProperty();
|
||
|
|
||
|
return $this->cache[$cacheKey]['email'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return int
|
||
|
*/
|
||
|
public function GetFirma(): int
|
||
|
{
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
function GetFirmaName()
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['firmaname'])) {
|
||
|
return $this->cache[$cacheKey]['firmaname'];
|
||
|
}
|
||
|
$name = $this->app->DB->Select(sprintf('SELECT `name` FROM `firma` WHERE `id` = %d', $this->GetFirma()));
|
||
|
$this->cache[$cacheKey]['firmaname'] = $name;
|
||
|
|
||
|
return $name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $field
|
||
|
*
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function GetField($field)
|
||
|
{
|
||
|
$value = $this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT `%s` FROM `user` WHERE id = %d ',
|
||
|
$field, $this->GetID()
|
||
|
)
|
||
|
);
|
||
|
if(in_array($value, ['settings', 'type', 'username', 'adresse', 'sprachebevorzugen'])) {
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
$this->cache[$cacheKey][$field] = $value;
|
||
|
}
|
||
|
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param int|null $userId
|
||
|
*/
|
||
|
protected function loadUserRowInCacheProperty(?int $userId = null): void
|
||
|
{
|
||
|
if($userId === null){
|
||
|
$userId = (int)$this->GetID();
|
||
|
}
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
$userData = (array)$this->app->DB->SelectRow(
|
||
|
sprintf(
|
||
|
'SELECT `settings`, `type`, `username`, `adresse`, `sprachebevorzugen` FROM `user` WHERE `id` = %d LIMIT 1',
|
||
|
$userId
|
||
|
)
|
||
|
);
|
||
|
if(!isset($this->cache[$cacheKey])) {
|
||
|
$this->cache[$cacheKey] = $userData;
|
||
|
}
|
||
|
else{
|
||
|
$this->cache[$cacheKey] = array_merge($this->cache[$cacheKey], $userData);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param int|null $addressId
|
||
|
*/
|
||
|
protected function loadAddressRowInCacheProperty(?int $addressId = null): void
|
||
|
{
|
||
|
if($addressId === null){
|
||
|
$addressId = (int)$this->GetAdresse();
|
||
|
}
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
$addressData = (array)$this->app->DB->SelectRow(
|
||
|
sprintf('SELECT `name`, `email`, `projekt` FROM `adresse` WHERE `id` = %d LIMIT 1', $addressId)
|
||
|
);
|
||
|
if(!isset($this->cache[$cacheKey])) {
|
||
|
$this->cache[$cacheKey] = $addressData;
|
||
|
}
|
||
|
else{
|
||
|
$this->cache[$cacheKey] = array_merge($this->cache[$cacheKey], $addressData);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
protected function getCacheKey(): string
|
||
|
{
|
||
|
return (string)$this->app->Conf->WFdbname;
|
||
|
}
|
||
|
|
||
|
|
||
|
protected function loadProjectsInCacheProperty(): void
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
$projects = $this->app->DB->SelectPairs('SELECT `id`, `oeffentlich` FROM `projekt` WHERE `geloescht` <> 1');
|
||
|
$this->cache[$cacheKey]['all_projects'] = array_keys($projects);
|
||
|
$this->cache[$cacheKey]['public_projects'] = [];
|
||
|
foreach($projects as $projectId => $public) {
|
||
|
if($public) {
|
||
|
$this->cache[$cacheKey]['public_projects'][] = $projectId;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param int $addressId
|
||
|
* @param string $type
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
protected function getUserProjectsByParameter($addressId, $type)
|
||
|
{
|
||
|
if($type==='admin' ||
|
||
|
$this->app->DB->Select(
|
||
|
"SELECT `id`
|
||
|
FROM `adresse_rolle`
|
||
|
WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR `bis` <= CURDATE()) AND `adresse` = '".$addressId."'
|
||
|
AND (`parameter` = '' OR `parameter` = '0')"
|
||
|
)
|
||
|
) {
|
||
|
return $this->getAllProjects();
|
||
|
}
|
||
|
$public = $this->getPublicProjects();
|
||
|
$roles = $this->app->DB->SelectFirstCols(
|
||
|
sprintf(
|
||
|
"SELECT DISTINCT `parameter`
|
||
|
FROM `adresse_rolle`
|
||
|
WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR `bis` <= CURDATE()) AND `adresse` = %d
|
||
|
AND `parameter` >= 0 AND `objekt` LIKE 'Projekt'",
|
||
|
$addressId
|
||
|
)
|
||
|
);
|
||
|
$projects = $this->app->DB->SelectFirstCols(
|
||
|
sprintf(
|
||
|
"SELECT DISTINCT `projekt`
|
||
|
FROM `adresse_rolle`
|
||
|
WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR bis <= CURDATE()) AND `adresse` = %d AND `projekt` > 0",
|
||
|
$addressId
|
||
|
)
|
||
|
);
|
||
|
|
||
|
return array_unique(array_merge($public, $roles, $projects));
|
||
|
}
|
||
|
}
|