X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_phoneGeneric.inc;h=fc2ce9d6095333faa52b59a352e0bd8556558ace;hb=c0fd64a0d2bc4069d410ae157f01781507d8a3a9;hp=97325ea6709d5f071d8cbde8dea27c19b85f8467;hpb=802a256cdbbdd5212e7c9a69cf53fc6a7c79c0fb;p=gosa.git diff --git a/plugins/admin/systems/class_phoneGeneric.inc b/plugins/admin/systems/class_phoneGeneric.inc index 97325ea67..fc2ce9d60 100644 --- a/plugins/admin/systems/class_phoneGeneric.inc +++ b/plugins/admin/systems/class_phoneGeneric.inc @@ -32,9 +32,10 @@ class phoneGeneric extends plugin var $goFonMSN = ""; var $selected_categorie = 0; var $netConfigDNS; + var $view_logged = FALSE; /* attribute list for save action */ - var $attributes= array("cn", "description", + var $attributes= array("cn", "description", "goFonType","goFonDmtfMode","goFonHost","goFonDefaultIP", "goFonQualify","goFonAuth","goFonSecret","goFonInkeys","goFonOutkey", "goFonTrunk","goFonAccountCode","goFonMSN","selected_categorie","goFonPermit","goFonDeny" @@ -53,10 +54,10 @@ class phoneGeneric extends plugin var $objectclasses= array("top", "goFonHardware"); - function phonegeneric ($config, $dn= NULL) + function phonegeneric ($config, $dn= NULL, $parent= NULL) { - plugin::plugin ($config, $dn); - $this->netConfigDNS = new termDNS($this->config,$this->dn,$this->objectclasses); + plugin::plugin ($config, $dn, $parent); + $this->netConfigDNS = new termDNS($this->config,$this->dn,$this->objectclasses, true); /* Set base */ if ($this->dn == "new"){ @@ -94,10 +95,28 @@ class phoneGeneric extends plugin $this->orig_dn= $this->dn; } + function set_acl_base($base) + { + plugin::set_acl_base($base); + $this->netConfigDNS->set_acl_base($base); + } + + function set_acl_category($cat) + { + plugin::set_acl_category($cat); + $this->netConfigDNS->set_acl_category($cat); + } + + function execute() { - /* Call parent execute */ - plugin::execute(); + /* Call parent execute */ + plugin::execute(); + + if($this->is_account && !$this->view_logged){ + $this->view_logged = TRUE; + new log("view","phone/".get_class($this),$this->dn); + } /* Do we represent a valid phone? */ if (!$this->is_account && $this->parent == NULL){ @@ -106,8 +125,39 @@ class phoneGeneric extends plugin return($display); } + /* Base select dialog */ + $once = true; + foreach($_POST as $name => $value){ + if(preg_match("/^chooseBase/",$name) && $once){ + $once = false; + $this->dialog = new baseSelectDialog($this->config,$this,$this->get_allowed_bases()); + $this->dialog->setCurrentBase($this->base); + } + } + + /* Dialog handling */ + if(is_object($this->dialog)){ + /* Must be called before save_object */ + $this->dialog->save_object(); + + if($this->dialog->isClosed()){ + $this->dialog = false; + }elseif($this->dialog->isSelected()){ + + /* A new base was selected, check if it is a valid one */ + $tmp = $this->get_allowed_bases(); + if(isset($tmp[$this->dialog->isSelected()])){ + $this->base = $this->dialog->isSelected(); + } + + $this->dialog= false; + }else{ + return($this->dialog->execute()); + } + } + /* handle Permit Add*/ - if(isset($_POST['goFonPermitAdd'])){ + if(isset($_POST['goFonPermitAdd']) && $this->acl_is_writeable("goFonPermit")){ if(isset($_POST['goFonPermitNew'])){ if(is_string($this->goFonPermit)){ $this->goFonPermit=array(); @@ -120,7 +170,7 @@ class phoneGeneric extends plugin } /* handle Deny Add*/ - if(isset($_POST['goFonDenyAdd'])){ + if(isset($_POST['goFonDenyAdd']) && $this->acl_is_writeable("goFonDeny")){ if(isset($_POST['goFonDenyNew'])){ if(is_string($this->goFonDeny)){ $this->goFonDeny=array(); @@ -133,7 +183,7 @@ class phoneGeneric extends plugin } /* Handle Permit Deletion*/ - if(isset($_POST['goFonPermitDel'])){ + if(isset($_POST['goFonPermitDel']) && $this->acl_is_writeable("goFonPermit")){ if(isset($_POST['goFonPermitS'])){ if(is_string($this->goFonPermit)){ $this->goFonPermit=array(); @@ -150,7 +200,7 @@ class phoneGeneric extends plugin /* Handle Permit Deletion*/ - if(isset($_POST['goFonDenyDel'])){ + if(isset($_POST['goFonDenyDel']) && $this->acl_is_writeable("goFonDeny")){ if(isset($_POST['goFonDenyS'])){ if(is_string($this->goFonDeny)){ $this->goFonDeny=array(); @@ -167,7 +217,15 @@ class phoneGeneric extends plugin /* Fill templating stuff */ $smarty= get_smarty(); - $smarty->assign("bases", $this->config->idepartments); + + $smarty->assign("bases", $this->get_allowed_bases()); + + $tmp = $this->plInfo(); + foreach($tmp['plProvidedAcls'] as $name => $translation){ + $smarty->assign($name."ACL",$this->getacl($name)); + } + + $smarty->assign("staticAddress","*");// $this->config->idepartments); /* Create Arrays for samrty select boxes */ $smarty->assign("categories", array("SIP","IAX","CAPI")); @@ -178,7 +236,7 @@ class phoneGeneric extends plugin /* deativate all fields that are not used by the specified type */ foreach($this->attributes as $att){ - if((!in_array($att,$this->usedattrs[$this->selected_categorie]))||(chkacl($this->acl,$att)!="")){ + if((!in_array($att,$this->usedattrs[$this->selected_categorie]))){ $smarty->assign($att."USED", "disabled" ); $smarty->assign($att, ""); }else{ @@ -190,11 +248,7 @@ class phoneGeneric extends plugin $smarty->assign("selected_categorie",$this->selected_categorie); /* Assign attributes */ - foreach ($this->attributes as $attr){ - $smarty->assign($attr."ACL", chkacl($this->acl, $attr)); - } $smarty->assign("base_select", $this->base); - $smarty->assign("goFonDefaultIPs",array("dynamic"=>_("dynamic"),"network"=>_("Networksettings"))); /* Show main page */ @@ -205,40 +259,55 @@ class phoneGeneric extends plugin function remove_from_parent() { - $ldap= $this->config->get_ldap_link(); - $ldap->cd($this->config->current['BASE']); + if($this->acl_is_removeable()){ + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); - $ldap->search ("(&(objectClass=goFonAccount)(goFonHardware=".$this->cn."))", array("uid","cn")); - while ($attr = $ldap->fetch()){ - print_red(sprintf(_("Can't delete because there are user which are depending on this phone. One of them is user '%s'."), - ($attr['uid'][0]." - ".$attr['cn'][0]))); - return; - } + $ldap->search ("(&(objectClass=goFonAccount)(goFonHardware=".$this->cn."))", array("uid","cn")); + while ($attr = $ldap->fetch()){ + print_red(sprintf(_("Can't delete because there are user which are depending on this phone. One of them is user '%s'."), + ($attr['uid'][0]." - ".$attr['cn'][0]))); + return; + } - $ldap->rmdir($this->dn); - show_ldap_error($ldap->get_error()); - $this->handle_post_events("remove"); - - /* Delete references to object groups */ - $ldap->cd ($this->config->current['BASE']); - $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); - while ($ldap->fetch()){ - $og= new ogroup($this->config, $ldap->getDN()); - unset($og->member[$this->dn]); - $og->save (); + $this->netConfigDNS->remove_from_parent(); + $ldap->rmdir($this->dn); + + new log("remove","phone/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); + + show_ldap_error($ldap->get_error(), sprintf(_("Removing of system phone/generic with dn '%s' failed."),$this->dn)); + $this->handle_post_events("remove",array("macAddress" => $this->netConfigDNS->macAddress,"ipHostNumber" => $this->netConfigDNS->ipHostNumber)); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } } - $this->netConfigDNS->remove_from_parent(); } /* Save data to object */ function save_object() { + /* Create a base backup and reset the + base directly after calling plugin::save_object(); + Base will be set seperatly a few lines below */ + $base_tmp = $this->base; plugin::save_object(); + $this->base = $base_tmp; + $this->netConfigDNS->save_object(); - /* Save base, since this is no LDAP attribute */ - if (isset($_POST['base']) && chkacl($this->acl, "create") == ""){ - $this->base= $_POST['base']; + + /* Set new base if allowed */ + $tmp = $this->get_allowed_bases(); + if(isset($_POST['base'])){ + if(isset($tmp[$_POST['base']])){ + $this->base= $_POST['base']; + } } } @@ -246,45 +315,39 @@ class phoneGeneric extends plugin /* Check supplied data */ function check() { - $message= $this->netConfigDNS->check(); + /* Call common method to give check the hook */ + $message= plugin::check(); + $message= array_merge($message, $this->netConfigDNS->check()); + $this->dn= "cn=".$this->cn.",ou=phones,ou=systems,".$this->base; /* To check for valid ip*/ - $num="(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])"; + if($this->netConfigDNS->ipHostNumber == ""){ + $message[]= _("The required field IP address is empty."); + } else { + if (!is_ip($this->netConfigDNS->ipHostNumber)){ + $message[]= _("The field IP address contains an invalid address."); + } + } -// if(in_array("goFonDefaultIP",$this->usedattrs[$this->selected_categorie])){ -// if (!preg_match("/^$num\\.$num\\.$num\\.$num$/", $this->goFonDefaultIP)){ -// $message[]= _("Wrong IP format in field goFonDefaultIP."); -// } -// } - -// /* Check for valid number */ -// if(in_array("goFonDefaultIP",$this->usedattrs[$this->selected_categorie])){ -// if((strlen($this->goFonQualify))!=(strlen((int)($this->goFonQualify)))){ -// $message[]= _("The given value for 'Response timeout' is not a valid number."); -// } -// } - - if ($this->cn == "" && chkacl ($this->acl, "cn") == ""){ + if ($this->cn == ""){ $message[]= _("The required field 'Phone name' is not set."); } - if ($this->cn == "0" && chkacl ($this->acl, "cn") == ""){ + if ($this->cn == "0"){ $message[]= _("The 'Phone name' '0' is reserved and cannot be used."); } - $ui= get_userinfo(); - $acl= get_permissions ($this->dn, $ui->subtreeACL); - $acl= get_module_permission($acl, "phone", $this->dn); - if (chkacl($acl, "create") != ""){ - $message[]= _("You have no permissions to create a phone on this 'Base'."); - } - if ($this->orig_dn != $this->dn){ $ldap= $this->config->get_ldap_link(); $ldap->cd ($this->base); $ldap->search ("(cn=".$this->cn.")", array("cn")); if ($ldap->count() != 0){ while ($attrs= $ldap->fetch()){ + + if(preg_match("/cn=dhcp,/",$attrs['dn'])){ + continue; + } + if ($attrs['dn'] != $this->orig_dn){ $message[]= sprintf (_("There is already an entry '%s' in the base choosen by you"), $this->cn); break; @@ -304,7 +367,7 @@ class phoneGeneric extends plugin /* only to define which attrs to save*/ - $mode = $this->attrs['selected_categorie']; + $mode = $this->selected_categorie; /* Remove all unwanted attrs */ foreach($this->attributes as $att){ @@ -313,11 +376,6 @@ class phoneGeneric extends plugin if(!in_array($att,$this->usedattrs[$mode])){ $this->attrs[$att] = array(); } - - /* Test rights of this user ... */ - if(chkacl($this->acl,$att)!=""){ - unset($this->attrs[$att]); - } } /* unset the categorie*/ @@ -339,6 +397,8 @@ class phoneGeneric extends plugin $this->attrs['goFonDefaultIP'] = $this->netConfigDNS->ipHostNumber; } + $this->attrs = $this->netConfigDNS->getVarsForSaving($this->attrs); + /* Write back to ldap */ $ldap= $this->config->get_ldap_link(); if ($this->orig_dn == 'new'){ @@ -346,14 +406,18 @@ class phoneGeneric extends plugin $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn)); $ldap->cd($this->dn); $ldap->add($this->attrs); - $this->handle_post_events("add"); + new log("create","phone/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); + $this->handle_post_events("add",array("macAddress" => $this->netConfigDNS->macAddress,"ipHostNumber" => $this->netConfigDNS->ipHostNumber)); } else { if ($this->orig_dn != $this->dn){ $this->move($this->orig_dn, $this->dn); } $ldap->cd($this->dn); - $ldap->modify($this->attrs); + $this->cleanup(); + $ldap->modify ($this->attrs); + new log("modify","phone/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); + // $user_phone_reload $ldap->cd ($this->config->current['BASE']); $user_phone_assignment = $ldap->fetch($ldap->search("(&(objectClass=goFonAccount)(goFonHardware=".$this->cn."))",array("uid"))); @@ -363,16 +427,85 @@ class phoneGeneric extends plugin $usertab->save(); unset($usertab); } - $this->handle_post_events("modify"); + $this->handle_post_events("modify",array("macAddress" => $this->netConfigDNS->macAddress,"ipHostNumber" => $this->netConfigDNS->ipHostNumber)); } - + $this->netConfigDNS->cn = $this->cn; $this->netConfigDNS->save($this->dn); + show_ldap_error($ldap->get_error(), sprintf(_("Saving of system phone/generic with dn '%s' failed."),$this->dn)); + } + + + /* Display generic part for server copy & paste */ + function getCopyDialog() + { + $vars = array("cn"); + $smarty = get_smarty(); + $smarty->assign("cn" ,$this->cn); + $smarty->assign("object","phone"); + $str = $smarty->fetch(get_template_path("paste_generic.tpl",TRUE)); + $ret = array(); + $ret['string'] = $str; + $ret['status'] = ""; + return($ret); + } + - show_ldap_error($ldap->get_error()); - /* Optionally execute a command after we're done */ - $this->postcreate(); + function saveCopyDialog() + { + if(isset($_POST['cn'])){ + $this->cn = $_POST['cn']; + } } + + function PrepareForCopyPaste($source) + { + plugin::PrepareForCopyPaste($source); + if(isset($source['macAddress'][0])){ + $this->netConfigDNS->macAddress = $source['macAddress'][0]; + } + if(isset($source['ipHostNumber'][0])){ + $this->netConfigDNS->ipHostNumber = $source['ipHostNumber'][0]; + } + + $source_o = new phonegeneric($this->config, $source['dn']); + $this->selected_categorie = $source_o->selected_categorie; + } + + + /* Return plugin informations for acl handling + #FIXME FAIscript seams to ununsed within this class... */ + function plInfo() + { + return (array( + "plShortName" => _("Generic"), + "plDescription" => _("Phone generic"), + "plSelfModify" => FALSE, + "plDepends" => array(), + "plPriority" => 0, + "plSection" => array("administration"), + "plCategory" => array("phone" => array("description" => _("Phone hardware"), + "objectClass" => "goFonHardware")), + "plProvidedAcls"=> array( + "cn" => _("Name"), + "base" => _("Base"), + "description" => _("Description"), + "goFonType" => _("SIP Mode"), + "goFonDmtfMode" => _("SIP DTMF mode"), + "goFonDefaultIP" => _("SIP Default ip"), + "goFonQualify" => _("SIP Qualify"), + "goFonAuth" => _("IAX authentication type"), + "goFonSecret" => _("IAX secret"), + "goFonAccountCode" => _("IAX account code"), + "goFonTrunk" => _("IAX trunk lines"), + "goFonPermit" => _("IAX permit settings"), + "goFonDeny" => _("IAX deny settings"), + "goFonMSN" => _("CAPI MSN"), + "categorie" => _("Hardware type")) + )); + } + + } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: