OldApacheServerName = ""; $this->isNew = true; $this->InitialApacheServerName = "";//$attrs['InitialApacheServerName']; }else{ $this->VhostObject = $attrs; $this->OldApacheServerName = $attrs['apacheServerName']; $this->InitialApacheServerName = $attrs['InitialApacheServerName']; $this->isNew = false; foreach($this->attributes as $value){ if(isset($attrs[$value])){ $this->$value = $attrs[$value]; } } if(!isset($attrs['apacheServerAlias'])) $this->apacheServerAlias = array(); if(!isset($attrs['apacheScriptAlias'])) $this->apacheScriptAlias = array(); } } /* Transports the given Arraykey one position up*/ function ArrayUp($atr,$attrs) { $ret = $attrs; $pos = $atr ; $cn = count($attrs); if(!(($pos == -1)||($pos == 1)||($pos >$cn))){ $before = array_slice($attrs,0,($pos-2)); $mitte = array_reverse(array_slice($attrs,($pos-2),2)); $unten = array_slice($attrs,$pos); $ret = array(); $ret = $this->combineArrays($before,$mitte,$unten); } return($ret); } /* Transports the given Arraykey one position down*/ function ArrayDown($atr,$attrs) { $ret = $attrs; $pos = $atr ; $cn = count($attrs); if(!(($pos == -1)||($pos == $cn))){ $before = array_slice($attrs,0,($pos-1)); $mitte = array_reverse(array_slice($attrs,($pos-1),2)); $unten = array_slice($attrs,($pos+1)); $ret = array(); $ret = $this->combineArrays($before,$mitte,$unten); } return($ret); } /* Combine new array */ function combineArrays($ar0,$ar1,$ar2) { $ret = array(); if(is_array($ar0)) foreach($ar0 as $ar => $a){ $ret[]=$a; } if(is_array($ar1)) foreach($ar1 as $ar => $a){ $ret[]=$a; } if(is_array($ar2)) foreach($ar2 as $ar => $a){ $ret[]=$a; } return($ret); } function getpos($atr,$attrs) { $i = 0; foreach($attrs as $attr => $name) { $i++; if($attr == $atr){ return($i); } } return(-1); } function execute() { /* Call parent execute */ plugin::execute(); /* Fill templating stuff */ $smarty= get_smarty(); $display= ""; /* Open Vhost Entry Edit Dialog */ if(!count($this->VhostObject)){ $smarty->assign("AllowVhostEdit" , false); }else{ $smarty->assign("AllowVhostEdit" , true); if(isset($_POST['EditVhostEntries'])){ $this->dialog= new apacheVhostEditEntries($this->config,$this->dn,$this->VhostObject); } } /* Save Vhost Entry Edit Dialog */ if(isset($_POST['SaveVhostEntryChanges'])){ $this->dialog->save_object(); if(count($this->dialog->check())){ $msgs = $this->dialog->check(); foreach($msgs as $msg){ print_red($msg); } }else{ $this->dialog->save(); $this->dialog = false; } } /* Cancel Vhost Entrie Edit Dialog */ if(isset($_POST['CancelVhostEntryChanges'])){ $this->dialog = false; } /* Display any type of open dialogs */ if($this->dialog){ $this->dialog->save_object(); return($this->dialog->execute()); } $once =true; foreach($_POST as $name => $value){ if((preg_match("/^SAup_/",$name)) && ($once)){ $once = false; $id = preg_replace("/^SAup_/","",$name); $id = preg_replace("/_.*$/","",$id); $id = base64_decode($id); $this->apacheServerAlias = $this->ArrayUp(($id+1),$this->apacheServerAlias); } if((preg_match("/^SAdown_/",$name)) && ($once)){ $once = false; $id = preg_replace("/^SAdown_/","",$name); $id = preg_replace("/_.*$/","",$id); $id = base64_decode($id); $this->apacheServerAlias = $this->ArrayDown(($id+1),$this->apacheServerAlias); } if((preg_match("/^SAdel_/",$name)) && ($once)){ $once = false; $id = preg_replace("/^SAdel_/","",$name); $id = preg_replace("/_.*$/","",$id); $id = base64_decode($id); unset($this->apacheServerAlias[$id]); $tmp =array(); foreach($this->apacheServerAlias as $entry){ $tmp[] = $entry; } $this->apacheServerAlias = $tmp; } if((preg_match("/^SCup_/",$name)) && ($once)){ $once = false; $id = preg_replace("/^SCup_/","",$name); $id = preg_replace("/_.*$/","",$id); $id = base64_decode($id); $this->apacheScriptAlias = $this->ArrayUp(($id+1),$this->apacheScriptAlias); } if((preg_match("/^SCdown_/",$name)) && ($once)){ $once = false; $id = preg_replace("/^SCdown_/","",$name); $id = preg_replace("/_.*$/","",$id); $id = base64_decode($id); $this->apacheScriptAlias = $this->ArrayDown(($id+1),$this->apacheScriptAlias); } if((preg_match("/^SCdel_/",$name)) && ($once)){ $once = false; $id = preg_replace("/^SCdel_/","",$name); $id = preg_replace("/_.*$/","",$id); $id = base64_decode($id); unset($this->apacheScriptAlias[$id]); $tmp =array(); foreach($this->apacheScriptAlias as $entry){ $tmp[] = $entry; } $this->apacheScriptAlias = $tmp; } } if((isset($_POST['AddSARecord'])) && (!empty($_POST['StrSAAlias'])) && (!empty($_POST['StrSADir']))){ $this->apacheServerAlias[] = trim($_POST['StrSAAlias']." ".$_POST['StrSADir']); } if((isset($_POST['AddSCRecord'])) && (!empty($_POST['StrSCAlias'])) && (!empty($_POST['StrSCDir']))){ $this->apacheScriptAlias[] = trim($_POST['StrSCAlias']." ".$_POST['StrSCDir']); } /* Handle Post events */ $once = true; foreach($_POST as $name => $value){ /* Delete vhosts if requested */ if((preg_match("/RemoveRecord_/",$name))&&($once)){ $once = false; $id= preg_replace("/RemoveRecord_/","",$name); unset($this->Records[$id]); } } /* Add new Vhostrecord */ /* if(isset($_POST['AddNewRecord'])){ $this->Records[] = array("type"=>"aRecord","value"=>""); }*/ /* Fill in values */ foreach($this->attributes as $name){ $smarty->assign($name,$this->$name); } /* Set apacheServerNames without server suffix */ $smarty->assign("apacheServerName",$this->apacheServerName); $div = new DivSelectBox("apacheServerAlias"); $div->setHeight(120); $recs = $this->apacheServerAlias; $oneup = " "; $onedown = " "; $onedel = " "; foreach($recs as $key => $rec){ $div ->AddEntry(array( array("string"=>$rec), /* array("string"=>$key, "attach"=>"style='width:20px;'"),*/ array("string"=>str_replace("%s",base64_encode($key),$oneup.$onedown.$onedel), "attach"=>"style='width:70px;border-right:0px;'") )); } $smarty->assign("NotNew", false); $smarty->assign("apacheServerAlias", $div->DrawList()); $div = new DivSelectBox("apacheScriptAlias"); $div->setHeight(120); $recs = $this->apacheScriptAlias; $oneup = " "; $onedown = " "; $onedel = " "; foreach($recs as $key => $rec){ $div ->AddEntry(array( array("string"=>$rec), /* array("string"=>$key, "attach"=>"style='width:20px;'"),*/ array("string"=>str_replace("%s",base64_encode($key),$oneup.$onedown.$onedel), "attach"=>"style='width:70px;border-right:0px;'") )); } $smarty->assign("NotNew", false); $smarty->assign("apacheScriptAlias", $div->DrawList()); /* Display template */ $display.= $smarty->fetch(get_template_path('servApacheVhostEdit.tpl', TRUE)); return($display); } function remove_from_parent() { } /* Save data to object */ function save_object() { //plugin::save_object(); foreach($this->attributes as $attr){ if(isset($_POST[$attr])){ $this->$attr = $_POST[$attr]; } } } /* Check supplied data */ function check() { /* Call common method to give check the hook */ $message= plugin::check(); /* Check if apacheServerName is already in use */ $usedVhosts = $this->getUsedServerNames(); if(($this->isNew == true)||($this->apacheServerName != $this->InitialApacheServerName)){ /* if((isset($usedVhosts[$this->apacheServerName]))&&($this->apacheServerName != $this->InitialApacheServerName)){ $message[] =_("This apacheServerName is already in use"); } */ } if(!GetVhostsDomain($this->apacheServerName) || empty($this->apacheServerName)){ $message[] =sprintf(_("Please choose a valid Virtual Host Name.")); } if(!is_path($this->apacheDocumentRoot) || empty($this->apacheDocumentRoot)){ $message[] = _("Please choose a valid Path as Virtual Host Document Root."); } if(!is_email($this->apacheServerAdmin) || empty($this->apacheServerAdmin)){ $message[] = _("Please choose a valid Email Account as Admin Mail address."); } if($this->apacheServerName != strtolower($this->apacheServerName)){ $message[] = _("Only lowercase strings are allowed as Virtual Host Name."); } if($this->apacheDocumentRoot != strtolower($this->apacheDocumentRoot)){ $message[] = _("Only lowercase strings are allowed as Virtual Host Document Root."); } if($this->apacheServerAdmin != strtolower($this->apacheServerAdmin)){ $message[] = _("Only lowercase strings are allowed as Admin Mail address."); } foreach($this->apacheServerAlias as $key => $line){ $apacheServerAlias_ar=split(" ",$line); $url=$apacheServerAlias_ar[0]; if(!is_path($url)){ $message[] = sprintf(_("Please choose a valid Path as URL Alias Path in line: %s"),$line); } } foreach($this->apacheScriptAlias as $key => $line){ $apacheScriptAlias_ar=split(" ",$line); $url=$apacheScriptAlias_ar[0]; if(!is_path($url)){ $message[] = sprintf(_("Please choose a valid Path as URL Alias Path in line: %s"),$line); } } return ($message); } /* This funtion returns all used apacheServerNames */ function getUsedServerNames() { $ret = array(); $ldap = $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); $ldap->search("(&(objectClass=apacheConfig)(apacheServerName=*))",array("apacheServerName")); while($attr = $ldap->fetch()){ $ret[$attr['apacheServerName'][0]]=""; } return($ret); } /* Save to LDAP */ function save() { $ret =array(); foreach($this->attributes as $name){ $ret[$name] = $this->$name; } /* Create SA records */ foreach($this->apacheServerAlias as $key => $rec){ $rec['value']= $key." ".$rec['value']; $this->Records [] = $rec; } /* Create SC records */ foreach($this->apacheScriptAlias as $key => $rec){ $rec['value']= $key." ".$rec['value']; $this->Records [] = $rec; } $ret['RECORDS'] = $this->Records; $ret['InitialApacheServerName'] = $this->InitialApacheServerName; return($ret); } } ?>