Horriblesubs/fansub/functions.php

3015 lines
112 KiB
PHP
Raw Normal View History

2018-03-28 07:11:18 +02:00
<?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">&times;</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 = '&copy; ' . 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 dIvoire', '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 . '&amp;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 &hellip;', '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 = '&#xf002;';
}
$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);
}