Преглед на файлове

fixed user hidden fields settings

Piotr Labudda преди 7 години
родител
ревизия
2f9c590282
променени са 3 файла, в които са добавени 65 реда и са изтрити 71 реда
  1. 15 18
      SE/se-lib/TableAjax.php
  2. 1 9
      SE/se-lib/User.php
  3. 49 44
      SE/se-lib/UserProfile.php

+ 15 - 18
SE/se-lib/TableAjax.php

@@ -2501,7 +2501,7 @@ jQuery(document).ready(function(){
 	 * set hidden cols in $_SESSION['USER_PROFILE'][$this->_zasobID];
 	 *   $_SESSION['USER_PROFILE'][$this->_zasobID][fld_id] => boolean
 	 */
-	private function ajaxHiddenColsSave($args) {
+	private function ajaxHiddenColsSave($args) { // $args[ idField ] => 'SHOW' | 'HIDE'
 		$response = new stdClass();
 
 		if (empty($args)) {
@@ -2510,26 +2510,23 @@ jQuery(document).ready(function(){
 		}
 
 		UserProfile::load();
-
-		// clean up old, wrong values
-		if (array_key_exists("{$this->_tbl}_COLUMN", $_SESSION['USER_PROFILE'])) {
-			unset($_SESSION['USER_PROFILE']["{$this->_tbl}_COLUMN"]);
-		}
-
-		$colVis = UserProfile::getHiddenCols($this->_zasobID);
-
-		$fields = $this->_acl->getFieldListByIdZasob();
-		foreach ($fields as $idField => $fieldName) {
-			if (isset($args[$fieldName])) {
-				if ($args[$fieldName] == 'SHOW') {
-					$colVis[$idField] = 1;
-				} else if ($args[$fieldName] == 'HIDE') {
-					$colVis[$idField] = 0;
+		{
+			// clean up old, wrong values
+			if (array_key_exists("{$this->_tbl}_COLUMN", $_SESSION['USER_PROFILE'])) {
+				unset($_SESSION['USER_PROFILE']["{$this->_tbl}_COLUMN"]);
+			}
+
+			$fields = $this->_acl->getFieldListByIdZasob();
+			foreach ($fields as $idField => $fieldName) {
+				if (isset($args[$fieldName])) {
+					if ($args[$fieldName] == 'SHOW') {
+						UserProfile::setTableFieldVisible($this->_zasobID, $idField);
+					} else if ($args[$fieldName] == 'HIDE') {
+						UserProfile::setTableFieldHidden($this->_zasobID, $idField);
+					}
 				}
 			}
 		}
-
-		UserProfile::setHiddenCols($this->_zasobID, $colVis);
 		UserProfile::save();
 
 		$response->type = 'success';

+ 1 - 9
SE/se-lib/User.php

@@ -112,18 +112,10 @@ class User {
 		UserProfile::set($key, $val);
 	}
 
-	public static function getProfileColumn($column_name, $key) {
+	public static function getProfileColumn($column_name, $key) { // TODO: use only in Column.php (only by procesy5.php)
 		return UserProfile::getColumn($column_name, $key);
 	}
 
-	public static function setProfileColumn($column_name, $key, $value) {
-		UserProfile::setColumn($column_name, $key, $value);
-	}
-
-	public static function removeProfileColumn($column_name, $key) {
-		UserProfile::removeColumn($column_name, $key);
-	}
-
 	public static function isAdmin() {
 		if (in_array(self::get('ADM_ADMIN_LEVEL'), array(0, 1))) {
 			return true;

+ 49 - 44
SE/se-lib/UserProfile.php

@@ -4,9 +4,42 @@
  * User profile.
  * @use User
  * @require User
+ * 
+ * $_SESSION['USER_PROFILE']['{$idTable}-hidden'] = [ idField, ... ]
+ * $_SESSION['USER_PROFILE']['_table_ajax_settings'] = [ idField, ... ]
+ * 
+ * old:
+ * $_SESSION['USER_PROFILE'][$idTable] = [ idField => 1 | 0, ... ] // old version
  */
 class UserProfile {
 
+	static function getStorageTableHiddenCols($idTable) {
+		if (!empty($_SESSION['USER_PROFILE']["{$idTable}-hidden"])) {
+			return $_SESSION['USER_PROFILE']["{$idTable}-hidden"];
+		}
+		if (!empty($_SESSION['USER_PROFILE']["{$idTable}"])) { // read from old version
+			return array_keys(array_filter($_SESSION['USER_PROFILE']["{$idTable}"], function ($isFieldVisible) {
+				return (!$isFieldVisible);
+			}));
+		}
+		return [];
+	}
+	static function setStorageTableProfile($idTable, $tableProfile) {
+		$_SESSION['USER_PROFILE'][$idTable] = $tableProfile;
+	}
+	static function setStorageTableHiddenCols($idTable, $hiddenCols) {
+		unset($_SESSION['USER_PROFILE'][$idTable]); // clean up old version
+		$filteredHiddenCols = array_filter($hiddenCols, [ 'V', 'filterPositiveInteger' ]);
+		if (empty($filteredHiddenCols)) {
+			unset($_SESSION['USER_PROFILE']["{$idTable}-hidden"]);
+		} else {
+			$_SESSION['USER_PROFILE']["{$idTable}-hidden"] = $filteredHiddenCols;
+		}
+	}
+	static function removeStorageTableProfile($idTable) {
+		unset($_SESSION['USER_PROFILE'][$idTable]); // every column is visible
+	}
+
 	public static function load($force = false) {
 		if ($force) {
 			$_SESSION['USER_PROFILE'] = array();
@@ -52,7 +85,7 @@ class UserProfile {
 		return V::get($key, '', $_SESSION['USER_PROFILE']);
 	}
 
-	public static function getColumn($column_name, $key) {
+	public static function getColumn($column_name, $key) { // TODO: use only in Column.php (only by procesy5.php)
 		self::load();// profile must be loaded
 		if (!empty($_SESSION['USER_PROFILE'][$column_name][$key])) {
 			return $_SESSION['USER_PROFILE'][$column_name][$key];
@@ -60,18 +93,6 @@ class UserProfile {
 		return null;
 	}
 
-	public static function setColumn($column_name, $key, $value) {
-		self::load();// profile must be loaded
-		$_SESSION['USER_PROFILE'][$column_name][$key] = $value;
-		self::save();
-	}
-
-	public static function removeColumn($column_name, $key) {
-		self::load();// profile must be loaded
-		unset($_SESSION['USER_PROFILE'][$column_name][$key]);
-		self::save();
-	}
-
 	public static function save() {
 		self::load();// profile must be loaded
 		$db = DB::getDB();
@@ -107,38 +128,22 @@ class UserProfile {
 	}
 
 	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 getHiddenCols($idTable) {
-		$colVis = array();
-		if (array_key_exists($idTable, $_SESSION['USER_PROFILE'])) {
-			$colVis = $_SESSION['USER_PROFILE'][$idTable];
-		}
-		return $colVis;
+		return in_array($idField, self::getStorageTableHiddenCols($idTable));
 	}
 
-	public static function setHiddenCols($idTable, $colVis) {
-		$isAnyHidden = false;
-		foreach ($colVis as $idField => $isVisible) {
-			if ($isVisible != 1) {
-				$isAnyHidden = true;
+	static function setTableFieldVisible($idTable, $idField) {
+		self::setStorageTableHiddenCols($idTable, array_filter(
+			self::getStorageTableHiddenCols($idTable),
+			function ($idHiddenCol) use ($idField) {
+				return ($idHiddenCol != $idField);
 			}
-		}
-		if ($isAnyHidden) {
-			$_SESSION['USER_PROFILE'][$idTable] = $colVis;
-		} else {
-			unset($_SESSION['USER_PROFILE'][$idTable]);// every column is visible
-		}
+		));
+	}
+	static function setTableFieldHidden($idTable, $idField) {
+		self::setStorageTableHiddenCols($idTable, array_unique(array_merge(
+			self::getStorageTableHiddenCols($idTable),
+			[ $idField ]
+		)));
 	}
 
 	public static function getTableAjaxSettings() {
@@ -149,8 +154,8 @@ class UserProfile {
 		return $tableAjaxSettings;
 	}
 
-	public static function setTableAjaxSettings($colVis) {
-		$_SESSION['USER_PROFILE']['_table_ajax_settings'] = $colVis;
+	public static function setTableAjaxSettings($tableAjaxSettings) { // @used 'pageSize' in TableAjax
+		$_SESSION['USER_PROFILE']['_table_ajax_settings'] = $tableAjaxSettings;
 	}
 
 }