forked from extern/egroupware
pending stuff to improve admin cmd log required by new addressbook policies
This commit is contained in:
parent
84b715c5af
commit
ec9bbf28d3
@ -5,9 +5,8 @@
|
|||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||||
* @package admin
|
* @package admin
|
||||||
* @copyright (c) 2007-16 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
* @copyright (c) 2007-18 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
* @version $Id$
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use EGroupware\Api;
|
use EGroupware\Api;
|
||||||
@ -65,6 +64,11 @@ abstract class admin_cmd
|
|||||||
private $type = __CLASS__;
|
private $type = __CLASS__;
|
||||||
public $remote_id;
|
public $remote_id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display name of command, default ucfirst(str_replace(['_cmd_', '_'], ' ', __CLASS__))
|
||||||
|
*/
|
||||||
|
const NAME = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores the data of the derived classes
|
* Stores the data of the derived classes
|
||||||
*
|
*
|
||||||
@ -119,6 +123,18 @@ abstract class admin_cmd
|
|||||||
return $this->type;
|
return $this->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate human readable name of object
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function name()
|
||||||
|
{
|
||||||
|
if (self::NAME) return self::NAME;
|
||||||
|
|
||||||
|
return ucfirst(str_replace(['_cmd_', '_', '\\'], ' ', get_called_class()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
@ -305,17 +321,8 @@ abstract class admin_cmd
|
|||||||
$this->modifier = $set_modifier ? $GLOBALS['egw_info']['user']['account_id'] : 0;
|
$this->modifier = $set_modifier ? $GLOBALS['egw_info']['user']['account_id'] : 0;
|
||||||
if ($set_modifier) $this->modifier_email = admin_cmd::user_email();
|
if ($set_modifier) $this->modifier_email = admin_cmd::user_email();
|
||||||
}
|
}
|
||||||
if (version_compare(PHP_VERSION,'5.1.2','>'))
|
$vars = get_object_vars($this); // does not work in php5.1.2 due a bug
|
||||||
{
|
|
||||||
$vars = get_object_vars($this); // does not work in php5.1.2 due a bug
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach(array_keys(get_class_vars(__CLASS__)) as $name)
|
|
||||||
{
|
|
||||||
$vars[$name] = $this->$name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// data is stored serialized
|
// data is stored serialized
|
||||||
// paswords are masked / removed, if we dont need them anymore
|
// paswords are masked / removed, if we dont need them anymore
|
||||||
$vars['data'] = in_array($this->status, self::$require_pw_stati) ?
|
$vars['data'] = in_array($this->status, self::$require_pw_stati) ?
|
||||||
@ -405,7 +412,8 @@ abstract class admin_cmd
|
|||||||
{
|
{
|
||||||
$data['data'] = json_php_unserialize($data['data']);
|
$data['data'] = json_php_unserialize($data['data']);
|
||||||
}
|
}
|
||||||
if (!class_exists($class = $data['type']) || $class == 'admin_cmd')
|
if (!(class_exists($class = 'EGroupware\\'.$data['type']) || // namespaced class
|
||||||
|
class_exists($class = $data['type'])) || $data['type'] == 'admin_cmd')
|
||||||
{
|
{
|
||||||
throw new Api\Exception\WrongParameter(lang('Unknown command %1!',$class),0);
|
throw new Api\Exception\WrongParameter(lang('Unknown command %1!',$class),0);
|
||||||
}
|
}
|
||||||
@ -438,6 +446,46 @@ abstract class admin_cmd
|
|||||||
return admin_cmd::$sql->get_rows($query,$rows,$readonlys);
|
return admin_cmd::$sql->get_rows($query,$rows,$readonlys);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get list of stored or available (admin) cmd classes/types
|
||||||
|
*
|
||||||
|
* @return array class => label pairs
|
||||||
|
*/
|
||||||
|
static function get_cmd_labels()
|
||||||
|
{
|
||||||
|
return Api\Cache::getInstance(__CLASS__, 'cmd_labels', function()
|
||||||
|
{
|
||||||
|
admin_cmd::_instanciate_sql();
|
||||||
|
|
||||||
|
$labels = admin_cmd::$sql->query_list('cmd_type');
|
||||||
|
|
||||||
|
// for admin app we also add all available cmd objects
|
||||||
|
foreach(scandir(__DIR__) as $file)
|
||||||
|
{
|
||||||
|
$matches = null;
|
||||||
|
if (preg_match('/^class\.(admin_cmd_.*)\.inc\.php$/', $file, $matches))
|
||||||
|
{
|
||||||
|
if (!isset($labels[$matches[1]]))
|
||||||
|
{
|
||||||
|
$labels[$matches[1]] = $matches[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach($labels as $class => &$label)
|
||||||
|
{
|
||||||
|
$label = $class::name();
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort them alphabetic
|
||||||
|
uasort($labels, function($a, $b)
|
||||||
|
{
|
||||||
|
return strcasecmp($a, $b);
|
||||||
|
});
|
||||||
|
|
||||||
|
return $labels;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* calling search method of our static Api\Storage\Base instance
|
* calling search method of our static Api\Storage\Base instance
|
||||||
*
|
*
|
||||||
@ -876,12 +924,11 @@ abstract class admin_cmd
|
|||||||
$cmd->run(null,false); // false = dont set current user as modifier, as job is run by the queue/system itself
|
$cmd->run(null,false); // false = dont set current user as modifier, as job is run by the queue/system itself
|
||||||
}
|
}
|
||||||
catch (Exception $e) { // we need to mark that command as failed, to prevent further execution
|
catch (Exception $e) { // we need to mark that command as failed, to prevent further execution
|
||||||
unset($e);
|
|
||||||
admin_cmd::$sql->init($job);
|
admin_cmd::$sql->init($job);
|
||||||
admin_cmd::$sql->save(array(
|
admin_cmd::$sql->save(array(
|
||||||
'status' => admin_cmd::failed,
|
'status' => admin_cmd::failed,
|
||||||
'error' => lang('Unknown command %1!',$job['type']),
|
'error' => $e->getMessage(),
|
||||||
'errno' => 0,
|
'errno' => $e->getcode(),
|
||||||
'data' => self::mask_passwords($job['data']),
|
'data' => self::mask_passwords($job['data']),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user