197 lines
6.1 KiB
PHP
197 lines
6.1 KiB
PHP
<?php
|
|
if(!function_exists('add_filter')) exit;
|
|
|
|
function fansub_get_administrators($args = array()) {
|
|
$args['role'] = 'administrator';
|
|
return get_users($args);
|
|
}
|
|
|
|
function fansub_is_subscriber($user = null) {
|
|
if(!is_a($user, 'WP_User')) {
|
|
$user = wp_get_current_user();
|
|
}
|
|
$role = fansub_get_user_role($user);
|
|
if('subscriber' == $role) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function fansub_get_first_admin($args = array()) {
|
|
$users = fansub_get_administrators($args);
|
|
$user = new WP_User();
|
|
foreach($users as $value) {
|
|
$user = $value;
|
|
break;
|
|
}
|
|
return $user;
|
|
}
|
|
|
|
function fansub_is_admin($user = null) {
|
|
if(!is_a($user, 'WP_User')) {
|
|
return current_user_can('manage_options');
|
|
}
|
|
if(array_intersect($user->roles, array('administrator'))) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function fansub_count_user($role = 'total_users') {
|
|
$count = count_users();
|
|
$result = fansub_get_value_by_key($count, $role, $count['total_users']);
|
|
return $result;
|
|
}
|
|
|
|
function fansub_remove_all_user_role($user) {
|
|
foreach($user->roles as $role) {
|
|
$user->remove_role($role);
|
|
}
|
|
}
|
|
|
|
function fansub_add_user($args = array()) {
|
|
$result = 0;
|
|
$password = isset($args['password']) ? $args['password'] : '';
|
|
$role = isset($args['role']) ? $args['role'] : '';
|
|
$username = isset($args['username']) ? $args['username'] : '';
|
|
$email = isset($args['email']) ? $args['email'] : '';
|
|
if(!empty($password) && !empty($username) && !empty($email) && !username_exists($username) && !email_exists($email)) {
|
|
$user_id = wp_create_user($username, $password, $email);
|
|
$user = get_user_by('id', $user_id);
|
|
fansub_remove_all_user_role($user);
|
|
if(empty($role)) {
|
|
$role = get_option('default_role');
|
|
if(empty($role)) {
|
|
$role = 'subscriber';
|
|
}
|
|
$role = apply_filters('fansub_new_user_role', $role, $args);
|
|
}
|
|
$user->add_role($role);
|
|
$result = $user_id;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function fansub_add_user_admin($args = array()) {
|
|
$args['role'] = 'administrator';
|
|
fansub_add_user($args);
|
|
}
|
|
|
|
function fansub_get_user_roles($user = null) {
|
|
$roles = array();
|
|
if(fansub_id_number_valid($user)) {
|
|
$user = get_user_by('id', $user);
|
|
}
|
|
if(!is_a($user, 'WP_User')) {
|
|
$user = wp_get_current_user();
|
|
}
|
|
if(is_a($user, 'WP_User')) {
|
|
$roles = (array)$user->roles;
|
|
}
|
|
return $roles;
|
|
}
|
|
|
|
function fansub_get_user_role($user = null) {
|
|
$roles = fansub_get_user_roles($user);
|
|
return current($roles);
|
|
}
|
|
|
|
function fansub_current_user_can_use_rich_editor() {
|
|
if(!current_user_can('edit_posts') && !current_user_can('edit_pages') && get_user_option('rich_editing') == 'true') {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function fansub_get_user_viewed_posts($user_id = null) {
|
|
if(!fansub_id_number_valid($user_id) && is_user_logged_in()) {
|
|
$user = wp_get_current_user();
|
|
$user_id = $user->ID;
|
|
}
|
|
if(fansub_id_number_valid($user_id)) {
|
|
$viewed_posts = get_user_meta($user_id, 'viewed_posts', true);
|
|
$viewed_posts = fansub_sanitize_array($viewed_posts);
|
|
} else {
|
|
$viewed_posts = isset($_SESSION['viewed_posts']) ? $_SESSION['viewed_posts'] : '';
|
|
if(!empty($viewed_posts)) {
|
|
$viewed_posts = fansub_json_string_to_array($viewed_posts);
|
|
}
|
|
$viewed_posts = fansub_sanitize_array($viewed_posts);
|
|
}
|
|
return $viewed_posts;
|
|
}
|
|
|
|
function fansub_track_user_viewed_posts() {
|
|
$use = apply_filters('fansub_track_user_viewed_posts', false);
|
|
return $use;
|
|
}
|
|
|
|
function fansub_get_user_favorite_posts($user_id) {
|
|
$favorite_posts = get_user_meta($user_id, 'favorite_posts', true);
|
|
$favorite_posts = fansub_sanitize_array($favorite_posts);
|
|
return $favorite_posts;
|
|
}
|
|
|
|
function fansub_check_user_password($password, $user) {
|
|
if(!is_a($user, 'WP_User')) {
|
|
return false;
|
|
}
|
|
return wp_check_password($password, $user->user_pass, $user->ID);
|
|
}
|
|
|
|
function fansub_user_viewed_posts_hook() {
|
|
$use = fansub_track_user_viewed_posts();
|
|
if($use && is_singular()) {
|
|
$expired_interval = HOUR_IN_SECONDS;
|
|
$expired_interval = apply_filters('fansub_track_user_viewed_posts_expired_interval', $expired_interval);
|
|
$now = time();
|
|
if(is_user_logged_in()) {
|
|
$user = wp_get_current_user();
|
|
$viewed_posts = get_user_meta($user->ID, 'viewed_posts', true);
|
|
$viewed_posts = fansub_sanitize_array($viewed_posts);
|
|
$post_id = get_the_ID();
|
|
$viewed_posts[$post_id] = $now;
|
|
foreach($viewed_posts as $post_id => $time) {
|
|
$dif = $now - $time;
|
|
if($expired_interval < $dif) {
|
|
unset($viewed_posts[$post_id]);
|
|
}
|
|
}
|
|
update_user_meta($user->ID, 'viewed_posts', $viewed_posts);
|
|
} else {
|
|
$viewed_posts = isset($_SESSION['viewed_posts']) ? $_SESSION['viewed_posts'] : '';
|
|
if(!empty($viewed_posts)) {
|
|
$viewed_posts = fansub_json_string_to_array($viewed_posts);
|
|
}
|
|
$viewed_posts = fansub_sanitize_array($viewed_posts);
|
|
$post_id = get_the_ID();
|
|
$viewed_posts[$post_id] = $now;
|
|
foreach($viewed_posts as $post_id => $time) {
|
|
$dif = $now - $time;
|
|
if($expired_interval < $dif) {
|
|
unset($viewed_posts[$post_id]);
|
|
}
|
|
}
|
|
$_SESSION['viewed_posts'] = json_encode($viewed_posts);
|
|
}
|
|
}
|
|
}
|
|
add_action('wp', 'fansub_user_viewed_posts_hook');
|
|
|
|
function fansub_allow_role_upload_media($roles) {
|
|
$roles = fansub_sanitize_array($roles);
|
|
$caps = array(
|
|
'upload_files',
|
|
'publish_pages',
|
|
'edit_published_pages',
|
|
'edit_others_pages'
|
|
);
|
|
foreach($roles as $role) {
|
|
$role = get_role($role);
|
|
if(is_a($role, 'WP_Role')) {
|
|
foreach($caps as $cap) {
|
|
$role->add_cap($cap);
|
|
}
|
|
}
|
|
}
|
|
} |