      1: <?php
      2: /**
      3:  *
      4:  */
      5: class Sidecar_Admin_Tab {
      6:   /**
      7:    * @var Sidecar_Plugin_Base
      8:    */
      9:   var $plugin;
     10:   /**
     11:    * @var string
     12:    */
     13:   var $tab_slug;
     14:   /**
     15:    * @var string
     16:    */
     17:   var $tab_text;
     18:   /**
     19:    * @var bool|string
     20:    */
     21:   var $page_title = false;
     22:   /**
     23:    * @var bool|callable
     24:    */
     25:   var $tab_handler = false;
     26:   /**
     27:    * @var bool|string
     28:    */
     29:   var $before_page_title = false;
     30:   /**
     31:    * @var bool|string
     32:    */
     33:   var $before_content = false;
     34:   /**
     35:    * @var bool|string
     36:    */
     37:   var $after_content = false;
     38:   /**
     39:    * @var string|Sidecar_Form
     40:    */
     41:   var $forms = array();
     42:
     43:   /**
     44:    * @param string $tab_slug
     45:    * @param string $tab_text
     46:    * @param array $args
     47:    */
     48:   function __construct( $tab_slug, $tab_text, $args = array() ) {
     49:     $this->tab_slug = $tab_slug;
     50:     $this->tab_text = $tab_text;
     51:
     52:     /**
     53:      * Copy properties in from $args, if they exist.
     54:      */
     55:     foreach( $args as $property => $value ) {
     56:       if ( property_exists( $this, $property ) ) {
     57:         $this->$property = $value;
     58:       } else if ( property_exists( $this, $property = "tab_{$property}" ) ) {
     59:         $this->$property = $value;
     60:       }
     61:     }
     62:
     63:     if ( empty( $this->page_title ) && false !== $this->page_title )
     64:       $this->page_title = $tab_text;
     65:
     66:     if ( ! $this->forms && isset( $args['form'] ) ) {
     67:       /**
     68:        * Is 'form' passed in (singluar) grab it, otherwise grab the tab slug.
     69:        * Later convert the current tab's form to an object.
     70:        * Note: If form is passed as only 'true' then get the tab slug,
     71:        */
     72:
     73:       if ( true === $args['form'] )
     74:         $args['form'] = $tab_slug;
     75:
     76:       $this->forms = array( $args['form'] );
     77:      // $this->forms = array( isset( $args['form'] ) ? $args['form'] : $tab_slug );
     78:     }
     79:   }
     80:   /**
     81:    * @return bool
     82:    */
     83:   function has_forms() {
     84:     return is_array( $this->forms );
     85:   }
     86:
     87:   /**
     88:    * Determines if this tab has one of more form(s) that require an API.
     89:    *
     90:    * @return bool
     91:    */
     92:   function requires_api() {
     93:     $requires_api = false;
     94:     /**
     95:      * @var string|array|Sidecar_Form $form
     96:      */
     97:     foreach( $this->forms as $index => $form ) {
     98:       if ( ! is_object( $form ) )
     99:         $form = $this->plugin->get_form( $form );
    100:       if ( $form->requires_api ) {
    101:         $requires_api = true;
    102:         break;
    103:       }
    104:     }
    105:     return $requires_api;
    106:   }
    107:
    108: }
    109: