index e854884a4e81f9c3c10b265f647f660e6617f75c..eb21b5e0fcf40886bd6c9e00371efec0e9af8a87 100644 (file)
return($display);
}
return($display);
}
- /*! \brief Executes commands after an object has been created */
- function postcreate($add_attrs= array())
- {
- /* Find postcreate entries for this class */
- $command= $this->config->search(get_class($this), "POSTCREATE",array('menu', 'tabs'));
-
- if ($command != ""){
-
- /* Walk through attribute list */
- foreach ($this->attributes as $attr){
- if (!is_array($this->$attr)){
- $add_attrs[$attr] = $this->$attr;
- }
- }
- $add_attrs['dn']=$this->dn;
-
- $tmp = array();
- foreach($add_attrs as $name => $value){
- $tmp[$name] = strlen($name);
- }
- arsort($tmp);
-
- /* Additional attributes */
- foreach ($tmp as $name => $len){
- $value = $add_attrs[$name];
- $command= str_replace("%$name", "$value", $command);
- }
-
- if (check_command($command)){
- @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,
- $command, "Execute");
- exec($command,$arr);
- foreach($arr as $str){
- @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,
- $command, "Result: ".$str);
- }
- } else {
- $message= msgPool::cmdnotfound("POSTCREATE", get_class($this));
- msg_dialog::display(_("Error"), $message, ERROR_DIALOG);
- }
- }
- }
-
- /*! \brief Execute commands after an object has been modified */
- function postmodify($add_attrs= array())
- {
- /* Find postcreate entries for this class */
- $command= $this->config->search(get_class($this), "POSTMODIFY",array('menu','tabs'));
-
- if ($command != ""){
-
- /* Walk through attribute list */
- foreach ($this->attributes as $attr){
- if (!is_array($this->$attr)){
- $add_attrs[$attr] = $this->$attr;
- }
- }
- $add_attrs['dn']=$this->dn;
-
- $tmp = array();
- foreach($add_attrs as $name => $value){
- $tmp[$name] = strlen($name);
- }
- arsort($tmp);
-
- /* Additional attributes */
- foreach ($tmp as $name => $len){
- $value = $add_attrs[$name];
- $command= str_replace("%$name", "$value", $command);
- }
-
- if (check_command($command)){
- @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,$command, "Execute");
- exec($command,$arr);
- foreach($arr as $str){
- @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,
- $command, "Result: ".$str);
- }
- } else {
- $message= msgPool::cmdnotfound("POSTMODIFY", get_class($this));
- msg_dialog::display(_("Error"), $message, ERROR_DIALOG);
- }
- }
- }
-
- /*! \brief Executes a command after an object has been removed */
- function postremove($add_attrs= array())
- {
- /* Find postremove entries for this class */
- $command= $this->config->search(get_class($this), "POSTREMOVE",array('menu','tabs'));
- if ($command != ""){
-
- /* Walk through attribute list */
- foreach ($this->attributes as $attr){
- if (!is_array($this->$attr)){
- $add_attrs[$attr] = $this->$attr;
- }
- }
- $add_attrs['dn']=$this->dn;
-
- $tmp = array();
- foreach($add_attrs as $name => $value){
- $tmp[$name] = strlen($name);
- }
- arsort($tmp);
-
- /* Additional attributes */
- foreach ($tmp as $name => $len){
- $value = $add_attrs[$name];
- $command= str_replace("%$name", "$value", $command);
- }
-
- if (check_command($command)){
- @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,
- $command, "Execute");
-
- exec($command,$arr);
- foreach($arr as $str){
- @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,
- $command, "Result: ".$str);
- }
- } else {
- $message= msgPool::cmdnotfound("POSTREMOVE", get_class($this));
- msg_dialog::display(_("Error"), $message, ERROR_DIALOG);
- }
- }
- }
-
/* Create unique DN */
function create_unique_dn2($data, $base)
/* Create unique DN */
function create_unique_dn2($data, $base)
}
// Migrate objectgroups if needed
}
// Migrate objectgroups if needed
- $ogroups = get_sub_list("(&(objectClass=gosaGroupOfNames)(member=".LDAP::prepare4filter(LDAP::fix($src_dn))."))","ogroups", array(get_ou("ogroupRDN")),$this->config->current['BASE'],array("dn"), GL_SUBSEARCH | GL_NO_ACL_CHECK);
+ $ogroups = get_sub_list("(&(objectClass=gosaGroupOfNames)(member=".LDAP::prepare4filter(LDAP::fix($src_dn))."))",
+ "ogroups", array(get_ou("ogroupRDN")),$this->config->current['BASE'],array("dn"), GL_SUBSEARCH | GL_NO_ACL_CHECK);
// Walk through all objectGroups
foreach($ogroups as $ogroup){
// Migrate old to new dn
$o_ogroup= new ogroup($this->config,$ogroup['dn']);
// Walk through all objectGroups
foreach($ogroups as $ogroup){
// Migrate old to new dn
$o_ogroup= new ogroup($this->config,$ogroup['dn']);
- if (isset($o_group->member[$src_dn])) {
+ if (isset($o_ogroup->member[$src_dn])) {
unset($o_ogroup->member[$src_dn]);
}
$o_ogroup->member[$dst_dn]= $dst_dn;
unset($o_ogroup->member[$src_dn]);
}
$o_ogroup->member[$dst_dn]= $dst_dn;
// Update 'manager' attributes from gosaDepartment and inetOrgPerson
$filter = "(&(objectClass=inetOrgPerson)(manager=".LDAP::prepare4filter(LDAP::fix($src_dn))."))";
$ocs = $ldap->get_objectclasses();
// Update 'manager' attributes from gosaDepartment and inetOrgPerson
$filter = "(&(objectClass=inetOrgPerson)(manager=".LDAP::prepare4filter(LDAP::fix($src_dn))."))";
$ocs = $ldap->get_objectclasses();
- if(isset($ocs['gosaDepartment']['MAY']) && in_array('manager', $ocs['inetOrgPerson']['MAY'])){
+ if(isset($ocs['gosaDepartment']['MAY']) && in_array('manager', $ocs['gosaDepartment']['MAY'])){
$filter = "(|".$filter."(&(objectClass=gosaDepartment)(manager=".LDAP::prepare4filter(LDAP::fix($src_dn)).")))";
}
$leaf_deps= get_list($filter,array("all"),$this->config->current['BASE'],
$filter = "(|".$filter."(&(objectClass=gosaDepartment)(manager=".LDAP::prepare4filter(LDAP::fix($src_dn)).")))";
}
$leaf_deps= get_list($filter,array("all"),$this->config->current['BASE'],
}
}
- function handle_post_events($mode, $add_attrs= array())
- {
- switch ($mode){
- case "add":
- $this->postcreate($add_attrs);
- break;
-
- case "modify":
- $this->postmodify($add_attrs);
- break;
-
- case "remove":
- $this->postremove($add_attrs);
- break;
- }
- }
-
-
function saveCopyDialog(){
}
function saveCopyDialog(){
}
{
return(isset($this->dialog) && $this->dialog);
}
{
return(isset($this->dialog) && $this->dialog);
}
+
+
+ /*! \brief Forward command execution request
+ * to the correct method.
+ */
+ function handle_post_events($mode, $addAttrs= array())
+ {
+ if(!in_array($mode, array('add','remove','modify'))){
+ trigger_error(sprintf("Invalid post event type given '%s'! Valid types are [add,modify,remove].", $mode));
+ return;
+ }
+ switch ($mode){
+ case "add":
+ plugin::callHook($this,"POSTCREATE", $addAttrs);
+ break;
+
+ case "modify":
+ plugin::callHook($this,"POSTMODIFY", $addAttrs);
+ break;
+
+ case "remove":
+ plugin::callHook($this,"POSTREMOVE", $addAttrs);
+ break;
+ }
+ }
+
+
+ /*! \brief Calls external hooks which are defined for this plugin (gosa.conf)
+ * Replaces placeholder by class values of this plugin instance.
+ * @param Allows to a add special replacements.
+ */
+ static function callHook($plugin, $cmd, $addAttrs= array())
+ {
+ global $config;
+ $command= $config->search(get_class($plugin), $cmd,array('menu','tabs'));
+ if ($command != ""){
+
+ // Walk trough attributes list and add the plugins attributes.
+ foreach ($plugin->attributes as $attr){
+ if (!is_array($plugin->$attr)){
+ $addAttrs[$attr] = $plugin->$attr;
+ }
+ }
+ $ui = get_userinfo();
+ $addAttrs['callerDN']=$ui->dn;
+ $addAttrs['dn']=$plugin->dn;
+
+ // Sort attributes by length, ensures correct replacement
+ $tmp = array();
+ foreach($addAttrs as $name => $value){
+ $tmp[$name] = strlen($name);
+ }
+ arsort($tmp);
+
+ // Now replace the placeholder
+ foreach ($tmp as $name => $len){
+ $value = $addAttrs[$name];
+ $command= str_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($plugin);
+ foreach($attrs as $name => $value){
+ if(is_array($value)){
+ $s = "";
+ foreach($value as $val){
+ if(is_string($val) || is_int($val) || is_float($val) || is_bool($val)){
+ $s .= '"'.$val.'",';
+ }
+ }
+ $value = '['.trim($s,',').']';
+ }
+ if(!is_string($value) && !is_int($value) && !is_float($value) && !is_bool($value)){
+ continue;
+ }
+ $command= preg_replace("/%$name/", $value, $command);
+ }
+ }
+
+ if (check_command($command)){
+ @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__,$command,"Execute");
+ exec($command,$arr);
+ if(is_array($arr)){
+ $str = implode("\n",$arr);
+ @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Result: ".$str);
+ }
+ } else {
+ $message= msgPool::cmdnotfound("POSTCREATE", get_class($plugin));
+ msg_dialog::display(_("Error"), $message, ERROR_DIALOG);
+ }
+ }
+ }
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: