";
return($str);
}
/* Get service information for serverService plugin */
function getListEntry()
{
$this->updateStatusState();
/* Assign status flag */
if(!empty($this->StatusFlag)){
$flag = $this->StatusFlag;
$fields['Status'] = $this->$flag;
}else{
$fields['Status'] = "";
}
/* Name displayed in service overview */
$fields['Message'] = _("Empty service");
/* Allow/disallow some functions */
$sf = !empty($this->StatusFlag);
$fields['AllowStart'] = $sf && $this->acl_is_writeable("start");
$fields['AllowStop'] = $sf && $this->acl_is_writeable("stop");
$fields['AllowRestart'] = $sf && $this->acl_is_writeable("restart");
$fields['AllowRemove'] = $this->acl_is_removeable();
$fields['AllowEdit'] = $this->acl_is_readable("");
return($fields);
}
/* Remove service */
function remove_from_parent()
{
if(!$this->initially_was_account || !$this->acl_is_removeable()){
return;
}
plugin::remove_from_parent();
/* Remove status flag, it is not a memeber of
this->attributes, so ensure that it is deleted too */
if(!empty($this->StatusFlag)){
$this->attrs[$this->StatusFlag] = array();
}
/* Check if this is a new entry ... add/modify */
$ldap = $this->config->get_ldap_link();
$ldap->cat($this->dn,array("objectClass"));
if($ldap->count()){
$ldap->cd($this->dn);
$ldap->modify($this->attrs);
}else{
$ldap->cd($this->dn);
$ldap->add($this->attrs);
}
new log("remove","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
if (!$ldap->success()){
msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, 0, get_class()));
}
$this->handle_post_events("remove");
}
/* Save service */
function save()
{
plugin::save();
/* Check if this is a new entry ... add/modify */
$ldap = $this->config->get_ldap_link();
$ldap->cat($this->dn,array("objectClass"));
if($ldap->count()){
$ldap->cd($this->dn);
$ldap->modify($this->attrs);
}else{
$ldap->cd($this->dn);
$ldap->add($this->attrs);
}
if($this->initially_was_account){
new log("modify","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
$this->handle_post_events("modify");
}else{
$this->handle_post_events("add");
new log("create","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
}
if (!$ldap->success()){
msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, 0, get_class()));
}
}
/* Directly save new status flag */
function setStatus($value)
{
if($value == "none") return;
/* Can't set status flag for new services (Object doesn't exists in ldap tree) */
if(!$this->initially_was_account) return;
/* Can't set status flag, if no flag is specified */
if(empty($this->StatusFlag)){
return;
}
/* Get object (server), update status flag and save changes */
$ldap = $this->config->get_ldap_link();
$ldap->cd($this->dn);
$ldap->cat($this->dn,array("objectClass"));
if($ldap->count()){
$tmp = $ldap->fetch();
for($i = 0; $i < $tmp['objectClass']['count']; $i ++){
$attrs['objectClass'][] = $tmp['objectClass'][$i];
}
$flag = $this->StatusFlag;
$attrs[$flag] = $value;
$this->$flag = $value;
$ldap->modify($attrs);
if (!$ldap->success()){
msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class()));
}
$this->action_hook();
}
}
function check()
{
$message = plugin::check();
return($message);
}
function save_object()
{
plugin::save_object();
}
function action_hook($add_attrs= array())
{
/* Find postcreate entries for this class */
$command= $this->config->search(get_class($this), "ACTION_HOOK",array('menu','tabs'));
if ($command != ""){
/* Walk through attribute list */
foreach ($this->attributes as $attr){
if (!is_array($this->$attr)){
$command= preg_replace("/%$attr/", $this->$attr, $command);
}
}
$command= preg_replace("/%dn/", $this->dn, $command);
/* Additional attributes */
foreach ($add_attrs as $name => $value){
$command= preg_replace("/%$name/", $value, $command);
}
/* If there are still some %.. in our command, try to fill these with some other class vars */
if(preg_match("/%/",$command)){
$attrs = get_object_vars($this);
foreach($attrs as $name => $value){
if(!is_string($value)) continue;
$command= preg_replace("/%$name/", $value, $command);
}
}
if (check_command($command)){
@DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,
$command, "Execute");
exec($command);
} else {
msg_dialog::display(_("Configuration error"), msgPool::cmdnotfound("ACTION_HOOK", get_class($this)), ERROR_DIALOG);
}
}
}
/* Get updates for status flag */
function updateStatusState()
{
if(empty($this->StatusFlag)) return;
$attrs = array();
$flag = $this->StatusFlag;
$ldap = $this->config->get_ldap_link();
$ldap->cd($this->cn);
$ldap->cat($this->dn,array($flag));
if($ldap->count()){
$attrs = $ldap->fetch();
}
if(isset($attrs[$flag][0])){
$this->$flag = $attrs[$flag][0];
}
}
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>