Code

Updated deamon
[gosa.git] / gosa-core / include / class_gosaSupportDaemon.inc
index b3b66fd7864a182b84eecbf154fabb7dd9dd2b85..2e04ab0399e0243dbbe4d1ec0f9ef0dc26f492f3 100644 (file)
@@ -1,5 +1,26 @@
 <?php
 
+
+/*
+   __construct        - Create a new deamon handle. 
+   connect            - Connect to deamon socket.
+   disconnect         - Disconnect from socket.
+   set_error          - Sets a new error.
+   is_error           - Returns TRUE if there was an error.
+   get_error          - Returns the last error or "".
+   get_queued_entries - Returns all queued entries, with limitations.
+   ids_exist          - Checks if the given id exists.
+   get_entries_by_id  - Returns a set of entries.
+   id_exists          - Checks if a set entries exists.
+   get_entry_by_id    - Returns a single entry.
+   remove_entries     - Remove a set of entries.
+   remove_entry       - Removes a single entry.
+   update_entry       - Updates a single entry.
+   xml_to_array       - XML to Array. 
+*/
+
+
+
 class gosaSupportDaemon
 {
   private $o_sock       = NULL;
@@ -15,11 +36,11 @@ class gosaSupportDaemon
 
 
   /*! \brief  Creates a new gosaSupportDaemon object.
-      @param string   Host    The Host where the deamon is running on.  
-      @param integer  Port    The port which the deamon use.
-      @param string   Key     The encryption string.
-      @param boolean  Connect Directly connect to deamon socket.
-      @param float    Timeout The timelimit for all socket actions.
+    @param string   Host    The Host where the deamon is running on.  
+    @param integer  Port    The port which the deamon use.
+    @param string   Key     The encryption string.
+    @param boolean  Connect Directly connect to deamon socket.
+    @param float    Timeout The timelimit for all socket actions.
    */
   public function __construct($host,$port,$key="secret-gosa-password",$connect=TRUE,$timeout=0.2)
   {
@@ -34,7 +55,7 @@ class gosaSupportDaemon
 
 
   /*! \brief  Establish deamon connection. 
-      @return boolean Returns true if the connection was succesfully established. 
+    @return boolean Returns true if the connection was succesfully established. 
    */
   public function connect()
   {
@@ -59,7 +80,7 @@ class gosaSupportDaemon
 
 
   /*! \brief  Sets an error message, which can be returned with get_error().
-      @param  string  The Error message,
+    @param  string  The Error message,
    */
   private function set_error($str)
   {
@@ -69,7 +90,7 @@ class gosaSupportDaemon
 
 
   /*! \brief  Checks if an error occured.
-      @return boolean returns TRUE or FALSE, whether there is an error or not.
+    @return boolean returns TRUE or FALSE, whether there is an error or not.
    */
   public function is_error()
   {
@@ -78,7 +99,7 @@ class gosaSupportDaemon
 
 
   /*! \brief  Returns the last error. 
-      @return Returns the last error.
+    @return Returns the last error.
    */
   public function get_error()
   {
@@ -87,30 +108,29 @@ class gosaSupportDaemon
 
 
   /*! \brief  Returns an array containing all queued entries.
-      @return Array All queued entries as an array.
+    @return Array All queued entries as an array.
    */
   public function get_queued_entries($from=0,$to=10)
   {
     $this->b_error = FALSE;
     $this->s_error = "";
 
-
     $xml_msg = "<xml>
-                  <header>gosa_query_jobdb</header>
-                  <where>
-                    <clause>
-                      <connector>and</connector>
-                      <phrase>
-                        <operator>gt</operator>
-                        <ROWID>".$from."</ROWID>
-                      </phrase>
-                      <phrase>
-                        <operator>lt</operator>
-                        <ROWID>".$to."</ROWID>
-                      </phrase>
-                    </clause>
-                  </where>
-                </xml>";
+      <header>gosa_query_jobdb</header>
+      <where>
+      <clause>
+      <connector>and</connector>
+      <phrase>
+      <operator>gt</operator>
+      <ROWID>-1</ROWID>
+      </phrase>
+      </clause>
+      </where>
+      <limit>
+      <from>".$from."</from>
+      <to>".$to."</to>
+      </limit>
+      </xml>";
 
     $this->connect();
     if($this->is_connected){
@@ -136,31 +156,130 @@ class gosaSupportDaemon
     return;
   }
 
+  /*! \brief  Checks if the given ids are used queue ids.
+    @param  Array   The ids we want to check..
+    @return Array   An array containing all ids as index and TRUE/FALSE as value. 
+   */
+  public function ids_exist($ids)
+  {
+    if(!is_array($ids)){
+      trigger_error("Requires an array as parameter.");
+      return;
+    }
+    $this->b_error = FALSE;
+    $this->s_error = "";
+
+    $ret = array();
+
+    $xml_msg = "<xml>
+      <header>gosa_query_jobdb</header>
+      <where>
+      <clause>
+      <connector>or</connector>";
+    foreach($ids as $id){
+      $xml_msg .= "<phrase>
+        <operator>eq</operator>
+        <id>".$id."</id>
+        </phrase>";
+    }
+    $xml_msg .= "</clause>
+      </where>
+      </xml>";
+
+    $this->connect();
+    if(!$this->is_connected){
+      $this->set_error("Could not establish socket connection.");
+    }else{
+      $this->o_sock->write($xml_msg);
+      $str = trim($this->o_sock->read());
+      $entries = $this->xml_to_array($str); 
+      if(isset($entries['XML'])){
+        foreach($entries['XML'] as $entry){
+          $ret[] = $entry['ID'];
+        }
+        $this->disconnect();
+        return($ret);
+      }
+    }
+    $this->disconnect();
+    return(FALSE);
+  }
+
+
+  /*! \brief  Returns an entry containing all requested ids.
+    @param  Array   The IDs of the entries we want to return.
+    @return Array   Of the requested entries. 
+   */
+  public function get_entries_by_id($ids)
+  {
+    if(!is_array($ids)){
+      trigger_error("Requires an array as parameter.");
+      return;
+    }
+    $this->b_error = FALSE;
+    $this->s_error = "";
+
+    $ret = array();
+
+    $xml_msg = "<xml>
+      <header>gosa_query_jobdb</header>
+      <where>
+      <clause>
+      <connector>or</connector>";
+    foreach($ids as $id){
+      $xml_msg .= "<phrase>
+        <operator>eq</operator>
+        <id>".$id."</id>
+        </phrase>";
+      $ret[$id] = FALSE;
+    }
+    $xml_msg .= "</clause>
+      </where>
+      </xml>";
+
+    $this->connect();
+    if(!$this->is_connected){
+      $this->set_error("Could not establish socket connection.");
+    }else{
+      $this->o_sock->write($xml_msg);
+      $str = trim($this->o_sock->read());
+      $entries = $this->xml_to_array($str); 
+      if(!isset($entries['XML'])){
+        $this->set_error("Entry with id (".$id.") not found.");
+        $this->disconnect();
+      }else{
+        $ret = $entries['XML'];
+        return($ret);
+      }
+    }
+    return;
+  }
+
 
   /*! \brief  Checks if the given id is in use.
-      @param  Integer The ID of the entry.
-      @return Boolean TRUE if entry exists. 
+    @param  Integer The ID of the entry.
+    @return Boolean TRUE if entry exists. 
    */
   public function id_exists($id)
   {
     if(!is_numeric($id)){
-      trigger_error("gosaSupportDaemon::get_entry() requires an integer value as ID parameter.");
+      trigger_error("Requires an integer as parameter.");
       return;
     }
 
     $this->b_error = FALSE;
     $this->s_error = "";
     $xml_msg = "<xml>
-                  <header>gosa_query_jobdb</header>
-                  <where>
-                    <clause>
-                      <phrase>
-                        <operator>eq</operator>
-                        <id>".$id."</id>
-                      </phrase>
-                    </clause>
-                  </where>
-                </xml>";
+      <header>gosa_query_jobdb</header>
+      <where>
+      <clause>
+      <phrase>
+      <operator>eq</operator>
+      <id>".$id."</id>
+      </phrase>
+      </clause>
+      </where>
+      </xml>";
     $this->connect();
     if(!$this->is_connected){
       $this->set_error("Could not establish socket connection.");
@@ -177,31 +296,31 @@ class gosaSupportDaemon
     return(FALSE);
   }
 
-  
+
   /*! \brief  Returns an entry from the gosaSupportQueue
-      @param  Integer The ID of the entry we want to return.
-      @return Array   Of the requested entry. 
+    @param  Integer The ID of the entry we want to return.
+    @return Array   Of the requested entry. 
    */
-  public function get_entry($id)
+  public function get_entry_by_id($id)
   {
     if(!is_numeric($id)){
-      trigger_error("gosaSupportDaemon::get_entry() requires an integer value as ID parameter.");
+      trigger_error("Requires an integer as parameter.");
       return;
     }
 
     $this->b_error = FALSE;
     $this->s_error = "";
     $xml_msg = "<xml>
-                  <header>gosa_query_jobdb</header>
-                  <where>
-                    <clause>
-                      <phrase>
-                        <operator>eq</operator>
-                        <id>".$id."</id>
-                      </phrase>
-                    </clause>
-                  </where>
-                </xml>";
+      <header>gosa_query_jobdb</header>
+      <where>
+      <clause>
+      <phrase>
+      <operator>eq</operator>
+      <id>".$id."</id>
+      </phrase>
+      </clause>
+      </where>
+      </xml>";
     $this->connect();
     if(!$this->is_connected){
       $this->set_error("Could not establish socket connection.");
@@ -221,9 +340,52 @@ class gosaSupportDaemon
   }
 
 
+  /*! \brief  Removes a set of entries from the GOsa support queue. 
+    @param  Array The IDs to remove.
+    @return Boolean True on success.
+   */
+  public function remove_entries($ids)
+  {
+    if(!is_array($ids)){
+      trigger_error("Requires an array as parameter.");
+      return;
+    }
+    $this->b_error = FALSE;
+    $this->s_error = "";
+
+    $ret = array();
+
+    $xml_msg = "<xml>
+      <header>gosa_delete_jobdb_entry</header>
+      <where>
+      <clause>
+      <connector>or</connector>";
+    foreach($ids as $id){
+      $xml_msg .= "<phrase>
+        <operator>eq</operator>
+        <id>".$id."</id>
+        </phrase>";
+    }
+    $xml_msg .= "</clause>
+      </where>
+      </xml>";
+    $this->b_error = FALSE;
+    $this->s_error = "";
+
+    $this->connect();
+    if($this->is_connected){
+      $this->o_sock->write($xml_msg);
+      return(TRUE);
+    }
+    $this->set_error("Could not establish socket connection.");
+    return(FALSE);
+  }
+
+
+
   /*! \brief  Removes an entry from the GOsa support queue. 
-      @param  Integer The ID of the entry we want to remove.
-      @return Boolean True on success.
+    @param  Integer The ID of the entry we want to remove.
+    @return Boolean True on success.
    */
   public function remove_entry($id)
   {
@@ -231,16 +393,16 @@ class gosaSupportDaemon
     $this->s_error = "";
 
     $xml_msg = "<xml>
-                  <header>gosa_delete_jobdb_entry</header>
-                  <where>
-                    <clause>
-                      <phrase>
-                        <operator>eq</operator>
-                        <id>".$id."</id>
-                      </phrase>
-                    </clause>
-                  </where>
-                </xml>";
+      <header>gosa_delete_jobdb_entry</header>
+      <where>
+      <clause>
+      <phrase>
+      <operator>eq</operator>
+      <id>".$id."</id>
+      </phrase>
+      </clause>
+      </where>
+      </xml>";
     $this->connect();
     if($this->is_connected){
       $this->o_sock->write($xml_msg);
@@ -249,11 +411,11 @@ class gosaSupportDaemon
     $this->set_error("Could not establish socket connection.");
     return(FALSE);
   }
-  
+
 
   /*! \brief  Parses the given xml string into an array 
-      @param  String XML string  
-      @return Array Returns an array containing the xml structure. 
+    @param  String XML string  
+    @return Array Returns an array containing the xml structure. 
    */
   function xml_to_array($xml)
   {
@@ -294,16 +456,16 @@ class gosaSupportDaemon
 
 
   /*! \brief  Updates an entry with a set of new values, 
-      @param  Integer The ID of the entry, we want to update.
-      @param  Array   The variables to update.   
-      @return Boolean Returns TRUE on success. 
+    @param  Integer The ID of the entry, we want to update.
+    @param  Array   The variables to update.   
+    @return Boolean Returns TRUE on success. 
    */
-  public function update_entry($id,$entry)
+  public function update_entries($ids,$entry)
   {
     $this->b_error = FALSE;
     $this->s_error = "";
-    if(!is_numeric($id)){
-      trigger_error("Requires an integer value as ID parameter.");
+    if(!is_array($ids)){
+      trigger_error("Requires an array as first parameter.");
       return;
     }
 
@@ -316,16 +478,23 @@ class gosaSupportDaemon
     foreach($entry as $name => $entry){
       $attr.="<".strtolower($name).">".$entry."</".strtolower($name).">\n";
     }
-
-    $xml_msg = "<xml> 
-                  <header>gosa_update_status_jobdb_entry</header>
-                  <where>
-                    <id>".$id."</id> 
-                  </where>
-                  <update>
-                    ".$attr." 
-                  </update>
-                </xml>";
+    $xml_msg = "<xml>
+      <header>gosa_update_status_jobdb_entry</header>
+      <where>
+      <clause>
+      <connector>or</connector>";
+    foreach($ids as $id){
+      $xml_msg .= "<phrase>
+        <operator>eq</operator>
+        <id>".$id."</id>
+        </phrase>";
+    }
+    $xml_msg .= "</clause>
+      </where>
+      <update>
+      ".$attr." 
+      </update>
+      </xml>";
     $this->connect();
     if($this->is_connected){
       $this->o_sock->write($xml_msg);