From 4acc1125f1142f96d17ebff31c2940b483b6fa8a Mon Sep 17 00:00:00 2001 From: cajus Date: Wed, 8 Aug 2007 12:43:36 +0000 Subject: [PATCH] Added dhcp pool git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@7003 594d385d-05f5-0310-b6e9-bd551577e9d8 --- plugins/admin/systems/class_dhcpPool.inc | 225 +++++++++++++++++++++++ plugins/admin/systems/dhcp_pool.tpl | 26 +++ 2 files changed, 251 insertions(+) create mode 100644 plugins/admin/systems/class_dhcpPool.inc create mode 100644 plugins/admin/systems/dhcp_pool.tpl diff --git a/plugins/admin/systems/class_dhcpPool.inc b/plugins/admin/systems/class_dhcpPool.inc new file mode 100644 index 000000000..cccbb90a5 --- /dev/null +++ b/plugins/admin/systems/class_dhcpPool.inc @@ -0,0 +1,225 @@ +dn= $attrs['dn']; + $this->new= FALSE; + + /* Load attributes */ + $this->cn= $attrs['cn'][0]; + $this->dhcpRange= $attrs['dhcpRange'][0]; + list($this->range_start, $this->range_stop)= preg_split('/\s+/', $this->dhcpRange); + + /* Load options */ + if (isset($attrs['dhcpOption'])){ + foreach ($attrs['dhcpOption'] as $opt){ + $idx= preg_replace('/\s.+$/', '', $opt); + $value= preg_replace('/^[^\s]+\s/', '', $opt); + $this->options[$idx]= $value; + } + } + + /* Load statements */ + if (isset($attrs['dhcpStatements'])){ + foreach ($attrs['dhcpStatements'] as $opt){ + $idx= preg_replace('/\s.+$/', '', $opt); + $value= preg_replace('/^[^\s]+\s/', '', $opt); + $this->statements[$idx]= $value; + } + } + + } else { + /* We keep the parent dn here if it's new */ + $this->dn= $attrs; + $this->new= TRUE; + } + + /* Load network module */ + $this->network= new dhcpNetwork(); + $this->network->options= $this->options; + $this->network->statements= $this->statements; + $this->advanced= new dhcpAdvanced(); + $this->advanced->options= $this->options; + $this->advanced->setAutoOptions(array("host-name")); + $this->advanced->statements= $this->statements; + $this->advanced->setAutoStatements(array("fixed-address")); + + /* Save CN for later reference */ + $this->orig_cn= $this->cn; + } + + function execute() + { + $smarty= get_smarty(); + $smarty->assign("cn", $this->cn); + $smarty->assign("range_start", $this->range_start); + $smarty->assign("range_stop", $this->range_stop); + + /* Show main page */ + $display= $smarty->fetch(get_template_path('dhcp_pool.tpl', TRUE)).$this->network->execute(); + + /* Merge arrays for advanced view */ + foreach (array("options", "statements") as $type){ + $tmp= array_merge($this->$type, $this->network->$type); + $this->advanced->$type= $tmp; + } + + $display.= $this->advanced->execute(); + + /* Merge back for removals */ + foreach (array("options", "statements") as $type){ + $this->$type= $this->advanced->$type; + $this->network->$type= $this->advanced->$type; + } + + /* Add footer */ + $display.= "
". + " 
"; + + return ($display); + } + + function remove_from_parent() + { + } + + + /* Save data to object */ + function save_object() + { + if (isset($_POST['cn'])){ + $this->cn= validate($_POST['cn']); + $this->range_start= validate($_POST['range_start']); + $this->range_stop= validate($_POST['range_stop']); + } + + /* Save sub-objects */ + $this->network->save_object(); + $this->advanced->save_object(); + + /* Merge arrays for advanced view */ + foreach (array("options", "statements") as $type){ + $tmp= array_merge($this->$type, $this->network->$type); + $this->advanced->$type= $tmp; + } + + /* Move range to internal variable */ + $this->dhcpRange= $this->range_start." ".$this->range_stop; + } + + + /* Check values */ + function check($cache) + { + $message= array(); + + /* All required fields are set? */ + if ($this->cn == ""){ + $message[]= _("Required field 'Name' is not filled."); + } + + /* cn already used? */ + if ($this->orig_cn != $this->cn || $this->new){ + + foreach($cache as $dn => $dummy){ + if (preg_match("/^cn=".$this->cn.",/", $dn) && count($dummy)){ + $message[]= _("The name for this section is already used!"); + break; + } + } + } + + if ($this->dhcpRange == ""){ + $message[]= _("Required field 'Range' is not filled."); + } + + if (!is_ip($this->range_start) || !is_ip($this->range_stop)){ + $message[]= _("Field 'Range' contains invalid IP addresses."); + } + + return $message; + } + + /* Save to LDAP */ + function save() + { + /* Merge arrays for network and advanced view */ + foreach (array("options", "statements") as $type){ + $tmp= array_merge($this->$type, $this->network->$type, $this->advanced->$type); + $this->$type= $tmp; + } + + /* Add cn if we're new */ + if ($this->new){ + $this->dn= "cn=".$this->cn.",".$this->dn; + } else { + $this->dn= "cn=".$this->cn.preg_replace('/^cn=[^,]+/', '', $this->dn); + } + + /* Assemble new entry - options */ + $this->attrs['dhcpOption']= array(); + if (isset ($this->options) && count ($this->options)){ + foreach ($this->options as $key => $val){ + $this->attrs['dhcpOption'][]= "$key $val"; + } + } + + /* Assemble new entry - statements */ + $this->attrs['dhcpStatements']= array(); + if (isset ($this->statements) && count ($this->statements)){ + foreach ($this->statements as $key => $val){ + $this->attrs['dhcpStatements'][]= "$key $val"; + } + } + + /* Move dn to the result */ + $this->attrs['dn']= $this->dn; + $this->attrs['cn']= array($this->cn); + $this->attrs['dhcpRange']= array($this->dhcpRange); + $this->attrs['objectClass']= array('top', 'dhcpPool'); + $this->attrs['MODIFIED']= TRUE; + + return ($this->attrs); + } + +} + +?> diff --git a/plugins/admin/systems/dhcp_pool.tpl b/plugins/admin/systems/dhcp_pool.tpl new file mode 100644 index 000000000..eea94b428 --- /dev/null +++ b/plugins/admin/systems/dhcp_pool.tpl @@ -0,0 +1,26 @@ +{* GOsa dhcp sharedNetwork - smarty template *} +

{t}Generic{/t}

+ + + + + +
+ {t}Name{/t}{$must}  + + + {t}Range{/t}{$must}  + +  -  + +
+ +

 

+ + + -- 2.30.2