Piotr Labudda 10 лет назад
Родитель
Сommit
30d0731205
2 измененных файлов с 65 добавлено и 21 удалено
  1. 3 9
      SE/se-lib/TableAjax.php
  2. 62 12
      SE/se-lib/UserProfile.php

+ 3 - 9
SE/se-lib/TableAjax.php

@@ -5316,13 +5316,8 @@ jQuery(document).ready(function(){
 			}
 
 			// @see ajaxHiddenColsSave
-			// $_SESSION['USER_PROFILE'][$this->_zasobID][fld_id] => boolean
-			if (isset($_SESSION['USER_PROFILE'][$this->_zasobID])) {
-				if (isset($_SESSION['USER_PROFILE'][$this->_zasobID][$fieldID])) {
-					if ($_SESSION['USER_PROFILE'][$this->_zasobID][$fieldID] != 1) {
-						$columnConfig->hidden = true;
-					}
-				}
+			if (UserProfile::isHiddenColumn($this->_zasobID, $fieldID)) {
+				$columnConfig->hidden = true;
 			}
 
 			$columnConfig->description = $this->_acl->getFieldOpis($fieldID);
@@ -5449,8 +5444,7 @@ jQuery(document).ready(function(){
 			}
 		}
 
-		$_SESSION['USER_PROFILE'][$this->_zasobID] = $colVis;
-
+		UserProfile::setHiddenCols($this->_zasobID, $colVis);
 		UserProfile::save();
 
 		$response->type = 'success';

+ 62 - 12
SE/se-lib/UserProfile.php

@@ -20,8 +20,20 @@ class UserProfile {
 			while ($h = $db->fetch($res)) {
 				$ADM_WWW_PROFILE = "{$h->ADM_WWW_PROFILE}";
 				if (!empty($ADM_WWW_PROFILE)) {
-					//echo "<HR>$ADM_WWW_PROFILE WWW-PROFILE**********<BR>";
-					eval("\$_SESSION['USER_PROFILE'] = {$ADM_WWW_PROFILE} ;");
+					if (' Array' === substr($ADM_WWW_PROFILE, 0, 6) || 'Array' === substr($ADM_WWW_PROFILE, 0, 5)) {
+						eval("\$_SESSION['USER_PROFILE'] = {$ADM_WWW_PROFILE} ;");
+					} else {
+						$profileFromJson = json_decode($ADM_WWW_PROFILE);
+						if ($profileFromJson && !empty($profileFromJson)) {
+							$profileFromJson = (array)$profileFromJson;
+							foreach ($profileFromJson as $k => $v) {
+								$profileFromJson[$k] = (array)$v;
+							}
+							$_SESSION['USER_PROFILE'] = $profileFromJson;
+						} else {
+							$_SESSION['USER_PROFILE'] = array();
+						}
+					}
 				} else {
 					$_SESSION['USER_PROFILE'] = array();
 				}
@@ -64,17 +76,28 @@ class UserProfile {
 		self::load();// profile must be loaded
 		$db = DB::getDB();
 
-		$USER_PROFILE = $_SESSION['USER_PROFILE'];
-		reset($USER_PROFILE);
-		$VAR = " Array ( ";
-		for ( ;(key($USER_PROFILE)); next($USER_PROFILE)) {
-			$VAR = $VAR . "\"" .  key($USER_PROFILE) . "\" => Array ( ";
-			for ( ;(key($USER_PROFILE[key($USER_PROFILE)])); next($USER_PROFILE[key($USER_PROFILE)])) {
-				$VAR = $VAR . " \"" . key($USER_PROFILE[key($USER_PROFILE)]) . "\"=>\"" . $USER_PROFILE[key($USER_PROFILE)][key($USER_PROFILE[key($USER_PROFILE)])] . "\"," ;
+		if(0){// old way
+			$USER_PROFILE = $_SESSION['USER_PROFILE'];
+			reset($USER_PROFILE);
+			$VAR = " Array ( ";
+			for ( ;(key($USER_PROFILE)); next($USER_PROFILE)) {
+				$VAR = $VAR . "\"" .  key($USER_PROFILE) . "\" => Array ( ";
+				for ( ;(key($USER_PROFILE[key($USER_PROFILE)])); next($USER_PROFILE[key($USER_PROFILE)])) {
+					$VAR = $VAR . " \"" . key($USER_PROFILE[key($USER_PROFILE)]) . "\"=>\"" . $USER_PROFILE[key($USER_PROFILE)][key($USER_PROFILE[key($USER_PROFILE)])] . "\"," ;
+				}
+				$VAR = $VAR . " ), ";
 			}
-			$VAR = $VAR . " ), ";
-		}
-		$VAR = $VAR . " ) " ;
+			$VAR = $VAR . " ) " ;
+			if(0){// old way debug
+				echo'<pre>$VAR('.strlen($VAR).'):';print_r($VAR);echo'</pre>';//!!
+				$profileJson = json_encode($_SESSION['USER_PROFILE']);
+				echo'<pre>json_encode('.strlen($profileJson).'):';print_r($profileJson);echo'</pre>';//!!
+				echo'<pre>profileRaw:';print_r($_SESSION['USER_PROFILE']);echo'</pre>';//!!
+				$profileFromJson = json_decode($profileJson);
+				echo'<pre>profileFromJson:';print_r($profileFromJson);echo'</pre>';
+			}// old way debug
+		}// old way
+		$VAR = json_encode($_SESSION['USER_PROFILE']);
 		$sql = "update `ADMIN_USERS` set `ADM_WWW_PROFILE`='{$VAR}' where  `ADM_ACCOUNT`='".User::getName()."' limit 1 ";
 		$res = $db->query($sql);
 		if (($affected = $db->affected_rows($res)) != 1) {
@@ -83,4 +106,31 @@ class UserProfile {
 		return $VAR;
 	}
 
+	public static function isHiddenColumn($idTable, $idField) {
+		$isHidden = false;
+		// $_SESSION['USER_PROFILE'][$idTable][$idField] => boolean
+		if (isset($_SESSION['USER_PROFILE'][$idTable])) {
+			if (isset($_SESSION['USER_PROFILE'][$idTable][$idField])) {
+				if ($_SESSION['USER_PROFILE'][$idTable][$idField] != 1) {
+					$isHidden = true;
+				}
+			}
+		}
+		return $isHidden;
+	}
+
+	public static function setHiddenCols($idTable, $colVis) {
+		$isAnyHidden = false;
+		foreach ($colVis as $idField => $isVisible) {
+			if ($isVisible != 1) {
+				$isAnyHidden = true;
+			}
+		}
+		if ($isAnyHidden) {
+			$_SESSION['USER_PROFILE'][$idTable] = $colVis;
+		} else {
+			unset($_SESSION['USER_PROFILE'][$idTable]);// every column is visible
+		}
+	}
+
 }