From d07ca592c6023d801772e0aec75fe8ee78965860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= <come@opensides.be> Date: Wed, 25 Jan 2017 13:27:02 +0100 Subject: [PATCH] Fixes #5357 Do not remove tabs when applying templates to existing objects Conflicts: include/simpleplugin/class_simplePlugin.inc --- include/class_baseSelector.inc | 3 +-- include/class_plugin.inc | 2 +- include/class_template.inc | 5 +++++ include/simpleplugin/class_simplePlugin.inc | 6 ++++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/include/class_baseSelector.inc b/include/class_baseSelector.inc index 9c2d58518..4727f62bb 100644 --- a/include/class_baseSelector.inc +++ b/include/class_baseSelector.inc @@ -142,7 +142,7 @@ class baseSelector { { global $config; - if (!isset($this->base) || ($this->base == "")) { + if (!isset($this->base) || ($this->base == '')) { $this->lastState = FALSE; return FALSE; } @@ -179,7 +179,6 @@ class baseSelector { } } } - } /* Skip if there's no change */ diff --git a/include/class_plugin.inc b/include/class_plugin.inc index 408497a3f..c73d9cc0b 100644 --- a/include/class_plugin.inc +++ b/include/class_plugin.inc @@ -459,7 +459,7 @@ class plugin $is_new = empty($oc); /* Load (minimum) attributes, add missing ones */ - $this->attrs['objectClass'] = array_merge_unique($oc, $this->objectclasses); + $this->attrs['objectClass'] = $this->mergeObjectClasses($oc); /* Copy standard attributes */ foreach ($this->attributes as $val) { diff --git a/include/class_template.inc b/include/class_template.inc index ebb73833d..08c5496c4 100644 --- a/include/class_template.inc +++ b/include/class_template.inc @@ -191,6 +191,11 @@ class template { if ($targetdn !== NULL) { $this->tabObject = objects::open($targetdn, $this->type); + foreach ($this->tabObject->by_object as $class => &$plugin) { + if ($plugin->is_account || $plugin->ignore_account) { + $this->attrs['objectClass'] = $plugin->mergeObjectClasses($this->attrs['objectClass']); + } + } } elseif ($this->applied) { trigger_error('Templates can’t be applied twice without calling reset before'); return; diff --git a/include/simpleplugin/class_simplePlugin.inc b/include/simpleplugin/class_simplePlugin.inc index 34a2a0511..c4e88e2e0 100644 --- a/include/simpleplugin/class_simplePlugin.inc +++ b/include/simpleplugin/class_simplePlugin.inc @@ -657,6 +657,12 @@ class simplePlugin extends plugin $this->post_save(); } + /* Used by prepare_save and template::apply */ + public function mergeObjectClasses(array $oc) + { + return array_merge_unique($oc, $this->objectclasses); + } + protected function prepare_save () { /* Call parents save to prepare $this->attrs */ -- GitLab