<?php
namespace CityMountain\ToolBundle\Utils;
//use Contao\Versions; use CityMountain\ToolBundle\Utils\OperationTool;
use CityMountain\ToolBundle\Utils\Settings;
class OperationTool
{
public function __construct()
{
}
public static function getMasterdataValues($idSelect=0,$key,$includeDisable=0,$addWhere=array())
{
$arrRes = array();
if(!\Database::getInstance()->tableExists('tl_zMasterdataValue', null, true))return $arrRes;
if($idSelect=="" || $idSelect==null)$idSelect=0;
if(is_array($idSelect)&&array_values($idSelect)[0]<>'')$idSelect = implode(",",$idSelect);
$objValues = \Database::getInstance()->prepare("SELECT *
FROM tl_zMasterdataValue
WHERE mvKey=?
AND ".($includeDisable==0?"( disable<>1 || id IN (".$idSelect."))":"1=1")."
".(is_array($addWhere)&&count($addWhere)?implode(" ",$addWhere):'')."
ORDER BY mvDefault DESC, mvOrder, mvName")->execute($key);
//\System::log('DATA '.$objValues->query, __METHOD__, "TL_ELS");
while($objValues->next())
{ //\System::log('1 getMasterdataValues '.$objValues->id.$objValues->mvName, __METHOD__, "TL_ELS");
$arrRes[$objValues->id] = $objValues->mvName;
}//\System::log('2 getMasterdataValues '.print_r(,true), __METHOD__, "TL_ELS");
return $arrRes;
}
public static function getMasterdataValuesData($idSelect=0,$key,$includeDisable=0,$addWhere=array())
{
$arrRes['keyMasterdataValue'] = array();
$arrRes['keyValueMapping'] = array();
if($idSelect=="")$idSelect=0;
if(is_array($idSelect))$idSelect = implode(",",$idSelect);
$objValues = \Database::getInstance()->prepare("SELECT *
FROM tl_zMasterdataValue
WHERE mvKey=?
AND ".($includeDisable==0?"( disable<>1 || id IN (".$idSelect."))":"1=1")."
".(is_array($addWhere)&&count($addWhere)?implode(" ",$addWhere):'')."
ORDER BY mvDefault DESC, mvOrder, mvName")->execute($key);
while($objValues->next())
{
$arrRes['keyMasterdataValue'][$objValues->id] = $objValues->row();
$arrRes['keyValueMapping'][$objValues->mvValueMapping] = $objValues->row();
}
return $arrRes;
}
public static function getMasterdataValueData($idSelect=0,$getObject=false)
{
$arrRes = array();
$objValue = \Database::getInstance()->prepare("SELECT * FROM tl_zMasterdataValue WHERE id=? ")->limit(1)->execute($idSelect);
$arrRes = $objValue->fetchAssoc();
if($getObject)return $objValue;
return $arrRes;
}
public static function getRightModuleActions($idSelect=0,$idModul=0,$includeDisable=0,$getData=0)
{
$res = array();
$tmpRightData = Settings::getRightData();
if($idModul<>'' && $idModul!==0)return $tmpRightData[$idModul]['right'];
if($idModul===0){
foreach($tmpRightData as $keyMod=>$arrMod){
$res = array_merge($res,$arrMod['right']);
}
}
return $res;
}
public static function getRightModules($idSelect=0,$includeDisable=0,$getData=0)
{
$res = array();
$tmpRightData = Settings::getRightData();
foreach($tmpRightData as $keyMod=>$arrMod){
$res[$keyMod] = $arrMod['name'];
}
return $res;
}
public static function getMemberRights($idSelect=0,$getData=0,$addWhere=array())
{
if($getData==1){
$arrRes['entry'] = array();
$arrRes['entryUnitList'] = array();
$arrRes['module'] = array();
}else{
$arrRes = array();
}
$objRights = \Database::getInstance()->prepare("
SELECT *
FROM tl_zLinkMemberRight
WHERE pid=?
".(is_array($addWhere)&&count($addWhere)?implode(" ",$addWhere):'')."
ORDER BY fkModuleAction, fkUnit")->execute($idSelect);
while($objRights->next())
{
if($getData==1){
$arrRes['entry'][$objRights->id] = $objRights->row();
$arrRes['entryUnitList'][$objRights->fkUnit] = $objRights->fkUnit;
$arrRes['module'][$objRights->fkModule][$objRights->fkModuleAction][$objRights->fkUnit] = $objRights->fkUnit;
}else{
$tmpRightData = Settings::getRightData();
$arrRes[$objRights->id] = $tmpRightData[$objRights->fkModule]['right'][$objRights->fkModuleAction]
." (".$tmpRightData[$objRights->fkModule]['name'].")";
}
}
return $arrRes;
}
public static function getUserRights($idSelect=0,$getData=0,$addWhere=array())
{
if($getData==1){
$arrRes['entry'] = array();
$arrRes['entryUnitList'] = array();
$arrRes['module'] = array();
}else{
$arrRes = array();
}
$objRights = \Database::getInstance()->prepare("
SELECT *
FROM tl_zLinkUserRight
WHERE pid=?
".(is_array($addWhere)&&count($addWhere)?implode(" ",$addWhere):'')."
ORDER BY fkModuleAction, fkUnit")->execute($idSelect);
while($objRights->next())
{
if($getData==1){
$arrRes['entry'][$objRights->id] = $objRights->row();
$arrRes['entryUnitList'][$objRights->fkUnit] = $objRights->fkUnit;
$arrRes['module'][$objRights->fkModule][$objRights->fkModuleAction][$objRights->fkUnit] = $objRights->fkUnit;
}else{
$tmpRightData = Settings::getRightData();
$arrRes[$objRights->id] = $tmpRightData[$objRights->fkModule]['right'][$objRights->fkModuleAction]
." (".$tmpRightData[$objRights->fkModule]['name'].")";
}
}
return $arrRes;
}
public static function getUnitsFromRights($idUnit,$userType='member',$arrModuleAction=array())
{
$arrRes = array();
if($userType=='user'){
$objRights = OperationTool::getUserRights(\BackendUser::getInstance()->id,1,array("AND fkModuleAction IN ('".implode("','",$arrModuleAction)."')"));
}else{
$objRights = OperationTool::getMemberRights(\BackendUser::getInstance()->id,1,array("AND fkModuleAction IN ('".implode("','",$arrModuleAction)."')"));
}
if (count($objRights['entry'])>0)
{
$arrIDs = array();
foreach($objRights['entry'] as $arrRight){
$arrIDs[$arrRight['fkUnit']] = '';
}
$arrRes = static::getUnitsHierarchy($arrIDs);
}
if($idUnit<>0 && !array_key_exists($idUnit,$arrRes)){
$objUnit = static::getUnit($idUnit,true);
$arrRes[$objUnit->id] = $objUnit->uName;
}
return $arrRes;
}
public static function getUnitsTop()
{
$res = array();
$objNodes = \Database::getInstance()->prepare("SELECT id FROM tl_zUnit WHERE pid = 0 AND disable<>1 ")->execute();
while($objNodes->next())
{
$res[$objNodes->id] = $objNodes->id;
}
return $res;
}
public static function getUnitsHierarchy(array $idsUnit)
{
$return = array();
//Alle ID's vom Array durchlaufen
foreach($idsUnit as $id => $value)
{
if(array_search($id, $return) === false){
//mit dieser Verknüpfung werden die index'es beibehalten
if($id)$return = $return + static::renderUnitTree($id);
}
}
asort($return);
return $return;
}
protected static function renderUnitTree($id)
{
$objUnit = \Database::getInstance()->prepare("
SELECT id, uName, disable
FROM tl_zUnit
WHERE id = ?")
->limit(1)
->execute($id);
// Zurück wenn kein Resultat gefunden wurde (erster Fall)
if ($objUnit->numRows < 1)
{
return array();
}
// aktuelle ID ins Array setzen, da dieses in der DB ist.
//$return[] = $id;
$return[$objUnit->id] = $objUnit->uName . ($objUnit->disable?' deaktivert':'');
$childs = array();
// prüfen ob es Kinder hat
$objNodes = \Database::getInstance()->prepare("SELECT id FROM tl_zUnit WHERE pid=? ORDER BY sorting")->execute($id);
if ($objNodes->numRows)
{
$childs = $objNodes->fetchEach('id');
}
// rekursion Start
if (count($childs))
{
for ($k=0; $k<count($childs); $k++)
{
//$return = array_merge($return, $this->renderUnitTree($childs[$k]));
$return = $return + static::renderUnitTree($childs[$k]);
}
}
return $return;
}
public static function getRightMember($idMember=0,$idUser=0)
{
$arrRes = array();
$arrRes['StandardUnitId'] = 0;
//$arrRes['StandardUnitId'] = 2;
$arrRes['ListUnitsId'] = array();
//$arrRes['ListUnitsId'] = array(2);
if($idMember==19 || $idMember==68 || $idUser<>0){
//$arrRes['ListUnitsId'][] = 1;
}
if($idMember<>0){
$objRights = \Database::getInstance()->prepare("SELECT fkUnit,lmuDefault FROM tl_zLinkMemberUnit WHERE pid=? ")->execute($idMember);
if($objRights->numRows==0){
$objMembers = \Database::getInstance()->prepare("SELECT username, lastname FROM tl_member WHERE id=? ")->limit(1)->execute($idMember);
\System::log('Keine Berechtigungen dem Mitglied '.($idMember==0?'':$objMembers->username." ".$objMembers->lastname).' ('.$idMember.') zugewiesen.', __METHOD__, TL_ACCESS);
}
}elseif($idUser<>0){
$objRights = \Database::getInstance()->prepare("SELECT fkUnit,lmuDefault FROM tl_zLinkMemberUnit
WHERE pid = (
SELECT tl_member.id
FROM tl_member,tl_user
WHERE tl_user.username=tl_member.username
AND tl_user.id=?) ")->execute($idUser);
if($objRights->numRows==0)\System::log('Keine Berechtigungen dem User '.static::getUser($idUser,true)->username.' ('.$idUser.') zugewiesen.', __METHOD__, TL_ACCESS);
}else{
//\System::log('Keine Mitglieder oder User ID für Berechtigung. ID Member:'.$idMember." ID User:".$idUser, __METHOD__, TL_ACCESS);
}
if(is_object($objRights)){
while($objRights->next())
{
$arrRes['ListUnitsId'][] = $objRights->fkUnit;
if($objRights->lmuDefault)$arrRes['StandardUnitId'] = $objRights->fkUnit;
}
if($arrRes['StandardUnitId']==''&&count($arrRes['ListUnitsId'])==1)$arrRes['StandardUnitId'] = $arrRes['ListUnitsId'][0];
}
return $arrRes;
}
public static function checkRightMember($checkUnitID,$idMember=0,$idUser=0,$arrRights=array())
{
$objUser = null;
if($idMember<>0){
$objUser = \Database::getInstance()->prepare("SELECT * FROM tl_member WHERE id=? ")->execute($idMember);
if(count($arrRights)==0)$arrRights=static::getRightMember($idMember);
}elseif($idUser<>0){
$tmpObjUser = \Database::getInstance()->prepare("SELECT * FROM tl_user WHERE id=? ")->execute($idUser);
if(count($arrRights)==0)$arrRights=static::getRightMember(0,$idUser);
if($tmpObjUser->username){
$objUser = \Database::getInstance()->prepare("SELECT * FROM tl_member WHERE username=? ")->execute($tmpObjUser->username);
}
}
if($objUser<>NULL && $objUser->id<>'' && count($arrRights)){
if(in_array($checkUnitID,$arrRights['ListUnitsId'])){
return true;
}
}
\System::log('Zugriff von User '.$objUser->username.' ('.$objUser->id.')'.' auf VE '.$checkUnitID.' verwehrt', __METHOD__, TL_ACCESS);
return false;
}
public static function getMembers($idSelect=0,$idsUnit=array(),$includeDisable=0,$getReference=0,$addWhere=array())
{
$arrRes = array();
$selMem = "";
if($idSelect==NULL)$idSelect=0;
if($idsUnit==0 || !is_array($idsUnit))$idsUnit=array();
if(count($idsUnit)){//All from the units
$selMem = "( id in ( SELECT pid FROM tl_zLinkMemberUnit WHERE fkUnit IN (".implode(",", $idsUnit).") )".(!$includeDisable?" AND disable<>1 ":'').")";
}
if($getReference){//all function
$selMem = "1=1";
if(!$includeDisable)$selMem = 'disable<>1';
}
if($selMem=="")$selMem = "1=1";
//Explizit auch dabei
if($idSelect<>0)$selMem .= ' OR id='.$idSelect;
//Abfrage
$objMembers = \Database::getInstance()->prepare("SELECT id, lastname, firstname
FROM tl_member
WHERE ".$selMem."
".(is_array($addWhere)&&count($addWhere)?implode(" ",$addWhere):'')."
ORDER BY lastname, firstname")->execute();
while($objMembers->next())
{
$arrRes[$objMembers->id] = $objMembers->lastname." ".$objMembers->firstname;
}
return $arrRes;
}
public static function getUsers($idSelect=0,$idsUnit=array(),$includeDisable=0,$getReference=0,$addWhere=array())
{
$arrRes = array();
$selMem = "";
if($idSelect==NULL)$idSelect=0;
if($idsUnit==0 || !is_array($idsUnit))$idsUnit=array();
if(count($idsUnit)){//All from the units
$selMem = "( id in ( SELECT pid FROM tl_zLinkUserUnit WHERE fkUnit IN (".implode(",", $idsUnit).") )".(!$includeDisable?" AND disable<>1 ":'').")";
}
if($getReference){//all function
$selMem = "1=1";
if(!$includeDisable)$selMem = 'disable<>1';
}
if($selMem=="")$selMem = "1=1";
//Explizit auch dabei
if($idSelect<>0)$selMem .= ' OR id='.$idSelect;
//Abfrage
$objMembers = \Database::getInstance()->prepare("SELECT id, name
FROM tl_user
WHERE ".$selMem."
".(is_array($addWhere)&&count($addWhere)?implode(" ",$addWhere):'')."
ORDER BY name")->execute();
while($objMembers->next())
{
$arrRes[$objMembers->id] = $objMembers->name;
}
return $arrRes;
}
public static function getMemberByUsername($name,$getObject=false)
{
$objMember = \Database::getInstance()->prepare("SELECT id FROM tl_member WHERE username=? ")->limit(1)->execute($name);
return static::getMemberByID($objMember->id,$getObject);
}
public static function getMemberByID($memberID,$getObject=false)
{
$arrRes = array();
\System::loadLanguageFile('default');
$objMember = \Database::getInstance()->prepare("SELECT id FROM tl_member WHERE id=? ")->limit(1)->execute($memberID);
$arrRes = static::getGenericEntry($objMember->id,'tl_member',false);
$arrRes['salutationDirect'] = $GLOBALS['TL_LANG']['cmglobal']['salutationDirect'][$arrRes['gender']];
if($arrRes['id'])$arrRes['fullName'] = $arrRes['lastname']." ".$arrRes['firstname'];
if($arrRes['id'])$arrRes = array_merge($arrRes,static::getRightMember($arrRes['id']));
if($getObject)return (Object)$arrRes;
return $arrRes;
}
public static function getUser($idSelect,$getObject=false)
{
$arrRes = array();
$objMembers = \Database::getInstance()->prepare("SELECT * FROM tl_user WHERE id=? ")->limit(1)->execute($idSelect);
if($getObject)return $objMembers;
$arrRes = $objMembers->fetchAssoc();
return $arrRes;
}
public static function getUnits($idSelect=0,$includeDisable=0,$arrIDs=0)//$arrIDs muss ein array sein!
{
$arrRes = array();
if(!\Database::getInstance()->tableExists('tl_zUnit', null, true))return $arrRes;
if($idSelect=="")$idSelect=0;
//wenn, arrIDs abgefragt wird und dies leer ist, wir eine leere Antwort gegeben, da diese Person keine Berechtigung hat.
if(is_array($arrIDs) && count($arrIDs)==0)return $arrRes;
//wenn arrIDs nicht gesetzt ist und kein Array ist, dann wird es ein Array
if(!is_array($arrIDs))$arrIDs=array();
$objUnits = \Database::getInstance()->prepare("SELECT *
FROM tl_zUnit
WHERE
".($includeDisable==0?"( disable<>1 || id=".$idSelect.")":"1=1")."
".(count($arrIDs)>0?"AND id IN(".implode(",",$arrIDs).")":"")."
ORDER BY uName")->execute();
while($objUnits->next())
{
$arrRes[$objUnits->id] = $objUnits->uName;
}
return $arrRes;
}
public static function getUnit($idSelect,$getObject=false)
{
$arrRes = array();
$objUnits = \Database::getInstance()->prepare("SELECT * FROM tl_zUnit WHERE id=? ")->limit(1)->execute($idSelect);
$arrRes = $objUnits->fetchAssoc();
if($getObject)return (Object)$arrRes;
return $arrRes;
}
public static function getUnitDefault()
{
$objUnit = \Database::getInstance()->prepare("SELECT id FROM tl_zUnit
WHERE uDefault=1")->limit(1)->execute();
return $objUnit->id;
}
public static function getUnitDefaultMaster()
{
$objUnit = \Database::getInstance()->prepare("SELECT id FROM tl_zUnit
WHERE uDefaultMaster=1")->limit(1)->execute();
return $objUnit->id;
}
public static function getGenericEntries($idSelect=0,$includeDisabled=0,$getReference=0,$addWhere=array(),$addOrder="ORDER BY aEventTime DESC")
{
$arrRes = array();
/*if(!\Database::getInstance()->tableExists('tl_zAccident', null, true))return $arrRes;
if($idSelect==NULL)$idSelect=0;
//Abfrage
$objAccidents = \Database::getInstance()->prepare("SELECT id, aLastname,aFirstname,aEventTime
FROM tl_zAccident
WHERE ".($includeDisabled==0?"( aStatusHR<>1 || aStatusSafety<>1 || id=".$idSelect.")":"1=1")."
".(is_array($addWhere)&&count($addWhere)?implode(" ",$addWhere):'')."
".$addOrder."
")->execute();
//dump($objAccidents);
while($objAccidents->next())
{
if($getReference){
$arrRes[$objAccidents->id] = $objAccidents->aLastname." ".$objAccidents->aFirstname." ".date("d.m.Y H:i",$objAccidents->aEventTime);
}else{
$arrRes[$objAccidents->id] = static::getAccident($objAccidents->id);//$objAccidents->row()
}
}*/
return $arrRes;
}
public static function getGenericEntry($idSelect,$table,$getObject=false)
{
$arrRes = array();
$objRes = \Database::getInstance()->prepare("SELECT * FROM ".$table." WHERE id=? ")
->limit(1)->execute($idSelect);
//dump($objRes);
if($objRes->numRows<>0){
$arrRes = $objRes->fetchAssoc();
foreach($arrRes as $id=>$value){
$arrRes[$id] = deserialize($value);
$arrRes[$id.'Text'] = \Haste\Util\Format::dcaValue($table, $id, $value);
}
}
if($getObject)return (Object)$arrRes;
return $arrRes;
}
public static function encodeRand($str, $seed=0) {
if($seed==0)$seed=\Config::get('elsKey');
if($seed==0||$seed==NULL){
$seed = mt_rand(1000000,9999999);
$config = \Config::getInstance();
$config->add("\$GLOBALS['TL_CONFIG']['elsKey']",$seed);
\System::log('Neuer elsKey wurd egesetzt', __METHOD__, TL_ACCESS);
}
mt_srand($seed);
$out = array();
for ($x=0, $l=strlen($str); $x<$l; $x++) {
$out[$x] = (ord($str[$x]) * 3) + mt_rand(350, 16000);
}
mt_srand();
return implode('-', $out);
}
public static function decodeRand($str, $seed=0) {
if($seed==0)$seed=\Config::get('elsKey');
mt_srand($seed);
$blocks = explode('-', $str);
$out = array();
foreach ($blocks as $block) {
$ord = (intval($block) - mt_rand(350, 16000)) / 3;
$out[] = chr($ord);
}
mt_srand();
return implode('', $out);
}
}