261 lines
No EOL
8.5 KiB
PHP
Executable file
261 lines
No EOL
8.5 KiB
PHP
Executable file
<?php
|
|
/** no direct access **/
|
|
defined('MECEXEC') or die();
|
|
|
|
/**
|
|
* Webnus MEC parser class.
|
|
* @author Webnus <info@webnus.net>
|
|
*/
|
|
class MEC_parser extends MEC_base
|
|
{
|
|
public $main;
|
|
public $render;
|
|
public $settings;
|
|
|
|
/**
|
|
* Constructor method
|
|
* @author Webnus <info@webnus.net>
|
|
*/
|
|
public function __construct()
|
|
{
|
|
// MEC main library
|
|
$this->main = $this->getMain();
|
|
|
|
// MEC render library
|
|
$this->render = $this->getRender();
|
|
|
|
// MEC Settings
|
|
$this->settings = $this->main->get_settings();
|
|
}
|
|
|
|
/**
|
|
* A wrapper function for getting WP_Query object
|
|
* @author Webnus <info@webnus.net>
|
|
* @global object $wp_query
|
|
* @return object
|
|
*/
|
|
public function get_wp_query()
|
|
{
|
|
global $wp_query;
|
|
return $wp_query;
|
|
}
|
|
|
|
/**
|
|
* load MEC Rewrite Rules
|
|
* @author Webnus <info@webnus.net>
|
|
* @param WP_Rewrite $wp_rewrite
|
|
*/
|
|
public function load_rewrites(WP_Rewrite $wp_rewrite)
|
|
{
|
|
// Don't add rewrite rules if archive page of MEC is disabled
|
|
if(!$this->main->get_archive_status()) return;
|
|
|
|
if(!$wp_rewrite instanceof WP_Rewrite)
|
|
{
|
|
global $wp_rewrite;
|
|
}
|
|
|
|
$rules = $this->get_rewrite_rules();
|
|
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
|
|
}
|
|
|
|
public function get_rewrite_rules()
|
|
{
|
|
// MEC main slug
|
|
$slug = $this->main->get_main_slug();
|
|
|
|
// MEC main post type name
|
|
$PT = $this->main->get_main_post_type();
|
|
|
|
return array(
|
|
// '(?:'.$slug.')/(\d{4}-\d{2})/?$'=>'index.php?post_type='.$PT.'&MecDisplay=month&MecDate=$matches[1]',
|
|
// '(?:'.$slug.')/(?:yearly)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=year',
|
|
// '(?:'.$slug.')/(?:monthly)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=month',
|
|
// '(?:'.$slug.')/(?:weekly)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=week',
|
|
// '(?:'.$slug.')/(?:daily)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=day',
|
|
// '(?:'.$slug.')/(?:timetable)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=timetable',
|
|
// '(?:'.$slug.')/(?:map)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=map',
|
|
// '(?:'.$slug.')/(?:list)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=list',
|
|
// '(?:'.$slug.')/(?:grid)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=grid',
|
|
// '(?:'.$slug.')/(?:agenda)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=agenda',
|
|
// '(?:'.$slug.')/(?:masonry)/?$'=>'index.php?post_type='.$PT.'&MecDisplay=masonry',
|
|
'(?:'.$slug.')/?$'=>'index.php?post_type='.$PT.'&MecDisplay=default',
|
|
'(?:'.$slug.')/(feed|rdf|rss|rss2|atom)/?$'=>'index.php?post_type='.$PT.'&feed=$matches[1]',
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Adds MEC query vars to the WordPress
|
|
* @author Webnus <info@webnus.net>
|
|
* @param array $qvars
|
|
* @return array
|
|
*/
|
|
public function add_query_vars($qvars)
|
|
{
|
|
$qvars[] = 'MecDisplay';
|
|
$qvars[] = 'MecMethod';
|
|
$qvars[] = 'MecDate';
|
|
|
|
return $qvars;
|
|
}
|
|
|
|
/**
|
|
* @author Webnus <info@webnus.net>
|
|
* @param object $query
|
|
*/
|
|
public function WPQ_parse($query)
|
|
{
|
|
// MEC Archive Page
|
|
if($query->get('MecDisplay') != '')
|
|
{
|
|
$query->MEC_archive = true;
|
|
$query->MEC_single = false;
|
|
|
|
$query->set('posts_per_page', 1);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @author Webnus <info@webnus.net>
|
|
* @param string $template
|
|
* @return string
|
|
*/
|
|
public function template($template)
|
|
{
|
|
// We're in an embed post
|
|
if(is_embed()) return $template;
|
|
|
|
$PT = $this->main->get_main_post_type();
|
|
if(is_single() && get_post_type() == $PT)
|
|
{
|
|
// Block Themes
|
|
if(function_exists('wp_is_block_theme') && wp_is_block_theme())
|
|
{
|
|
add_filter('the_content', [$this, 'block_theme_single_content']);
|
|
|
|
return $template;
|
|
}
|
|
|
|
$template = locate_template('single-'.$PT.'.php');
|
|
if($template == '') $template = MEC_ABSPATH.'templates'.DS.'single-mec-events.php';
|
|
}
|
|
elseif(is_post_type_archive($PT) && !is_search())
|
|
{
|
|
// Block Themes
|
|
if(function_exists('wp_is_block_theme') && wp_is_block_theme())
|
|
{
|
|
return $template;
|
|
}
|
|
|
|
$template = locate_template('archive-'.$PT.'.php');
|
|
if($template == '') $template = MEC_ABSPATH.'templates'.DS.'archive-mec-events.php';
|
|
|
|
add_action('mec_before_main_content', function()
|
|
{
|
|
// MEC factory library
|
|
$factory = $this->getFactory();
|
|
|
|
$factory->filter('the_content', [$this, 'archive_content']);
|
|
$factory->filter('mec_archive_title', [$this, 'archive_title']);
|
|
$factory->filter('post_thumbnail_html', [$this, 'archive_thumbnail']);
|
|
});
|
|
}
|
|
elseif(is_tax('mec_category'))
|
|
{
|
|
// Block Themes
|
|
if(function_exists('wp_is_block_theme') && wp_is_block_theme())
|
|
{
|
|
return $template;
|
|
}
|
|
|
|
$template = locate_template('taxonomy-mec-category.php');
|
|
if($template == '') $template = MEC_ABSPATH.'templates'.DS.'taxonomy-mec-category.php';
|
|
}
|
|
|
|
return $template;
|
|
}
|
|
|
|
/**
|
|
* @author Webnus <info@webnus.net>
|
|
* @param string $content
|
|
* @return string|boolean
|
|
*/
|
|
public function archive_content($content)
|
|
{
|
|
// only run it once
|
|
remove_filter('the_content', array($this, 'archive_content'));
|
|
|
|
// WP_Query
|
|
$wp_query = $this->get_wp_query();
|
|
|
|
if($wp_query->get('MecDisplay') == 'list') return $this->render->vlist();
|
|
elseif($wp_query->get('MecDisplay') == 'grid') return $this->render->vgrid();
|
|
elseif($wp_query->get('MecDisplay') == 'agenda') return $this->render->vagenda();
|
|
elseif($wp_query->get('MecDisplay') == 'month') return $this->render->vmonth();
|
|
elseif($wp_query->get('MecDisplay') == 'year') return $this->render->vyear();
|
|
elseif($wp_query->get('MecDisplay') == 'week') return $this->render->vweek();
|
|
elseif($wp_query->get('MecDisplay') == 'day') return $this->render->vday();
|
|
elseif($wp_query->get('MecDisplay') == 'timetable') return $this->render->vtimetable();
|
|
elseif($wp_query->get('MecDisplay') == 'masonry') return $this->render->vmasonry();
|
|
elseif($wp_query->get('MecDisplay') == 'map') return $this->render->vmap();
|
|
elseif($wp_query->get('MecDisplay') == 'default') return $this->render->vdefault();
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @author Webnus <info@webnus.net>
|
|
* @param string $title
|
|
* @return string
|
|
*/
|
|
public function archive_title($title)
|
|
{
|
|
// only run it once
|
|
remove_filter('mec_archive_title', [$this, 'archive_title']);
|
|
|
|
return $this->main->get_archive_title(false);
|
|
}
|
|
|
|
/**
|
|
* @author Webnus <info@webnus.net>
|
|
* @param string $html
|
|
* @return string
|
|
*/
|
|
public function archive_thumbnail($html)
|
|
{
|
|
// only run it once
|
|
remove_filter('post_thumbnail_html', [$this, 'archive_thumbnail']);
|
|
|
|
return $this->main->get_archive_thumbnail();
|
|
}
|
|
|
|
/**
|
|
* @author Webnus <info@webnus.net>
|
|
* @param string $content
|
|
* @return string
|
|
*/
|
|
public function single_content($content)
|
|
{
|
|
// MEC Single Page
|
|
if(!is_singular($this->main->get_main_post_type())) return $content;
|
|
|
|
$event_id = get_the_ID();
|
|
return $this->render->vsingle(['id'=>$event_id, 'content'=>$content]);
|
|
}
|
|
|
|
public function archive_document_title($title)
|
|
{
|
|
if(is_post_type_archive($this->main->get_main_post_type()) && !is_search())
|
|
{
|
|
return $this->main->get_archive_title();
|
|
}
|
|
|
|
return $title;
|
|
}
|
|
|
|
public function block_theme_single_content($content)
|
|
{
|
|
remove_filter('the_content', [$this, 'block_theme_single_content']);
|
|
return $this->single_content($content);
|
|
}
|
|
} |