1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
<?php
/*****************************************************************************
*
* CoreUserCfg.php - Class for handling user/profile specific configurations
*
* Copyright (c) 2004-2011 NagVis Project (Contact: info@nagvis.org)
*
* License:
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*****************************************************************************/
/**
* @author Lars Michelsen <lars@vertical-visions.de>
*/
class CoreUserCfg {
private $CORE;
private $profilesDir;
// Optional list of value types to be fixed
private $types = Array(
'sidebar' => 'i',
'header' => 'b',
'eventlog' => 'b',
);
/**
* Class Constructor
*
* @param String $name Name of the map
* @author Lars Michelsen <lars@vertical-visions.de>
*/
public function __construct() {
$this->CORE = GlobalCore::getInstance();
$this->profilesDir = cfg('paths', 'profiles');
}
public function doGet($onlyUserCfg = false) {
global $AUTH, $AUTHORISATION;
$opts = Array();
if(!$AUTH->isAuthenticated())
return $opts;
if(!file_exists($this->profilesDir))
return $opts;
// Fetch all profile files to load
$files = Array();
if(!$onlyUserCfg)
foreach($AUTHORISATION->getUserRoles($AUTH->getUserId()) AS $role)
$files[] = $role['name'].'.profile';
$files[] = $AUTH->getUser().'.profile';
// Read all configurations and append to the option array
foreach($files AS $file) {
$f = $this->profilesDir.'/'.$file;
if(!file_exists($f))
continue;
$a = json_decode(file_get_contents($f), true);
if(!is_array($a))
throw new NagVisException(l('Invalid data in "[FILE]".', Array('FILE' => $f)));
$opts = array_merge($opts, $a);
}
return $opts;
}
public function doGetAsJson($onlyUserCfg = false) {
return json_encode($this->doGet($onlyUserCfg));
}
public function doSet($opts) {
global $AUTH;
$file = $this->profilesDir.'/'.$AUTH->getUser().'.profile';
if(!$this->CORE->checkExisting(dirname($file), true) || !$this->CORE->checkWriteable(dirname($file), true))
return false;
$cfg = $this->doGet(true);
foreach($opts AS $key => $value) {
if(isset($this->types[$key]))
$value = $this->fixType($value, $this->types[$key]);
$cfg[$key] = $value;
}
$ret = file_put_contents($file, json_encode($cfg)) !== false;
$this->CORE->setPerms($file);
return $ret;
}
public function getValue($key, $default = null) {
$opts = $this->doGet();
return isset($opts[$key]) ? $opts[$key] : $default;
}
private function fixType($val, $type) {
if($type == 'i')
return (int) $val;
elseif($type == 'b') {
if($val == '1' || $val === 'true')
return true;
else
return false;
} else
return $val;
}
}
|