[gosa.git] / branches / old / gosa-plugins / dhcp / admin / systems / services / dhcp / class_dhcpPool.inc
diff --git a/branches/old/gosa-plugins/dhcp/admin/systems/services/dhcp/class_dhcpPool.inc b/branches/old/gosa-plugins/dhcp/admin/systems/services/dhcp/class_dhcpPool.inc
--- /dev/null
@@ -0,0 +1,198 @@
+<?php
+/*
+ This code is part of GOsa (https://gosa.gonicus.de)
+ Copyright (C) 2003 Cajus Pollmeier
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+class dhcpPool extends dhcpPlugin
+{
+ /* Used attributes */
+ var $dhcpRange= "";
+ var $range_start= "";
+ var $range_stop= "";
+
+ /* attribute list for save action */
+ var $objectclasses= array('top', 'dhcpPool');
+
+ function dhcpPool($parent,$attrs)
+ {
+ dhcpPlugin::dhcpPlugin($parent,$attrs);
+
+ /* Load attributes */
+ if (!$this->new){
+ $this->dhcpRange= $attrs['dhcpRange'][0];
+ list($this->range_start, $this->range_stop)= preg_split('/\s+/', $this->dhcpRange);
+ }
+
+ $this->advanced->setAutoOptions(array("host-name"));
+ $this->advanced->setAutoStatements(array("fixed-address"));
+ }
+
+ function execute()
+ {
+ $smarty= get_smarty();
+ $smarty->assign("cn", $this->cn);
+ $smarty->assign("range_start", $this->range_start);
+ $smarty->assign("range_stop", $this->range_stop);
+
+ /* Assign ACLs */
+ $smarty->assign("acl",$this->parent->getacl(""));
+
+ /* Show main page */
+ $display= $smarty->fetch(get_template_path('dhcp_pool.tpl', TRUE, dirname(__FILE__))).$this->network->execute();
+
+ /* Merge arrays for advanced view */
+ $this->fix_options();
+ foreach (array("options", "statements") as $type){
+ $this->advanced->$type= $this->$type + $this->network->$type;;
+ }
+
+ $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.= "<div style='width:100%;text-align:right;margin-top:5px;'>";
+ if(preg_match("/w/",$this->parent->getacl(""))){
+ $display.= "<input type=submit name='save_dhcp' value='".msgPool::saveButton()."'> ";
+ }
+ $display.= "<input type=submit name='cancel_dhcp' value='".msgPool::cancelButton()."'>";
+ $display.= "</div>";
+
+ return ($display);
+ }
+
+ function remove_from_parent()
+ {
+ }
+
+
+ /* Save data to object */
+ function save_object()
+ {
+ if (isset($_POST['cn'])){
+ $this->cn= validate(get_post('cn'));
+ $this->range_start= validate(get_post('range_start'));
+ $this->range_stop= validate(get_post('range_stop'));
+ }
+
+ dhcpPlugin::save_object();
+
+ /* Move range to internal variable */
+ $this->dhcpRange= $this->range_start." ".$this->range_stop;
+ }
+
+
+ /* Check values */
+ function check()
+ {
+ $message= array();
+
+ $cache = $this->parent->dhcpObjectCache;
+
+ /* All required fields are set? */
+ if ($this->cn == ""){
+ $message[]= msgPool::required(_("Name"));
+ }
+
+ /* 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[]= msgPool::duplicated(_("Name"));
+ break;
+ }
+ }
+ }
+
+ if ($this->dhcpRange == ""){
+ $message[]= msgPool::required(_("Range"));
+ }
+
+ if (!tests::is_ip($this->range_start) || !tests::is_ip($this->range_stop)){
+ $message[]= msgPool::invalid(_("Range"));
+ }
+
+ if(!tests::is_ip_range($this->range_start,$this->range_stop)){
+ $message[]= msgPool::invalid(_("Range"));
+ }
+
+ /* Check if range is in the network */
+ $dn= $this->dn;
+ while (preg_match('/,/', $dn)){
+ $type= $this->objectType($cache, $dn);
+
+ /* Check for subnet */
+ if ($type == 'dhcpSubnet'){
+ $network= $cache[$dn]['cn'][0];
+ $netmask= normalize_netmask($cache[$dn]['dhcpNetMask'][0]);
+ if (!tests::is_in_network($network, $netmask, $this->range_start) ||
+ !tests::is_in_network($network, $netmask, $this->range_stop)){
+ $message[] = _("'Range' is not inside the configured network.");
+ }
+ }
+
+ /* Stop if we've examined the service base object */
+ if ($type == 'dhcpService'){
+ break;
+ }
+ $dn= preg_replace('/^[^,]+,/', '', $dn);
+ }
+
+ /* Check external plugins */
+ $net= $this->network->check();
+ $adv= $this->advanced->check();
+ $message= array_merge($message, $net, $adv);
+
+ return $message;
+ }
+
+ /* Save to LDAP */
+ function save()
+ {
+ dhcpPlugin::save();
+ $this->attrs['dhcpRange']= array($this->dhcpRange);
+
+ return ($this->attrs);
+ }
+
+
+ function objectType($cache, $dn)
+ {
+ $type= "";
+ $types= array("dhcpService", "dhcpClass", "dhcpSubClass", "dhcpHost",
+ "dhcpGroup", "dhcpPool", "dhcpSubnet", "dhcpSharedNetwork");
+
+ foreach ($cache[$dn]['objectClass'] as $oc){
+ if (in_array($oc, $types)){
+ $type= $oc;
+ break;
+ }
+ }
+
+ return ($type);
+ }
+
+
+}
+
+?>