Completed
Push — work-fleets ( 2bd11a...17dd3b )
by SuperNova.WS
06:36
created

includes/classes/DBStaticUser.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
/**
4
 * Class DBStaticUser
5
 */
6
class DBStaticUser extends DBStaticRecord {
7
8
  public static $_table = 'users';
9
  public static $_idField = 'id';
10
11
  protected static function whereNotAlly() {
12
13
  }
14
15
  // TODO - это вообще-то надо хранить в конфигурации
16
  /**
17
   * @return string
18
   */
19
  public static function getLastRegisteredUserName() {
20
    $query =
21
      static::buildDBQ()
22
        ->field('username')
23
        ->where('`user_as_ally` IS NULL')
24
        ->orderBy(array('`id` DESC'));
25
26
    return (string)$query->selectValue();
27
  }
28
29
  /**
30
   * @return DbResultIterator
31
   */
32
  public static function db_player_list_export_blitz_info() {
33
    return
34
      static::buildDBQ()
35
        ->fields(array('id', 'username', 'total_rank', 'total_points', 'onlinetime',))
36
        ->where('`user_as_ally` IS NULL')
37
        ->orderBy(array('`id`'))
38
        ->selectIterator();
39
  }
40
41
  /**
42
   * @return DbResultIterator
43
   */
44
  public static function db_user_list_non_bots() {
45
//    $query = doquery("SELECT `id` FROM {{users}} WHERE `user_as_ally` IS NULL AND `user_bot` = " . USER_BOT_PLAYER . " FOR UPDATE;");
46
47
    $query =
48
      static::buildDBQ()
49
        ->field('id')
50
        ->where("`user_as_ally` IS NULL")
51
        ->where("`user_bot` = " . USER_BOT_PLAYER)
52
        ->setForUpdate();
53
54
    return $query->selectIterator();
55
  }
56
57
  public static function db_user_lock_with_target_owner_and_acs($user, $planet = array()) {
58
    $query = "SELECT 1 FROM `{{users}}` WHERE `id` = " . idval($user['id']) .
59
      (!empty($planet['id_owner']) ? ' OR `id` = ' . idval($planet['id_owner']) : '')
60
      . " FOR UPDATE";
61
62
    static::getDb()->doSelect($query);
63
  }
64
65
  /**
66
   * @param bool $online
67
   *
68
   * @return int
69
   */
70
  public static function db_user_count($online = false) {
71
    return intval(static::getDb()->doQueryFetchValue(
72
      "SELECT COUNT(`id`) AS `user_count` 
73
      FROM `{{users}}` 
74
      WHERE 
75
        `user_as_ally` IS NULL" .
76
        ($online ? ' AND `onlinetime` > ' . (SN_TIME_NOW - classSupernova::$config->game_users_online_timeout) : '')
0 ignored issues
show
The property game_users_online_timeout does not exist on object<classConfig>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
77
    ));
78
  }
79
80
  public static function db_user_list_admin_sorted($sort, $online = false) {
81
//    $query = "SELECT
82
//          u.*, COUNT(r.id) AS referral_count, SUM(r.dark_matter) AS referral_dm
83
//      FROM
84
//          {{users}} as u
85
//          LEFT JOIN
86
//              {{referrals}} as r on r.id_partner = u.id
87
//      WHERE " .
88
//      ($online ? "`onlinetime` >= :onlineTime" : 'user_as_ally IS NULL') .
89
//      " GROUP BY u.id
90
//        ORDER BY user_as_ally, {$sort} ASC";
91
92
    $query = static::buildDBQ()
93
      ->setAlias('u')
94
      ->field('u.*')
95
      ->fieldCount('r.id', 'referral_count')
96
      ->fieldSingleFunction('sum', 'r.dark_matter', 'referral_dm')
97
      ->join('LEFT JOIN {{referrals}} as r on r.id_partner = u.id')
98
      ->where($online ? "`onlinetime` >= " . intval(SN_TIME_NOW - classSupernova::$config->game_users_online_timeout) : 'user_as_ally IS NULL')
99
      ->groupBy('u.id')
100
      ->orderBy("user_as_ally, {$sort} ASC");
101
102
    $result = $query->selectIterator();
103
104
    return $result;
105
  }
106
107
  public static function db_user_list_to_celebrate($config_user_birthday_range) {
108
    $query = static::buildDBQ()
109
      ->field('id', 'username', 'user_birthday', 'user_birthday_celebrated')
110
      ->fieldLiteral('CONCAT(YEAR(CURRENT_DATE), DATE_FORMAT(`user_birthday`, \'-%m-%d\')) AS `current_birthday`')
111
      ->fieldLiteral('DATEDIFF(CURRENT_DATE, CONCAT(YEAR(CURRENT_DATE), DATE_FORMAT(`user_birthday`, \'-%m-%d\'))) AS `days_after_birthday`')
112
      ->where('`user_birthday` IS NOT NULL')
113
      ->where('(`user_birthday_celebrated` IS NULL OR DATE_ADD(`user_birthday_celebrated`, INTERVAL 1 YEAR) < CURRENT_DATE)')
114
      ->where('`user_as_ally` IS NULL')
115
      ->having('`days_after_birthday` >= 0')
116
      ->having('`days_after_birthday` < ' . intval($config_user_birthday_range))
117
      ->setForUpdate();
118
119
    $result = $query->selectIterator();
120
//
121
//    $query = "SELECT
122
//        `id`, `username`, `user_birthday`, `user_birthday_celebrated`,
123
//        CONCAT(YEAR(CURRENT_DATE), DATE_FORMAT(`user_birthday`, '-%m-%d')) AS `current_birthday`,
124
//        DATEDIFF(CURRENT_DATE, CONCAT(YEAR(CURRENT_DATE), DATE_FORMAT(`user_birthday`, '-%m-%d'))) AS `days_after_birthday`
125
//      FROM
126
//        `{{users}}`
127
//      WHERE
128
//        `user_birthday` IS NOT NULL
129
//        AND `user_as_ally` IS NULL
130
//        AND (`user_birthday_celebrated` IS NULL OR DATE_ADD(`user_birthday_celebrated`, INTERVAL 1 YEAR) < CURRENT_DATE)
131
//      HAVING
132
//        `days_after_birthday` >= 0 AND `days_after_birthday` < {$config_user_birthday_range} FOR UPDATE";
133
//
134
//    $result = static::$dbStatic->doQueryIterator($query);
135
136
    return $result;
137
  }
138
139
  /**
140
   * @return DbEmptyIterator|DbMysqliResultIterator
141
   */
142
  public static function db_user_list_admin_multiaccounts() {
143
    $query = "SELECT COUNT(*) AS `ip_count`, `user_lastip`
144
      FROM `{{users}}`
145
      WHERE `user_as_ally` IS NULL
146
      GROUP BY `user_lastip`
147
      HAVING COUNT(*) > 1";
148
149
    return static::getDb()->doSelectIterator($query);
150
  }
151
152
  public static function db_player_list_blitz_delete_players() {
153
    classSupernova::$db->doDelete("DELETE FROM `{{users}}` WHERE `username` LIKE 'Игрок%';");
154
  }
155
156
  public static function db_player_list_blitz_set_50k_dm() {
157
    classSupernova::$db->doUpdate('UPDATE `{{users}}` SET `dark_matter` = 50000, `dark_matter_total` = 50000;');
158
  }
159
160
161
  /**
162
   * Выбирает записи игроков по списку их ID
163
   *
164
   * @param $user_id_list
165
   *
166
   * @return array
167
   */
168
  public static function db_user_list_by_id($user_id_list) {
169
    !is_array($user_id_list) ? $user_id_list = array($user_id_list) : false;
170
171
    $user_list = array();
172
    foreach ($user_id_list as $user_id_unsafe) {
173
      $user = DBStaticUser::db_user_by_id($user_id_unsafe);
174
      !empty($user) ? $user_list[$user_id_unsafe] = $user : false;
175
    }
176
177
    return $user_list;
178
  }
179
180
181
  public static function db_user_by_username($username_unsafe, $for_update = false, $fields = '*', $player = null, $like = false) {
182
    return classSupernova::db_get_user_by_username($username_unsafe, $for_update, $fields, $player, $like);
183
  }
184
185
  public static function db_user_list($user_filter = '', $for_update = false, $fields = '*') {
186
    return classSupernova::db_get_record_list(LOC_USER, $user_filter);
187
  }
188
189
  public static function db_user_set_by_id($user_id, $set) {
190
    return classSupernova::db_upd_record_by_id(LOC_USER, $user_id, $set);
191
  }
192
193
  public static function db_user_by_id($user_id_unsafe, $for_update = false, $fields = '*', $player = null) {
194
    return classSupernova::db_get_user_by_id($user_id_unsafe, $for_update, $fields, $player);
195
  }
196
197
  public static function db_user_list_set_mass_mail(&$owners_list, $set) {
198
    return classSupernova::db_upd_record_list(LOC_USER, !empty($owners_list) ? '`id` IN (' . implode(',', $owners_list) . ');' : '', $set);
199
  }
200
201
  public static function db_user_list_set_by_ally_and_rank($ally_id, $ally_rank_id, $set) {
202
    return classSupernova::db_upd_record_list(LOC_USER, "`ally_id`={$ally_id} AND `ally_rank_id` >= {$ally_rank_id}", $set);
203
  }
204
205
  public static function db_user_list_set_ally_deprecated_convert_ranks($ally_id, $i, $rank_id) {
206
    return classSupernova::db_upd_record_list(LOC_USER, "`ally_id` = {$ally_id} AND `ally_rank_id`={$rank_id}", "`ally_rank_id` = {$i}");
207
  }
208
209
  /**
210
   * @param array $playerArray
211
   */
212
  public static function renderNameAndCoordinates($playerArray) {
213
    return "{$playerArray['username']} " . uni_render_coordinates($playerArray);
214
  }
215
216
//  // TODO - IoC test
217
//  public static function test() {
218
//    $that = new static();
219
//
220
//    return DBStaticUser::getMax($that);
221
//  }
222
}
223