<?php
if (!defined('THEME_FRAMEWORK')) exit('No direct script access allowed');

/**
 * Class to register custom post type
 *
 * @author		Bob Ulusoy
 * @copyright	Artbees LTD (c)
 * @link		http://artbees.net
 * @since		Version 1.0
 * @package 	artbees
 */

class Mk_Register_Post_Type
{
    
    var $title;
    var $name;
    var $plural;
    var $labels;
    var $args;
    var $supports;
    
    /**
     * Construct a new custom post type
     * @param string|array    $name
     * @param array           $args
     * @param array           $labels
     *
     * @author Bob Ulusoy
     * @since 1.0
     *
     */
    
    function __construct($name, $title, $supports = array() , $args = array() , $singular = false, $labels = array()) {
        
        if (!empty($name)) {
            
            // Checks if $title is array, first value will be title, second plural title
            if (is_array($title)) {
                
                $this->name = Mk_Post_Type_Helpers::uglify($name);
                $this->title = Mk_Post_Type_Helpers::beautify($title[0]);
                $this->plural = Mk_Post_Type_Helpers::beautify($title[1]);
            } 
            else {
                $this->name = Mk_Post_Type_Helpers::uglify($name);
                $this->title = Mk_Post_Type_Helpers::beautify($title);
                $this->plural = Mk_Post_Type_Helpers::pluralize(Mk_Post_Type_Helpers::beautify($title));
            }

            $this->args = isset($args) ? $args : '';
            $this->labels = isset($labels) ? $labels : '';
            $this->supports = isset($supports) ? $supports : '';
            
            // If post type does not exists, we will pass to register the post type
            if (!post_type_exists($this->name)) {
                $this->register_post_type();
                if ($singular) {
                    
                }
            }
        }
    }
    
    /**
     *
     * Register the post type
     *
     * @author Bob Ulusoy
     * @since 1.0
     */
    function register_post_type() {
        
        $options = get_option(THEME_OPTIONS);
        $toggle = isset($options[$this->name . '-post-type']) ? $options[$this->name . '-post-type'] : false;
        $post_type_toggle = isset($toggle) ? $toggle : 'true';
        
        if ($post_type_toggle == 'false') return false;
        
        // Set labels
        $labels = array_merge(array(
            'name' => sprintf(_x('%s', 'post type general name', 'mk_framework') , $this->plural) ,
            'singular_name' => sprintf(_x('%s', 'post type singular title', 'mk_framework') , $this->title) ,
            'menu_name' => sprintf(__('%s', 'mk_framework') , $this->plural) ,
            'all_items' => sprintf(__('All %s', 'mk_framework') , $this->plural) ,
            'add_new' => sprintf(_x('Add New', '%s', 'mk_framework') , $this->title) ,
            'add_new_item' => sprintf(__('Add New %s', 'mk_framework') , $this->title) ,
            'edit_item' => sprintf(__('Edit %s', 'mk_framework') , $this->title) ,
            'new_item' => sprintf(__('New %s', 'mk_framework') , $this->title) ,
            'view_item' => sprintf(__('View %s', 'mk_framework') , $this->title) ,
            'items_archive' => sprintf(__('%s Archive', 'mk_framework') , $this->title) ,
            'search_items' => sprintf(__('Search %s', 'mk_framework') , $this->plural) ,
            'not_found' => sprintf(__('No %s found', 'mk_framework') , $this->plural) ,
            'not_found_in_trash' => sprintf(__('No %s found in trash', 'mk_framework') , $this->plural) ,
            'parent_item_colon' => sprintf(__('%s Parent', 'mk_framework') , $this->title) ,
        ) , $this->labels);
        
        // Post type arguments
        $args = array_merge(array(
            'label' => sprintf(__('%s', 'mk_framework') , $this->plural) ,
            'labels' => $labels,
            'public' => true,
            'menu_position' => 110,
            'supports' => $this->supports,
        ) , $this->args);
        
        // Register Post type using WP register_post_type action.
        register_post_type($this->name, $args);
    }
    
    /**
     *
     *	Register Taxonomy for $this post type
     *
     * 	@param   string|array     $name
     * 	@param   array            $args
     * 	@param   array            $labels
     * 	@return  object           Abb_Custom_Post_Type
     *
     *
     */
    function register_taxonomy($name, $args = array() , $labels = array()) {
        
        $post_type_name = $this->name;
        
        $taxonomy = new Mk_Register_Taxonomy($name, $post_type_name, $args, $labels);
        
        return $this;
        
        // To chain methods
        
        
    }
    
    
    /**
     *
     *	Add specific supports for this post type
     *
     * 	@param   string|array     $features
     * 	@return  object           Abb_Custom_Post_Type
     *
     *
     */
    
    function add_post_support($features) {
        $post_type_name = $this->name;
        
        add_post_type_support($post_type_name, $features);
        
        return $this;
    }
    
    /**
     *
     *	Remove specific supports for this post type
     *
     * 	@param   string|array     $features
     * 	@return  object           Abb_Custom_Post_Type
     *
     *
     */
    
    function remove_post_type_supports($features) {
        $post_type_name = $this->name;
        
        foreach ((array)$features as $feature) {
            remove_post_type_support($post_type_name, $feature);
        }
    }
    
    /**
     *
     *	Removes singular pages from this post type.
     *
     *
     */
    function set_as_none_singular_posts() {
        if (get_query_var('post_type') == $this->name) {
            global $wp_query;
            $wp_query->is_home = false;
            $wp_query->is_404 = true;
            $wp_query->is_single = false;
            $wp_query->is_singular = false;
        }
    }
}

/**
 * Registers a Post Type
 *
 * @param   string|array    $name
 * @param   array           $args
 * @param   array           $labels
 * @return  object          Abb_Register_Post_Type
 *
 *
 */

function Mk_Register_Custom_Post_Type($name, $title, $supports = array(), $args = array(), $singular = false, $labels = array()) {
    $post_type = new Mk_Register_Post_Type($name, $title, $supports, $args, $singular = false, $labels);
    
    return $post_type;
}

