Code

closes #411
[gosa.git] / gosa-core / include / class_log.inc
index 4f7376e513c4cda66efaf74cf808609f403753bb..35d8c0c3e4ec77f62ebf27f50559e102544bb45b 100644 (file)
@@ -1,24 +1,25 @@
 <?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
+ * This code is part of GOsa (http://www.gosa-project.org)
+ * Copyright (C) 2003-2008 GONICUS GmbH
+ *
+ * ID: $$Id$$
+ *
+ * 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
  */
 
-
 /*! \brief   The logging base class
   \author  Fabian Hickert <hickert@gonicus.de>
   \version 2.6
@@ -103,7 +104,7 @@ class log {
           if(!$res){
             global $config;
             $config->current['LOGGING'] = preg_replace("/(^|,)mysql(,|$)/",",",$config->current['LOGGING']);
-            msg_dialog::display(_("Logging to MySQL disabled"),_("The logging to a MySQL database is now disabled for this session of GOsa, due to communication errors with the specified logging database."), INFO_DIALOG);
+            msg_dialog::display(_("MySQL error"),_("Logging to MySQL database will be disabled for this session!"), INFO_DIALOG);
           }
         }
       }
@@ -116,11 +117,11 @@ class log {
     $msgs = array();
 
     if(!isset($entry['action']) || !in_array($entry['action'],array("modify","create","remove","copy","snapshot","view","security","debug"))){
-      $msgs[] = sprintf(_("Invalid option '%s' specified."), $entry['action']);
+      $msgs[] = sprintf(_("Invalid option '%s' specified!"), $entry['action']);
     }
 
     if(!isset($entry['objecttype']) || empty($entry['objecttype'])){
-      $msgs[] = _("Specified objectType is empty or invalid");
+      $msgs[] = _("Specified objectType is empty or invalid!");
     }
   
     return($msgs);
@@ -141,40 +142,90 @@ class log {
     if(isset($this->config->data['SERVERS']['LOGGING'])){
       $servers = $this->config->data['SERVERS']['LOGGING'];
     }else{
-      msg_dialog::display(_("Error"), _("You have enabled the logging into mysql database, but there are no logging servers available."), ERROR_DIALOG);
+      msg_dialog::display(_("Error"), msgPool::noserver(_("MySQL logging")), ERROR_DIALOG);
       return(FALSE);
     }
 
+    /* Log into each configured server 
+     */
     foreach($servers as $server_name => $server){
  
+      /* Connect to the database 
+       */
       $con = @mysql_pconnect($server_name,$server['USER'],$server['PWD']);
       if(!$con){
-        msg_dialog::display(_("Error"), sprintf(_("Cannot connect to logging server '%s'."),$server_name), ERROR_DIALOG);
+        msg_dialog::display(_("Error"), msgPool::dbconnect(_("MySQL logging")), ERROR_DIALOG);
         return(FALSE);
       }else{
+
+        /* Check if the database is available 
+         */
         $db = mysql_select_db($server['DB'],$con);
         if(!$db){
-          msg_dialog::display(_("Error"), sprintf(_("Cannot select database '%s' on server '%s': %s"),$server['DB'],$server['SERVER'], mysql_error($con)), ERROR_DIALOG);
+          msg_dialog::display(_("Error"), msgPool::dbselect(_("MySQL logging"), mysql_error($con)), ERROR_DIALOG);
           return(FALSE);
         }else{
 
+          /* Check if our current location is already registerd 
+              in this case get its id.
+             If it wasn't registered yet, create it. 
+           */
+          $base = mysql_escape_string($this->config->current['BASE']);
+          $query= "SELECT id FROM gosa_locations WHERE location=\"".$base."\";";
+          $res  = mysql_query($query);  
+          if(!$res){
+            msg_dialog::display(_("Error"), msgPool::dbquery(_("MySQL logging"), mysql_error($con)), ERROR_DIALOG);
+          }
+
+          $location_id = -1;
+          while($attrs = mysql_fetch_assoc($res)){
+            $location_id = $attrs['id'];
+            break;
+          }
+  
+          /* No location found that matches our location.
+             Create it.
+           */
+          if($location_id == -1){
+            $query = "INSERT INTO gosa_locations (location) VALUES ('".$base."');";
+            if(!mysql_query($query,$con)){
+              msg_dialog::display(_("Error"), msgPool::dbquery(_("MySQL logging"), mysql_error($con)), ERROR_DIALOG);
+            }
+            /* Try to detect the location again 
+             */ 
+            $query= "SELECT id FROM gosa_locations WHERE location=\"".$base."\";";
+            $res  = mysql_query($query);
+            $location_id = -1;
+            while($attrs = mysql_fetch_assoc($res)){
+              $location_id = $attrs['id'];
+              break;
+            }
+            if($location_id == -1){
+              msg_dialog::display(_("Error"), sprintf(_("Cannot add location to the database!")."<br><br>"._("Error").": %s",
+                mysql_error($con)), ERROR_DIALOG);
+              return(FALSE);
+            }
+          }  
+
           /* Create mysql syntax */
           $query ="INSERT INTO gosa_log 
-                    (timestamp,user,action,objecttype,object,changes,result)
-                   VALUES 
-                    (
-                        \"".addslashes($entry['timestamp'])."\", 
-                        \"".addslashes($entry['user'])."\", 
-                        \"".addslashes($entry['action'])."\", 
-                        \"".addslashes($entry['objecttype'])."\", 
-                        \"".addslashes($entry['object'])."\", 
-                        \"".addslashes($entry['changes'])."\", 
-                        \"".addslashes($entry['result'])."\" 
-                    );
-              ";
+            (timestamp,user,action,objecttype,object,changes,result,location_id)
+            VALUES 
+            (
+             \"".mysql_escape_string($entry['timestamp'])."\", 
+             \"".mysql_escape_string($entry['user'])."\", 
+             \"".mysql_escape_string($entry['action'])."\", 
+             \"".mysql_escape_string($entry['objecttype'])."\", 
+             \"".mysql_escape_string($entry['object'])."\", 
+             \"".mysql_escape_string($entry['changes'])."\", 
+             \"".mysql_escape_string($entry['result'])."\", 
+             \"".mysql_escape_string($location_id)."\" 
+            );
+          ";
           $res = mysql_query($query,$con);
           if(!$res){
-            msg_dialog::display(_("Error"), sprintf(_("Cannot query database '%s' on server '%s': %s"),$server['DB'],$server['SERVER'], mysql_error($con)), ERROR_DIALOG);
+            msg_dialog::display(_("Error"), msgPool::dbquery(_("MySQL logging"), mysql_error($con)), ERROR_DIALOG);
             return(FALSE);
           } 
         }