3015 lines
112 KiB
PHP
3015 lines
112 KiB
PHP
<?php
|
||
if(!function_exists('add_filter')) exit;
|
||
|
||
function fansub_use_session() {
|
||
$use_session = apply_filters('fansub_track_user_viewed_posts', false);
|
||
$use_session = apply_filters('fansub_use_session', $use_session);
|
||
return (bool)$use_session;
|
||
}
|
||
|
||
function fansub_session_start() {
|
||
$use_session = fansub_use_session();
|
||
if(!$use_session) {
|
||
return;
|
||
}
|
||
$session_start = true;
|
||
if(version_compare(PHP_VERSION, '5.4', '>=')) {
|
||
if(session_status() == PHP_SESSION_NONE) {
|
||
$session_start = false;
|
||
}
|
||
} else {
|
||
if('' == session_id()) {
|
||
$session_start = false;
|
||
}
|
||
}
|
||
if(!$session_start) {
|
||
do_action('fansub_session_start_before');
|
||
session_start();
|
||
}
|
||
}
|
||
|
||
function fansub_debug_log($message) {
|
||
if(WP_DEBUG === true) {
|
||
if(is_array($message) || is_object($message)) {
|
||
error_log(print_r($message, true));
|
||
} else {
|
||
error_log($message);
|
||
}
|
||
}
|
||
}
|
||
|
||
function fansub_create_file($path, $content = '') {
|
||
if($fh = fopen($path, 'w')) {
|
||
fwrite($fh, $content, 1024);
|
||
fclose($fh);
|
||
}
|
||
}
|
||
|
||
function fansub_get_pc_ip() {
|
||
$result = '';
|
||
if(function_exists('getHostByName')) {
|
||
if(version_compare(PHP_VERSION, '5.3', '<') && function_exists('php_uname')) {
|
||
$result = getHostByName(php_uname('n'));
|
||
} elseif(function_exists('getHostName')) {
|
||
$result = getHostByName(getHostName());
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_all_shortcodes() {
|
||
return $GLOBALS['shortcode_tags'];
|
||
}
|
||
|
||
function fansub_get_alphabetical_chars() {
|
||
$result = '#ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||
$result = str_split($result);
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_all_sb_shortcodes() {
|
||
$shortcodes = fansub_get_all_shortcodes();
|
||
$result = array();
|
||
foreach($shortcodes as $key => $function) {
|
||
if(('sb' == substr($key, 0, 2) && 'sb' == substr($function, 0, 2)) || ('fansub' == substr($key, 0, 5) && 'fansub' == substr($function, 0, 5))) {
|
||
$result[$key] = $function;
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_my_shortcodes() {
|
||
return fansub_get_all_sb_shortcodes();
|
||
}
|
||
|
||
function fansub_get_timezone_string() {
|
||
$timezone_string = get_option('timezone_string');
|
||
if(empty($timezone_string)) {
|
||
$timezone_string = 'Asia/Ho_Chi_Minh';
|
||
}
|
||
return $timezone_string;
|
||
}
|
||
|
||
function fansub_get_current_date($format = 'Y-m-d') {
|
||
date_default_timezone_set(fansub_get_timezone_string());
|
||
$result = date($format);
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_current_datetime_mysql() {
|
||
return fansub_get_current_date('Y-m-d H:i:s');
|
||
}
|
||
|
||
function fansub_is_ip($ip) {
|
||
if(filter_var($ip, FILTER_VALIDATE_IP)) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_get_ipinfo($ip) {
|
||
if(!fansub_is_ip($ip)) {
|
||
return '';
|
||
}
|
||
$json = @file_get_contents('http://ipinfo.io/' . $ip);
|
||
$details = json_decode($json);
|
||
$details = (array)$details;
|
||
return $details;
|
||
}
|
||
|
||
function fansub_get_user_isp_ip() {
|
||
$client = @$_SERVER['HTTP_CLIENT_IP'];
|
||
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
|
||
$remote = $_SERVER['REMOTE_ADDR'];
|
||
if(fansub_is_ip($client)) {
|
||
$ip = $client;
|
||
} elseif(fansub_is_ip($forward)) {
|
||
$ip = $forward;
|
||
} else {
|
||
$ip = $remote;
|
||
}
|
||
return $ip;
|
||
}
|
||
|
||
function fansub_array_has_value($arr) {
|
||
if(is_array($arr) && count($arr) > 0) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_get_plugin_info($plugin_file) {
|
||
if(!file_exists($plugin_file)) {
|
||
$plugin_file = trailingslashit(WP_PLUGIN_DIR) . $plugin_file;
|
||
}
|
||
if(!file_exists($plugin_file)) {
|
||
return null;
|
||
}
|
||
return get_plugin_data($plugin_file);
|
||
}
|
||
|
||
function fansub_get_plugin_name($plugin_file, $default = '') {
|
||
$plugin = fansub_get_plugin_info($plugin_file);
|
||
return fansub_get_value_by_key($plugin, 'Name', $default);
|
||
}
|
||
|
||
function fansub_string_empty($string) {
|
||
if('' === $string) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_get_value_by_key($arr, $key, $default = '') {
|
||
if(is_object($key) || is_object($arr) || fansub_string_empty($key)) {
|
||
return $default;
|
||
}
|
||
$has_key = false;
|
||
$arr = fansub_sanitize_array($arr);
|
||
$result = '';
|
||
if(fansub_array_has_value($arr)) {
|
||
if(is_array($key)) {
|
||
if(count($key) == 1) {
|
||
$key = array_shift($key);
|
||
if(isset($arr[$key])) {
|
||
return $arr[$key];
|
||
}
|
||
} else {
|
||
$tmp = $arr;
|
||
if(is_array($tmp)) {
|
||
$has_value = false;
|
||
$level = 0;
|
||
foreach($key as $index => $child_key) {
|
||
if(is_array($child_key)) {
|
||
if(count($child_key) == 1) {
|
||
$child_key = array_shift($child_key);
|
||
}
|
||
$result = fansub_get_value_by_key($tmp, $child_key);
|
||
} else {
|
||
if(isset($tmp[$child_key])) {
|
||
$tmp = $tmp[$child_key];
|
||
$has_value = true;
|
||
$level++;
|
||
$has_key = true;
|
||
}
|
||
}
|
||
}
|
||
if(!$has_value) {
|
||
reset($key);
|
||
$first_key = current($key);
|
||
if(fansub_array_has_value($arr)) {
|
||
$tmp = fansub_get_value_by_key($arr, $first_key);
|
||
if(fansub_array_has_value($tmp)) {
|
||
$result = fansub_get_value_by_key($tmp, $key);
|
||
}
|
||
}
|
||
}
|
||
if($has_value && fansub_string_empty($result)) {
|
||
$result = $tmp;
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
if(isset($arr[$key])) {
|
||
$result = $arr[$key];
|
||
$has_key = true;
|
||
} else {
|
||
foreach($arr as $index => $value) {
|
||
if(is_array($value)) {
|
||
$result = fansub_get_value_by_key($value, $key);
|
||
} else {
|
||
if($key === $index) {
|
||
$has_key = true;
|
||
$result = $value;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(!$has_key) {
|
||
$result = $default;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_method_value($key, $method = 'post', $default = '') {
|
||
$method = strtoupper($method);
|
||
switch($method) {
|
||
case 'POST':
|
||
$result = fansub_get_value_by_key($_POST, $key, $default);
|
||
break;
|
||
case 'GET':
|
||
$result = fansub_get_value_by_key($_GET, $key, $default);
|
||
break;
|
||
default:
|
||
$result = fansub_get_value_by_key($_REQUEST, $key, $default);
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_array_unique($arr) {
|
||
if(is_array($arr)) {
|
||
$arr = array_map('unserialize', array_unique(array_map('serialize', $arr)));
|
||
}
|
||
return $arr;
|
||
}
|
||
|
||
function fansub_get_terms($taxonomy, $args = array()) {
|
||
global $wp_version;
|
||
$defaults = array(
|
||
'hide_empty' => 0,
|
||
'taxonomy' => $taxonomy
|
||
);
|
||
$args = wp_parse_args($args, $defaults);
|
||
if(version_compare($wp_version, '4.5', '>=')) {
|
||
$terms = get_terms($args);
|
||
} else {
|
||
$terms = get_terms($taxonomy, $args);
|
||
}
|
||
return $terms;
|
||
}
|
||
|
||
function fansub_remove_select_tag_keep_content($content) {
|
||
$content = strip_tags($content, '<optgroup><option>');
|
||
return $content;
|
||
}
|
||
|
||
function fansub_object_valid($object) {
|
||
if(is_object($object) && !is_wp_error($object)) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_id_number_valid($id) {
|
||
if(is_numeric($id) && $id > 0) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_generate_serial() {
|
||
$serial = new FANSUB_Serial();
|
||
return $serial->generate();
|
||
}
|
||
|
||
function fansub_check_password($password) {
|
||
return wp_check_password($password, FANSUB_HASHED_PASSWORD);
|
||
}
|
||
|
||
function fansub_get_term_drop_down($args = array()) {
|
||
$defaults = array(
|
||
'hide_empty' => false,
|
||
'hide_if_empty' => true,
|
||
'hierarchical' => true,
|
||
'orderby' => 'NAME',
|
||
'show_count' => true,
|
||
'echo' => false,
|
||
'taxonomy' => 'category'
|
||
);
|
||
$args = wp_parse_args($args, $defaults);
|
||
$select = wp_dropdown_categories($args);
|
||
if(!empty($select)) {
|
||
$required = fansub_get_value_by_key($args, 'required', false);
|
||
$autocomplete = (bool)fansub_get_value_by_key($args, 'autocomplete', false);
|
||
if($required) {
|
||
$select = fansub_add_html_attribute('select', $select, 'required aria-required="true"');
|
||
}
|
||
if(!$autocomplete) {
|
||
$select = fansub_add_html_attribute('select', $select, 'autocomplete="off"');
|
||
}
|
||
}
|
||
return $select;
|
||
}
|
||
|
||
function fansub_is_login_page() {
|
||
return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'));
|
||
}
|
||
|
||
function fansub_can_save_post($post_id) {
|
||
if(fansub_id_number_valid($post_id) && !FANSUB_DOING_AUTO_SAVE && current_user_can('edit_post', $post_id)) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_get_first_char($string, $encoding = 'UTF-8') {
|
||
$result = '';
|
||
if(!empty($string)) {
|
||
$result = mb_substr($string, 0, 1, $encoding);
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_remove_first_char($string, $char) {
|
||
$string = ltrim($string, $char);
|
||
return $string;
|
||
}
|
||
|
||
function fansub_get_last_char($string, $encoding = 'UTF-8') {
|
||
$result = '';
|
||
if(!empty($string)) {
|
||
$result = mb_substr($string, -1, 1, $encoding);
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_remove_last_char($string, $char) {
|
||
$string = rtrim($string, $char);
|
||
return $string;
|
||
}
|
||
|
||
function fansub_remove_first_char_and_last_char($string, $char) {
|
||
$string = trim($string, $char);
|
||
return $string;
|
||
}
|
||
|
||
function fansub_uppercase($string, $encoding = 'utf-8') {
|
||
return mb_strtoupper($string, $encoding);
|
||
}
|
||
|
||
function fansub_uppercase_first_char($string, $encoding = 'utf-8') {
|
||
$first_char = fansub_get_first_char($string, $encoding);
|
||
$len = mb_strlen($string, $encoding);
|
||
$then = mb_substr($string, 1, $len - 1, $encoding);
|
||
$first_char = fansub_uppercase($first_char, $encoding);
|
||
return $first_char . $then;
|
||
}
|
||
|
||
function fansub_uppercase_first_char_words($string, $deprecated = '') {
|
||
if(!empty($deprecated)) {
|
||
_deprecated_argument(__FUNCTION__, '3.3.4');
|
||
}
|
||
$words = explode(' ', $string);
|
||
$words = array_map('fansub_uppercase_first_char', $words);
|
||
return implode(' ', $words);
|
||
}
|
||
|
||
function fansub_uppercase_first_char_only($string, $encoding = 'utf-8') {
|
||
$string = fansub_lowercase($string, $encoding);
|
||
$string = fansub_uppercase_first_char($string, $encoding);
|
||
return $string;
|
||
}
|
||
|
||
function fansub_lowercase($string, $encoding = 'utf-8') {
|
||
return mb_strtolower($string, $encoding);
|
||
}
|
||
|
||
function fansub_can_redirect() {
|
||
if(!FANSUB_DOING_CRON && !FANSUB_DOING_CRON) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_carousel_bootstrap($args = array()) {
|
||
$container_class = isset($args['container_class']) ? $args['container_class'] : '';
|
||
$slide = fansub_get_value_by_key($args, 'slide', true);
|
||
if($slide) {
|
||
fansub_add_string_with_space_before($container_class, 'slide');
|
||
}
|
||
$id = isset($args['id']) ? $args['id'] : '';
|
||
$callback = isset($args['callback']) ? $args['callback'] : '';
|
||
$posts = isset($args['posts']) ? $args['posts'] : array();
|
||
$posts_per_page = isset($args['posts_per_page']) ? $args['posts_per_page'] : get_option('posts_per_page');
|
||
$count = isset($args['count']) ? $args['count'] : 0;
|
||
if(0 == $count && $posts_per_page > 0) {
|
||
$count = count($posts) / $posts_per_page;
|
||
}
|
||
$show_control = isset($args['show_control']) ? $args['show_control'] : false;
|
||
$count = ceil(abs($count));
|
||
fansub_add_string_with_space_before($container_class, 'carousel');
|
||
$auto_slide = isset($args['auto_slide']) ? (bool)$args['auto_slide'] : true;
|
||
if(empty($id) || !fansub_callback_exists($callback)) {
|
||
return;
|
||
}
|
||
$data_interval = fansub_get_value_by_key($args, 'interval', 6000);
|
||
if(!$auto_slide || 1000 > $data_interval) {
|
||
$data_interval = 'false';
|
||
}
|
||
$indicator_with_control = isset($args['indicator_with_control']) ? $args['indicator_with_control'] : false;
|
||
$indicator_html = '';
|
||
if($count > 1) {
|
||
$ol = new FANSUB_HTML('ol');
|
||
$ol->set_class('carousel-indicators list-unstyled list-inline');
|
||
$ol_items = '';
|
||
for($i = 0; $i < $count; $i++) {
|
||
$indicator_class = 'carousel-paginate';
|
||
if(0 == $i) {
|
||
fansub_add_string_with_space_before($indicator_class, 'active');
|
||
}
|
||
$li = '<li data-slide-to="' . $i . '" data-target="#' . $id . '" class="' . $indicator_class . '" data-text="' . ($i + 1) . '"></li>';
|
||
$ol_items .= $li;
|
||
}
|
||
$ol->set_text($ol_items);
|
||
$indicator_html = $ol->build();
|
||
}
|
||
$ul = new FANSUB_HTML('ul');
|
||
$ul->set_class('list-inline list-unstyled list-controls');
|
||
$li_items = '';
|
||
if($count > 1 || $show_control) {
|
||
$control = new FANSUB_HTML('a');
|
||
$control->set_class('left carousel-control');
|
||
$control->set_href('#' . $id);
|
||
$control->set_attribute('data-slide', 'prev');
|
||
$control->set_attribute('role', 'button');
|
||
$control->set_text('<i class="fa fa-chevron-left"></i><span class="sr-only">' . __('Previous', 'fansub') . '</span>');
|
||
$li_items .= '<li class="prev">' . $control->build() . '</li>';
|
||
}
|
||
if($indicator_with_control) {
|
||
$li_items .= '<li class="indicators">' . $indicator_html . '</li>';
|
||
}
|
||
if($count > 1 || $show_control) {
|
||
$control = new FANSUB_HTML('a');
|
||
$control->set_class('right carousel-control');
|
||
$control->set_href('#' . $id);
|
||
$control->set_attribute('data-slide', 'next');
|
||
$control->set_attribute('role', 'button');
|
||
$control->set_text('<i class="fa fa-chevron-right"></i><span class="sr-only">' . __('Next', 'fansub') . '</span>');
|
||
$li_items .= '<li class="next">' . $control->build() . '</li>';
|
||
}
|
||
$ul->set_text($li_items);
|
||
$controls = $ul->build();
|
||
if(!$indicator_with_control) {
|
||
$controls .= $indicator_html;
|
||
}
|
||
$title = fansub_get_value_by_key($args, 'title');
|
||
?>
|
||
<div data-ride="carousel" class="<?php echo $container_class; ?>" id="<?php echo $id; ?>" data-interval="<?php echo $data_interval; ?>">
|
||
<?php
|
||
$title_html = fansub_get_value_by_key($args, 'title_html');
|
||
if(empty($title_html)) {
|
||
if(!empty($title)) {
|
||
echo '<div class="title-wrap"><h4>' . $title. '</h4></div>';
|
||
}
|
||
} else {
|
||
echo $title_html;
|
||
}
|
||
?>
|
||
<div class="carousel-inner">
|
||
<?php
|
||
$args['posts_per_page'] = $posts_per_page;
|
||
call_user_func($callback, $args);
|
||
?>
|
||
</div>
|
||
<?php echo $controls; ?>
|
||
</div>
|
||
<?php
|
||
}
|
||
|
||
function fansub_modal_bootstrap($args = array()) {
|
||
$id = fansub_get_value_by_key($args, 'id');
|
||
$title = fansub_get_value_by_key($args, 'title');
|
||
$container_class = fansub_get_value_by_key($args, 'container_class');
|
||
$callback = fansub_get_value_by_key($args, 'callback');
|
||
$buttons = fansub_get_value_by_key($args, 'buttons', array());
|
||
$close_text = fansub_get_value_by_key($args, 'close_text', fansub_get_value_by_key($args, 'close_button_text', __('Đóng', 'fansub')));
|
||
fansub_add_string_with_space_before($container_class, 'modal fade');
|
||
$container_class = trim($container_class);
|
||
if(empty($id) || empty($title) || empty($callback)) {
|
||
return;
|
||
}
|
||
?>
|
||
<div class="<?php echo $container_class; ?>" id="<?php echo $id; ?>" tabindex="-1" role="dialog" aria-labelledby="<?php echo $id; ?>" aria-hidden="true">
|
||
<div class="modal-dialog">
|
||
<div class="modal-content">
|
||
<div class="modal-header text-left">
|
||
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only"><?php echo $close_text; ?></span></button>
|
||
<h4 class="modal-title"><?php echo $title; ?></h4>
|
||
</div>
|
||
<div class="modal-body">
|
||
<?php call_user_func($callback, $args); ?>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<?php foreach($buttons as $button) : ?>
|
||
<?php
|
||
$ajax_loading = '';
|
||
if(isset($button['loading_image']) && (bool)$button['loading_image']) {
|
||
$ajax_loading = fansub_get_image_url('icon-loading-circle-16.gif');
|
||
}
|
||
?>
|
||
<button type="button" class="btn <?php echo isset($button['class']) ? $button['class'] : ''; ?>"><span class="text"><?php echo isset($button['text']) ? $button['text'] : ''; ?></span><?php echo $ajax_loading; ?></button>
|
||
<?php endforeach; ?>
|
||
<button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $close_text; ?></button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<?php
|
||
}
|
||
|
||
function fansub_get_copyright_text() {
|
||
$text = '© ' . date('Y') . ' ' . get_bloginfo('name') . '. All rights reserved.';
|
||
return apply_filters('fansub_copyright_text', $text);
|
||
}
|
||
|
||
function fansub_get_countries() {
|
||
$countries = array(
|
||
'AF' => array('name' => 'Afghanistan', 'nativetongue' => 'افغانستان'),
|
||
'AX' => array('name' => 'Åland Islands', 'nativetongue' => 'Åland'),
|
||
'AL' => array('name' => 'Albania', 'nativetongue' => 'Shqipëri'),
|
||
'DZ' => array('name' => 'Algeria', 'nativetongue' => 'الجزائر'),
|
||
'AS' => array('name' => 'American Samoa', 'nativetongue' => ''),
|
||
'AD' => array('name' => 'Andorra', 'nativetongue' => ''),
|
||
'AO' => array('name' => 'Angola', 'nativetongue' => ''),
|
||
'AI' => array('name' => 'Anguilla', 'nativetongue' => ''),
|
||
'AQ' => array('name' => 'Antarctica', 'nativetongue' => ''),
|
||
'AG' => array('name' => 'Antigua and Barbuda', 'nativetongue' => ''),
|
||
'AR' => array('name' => 'Argentina', 'nativetongue' => ''),
|
||
'AM' => array('name' => 'Armenia', 'nativetongue' => 'Հայաստան'),
|
||
'AW' => array('name' => 'Aruba', 'nativetongue' => ''),
|
||
'AC' => array('name' => 'Ascension Island', 'nativetongue' => ''),
|
||
'AU' => array('name' => 'Australia', 'nativetongue' => ''),
|
||
'AT' => array('name' => 'Austria', 'nativetongue' => 'Österreich'),
|
||
'AZ' => array('name' => 'Azerbaijan', 'nativetongue' => 'Azərbaycan'),
|
||
'BS' => array('name' => 'Bahamas', 'nativetongue' => ''),
|
||
'BH' => array('name' => 'Bahrain', 'nativetongue' => 'البحرين'),
|
||
'BD' => array('name' => 'Bangladesh', 'nativetongue' => 'বাংলাদেশ'),
|
||
'BB' => array('name' => 'Barbados', 'nativetongue' => ''),
|
||
'BY' => array('name' => 'Belarus', 'nativetongue' => 'Беларусь'),
|
||
'BE' => array('name' => 'Belgium', 'nativetongue' => 'België'),
|
||
'BZ' => array('name' => 'Belize', 'nativetongue' => ''),
|
||
'BJ' => array('name' => 'Benin', 'nativetongue' => 'Bénin'),
|
||
'BM' => array('name' => 'Bermuda', 'nativetongue' => ''),
|
||
'BT' => array('name' => 'Bhutan', 'nativetongue' => 'འབྲུག'),
|
||
'BO' => array('name' => 'Bolivia', 'nativetongue' => ''),
|
||
'BA' => array('name' => 'Bosnia and Herzegovina', 'nativetongue' => 'Босна и Херцеговина'),
|
||
'BW' => array('name' => 'Botswana', 'nativetongue' => ''),
|
||
'BV' => array('name' => 'Bouvet Island', 'nativetongue' => ''),
|
||
'BR' => array('name' => 'Brazil', 'nativetongue' => 'Brasil'),
|
||
'IO' => array('name' => 'British Indian Ocean Territory','nativetongue' => ''),
|
||
'VG' => array('name' => 'British Virgin Islands', 'nativetongue' => ''),
|
||
'BN' => array('name' => 'Brunei', 'nativetongue' => ''),
|
||
'BG' => array('name' => 'Bulgaria', 'nativetongue' => 'България'),
|
||
'BF' => array('name' => 'Burkina Faso', 'nativetongue' => ''),
|
||
'BI' => array('name' => 'Burundi', 'nativetongue' => 'Uburundi'),
|
||
'KH' => array('name' => 'Cambodia', 'nativetongue' => 'កម្ពុជា'),
|
||
'CM' => array('name' => 'Cameroon', 'nativetongue' => 'Cameroun'),
|
||
'CA' => array('name' => 'Canada', 'nativetongue' => ''),
|
||
'IC' => array('name' => 'Canary Islands', 'nativetongue' => 'islas Canarias'),
|
||
'CV' => array('name' => 'Cape Verde', 'nativetongue' => 'Kabu Verdi'),
|
||
'BQ' => array('name' => 'Caribbean Netherlands', 'nativetongue' => ''),
|
||
'KY' => array('name' => 'Cayman Islands', 'nativetongue' => ''),
|
||
'CF' => array('name' => 'Central African Republic','nativetongue' => 'République centrafricaine'),
|
||
'EA' => array('name' => 'Ceuta and Melilla', 'nativetongue' => 'Ceuta y Melilla'),
|
||
'TD' => array('name' => 'Chad', 'nativetongue' => 'Tchad'),
|
||
'CL' => array('name' => 'Chile', 'nativetongue' => ''),
|
||
'CN' => array('name' => 'China', 'nativetongue' => '中国'),
|
||
'CX' => array('name' => 'Christmas Island', 'nativetongue' => ''),
|
||
'CP' => array('name' => 'Clipperton Island', 'nativetongue' => ''),
|
||
'CC' => array('name' => 'Cocos (Keeling) Islands', 'nativetongue' => 'Kepulauan Cocos (Keeling)'),
|
||
'CO' => array('name' => 'Colombia', 'nativetongue' => ''),
|
||
'KM' => array('name' => 'Comoros', 'nativetongue' => 'جزر القمر'),
|
||
'CD' => array('name' => 'Congo (DRC)', 'nativetongue' => 'Jamhuri ya Kidemokrasia ya Kongo'),
|
||
'CG' => array('name' => 'Congo (Republic)', 'nativetongue' => 'Congo-Brazzaville'),
|
||
'CK' => array('name' => 'Cook Islands', 'nativetongue' => ''),
|
||
'CR' => array('name' => 'Costa Rica', 'nativetongue' => ''),
|
||
'CI' => array('name' => 'Côte d’Ivoire', 'nativetongue' => ''),
|
||
'HR' => array('name' => 'Croatia', 'nativetongue' => 'Hrvatska'),
|
||
'CU' => array('name' => 'Cuba', 'nativetongue' => ''),
|
||
'CW' => array('name' => 'Curaçao', 'nativetongue' => ''),
|
||
'CY' => array('name' => 'Cyprus', 'nativetongue' => 'Κύπρος'),
|
||
'CZ' => array('name' => 'Czech Republic', 'nativetongue' => 'Česká republika'),
|
||
'DK' => array('name' => 'Denmark', 'nativetongue' => 'Danmark'),
|
||
'DG' => array('name' => 'Diego Garcia', 'nativetongue' => ''),
|
||
'DJ' => array('name' => 'Djibouti', 'nativetongue' => ''),
|
||
'DM' => array('name' => 'Dominica', 'nativetongue' => ''),
|
||
'DO' => array('name' => 'Dominican Republic', 'nativetongue' => 'República Dominicana'),
|
||
'EC' => array('name' => 'Ecuador', 'nativetongue' => ''),
|
||
'EG' => array('name' => 'Egypt', 'nativetongue' => 'مصر'),
|
||
'SV' => array('name' => 'El Salvador', 'nativetongue' => ''),
|
||
'GQ' => array('name' => 'Equatorial Guinea','nativetongue' => 'Guinea Ecuatorial'),
|
||
'ER' => array('name' => 'Eritrea', 'nativetongue' => ''),
|
||
'EE' => array('name' => 'Estonia', 'nativetongue' => 'Eesti'),
|
||
'ET' => array('name' => 'Ethiopia', 'nativetongue' => ''),
|
||
'FK' => array('name' => 'Falkland Islands', 'nativetongue' => 'Islas Malvinas'),
|
||
'FO' => array('name' => 'Faroe Islands', 'nativetongue' => 'Føroyar'),
|
||
'FJ' => array('name' => 'Fiji', 'nativetongue' => ''),
|
||
'FI' => array('name' => 'Finland', 'nativetongue' => 'Suomi'),
|
||
'FR' => array('name' => 'France', 'nativetongue' => ''),
|
||
'GF' => array('name' => 'French Guiana', 'nativetongue' => 'Guyane française'),
|
||
'PF' => array('name' => 'French Polynesia', 'nativetongue' => 'Polynésie française'),
|
||
'TF' => array('name' => 'French Southern Territories', 'nativetongue' => 'Terres australes françaises'),
|
||
'GA' => array('name' => 'Gabon', 'nativetongue' => ''),
|
||
'GM' => array('name' => 'Gambia', 'nativetongue' => ''),
|
||
'GE' => array('name' => 'Georgia', 'nativetongue' => 'საქართველო'),
|
||
'DE' => array('name' => 'Germany', 'nativetongue' => 'Deutschland'),
|
||
'GH' => array('name' => 'Ghana', 'nativetongue' => 'Gaana'),
|
||
'GI' => array('name' => 'Gibraltar', 'nativetongue' => ''),
|
||
'GR' => array('name' => 'Greece', 'nativetongue' => 'Ελλάδα'),
|
||
'GL' => array('name' => 'Greenland', 'nativetongue' => 'Kalaallit Nunaat'),
|
||
'GD' => array('name' => 'Grenada', 'nativetongue' => ''),
|
||
'GP' => array('name' => 'Guadeloupe', 'nativetongue' => ''),
|
||
'GU' => array('name' => 'Guam', 'nativetongue' => ''),
|
||
'GT' => array('name' => 'Guatemala', 'nativetongue' => ''),
|
||
'GG' => array('name' => 'Guernsey', 'nativetongue' => ''),
|
||
'GN' => array('name' => 'Guinea', 'nativetongue' => 'Guinée'),
|
||
'GW' => array('name' => 'Guinea-Bissau', 'nativetongue' => 'Guiné Bissau'),
|
||
'GY' => array('name' => 'Guyana', 'nativetongue' => ''),
|
||
'HT' => array('name' => 'Haiti', 'nativetongue' => ''),
|
||
'HM' => array('name' => 'Heard & McDonald Islands', 'nativetongue' => ''),
|
||
'HN' => array('name' => 'Honduras', 'nativetongue' => ''),
|
||
'HK' => array('name' => 'Hong Kong', 'nativetongue' => '香港'),
|
||
'HU' => array('name' => 'Hungary', 'nativetongue' => 'Magyarország'),
|
||
'IS' => array('name' => 'Iceland', 'nativetongue' => 'Ísland'),
|
||
'IN' => array('name' => 'India', 'nativetongue' => 'भारत'),
|
||
'ID' => array('name' => 'Indonesia', 'nativetongue' => ''),
|
||
'IR' => array('name' => 'Iran', 'nativetongue' => 'ایران'),
|
||
'IQ' => array('name' => 'Iraq', 'nativetongue' => 'العراق'),
|
||
'IE' => array('name' => 'Ireland', 'nativetongue' => ''),
|
||
'IM' => array('name' => 'Isle of Man', 'nativetongue' => ''),
|
||
'IL' => array('name' => 'Israel', 'nativetongue' => 'ישראל'),
|
||
'IT' => array('name' => 'Italy', 'nativetongue' => 'Italia'),
|
||
'JM' => array('name' => 'Jamaica', 'nativetongue' => ''),
|
||
'JP' => array('name' => 'Japan', 'nativetongue' => '日本'),
|
||
'JE' => array('name' => 'Jersey', 'nativetongue' => ''),
|
||
'JO' => array('name' => 'Jordan', 'nativetongue' => 'الأردن'),
|
||
'KZ' => array('name' => 'Kazakhstan', 'nativetongue' => 'Казахстан'),
|
||
'KE' => array('name' => 'Kenya', 'nativetongue' => ''),
|
||
'KI' => array('name' => 'Kiribati', 'nativetongue' => ''),
|
||
'XK' => array('name' => 'Kosovo', 'nativetongue' => 'Kosovë'),
|
||
'KW' => array('name' => 'Kuwait', 'nativetongue' => 'الكويت'),
|
||
'KG' => array('name' => 'Kyrgyzstan', 'nativetongue' => 'Кыргызстан'),
|
||
'LA' => array('name' => 'Laos', 'nativetongue' => 'ລາວ'),
|
||
'LV' => array('name' => 'Latvia', 'nativetongue' => 'Latvija'),
|
||
'LB' => array('name' => 'Lebanon', 'nativetongue' => 'لبنان'),
|
||
'LS' => array('name' => 'Lesotho', 'nativetongue' => ''),
|
||
'LR' => array('name' => 'Liberia', 'nativetongue' => ''),
|
||
'LY' => array('name' => 'Libya', 'nativetongue' => 'ليبيا'),
|
||
'LI' => array('name' => 'Liechtenstein', 'nativetongue' => ''),
|
||
'LT' => array('name' => 'Lithuania', 'nativetongue' => 'Lietuva'),
|
||
'LU' => array('name' => 'Luxembourg', 'nativetongue' => ''),
|
||
'MO' => array('name' => 'Macau', 'nativetongue' => '澳門'),
|
||
'MK' => array('name' => 'Macedonia (FYROM)','nativetongue' => 'Македонија'),
|
||
'MG' => array('name' => 'Madagascar', 'nativetongue' => 'Madagasikara'),
|
||
'MW' => array('name' => 'Malawi', 'nativetongue' => ''),
|
||
'MY' => array('name' => 'Malaysia', 'nativetongue' => ''),
|
||
'MV' => array('name' => 'Maldives', 'nativetongue' => ''),
|
||
'ML' => array('name' => 'Mali', 'nativetongue' => ''),
|
||
'MT' => array('name' => 'Malta', 'nativetongue' => ''),
|
||
'MH' => array('name' => 'Marshall Islands', 'nativetongue' => ''),
|
||
'MQ' => array('name' => 'Martinique', 'nativetongue' => ''),
|
||
'MR' => array('name' => 'Mauritania', 'nativetongue' => 'موريتانيا'),
|
||
'MU' => array('name' => 'Mauritius', 'nativetongue' => 'Moris'),
|
||
'YT' => array('name' => 'Mayotte', 'nativetongue' => ''),
|
||
'MX' => array('name' => 'Mexico', 'nativetongue' => ''),
|
||
'FM' => array('name' => 'Micronesia', 'nativetongue' => ''),
|
||
'MD' => array('name' => 'Moldova', 'nativetongue' => 'Republica Moldova'),
|
||
'MC' => array('name' => 'Monaco', 'nativetongue' => ''),
|
||
'MN' => array('name' => 'Mongolia', 'nativetongue' => 'Монгол'),
|
||
'ME' => array('name' => 'Montenegro', 'nativetongue' => 'Crna Gora'),
|
||
'MS' => array('name' => 'Montserrat', 'nativetongue' => ''),
|
||
'MA' => array('name' => 'Morocco', 'nativetongue' => 'المغرب'),
|
||
'MZ' => array('name' => 'Mozambique', 'nativetongue' => 'Moçambique'),
|
||
'MM' => array('name' => 'Myanmar (Burma)', 'nativetongue' => 'မြန်မာ'),
|
||
'NA' => array('name' => 'Namibia', 'nativetongue' => 'Namibië'),
|
||
'NR' => array('name' => 'Nauru', 'nativetongue' => ''),
|
||
'NP' => array('name' => 'Nepal', 'nativetongue' => 'नेपाल'),
|
||
'NL' => array('name' => 'Netherlands', 'nativetongue' => 'Nederland'),
|
||
'NC' => array('name' => 'New Caledonia', 'nativetongue' => 'Nouvelle-Calédonie'),
|
||
'NZ' => array('name' => 'New Zealand', 'nativetongue' => ''),
|
||
'NI' => array('name' => 'Nicaragua', 'nativetongue' => ''),
|
||
'NE' => array('name' => 'Niger', 'nativetongue' => 'Nijar'),
|
||
'NG' => array('name' => 'Nigeria', 'nativetongue' => ''),
|
||
'NU' => array('name' => 'Niue', 'nativetongue' => ''),
|
||
'NF' => array('name' => 'Norfolk Island', 'nativetongue' => ''),
|
||
'MP' => array('name' => 'Northern Mariana Islands', 'nativetongue' => ''),
|
||
'KP' => array('name' => 'North Korea', 'nativetongue' => '조선 민주주의 인민 공화국'),
|
||
'NO' => array('name' => 'Norway', 'nativetongue' => 'Norge'),
|
||
'OM' => array('name' => 'Oman', 'nativetongue' => 'عُمان'),
|
||
'PK' => array('name' => 'Pakistan', 'nativetongue' => 'پاکستان'),
|
||
'PW' => array('name' => 'Palau', 'nativetongue' => ''),
|
||
'PS' => array('name' => 'Palestine', 'nativetongue' => 'فلسطين'),
|
||
'PA' => array('name' => 'Panama', 'nativetongue' => ''),
|
||
'PG' => array('name' => 'Papua New Guinea', 'nativetongue' => ''),
|
||
'PY' => array('name' => 'Paraguay', 'nativetongue' => ''),
|
||
'PE' => array('name' => 'Peru', 'nativetongue' => 'Perú'),
|
||
'PH' => array('name' => 'Philippines', 'nativetongue' => ''),
|
||
'PN' => array('name' => 'Pitcairn Islands', 'nativetongue' => ''),
|
||
'PL' => array('name' => 'Poland', 'nativetongue' => 'Polska'),
|
||
'PT' => array('name' => 'Portugal', 'nativetongue' => ''),
|
||
'PR' => array('name' => 'Puerto Rico', 'nativetongue' => ''),
|
||
'QA' => array('name' => 'Qatar', 'nativetongue' => 'قطر'),
|
||
'RE' => array('name' => 'Réunion', 'nativetongue' => 'La Réunion'),
|
||
'RO' => array('name' => 'Romania', 'nativetongue' => 'România'),
|
||
'RU' => array('name' => 'Russia', 'nativetongue' => 'Россия'),
|
||
'RW' => array('name' => 'Rwanda', 'nativetongue' => ''),
|
||
'BL' => array('name' => 'Saint Barthélemy', 'nativetongue' => 'Saint-Barthélemy'),
|
||
'SH' => array('name' => 'Saint Helena', 'nativetongue' => ''),
|
||
'KN' => array('name' => 'Saint Kitts and Nevis', 'nativetongue' => ''),
|
||
'LC' => array('name' => 'Saint Lucia', 'nativetongue' => ''),
|
||
'MF' => array('name' => 'Saint Martin', 'nativetongue' => ''),
|
||
'PM' => array('name' => 'Saint Pierre and Miquelon', 'nativetongue' => 'Saint-Pierre-et-Miquelon'),
|
||
'WS' => array('name' => 'Samoa', 'nativetongue' => ''),
|
||
'SM' => array('name' => 'San Marino', 'nativetongue' => ''),
|
||
'ST' => array('name' => 'São Tomé and Príncipe', 'nativetongue' => 'São Tomé e Príncipe'),
|
||
'SA' => array('name' => 'Saudi Arabia', 'nativetongue' => 'المملكة العربية السعودية'),
|
||
'SN' => array('name' => 'Senegal', 'nativetongue' => 'Sénégal'),
|
||
'RS' => array('name' => 'Serbia', 'nativetongue' => 'Србија'),
|
||
'SC' => array('name' => 'Seychelles', 'nativetongue' => ''),
|
||
'SL' => array('name' => 'Sierra Leone', 'nativetongue' => ''),
|
||
'SG' => array('name' => 'Singapore', 'nativetongue' => ''),
|
||
'SX' => array('name' => 'Sint Maarten', 'nativetongue' => ''),
|
||
'SK' => array('name' => 'Slovakia', 'nativetongue' => 'Slovensko'),
|
||
'SI' => array('name' => 'Slovenia', 'nativetongue' => 'Slovenija'),
|
||
'SB' => array('name' => 'Solomon Islands', 'nativetongue' => ''),
|
||
'SO' => array('name' => 'Somalia', 'nativetongue' => 'Soomaaliya'),
|
||
'ZA' => array('name' => 'South Africa', 'nativetongue' => ''),
|
||
'GS' => array('name' => 'South Georgia & South Sandwich Islands', 'nativetongue' => ''),
|
||
'KR' => array('name' => 'South Korea', 'nativetongue' => '대한민국'),
|
||
'SS' => array('name' => 'South Sudan', 'nativetongue' => 'جنوب السودان'),
|
||
'ES' => array('name' => 'Spain', 'nativetongue' => 'España'),
|
||
'LK' => array('name' => 'Sri Lanka', 'nativetongue' => 'ශ්රී ලංකාව'),
|
||
'VC' => array('name' => 'St. Vincent & Grenadines', 'nativetongue' => ''),
|
||
'SD' => array('name' => 'Sudan', 'nativetongue' => 'السودان'),
|
||
'SR' => array('name' => 'Suriname', 'nativetongue' => ''),
|
||
'SJ' => array('name' => 'Svalbard and Jan Mayen', 'nativetongue' => 'Svalbard og Jan Mayen'),
|
||
'SZ' => array('name' => 'Swaziland', 'nativetongue' => ''),
|
||
'SE' => array('name' => 'Sweden', 'nativetongue' => 'Sverige'),
|
||
'CH' => array('name' => 'Switzerland', 'nativetongue' => 'Schweiz'),
|
||
'SY' => array('name' => 'Syria', 'nativetongue' => 'سوريا'),
|
||
'TW' => array('name' => 'Taiwan', 'nativetongue' => '台灣'),
|
||
'TJ' => array('name' => 'Tajikistan', 'nativetongue' => ''),
|
||
'TZ' => array('name' => 'Tanzania', 'nativetongue' => ''),
|
||
'TH' => array('name' => 'Thailand', 'nativetongue' => 'ไทย'),
|
||
'TL' => array('name' => 'Timor-Leste', 'nativetongue' => ''),
|
||
'TG' => array('name' => 'Togo', 'nativetongue' => ''),
|
||
'TK' => array('name' => 'Tokelau', 'nativetongue' => ''),
|
||
'TO' => array('name' => 'Tonga', 'nativetongue' => ''),
|
||
'TT' => array('name' => 'Trinidad and Tobago', 'nativetongue' => ''),
|
||
'TA' => array('name' => 'Tristan da Cunha', 'nativetongue' => ''),
|
||
'TN' => array('name' => 'Tunisia', 'nativetongue' => 'تونس'),
|
||
'TR' => array('name' => 'Turkey', 'nativetongue' => 'Türkiye'),
|
||
'TM' => array('name' => 'Turkmenistan', 'nativetongue' => ''),
|
||
'TC' => array('name' => 'Turks and Caicos Islands', 'nativetongue' => ''),
|
||
'TV' => array('name' => 'Tuvalu', 'nativetongue' => ''),
|
||
'UM' => array('name' => 'U.S. Outlying Islands', 'nativetongue' => ''),
|
||
'VI' => array('name' => 'U.S. Virgin Islands', 'nativetongue' => ''),
|
||
'UG' => array('name' => 'Uganda', 'nativetongue' => ''),
|
||
'UA' => array('name' => 'Ukraine', 'nativetongue' => 'Україна'),
|
||
'AE' => array('name' => 'United Arab Emirates', 'nativetongue' => 'الإمارات العربية المتحدة'),
|
||
'GB' => array('name' => 'United Kingdom', 'nativetongue' => ''),
|
||
'US' => array('name' => 'United States', 'nativetongue' => ''),
|
||
'UY' => array('name' => 'Uruguay', 'nativetongue' => ''),
|
||
'UZ' => array('name' => 'Uzbekistan', 'nativetongue' => 'Oʻzbekiston'),
|
||
'VU' => array('name' => 'Vanuatu', 'nativetongue' => ''),
|
||
'VA' => array('name' => 'Vatican City', 'nativetongue' => 'Città del Vaticano'),
|
||
'VE' => array('name' => 'Venezuela', 'nativetongue' => ''),
|
||
'VN' => array('name' => 'Vietnam', 'nativetongue' => 'Việt Nam'),
|
||
'WF' => array('name' => 'Wallis and Futuna', 'nativetongue' => ''),
|
||
'EH' => array('name' => 'Western Sahara', 'nativetongue' => 'الصحراء الغربية'),
|
||
'YE' => array('name' => 'Yemen', 'nativetongue' => 'اليمن'),
|
||
'ZM' => array('name' => 'Zambia', 'nativetongue' => ''),
|
||
'ZW' => array('name' => 'Zimbabwe', 'nativetongue' => '')
|
||
);
|
||
return $countries;
|
||
}
|
||
|
||
function fansub_transmit_id_and_name(&$id, &$name) {
|
||
if(empty($id) && !empty($name)) {
|
||
$id = $name;
|
||
}
|
||
if(empty($name) && !empty($id)) {
|
||
$name = $id;
|
||
}
|
||
}
|
||
|
||
function fansub_sanitize($data, $type) {
|
||
switch($type) {
|
||
case 'media':
|
||
return fansub_sanitize_media_value($data);
|
||
case 'text':
|
||
return sanitize_text_field(trim($data));
|
||
case 'email':
|
||
return sanitize_email(trim($data));
|
||
case 'file_name':
|
||
return fansub_sanitize_file_name($data);
|
||
case 'html_class':
|
||
$data = fansub_remove_vietnamese($data);
|
||
$data = fansub_sanitize_id($data);
|
||
$data = str_replace('_', '-', $data);
|
||
return $data;
|
||
case 'key':
|
||
return sanitize_key($data);
|
||
case 'mime_type':
|
||
return sanitize_mime_type($data);
|
||
case 'sql_orderby':
|
||
return sanitize_sql_orderby($data);
|
||
case 'slug':
|
||
return sanitize_title($data);
|
||
case 'title_for_query':
|
||
return sanitize_title_for_query($data);
|
||
case 'html_id':
|
||
return fansub_sanitize_id($data);
|
||
case 'array':
|
||
return fansub_sanitize_array($data);
|
||
default:
|
||
return $data;
|
||
}
|
||
}
|
||
|
||
function fansub_sanitize_html_class($class) {
|
||
return fansub_sanitize($class, 'html_class');
|
||
}
|
||
|
||
function fansub_vietnamese_currency() {
|
||
return apply_filters('fansub_vietnamese_currency', '₫');
|
||
}
|
||
|
||
function fansub_number_format($number) {
|
||
if('vi' == fansub_get_language()) {
|
||
return fansub_number_format_vietnamese($number);
|
||
}
|
||
return number_format($number, 0);
|
||
}
|
||
|
||
function fansub_number_format_vietnamese_currency($number) {
|
||
return fansub_number_format_vietnamese($number) . fansub_vietnamese_currency();
|
||
}
|
||
|
||
function fansub_number_format_vietnamese($number) {
|
||
$number = floatval($number);
|
||
return number_format($number, 0, '.', ',');
|
||
}
|
||
|
||
function fansub_to_array($needle, $filter_and_unique = true) {
|
||
$result = $needle;
|
||
if(!is_array($result)) {
|
||
$result = (array)$result;
|
||
}
|
||
if($filter_and_unique) {
|
||
$result = array_filter($result);
|
||
$result = array_unique($result);
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_string_to_array($delimiter, $text) {
|
||
if(is_array($text)) {
|
||
return $text;
|
||
}
|
||
if(empty($text)) {
|
||
return array();
|
||
}
|
||
$result = explode($delimiter, $text);
|
||
$result = array_filter($result);
|
||
return $result;
|
||
}
|
||
|
||
function fansub_paragraph_to_array($list_paragraph) {
|
||
$list_paragraph = str_replace('</p>', '', $list_paragraph);
|
||
$list_paragraph = explode('<p>', $list_paragraph);
|
||
return array_filter($list_paragraph);
|
||
}
|
||
|
||
function fansub_object_to_array($object) {
|
||
return json_decode(json_encode($object), true);
|
||
}
|
||
|
||
function fansub_std_object_to_array($object) {
|
||
return fansub_json_string_to_array(json_encode($object));
|
||
}
|
||
|
||
function fansub_json_string_to_array($json_string) {
|
||
if(!is_array($json_string)) {
|
||
$json_string = stripslashes($json_string);
|
||
$json_string = json_decode($json_string, true);
|
||
}
|
||
$json_string = fansub_sanitize_array($json_string);
|
||
return $json_string;
|
||
}
|
||
|
||
function fansub_sanitize_form_post($key, $type = 'default') {
|
||
switch($type) {
|
||
case 'checkbox':
|
||
return isset($_POST[$key]) ? 1 : 0;
|
||
case 'datetime':
|
||
return isset($_POST[$key]) ? strtotime(fansub_string_to_datetime($_POST[$key])) : '';
|
||
case 'timestamp':
|
||
$value = isset($_POST[$key]) ? $_POST[$key] : '';
|
||
$value = strtotime($value);
|
||
return $value;
|
||
default:
|
||
return isset($_POST[$key]) ? fansub_sanitize($_POST[$key], $type) : '';
|
||
}
|
||
}
|
||
|
||
function fansub_trim_array_item($item) {
|
||
if(is_string($item)) {
|
||
$item = trim($item);
|
||
}
|
||
return $item;
|
||
}
|
||
|
||
function fansub_remove_empty_array_item($arr) {
|
||
if(is_array($arr)) {
|
||
foreach($arr as $key => $item) {
|
||
if(fansub_string_empty($item)) {
|
||
unset($arr[$key]);
|
||
} elseif(is_array($item)) {
|
||
$arr[$key] = fansub_remove_empty_array_item($item);
|
||
}
|
||
}
|
||
}
|
||
return $arr;
|
||
}
|
||
|
||
function fansub_sanitize_array($arr, $unique = '', $filter = '') {
|
||
if(is_bool($unique) || '' !== $unique) {
|
||
_deprecated_argument(__FUNCTION__, '3.3.3');
|
||
}
|
||
if(is_bool($filter) || '' !== $filter) {
|
||
_deprecated_argument(__FUNCTION__, '3.3.3');
|
||
}
|
||
if(!is_array($arr)) {
|
||
$arr = (array)$arr;
|
||
}
|
||
return $arr;
|
||
}
|
||
|
||
function fansub_sanitize_size($size) {
|
||
$size = (array)$size;
|
||
if(isset($size['size'])) {
|
||
$type = $size['size'];
|
||
switch($type) {
|
||
case 'small':
|
||
$width = absint(get_option('thumbnail_size_w'));
|
||
$height = absint(get_option('thumbnail_size_h'));
|
||
if(0 != $width && 0 != $height) {
|
||
return array($width, $height);
|
||
}
|
||
break;
|
||
case 'medium':
|
||
$width = absint(get_option('medium_size_w'));
|
||
$height = absint(get_option('medium_size_h'));
|
||
if(0 != $width && 0 != $height) {
|
||
return array($width, $height);
|
||
}
|
||
break;
|
||
case 'large':
|
||
$width = absint(get_option('large_size_w'));
|
||
$height = absint(get_option('large_size_h'));
|
||
if(0 != $width && 0 != $height) {
|
||
return array($width, $height);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
$width = intval(isset($size[0]) ? $size['0'] : 0);
|
||
if(0 == $width && isset($size['width'])) {
|
||
$width = $size['width'];
|
||
}
|
||
$height = intval(isset($size[1]) ? $size[1] : $width);
|
||
if(0 != $width && (0 == $height || $height == $width) && isset($size['height'])) {
|
||
$height = $size['height'];
|
||
}
|
||
return array($width, $height);
|
||
}
|
||
|
||
function fansub_sanitize_callback($args) {
|
||
$callback = isset($args['func']) ? $args['func'] : '';
|
||
if(empty($callback)) {
|
||
$callback = isset($args['callback']) ? $args['callback'] : '';
|
||
}
|
||
return $callback;
|
||
}
|
||
|
||
function fansub_sanitize_callback_args($args) {
|
||
$func = isset($args['func_args']) ? $args['func_args'] : '';
|
||
if(empty($func)) {
|
||
$func = isset($args['callback_args']) ? $args['callback_args'] : '';
|
||
}
|
||
return $func;
|
||
}
|
||
|
||
function fansub_get_browser() {
|
||
global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone, $is_winIE, $is_macIE;
|
||
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
|
||
$browser = 'unknown';
|
||
if($is_lynx) {
|
||
$browser = 'lynx';
|
||
} elseif($is_gecko) {
|
||
$browser = 'gecko';
|
||
if(false !== strpos($user_agent, 'firefox')) {
|
||
$browser = 'firefox';
|
||
}
|
||
} elseif($is_opera) {
|
||
$browser = 'opera';
|
||
} elseif($is_NS4) {
|
||
$browser = 'ns4';
|
||
} elseif($is_safari) {
|
||
$browser = 'safari';
|
||
} elseif($is_chrome) {
|
||
$browser = 'chrome';
|
||
if(false !== strpos($user_agent, 'edge/')) {
|
||
$browser = 'edge';
|
||
}
|
||
} elseif($is_winIE) {
|
||
$browser = 'win-ie';
|
||
} elseif($is_macIE) {
|
||
$browser = 'mac-ie';
|
||
} elseif($is_IE) {
|
||
$browser = 'ie';
|
||
} elseif($is_iphone) {
|
||
$browser = 'iphone';
|
||
}
|
||
if('unknown' == $browser) {
|
||
if(false !== strpos($user_agent, 'edge/')) {
|
||
$browser = 'edge';
|
||
}
|
||
}
|
||
return $browser;
|
||
}
|
||
|
||
function fansub_get_datetime_ago($ago, $datetime = '') {
|
||
if(empty($datetime)) {
|
||
$datetime = fansub_get_current_datetime_mysql();
|
||
}
|
||
return date('Y-m-d H:i:s', strtotime($ago, strtotime($datetime)));
|
||
}
|
||
|
||
function fansub_get_current_url() {
|
||
global $wp;
|
||
$current_url = trailingslashit(home_url($wp->request));
|
||
return $current_url;
|
||
}
|
||
|
||
function fansub_get_current_visitor_location() {
|
||
$result = array();
|
||
$title = __('Unknown location', 'fansub');
|
||
$url = fansub_get_current_url();
|
||
if(is_home()) {
|
||
$title = __('Viewing index', 'fansub');
|
||
} elseif(is_archive()) {
|
||
$title = sprintf(__('Viewing %s', 'fansub'), get_the_archive_title());
|
||
} elseif(is_singular()) {
|
||
$title = sprintf(__('Viewing %s', 'fansub'), get_the_title());
|
||
} elseif(is_search()) {
|
||
$title = __('Viewing search result', 'fansub');
|
||
} elseif(is_404()) {
|
||
$title = __('Viewing 404 page not found', 'fansub');
|
||
}
|
||
$result['object'] = get_queried_object();
|
||
$result['url'] = $url;
|
||
$result['title'] = $title;
|
||
return $result;
|
||
}
|
||
|
||
function fansub_human_time_diff_to_now($from) {
|
||
if(!is_int($from)) {
|
||
$from = strtotime($from);
|
||
}
|
||
return human_time_diff($from, strtotime(fansub_get_current_datetime_mysql()));
|
||
}
|
||
|
||
function fansub_string_to_datetime($string, $format = '') {
|
||
if(empty($format)) {
|
||
$format = 'Y-m-d H:i:s';
|
||
}
|
||
$string = str_replace('/', '-', $string);
|
||
$string = trim($string);
|
||
return date($format, strtotime($string));
|
||
}
|
||
|
||
function fansub_get_safe_characters($special_char = false) {
|
||
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||
if($special_char) {
|
||
$characters .= '{}#,!_@^';
|
||
$characters .= '():.|`$';
|
||
$characters .= '[];?=+-*~%';
|
||
}
|
||
return $characters;
|
||
}
|
||
|
||
function fansub_get_safe_captcha_characters() {
|
||
$characters = fansub_get_safe_characters();
|
||
$excludes = array('b', 'd', 'e', 'i', 'j', 'l', 'o', 'w', 'B', 'D', 'E', 'I', 'J', 'L', 'O', 'W', '0', '1', '2', '8');
|
||
$excludes = apply_filters('fansub_exclude_captcha_characters', $excludes);
|
||
$characters = str_replace($excludes, '', $characters);
|
||
return $characters;
|
||
}
|
||
|
||
function fansub_random_string($length = 10, $characters = '', $special_char = false) {
|
||
if(empty($characters)) {
|
||
$characters = fansub_get_safe_characters($special_char);
|
||
}
|
||
$len = strlen($characters);
|
||
$result = '';
|
||
for($i = 0; $i < $length; $i++) {
|
||
$random_char = $characters[rand(0, $len - 1)];
|
||
$result .= $random_char;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_is_mobile_domain($domain) {
|
||
$domain = fansub_get_domain_name($domain);
|
||
$chars = substr($domain, 0, 2);
|
||
if('m.' == $chars) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_is_mobile_domain_blog() {
|
||
return fansub_is_mobile_domain(get_bloginfo('url'));
|
||
}
|
||
|
||
function fansub_get_force_mobile() {
|
||
$mobile = isset($_GET['mobile']) ? $_GET['mobile'] : '';
|
||
return $mobile;
|
||
}
|
||
|
||
function fansub_is_force_mobile() {
|
||
$mobile = fansub_get_force_mobile();
|
||
if('true' == $mobile || 1 == absint($mobile)) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_is_force_mobile_session($session) {
|
||
if(isset($_SESSION[$session]) && 'mobile' == $_SESSION[$session]) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_is_force_mobile_cookie($cookie) {
|
||
if(isset($_COOKIE[$cookie]) && 'mobile' == $_COOKIE[$cookie]) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_get_domain_name($url) {
|
||
if(is_object($url) || is_array($url)) {
|
||
return '';
|
||
}
|
||
$url = strval($url);
|
||
$parse = parse_url($url);
|
||
$result = isset($parse['host']) ? $parse['host'] : '';
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_domain_name_only($url) {
|
||
$root = fansub_get_root_domain_name($url);
|
||
if(fansub_is_ip($root)) {
|
||
return $root;
|
||
}
|
||
$root = explode('.', $root);
|
||
return array_shift($root);
|
||
}
|
||
|
||
function fansub_get_root_domain_name($url) {
|
||
$domain_name = fansub_get_domain_name($url);
|
||
if(fansub_is_ip($domain_name)) {
|
||
return $domain_name;
|
||
}
|
||
$data = explode('.', $domain_name);
|
||
$parts = $data;
|
||
$last = array_pop($parts);
|
||
$sub_last = array_pop($parts);
|
||
$keep = 2;
|
||
if(2 == strlen($last)) {
|
||
switch($sub_last) {
|
||
case 'net':
|
||
case 'info':
|
||
case 'org':
|
||
case 'com':
|
||
$keep = 3;
|
||
break;
|
||
}
|
||
}
|
||
while(count($data) > $keep) {
|
||
array_shift($data);
|
||
}
|
||
$domain_name = implode('.', $data);
|
||
$last = array_pop($data);
|
||
if('localhost' == $last || strlen($last) > 6) {
|
||
$domain_name = $last;
|
||
}
|
||
return $domain_name;
|
||
}
|
||
|
||
function fansub_is_site_domain($domain) {
|
||
$site_domain = fansub_get_root_domain_name(home_url());
|
||
$domain = fansub_get_root_domain_name($domain);
|
||
if($domain == $site_domain) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_random_string_number($length = 6) {
|
||
return fansub_random_string($length, '0123456789');
|
||
}
|
||
|
||
function fansub_url_valid($url) {
|
||
if(fansub_is_image($url) || !filter_var($url, FILTER_VALIDATE_URL) === false) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_color_valid($color) {
|
||
if(preg_match('/^#[a-f0-9]{6}$/i', $color)) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_url_exists($url) {
|
||
$file_headers = @get_headers($url);
|
||
$result = true;
|
||
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
|
||
$result = false;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_all_image_from_string($data) {
|
||
preg_match_all('/<img[^>]+>/i', $data, $matches);
|
||
$matches = isset($matches[0]) ? $matches[0] : array();
|
||
if(!fansub_array_has_value($matches) && !empty($data)) {
|
||
if(false !== strpos($data, '//') && (false !== strpos($data, '.jpg') || false !== strpos($data, '.png') || false !== strpos($data, '.gif'))) {
|
||
$sources = explode(PHP_EOL, $data);
|
||
if(fansub_array_has_value($sources)) {
|
||
foreach($sources as $src) {
|
||
if(fansub_is_image($src)) {
|
||
$matches[] = '<img src="' . $src . '">';
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
return $matches;
|
||
}
|
||
|
||
function fansub_image_url_exists($image_url) {
|
||
if(!@file_get_contents($image_url)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function fansub_empty_database_table($table) {
|
||
global $wpdb;
|
||
return $wpdb->query("TRUNCATE TABLE $table");
|
||
}
|
||
|
||
function fansub_build_widget_class($widget_id) {
|
||
$widget_class = explode('-', $widget_id);
|
||
array_pop($widget_class);
|
||
if(is_array($widget_class)) {
|
||
$widget_class = implode('-', $widget_class);
|
||
} else {
|
||
$widget_class = (string) $widget_class;
|
||
}
|
||
$widget_class = trim(trim(trim($widget_class, '_'), '-'));
|
||
$widget_class = 'widget_' . $widget_class;
|
||
return $widget_class;
|
||
}
|
||
|
||
function fansub_get_current_post_type() {
|
||
global $post_type;
|
||
$result = $post_type;
|
||
if(empty($result)) {
|
||
if(isset($_GET['post_type'])) {
|
||
$result = $_GET['post_type'];
|
||
} else {
|
||
$action = isset($_GET['action']) ? $_GET['action'] : '';
|
||
$post_id = isset($_GET['post']) ? $_GET['post'] : 0;
|
||
if('edit' == $action && is_numeric($post_id) && $post_id > 0) {
|
||
$post = get_post($post_id);
|
||
$result = $post->post_type;
|
||
}
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_register_sidebar($sidebar_id, $sidebar_name, $sidebar_description = '', $html_tag = 'aside') {
|
||
$before_widget = apply_filters('fansub_before_widget', '<' . $html_tag . ' id="%1$s" class="widget %2$s">');
|
||
$before_widget = apply_filters('fansub_sidebar_' . $sidebar_id . '_before_widget', $before_widget);
|
||
$after_widget = apply_filters('fansub_after_widget', '</' . $html_tag . '>');
|
||
$after_widget = apply_filters('fansub_sidebar_' . $sidebar_id . '_after_widget', $after_widget);
|
||
$before_title = apply_filters('fansub_widget_before_title', '<h4 class="widget-title">');
|
||
$before_title = apply_filters('fansub_sidebar_' . $sidebar_id . '_widget_before_title', $before_title);
|
||
$after_title = apply_filters('fansub_widget_after_title', '</h4>');
|
||
$after_title = apply_filters('fansub_sidebar_' . $sidebar_id . '_widget_after_title', $after_title);
|
||
$sidebar_args = array(
|
||
'name' => $sidebar_name,
|
||
'id' => $sidebar_id,
|
||
'description' => $sidebar_description,
|
||
'before_widget' => $before_widget,
|
||
'after_widget' => $after_widget,
|
||
'before_title' => $before_title,
|
||
'after_title' => $after_title,
|
||
);
|
||
$sidebar_args = apply_filters('fansub_sidebar_args', $sidebar_args);
|
||
$sidebar_args = apply_filters('fansub_sidebar_' . $sidebar_id . '_args', $sidebar_args);
|
||
register_sidebar($sidebar_args);
|
||
}
|
||
|
||
function fansub_register_widget($class_name) {
|
||
if(class_exists($class_name)) {
|
||
register_widget($class_name);
|
||
}
|
||
}
|
||
|
||
function fansub_register_post_type_normal($args) {
|
||
$defaults = array(
|
||
'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields', 'comments', 'revisions'),
|
||
'show_in_nav_menus' => true,
|
||
'show_in_admin_bar' => true
|
||
);
|
||
$args = wp_parse_args($args, $defaults);
|
||
fansub_register_post_type($args);
|
||
}
|
||
|
||
function fansub_register_post_type($args = array()) {
|
||
$name = isset($args['name']) ? $args['name'] : '';
|
||
$singular_name = isset($args['singular_name']) ? $args['singular_name'] : '';
|
||
$menu_name = fansub_get_value_by_key($args, 'menu_name', $name);
|
||
$supports = isset($args['supports']) ? $args['supports'] : array();
|
||
$hierarchical = isset($args['hierarchical']) ? $args['hierarchical'] : false;
|
||
$public = isset($args['public']) ? $args['public'] : true;
|
||
$show_ui = isset($args['show_ui']) ? $args['show_ui'] : true;
|
||
$show_in_menu = isset($args['show_in_menu']) ? $args['show_in_menu'] : true;
|
||
$show_in_nav_menus = isset($args['show_in_nav_menus']) ? $args['show_in_nav_menus'] : false;
|
||
$show_in_admin_bar = isset($args['show_in_admin_bar']) ? $args['show_in_admin_bar'] : false;
|
||
$menu_position = isset($args['menu_position']) ? $args['menu_position'] : 6;
|
||
$can_export = isset($args['can_export']) ? $args['can_export'] : true;
|
||
$has_archive = isset($args['has_archive']) ? $args['has_archive'] : true;
|
||
$exclude_from_search = isset($args['exclude_from_search']) ? $args['exclude_from_search'] : false;
|
||
$publicly_queryable = isset($args['publicly_queryable']) ? $args['publicly_queryable'] : true;
|
||
$capability_type = isset($args['capability_type']) ? $args['capability_type'] : 'post';
|
||
$taxonomies = isset($args['taxonomies']) ? $args['taxonomies'] : array();
|
||
$menu_icon = isset($args['menu_icon']) ? $args['menu_icon'] : 'dashicons-admin-post';
|
||
$slug = isset($args['slug']) ? $args['slug'] : '';
|
||
$with_front = isset($args['with_front']) ? $args['with_front'] : true;
|
||
$pages = isset($args['pages']) ? $args['pages'] : true;
|
||
$feeds = isset($args['feeds']) ? $args['feeds'] : true;
|
||
$query_var = isset($args['query_var']) ? $args['query_var'] : '';
|
||
$capabilities = isset($args['capabilities']) ? $args['capabilities'] : array();
|
||
$custom_labels = fansub_get_value_by_key($args, 'labels');
|
||
$custom_labels = fansub_sanitize_array($custom_labels);
|
||
|
||
if(empty($singular_name)) {
|
||
$singular_name = $name;
|
||
}
|
||
if(empty($name) || !is_array($supports) || empty($slug) || post_type_exists($slug)) {
|
||
return;
|
||
}
|
||
if(!in_array('title', $supports)) {
|
||
array_push($supports, 'title');
|
||
}
|
||
$post_type = isset($args['post_type']) ? $args['post_type'] : $slug;
|
||
$post_type = fansub_sanitize_id($post_type);
|
||
if(post_type_exists($post_type)) {
|
||
return;
|
||
}
|
||
$labels = array(
|
||
'name' => $name,
|
||
'singular_name' => $singular_name,
|
||
'menu_name' => $menu_name,
|
||
'name_admin_bar' => isset($args['name_admin_bar']) ? $args['name_admin_bar'] : $singular_name,
|
||
'all_items' => sprintf(__('All %s', 'fansub'), $name),
|
||
'add_new' => __('Add New', 'fansub'),
|
||
'add_new_item' => sprintf(__('Add New %s', 'fansub'), $singular_name),
|
||
'edit_item' => sprintf(__('Edit %s', 'fansub'), $singular_name),
|
||
'new_item' => sprintf(__('New %s', 'fansub'), $singular_name),
|
||
'view_item' => sprintf(__('View %s', 'fansub'), $singular_name),
|
||
'search_items' => sprintf(__('Search %s', 'fansub'), $singular_name),
|
||
'not_found' => __('Not found', 'fansub'),
|
||
'not_found_in_trash' => __('Not found in Trash', 'fansub'),
|
||
'parent_item_colon' => sprintf(__('Parent %s:', 'fansub'), $singular_name),
|
||
'parent_item' => sprintf(__('Parent %s', 'fansub'), $singular_name),
|
||
'update_item' => sprintf(__('Update %s', 'fansub'), $singular_name)
|
||
);
|
||
$labels = wp_parse_args($custom_labels, $labels);
|
||
|
||
$rewrite_slug = str_replace('_', '-', $slug);
|
||
$rewrite_defaults = array(
|
||
'slug' => $rewrite_slug,
|
||
'with_front' => $with_front,
|
||
'pages' => $pages,
|
||
'feeds' => $feeds
|
||
);
|
||
$rewrite = isset($args['rewrite']) ? $args['rewrite'] : array();
|
||
$rewrite = wp_parse_args($rewrite, $rewrite_defaults);
|
||
$description = isset($args['description']) ? $args['description'] : '';
|
||
$args = array(
|
||
'labels' => $labels,
|
||
'description' => $description,
|
||
'supports' => $supports,
|
||
'taxonomies' => $taxonomies,
|
||
'hierarchical' => $hierarchical,
|
||
'public' => $public,
|
||
'show_ui' => $show_ui,
|
||
'show_in_menu' => $show_in_menu,
|
||
'show_in_nav_menus' => $show_in_nav_menus,
|
||
'show_in_admin_bar' => $show_in_admin_bar,
|
||
'menu_position' => $menu_position,
|
||
'menu_icon' => $menu_icon,
|
||
'can_export' => $can_export,
|
||
'has_archive' => $has_archive,
|
||
'exclude_from_search' => $exclude_from_search,
|
||
'publicly_queryable' => $publicly_queryable,
|
||
'query_var' => $query_var,
|
||
'rewrite' => $rewrite,
|
||
'capability_type' => $capability_type
|
||
);
|
||
if(count($capabilities) > 0) {
|
||
$args['capabilities'] = $capabilities;
|
||
}
|
||
register_post_type($post_type, $args);
|
||
}
|
||
|
||
function fansub_strtolower($str, $charset = 'UTF-8') {
|
||
return mb_strtolower($str, $charset);
|
||
}
|
||
|
||
function fansub_register_taxonomy($args = array()) {
|
||
$name = isset($args['name']) ? $args['name'] : '';
|
||
$singular_name = isset($args['singular_name']) ? $args['singular_name'] : '';
|
||
$menu_name = fansub_get_value_by_key($args, 'menu_name', $name);
|
||
$hierarchical = isset($args['hierarchical']) ? $args['hierarchical'] : true;
|
||
$public = isset($args['public']) ? $args['public'] : true;
|
||
$show_ui = isset($args['show_ui']) ? $args['show_ui'] : true;
|
||
$show_admin_column = isset($args['show_admin_column']) ? $args['show_admin_column'] : true;
|
||
$show_in_nav_menus = isset($args['show_in_nav_menus']) ? $args['show_in_nav_menus'] : true;
|
||
$show_tagcloud = isset($args['show_tagcloud']) ? $args['show_tagcloud'] : (($hierarchical === true) ? false : true);
|
||
$post_types = isset($args['post_types']) ? $args['post_types'] : array();
|
||
if(!is_array($post_types)) {
|
||
$post_types = array($post_types);
|
||
}
|
||
$slug = isset($args['slug']) ? $args['slug'] : '';
|
||
$private = isset($args['private']) ? $args['private'] : false;
|
||
if(empty($singular_name)) {
|
||
$singular_name = $name;
|
||
}
|
||
if(empty($name) || empty($slug) || taxonomy_exists($slug)) {
|
||
return;
|
||
}
|
||
$taxonomy = isset($args['taxonomy']) ? $args['taxonomy'] : $slug;
|
||
$taxonomy = fansub_sanitize_id($taxonomy);
|
||
if(taxonomy_exists($taxonomy)) {
|
||
return;
|
||
}
|
||
$labels = array(
|
||
'name' => $name,
|
||
'singular_name' => $singular_name,
|
||
'menu_name' => $menu_name,
|
||
'all_items' => sprintf(__('All %s', 'fansub'), $name),
|
||
'edit_item' => sprintf(__('Edit %s', 'fansub'), $singular_name),
|
||
'view_item' => sprintf(__('View %s', 'fansub'), $singular_name),
|
||
'update_item' => sprintf(__('Update %s', 'fansub'), $singular_name),
|
||
'add_new_item' => sprintf(__('Add New %s', 'fansub'), $singular_name),
|
||
'new_item_name' => sprintf(__('New %s Name', 'fansub'), $singular_name),
|
||
'parent_item' => sprintf(__('Parent %s', 'fansub'), $singular_name),
|
||
'parent_item_colon' => sprintf(__('Parent %s:', 'fansub'), $singular_name),
|
||
'search_items' => sprintf(__('Search %s', 'fansub'), $name),
|
||
'popular_items' => sprintf(__('Popular %s', 'fansub'), $name),
|
||
'separate_items_with_commas' => sprintf(__('Separate %s with commas', 'fansub'), fansub_strtolower($name)),
|
||
'add_or_remove_items' => sprintf(__('Add or remove %s', 'fansub'), $name),
|
||
'choose_from_most_used' => sprintf(__('Choose from the most used %s', 'fansub'), $name),
|
||
'not_found' => __('Not Found', 'fansub'),
|
||
);
|
||
$rewrite = isset($args['rewrite']) ? $args['rewrite'] : array();
|
||
$rewrite_slug = str_replace('_', '-', $slug);
|
||
$rewrite['slug'] = $rewrite_slug;
|
||
if($private) {
|
||
$public = false;
|
||
$rewrite = false;
|
||
}
|
||
$update_count_callback = isset($args['update_count_callback']) ? $args['update_count_callback'] : '_update_post_term_count';
|
||
$capabilities = isset($args['capabilities']) ? $args['capabilities'] : array('manage_terms');
|
||
$args = array(
|
||
'labels' => $labels,
|
||
'hierarchical' => $hierarchical,
|
||
'public' => $public,
|
||
'show_ui' => $show_ui,
|
||
'show_admin_column' => $show_admin_column,
|
||
'show_in_nav_menus' => $show_in_nav_menus,
|
||
'show_tagcloud' => $show_tagcloud,
|
||
'query_var' => true,
|
||
'rewrite' => $rewrite,
|
||
'update_count_callback' => $update_count_callback,
|
||
'capabilities' => $capabilities
|
||
);
|
||
|
||
register_taxonomy($taxonomy, $post_types, $args);
|
||
}
|
||
|
||
function fansub_register_post_type_private($args = array()) {
|
||
global $fansub_private_post_types;
|
||
$args['public'] = false;
|
||
$args['exclude_from_search'] = true;
|
||
$args['show_in_nav_menus'] = false;
|
||
$args['show_in_admin_bar'] = false;
|
||
$args['menu_position'] = 9999999;
|
||
$args['has_archive'] = false;
|
||
$args['feeds'] = false;
|
||
$slug = isset($args['slug']) ? $args['slug'] : '';
|
||
if(!empty($slug)) {
|
||
$fansub_private_post_types = fansub_sanitize_array($fansub_private_post_types);
|
||
$fansub_private_post_types[] = $slug;
|
||
}
|
||
fansub_register_post_type($args);
|
||
}
|
||
|
||
function fansub_is_debugging() {
|
||
return (defined('WP_DEBUG') && true === WP_DEBUG) ? true : false;
|
||
}
|
||
|
||
function fansub_is_localhost() {
|
||
$site_url = get_bloginfo('url');
|
||
$domain = fansub_get_domain_name($site_url);
|
||
$root_domain = fansub_get_domain_name_only($domain);
|
||
if(empty($root_domain)) {
|
||
$root_domain = $domain;
|
||
}
|
||
$result = false;
|
||
$last = substr($domain, -3);
|
||
if('localhost' == $root_domain || fansub_is_ip($root_domain) || 'dev' == $last) {
|
||
$result = true;
|
||
}
|
||
return apply_filters('fansub_is_localhost', $result);
|
||
}
|
||
|
||
function fansub_string_contain($string, $needle) {
|
||
if(false !== mb_strpos($string, $needle, null, 'UTF-8')) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_build_css_rule($elements, $properties) {
|
||
$elements = fansub_sanitize_array($elements);
|
||
$properties = fansub_sanitize_array($properties);
|
||
$before = '';
|
||
foreach($elements as $element) {
|
||
if(empty($element)) {
|
||
continue;
|
||
}
|
||
$first_char = fansub_get_first_char($element);
|
||
if('.' !== $first_char && strpos($element, '.') === false) {
|
||
$element = '.' . $element;
|
||
}
|
||
$before .= $element . ',';
|
||
}
|
||
$before = trim($before, ',');
|
||
$after = '';
|
||
foreach($properties as $key => $property) {
|
||
if(empty($key)) {
|
||
continue;
|
||
}
|
||
$after .= $key . ':' . $property . ';';
|
||
}
|
||
$after = trim($after, ';');
|
||
return $before . '{' . $after . '}';
|
||
}
|
||
|
||
function fansub_shorten_hex_css($content) {
|
||
$content = preg_replace('/(?<![\'"])#([0-9a-z])\\1([0-9a-z])\\2([0-9a-z])\\3(?![\'"])/i', '#$1$2$3', $content);
|
||
return $content;
|
||
}
|
||
|
||
function fansub_shorten_zero_css($content) {
|
||
$before = '(?<=[:(, ])';
|
||
$after = '(?=[ ,);}])';
|
||
$units = '(em|ex|%|px|cm|mm|in|pt|pc|ch|rem|vh|vw|vmin|vmax|vm)';
|
||
$content = preg_replace('/'.$before.'(-?0*(\.0+)?)(?<=0)'.$units.$after.'/', '\\1', $content);
|
||
$content = preg_replace('/'.$before.'\.0+'.$after.'/', '0', $content);
|
||
$content = preg_replace('/'.$before.'(-?[0-9]+)\.0+'.$units.'?'.$after.'/', '\\1\\2', $content);
|
||
$content = preg_replace('/'.$before.'-?0+'.$after.'/', '0', $content);
|
||
return $content;
|
||
}
|
||
|
||
function fansub_strip_white_space_css($content) {
|
||
$content = preg_replace('/^\s*/m', '', $content);
|
||
$content = preg_replace('/\s*$/m', '', $content);
|
||
$content = preg_replace('/\s+/', ' ', $content);
|
||
$content = preg_replace('/\s*([\*$~^|]?+=|[{};,>~]|!important\b)\s*/', '$1', $content);
|
||
$content = preg_replace('/([\[(:])\s+/', '$1', $content);
|
||
$content = preg_replace('/\s+([\]\)])/', '$1', $content);
|
||
$content = preg_replace('/\s+(:)(?![^\}]*\{)/', '$1', $content);
|
||
$content = preg_replace('/\s*([+-])\s*(?=[^}]*{)/', '$1', $content);
|
||
$content = preg_replace('/;}/', '}', $content);
|
||
return trim($content);
|
||
}
|
||
|
||
function fansub_minify_css($css_content, $online = false) {
|
||
if($online) {
|
||
$buffer = fansub_get_minified('https://cssminifier.com/raw', $css_content);
|
||
} else {
|
||
if(file_exists($css_content)) {
|
||
$css_content = @file_get_contents($css_content);
|
||
}
|
||
$buffer = $css_content;
|
||
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
|
||
$buffer = str_replace(': ', ':', $buffer);
|
||
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
|
||
$buffer = fansub_shorten_hex_css($buffer);
|
||
$buffer = fansub_shorten_zero_css($buffer);
|
||
$buffer = fansub_strip_white_space_css($buffer);
|
||
}
|
||
return $buffer;
|
||
}
|
||
|
||
function fansub_minify_js($js) {
|
||
return fansub_get_minified('https://javascript-minifier.com/raw', $js);
|
||
}
|
||
|
||
function fansub_get_minified($url, $content) {
|
||
if(file_exists($content)) {
|
||
$content = @file_get_contents($content);
|
||
}
|
||
$postdata = array(
|
||
'http' => array(
|
||
'method' => 'POST',
|
||
'header' => 'Content-type: application/x-www-form-urlencoded',
|
||
'content' => http_build_query(
|
||
array(
|
||
'input' => $content
|
||
)
|
||
)
|
||
)
|
||
);
|
||
return @file_get_contents($url, false, stream_context_create($postdata));
|
||
}
|
||
|
||
function fansub_the_posts_navigation() {
|
||
the_posts_pagination(array(
|
||
'prev_text' => esc_html__('Previous page', 'fansub'),
|
||
'next_text' => esc_html__('Next page', 'fansub'),
|
||
'before_page_number' => '<span class="meta-nav screen-reader-text">' . esc_html__('Page', 'fansub') . ' </span>'
|
||
));
|
||
}
|
||
|
||
function fansub_wrap_class($classes = array()) {
|
||
$classes = fansub_sanitize_array($classes);
|
||
$classes = apply_filters('fansub_wrap_class', $classes);
|
||
$classes[] = 'wrap';
|
||
$classes[] = 'container';
|
||
$classes[] = 'wrapper';
|
||
$class = implode(' ', $classes);
|
||
echo $class;
|
||
}
|
||
|
||
function fansub_div_clear() {
|
||
echo '<div class="clear"></div>';
|
||
}
|
||
|
||
function fansub_change_image_source($img, $src) {
|
||
$doc = new DOMDocument();
|
||
$doc->loadHTML($img);
|
||
$tags = $doc->getElementsByTagName('img');
|
||
foreach($tags as $tag) {
|
||
$tag->setAttribute('src', $src);
|
||
}
|
||
return $doc->saveHTML();
|
||
}
|
||
|
||
function fansub_get_tag_source($tag_name, $html) {
|
||
return fansub_get_tag_attr($tag_name, 'src', $html);
|
||
}
|
||
|
||
function fansub_get_tag_attr($tag_name, $attr, $html) {
|
||
$doc = new DOMDocument();
|
||
$doc->loadHTML($html);
|
||
$tags = $doc->getElementsByTagName($tag_name);
|
||
foreach($tags as $tag) {
|
||
return $tag->getAttribute($attr);
|
||
}
|
||
return '';
|
||
}
|
||
|
||
function fansub_get_first_image_source($content) {
|
||
$doc = new DOMDocument();
|
||
@$doc->loadHTML($content);
|
||
$xpath = new DOMXPath($doc);
|
||
$src = $xpath->evaluate('string(//img/@src)');
|
||
return $src;
|
||
}
|
||
|
||
function fansub_comments_template() {
|
||
$post_id = get_the_ID();
|
||
$cpost = get_post($post_id);
|
||
if(!is_a($cpost, 'WP_Post')) {
|
||
return;
|
||
}
|
||
if(comments_open($post_id) || get_comments_number($post_id)) {
|
||
$comment_system = fansub_theme_get_option('comment_system', 'discussion');
|
||
if('facebook' == $comment_system) {
|
||
fansub_facebook_comment();
|
||
} else {
|
||
if('default_and_facebook' == $comment_system) {
|
||
fansub_facebook_comment();
|
||
}
|
||
comments_template();
|
||
}
|
||
}
|
||
}
|
||
|
||
function fansub_wp_link_pages() {
|
||
wp_link_pages(array(
|
||
'before' => '<div class="page-links"><span class="page-links-title">' . esc_html__('Pages:', 'fansub') . '</span>',
|
||
'after' => '</div>',
|
||
'link_before' => '<span>',
|
||
'link_after' => '</span>',
|
||
'pagelink' => '<span class="screen-reader-text">' . esc_html__('Page', 'fansub') . ' </span>%',
|
||
'separator' => '<span class="screen-reader-text">, </span>',
|
||
));
|
||
}
|
||
|
||
function fansub_comment_nav() {
|
||
if(get_comment_pages_count() > 1 && get_option('page_comments')) :
|
||
?>
|
||
<nav class="navigation comment-navigation">
|
||
<h2 class="screen-reader-text"><?php echo apply_filters('fansub_comment_navigation_text', __('Comment navigation', 'fansub')); ?></h2>
|
||
<div class="nav-links">
|
||
<?php
|
||
if($prev_link = get_previous_comments_link(apply_filters('fansub_comment_navigation_prev_text', esc_html__('Older Comments', 'fansub')))) {
|
||
printf('<div class="nav-previous">%s</div>', $prev_link);
|
||
}
|
||
if($next_link = get_next_comments_link(apply_filters('fansub_comment_navigation_next_text', esc_html__('Newer Comments', 'fansub')))) {
|
||
printf('<div class="nav-next">%s</div>', $next_link);
|
||
}
|
||
?>
|
||
</div><!-- .nav-links -->
|
||
</nav><!-- .comment-navigation -->
|
||
<?php
|
||
endif;
|
||
}
|
||
|
||
function fansub_get_current_day_of_week($full = true) {
|
||
$format = 'l';
|
||
if(!$full) {
|
||
$format = 'D';
|
||
}
|
||
return date($format);
|
||
}
|
||
|
||
function fansub_convert_day_name_to_vietnamese($day_name) {
|
||
$weekday = $day_name;
|
||
switch($weekday) {
|
||
case 'Mon':
|
||
case 'Monday':
|
||
$weekday = 'Thứ hai';
|
||
break;
|
||
case 'Tue':
|
||
case 'Tuesday':
|
||
$weekday = 'Thứ ba';
|
||
break;
|
||
case 'Wed':
|
||
case 'Wednesday':
|
||
$weekday = 'Thứ tư';
|
||
break;
|
||
case 'Thur':
|
||
case 'Thursday':
|
||
$weekday = 'Thứ năm';
|
||
break;
|
||
case 'Fri':
|
||
case 'Friday':
|
||
$weekday = 'Thứ sáu';
|
||
break;
|
||
case 'Sat':
|
||
case 'Saturday':
|
||
$weekday = 'Thứ bảy';
|
||
break;
|
||
case 'Sun':
|
||
case 'Sunday':
|
||
$weekday = 'Chủ nhật';
|
||
break;
|
||
}
|
||
return $weekday;
|
||
}
|
||
|
||
function fansub_get_current_month_of_year($full = true) {
|
||
$format = 'F';
|
||
if(!$full) {
|
||
$format = 'M';
|
||
}
|
||
return date($format);
|
||
}
|
||
|
||
function fansub_convert_month_name_to_vietnamese($month_full_name) {
|
||
switch($month_full_name) {
|
||
case 'Jan':
|
||
case 'January':
|
||
$month_full_name = 'Tháng một';
|
||
break;
|
||
case 'Feb':
|
||
case 'February':
|
||
$month_full_name = 'Tháng hai';
|
||
break;
|
||
case 'Mar';
|
||
case 'March':
|
||
$month_full_name = 'Tháng ba';
|
||
break;
|
||
case 'Apr':
|
||
case 'April':
|
||
$month_full_name = 'Tháng tư';
|
||
break;
|
||
case 'May':
|
||
$month_full_name = 'Tháng năm';
|
||
break;
|
||
case 'Jun':
|
||
case 'June':
|
||
$month_full_name = 'Tháng sáu';
|
||
break;
|
||
case 'Jul':
|
||
case 'July':
|
||
$month_full_name = 'Tháng bảy';
|
||
break;
|
||
case 'Aug':
|
||
case 'August':
|
||
$month_full_name = 'Tháng tám';
|
||
break;
|
||
case 'Sep':
|
||
case 'September':
|
||
$month_full_name = 'Tháng chín';
|
||
break;
|
||
case 'Oct':
|
||
case 'October':
|
||
$month_full_name = 'Tháng mười';
|
||
break;
|
||
case 'Nov':
|
||
case 'November':
|
||
$month_full_name = 'Tháng mười một';
|
||
break;
|
||
case 'Dec':
|
||
case 'December':
|
||
$month_full_name = 'Tháng mười hai';
|
||
break;
|
||
}
|
||
return $month_full_name;
|
||
}
|
||
|
||
function fansub_get_current_weekday($format = 'd/m/Y H:i:s', $args = array()) {
|
||
$weekday = fansub_get_current_date('l');
|
||
$separator = isset($args['separator'] ) ? $args['separator'] : ', ';
|
||
$weekday = fansub_convert_day_name_to_vietnamese($weekday);
|
||
return $weekday . $separator . fansub_get_current_date($format);
|
||
}
|
||
|
||
function fansub_current_weekday($format = 'd/m/Y H:i:s', $args = array()) {
|
||
echo fansub_get_current_weekday($format, $args);
|
||
}
|
||
|
||
function fansub_color_hex_to_rgb($color, $opacity = false) {
|
||
$default = 'rgb(0,0,0)';
|
||
if(empty($color)) {
|
||
return $default;
|
||
}
|
||
if($color[0] == '#') {
|
||
$color = substr($color, 1);
|
||
}
|
||
if(strlen($color) == 6) {
|
||
$hex = array($color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5]);
|
||
} elseif(strlen($color) == 3) {
|
||
$hex = array($color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2]);
|
||
} else {
|
||
return $default;
|
||
}
|
||
$rgb = array_map('hexdec', $hex);
|
||
if($opacity) {
|
||
if(abs($opacity) > 1) {
|
||
$opacity = 1.0;
|
||
}
|
||
$output = 'rgba(' . implode(',', $rgb) . ',' . $opacity . ')';
|
||
} else {
|
||
$output = 'rgb(' . implode(',', $rgb) . ')';
|
||
}
|
||
return $output;
|
||
}
|
||
|
||
function fansub_the_social_share_buttons($args = array()) {
|
||
$socials = fansub_get_value_by_key($args, 'socials');
|
||
if(!fansub_array_has_value($socials)) {
|
||
$socials = array(
|
||
'facebook' => 'Facebook',
|
||
'twitter' => 'Twitter',
|
||
'googleplus' => 'Google+',
|
||
'pinterest' => 'Pinterest',
|
||
'email' => 'Email'
|
||
);
|
||
$socials = apply_filters('fansub_social_share_buttons', $socials);
|
||
}
|
||
?>
|
||
<div class="social-share">
|
||
<ul class="list-inline list-unstyled list-share-buttons">
|
||
<?php
|
||
foreach($socials as $social_name => $text) {
|
||
$font_awesome = 'fa-' . $social_name;
|
||
$btn_class = 'btn-' . $social_name;
|
||
switch($social_name) {
|
||
case 'email':
|
||
fansub_add_string_with_space_before($font_awesome, 'fa-envelope');
|
||
break;
|
||
case 'googleplus':
|
||
case 'gplus':
|
||
fansub_add_string_with_space_before($font_awesome, 'fa-google-plus');
|
||
fansub_add_string_with_space_before($btn_class, 'btn-google-plus');
|
||
break;
|
||
}
|
||
echo '<li><a target="_blank" href="' . fansub_get_social_share_url(array('social_name' => $social_name)) . '" class="btn btn-social ' . $btn_class . '"><i class="fa ' . $font_awesome . ' icon-left"></i> ' . $text . '</a></li>';
|
||
}
|
||
?>
|
||
</ul>
|
||
</div>
|
||
<?php
|
||
}
|
||
|
||
function fansub_get_social_share_url($args = array()) {
|
||
$result = '';
|
||
$title = fansub_get_value_by_key($args, 'title', get_the_title());
|
||
$permalink = fansub_get_value_by_key($args, 'permalink', get_the_permalink());
|
||
$social_name = fansub_get_value_by_key($args, 'social_name');
|
||
$thumbnail = fansub_get_value_by_key($args, 'thumbnail');
|
||
$excerpt = fansub_get_value_by_key($args, 'excerpt', get_the_excerpt());
|
||
$language = fansub_get_value_by_key($args, 'language', fansub_get_language());
|
||
$twitter_account = fansub_get_value_by_key($args, 'twitter_account', 'skylarkcob');
|
||
$permalink = urlencode($permalink);
|
||
if(empty($twitter_account)) {
|
||
$twitter_account = fansub_get_wpseo_social_value('twitter_site');
|
||
$twitter_account = basename($twitter_account);
|
||
}
|
||
switch($social_name) {
|
||
case 'email':
|
||
$result = 'mailto:email@fansub.net?subject=' . $title . '&body=' . $permalink;
|
||
break;
|
||
case 'facebook':
|
||
$url = 'https://www.facebook.com/sharer/sharer.php';
|
||
$url = add_query_arg('u', $permalink, $url);
|
||
if(!empty($title)) {
|
||
$url = add_query_arg('t', $title, $url);
|
||
}
|
||
$result = $url;
|
||
break;
|
||
case 'gplus':
|
||
case 'googleplus':
|
||
$url = 'http://plusone.google.com/_/+1/confirm';
|
||
$url = add_query_arg('hl', $language, $url);
|
||
$url = add_query_arg('url', $permalink, $url);
|
||
$result = $url;
|
||
break;
|
||
case 'twitter':
|
||
$url = 'http://twitter.com/share';
|
||
$url = add_query_arg('url', $permalink, $url);
|
||
if(!empty($title)) {
|
||
$url = add_query_arg('text', $title, $url);
|
||
}
|
||
$url = add_query_arg('via', $twitter_account, $url);
|
||
$result = $url;
|
||
break;
|
||
case 'pinterest':
|
||
$url = 'http://www.pinterest.com/pin/create/button';
|
||
if(!empty($thumbnail)) {
|
||
$url = add_query_arg('media', $thumbnail, $url);
|
||
}
|
||
$url = add_query_arg('url', $permalink, $url);
|
||
if(!empty($title)) {
|
||
$url = add_query_arg('description', $title . ' ' . $permalink, $url);
|
||
}
|
||
$result = $url;
|
||
break;
|
||
case 'zingme':
|
||
$url = 'http://link.apps.zing.vn/share';
|
||
if(!empty($title)) {
|
||
$url = add_query_arg('t', $title, $url);
|
||
}
|
||
$url = add_query_arg('u', $permalink, $url);
|
||
if(!empty($excerpt)) {
|
||
$url = add_query_arg('desc', $excerpt, $url);
|
||
}
|
||
$result = $url;
|
||
break;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_remove_vietnamese($string) {
|
||
$characters = array(
|
||
'a' => 'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ',
|
||
'd' => 'đ',
|
||
'e' => 'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ',
|
||
'i' => 'í|ì|ỉ|ĩ|ị',
|
||
'o' => 'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ',
|
||
'u' => 'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự',
|
||
'y' => 'ý|ỳ|ỷ|ỹ|ỵ',
|
||
'A' => 'Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ',
|
||
'D' => 'Đ',
|
||
'E' => 'É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ',
|
||
'I' => 'Í|Ì|Ỉ|Ĩ|Ị',
|
||
'O' => 'Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ',
|
||
'U' => 'Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự',
|
||
'Y' => 'Ý|Ỳ|Ỷ|Ỹ|Ỵ',
|
||
);
|
||
foreach($characters as $key => $value) {
|
||
$string = preg_replace("/($value)/i", $key, $string);
|
||
}
|
||
return $string;
|
||
}
|
||
|
||
function fansub_sanitize_file_name($name) {
|
||
$name = fansub_remove_vietnamese($name);
|
||
$name = strtolower($name);
|
||
$name = str_replace('_', '-', $name);
|
||
$name = str_replace(' ', '-', $name);
|
||
$name = sanitize_file_name($name);
|
||
return $name;
|
||
}
|
||
|
||
function fansub_menu_page_exists($slug) {
|
||
if(empty($GLOBALS['admin_page_hooks'][$slug])) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function fansub_callback_exists($callback) {
|
||
if(empty($callback) || (!is_array($callback) && !function_exists($callback)) || (is_array($callback) && count($callback) != 2) || (is_array($callback) && !method_exists($callback[0], $callback[1]))) {
|
||
return false;
|
||
}
|
||
if(!is_callable($callback)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function fansub_add_unique_string(&$string, $add, $tail = true) {
|
||
if(empty($string)) {
|
||
$string = $add;
|
||
} elseif(!fansub_string_contain($string, $add)) {
|
||
if($tail) {
|
||
$string .= $add;
|
||
} else {
|
||
$string = $add . $string;
|
||
}
|
||
}
|
||
$string = trim($string);
|
||
return $string;
|
||
}
|
||
|
||
function fansub_add_string_with_space_before(&$string, $add) {
|
||
$add = ' ' . $add;
|
||
$string = trim(fansub_add_unique_string($string, $add));
|
||
return $string;
|
||
}
|
||
|
||
function fansub_get_current_admin_page() {
|
||
return isset($_REQUEST['page']) ? $_REQUEST['page'] : '';
|
||
}
|
||
|
||
function fansub_is_current_admin_page($page) {
|
||
$admin_page = fansub_get_current_admin_page();
|
||
if(!empty($admin_page) && $admin_page == $page) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_get_plugins($folder = '') {
|
||
if(!function_exists('get_plugins')) {
|
||
require(ABSPATH . 'wp-admin/includes/plugin.php');
|
||
}
|
||
return get_plugins($folder);
|
||
}
|
||
|
||
function fansub_get_my_plugins() {
|
||
$result = array();
|
||
$lists = fansub_get_plugins();
|
||
foreach($lists as $file => $plugin) {
|
||
if(fansub_is_my_plugin($plugin)) {
|
||
$result[$file] = $plugin;
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_is_my_plugin($plugin_data) {
|
||
$result = false;
|
||
$author_uri = isset($plugin_data['AuthorURI']) ? $plugin_data['AuthorURI'] : '';
|
||
if(fansub_get_root_domain_name($author_uri) == fansub_get_root_domain_name(FANSUB_HOMEPAGE)) {
|
||
$result = true;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_is_my_theme($stylesheet = null, $theme_root = null) {
|
||
$result = false;
|
||
$theme = wp_get_theme($stylesheet, $theme_root);
|
||
$theme_uri = $theme->get('ThemeURI');
|
||
$text_domain = $theme->get('TextDomain');
|
||
$author_uri = $theme->get('AuthorURI');
|
||
if((fansub_string_contain($theme_uri, 'fansub') && fansub_string_contain($author_uri, 'fansub')) || (fansub_string_contain($text_domain, 'fansub') && fansub_string_contain($theme_uri, 'fansub')) || (fansub_string_contain($text_domain, 'fansub') && fansub_string_contain($author_uri, 'fansub'))) {
|
||
$result = true;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_has_plugin() {
|
||
$result = false;
|
||
$plugins = fansub_get_plugins();
|
||
foreach($plugins as $plugin) {
|
||
if(fansub_is_my_plugin($plugin)) {
|
||
$result = true;
|
||
break;
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_has_plugin_activated() {
|
||
$plugins = get_option('active_plugins');
|
||
if(fansub_array_has_value($plugins)) {
|
||
foreach($plugins as $base_name) {
|
||
if(fansub_string_contain($base_name, 'fansub')) {
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_admin_notice($args = array()) {
|
||
$class = isset($args['class']) ? $args['class'] : '';
|
||
fansub_add_string_with_space_before($class, 'updated notice');
|
||
$error = isset($args['error']) ? (bool)$args['error'] : false;
|
||
$type = isset($args['type']) ? $args['type'] : 'default';
|
||
$bs_callout = 'bs-callout-' . $type;
|
||
fansub_add_string_with_space_before($class, $bs_callout);
|
||
if($error) {
|
||
fansub_add_string_with_space_before($class, 'settings-error error');
|
||
}
|
||
$dismissible = isset($args['dismissible']) ? (bool)$args['dismissible'] : true;
|
||
if($dismissible) {
|
||
fansub_add_string_with_space_before($class, 'is-dismissible');
|
||
}
|
||
$id = isset($args['id']) ? $args['id'] : '';
|
||
$id = fansub_sanitize_id($id);
|
||
$text = isset($args['text']) ? $args['text'] : '';
|
||
if(empty($text)) {
|
||
return;
|
||
}
|
||
$title = isset($args['title']) ? $args['title'] : '';
|
||
if($error && empty($title)) {
|
||
$title = __('Error', 'fansub');
|
||
}
|
||
if(!empty($title)) {
|
||
$text = '<strong>' . $title . ':</strong> ' . $text;
|
||
}
|
||
?>
|
||
<div class="<?php echo esc_attr($class); ?>" id="<?php echo esc_attr($id); ?>">
|
||
<p><?php echo $text; ?></p>
|
||
</div>
|
||
<?php
|
||
}
|
||
|
||
function fansub_sanitize_id($id) {
|
||
if(is_array($id)) {
|
||
$id = implode('@', $id);
|
||
}
|
||
$id = strtolower($id);
|
||
$id = str_replace('][', '_', $id);
|
||
$chars = array(
|
||
'-',
|
||
' ',
|
||
'[',
|
||
']',
|
||
'@',
|
||
'.'
|
||
);
|
||
$id = str_replace($chars, '_', $id);
|
||
$id = trim($id, '_');
|
||
return $id;
|
||
}
|
||
|
||
function fansub_admin_notice_setting_saved() {
|
||
fansub_admin_notice(array('text' => '<strong>' . __('Settings saved.', 'fansub') . '</strong>'));
|
||
}
|
||
|
||
function fansub_sanitize_field_name($base_name, $arr = array()) {
|
||
$name = '';
|
||
if(!is_array($arr)) {
|
||
if(fansub_string_contain($arr, $base_name)) {
|
||
return $arr;
|
||
}
|
||
$arr = (array)$arr;
|
||
}
|
||
foreach($arr as $part) {
|
||
if(!is_array($part) && fansub_string_contain($part, $base_name)) {
|
||
return array_shift($arr);
|
||
}
|
||
$name .= '[' . $part . ']';
|
||
}
|
||
return $base_name . $name;
|
||
}
|
||
|
||
function fansub_sanitize_field_args(&$args) {
|
||
if(isset($args['sanitized'])) {
|
||
return $args;
|
||
}
|
||
$field_class = isset($args['field_class']) ? $args['field_class'] : '';
|
||
$class = isset($args['class']) ? $args['class'] : '';
|
||
fansub_add_string_with_space_before($field_class, $class);
|
||
$widefat = isset($args['widefat']) ? (bool)$args['widefat'] : true;
|
||
$id = isset($args['id']) ? $args['id'] : '';
|
||
$label = isset($args['label']) ? $args['label'] : '';
|
||
$name = isset($args['name']) ? $args['name'] : '';
|
||
fansub_transmit_id_and_name($id, $name);
|
||
$value = isset($args['value']) ? $args['value'] : '';
|
||
$description = isset($args['description']) ? $args['description'] : '';
|
||
$args['class'] = $field_class;
|
||
$args['field_class'] = $field_class;
|
||
$args['id'] = $id;
|
||
$args['label'] = $label;
|
||
$args['name'] = $name;
|
||
$args['value'] = $value;
|
||
$args['description'] = $description;
|
||
$args['widefat'] = $widefat;
|
||
$args['sanitized'] = true;
|
||
return $args;
|
||
}
|
||
|
||
function fansub_is_image($url, $id = 0) {
|
||
$result = false;
|
||
if(fansub_id_number_valid($id)) {
|
||
$result = wp_attachment_is_image($id);
|
||
} else {
|
||
$img_formats = array('png', 'jpg', 'jpeg', 'gif', 'tiff', 'bmp', 'ico');
|
||
$path_info = pathinfo($url);
|
||
$extension = isset($path_info['extension']) ? $path_info['extension'] : '';
|
||
if(in_array(strtolower($extension), $img_formats)) {
|
||
$result = true;
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_sanitize_media_value($value) {
|
||
$url = isset($value['url']) ? $value['url'] : '';
|
||
$has_url = false;
|
||
if(!empty($url)) {
|
||
$has_url = true;
|
||
}
|
||
$id = isset($value['id']) ? $value['id'] : '';
|
||
$id = absint($id);
|
||
if(0 < $id && fansub_media_file_exists($id)) {
|
||
$url = fansub_get_media_image_url($id);
|
||
}
|
||
if(0 >= $id && !is_array($value) && !empty($value)) {
|
||
$url = $value;
|
||
}
|
||
if($has_url && empty($url)) {
|
||
$url = wp_get_attachment_url($id);
|
||
}
|
||
$icon = wp_mime_type_icon($id);
|
||
$size = fansub_get_media_size($id);
|
||
$result = array(
|
||
'id' => $id,
|
||
'url' => $url,
|
||
'type_icon' => $icon,
|
||
'is_image' => fansub_is_image($url, $id),
|
||
'size' => $size,
|
||
'size_format' => fansub_size_converter($size),
|
||
'mime_type' => get_post_mime_type($id)
|
||
);
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_media_path($id) {
|
||
return get_attached_file($id);
|
||
}
|
||
|
||
function fansub_media_file_exists($id) {
|
||
if(file_exists(fansub_get_media_path($id))) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_get_media_id($url) {
|
||
global $wpdb;
|
||
$attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $url));
|
||
return isset($attachment[0]) ? $attachment[0] : 0;
|
||
}
|
||
|
||
function fansub_get_media_image_detail($id) {
|
||
return wp_get_attachment_image_src($id, 'full');
|
||
}
|
||
|
||
function fansub_get_media_image_url($id) {
|
||
$detail = fansub_get_media_image_detail($id);
|
||
return isset($detail[0]) ? $detail[0] : '';
|
||
}
|
||
|
||
function fansub_size_converter($bytes, $decimals = 2) {
|
||
$result = size_format($bytes, $decimals);
|
||
$result = strtoupper($result);
|
||
return $result;
|
||
}
|
||
|
||
function fansub_get_media_size($id) {
|
||
return filesize(get_attached_file($id));
|
||
}
|
||
|
||
function fansub_get_image_sizes($id) {
|
||
$path = $id;
|
||
if(fansub_id_number_valid($id)) {
|
||
$path = get_attached_file($id);
|
||
}
|
||
if(!file_exists($path)) {
|
||
return null;
|
||
}
|
||
return getimagesize($path);
|
||
}
|
||
|
||
function fansub_get_media_option_url($value) {
|
||
$value = fansub_sanitize_media_value($value);
|
||
return $value['url'];
|
||
}
|
||
|
||
function fansub_bool_to_int($value) {
|
||
if($value) {
|
||
return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
function fansub_int_to_bool($value) {
|
||
$value = absint($value);
|
||
if(0 < $value) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_bool_to_string($value) {
|
||
if($value) {
|
||
return 'true';
|
||
}
|
||
return 'false';
|
||
}
|
||
|
||
function fansub_string_to_bool($string) {
|
||
$string = strtolower($string);
|
||
if('true' == $string) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_search_form($args = array()) {
|
||
$echo = isset($args['echo']) ? (bool)$args['echo'] : true;
|
||
$class = isset($args['class']) ? $args['class'] : '';
|
||
fansub_add_string_with_space_before($class, 'search-form');
|
||
$placeholder = isset($args['placeholder']) ? $args['placeholder'] : _x('Search …', 'placeholder');
|
||
$search_icon = isset($args['search_icon']) ? $args['search_icon'] : false;
|
||
$submit_text = _x('Search', 'submit button');
|
||
if($search_icon) {
|
||
fansub_add_string_with_space_before($class, 'use-icon-search');
|
||
$submit_text = '';
|
||
}
|
||
$icon_in = fansub_get_value_by_key($args, 'icon_in');
|
||
if((bool)$icon_in) {
|
||
fansub_add_string_with_space_before($class, 'icon-in');
|
||
}
|
||
$action = fansub_get_value_by_key($args, 'action', home_url('/'));
|
||
$action = trailingslashit($action);
|
||
$name = fansub_get_value_by_key($args, 'name', 's');
|
||
$form = '<form method="get" class="' . $class . '" action="' . esc_url($action) . '">
|
||
<label>
|
||
<span class="screen-reader-text">' . _x('Search for:', 'label') . '</span>
|
||
<input type="search" class="search-field" placeholder="' . esc_attr($placeholder) . '" value="' . get_search_query() . '" name="' . $name . '" title="' . esc_attr_x('Search for:', 'label') . '" />
|
||
</label>
|
||
<input type="submit" class="search-submit" value="'. esc_attr($submit_text) .'" />
|
||
</form>';
|
||
if($echo) {
|
||
echo $form;
|
||
}
|
||
return $form;
|
||
}
|
||
|
||
function fansub_feedburner_form($args = array()) {
|
||
$name = isset($args['name']) ? $args['name'] : '';
|
||
$locale = isset($args['locale']) ? $args['locale'] : 'en_US';
|
||
$submit_button_text = isset($args['submit_button_text']) ? $args['submit_button_text'] : '';
|
||
if(!isset($args['submit_button_text']) && isset($args['button_text'])) {
|
||
$submit_button_text = $args['button_text'];
|
||
}
|
||
if(empty($submit_button_text)) {
|
||
$submit_button_text = __('Đăng ký', 'fansub');
|
||
}
|
||
$placeholder = isset($args['placeholder']) ? $args['placeholder'] : __('Nhập địa chỉ email của bạn...', 'fansub');
|
||
?>
|
||
<form class="feedburner-form" action="https://feedburner.google.com/fb/a/mailverify" method="post" target="popupwindow" onsubmit="window.open('https://feedburner.google.com/fb/a/mailverify?uri=<?php echo $name; ?>', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true">
|
||
<?php do_action('fansub_feedburner_before'); ?>
|
||
<input class="email-field" type="text" placeholder="<?php echo $placeholder; ?>" name="email" autocomplete="off">
|
||
<input type="hidden" value="<?php echo $name; ?>" name="uri">
|
||
<input type="hidden" name="loc" value="<?php echo $locale; ?>">
|
||
<input class="btn btn-submit" type="submit" value="<?php echo $submit_button_text; ?>">
|
||
<?php do_action('fansub_feedburner_after'); ?>
|
||
</form>
|
||
<?php
|
||
}
|
||
|
||
function fansub_get_sidebars() {
|
||
return $GLOBALS['wp_registered_sidebars'];
|
||
}
|
||
|
||
function fansub_get_sidebar_by($key, $value) {
|
||
$sidebars = fansub_get_sidebars();
|
||
foreach ($sidebars as $id => $sidebar) {
|
||
switch($key) {
|
||
default:
|
||
if($id == $value) {
|
||
return $sidebar;
|
||
}
|
||
}
|
||
}
|
||
return array();
|
||
}
|
||
|
||
function fansub_sidebar_has_widget($sidebar, $widget) {
|
||
$sidebar_name = $sidebar;
|
||
$sidebars = fansub_get_sidebars();
|
||
$sidebar = isset($sidebars[$sidebar]) ? $sidebars[$sidebar] : '';
|
||
if(!empty($sidebar)) {
|
||
$widgets = fansub_get_sidebar_widgets($sidebar_name);
|
||
foreach($widgets as $widget_name) {
|
||
if(fansub_string_contain($widget_name, $widget)) {
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function fansub_get_sidebar_widgets($sidebar) {
|
||
$widgets = wp_get_sidebars_widgets();
|
||
$widgets = isset($widgets[$sidebar]) ? $widgets[$sidebar] : null;
|
||
return $widgets;
|
||
}
|
||
|
||
function fansub_supported_languages() {
|
||
$languages = array(
|
||
'vi' => __('Vietnamese', 'fansub'),
|
||
'en' => __('English', 'fansub')
|
||
);
|
||
return apply_filters('fansub_supported_languages', $languages);
|
||
}
|
||
|
||
function fansub_get_language() {
|
||
$lang = fansub_option_get_value('theme_setting', 'language');
|
||
if(empty($lang)) {
|
||
$lang = 'vi';
|
||
}
|
||
return apply_filters('fansub_language', $lang);
|
||
}
|
||
|
||
function fansub_register_core_style_and_script() {
|
||
wp_register_style('fansub-style', FANSUB_URL . '/css/fansub' . FANSUB_CSS_SUFFIX, array(), FANSUB_VERSION);
|
||
wp_register_script('fansub', FANSUB_URL . '/js/fansub' . FANSUB_JS_SUFFIX, array('jquery'), FANSUB_VERSION, true);
|
||
}
|
||
|
||
function fansub_default_script_localize_object() {
|
||
$datepicker_icon = apply_filters('fansub_datepicker_icon', FANSUB_URL . '/images/icon-datepicker-calendar.gif');
|
||
$shortcodes = fansub_get_all_shortcodes();
|
||
$args = array(
|
||
'ajax_url' => admin_url('admin-ajax.php'),
|
||
'datepicker_icon' => $datepicker_icon,
|
||
'shortcodes' => $shortcodes,
|
||
'logged_in' => fansub_bool_to_int(is_user_logged_in()),
|
||
'i18n' => array(
|
||
'jquery_undefined_error' => __('HocWP\'s JavaScript requires jQuery', 'fansub'),
|
||
'jquery_version_error' => sprintf(__('HocWP\'s JavaScript requires jQuery version %s or higher', 'fansub'), FANSUB_MINIMUM_JQUERY_VERSION),
|
||
'insert_media_title' => __('Insert media', 'fansub'),
|
||
'insert_media_button_text' => __('Use this media', 'fansub'),
|
||
'insert_media_button_texts' => __('Use these medias', 'fansub'),
|
||
'confirm_message' => __('Are you sure?', 'fansub'),
|
||
'disconnect_confirm_message' => __('Are you sure you want to disconnect?', 'fansub')
|
||
),
|
||
'ajax_loading' => '<p class="ajax-wrap"><img class="ajax-loading" src="' . fansub_get_image_url('icon-loading-circle-light-full.gif') . '" alt=""></p>'
|
||
);
|
||
return apply_filters('fansub_default_script_object', $args);
|
||
}
|
||
|
||
function fansub_enqueue_jquery_ui_style() {
|
||
$version = FANSUB_JQUERY_LATEST_VERSION;
|
||
$version = apply_filters('fansub_jquery_ui_version', $version);
|
||
$theme = apply_filters('fansub_jquery_ui_theme', 'smoothness');
|
||
wp_enqueue_style('jquery-ui-style', '//ajax.googleapis.com/ajax/libs/jqueryui/' . $version . '/themes/' . $theme . '/jquery-ui.css');
|
||
}
|
||
|
||
function fansub_enqueue_jquery_ui_datepicker() {
|
||
wp_enqueue_script('jquery-ui-datepicker');
|
||
fansub_enqueue_jquery_ui_style();
|
||
}
|
||
|
||
function fansub_get_recaptcha_language() {
|
||
$lang = apply_filters('fansub_recaptcha_language', fansub_get_language());
|
||
return $lang;
|
||
}
|
||
|
||
function fansub_enqueue_recaptcha() {
|
||
$lang = fansub_get_recaptcha_language();
|
||
$url = 'https://www.google.com/recaptcha/api.js';
|
||
$url = add_query_arg(array('hl' => $lang), $url);
|
||
$multiple = apply_filters('fansub_multiple_recaptcha', false);
|
||
if($multiple) {
|
||
$url = add_query_arg(array('onload' => 'CaptchaCallback', 'render' => 'explicit'), $url);
|
||
}
|
||
wp_enqueue_script('recaptcha', $url, array(), false, true);
|
||
}
|
||
|
||
function fansub_recaptcha_response($secret_key) {
|
||
$result = false;
|
||
$response = @file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret_key . '&response=' . $_POST['g-recaptcha-response']);
|
||
$response = json_decode($response, true);
|
||
if(true === $response['success']) {
|
||
$result = true;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_admin_enqueue_scripts() {
|
||
global $pagenow;
|
||
$current_page = fansub_get_current_admin_page();
|
||
$use = apply_filters('fansub_use_jquery_ui', false);
|
||
if($use || ('themes.php' == $pagenow && 'fansub_theme_setting' == $current_page)) {
|
||
wp_enqueue_script('jquery-ui-core');
|
||
}
|
||
$use = apply_filters('fansub_use_jquery_ui_sortable', false);
|
||
if($use) {
|
||
wp_enqueue_script('jquery-ui-sortable');
|
||
}
|
||
$use = apply_filters('fansub_use_color_picker', false);
|
||
if($use) {
|
||
wp_enqueue_script('wp-color-picker');
|
||
wp_enqueue_style('wp-color-picker');
|
||
}
|
||
$use = apply_filters('fansub_wp_enqueue_media', false);
|
||
if($use) {
|
||
wp_enqueue_media();
|
||
}
|
||
fansub_register_core_style_and_script();
|
||
wp_register_style('fansub-admin-style', FANSUB_URL . '/css/fansub-admin'. FANSUB_CSS_SUFFIX, array('fansub-style'), FANSUB_VERSION);
|
||
wp_register_script('fansub-admin', FANSUB_URL . '/js/fansub-admin' . FANSUB_JS_SUFFIX, array('jquery', 'fansub'), FANSUB_VERSION, true);
|
||
wp_localize_script('fansub', 'fansub', fansub_default_script_localize_object());
|
||
$use = apply_filters('fansub_use_admin_style_and_script', false);
|
||
if($use || 'post-new.php' == $pagenow || 'post.php' == $pagenow) {
|
||
wp_enqueue_style('fansub-admin-style');
|
||
wp_enqueue_script('fansub-admin');
|
||
} elseif('wpsupercache' == $current_page) {
|
||
wp_enqueue_style('fansub-admin-style');
|
||
}
|
||
}
|
||
|
||
function fansub_get_admin_email() {
|
||
return get_bloginfo('admin_email');
|
||
}
|
||
|
||
function fansub_google_plus_client_script() {
|
||
wp_enqueue_script('google-client', 'https://plus.google.com/js/client:platform.js', array(), false, true);
|
||
}
|
||
|
||
function fansub_facebook_javascript_sdk($args = array()) {
|
||
$language = isset($args['language']) ? $args['language'] : 'vi_VN';
|
||
$language = apply_filters('fansub_facebook_javascript_sdk_language', $language);
|
||
$app_id = isset($args['app_id']) ? $args['app_id'] : '';
|
||
$app_id = apply_filters('fansub_facebook_javascript_sdk_app_id', $app_id);
|
||
if(empty($app_id)) {
|
||
return;
|
||
}
|
||
$version = isset($args['version']) ? $args['version'] : FANSUB_FACEBOOK_GRAPH_API_VERSION;
|
||
$version = apply_filters('fansub_facebook_javascript_sdk_version', $version);
|
||
$use = fansub_use_facebook_javascript_sdk();
|
||
if(!(bool)$use) {
|
||
return;
|
||
}
|
||
?>
|
||
<div id="fb-root"></div>
|
||
<script>
|
||
(function(d, s, id) {
|
||
var js, fjs = d.getElementsByTagName(s)[0];
|
||
if (d.getElementById(id)) return;
|
||
js = d.createElement(s); js.id = id;
|
||
js.src = "//connect.facebook.net/<?php echo $language; ?>/sdk.js#xfbml=1&version=v<?php echo $version; ?>&appId=<?php echo $app_id; ?>";
|
||
fjs.parentNode.insertBefore(js, fjs);
|
||
}(document, 'script', 'facebook-jssdk'));
|
||
</script>
|
||
<?php
|
||
}
|
||
|
||
function fansub_use_full_mce_toolbar() {
|
||
$use = false;
|
||
global $pagenow;
|
||
if('post-new.php' == $pagenow || 'post.php' == $pagenow) {
|
||
$use = true;
|
||
}
|
||
return apply_filters('fansub_use_full_mce_toolbar', $use);
|
||
}
|
||
|
||
function fansub_use_facebook_javascript_sdk() {
|
||
$result = apply_filters('fansub_use_facebook_javascript_sdk', false);
|
||
return $result;
|
||
}
|
||
|
||
function fansub_facebook_page_plugin($args = array()) {
|
||
$href = fansub_get_value_by_key($args, 'href', fansub_get_value_by_key($args, 'url'));
|
||
if(empty($href)) {
|
||
$page_id = isset($args['page_id']) ? $args['page_id'] : 'fansubnet';
|
||
$href = 'https://www.facebook.com/' . $page_id;
|
||
}
|
||
if(empty($href)) {
|
||
return;
|
||
}
|
||
$page_name = isset($args['page_name']) ? $args['page_name'] : '';
|
||
$width = isset($args['width']) ? $args['width'] : 340;
|
||
$height = isset($args['height']) ? $args['height'] : 500;
|
||
$hide_cover = (bool)(isset($args['hide_cover']) ? $args['hide_cover'] : false);
|
||
$hide_cover = fansub_bool_to_string($hide_cover);
|
||
$show_facepile = (bool)(isset($args['show_facepile']) ? $args['show_facepile'] : true);
|
||
$show_facepile = fansub_bool_to_string($show_facepile);
|
||
$show_posts = (bool)(isset($args['show_posts']) ? $args['show_posts'] : false);
|
||
$show_posts = fansub_bool_to_string($show_posts);
|
||
$hide_cta = (bool)(isset($args['hide_cta']) ? $args['hide_cta'] : false);
|
||
$hide_cta = fansub_bool_to_string($hide_cta);
|
||
$small_header = (bool)(isset($args['small_header']) ? $args['small_header'] : false);
|
||
$small_header = fansub_bool_to_string($small_header);
|
||
$adapt_container_width = (bool)(isset($args['adapt_container_width']) ? $args['adapt_container_width'] : true);
|
||
$adapt_container_width = fansub_bool_to_string($adapt_container_width);
|
||
?>
|
||
<div class="fb-page" data-href="<?php echo $href; ?>" data-width="<?php echo $width; ?>" data-height="<?php echo $height; ?>" data-hide-cta="<?php echo $hide_cta; ?>" data-small-header="<?php echo $small_header; ?>" data-adapt-container-width="<?php echo $adapt_container_width; ?>" data-hide-cover="<?php echo $hide_cover; ?>" data-show-facepile="<?php echo $show_facepile; ?>" data-show-posts="<?php echo $show_posts; ?>">
|
||
<div class="fb-xfbml-parse-ignore">
|
||
<?php if(!empty($page_name)) : ?>
|
||
<blockquote cite="<?php echo $href; ?>">
|
||
<a href="<?php echo $href; ?>"><?php echo $page_name; ?></a>
|
||
</blockquote>
|
||
<?php endif; ?>
|
||
</div>
|
||
</div>
|
||
<?php
|
||
}
|
||
|
||
function fansub_update_permalink_struct($struct) {
|
||
global $wp_rewrite;
|
||
$wp_rewrite->set_permalink_structure($struct);
|
||
update_option('permalink_structure', $struct);
|
||
flush_rewrite_rules();
|
||
}
|
||
|
||
function fansub_flush_rewrite_rules_after_site_url_changed() {
|
||
$old_url = get_option('fansub_site_url');
|
||
$defined_url = (defined('WP_SITEURL')) ? WP_SITEURL : get_option('siteurl');
|
||
if(empty($old_url) || $old_url != $defined_url) {
|
||
update_option('fansub_site_url', $defined_url);
|
||
flush_rewrite_rules();
|
||
}
|
||
}
|
||
|
||
function fansub_the_footer_logo() {
|
||
$footer_logo = fansub_get_footer_logo_url();
|
||
if(!empty($footer_logo)) {
|
||
$a = new FANSUB_HTML('a');
|
||
$a->set_attribute('href', home_url('/'));
|
||
$img = new FANSUB_HTML('img');
|
||
$img->set_attribute('src', $footer_logo);
|
||
$a->set_text($img->build());
|
||
$a->output();
|
||
}
|
||
}
|
||
|
||
function fansub_remove_array_item_by_value($value, $array) {
|
||
if(($key = array_search($value, $array)) !== false) {
|
||
unset($array[$key]);
|
||
}
|
||
return $array;
|
||
}
|
||
|
||
function fansub_find_valid_value_in_array($arr, $key) {
|
||
$result = '';
|
||
if(is_array($arr)) {
|
||
if(isset($arr[$key])) {
|
||
$result = $arr[$key];
|
||
} else {
|
||
$index = absint(count($arr)/2);
|
||
if(isset($arr[$index])) {
|
||
$result = $arr[$index];
|
||
} else {
|
||
$result = current($arr);
|
||
}
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_pretty_permalinks_enabled() {
|
||
$permalink_structure = get_option('permalink_structure');
|
||
return (empty($permalink_structure)) ? false : true;
|
||
}
|
||
|
||
function fansub_exclude_special_taxonomies(&$taxonomies) {
|
||
unset($taxonomies['nav_menu']);
|
||
unset($taxonomies['link_category']);
|
||
unset($taxonomies['post_format']);
|
||
}
|
||
|
||
function fansub_exclude_special_post_types(&$post_types) {
|
||
unset($post_types['attachment']);
|
||
unset($post_types['page']);
|
||
}
|
||
|
||
function fansub_get_last_part_in_url($url) {
|
||
return substr(parse_url($url, PHP_URL_PATH), 1);
|
||
}
|
||
|
||
function fansub_substr($str, $len, $more = '...', $charset = 'UTF-8') {
|
||
$more = esc_html($more);
|
||
$str = html_entity_decode($str, ENT_QUOTES, $charset);
|
||
if(mb_strlen($str, $charset) > $len) {
|
||
$arr = explode(' ', $str);
|
||
$str = mb_substr($str, 0, $len, $charset);
|
||
$arr_words = explode(' ', $str);
|
||
$index = count($arr_words) - 1;
|
||
$last = $arr[$index];
|
||
unset($arr);
|
||
if(strcasecmp($arr_words[$index], $last)) {
|
||
unset($arr_words[$index]);
|
||
}
|
||
return implode(' ', $arr_words) . $more;
|
||
}
|
||
return $str;
|
||
}
|
||
|
||
function fansub_icon_circle_ajax($post_id, $meta_key) {
|
||
$div = new FANSUB_HTML('div');
|
||
$div->set_attribute('style', 'text-align: center');
|
||
$div->set_class('fansub-switcher-ajax');
|
||
$span = new FANSUB_HTML('span');
|
||
$circle_class = 'icon-circle';
|
||
$result = get_post_meta($post_id, $meta_key, true);
|
||
if(1 == $result) {
|
||
$circle_class .= ' icon-circle-success';
|
||
}
|
||
$span->set_attribute('data-id', $post_id);
|
||
$span->set_attribute('data-value', $result);
|
||
$span->set_attribute('data-key', $meta_key);
|
||
$span->set_class($circle_class);
|
||
$div->set_text($span->build());
|
||
$div->output();
|
||
}
|
||
|
||
function fansub_get_posts_per_page() {
|
||
return get_option('posts_per_page');
|
||
}
|
||
|
||
function fansub_delete_transient_with_condition($transient_name, $condition = '', $blog_id = '') {
|
||
global $wpdb;
|
||
if(!empty($blog_id)) {
|
||
$wpdb->set_blog_id($blog_id);
|
||
}
|
||
$last_char = fansub_get_last_char($transient_name);
|
||
if('_' == $last_char) {
|
||
$transient_name = fansub_remove_last_char($transient_name, $last_char);
|
||
}
|
||
$wpdb->query($wpdb->prepare("DELETE FROM $wpdb->options WHERE option_name like %s" . $condition, '_transient_' . $transient_name . '_%'));
|
||
$wpdb->query($wpdb->prepare("DELETE FROM $wpdb->options WHERE option_name like %s" . $condition, '_transient_timeout_' . $transient_name . '_%'));
|
||
}
|
||
|
||
function fansub_delete_transient($transient_name, $blog_id = '') {
|
||
fansub_delete_transient_with_condition($transient_name, $blog_id);
|
||
}
|
||
|
||
function fansub_delete_transient_license_valid($blog_id = '') {
|
||
$transient_name = 'fansub_check_license';
|
||
fansub_delete_transient($transient_name, $blog_id);
|
||
}
|
||
|
||
function fansub_get_wp_version() {
|
||
global $wp_version;
|
||
return $wp_version;
|
||
}
|
||
|
||
function fansub_get_ip_address() {
|
||
return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
|
||
}
|
||
|
||
function fansub_get_upload_folder_details() {
|
||
$upload = wp_upload_dir();
|
||
$dir = isset($upload['basedir']) ? $upload['basedir'] : '';
|
||
$url = isset($upload['baseurl']) ? $upload['baseurl'] : '';
|
||
if(empty($dir)) {
|
||
$dir = WP_CONTENT_DIR . '/uploads';
|
||
}
|
||
if(empty($url)) {
|
||
$url = content_url('uploads');
|
||
}
|
||
return array('path' => $dir, 'url' => $url);
|
||
}
|
||
|
||
function fansub_is_phone_number($number) {
|
||
$regex = "/^(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}$/i";
|
||
$result = (preg_match($regex, $number)) ? true : false;
|
||
if($result) {
|
||
$len = strlen($number);
|
||
if($len < 7 || $len > 20) {
|
||
$result = false;
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
function fansub_image_base64($file) {
|
||
$image_data = @file_get_contents($file);
|
||
return 'data:image/png;base64,' . base64_encode($image_data);
|
||
}
|
||
|
||
function fansub_upload($args = array()) {
|
||
$name = isset($args['name']) ? $args['name'] : '';
|
||
$path = isset($args['path']) ? $args['path'] : '';
|
||
$size = isset($args['size']) ? $args['size'] : 0;
|
||
$max_size = isset($args['max_size']) ? $args['max_size'] : -1;
|
||
$is_image = isset($args['is_image']) ? $args['is_image'] : false;
|
||
$extensions = isset($args['extensions']) ? $args['extensions'] : array();
|
||
$tmp_name = isset($args['tmp_name']) ? $args['tmp_name'] : '';
|
||
$duplicate_exists = isset($args['duplicate_exists']) ? $args['duplicate_exists'] : true;
|
||
$result = array(
|
||
'success' => false
|
||
);
|
||
$result['image_base64'] = fansub_image_base64($tmp_name);
|
||
$name = strtolower($name);
|
||
$file_path = $path . '/' . basename($name);
|
||
$file_type = pathinfo($file_path, PATHINFO_EXTENSION);
|
||
if($is_image && !empty($tmp_name)) {
|
||
$check = getimagesize($tmp_name);
|
||
if($check === false) {
|
||
$result['message'][] = 'Tập tin ' . $name . ' không phải là hình ảnh.';
|
||
return $result;
|
||
}
|
||
}
|
||
if(file_exists($file_path)) {
|
||
if($duplicate_exists) {
|
||
$path_info = pathinfo($file_path);
|
||
$name = $path_info['filename'] . '-' . fansub_random_string() . '.' . $file_type;
|
||
$name = strtolower($name);
|
||
$file_path = $path . '/' . basename($name);
|
||
} else {
|
||
$result['message'][] = 'Tập tin ' . $name . ' đã tồn tại.';
|
||
return $result;
|
||
}
|
||
}
|
||
if($max_size > 0 && $size > $max_size) {
|
||
$result['message'][] = 'Dung lượng tập tin không được quá ' . $max_size . 'KB.';
|
||
return $result;
|
||
}
|
||
if(count($extensions) > 0 && !in_array($file_type, $extensions)) {
|
||
$result['message'][] = 'Bạn không được phép upload tập tin với định dạng ' . $file_type . '.';
|
||
return $result;
|
||
}
|
||
$file_path = strtolower($file_path);
|
||
if(move_uploaded_file($tmp_name, $file_path)) {
|
||
$result['success'] = true;
|
||
} else {
|
||
$result['message'][] = 'Đã có lỗi xảy ra, tập tin của bạn chưa được upload.';
|
||
}
|
||
$result['name'] = $name;
|
||
$result['path'] = $file_path;
|
||
return $result;
|
||
}
|
||
|
||
function fansub_execute_upload($args = array()) {
|
||
$files = isset($args['files']) ? $args['files'] : array();
|
||
unset($args['files']);
|
||
$upload_path = isset($args['upload_path']) ? $args['upload_path'] : '';
|
||
unset($args['upload_path']);
|
||
$upload_url = isset($args['upload_url']) ? $args['upload_url'] : '';
|
||
unset($args['upload_url']);
|
||
if(empty($upload_path)) {
|
||
$upload_dir = fansub_get_upload_folder_details();
|
||
$target_dir = untrailingslashit($upload_dir['path']) . '/fansub';
|
||
$upload_url = untrailingslashit($upload_dir['url']) . '/fansub';
|
||
if(!file_exists($target_dir)) {
|
||
wp_mkdir_p($target_dir);
|
||
}
|
||
$upload_path = $target_dir;
|
||
}
|
||
$file_names = isset($files['name']) ? $files['name'] : array();
|
||
$file_count = count($file_names);
|
||
$list_files = array();
|
||
for($i = 0; $i < $file_count; $i++) {
|
||
$name = isset($files['name'][$i]) ? $files['name'][$i] : '';
|
||
$type = isset($files['type'][$i]) ? $files['type'][$i] : '';
|
||
$tmp_name = isset($files['tmp_name'][$i]) ? $files['tmp_name'][$i] : '';
|
||
$error = isset($files['error'][$i]) ? $files['error'][$i] : '';
|
||
$size = isset($files['size'][$i]) ? $files['size'][$i] : '';
|
||
$file_item = array(
|
||
'name' => $name,
|
||
'type' => $type,
|
||
'tmp_name' => $tmp_name,
|
||
'error' => $error,
|
||
'size' => $size
|
||
);
|
||
$list_files[] = $file_item;
|
||
}
|
||
$list_results = array();
|
||
foreach($list_files as $key => $file) {
|
||
$file['path'] = $upload_path;
|
||
$file = wp_parse_args($args, $file);
|
||
$result = fansub_upload($file);
|
||
if($result['success']) {
|
||
$file_name = $file['name'];
|
||
$file_path = untrailingslashit($upload_path) . '/' . $file_name;
|
||
$file_url = untrailingslashit($upload_url) . '/' . basename($result['name']);
|
||
$attachment = array(
|
||
'guid' => $file_url
|
||
);
|
||
fansub_insert_attachment($attachment, $file_path);
|
||
$result['url'] = $file_url;
|
||
}
|
||
$list_results[] = $result;
|
||
}
|
||
return $list_results;
|
||
}
|
||
|
||
function fansub_insert_attachment($attachment, $file_path, $parent_post_id = 0) {
|
||
if(!file_exists($file_path)) {
|
||
return 0;
|
||
}
|
||
$file_type = wp_check_filetype(basename($file_path), null);
|
||
$attachment['post_mime_type'] = $file_type['type'];
|
||
if(!isset($attachment['guid'])) {
|
||
return 0;
|
||
}
|
||
$attachment['post_status'] = isset($attachment['post_status']) ? $attachment['post_status'] : 'inherit';
|
||
if(!isset($attachment['post_title'])) {
|
||
$attachment['post_title'] = preg_replace('/\.[^.]+$/', '', basename($file_path));
|
||
}
|
||
$attach_id = wp_insert_attachment($attachment, $file_path, $parent_post_id);
|
||
if($attach_id > 0) {
|
||
fansub_update_attachment_meta($attach_id, $file_path);
|
||
if($parent_post_id > 0) {
|
||
fansub_set_thumbnail($parent_post_id, $attach_id);
|
||
}
|
||
}
|
||
return $attach_id;
|
||
}
|
||
|
||
function fansub_update_attachment_meta($attach_id, $file_path) {
|
||
if(!function_exists('wp_generate_attachment_metadata')) {
|
||
require_once(ABSPATH . 'wp-admin/includes/image.php');
|
||
}
|
||
$attach_data = wp_generate_attachment_metadata($attach_id, $file_path);
|
||
wp_update_attachment_metadata($attach_id, $attach_data);
|
||
}
|
||
|
||
function fansub_set_thumbnail($post_id, $attach_id) {
|
||
return set_post_thumbnail($post_id, $attach_id);
|
||
}
|