<?php
/**
* Blogto: Excerpt
*
* @since Blogto: 0.1
*/
if( ! class_exists( 'Blogto_Excerpt' ) ):

class Blogto_Excerpt{

    /**
    * Default length (by WordPress)
    *
    * @since Blogto 1.0.0
    * @access public
    * @var int
    */
    public $length = 55;

    /**
    * Read more Text for excerpt
    * @since Blogto 1.0.0
    * @access public
    * @var string
    */
    public $more_text = '';

    /**
    * So you can call: blogto_excerpt( 'short' );
    *
    * @since  Blogto 1.0.0
    * @access protected
    * @var    array
    */
    protected $types = array(
        'short'   => 25,
        'regular' => 55,
        'long'    => 100
    );

    /**
    * Stores class instance
    * 
    * @since  Blogto 1.0.0
    * @access protected
    * @var    object
    */
    protected static $instance = NULL;

    /**
    * Retrives the instance of this class
    * 
    * @since  Blogto 1.0.0
    * @access public
    * @return object
    */
    public static function get_instance() {

        if ( ! self::$instance ) {
          self::$instance = new self();
        }

        return self::$instance;
    }

    /**
    * Sets the length for the excerpt,then it adds the WP filter
    * And automatically calls the_excerpt();
    *
    * @since Blogto 1.0.0
    * @param string $new_length 
    * @access public
    * @return void
    */
    public function excerpt( $new_length = 55, $echo, $more_text ) {

        $this->length    = $new_length;
        $this->more_text = $more_text;
        if(!is_admin()):
            add_filter( 'excerpt_more', array( $this, 'new_excerpt_more' ) );
            add_filter( 'excerpt_length', array( $this, 'new_length' ) );
        endif;

        if( $echo )
          the_excerpt();
        else
          return get_the_excerpt();
    }

    public function new_excerpt_more(){
        return $this->more_text;
    }

    /** 
    * Tells WP the new length
    *
    * @since Blogto 1.0.0
    * @access public
    * @return int
    */
    public function new_length() {

        if( isset( $this->types[ $this->length ] ) )
          return $this->types[ $this->length ];
        else
          return $this->length;
    }
}

endif;

/**
* Call to Blogto_Excerpt
*
* @since  1.0.0
* @uses   Blogto_Excerpt:::get_instance()->excerpt()
* @param  int $length
* @return void
*/
if( ! function_exists( 'blogto_excerpt' ) ):

    function blogto_excerpt( $length = 55, $echo = true, $more = '' ) {
        $length = apply_filters( 'blogto_excerpt_length', $length );
        return Blogto_Excerpt::get_instance()->excerpt( $length, $echo, $more );
    }
endif;