*/ class MEC_feature_speakers extends MEC_base { public $factory; public $main; public $settings; /** * Constructor method * @author Webnus */ public function __construct() { // Import MEC Factory $this->factory = $this->getFactory(); // Import MEC Main $this->main = $this->getMain(); // MEC Settings $this->settings = $this->main->get_settings(); } /** * Initialize speakers feature * @author Webnus */ public function init() { // Speakers Feature is Disabled if(!isset($this->settings['speakers_status']) || !$this->settings['speakers_status']) return; $this->factory->action('init', array($this, 'register_taxonomy'), 25); $this->factory->action('mec_speaker_edit_form_fields', array($this, 'edit_form')); $this->factory->action('mec_speaker_add_form_fields', array($this, 'add_form')); $this->factory->action('edited_mec_speaker', array($this, 'save_metadata')); $this->factory->action('created_mec_speaker', array($this, 'save_metadata')); $this->factory->action('wp_ajax_speaker_adding', array($this, 'fes_speaker_adding')); $this->factory->action('wp_ajax_nopriv_speaker_adding', array($this, 'fes_speaker_adding')); $this->factory->action('wp_ajax_mec_sponsor_adding', array($this, 'fes_sponsor_adding')); $this->factory->action('wp_ajax_nopriv_mec_sponsor_adding', array($this, 'fes_sponsor_adding')); $this->factory->action('current_screen', array($this, 'show_notices')); $this->factory->filter('manage_edit-mec_speaker_columns', array($this, 'filter_columns')); $this->factory->filter('manage_mec_speaker_custom_column', array($this, 'filter_columns_content'), 10, 3); $this->factory->action('current_screen', array($this, 'update_speakers_list_admin')); $this->factory->action('mec_fes_form_footer', array($this, 'update_speakers_list')); $this->factory->action('wp_ajax_update_speakers_list', array($this, 'get_speakers')); $this->factory->action('wp_ajax_nopriv_update_speakers_list', array($this, 'get_speakers')); $this->factory->filter('post_edit_category_parent_dropdown_args', array($this, 'hide_parent_dropdown')); } /** * Registers speaker taxonomy * @author Webnus */ public function register_taxonomy() { $singular_label = $this->main->m('taxonomy_speaker', esc_html__('Speaker', 'modern-events-calendar-lite')); $plural_label = $this->main->m('taxonomy_speakers', esc_html__('Speakers', 'modern-events-calendar-lite')); $speaker_args = apply_filters( 'mec_register_taxonomy_args', array( 'label'=>$plural_label, 'labels'=>array( 'name'=>$plural_label, 'singular_name'=>$singular_label, 'all_items'=>sprintf(esc_html__('All %s', 'modern-events-calendar-lite'), $plural_label), 'edit_item'=>sprintf(esc_html__('Edit %s', 'modern-events-calendar-lite'), $singular_label), 'view_item'=>sprintf(esc_html__('View %s', 'modern-events-calendar-lite'), $singular_label), 'update_item'=>sprintf(esc_html__('Update %s', 'modern-events-calendar-lite'), $singular_label), 'add_new_item'=>sprintf(esc_html__('Add New %s', 'modern-events-calendar-lite'), $singular_label), 'new_item_name'=>sprintf(esc_html__('New %s Name', 'modern-events-calendar-lite'), $singular_label), 'popular_items'=>sprintf(esc_html__('Popular %s', 'modern-events-calendar-lite'), $plural_label), 'search_items'=>sprintf(esc_html__('Search %s', 'modern-events-calendar-lite'), $plural_label), 'back_to_items'=>sprintf(esc_html__('← Back to %s', 'modern-events-calendar-lite'), $plural_label), 'not_found'=>sprintf(esc_html__('no %s found.', 'modern-events-calendar-lite'), strtolower($plural_label)), ), 'rewrite'=>array('slug'=>'events-speaker'), 'public'=>false, 'show_ui'=>true, 'show_in_rest'=>true, 'hierarchical'=>false, 'meta_box_cb'=>(isset($_POST['_inline_edit']) ? '' : 'post_categories_meta_box'), ), 'mec_speaker' ); register_taxonomy( 'mec_speaker', $this->main->get_main_post_type(), $speaker_args ); register_taxonomy_for_object_type('mec_speaker', $this->main->get_main_post_type()); } /** * Show edit form of speaker taxonomy * @author Webnus * @param object $term */ public function edit_form($term) { $job_title = get_metadata('term', $term->term_id, 'job_title', true); $tel = get_metadata('term', $term->term_id, 'tel', true); $email = get_metadata('term', $term->term_id, 'email', true); $website = get_metadata('term', $term->term_id, 'website', true); $index = get_metadata('term', $term->term_id, 'mec_index', true); $facebook = get_metadata('term', $term->term_id, 'facebook', true); $type = get_metadata('term', $term->term_id, 'type', true); $instagram = get_metadata('term', $term->term_id, 'instagram', true); $linkedin = get_metadata('term', $term->term_id, 'linkedin', true); $twitter = get_metadata('term', $term->term_id, 'twitter', true); $thumbnail = get_metadata('term', $term->term_id, 'thumbnail', true); ?>

'; ?>
*/ public function add_form() { ?>

* @param int $term_id */ public function save_metadata($term_id) { // Quick Edit if(!isset($_POST['job_title'])) return; $job_title = sanitize_text_field($_POST['job_title']); $type = isset($_POST['type']) ? sanitize_text_field($_POST['type']) : 'person'; $tel = isset($_POST['tel']) ? sanitize_text_field($_POST['tel']) : ''; $email = isset($_POST['email']) ? sanitize_text_field($_POST['email']) : ''; $website = (isset($_POST['website']) and trim($_POST['website'])) ? esc_url($_POST['website']) : ''; $index = (isset($_POST['mec_index']) and trim($_POST['mec_index'])) ? sanitize_text_field($_POST['mec_index']) : 99; $facebook = (isset($_POST['facebook']) and trim($_POST['facebook'])) ? esc_url($_POST['facebook']) : ''; $twitter = (isset($_POST['twitter']) and trim($_POST['twitter'])) ? esc_url($_POST['twitter']) : ''; $instagram = (isset($_POST['instagram']) and trim($_POST['instagram'])) ? esc_url($_POST['instagram']) : ''; $linkedin = (isset($_POST['linkedin']) and trim($_POST['linkedin'])) ? esc_url($_POST['linkedin']) : ''; $thumbnail = isset($_POST['thumbnail']) ? sanitize_text_field($_POST['thumbnail']) : ''; update_term_meta($term_id, 'type', $type); update_term_meta($term_id, 'job_title', $job_title); update_term_meta($term_id, 'tel', $tel); update_term_meta($term_id, 'email', $email); update_term_meta($term_id, 'website', $website); update_term_meta($term_id, 'mec_index', $index); update_term_meta($term_id, 'facebook', $facebook); update_term_meta($term_id, 'twitter', $twitter); update_term_meta($term_id, 'instagram', $instagram); update_term_meta($term_id, 'linkedin', $linkedin); update_term_meta($term_id, 'thumbnail', $thumbnail); do_action('mec_save_speaker_extra_fields', $term_id); } /** * Filter columns of speaker taxonomy * @author Webnus * @param array $columns * @return array */ public function filter_columns($columns) { unset($columns['name']); unset($columns['slug']); unset($columns['description']); unset($columns['posts']); $columns['id'] = esc_html__('ID', 'modern-events-calendar-lite'); $columns['name'] = $this->main->m('taxonomy_speaker', esc_html__('Speaker', 'modern-events-calendar-lite')); $columns['job_title'] = esc_html__('Job Title', 'modern-events-calendar-lite'); $columns['tel'] = esc_html__('Tel', 'modern-events-calendar-lite'); $columns['posts'] = esc_html__('Count', 'modern-events-calendar-lite'); return apply_filters('speaker_filter_column', $columns); } /** * Filter content of speaker taxonomy columns * @author Webnus * @param string $content * @param string $column_name * @param int $term_id * @return string */ public function filter_columns_content($content, $column_name, $term_id) { switch($column_name) { case 'id': $content = $term_id; break; case 'tel': $content = get_metadata('term', $term_id, 'tel', true); break; case 'job_title': $content = get_metadata('term', $term_id, 'job_title', true); break; default: break; } return apply_filters('speaker_filter_column_content', $content, $column_name, $term_id); } /** * Adding new speaker * @author Webnus * @return void */ public function fes_speaker_adding() { $content = isset($_REQUEST['content']) ? sanitize_text_field($_REQUEST['content']) : NULL; $key = isset($_REQUEST['key']) ? sanitize_text_field($_REQUEST['key']) : NULL; $content = wp_strip_all_tags($content); $content = sanitize_text_field($content); $key = intval($key); if(!trim($content)) { echo '

' . sprintf(esc_html__('Sorry, You must insert %s name!', 'modern-events-calendar-lite'), strtolower(\MEC\Base::get_main()->m('taxonomy_speaker', esc_html__('speaker', 'modern-events-calendar-lite')))) . '

'; exit; } if(term_exists($content, 'mec_speaker')) { echo '

' . esc_html__("Sorry, {$content} already exists!", 'modern-events-calendar-lite') . '

'; exit; } wp_insert_term(trim($content), 'mec_speaker'); $speakers = ''; $speaker_terms = get_terms(array('taxonomy'=>'mec_speaker', 'hide_empty'=>false)); foreach($speaker_terms as $speaker_term) { $speakers .= ''; } echo MEC_kses::form($speakers); exit; } /** * Adding new sponsor * @author Webnus * @return void */ public function fes_sponsor_adding() { $content = isset($_REQUEST['content']) ? sanitize_text_field($_REQUEST['content']) : NULL; $key = isset($_REQUEST['key']) ? sanitize_text_field($_REQUEST['key']) : NULL; $content = wp_strip_all_tags($content); $content = sanitize_text_field($content); $key = intval($key); if(!trim($content)) { echo '

' . sprintf(esc_html__('Sorry, You must insert %s name!', 'modern-events-calendar-lite'), strtolower(\MEC\Base::get_main()->m('taxonomy_sponsor', esc_html__('sponsor', 'modern-events-calendar-lite')))) . '

'; exit; } if(term_exists($content, 'mec_sponsor')) { echo '

' . esc_html__("Sorry, {$content} already exists!", 'modern-events-calendar-lite') . '

'; exit; } wp_insert_term(trim($content), 'mec_sponsor'); $sponsors = ''; $sponsor_terms = get_terms(array('taxonomy'=>'mec_sponsor', 'hide_empty'=>false)); foreach($sponsor_terms as $sponsor_term) { $sponsors .= ''; } echo MEC_kses::form($sponsors); exit; } public function show_notices($screen) { if(isset($screen->id) and $screen->id == 'edit-mec_speaker') { add_action('admin_footer', function() { echo ""; }); } } public function update_speakers_list_admin($screen) { if(isset($screen->id) and $screen->id == 'mec-events' and isset($screen->base) and $screen->base == 'post') { add_action('admin_footer', array($this, 'update_speakers_list')); } } public function update_speakers_list() { echo ""; } public function get_speakers() { $speakers = get_terms('mec_speaker', array( 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => '0', )); $sp = []; foreach($speakers as $speaker) { $sp[] = array($speaker->term_id, $speaker->name); } wp_send_json(array('speakers' => $sp)); } public function hide_parent_dropdown($args) { if('mec_speaker' == $args['taxonomy']) $args['echo'] = false; return $args; } }