diff --git a/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc b/trunk/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc
index d4349fa278fa84d1da840cf1e47aa835e1a7a24b..7b67379d7aaa7243a8db9dbc6bc29db005707e6b 100644 (file)
function remove_from_parent()
{
+ /* Cancel if there's nothing to do here */
+ if ((!$this->acl_is_removeable())){
+ return;
+ }
+
+ /* Remove and write to LDAP */
+ plugin::remove_from_parent();
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->dn);
+ $this->cleanup();
+ $this->attrs['gotoModules'] = array();
+ $ldap->modify($this->attrs);
$this->handle_post_events("remove");
new log("remove","workstation/".get_class($this),$this->dn);
}
plugin::PrepareForCopyPaste($source);
$source_o = new workstartup ($this->config, $source['dn']);
foreach(array("FAIclass","gotoModules", "gotoAutoFs", "gotoFilesystem",
- "gotoKernelParameters","gotoShares") as $attr){
+ "gotoKernelParameters","gotoShares","gotoLdapServers", "gotoLdap_inherit") as $attr){
$this->$attr = $source_o->$attr;
}
}
));
}
+ /* Function to find bad classes */
+ function update_bad_classes($release)
+ {
+
+ if(!isset($this->cache['BAD_CLASSES'][$release])) {
+ /* Find "bad" classes */
+ $ui = get_userinfo();
+ $ldap = $this->config->get_ldap_link();
+
+ /* Convert release name to a valid ldap uri component */
+ $release_components = split('/', $release);
+ $release_components = array_reverse($release_components);
+ for($i=0;$i<sizeof($release_components);$i++) {
+ $release_components[$i] = "ou=" . $release_components[$i];
+ }
+ $release_dn_part = join(',', $release_components);
+
+ /* Limit the base to the release in the faiBase */
+ $base = sprintf("%s,%s%s", $release_dn_part, get_ou('faiBaseRDN'), $this->config->current['BASE']);
+
+ /* Build a list of all fai classes, that don't have the unittag of the user
+ * and are not freezed or removed. The classes will be filtered by this
+ * list. Its needed to specify each objectClass (FAIpackageList etc.) because
+ * FAIClass would match sub-objects, too, which would lead to an array that
+ * is much bigger then needed */
+ $filter = sprintf('(&(|(objectClass=FAItemplate)(objectClass=FAIpackageList)(objectClass=FAIprofile)(objectClass=FAIscript)(objectClass=FAIpartitionTable)(objectClass=FAIHook)(objectClass=FAIvariable)(objectClass=FAItemplate))(&(!(gosaUnitTag=%s))(&(!(FAIstate=*removed*))(!(FAIstate=*freeze*)))))', $ui->gosaUnitTag);
+ $ldap->cd($base);
+ $ldap->search(sprintf("$filter", $ui->gosaUnitTag));
+
+ $this->cache['BAD_CLASSES'][$release] = array();
+ while ($entry = $ldap->fetch()) {
+ $classname = $entry['cn'][0];
+ if (!in_array($classname, $this->cache['BAD_CLASSES'][$release])) {
+ array_push($this->cache['BAD_CLASSES'][$release], $classname);
+ }
+ }
+ }
+ }
/* Updates release dns
* and reads all classes for the current release,
return;
}else{
+ $base = $this->config->current['BASE'];
+ $ldap = $this->config->get_ldap_link();
foreach($servers as $server){
- if ($this->attrs['gosaUnitTag'][0] != $server['TAG']) {
- echo "Skipping server " . $server['SERVER'] . "<br>";
+ /* Dont show servers that have a different unittag as the user*/
+ $ui = get_userinfo();
+ if ($ui->gosaUnitTag != $server['TAG']) {
continue;
}
-
- echo "My unittag: ". $this->attrs['gosaUnitTag'][0] ."<br>";
- echo "<p> " . print_a($server);
- echo "</p>";
$rel = $server['FAI_RELEASE'];
$this->cache['SERVERS']['auto'][$rel] = $rel;
$this->cache['SERVERS'][$server['SERVER']][$rel] = $rel;
}else{
foreach($classes as $class){
$classname = $class['CLASS'];
- var_dump($class);
+ $this->update_bad_classes($release);
+ if(isset($this->cache['BAD_CLASSES'][$release])){
+ /* Skip classes that are in the array of bad classes */
+ if (in_array($classname, $this->cache['BAD_CLASSES'][$release])) {
+ continue;
+ }
+ }
if (!isset($this->cache['CLASSES'][$release][$classname])) {
$this->cache['CLASSES'][$release][$classname] = array();
}
# everything looks fine if the type in this position
# doesn't exist in that class
for ($i=0; $i<6; $i++) {
- $result[$i] = "<img src='images/empty.png' width='17'>";
+ $result[$i] = "<img src='images/empty.png' width='17'> ";
}
}
foreach($classes[$class_name] as $type) {
$index = $type['index'];
if ($image) {
- $string = "<img src='".$type['img']."' width='17' alt='".$type['desc']."'> ";
+ $string = "<img src='".$type['img']."' width='17' title='".$type['desc']."'> ";
}
else {
$string = $type['Abbr'];
function analyse_fai_object($attr)
{
$result = array();
- $result['desc'] = 'Placeholder';
switch($attr['TYPE']){
case 'FAIpartitionTable':
$result["Type"]= 'FAIpartitionTable';
$result["Abbr"]= 'Pt';
$result["img"]= 'plugins/fai/images/fai_partitionTable.png';
- $result["desc"] = "_('Partition table')";
+ $result["desc"] = _('Partition table');
$result["index"]= 0;
break;
case 'FAIpackageList':
$result["Type"]= 'FAIpackageList';
$result["Abbr"]= 'Pl';
$result["img"] = 'plugins/fai/images/fai_packages.png';
- $result["desc"] = "_('Package list')";
+ $result["desc"] = _('Package list');
$result["index"] = 1;
break;
case 'FAIscript':
$result["Type"]= 'FAIscript';
$result["Abbr"]= 'S';
$result["img"]= 'plugins/fai/images/fai_script.png';
- $result["desc"] = "_('Script')";
+ $result["desc"] = _('Scripts');
$result["index"] = 2;
break;
case 'FAIvariable':
$result["Type"]= 'FAIvariable';
$result["Abbr"]= 'V';
$result["img"]= 'plugins/fai/images/fai_variable.png';
- $result["desc"] = "_('Variables')";
+ $result["desc"] = _('Variables');
$result["index"]= 3;
break;
case 'FAIhook':
$result["Type"]= 'FAIhook';
$result["Abbr"]= 'H';
$result["img"]= 'plugins/fai/images/fai_hook.png';
- $result["desc"] = "_('Hooks')";
+ $result["desc"] = _('Hooks');
$result["index"]= 4;
break;
case 'FAIprofile':
$result["Type"]= 'FAIprofile';
$result["Abbr"]= 'P';
$result["img"]= 'plugins/fai/images/fai_profile.png';
+ $result["desc"]= _('Profile');
$result["index"] = 5;
break;
case 'FAItemplate':
$result["Type"]= 'FAItemplate';
$result["Abbr"]= 'T';
$result["img"] = 'plugins/fai/images/fai_template.png';
+ $result["desc"]= _('Templates');
$result["index"] = 6;
break;
default: trigger_error("Unknown FAI object type!");;