/managers/User.php

https://github.com/jfhs/openplayer · PHP · 158 lines · 113 code · 45 blank · 0 comment · 14 complexity · 99902021b4acf2da38e25c677f0f4ff8 MD5 · raw file

  1. <?php
  2. namespace Manager;
  3. class User extends \Lib\Base\Manager {
  4. const SESS_NS = 'op';
  5. const SESS_KEY = 'user';
  6. public static function getUser() {
  7. if ( !isset($_SESSION[ User::SESS_NS ][ User::SESS_KEY ]) ) {
  8. return false;
  9. }
  10. return $_SESSION[ User::SESS_NS ][ User::SESS_KEY ];
  11. }
  12. public function getHistory() {
  13. if ( !$this->getUser() ) return array();
  14. return \Lib\Helper::getArr($_SESSION[ User::SESS_NS ][ User::SESS_KEY ]->settings, 'history');
  15. }
  16. public function updateSettings( $settings ) {
  17. $user = User::getUser();
  18. $userId = intval($user->id);
  19. $_SESSION[ User::SESS_NS ][ User::SESS_KEY ]->settings = $settings;
  20. $serializedSettings = json_encode($settings);
  21. $res = $this->pdo->prepare("UPDATE user SET settings = ? WHERE id = ?");
  22. $res->execute(array($serializedSettings, $userId));
  23. return $res;
  24. }
  25. public function updatePLSettings ( $plId, $status ) {
  26. $user = User::getUser();
  27. $plId = intval($plId);
  28. $status = 1*$status;
  29. $settings = $user->settings;
  30. $settings['pl'][$plId] = $status;
  31. $res = $this->updateSettings($settings);
  32. return $res;
  33. }
  34. public static function getUserOption( $key ) {
  35. $user = self::getUser();
  36. return isset( $user->$key )
  37. ? $user->$key
  38. : null;
  39. }
  40. public static function isLoggedIn() {
  41. return (boolean) self::getUser();
  42. }
  43. public function login ( $login, $password = null ) {
  44. $login = strip_tags($login);
  45. $loginQ = $this->pdo->quote($login);
  46. if ($password) {
  47. $password = strip_tags($password);
  48. $passwordMd5 = $this->pdo->quote(md5($password));
  49. }
  50. if ( !$login ) return false;
  51. $q = "SELECT * FROM user WHERE login = {$loginQ}";
  52. if ( $password ) {
  53. $q .= " AND password = {$passwordMd5} ";
  54. } else {
  55. $q .= " AND password IS NULL";
  56. }
  57. $res = $this->pdo->query($q);
  58. $user = $res->fetchObject();
  59. if ( !$user ) {
  60. $q = "INSERT INTO user VALUES (null, {$loginQ}, ". ( $password ? $passwordMd5 : "null" ) . ", null, null)";
  61. $res = $this->pdo->exec($q);
  62. if ($res) {
  63. return $this->login( $login, $password );
  64. } else {
  65. return false;
  66. }
  67. }
  68. return $this->store($user);
  69. }
  70. public function store( $user ) {
  71. $this->generateSessionKey( $user );
  72. unset( $user->password );
  73. unset( $user->sessionKey );
  74. $user->settings = (array) json_decode($user->settings);
  75. @$user->settings['pl'] = (array) $user->settings['pl'];
  76. $_SESSION[ User::SESS_NS ]['lang'] = $user->settings['lang'];
  77. return $_SESSION[ User::SESS_NS ][ User::SESS_KEY ] = $user;
  78. }
  79. private function generateSessionKey( $user ) {
  80. $userId = intval($user->id);
  81. $key = md5( microtime(true) . $user->id . 'secret' );
  82. setcookie('sessionKey', $key, time()+(60*60*60*24*14) , '/');
  83. $q = "UPDATE user SET sessionKey = '{$key}' WHERE id = {$userId}";
  84. $this->pdo->exec($q);
  85. }
  86. public function logout() {
  87. $lang = $_SESSION[ User::SESS_NS ][ 'lang' ];
  88. unset($_SESSION[ User::SESS_NS ]);
  89. setcookie('sessionKey', null, time() , '/');
  90. $_SESSION[ User::SESS_NS ][ 'lang' ] = $lang;
  91. }
  92. public function autologin() {
  93. if ( !User::isLoggedIn() && isset($_COOKIE[ 'sessionKey' ]) ) {
  94. $q = "SELECT * FROM user WHERE sessionKey = ?";
  95. $res = $this->pdo->prepare($q);
  96. $res->execute(array($_COOKIE['sessionKey']));
  97. $user = $res->fetchObject();
  98. if ( $user ) {
  99. self::store( $user );
  100. }
  101. }
  102. }
  103. public function logHistory( $q ) {
  104. $user = User::getUser();
  105. if ( !$user ) return false;
  106. $settings = $user->settings;
  107. if ( count( \Lib\Helper::getArr($settings, 'history') ) > \Lib\Config::getInstance()->getOption('app', 'historyLength') - 1 ) {
  108. array_shift($settings['history']);
  109. }
  110. $settings['history'][] = $q;
  111. $res = $this->updateSettings( $settings );
  112. }
  113. }