wpdb = $wpdb; } /** * @return Column */ public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } /** * Add column * * @param $columns * * @return array */ public function set_column_columns($columns) { $columns = array_slice($columns, 0, 2, true) + array("mp-column_menu_order" => __('Order', 'mp-timetable')) + array_slice($columns, 2, count($columns) - 1, true); $columns = array_slice($columns, 0, 2, true) + array("mp-column_timeslots_number" => __('Timeslots', 'mp-timetable')) + array_slice($columns, 2, count($columns) - 1, true); return $columns; } /** * Create event category admin link * * @param $column */ public function get_column_columns($column) { global $post; switch ($column) { case 'mp-column_timeslots_number': $metaData = $this->count_events($post); echo empty($metaData) ? "—" : esc_html( $metaData ); // int break; case 'mp-column_menu_order': if ( $post->menu_order > 0 ) { echo esc_html( $post->menu_order ); // int } break; } } /** * Count events * * @param $post * * @return int */ public function count_events($post) { $table_name = $this->get('events')->table_name; $event_ids = $this->wpdb->get_results("SELECT `event_id` FROM {$table_name} WHERE `column_id` = {$post->ID}", ARRAY_A); $count = 0; if ( !empty( $event_ids ) ) { foreach( $event_ids as $event ) { $event_id = $event['event_id']; if ( get_post_type( $event_id ) == 'mp-event' ) { $count++; } } } return intval($count); } /** * Client area order * * @param object $query * * @return mixed */ public function clientarea_default_order($query) { if (is_admin() || $query->is_main_query()) { if ($query->get('post_type') === 'mp-column') { $query->set('orderby', 'menu_order'); $query->set('order', 'ASC'); } } return $query; } /** * @param array $params * * @return array */ public function get_all_column($params = array()) { $args = array( 'post_type' => 'mp-column', 'post_status' => 'publish', 'order' => 'ASC', 'orderby' => 'menu_order date', 'posts_per_page' => -1, 'post__in' => '' ); $args = array_merge($args, $params); return get_posts($args); } /** * Columns by event category * * @param $terms * * @return array */ public function get_columns_by_event_category($terms) { $columns = array(); if (!is_array($terms)) { $terms = explode(',', $terms); } $posts_array = get_posts( array( 'fields' => 'ids', 'posts_per_page' => -1, 'post_type' => 'mp-event', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'mp-event_category', 'field' => 'term_id', 'terms' => $terms, ) ) ) ); $ids = implode(',', $posts_array); $event_data = $this->get('events')->get_events_data(array('column' => 'event_id', 'list' => $ids)); if (!empty($event_data)) { foreach ($event_data as $event) { if (in_array($event->event_id, $posts_array)) { $columns[] = $event->column_id; } } } return array_unique($columns); } /** * Render column metabox * * @param $post */ public function render_column_options($post) { $this->get_view()->render_html("column/metabox-column-options", array('post' => $post), true); } /** * Render meta data */ public function render_column_metas() { $this->append_events(); } public function append_events() { global $post; $data = $this->get('events')->get_event_data(array('field' => 'column_id', 'id' => $post->ID)); $events = (!empty($data)) ? $data : array(); $this->get_view()->get_template("theme/column-events", array('events' => $events)); } /** * Save meta data Column post type * * @param array $params */ public function save_column_data(array $params) { if ( !empty($params['data']) ) { foreach ($params['data'] as $meta_key => $meta) { if ( !empty($meta) ) { update_post_meta($params['post']->ID, $meta_key, sanitize_text_field( $meta ) ); } else { delete_post_meta($params['post']->ID, $meta_key, $meta); } } } } /** * Delete time-slots of the Column * * @param $post_id * * @return false|int */ public function before_delete_column($post_id) { $table_name = $this->get('events')->table_name; return $this->wpdb->delete($table_name, array('column_id' => $post_id), array('%d')); } }