"Eins ist toll", "zwei" => "Zwei ist noch besser");
/* This plugin only writes its objectClass */
var $objectclasses = array("goShareServer");
var $attributes = array("goExportEntry");
var $StatusFlag = "goShareServerStatus";
/* This class can't be assigned twice so it conflicts with itsself */
var $conflicts = array("goShareServer");
var $DisplayName = "";
var $dn = NULL;
var $cn = "";
var $goShareServerStatus = "";
var $goExportEntry = array();
var $allow_mounts = false;
var $mounts_to_remove = array();
var $mounts_to_add = array();
function goShareServer($config,$dn)
{
plugin::plugin($config,$dn);
$this->DisplayName = _("File service");
$tmp =array();
if(isset($this->attrs['goExportEntry'])){
if(isset($this->attrs['goExportEntry']['count'])){
for($i= 0; $i<$this->attrs['goExportEntry']['count']; $i++){
$entry= $this->attrs['goExportEntry'][$i];
$tmp[preg_replace('/\|.*$/', '', $entry)]= $entry;
}
}
}
$this->goExportEntryList = $tmp;
$ldap = $this->config->get_ldap_link();
$avl_objectclasses = $ldap->get_objectclasses();
if (isset($avl_objectclasses["mount"])) {
$this->allow_mounts = true;
}
}
function execute()
{
$smarty = get_smarty();
if((isset($_POST['DelNfsEnt']))&&(isset($_POST['goExportEntryList'])) && ($this->acl_is_writeable("name"))){
if($this->allow_mounts){
foreach($_POST['goExportEntryList'] as $entry){
$this->deleteFromMountList($this->goExportEntryList[$entry]);
}
}
foreach($_POST['goExportEntryList'] as $entry){
$this->deleteFromList($entry);
}
}
if(isset($_POST['NewNfsAdd']) && ($this->acl_is_writeable("name"))){
$this->oldone = NULL;
$this->o_subWindow = new servnfs($this->config, $this);
$this->o_subWindow->set_acl_category("server");
$this->o_subWindow->set_acl_base($this->dn);
$this->dialog = true;
}
if((isset($_POST['NewNfsEdit']))&&(isset($_POST['goExportEntryList']))){
$entry = $this->goExportEntryList[$_POST['goExportEntryList'][0]];
$add_mount=isset($this->mounts_to_add[$entry]);
$this->oldone=$entry;
$this->o_subWindow = new servnfs($this->config,$this,$entry,$add_mount);
$this->o_subWindow->set_acl_base($this->dn);
$this->o_subWindow->set_acl_category("server");
$this->dialog = true;
}
if(isset($this->o_subWindow)){
$this->o_subWindow->save_object(TRUE);
}
/* Save NFS setup */
if(isset($_POST['NFSsave'])){
if(count($this->o_subWindow->check())>0){
foreach($this->o_subWindow->check() as $msg) {
print_red($msg);
}
}else{
$this->o_subWindow->save_object();
$newone = $this->o_subWindow->save();
$this->addToList($newone);
if($this->allow_mounts){
if($this->oldone) {
$this->deleteFromMountList($this->oldone);
}
if ($this->o_subWindow->should_create_mount()) {
$this->addToMountList($newone);
}
}
unset($this->o_subWindow);
$this->dialog = false;
}
}
/* Cancel NFS setup */
if(isset($_POST['NFScancel'])){
$this->oldone = NULL;
unset($this->o_subWindow);
$this->dialog = false;
}
/* Execute NFS setup dialog*/
if(isset($this->o_subWindow)){
return $this->o_subWindow->execute();
}
foreach($this->attributes as $attr){
$smarty->assign($attr,$this->$attr);
}
/* Set acls */
$tmp = $this->plInfo();
foreach($tmp['plProvidedAcls'] as $name => $translated){
$smarty->assign($name."ACL",$this->getacl($name));
}
$smarty->assign("createable",$this->acl_is_createable());
$smarty->assign("removeable",$this->acl_is_removeable());
$tellSmarty= array();
ksort($this->goExportEntryList);
foreach($this->goExportEntryList as $name=>$values){
$tmp = split("\|",$values);
$tellSmarty[$name] = $tmp[0]." ".$tmp[4]." (".$tmp[2].")";
}
$smarty->assign("goExportEntry",array_keys($tellSmarty));
$smarty->assign("goExportEntryKeys",($tellSmarty));
return($smarty->fetch(get_template_path("goShareServer.tpl",TRUE,dirname(__FILE__))));
}
function getListEntry()
{
$fields = goService::getListEntry();
$fields['Message'] = _("File service (Shares)");
$fields['AllowEdit'] = true;
return($fields);
}
function save()
{
plugin::save();
/* Arrays */
foreach (array("goExportEntryList"=>"goExportEntry") as $source => $destination){
$this->attrs[$destination]= array();
foreach ($this->$source as $element){
$this->attrs[$destination][]= $element;
}
}
/* Process netatalk mounts */
if($this->allow_mounts) {
$this->process_mounts();
}
/* Check if this is a new entry ... add/modify */
$ldap = $this->config->get_ldap_link();
$ldap->cat($this->dn,array("objectClass"));
if($ldap->count()){
$ldap->cd($this->dn);
$ldap->modify($this->attrs);
}else{
$ldap->cd($this->dn);
$ldap->add($this->attrs);
}
show_ldap_error($ldap->get_error(), sprintf(_("Saving of system server/shares with dn '%s' failed."),$this->dn));
if($this->initially_was_account){
$this->handle_post_events("modify");
}else{
$this->handle_post_events("add");
}
}
function check()
{
$message = plugin::check();
return($message);
}
function save_object()
{
if(isset($_POST['goShareServerPosted'])){
plugin::save_object();
}
}
function addToList($entry){
$key = key($entry);
$this->goExportEntryList[$key]=$entry[$key];
}
function deleteFromList($id)
{
/* Check if the share is used by someone */
$ldap = $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
$ldap->search("(|(gotoProfileServer=*|$id)(gotoShare=*|$id|*))", array("cn"));
$cnt= $ldap->count();
if ($cnt){
$msg= sprintf(_("The share can't be removed since it is still used by %d users:"), $cnt);
$msg.= "