Code

* Created "old" branch and moved stuff
[gosa.git] / branches / old / gosa-plugins / gofax / gofax / blocklists / class_blocklistManagement.inc
diff --git a/branches/old/gosa-plugins/gofax/gofax/blocklists/class_blocklistManagement.inc b/branches/old/gosa-plugins/gofax/gofax/blocklists/class_blocklistManagement.inc
new file mode 100644 (file)
index 0000000..d7265ab
--- /dev/null
@@ -0,0 +1,514 @@
+<?php
+class blocklist extends plugin
+{
+  /* Definitions */
+  var $plHeadline= "FAX blocklists";
+  var $plDescription= "This does something";
+  var $plIcon = "plugins/gofax/images/blocklists.png";
+
+  var $blocklists       = array();
+  var $DivListBlocklist = NULL;
+  var $CopyPasteHandler = NULL;
+  var $dns              = array();
+  var $start_pasting_copied_objects = FALSE;
+
+  var $acl_module = array("gofaxlist");
+  
+  function blocklist (&$config, $ui)
+  {
+    $this->ui     = $ui;
+    $this->dn     = "";
+    $this->config = &$config;
+    $this->base  = session::get('CurrentMainBase'); 
+    $this->DivListBlocklist = new divListBlocklist($this->config,$this);
+
+    /* Initialize copy&paste queue */
+    if ($this->config->boolValueIsTrue("main", "copyPaste")){
+      $this->CopyPasteHandler= new CopyPasteHandler($this->config);
+    }
+  }
+
+
+  function execute()
+  {
+    /* Call parent execute */
+    plugin::execute();
+
+    session::set('LOCK_VARS_TO_USE',array("/^menu_action/","/^goFaxBlocklist_/","/^act$/","/^id$/","/^remove_multiple_blocklists/","/^item_selected/"));
+
+    /***************
+      Init vars 
+     ***************/
+
+    /* Get global smarty instance */
+    $smarty       = get_smarty();
+    $s_action     = "";                       // Contains the action to proceed
+    $s_entry      = "";                       // The value for s_action
+    $base_back    = "";                       // The Link for Backbutton
+
+
+    /***************
+      Fetch posts 
+     ***************/
+
+    /* Test Posts */
+    foreach($_POST as $key => $val){
+      // Post for delete
+      if(preg_match("/^goFaxBlocklist_del.*/",$key)){
+        $s_action = "del";
+        $s_entry  = preg_replace("/^goFaxBlocklist_del_/i","",$key);
+        // Post for edit
+      }elseif(preg_match("/^goFaxBlocklist_edit_.*/",$key)){
+        $s_action="edit";
+        $s_entry  = preg_replace("/^goFaxBlocklist_edit_/i","",$key);
+        // Post for new
+      }elseif(preg_match("/^goFaxBlocklist_new.*/",$key)){
+        $s_action="new";
+      }elseif(preg_match("/^remove_multiple_blocklists/",$key)){
+        $s_action="del_multiple";
+      }elseif(preg_match("/^copy/",$key)){
+        $s_action = "copy";
+        $s_entry= preg_replace("/^copy_/i", "", $key);
+      }elseif(preg_match("/^cut/",$key)){
+        $s_action = "cut";
+        $s_entry= preg_replace("/^cut_/i", "", $key);
+      }
+
+    }
+    if((isset($_GET['act']))&&($_GET['act']=="edit_entry")){
+      $s_action ="edit";
+      $s_entry  = $_GET['id'];
+    }
+
+    $s_entry  = preg_replace("/_.$/","",$s_entry);
+
+
+    /* handle C&P from layers menu */
+    if(isset($_POST['menu_action']) && preg_match("/^multiple_copy_systems/",$_POST['menu_action'])){
+      $s_action = "copy_multiple";
+    }
+    if(isset($_POST['menu_action']) && preg_match("/^multiple_cut_systems/",$_POST['menu_action'])){
+      $s_action = "cut_multiple";
+    }
+    if(isset($_POST['menu_action']) && preg_match("/^editPaste/",$_POST['menu_action'])){
+      $s_action = "editPaste";
+    }
+
+
+    /* Create options */
+    if(isset($_POST['menu_action']) && $_POST['menu_action'] == "goFaxBlocklist_new"){
+      $s_action = "new";
+    }
+
+    /* handle remove from layers menu */
+    if(isset($_POST['menu_action']) && preg_match("/^remove_multiple/",$_POST['menu_action'])){
+      $s_action = "del_multiple";
+    }
+
+
+    /***************
+      Handle copy & paste  
+     ***************/
+
+    $ret = $this->copyPasteHandling_from_queue($s_action,$s_entry);
+    if($ret){
+      return($ret);
+    }
+
+
+    /***************
+      Cancel some dialogs  
+     ***************/
+
+    /* Cancel dialog */
+    if (isset($_POST['edit_cancel']) || 
+        isset($_POST['delete_blocklist_cancel']) ||
+        isset($_POST['delete_lock'])){
+
+      $this->remove_lock();
+      $this->dialog = NULL;
+      session::un_set('objectinfo');
+    }
+
+
+    /***************
+      Save blocklist 
+     ***************/
+
+    /* What about finish? */
+    if (isset($_POST['edit_finish']) || isset($_POST['edit_apply'])){
+
+      /* No errors, save object */
+      $this->dialog->save_object();
+      $message= $this->check();
+      if (count ($message) == 0){
+
+        $this->dialog->save ();
+
+        if (!isset($_POST['edit_apply'])){
+          $this->remove_lock();
+          $this->dn= "";
+          $this->dialog = NULL;
+          session::un_set('objectinfo');
+        }else{
+
+          /* Reinitialize tab */
+          if($this->dialog instanceof tabs){
+            $this->dialog->re_init();
+          }
+        }
+      } else {
+        /* Errors found, show message */
+        msg_dialog::displayChecks($message);
+      }
+    }
+
+
+    /***************
+      Create a new blocklist (dialog)
+     ***************/
+
+    /* Create new blocklist? */
+    if ($s_action=="new"){
+      $this->dn= "new";
+      $this->dialog = new faxblocktabs($this->config,$this->config->data['TABS']['FAXBLOCKTABS'],$this->dn);
+      $this->dialog->set_acl_base($this->base);
+    }
+
+
+    /***************
+      Edit blocklist 
+     ***************/
+
+    if ($s_action=="edit" && !is_object($this->dialog)){
+
+      $this->dn=$this->blocklists[$s_entry]['dn'];
+
+      if (($user= get_lock($this->dn)) != ""){
+        return(gen_locked_message($user, $this->dn));
+      }else{
+        add_lock ($this->dn, $this->ui->dn);
+      }
+      session::set('objectinfo',trim($this->dn));
+      $this->dialog = new faxblocktabs($this->config,$this->config->data['TABS']['FAXBLOCKTABS'],$this->dn);
+      $this->dialog->set_acl_base($this->dn);
+    }    
+
+
+    /***************
+      Display dialog  
+     ***************/
+
+    if(is_object($this->dialog) && ($this->dialog instanceof faxblocktabs)){
+      $this->dialog->save_object();
+      return($this->dialog->execute());
+    }
+
+
+    /********************
+      Delete MULTIPLE entries requested, display confirm dialog
+     ********************/
+
+    if ($s_action=="del_multiple"){
+
+      $this->dns = array();
+      $ids = $this->list_get_selected_items();
+
+      if(count($ids)){
+        $disallowed = array();
+        foreach($ids as $id){
+          $dn = $this->blocklists[$id]['dn'];
+          $acl = $this->ui->get_permissions($dn, "gofaxlist/blocklistGeneric");
+          if(preg_match("/d/",$acl)){
+            $this->dns[$id] = $dn;
+          }else{
+            $disallowed[] = $dn;
+          }
+        }
+
+        if(count($disallowed)){
+          msg_dialog::display(_("Permission"),msgPool::permDelete($disallowed),INFO_DIALOG);
+        }
+
+        if(count($this->dns)){
+
+          if ($user= get_multiple_locks($this->dns)){
+            return(gen_locked_message($user,$this->dns));
+          }
+
+          $dns_names = array();
+          foreach($this->dns as $dn){
+            $dns_names[]=@LDAP::fix( $dn);
+          }
+          add_lock ($this->dns, $this->ui->dn);
+
+          /* Lock the current entry, so nobody will edit it during deletion */
+          $smarty->assign("info", msgPool::deleteInfo($dns_names,_("blocklist")));
+          $smarty->assign("multiple", true);
+          return($smarty->fetch(get_template_path('remove.tpl', TRUE)));
+        }
+      }
+    }
+
+
+    /********************
+      Delete MULTIPLE entries confirmed
+     ********************/
+
+    /* Confirmation for deletion has been passed. */
+    if (isset($_POST['delete_multiple_blocklist_confirm'])){
+
+      /* Remove user by user and check acls before removeing them */
+      foreach($this->dns as $key => $dn){
+        $this->dn = $dn;
+        if (preg_match("/d/",$this->ui->get_permissions($this->dn,"gofaxlist/blocklistGeneric"))){
+          $this->dialog = new faxblocktabs($this->config,$this->config->data['TABS']['FAXBLOCKTABS'],$this->dn);
+          $this->dialog->delete();
+          $this->dialog = NULL;
+        } else {
+          msg_dialog::display(_("Permission error"), msgPool::permDelete($dn), ERROR_DIALOG);
+        }
+        /* Remove lock file after successfull deletion */
+      }
+      $this->remove_lock();
+      $this->dns = array();
+      $this->reload();
+    }
+
+
+    /********************
+      Delete MULTIPLE entries Canceled
+     ********************/
+
+    /* Remove lock */
+    if(isset($_POST['delete_multiple_blocklist_cancel'])){
+      foreach($this->dns as $key => $dn){
+        $this->remove_lock();
+        unset($this->dns[$key]);
+      }
+    }
+
+
+    /***************
+      Remove blocklist
+     ***************/
+
+    /* Delete blocklist requested */
+    if ($s_action=="del"){
+      $this->dn=$this->blocklists[$s_entry]['dn'];
+
+      /* Check locking */
+      if (($user= get_lock($this->dn)) != ""){
+        session::set('dn',$this->dn);
+        return(gen_locked_message($user, $this->dn));
+      } else {
+
+        // Lock this dn for editing
+        add_lock ($this->dn, $this->ui->dn);
+        $smarty->assign("info", msgPool::deleteInfo(@LDAP::fix($this->dn),_("blocklist")));
+        $smarty->assign("multiple", false);
+        return($smarty->fetch(get_template_path('remove.tpl', TRUE)));
+      }
+    }
+
+
+    /***************
+      Remove blocklist confirmed
+     ***************/
+
+    /* Finally delete blocklist */
+    if (isset($_POST['delete_blocklist_confirm'])){
+      if (preg_match("/d/",$this->ui->get_permissions($this->dn,"gofaxlist/blocklistGeneric"))){
+        $this->dialog = new faxblocktabs($this->config,$this->config->data['TABS']['FAXBLOCKTABS'],$this->dn);
+        $this->dialog->delete();
+        $this->dialog = NULL;
+        $this->remove_lock();
+      } else {
+        msg_dialog::display(_("Permission error"), msgPool::permDelete(), ERROR_DIALOG);
+      }
+    }
+
+    /***************
+      Divlist dialog 
+     ***************/
+
+    /* Check if there is a snapshot dialog open */
+    $base = $this->DivListBlocklist->selectedBase;
+    if($str = $this->showSnapshotDialog($base,$this->get_used_snapshot_bases(),$this)){
+      return($str);
+    }
+
+    /* Display dialog with system list */
+    $this->DivListBlocklist->parent = $this;
+    $this->DivListBlocklist->execute();
+
+    /* Add departments if subsearch is disabled */
+    if(!$this->DivListBlocklist->SubSearch){
+      $this->DivListBlocklist->AddDepartments($this->DivListBlocklist->selectedBase,3,1);
+    }
+    $this->reload();
+    $this->DivListBlocklist->setEntries($this->blocklists);
+    return($this->DivListBlocklist->Draw());
+  }
+
+
+  function list_get_selected_items()
+  {
+    $ids = array();
+    foreach($_POST as $name => $value){
+      if(preg_match("/^item_selected_[0-9]*$/",$name)){
+        $id   = preg_replace("/^item_selected_/","",$name);
+        $ids[$id] = $id;
+      }
+    }
+    return($ids);
+  }
+
+
+  /* Return departments, that will be included within snapshot detection */
+  function get_used_snapshot_bases()
+  {
+    return(array(get_ou('blocklistou').$this->DivListBlocklist->selectedBase));
+  }
+
+
+  /* Reload the list of known blocklists */
+  function reload()
+  {
+    /* Init some vars */
+    $filter = $filter2      = "";
+    $base                   = $this->DivListBlocklist->selectedBase;
+    $Regex                  = $this->DivListBlocklist->Regex;
+    $SubSearch              = $this->DivListBlocklist->SubSearch;
+    $ShowSendBocklists      = $this->DivListBlocklist->ShowSendBocklists;
+    $ShowReceiveBlocklists  = $this->DivListBlocklist->ShowReceiveBlocklists;
+    $Flags                  = GL_SIZELIMIT;
+    $res = $res2            = array();
+
+    /* Append subsearch to Flags */
+    if($SubSearch){
+      $Flags |= GL_SUBSEARCH;
+    }else{
+      $base = get_ou('blocklistou').$base;
+    }  
+
+    /* Create filter */
+    if ($ShowSendBocklists){
+      $filter = "(&(objectClass=goFaxSBlock)(|(cn=".$Regex.")(goFaxSBlocklist=".$Regex.")))";
+      $res= get_list($filter, "gofaxlist", $base,array("*"), $Flags);
+    }
+    if ($ShowReceiveBlocklists){
+      $filter2= "(&(objectClass=goFaxRBlock)(|(cn=".$Regex.")(goFaxRBlocklist=".$Regex.")))";
+      $res2= get_list($filter2, "gofaxlist", $base,array("*"), $Flags);
+    }
+
+    $this->blocklists = array_merge($res,$res2);
+
+    /* appen && sort */
+    $tmp=array();
+    foreach($this->blocklists as $tkey => $val ){
+
+      $acl = $this->ui ->get_permissions($base,"gofaxlist/blocklist");
+      if(preg_match("/r/",$acl)){
+        $tmp[strtolower($val['cn'][0]).$val['cn'][0]]=$val;
+      }
+    }
+    ksort($tmp);
+    $this->blocklists=array();
+    foreach($tmp as $val){
+      $this->blocklists[]=$val;
+    }
+    reset ($this->blocklists);
+  }
+
+
+  /* Save data to object */
+  function save_object()
+  {
+    $this->DivListBlocklist->save_object();
+    if(is_object($this->CopyPasteHandler)){
+      $this->CopyPasteHandler->save_object();
+    }
+  }
+
+
+
+
+
+  function copyPasteHandling_from_queue($s_action,$s_entry)
+  {
+    /* Check if Copy & Paste is disabled */
+    if(!is_object($this->CopyPasteHandler)){
+      return("");
+    }
+
+    $ui = get_userinfo();
+
+    /* Add a single entry to queue */
+    if($s_action == "cut" || $s_action == "copy"){
+      /* Cleanup object queue */
+      $this->CopyPasteHandler->cleanup_queue();
+      $dn = $this->blocklists[$s_entry]['dn'];
+      if($s_action == "copy" && $ui->is_copyable($dn,"gofaxlist","blocklistGeneric")){ 
+        $this->CopyPasteHandler->add_to_queue($dn,$s_action,"faxblocktabs","FAXBLOCKTABS","gofaxlist");
+      }
+      if($s_action == "cut" && $ui->is_cutable($dn,"gofaxlist","blocklistGeneric")){
+        $this->CopyPasteHandler->add_to_queue($dn,$s_action,"faxblocktabs","FAXBLOCKTABS","gofaxlist");
+      }
+    }
+
+    /* Add entries to queue */
+    if($s_action == "copy_multiple" || $s_action == "cut_multiple"){
+
+      /* Cleanup object queue */
+      $this->CopyPasteHandler->cleanup_queue();
+
+      /* Add new entries to CP queue */
+      foreach($this->list_get_selected_items() as $id){
+        $dn = $this->blocklists[$id]['dn'];
+
+        if($s_action == "copy_multiple" && $ui->is_copyable($dn,"gofaxlist","blocklistGeneric")){ 
+          $this->CopyPasteHandler->add_to_queue($dn,"copy","faxblocktabs","FAXBLOCKTABS","gofaxlist");
+        }
+        if($s_action == "cut_multiple" && $ui->is_cutable($dn,"gofaxlist","blocklistGeneric")){
+          $this->CopyPasteHandler->add_to_queue($dn,"cut","faxblocktabs","FAXBLOCKTABS","gofaxlist");
+        }
+      }
+    }
+
+    /* Start pasting entries */
+    if($s_action == "editPaste"){
+      $this->start_pasting_copied_objects = TRUE;
+    }
+
+    /* Return C&P dialog */
+    if($this->start_pasting_copied_objects && $this->CopyPasteHandler->entries_queued()){
+
+      /* Get dialog */
+      $this->CopyPasteHandler->SetVar("base",$this->DivListBlocklist->selectedBase);
+      $data = $this->CopyPasteHandler->execute();
+
+      /* Return dialog data */
+      if(!empty($data)){
+        return($data);
+      }
+    }
+
+    /* Automatically disable status for pasting */
+    if(!$this->CopyPasteHandler->entries_queued()){
+      $this->start_pasting_copied_objects = FALSE;
+    }
+    return("");
+  }
+
+
+  /*! \brief Remove entry locks if the plugin was aborted. 
+   */
+  function remove_lock()
+  {
+    if($this->dn) del_lock($this->dn);
+    if(is_array($this->dns) && count($this->dns)) del_lock($this->dns);
+  }
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>