From 05e71c79c93801ab6a8262fbd93d1af3d5bdace4 Mon Sep 17 00:00:00 2001
From: pedro_morgan <pedro_morgan@ispconfig3>
Date: Sun, 19 Aug 2007 00:31:55 -0400
Subject: [PATCH] * Made login/index class php5 * Also replaces " with ' 

---
 interface/lib/classes/tform.inc.php |  159 ++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 115 insertions(+), 44 deletions(-)

diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php
index bdcbaed..c36a451 100644
--- a/interface/lib/classes/tform.inc.php
+++ b/interface/lib/classes/tform.inc.php
@@ -539,7 +539,11 @@
                                         $validator['regex'] .= 's';
                                         if(!preg_match($validator['regex'], $field_value)) {
                                                 $errmsg = $validator['errmsg'];
-                                                $this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
+                                                if(isset($this->wordbook[$errmsg])) {
+                                                	$this->errorMessage .= $this->wordbook[$errmsg]."<br>\r\n";
+												} else {
+													$this->errorMessage .= $errmsg."<br>\r\n";
+												}
                                         }
                                 break;
                                 case 'UNIQUE':
@@ -673,15 +677,23 @@
                                                 if($field['formtype'] == 'PASSWORD') {
                                                         $sql_insert_key .= "`$key`, ";
                                                         if($field['encryption'] == 'CRYPT') {
-                                                                // $sql_insert_val .= "encrypt('".$record[$key]."'), ";
-																$sql_insert_val .= "'".crypt($record[$key],substr(md5(time()),0,2))."', ";
+                                                                $salt="$1$";
+																for ($n=0;$n<8;$n++) {
+																	$salt.=chr(mt_rand(64,126));
+																}
+																$salt.="$";
+																// $salt = substr(md5(time()),0,2);
+																$record[$key] = crypt($record[$key],$salt);
                                                         } else {
-                                                                $sql_insert_val .= "md5('".$record[$key]."'), ";
+                                                                $record[$key] = md5($record[$key]);
                                                         }
+														$sql_insert_val .= "'".$record[$key]."', ";
                                                 } elseif ($field['formtype'] == 'CHECKBOX') {
                                                         $sql_insert_key .= "`$key`, ";
 														if($record[$key] == '') {
+															// if a checkbox is not set, we set it to the unchecked value
 															$sql_insert_val .= "'".$field['value'][0]."', ";
+															$record[$key] = $field['value'][0];
 														} else {
 															$sql_insert_val .= "'".$record[$key]."', ";
 														}
@@ -691,15 +703,23 @@
                                                 }
                                         } else {
                                                 if($field['formtype'] == 'PASSWORD') {
-                                                        if($field['encryption'] == 'CRYPT') {
-                                                                // $sql_update .= "`$key` = encrypt('".$record[$key]."'), ";
-																$sql_update .= "`$key` = '".crypt($record[$key],substr(md5(time()),0,2))."', ";
+														if($field['encryption'] == 'CRYPT') {
+                                                                $salt="$1$";
+																for ($n=0;$n<8;$n++) {
+																	$salt.=chr(mt_rand(64,126));
+																}
+																$salt.="$";
+																// $salt = substr(md5(time()),0,2);
+																$record[$key] = crypt($record[$key],$salt);
                                                         } else {
-                                                                $sql_update .= "`$key` = md5('".$record[$key]."'), ";
+                                                                $record[$key] = md5($record[$key]);
                                                         }
+                                                        $sql_update .= "`$key` = '".$record[$key]."', ";
                                                 } elseif ($field['formtype'] == 'CHECKBOX') {
 														if($record[$key] == '') {
+															// if a checkbox is not set, we set it to the unchecked value
 															$sql_update .= "`$key` = '".$field['value'][0]."', ";
+															$record[$key] = $field['value'][0];
 														} else {
 															$sql_update .= "`$key` = '".$record[$key]."', ";
 														}
@@ -707,7 +727,11 @@
                                                         $sql_update .= "`$key` = '".$record[$key]."', ";
                                                 }
                                         }
-                                }
+                                } else {
+									// we unset the password filed, if empty to tell the datalog function 
+									// that the password has not been changed
+								    unset($record[$key]);
+								}
                         }
         }
 
@@ -740,15 +764,13 @@
                 } else {
                         if($primary_id != 0) {
                                 $sql_update = substr($sql_update,0,-2);
-                                $sql = "UPDATE ".$escape.$this->formDef['db_table'].$escape." SET ".$sql_update." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id;
+                                $sql = "UPDATE ".$escape.$this->formDef['db_table'].$escape." SET ".$sql_update." WHERE ".$this->getAuthSQL('u')." AND ".$this->formDef['db_table_idx']." = ".$primary_id;
                                 if($sql_ext_where != '') $sql .= " and ".$sql_ext_where;
                         } else {
                                 $app->error("Primary ID fehlt!");
                         }
                 }
-
-                // Daten in History tabelle speichern
-                if($this->errorMessage == '' and $this->formDef['db_history'] == 'yes') $this->datalogSave($action,$primary_id,$record);
+                
                 return $sql;
         }
 
@@ -776,20 +798,21 @@
         // definiere Tabs
         foreach( $this->formDef["tabs"] as $key => $tab) {
 
-                        $tab['name'] = $key;
+            $tab['name'] = $key;
             if($tab['name'] == $active_tab) {
 
-                                // Wenn Modul gesetzt, dann setzte template pfad relativ zu modul.
-                                if($this->module != '') $tab["template"] = "../".$this->module."/".$tab["template"];
+                // Wenn Modul gesetzt, dann setzte template pfad relativ zu modul.
+                if($this->module != '') $tab["template"] = "../".$this->module."/".$tab["template"];
 
-                                // �berpr�fe, ob das Template existiert, wenn nicht
-                                // dann generiere das Template
-                                if(!is_file($tab["template"])) {
-                                        $app->uses('tform_tpl_generator');
-                                        $app->tform_tpl_generator->buildHTML($this->formDef,$tab['name']);
-                                }
+                // �berpr�fe, ob das Template existiert, wenn nicht
+                // dann generiere das Template
+								
+                if(!is_file($tab["template"])) {
+                     $app->uses('tform_tpl_generator');
+                     $app->tform_tpl_generator->buildHTML($this->formDef,$tab['name']);
+                }
 
-                    $app->tpl->setInclude('content_tpl',$tab["template"]);
+                $app->tpl->setInclude('content_tpl',$tab["template"]);
                 $tab["active"] = 1;
                 $_SESSION["s"]["form"]["tab"] = $tab['name'];
             } else {
@@ -818,11 +841,16 @@
                 // Set Wordbook for this form
 
                 $app->tpl->setVar($this->wordbook);
-    }
+    	}
 
+		function getDataRecord($primary_id) {
+			global $app;
+			$sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id;
+            return $app->db->queryOneRecord($sql);
+		}
+		
 
-
-        function datalogSave($action,$primary_id,$record_new) {
+        function datalogSave($action,$primary_id, $record_old, $record_new) {
                 global $app,$conf;
 
                 // F�ge Backticks nur bei unvollst�ndigen Tabellennamen ein
@@ -831,42 +859,84 @@
                 } else {
                         $escape = '`';
                 }
-
-                if($action == "UPDATE") {
+				
+				/*
+                if($action == "UPDATE" or $action == "DELETE") {
                         $sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id;
                         $record_old = $app->db->queryOneRecord($sql);
                 } else {
                         $record_old = array();
                 }
+				*/
 
                 $diffrec = array();
-
-                if(is_array($record_new)) {
+				
+                if(is_array($record_new) && count($record_new) > 0) {
                         foreach($record_new as $key => $val) {
                                 if($record_old[$key] != $val) {
-                                        // Datensatz hat sich ge�ndert
+										// Record has changed
                                         $diffrec[$key] = array('old' => $record_old[$key],
-                                                                           'new' => $val);
+                                                               'new' => $val);
+                                }
+                        }
+                } elseif(is_array($record_old)) {
+                        foreach($record_old as $key => $val) {
+                                if($record_new[$key] != $val) {
+										// Record has changed
+                                        $diffrec[$key] = array('new' => $record_new[$key],
+                                                               'old' => $val);
                                 }
                         }
                 }
+				$this->diffrec = $diffrec;
+				
+				
+				// Full diff records for ISPConfig, they have a different format then the simple diffrec
+				$diffrec_full = array();
+
+                if(is_array($record_old) && count($record_old) > 0) {
+                        foreach($record_old as $key => $val) {
+                                if(isset($record_new[$key]) && $record_new[$key] != $val) {
+                                    // Record has changed
+									$diffrec_full['old'][$key] = $val;
+									$diffrec_full['new'][$key] = $record_new[$key];
+                                } else {
+									$diffrec_full['old'][$key] = $val;
+									$diffrec_full['new'][$key] = $val;
+								}
+                        }
+                } elseif(is_array($record_new)) {
+                        foreach($record_new as $key => $val) {
+                                if(isset($record_new[$key]) && $record_old[$key] != $val) {
+                                    // Record has changed
+									$diffrec_full['new'][$key] = $val;
+									$diffrec_full['old'][$key] = $record_old[$key];
+                                } else {
+									$diffrec_full['new'][$key] = $val;
+									$diffrec_full['old'][$key] = $val;
+								}
+                        }
+                }
+				
+				/*
+				echo "<pre>";
+				print_r($diffrec_full);
+				echo "</pre>";
+				*/
 				
 				// Insert the server_id, if the record has a server_id
 				$server_id = ($record_old["server_id"] > 0)?$record_old["server_id"]:0;
 				if(isset($record_new["server_id"])) $server_id = $record_new["server_id"];
-				
-				$this->diffrec = $diffrec;
 
-                if(count($diffrec) > 0) {
-                        
-						// We need the full records in ISPConfig, not only the diffs
-						$diffrec = array(	'old' => $record_old,
-											'new' => $record_new);
-						
-						$diffstr = $app->db->quote(serialize($diffrec));
+                if(count($this->diffrec) > 0) {
+						$diffstr = $app->db->quote(serialize($diffrec_full));
                         $username = $app->db->quote($_SESSION["s"]["user"]["username"]);
                         $dbidx = $this->formDef['db_table_idx'].":".$primary_id;
-                        $action = ($action == 'INSERT')?'i':'u';
+                        // $action = ($action == 'INSERT')?'i':'u';
+						
+						if($action == 'INSERT') $action = 'i';
+						if($action == 'UPDATE') $action = 'u';
+						if($action == 'DELETE') $action = 'd';
                         $sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES ('".$this->formDef['db_table']."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')";
 						$app->db->query($sql);
                 }
@@ -879,9 +949,10 @@
 				if($_SESSION["s"]["user"]["typ"] == 'admin') {
 					return '1';
 				} else {
-                	$sql = '(';
+                	$groups = ( $_SESSION["s"]["user"]["groups"] ) ? $_SESSION["s"]["user"]["groups"] : 0;
+					$sql = '(';
                 	$sql .= "(sys_userid = ".$_SESSION["s"]["user"]["userid"]." AND sys_perm_user like '%$perm%') OR  ";
-                	$sql .= "(sys_groupid IN (".$_SESSION["s"]["user"]["groups"].") AND sys_perm_group like '%$perm%') OR ";
+                	$sql .= "(sys_groupid IN (".$groups.") AND sys_perm_group like '%$perm%') OR ";
                 	$sql .= "sys_perm_other like '%$perm%'";
                 	$sql .= ')';
 

--
Gitblit v1.9.1