UserProfile.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. /**
  3. * User profile.
  4. * @use User
  5. * @require User
  6. *
  7. * $_SESSION['USER_PROFILE']['{$idTable}-hidden'] = [ idField, ... ]
  8. * $_SESSION['USER_PROFILE']['_table_ajax_settings'] = [ idField, ... ]
  9. *
  10. * old:
  11. * $_SESSION['USER_PROFILE'][$idTable] = [ idField => 1 | 0, ... ] // old version
  12. */
  13. class UserProfile {
  14. static function getStorageTableHiddenCols($idTable) {
  15. if (!empty($_SESSION['USER_PROFILE']["{$idTable}-hidden"])) {
  16. return $_SESSION['USER_PROFILE']["{$idTable}-hidden"];
  17. }
  18. if (!empty($_SESSION['USER_PROFILE']["{$idTable}"])) { // read from old version
  19. return array_keys(array_filter($_SESSION['USER_PROFILE']["{$idTable}"], function ($isFieldVisible) {
  20. return (!$isFieldVisible);
  21. }));
  22. }
  23. return [];
  24. }
  25. static function setStorageTableProfile($idTable, $tableProfile) {
  26. $_SESSION['USER_PROFILE'][$idTable] = $tableProfile;
  27. }
  28. static function setStorageTableHiddenCols($idTable, $hiddenCols) {
  29. unset($_SESSION['USER_PROFILE'][$idTable]); // clean up old version
  30. $filteredHiddenCols = array_filter($hiddenCols, [ 'V', 'filterPositiveInteger' ]);
  31. if (empty($filteredHiddenCols)) {
  32. unset($_SESSION['USER_PROFILE']["{$idTable}-hidden"]);
  33. } else {
  34. $_SESSION['USER_PROFILE']["{$idTable}-hidden"] = $filteredHiddenCols;
  35. }
  36. }
  37. static function removeStorageTableProfile($idTable) {
  38. unset($_SESSION['USER_PROFILE'][$idTable]); // every column is visible
  39. }
  40. public static function load($force = false) {
  41. if ($force) {
  42. $_SESSION['USER_PROFILE'] = array();
  43. }
  44. if (empty($_SESSION['USER_PROFILE'])) {
  45. $_SESSION['USER_PROFILE'] = array();
  46. // load user profile (hidden column, UserBookmarks)
  47. $sql = "select `ADM_WWW_PROFILE` from `ADMIN_USERS` where `ADM_ACCOUNT`='".User::getName()."' limit 0,1 ";
  48. $db = DB::getDB();
  49. $res = $db->query($sql);
  50. while ($h = $db->fetch($res)) {
  51. $ADM_WWW_PROFILE = "{$h->ADM_WWW_PROFILE}";
  52. if (!empty($ADM_WWW_PROFILE)) {
  53. if (' Array' === substr($ADM_WWW_PROFILE, 0, 6) || 'Array' === substr($ADM_WWW_PROFILE, 0, 5)) {
  54. eval("\$_SESSION['USER_PROFILE'] = {$ADM_WWW_PROFILE} ;");
  55. } else {
  56. $profileFromJson = json_decode($ADM_WWW_PROFILE);
  57. if ($profileFromJson && !empty($profileFromJson)) {
  58. $profileFromJson = (array)$profileFromJson;
  59. foreach ($profileFromJson as $k => $v) {
  60. $profileFromJson[$k] = (array)$v;
  61. }
  62. $_SESSION['USER_PROFILE'] = $profileFromJson;
  63. } else {
  64. $_SESSION['USER_PROFILE'] = array();
  65. }
  66. }
  67. } else {
  68. $_SESSION['USER_PROFILE'] = array();
  69. }
  70. }
  71. }
  72. return $_SESSION['USER_PROFILE'];
  73. }
  74. public static function set($key, $val) {
  75. self::load();// profile must be loaded
  76. $_SESSION['USER_PROFILE'][$key] = $val;
  77. }
  78. public static function get($key) {
  79. self::load();// profile must be loaded
  80. return V::get($key, '', $_SESSION['USER_PROFILE']);
  81. }
  82. public static function getColumn($column_name, $key) { // TODO: use only in Column.php (only by procesy5.php)
  83. self::load();// profile must be loaded
  84. if (!empty($_SESSION['USER_PROFILE'][$column_name][$key])) {
  85. return $_SESSION['USER_PROFILE'][$column_name][$key];
  86. }
  87. return null;
  88. }
  89. public static function save() {
  90. self::load();// profile must be loaded
  91. $db = DB::getDB();
  92. if(0){// old way
  93. $USER_PROFILE = $_SESSION['USER_PROFILE'];
  94. reset($USER_PROFILE);
  95. $VAR = " Array ( ";
  96. for ( ;(key($USER_PROFILE)); next($USER_PROFILE)) {
  97. $VAR = $VAR . "\"" . key($USER_PROFILE) . "\" => Array ( ";
  98. for ( ;(key($USER_PROFILE[key($USER_PROFILE)])); next($USER_PROFILE[key($USER_PROFILE)])) {
  99. $VAR = $VAR . " \"" . key($USER_PROFILE[key($USER_PROFILE)]) . "\"=>\"" . $USER_PROFILE[key($USER_PROFILE)][key($USER_PROFILE[key($USER_PROFILE)])] . "\"," ;
  100. }
  101. $VAR = $VAR . " ), ";
  102. }
  103. $VAR = $VAR . " ) " ;
  104. if(0){// old way debug
  105. echo'<pre>$VAR('.strlen($VAR).'):';print_r($VAR);echo'</pre>';//!!
  106. $profileJson = json_encode($_SESSION['USER_PROFILE']);
  107. echo'<pre>json_encode('.strlen($profileJson).'):';print_r($profileJson);echo'</pre>';//!!
  108. echo'<pre>profileRaw:';print_r($_SESSION['USER_PROFILE']);echo'</pre>';//!!
  109. $profileFromJson = json_decode($profileJson);
  110. echo'<pre>profileFromJson:';print_r($profileFromJson);echo'</pre>';
  111. }// old way debug
  112. }// old way
  113. $VAR = json_encode($_SESSION['USER_PROFILE']);
  114. $sql = "update `ADMIN_USERS` set `ADM_WWW_PROFILE`='{$VAR}' where `ADM_ACCOUNT`='".User::getName()."' limit 1 ";
  115. $res = $db->query($sql);
  116. if (($affected = $db->affected_rows($res)) != 1) {
  117. // TODO: error msg
  118. }
  119. return $VAR;
  120. }
  121. public static function isHiddenColumn($idTable, $idField) {
  122. return in_array($idField, self::getStorageTableHiddenCols($idTable));
  123. }
  124. static function setTableFieldVisible($idTable, $idField) {
  125. self::setStorageTableHiddenCols($idTable, array_filter(
  126. self::getStorageTableHiddenCols($idTable),
  127. function ($idHiddenCol) use ($idField) {
  128. return ($idHiddenCol != $idField);
  129. }
  130. ));
  131. }
  132. static function setTableFieldHidden($idTable, $idField) {
  133. self::setStorageTableHiddenCols($idTable, array_unique(array_merge(
  134. self::getStorageTableHiddenCols($idTable),
  135. [ $idField ]
  136. )));
  137. }
  138. public static function getTableAjaxSettings() {
  139. $tableAjaxSettings = array();
  140. if (array_key_exists('_table_ajax_settings', $_SESSION['USER_PROFILE'])) {
  141. $tableAjaxSettings = $_SESSION['USER_PROFILE']['_table_ajax_settings'];
  142. }
  143. return $tableAjaxSettings;
  144. }
  145. public static function setTableAjaxSettings($tableAjaxSettings) { // @used 'pageSize' in TableAjax
  146. $_SESSION['USER_PROFILE']['_table_ajax_settings'] = $tableAjaxSettings;
  147. }
  148. }