Completed
Push — trunk ( 0e7a2e...6a6c5e )
by SuperNova.WS
07:28
created

playerTimeDiff::user_time_diff_get()   B

Complexity

Conditions 6
Paths 32

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 0
Metric Value
cc 6
eloc 7
nc 32
nop 0
dl 0
loc 10
ccs 0
cts 9
cp 0
crap 42
rs 8.8571
c 0
b 0
f 0
1
<?php
2
3
namespace Player;
4
/**
5
 * User: Gorlum
6
 * Date: 14.10.2015
7
 * Time: 0:28
8
 */
9
class playerTimeDiff {
10
  /**
11
   * Разница в ходе часов в секундах. Т.е. разница между GMT-временами браузера и сервера
12
   * @var int
13
   */
14
  public $gmt_diff = 0;
15
  /**
16
   * Разница в секундах между часовыми поясами браузера и сервера
17
   * @var int
18
   */
19
  public $zone_offset = 0;
20
  /**
21
   * Форсированный пересчёт времени
22
   *
23
   * @var int
24
   */
25
  public $force_measure = 0;
26
  /**
27
   * Метка времени прошлой синхронизации часов
28
   *
29
   * @var string
30
   */
31
  public $last_measure_time = '2000-01-01';
32
33
34
  static function user_time_diff_probe() {
35
    // Определяем время в браузере
36
    $client_time = strtotime(sys_get_param('client_gmt')); // Попытка определить по GMT-времени браузера. В нём будет часовой пояс (GMT), поэтому время будет автоматически преобразовано в часовой пояс сервера
0 ignored issues
show
Bug introduced by
It seems like sys_get_param('client_gmt') can also be of type array; however, parameter $time of strtotime() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

36
    $client_time = strtotime(/** @scrutinizer ignore-type */ sys_get_param('client_gmt')); // Попытка определить по GMT-времени браузера. В нём будет часовой пояс (GMT), поэтому время будет автоматически преобразовано в часовой пояс сервера
Loading history...
37
    !$client_time ? $client_time = round(sys_get_param_float('timeBrowser') / 1000) : false; // Попытка определить по Date.valueOf() - миллисекунды с начала эпохи UNIX_TIME
38
    !$client_time ? $client_time = SN_TIME_NOW : false; // Если все попытки провалились - тупо берем время сервера
39
40
//  TODO - REMOVE
0 ignored issues
show
Unused Code Comprehensibility introduced by
44% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
41
//  !($client_time = strtotime(sys_get_param('client_gmt'))) // Время в браузере определяется через GMT
42
//    ? (!($client_time = sys_get_param_float('timeBrowser') / 1000)
43
//        ? $client_time = SN_TIME_NOW : false)
44
//    : false;
45
//  !($client_time = strtotime(sys_get_param('client_gmt'))) // Время в браузере определяется через GMT
46
//    ? $client_time = SN_TIME_NOW
47
//    : false;
48
49
    $result = array(
50
//    TODO - REMOVE
51
//    PLAYER_OPTION_TIME_DIFF => ($time_local = sys_get_param_float('timeBrowser')) ? round($time_local / 1000 - SN_TIME_MICRO) : 0, // Работающий код при учете того, что в JS используется timeBrowser
52
      PLAYER_OPTION_TIME_DIFF              => $client_time - SN_TIME_NOW,
53
      PLAYER_OPTION_TIME_DIFF_UTC_OFFSET   => ($browser_utc_offset = sys_get_param_int('utc_offset')) ? $browser_utc_offset - date('Z') : 0,
54
      PLAYER_OPTION_TIME_DIFF_FORCED       => sys_get_param_int('PLAYER_OPTION_TIME_DIFF_FORCED'),
55
      PLAYER_OPTION_TIME_DIFF_MEASURE_TIME => SN_TIME_SQL,
56
    );
57
58
    return $result;
59
  }
60
61
  static function user_time_diff_set($user_time_diff) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
62
    // Переопределяем массив, что бы элементы были в правильном порядке
63
    $user_time_diff = array(
64
      PLAYER_OPTION_TIME_DIFF              => isset($user_time_diff[PLAYER_OPTION_TIME_DIFF]) ? $user_time_diff[PLAYER_OPTION_TIME_DIFF] : '',
65
      PLAYER_OPTION_TIME_DIFF_UTC_OFFSET   => isset($user_time_diff[PLAYER_OPTION_TIME_DIFF_UTC_OFFSET]) ? $user_time_diff[PLAYER_OPTION_TIME_DIFF_UTC_OFFSET] : 0,
66
      PLAYER_OPTION_TIME_DIFF_FORCED       => isset($user_time_diff[PLAYER_OPTION_TIME_DIFF_FORCED]) ? $user_time_diff[PLAYER_OPTION_TIME_DIFF_FORCED] : 0,
67
      PLAYER_OPTION_TIME_DIFF_MEASURE_TIME => SN_TIME_SQL,
68
    );
69
70
    $user_time_diff_str = implode(';', $user_time_diff);
71
    sn_setcookie(SN_COOKIE_T, $user_time_diff_str, SN_TIME_NOW + PERIOD_MONTH);
72
  }
73
74
  static function user_time_diff_get() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
75
    $result = !empty($_COOKIE[SN_COOKIE_T]) ? explode(';', $_COOKIE[SN_COOKIE_T]) : null;
76
    $result = array(
77
      PLAYER_OPTION_TIME_DIFF              => isset($result[PLAYER_OPTION_TIME_DIFF]) ? $result[PLAYER_OPTION_TIME_DIFF] : '',
78
      PLAYER_OPTION_TIME_DIFF_UTC_OFFSET   => isset($result[PLAYER_OPTION_TIME_DIFF_UTC_OFFSET]) ? $result[PLAYER_OPTION_TIME_DIFF_UTC_OFFSET] : 0,
79
      PLAYER_OPTION_TIME_DIFF_FORCED       => isset($result[PLAYER_OPTION_TIME_DIFF_FORCED]) ? $result[PLAYER_OPTION_TIME_DIFF_FORCED] : 0,
80
      PLAYER_OPTION_TIME_DIFF_MEASURE_TIME => isset($result[PLAYER_OPTION_TIME_DIFF_MEASURE_TIME]) ? $result[PLAYER_OPTION_TIME_DIFF_MEASURE_TIME] : '2010-01-01',
81
    );
82
83
    return $result;
84
  }
85
86
}
87