Esempio n. 1
0
  public static function options_form( $options ) {

    global $meow_provider;
    
    $p = self::type_prefix(__CLASS__);

    $defaults = array();

    if (MPC::is_create()) {
      $defaults = array("maxwidth" => 580, "height" => 300, "control_style" => "drop_down_list", "orderby" => "title,asc", "exclude_current" => "yes");
    }

    $options = wp_parse_args( $options, $defaults );

    
    // setup variables to insert into the heredoc string
    // (this is required where we cannot call functions within heredoc strings)

    $post_types_label = __("Available Post Types:", MASTERPRESS_DOMAIN);
    $post_types_items = array();

    MPM::incl("post-type");

    $post_types = MPM_PostType::find("orderby=disabled,name ASC");

    $post_types_selected = array();
    
    foreach ($post_types as $post_type) {
      if (!$post_type->disabled && $post_type->show_ui && $post_type->still_registered()) {
        $post_types_selected[] = $post_type->name;
        $post_types_items[$post_type->display_label()] = $post_type->name;
      }

    }

    if (!MPC::is_create()) {
      $post_types_selected = self::option_value($options, "post_types");
    }
  
    $post_types_checkboxes = '';
        
    if (!is_array($post_types_selected)) {
      $post_types_selected = explode(",", $post_types_selected);
    }
  
    $id = $p."post-types-";
    
    foreach ($post_types as $post_type) {

      
      if (!$post_type->disabled && $post_type->show_ui && $post_type->still_registered()) {
        
        $value = $post_type->name;
        $label = $post_type->display_label();
      
        $id_suffix = WOOF::sanitize($value);
      
        $attr = array( "id" => $id."_".$id_suffix, "class" => "checkbox", "type" => "checkbox", "name" => "type_options[post_types][]", "value" => $value );
      
        if (in_array($value, $post_types_selected)) {
          $attr["checked"] = "checked";
        }
      
        $post_types_checkboxes .= WOOF_HTML::open("div", "class=fwi");
        $post_types_checkboxes .= WOOF_HTML::tag("input", $attr );
        $post_types_checkboxes .= WOOF_HTML::tag("label", array( "for" => $id."_".$id_suffix, "class" => "checkbox mp-icon-post-type mp-icon-post-type-".$value ), $label );
        $post_types_checkboxes .= WOOF_HTML::close("div");

      }
      
    }


    $basic = MPFT::options_select_basic( $p, $options );
    $exclude_current = MPFT::options_exclude_current( $p, $options, __('Excludes the current post being edited from the results', MASTERPRESS_DOMAIN) );
    $multi_layout = MPFT::options_select_multi_layout( $p, $options );
    $control_style = MPFT::options_select_control_style( $p, $options );

    $maxwidth = MPFT::options_maxwidth( $p, $options );
    $height = MPFT::options_height( $p, $options );
    $grouping = MPFT::options_select_grouping( $p, $options, __("Post Type", MASTERPRESS_DOMAIN) );
    $placeholder = MPFT::options_placeholder($p, $options);

    $results_input_length = MPFT::options_input_text( $p, $options, "results_input_length", __("Minimum Input Length", MASTERPRESS_DOMAIN), __("Enter the number of characters required before any results are displayed.<br />This is useful for large numbers of posts, where performance may become poor.", MASTERPRESS_DOMAIN));

    $orderby = MPFT::options_post_orderby( $p, $options);
    
    $post_count = MPFT::options_input_text( $p, $options, "post_count", __("Post Limit:", MASTERPRESS_DOMAIN), __("The latest <em>n</em> posts will be retrieved, where <em>n</em> is the number provided here.<br />Leave empty to retrieve all posts.", MASTERPRESS_DOMAIN));
    
    $results_row_style = MPFT::options_select_results_row_style( $p, $options );

    $taxonomy_query = MPFT::options_textarea( $p, $options, "taxonomy_query", __("Taxonomy Filter:", MASTERPRESS_DOMAIN) );
    
    
    $data_source_label = __("Query Options - <span>further specify the posts available for selection</span>", MASTERPRESS_DOMAIN); 
    $control_results_label = __("Results Display - <span>settings for the display of the available posts</span>", MASTERPRESS_DOMAIN); 
    $control_selections_label = __("Selection Display - <span>settings for the display of the selected posts</span>", MASTERPRESS_DOMAIN); 
    
    
    
    // build a post types grid
    
    $results_row_item_prop_label = __("Row Item Properties:", MASTERPRESS_DOMAIN);
    $results_row_item_prop_note = __("Defines the post properties used to derive the info shown in result rows.<br /><b>Note: </b>Excerpts and images will be truncated / resized automatically.", MASTERPRESS_DOMAIN);
    
    $row_style = self::option_value($options, "row_style", "icon_title");

    $grid  = WOOF_HTML::open("table", "class=grid mini not-selectable grid-row-item-prop&cellspacing=0");
      $grid .= WOOF_HTML::open("thead");
      
        $grid .= WOOF_HTML::tag("th", "class=post-type", WOOF_HTML::tag("i", "class=pins", "") . WOOF_HTML::tag("span", null, __("Post Type", MASTERPRESS_DOMAIN)));
        $grid .= WOOF_HTML::tag("th", "class=title", WOOF_HTML::tag("i", "class=title-bar", "") . WOOF_HTML::tag("span", null, __("Title", MASTERPRESS_DOMAIN)));
        $grid .= WOOF_HTML::tag("th", "class=".(($row_style == "icon_title" || $row_style == "image_title") ? "disabled " : "")."icon excerpt", WOOF_HTML::tag("i", "class=content-bar", "") . WOOF_HTML::tag("span", null, __("Excerpt", MASTERPRESS_DOMAIN)));
        $grid .= WOOF_HTML::tag("th", "class=".(($row_style == "icon_title" || $row_style == "icon_title_excerpt") ? "disabled " : "")."icon image", WOOF_HTML::tag("i", "class=image", "") . WOOF_HTML::tag("span", null, __("Image", MASTERPRESS_DOMAIN)));

      $grid .= WOOF_HTML::close("thead");

      $grid .= WOOF_HTML::open("tbody");
      
      $count = 1;
      
      
      foreach ($post_types as $post_type) {
        if (!$post_type->disabled && $post_type->show_ui) {
          
          $classes = array("post-type-".$post_type->name);
          
          if ($count == 1) {
            $classes[] = "first";
          }
          
          $attr = array("class" => implode(" ", $classes));
          
          if (!in_array($post_type->name, $post_types_selected)) {
            $attr["style"] = "display: none;";
          }

  
          $grid .= WOOF_HTML::open("tr", $attr);

          $count++;
            
            $span = WOOF_HTML::tag("span", array("class" => "mp-icon-post-type mp-icon-post-type-".$post_type->name ), $post_type->display_label());
            
            $grid .= WOOF_HTML::tag("td", "class=first post-type", $span);
            $grid .= WOOF_HTML::open("td", "class=title");
            
              $default = "title";
              $value = isset($options["result_row_prop"][$post_type->name]["title"]) ? $options["result_row_prop"][$post_type->name]["title"] : $default;
              
              if ($value == "") {
                $value = $default;
              }
              
              $grid .= WOOF_HTML::open("div");
              
              $input_attr = array(
                "type" => "text",
                "name" => "type_options[result_row_prop][".$post_type->name."][title]",
                "class" => "text",
                "value" => $value
              );

              $grid .= WOOF_HTML::tag("input", $input_attr);

              $grid .= WOOF_HTML::tag(
                "button", 
                array(
                  "type" => "button",
                  "class" => "ir",
                  "data-dialog" => "dialog-post-type-".$post_type->name,
                  "data-filter" => "text",
                  "title" => __("Select Field", MASTERPRESS_DOMAIN)
                ),
                "select"
              );
              
              $grid .= WOOF_HTML::close("div");
              
            $grid .= WOOF_HTML::close("td");
            $grid .= WOOF_HTML::open("td", "class=excerpt".(($row_style == "icon_title" || $row_style == "image_title") ? " disabled " : ""));

              $default = "excerpt";
              $value = isset($options["result_row_prop"][$post_type->name]["excerpt"]) ? $options["result_row_prop"][$post_type->name]["excerpt"] : $default;
              
              if ($value == "") {
                $value = $default;
              }

              $input_attr = array(
                "type" => "text",
                "name" => "type_options[result_row_prop][".$post_type->name."][excerpt]",
                "class" => "text",
                "value" => $value
              );

              $grid .= WOOF_HTML::open("div");

              $grid .= WOOF_HTML::tag("input", $input_attr);

              $grid .= WOOF_HTML::tag(
                "button", 
                array(
                  "type" => "button",
                  "class" => "ir",
                  "data-dialog" => "dialog-post-type-".$post_type->name,
                  "data-filter" => "text",
                  "title" => __("Select Field", MASTERPRESS_DOMAIN)
                ),
                "select"
              );
            
              $grid .= WOOF_HTML::close("div");

            $grid .= WOOF_HTML::close("td");
            $grid .= WOOF_HTML::open("td", "class=image".(($row_style == "icon_title" || $row_style == "icon_title_excerpt") ? " disabled" : ""));

              $default = "featured_image";
              $value = isset($options["result_row_prop"][$post_type->name]["image"]) ? $options["result_row_prop"][$post_type->name]["image"] : $default;
              
              if ($value == "") {
                $value = $default;
              }
              
              $input_attr = array(
                "type" => "text",
                "name" => "type_options[result_row_prop][".$post_type->name."][image]",
                "class" => "text",
                "value" => $value
              );
              
              $grid .= WOOF_HTML::open("div");

              $grid .= WOOF_HTML::tag("input", $input_attr);

              $grid .= WOOF_HTML::tag(
                "button", 
                array(
                  "type" => "button",
                  "class" => "ir",
                  "data-dialog" => "dialog-post-type-".$post_type->name,
                  "data-filter" => "image",
                  "title" => __("Select Field", MASTERPRESS_DOMAIN)
                ),
                "select"
              );
              
              $grid .= WOOF_HTML::close("div");

            
            $grid .= WOOF_HTML::close("td");

          $grid .= WOOF_HTML::close("tr");
          
        }
      }

      $grid .= WOOF_HTML::close("tbody");
    $grid .= WOOF_HTML::close("table");


    // build dialogs for selecting row properties in the grid
    
    $dialogs = "";
    
    foreach ($post_types as $post_type) {
      
      if (!$post_type->disabled && $post_type->show_ui) {
      
        $dialogs .= WOOF_HTML::open(
          "div", 
          array(
            "class" => "dialog dialog-fields",
            "id" => "dialog-post-type-".$post_type->name,
            "data-title" => __("Select a Field", MASTERPRESS_DOMAIN)
          )
        );
      
        $fs = $meow_provider->post_type_field_sets($post_type->name);

        $field_options = array();
        $field_options[""] = "";

        $field_options_attr = array("");

        $field_options[__("( Built-in Fields )", MASTERPRESS_DOMAIN)] = array(
          
          "options" => array(
            __("Title", MASTERPRESS_DOMAIN) => "title",
            __("Excerpt", MASTERPRESS_DOMAIN) => "excerpt",
            __("Feature Image", MASTERPRESS_DOMAIN) => "feature_image"
          ),
          "options_attr" => array(
            array("data-icon" => "mp-icon mp-icon-field-type-text-box", "class" => "text"),
            array("data-icon" => "mp-icon mp-icon-field-type-text-box-multiline", "class" => "text"),
            array("data-icon" => "mp-icon mp-icon-field-type-image", "class" => "image")
          )

        );
          
        foreach ($fs as $set) {
        
          $fo = array();
          $fo_attr = array();
          
          foreach ($set->fields() as $field) {

            if ($type_class = MPFT::type_class($field->type)) {
              $image = call_user_func( array($type_class, "supports_image") ) ? " image" : "";
              $text = call_user_func( array($type_class, "supports_text") ) ? " text" : "";

              $fo[$field->display_label()] = $set->name.".".$field->name;
              $fo_attr[] = $field_options_attr[] = array("class" => $image.$text, "data-icon" => "mp-icon mp-icon-field-type-".$field->type);
            } 

            $field_options[$set->display_label()] = array("options" => $fo, "options_attr" => $fo_attr);

          }

        } 
                
        $dialogs .= WOOF_HTML::select(array("name" => "add-field-column-field-sets", "class" => "with-icons select2-source", "data-placeholder" => __("-- Select a Field --", MASTERPRESS_DOMAIN)), $field_options, "", $field_options_attr);
        $dialogs .= WOOF_HTML::close("div");
      
      }
      
    }
    

    
$html = <<<HTML

    {$dialogs}
    
    <div class="pull-up">
    {$control_style}


    <div class="f f-post-types">
      <p class="label">{$post_types_label}</p>
      <div class="fw">

      <div id="{$p}post-types-wrap" class="clearfix">
      {$post_types_checkboxes}
      </div>

      <div id="{$p}post-types-controls" class="controls">
        <button type="button" class="button button-small select-all">Select All</button>
        <button type="button" class="button button-small select-none">Select None</button>
      </div>
      <!-- /.controls -->

      </div>
    </div>
    <!-- /.f -->
    
    {$placeholder}
    {$basic}
    {$maxwidth}
    </div>

    <div class="source-wrap divider">
    <h4><i class="database"></i>{$data_source_label}</h4>  
    {$exclude_current}
    {$orderby}
    {$post_count}
    {$taxonomy_query}
    </div>
    
    <div class="divider">
    <h4><i class="menu-gray"></i>{$control_results_label}</h4>  
    {$grouping}
    {$results_input_length}
    {$results_row_style}
    
    <div id="{$p}results-row-item-prop-f" class="results-row-item-prop-f f">
    <p class="label">{$results_row_item_prop_label}</p> 
    
    <div class="fw">
      {$grid}
      <p class="note">{$results_row_item_prop_note}</p> 
    </div>
    
    </div>
    <!-- /.f -->
    
    </div>
  
    <div id="{$p}control-selections-wrap" class="divider">
    <h4><i class="buttons"></i>{$control_selections_label}</h4>  
    {$multi_layout}
    </div>

  
  
HTML;

    return $html;

  }