Alexeina66
Мой дом здесь!
- Регистрация
- 26 Авг 2013
- Сообщения
- 426
- Реакции
- 447
- Автор темы
- #1
Добрый день.
Столкнулся с такой проблемой. Есть плагин на WP, который выдает платный доступ к контенту после покупки. В настройках плагина можно выставлять время доступа в полях - год, месяц, дни, часы, минуты.
Выставляю доступ на 1 день, покупаю доступ и получаю вместо 1 дня (24 часа) 3 часа. При разборе логики плагина выяснил, что плагин отсчитывант время от текущего времени сервера. На момент покупки время сервера 21 час. вычитает установленное время в настройках плагина 1 день (24 часа) и выдает доступ на 3 часа, что в корне неверно. В настройках WP стоит часовой пояс UTC+7. Как сделать, чтобы отсчет был с времени покупки пользователя, а не сервера?
Подсчет времени
Выдача доступа
Функция покупки доступа, где $args['payment_date'] = current_time( 'mysql' ); время покупки отображает в БД по времени сервера
Столкнулся с такой проблемой. Есть плагин на WP, который выдает платный доступ к контенту после покупки. В настройках плагина можно выставлять время доступа в полях - год, месяц, дни, часы, минуты.
Выставляю доступ на 1 день, покупаю доступ и получаю вместо 1 дня (24 часа) 3 часа. При разборе логики плагина выяснил, что плагин отсчитывант время от текущего времени сервера. На момент покупки время сервера 21 час. вычитает установленное время в настройках плагина 1 день (24 часа) и выдает доступ на 3 часа, что в корне неверно. В настройках WP стоит часовой пояс UTC+7. Как сделать, чтобы отсчет был с времени покупки пользователя, а не сервера?
Подсчет времени
PHP:
function wau_setup_time( $data ) {
$time = 0;
$time += (isset( $data['year'] ) && $data['year']) ? $data['year'] * 31104000 : 0;
$time += (isset( $data['month'] ) && $data['month']) ? $data['month'] * 2592000 : 0;
$time += (isset( $data['day'] ) && $data['day']) ? $data['day'] * 86400 : 0;
$time += (isset( $data['hour'] ) && $data['hour']) ? $data['hour'] * 3600 : 0;
$time += (isset( $data['minute'] ) && $data['minute']) ? $data['minute'] * 60 : 0;
return $time;
}
function wau_parse_time( $time ) {
$data = array(
'year' => 0,
'month' => 0,
'day' => 0,
'hour' => 0,
'minute' => 0
);
$data['year'] = floor( $time / 31104000 );
if ( $data['year'] < 0 )
$data['year'] = 0;
$sec_month = $time - ($data['year'] * 31104000);
$data['month'] = floor( $sec_month / 2592000 );
if ( $data['month'] < 0 )
$data['month'] = 0;
$sec_day = $sec_month - ($data['month'] * 2592000);
$data['day'] = floor( $sec_day / 86400 );
$sec_hour = $sec_day - ($data['day'] * 86400);
$data['hour'] = floor( $sec_hour / 3600 );
$sec_min = $sec_hour - ($data['hour'] * 3600);
$data['minute'] = floor( $sec_min / 60 );
return $data;
}
Выдача доступа
PHP:
function wau_add_access( $args ) {
global $wpdb;
if ( ! isset( $args['access_date'] ) )
$args['access_date'] = current_time( 'mysql' );
if ( ! $wpdb->insert( WP_PREFIX . "wau_access", $args ) )
return false;
$access_id = $wpdb->insert_id;
do_action( 'wau_add_access', $access_id );
return $access_id;
}
function wau_update_user_access( $user_id, $account_id, $access_time, $append = true ) {
if ( $access = wau_get_user_access_by_account( $user_id, $account_id ) ) {
if ( $append && wau_get_account_field( $account_id, 'is_prolong' ) ) {
$access_time += $access->access_time;
} else {
$access_time += strtotime( current_time( 'mysql' ) ) - strtotime( $access->access_date );
}
$result = wau_update_access( $access->access_id, array(
'access_time' => $access_time
) );
$access_id = $access->access_id;
} else {
$access_id = wau_add_access( array(
'user_id' => $user_id,
'account_id' => $account_id,
'access_time' => $access_time
) );
}
do_action( 'wau_update_user_access', $access_id );
return $access_id;
}
Функция покупки доступа, где $args['payment_date'] = current_time( 'mysql' ); время покупки отображает в БД по времени сервера
PHP:
function wau_add_payment( $args ) {
global $wpdb;
if ( ! isset( $args['payment_date'] ) )
$args['payment_date'] = current_time( 'mysql' );
if ( ! $wpdb->insert( WP_PREFIX . "wau_payments", $args ) )
return false;
$payment_id = $wpdb->insert_id;
do_action( 'wau_add_payment', $payment_id );
return $payment_id;
}