488 lines
16 KiB
PHP
488 lines
16 KiB
PHP
<?php
|
|
if (!function_exists('add_filter')) {
|
|
exit;
|
|
}
|
|
|
|
define('FANSUB_PH_KEY', 'cr9Cct8&Zn5$*CxD');
|
|
|
|
class FANSUB_HRS_PageTemplater
|
|
{
|
|
|
|
/**
|
|
* A Unique Identifier
|
|
*/
|
|
protected $plugin_slug;
|
|
|
|
/**
|
|
* A reference to an instance of this class.
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* The array of templates that this plugin tracks.
|
|
*/
|
|
protected $templates;
|
|
|
|
|
|
/**
|
|
* Returns an instance of this class.
|
|
*/
|
|
public static function get_instance()
|
|
{
|
|
|
|
if (null == self::$instance) {
|
|
self::$instance = new FANSUB_HRS_PageTemplater();
|
|
}
|
|
|
|
return self::$instance;
|
|
|
|
}
|
|
|
|
/**
|
|
* Initializes the plugin by setting filters and administration functions.
|
|
*/
|
|
private function __construct()
|
|
{
|
|
|
|
$this->templates = array();
|
|
|
|
|
|
// Add a filter to the attributes metabox to inject template into the cache.
|
|
add_filter(
|
|
'page_attributes_dropdown_pages_args',
|
|
array($this, 'register_project_templates')
|
|
);
|
|
|
|
|
|
// Add a filter to the save post to inject out template into the page cache
|
|
add_filter(
|
|
'wp_insert_post_data',
|
|
array($this, 'register_project_templates')
|
|
);
|
|
|
|
|
|
// Add a filter to the template include to determine if the page has our
|
|
// template assigned and return it's path
|
|
add_filter(
|
|
'template_include',
|
|
array($this, 'view_project_template')
|
|
);
|
|
|
|
|
|
// Add your templates to this array.
|
|
$this->templates = array(
|
|
'../jwplayer.php' => 'JW Player',
|
|
);
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Adds our template to the pages cache in order to trick WordPress
|
|
* into thinking the template file exists where it doens't really exist.
|
|
* @param $atts
|
|
* @return
|
|
*/
|
|
|
|
public function register_project_templates($atts)
|
|
{
|
|
|
|
// Create the key used for the themes cache
|
|
$cache_key = 'page_templates-' . md5(get_theme_root() . '/' . get_stylesheet());
|
|
|
|
// Retrieve the cache list.
|
|
// If it doesn't exist, or it's empty prepare an array
|
|
$templates = wp_get_theme()->get_page_templates();
|
|
if (empty($templates)) {
|
|
$templates = array();
|
|
}
|
|
|
|
// New cache, therefore remove the old one
|
|
wp_cache_delete($cache_key, 'themes');
|
|
|
|
// Now add our template to the list of templates by merging our templates
|
|
// with the existing templates array from the cache.
|
|
$templates = array_merge($templates, $this->templates);
|
|
|
|
// Add the modified cache to allow WordPress to pick it up for listing
|
|
// available templates
|
|
wp_cache_add($cache_key, $templates, 'themes', 1800);
|
|
|
|
return $atts;
|
|
|
|
}
|
|
|
|
/**
|
|
* Checks if the template is assigned to the page
|
|
* @param $template
|
|
* @return string
|
|
*/
|
|
public function view_project_template($template)
|
|
{
|
|
|
|
global $post;
|
|
if (!is_a($post, 'WP_Post')) {
|
|
return $template;
|
|
}
|
|
|
|
if (!isset($this->templates[get_post_meta(
|
|
$post->ID, '_wp_page_template', true
|
|
)])
|
|
) {
|
|
|
|
return $template;
|
|
|
|
}
|
|
|
|
$file = plugin_dir_path(__FILE__) . get_post_meta(
|
|
$post->ID, '_wp_page_template', true
|
|
);
|
|
|
|
// Just to be safe, we check if the file exist first
|
|
if (file_exists($file)) {
|
|
return $file;
|
|
} else {
|
|
echo $file;
|
|
}
|
|
|
|
return $template;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
add_action('plugins_loaded', array('FANSUB_HRS_PageTemplater', 'get_instance'));
|
|
|
|
function fansub_kntl_get_post_type()
|
|
{
|
|
$value = hocwp_option_get_value('fansub_kntl', 'post_type_name');
|
|
if (empty($value)) {
|
|
$data = fansub_kntl_get_option();
|
|
$value = hocwp_get_value_by_key($data, 'post_type_name');
|
|
}
|
|
if (empty($value)) {
|
|
$value = 'post';
|
|
}
|
|
|
|
return $value;
|
|
}
|
|
|
|
function fansub_kntl_get_post_type_label_singular_name()
|
|
{
|
|
$data = fansub_kntl_get_option();
|
|
$singular_name = hocwp_get_value_by_key($data, 'post_type_label_singular_name');
|
|
if (empty($singular_name)) {
|
|
$singular_name = hocwp_get_value_by_key($data, 'post_type_label_name');
|
|
}
|
|
|
|
return $singular_name;
|
|
}
|
|
|
|
function fansub_kntl_convert_post_title_to_parts($title)
|
|
{
|
|
$post_title = str_replace(' ', '-', $title);
|
|
$title_parts = explode('-', $post_title);
|
|
|
|
return $title_parts;
|
|
}
|
|
|
|
function fansub_kntl_get_post_types()
|
|
{
|
|
return array(fansub_kntl_get_post_type(), 'episode', 'batch');
|
|
}
|
|
|
|
function fansub_kntl_get_current_animation_single()
|
|
{
|
|
$animation = get_query_var('animation');
|
|
if (!hocwp_id_number_valid($animation)) {
|
|
$animation = hocwp_get_post_by_column('post_name', $animation, 'id', array('post_type' => fansub_kntl_get_post_type()));
|
|
}
|
|
|
|
return $animation;
|
|
}
|
|
|
|
function fansub_kntl_query_new_release($args = array())
|
|
{
|
|
$transient_name = 'fansub_kntl_query_new_release';
|
|
if (false === ($query = get_transient($transient_name)) || true) {
|
|
$data_defaults = fansub_kntl_get_option();
|
|
$post_type = fansub_kntl_get_post_types();
|
|
$defaults = array(
|
|
'post_type' => $post_type,
|
|
'post_status' => 'publish'
|
|
);
|
|
unset($data_defaults['post_type']);
|
|
$defaults = shortcode_atts($defaults, $data_defaults);
|
|
$args = wp_parse_args($args, $defaults);
|
|
$query = hocwp_query($args);
|
|
$batch_ids = array();
|
|
$episode_ids = array();
|
|
$animation_ids = array();
|
|
$exclude_ids = array();
|
|
$parents_has_new_child = array();
|
|
$animations_has_new_child = array();
|
|
$animation_type = fansub_kntl_get_post_type();
|
|
$episode_type = 'episode';
|
|
$episode_child_key = 'episodes';
|
|
$batch_type = 'batch';
|
|
$batch_child_key = 'batches';
|
|
|
|
foreach ($query->posts as $post) {
|
|
if ('batch' == $post->post_type) {
|
|
$batch_ids[] = $post->ID;
|
|
} elseif ('episode' == $post->post_type) {
|
|
//$episode_ids[] = $post->ID;
|
|
} else {
|
|
$animation_ids[] = $post->ID;
|
|
}
|
|
}
|
|
|
|
foreach ($batch_ids as $id) {
|
|
$parent_id = get_post_meta($id, $episode_type, true);
|
|
$has_new_child = false;
|
|
if (hocwp_id_number_valid($parent_id)) {
|
|
$childs = get_post_meta($parent_id, $batch_child_key, true);
|
|
if (hocwp_array_has_value($childs)) {
|
|
$has_new_child = true;
|
|
$exclude_ids = array_merge($exclude_ids, $childs);
|
|
$exclude_ids = array_unique($exclude_ids);
|
|
$tmp_args = array(
|
|
'post_type' => $batch_type,
|
|
'posts_per_page' => 1,
|
|
'fields' => 'ids'
|
|
);
|
|
$tmp_query = hocwp_query_post_by_meta($episode_type, $parent_id, $tmp_args, 'numeric');
|
|
if ($tmp_query->have_posts()) {
|
|
$exclude_ids[] = $id;
|
|
$exclude_ids = array_unique($exclude_ids);
|
|
$parents_has_new_child[] = $parent_id;
|
|
$latest_id = current($tmp_query->posts);
|
|
$exclude_ids = hocwp_sanitize_array($exclude_ids);
|
|
$exclude_ids = array_unique($exclude_ids);
|
|
$exclude_ids = hocwp_remove_array_item_by_value($latest_id, $exclude_ids);
|
|
}
|
|
}
|
|
$parent_id = get_post_meta($parent_id, $animation_type, true);
|
|
if (hocwp_id_number_valid($parent_id)) {
|
|
$childs = get_post_meta($parent_id, $episode_child_key, true);
|
|
if (hocwp_array_has_value($childs)) {
|
|
$exclude_ids = array_merge($exclude_ids, $childs);
|
|
$exclude_ids = array_unique($exclude_ids);
|
|
}
|
|
}
|
|
} else {
|
|
$parent_id = get_post_meta($id, $animation_type, true);
|
|
if (hocwp_id_number_valid($parent_id)) {
|
|
$childs = get_post_meta($parent_id, $batch_child_key, true);
|
|
if (hocwp_array_has_value($childs)) {
|
|
$has_new_child = true;
|
|
$exclude_ids = array_merge($exclude_ids, $childs);
|
|
$exclude_ids = array_unique($exclude_ids);
|
|
$tmp_args = array(
|
|
'post_type' => $batch_type,
|
|
'posts_per_page' => 1,
|
|
'fields' => 'ids'
|
|
);
|
|
$tmp_query = hocwp_query_post_by_meta($animation_type, $parent_id, $tmp_args, 'numeric');
|
|
if ($tmp_query->have_posts()) {
|
|
$exclude_ids[] = $id;
|
|
$exclude_ids = array_unique($exclude_ids);
|
|
$parents_has_new_child[] = $parent_id;
|
|
$latest_id = current($tmp_query->posts);
|
|
$exclude_ids = hocwp_sanitize_array($exclude_ids);
|
|
$exclude_ids = hocwp_remove_array_item_by_value($latest_id, $exclude_ids);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($episode_ids as $id) {
|
|
$parent_id = get_post_meta($id, $animation_type, true);
|
|
$has_new_child = false;
|
|
if (hocwp_id_number_valid($parent_id)) {
|
|
$childs = get_post_meta($parent_id, $episode_child_key, true);
|
|
if (hocwp_array_has_value($childs)) {
|
|
$has_new_child = true;
|
|
$exclude_ids = array_merge($exclude_ids, $childs);
|
|
$exclude_ids = array_unique($exclude_ids);
|
|
$tmp_args = array(
|
|
'post_type' => $episode_type,
|
|
'posts_per_page' => 1,
|
|
'fields' => 'ids'
|
|
);
|
|
$tmp_query = hocwp_query_post_by_meta($animation_type, $parent_id, $tmp_args, 'numeric');
|
|
if ($tmp_query->have_posts()) {
|
|
$exclude_ids[] = $id;
|
|
$exclude_ids = array_unique($exclude_ids);
|
|
$parents_has_new_child[] = $parent_id;
|
|
$latest_id = current($tmp_query->posts);
|
|
$exclude_ids = hocwp_sanitize_array($exclude_ids);
|
|
$exclude_ids = hocwp_remove_array_item_by_value($latest_id, $exclude_ids);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$exclude_ids = array_merge($exclude_ids, $parents_has_new_child);
|
|
|
|
$exclude_ids = hocwp_sanitize_array($exclude_ids);
|
|
$args['post__not_in'] = $exclude_ids;
|
|
$query = hocwp_query($args);
|
|
set_transient($transient_name, $query, 3 * DAY_IN_SECONDS);
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
function hocwp_horrilbesubs_get_single_page()
|
|
{
|
|
return hocwp_option_get_value('fansub_kntl', 'single_page');
|
|
}
|
|
|
|
function fansub_kntl_build_single_url($page_id, $animation_id)
|
|
{
|
|
$url = get_permalink($animation_id);
|
|
if (hocwp_id_number_valid($page_id)) {
|
|
$animation = get_post($animation_id);
|
|
$post_type = fansub_kntl_get_post_type();
|
|
if (is_a($animation, 'WP_Post') && $post_type == $animation->post_type) {
|
|
$url = get_permalink($page_id);
|
|
$permalink_struct = get_option('permalink_structure');
|
|
if (!empty($permalink_struct)) {
|
|
$url = trailingslashit($url);
|
|
$url .= trailingslashit($animation->post_name);
|
|
} else {
|
|
$url = add_query_arg(array('animation' => $animation_id), $url);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $url;
|
|
}
|
|
|
|
function hocwp_ph_servers_loop($servers, $quality, $post, &$quality_item_class)
|
|
{
|
|
$server_items_html = '';
|
|
$hide_url = false;
|
|
if ('private' == $post->post_status || post_password_required($post)) {
|
|
$hide_url = true;
|
|
$class = 'server-item private-item';
|
|
if (post_password_required($post)) {
|
|
$class .= ' password-required';
|
|
}
|
|
ob_start();
|
|
?>
|
|
<li class="<?php echo $class; ?>" data-id="<?php echo $post->ID; ?>">
|
|
<a href="javascript:" class="private-link" title="Private content">
|
|
<span class="dashicons dashicons-lock"
|
|
style="color: rgb(51, 51, 51); display: inline-block; line-height: 29px; font-size: 20px;"></span>
|
|
</a>
|
|
</li>
|
|
<?php
|
|
$server_items_html .= ob_get_clean();
|
|
}
|
|
foreach ($servers as $server) : ?>
|
|
<?php
|
|
$meta_name = 'quality_' . $quality . '_' . $server;
|
|
$meta_name = hocwp_sanitize_id($meta_name);
|
|
$meta_value = get_post_meta($post->ID, $meta_name, true);
|
|
if (!empty($meta_value)) {
|
|
hocwp_add_string_with_space_before($quality_item_class, 'has-link');
|
|
}
|
|
$href = $meta_value;
|
|
if ($hide_url) {
|
|
$href = 'javascript:';
|
|
} else {
|
|
$href = hocwp_ph_encrypt_download_url($href);
|
|
}
|
|
if (!empty($meta_value)) {
|
|
$meta_value = hocwp_ph_encrypt_download_url($meta_value);
|
|
}
|
|
ob_start();
|
|
?>
|
|
<li class="server-item <?php echo $server; ?>-item">
|
|
<?php if (empty($meta_value)) : ?>
|
|
<span class="server server-<?php echo hocwp_sanitize_id($server); ?>"><?php echo $server; ?></span>
|
|
<?php else : ?>
|
|
<a href="<?php echo esc_attr($href); ?>" data-href="<?php echo esc_url($meta_value); ?>">
|
|
<span class="server server-<?php echo hocwp_sanitize_id($server); ?>"><?php echo $server; ?></span>
|
|
</a>
|
|
<?php endif; ?>
|
|
</li>
|
|
<?php
|
|
$server_items_html .= ob_get_clean();
|
|
endforeach;
|
|
return $server_items_html;
|
|
}
|
|
|
|
function hocwp_ph_quality_item_html($quality, $quality_item_class, $server_items_html)
|
|
{
|
|
?>
|
|
<li class="quality-item <?php echo $quality; ?>-item">
|
|
<span class="<?php echo $quality_item_class; ?>"><?php echo $quality; ?></span>
|
|
<ul class="list-servers">
|
|
<?php echo $server_items_html; ?>
|
|
</ul>
|
|
</li>
|
|
<?php
|
|
}
|
|
|
|
function hocwp_ph_get_qualities_and_servers($post_id = null)
|
|
{
|
|
$qualities = '';
|
|
$servers = '';
|
|
if (hocwp_id_number_valid($post_id)) {
|
|
$pq = get_post_meta($post_id, 'custom_qualities', true);
|
|
if (!empty($pq)) {
|
|
$qualities = $pq;
|
|
}
|
|
$ps = get_post_meta($post_id, 'custom_servers', true);
|
|
if (!empty($ps)) {
|
|
$servers = $ps;
|
|
}
|
|
}
|
|
$data = fansub_kntl_get_option();
|
|
if (empty($qualities)) {
|
|
$qualities = hocwp_get_value_by_key($data, 'qualities');
|
|
}
|
|
if (empty($servers)) {
|
|
$servers = hocwp_get_value_by_key($data, 'servers');
|
|
}
|
|
|
|
$qualities = hocwp_string_to_array(',', $qualities);
|
|
$qualities = array_map('trim', $qualities);
|
|
$qualities = array_filter($qualities);
|
|
$qualities = array_unique($qualities);
|
|
|
|
$servers = hocwp_string_to_array(',', $servers);
|
|
$servers = array_map('trim', $servers);
|
|
$servers = array_filter($servers);
|
|
$servers = array_unique($servers);
|
|
|
|
return array('qualities' => $qualities, 'servers' => $servers);
|
|
}
|
|
|
|
function hocwp_ph_get_auto_facebook_post_types()
|
|
{
|
|
$options = get_option('fansub_kntl');
|
|
$post_type = isset($options['fb_post_type']) ? $options['fb_post_type'] : '';
|
|
$post_type = hocwp_json_string_to_array($post_type);
|
|
$result = array();
|
|
if (hocwp_array_has_value($post_type)) {
|
|
foreach ($post_type as $value) {
|
|
if (isset($value['value'])) {
|
|
$result[] = $value['value'];
|
|
}
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function hocwp_ph_encrypt_download_url($url)
|
|
{
|
|
$result = home_url('/go/');
|
|
$result .= base64_encode(FANSUB_PH_KEY . '|' . $url);
|
|
return $result;
|
|
}
|