public function replyToLoadTab($oAdminPage)
{
add_action('do_' . $this->sPageSlug . '_' . $this->sTabSlug, array($this, 'replyToDoTab'));
// validation_{page slug}_{tab slug}
add_filter('validation_' . $this->sClassName . '_' . $this->sSectionID, array($this, 'validate'), 10, 4);
// Section
$oAdminPage->addSettingSections($this->sPageSlug, array('section_id' => $this->sSectionID, 'tab_slug' => $this->sTabSlug, 'title' => __('Select2', 'admin-page-framework-loader'), 'description' => array(__('This field type lets the user select predefined items with auto-complete.', 'admin-page-framework-loader') . ' ' . sprintf(__('For the specifications of the <code>options</code> argument, see <a href="%1$s" target="blank">here</a>.', 'admin-page-framework-loader'), 'https://select2.github.io/options.html'))));
// Fields
$oAdminPage->addSettingFields($this->sSectionID, array('field_id' => 'default', 'type' => 'select2', 'title' => __('Select2', 'admin-page-framework-loader'), 'label' => array(0 => __('Red', 'admin-page-framework-loader'), 1 => __('Blue', 'admin-page-framework-loader'), 2 => __('Yellow', 'admin-page-framework-loader'), 3 => __('Orange', 'admin-page-framework-loader')), 'default' => 2, 'description' => array("<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
array(
'type' => 'select2',
'label' => array(
0 => 'Red',
1 => 'Blue',
2 => 'Yellow',
3 => 'Orange',
),
)
EOD
) . "</pre>")), array('field_id' => 'multiple', 'type' => 'select2', 'title' => __('Multiple', 'admin-page-framework-loader'), 'is_multiple' => true, 'default' => array(3, 4), 'label' => array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'November', 'October', 'December'), 'description' => array("<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
array(
'type' => 'select2',
'is_multiple' => true,
'default' => array( 3, 4 ),
'label' => array( 'January', 'February', 'March',
'April', 'May', 'June', 'July',
'August', 'September', 'November',
'October', 'December'
),
)
EOD
) . "</pre>")), array('field_id' => 'group', 'type' => 'select2', 'title' => __('Group', 'admin-page-framework-loader'), 'default' => 'b', 'label' => array('alphabets' => array('a' => 'a', 'b' => 'b', 'c' => 'c'), 'numbers' => array(0 => '0', 1 => '1', 2 => '2')), 'description' => array("<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
array(
'type' => 'select2',
'default' => 'b',
'label' => array(
'alphabets' => array(
'a' => 'a',
'b' => 'b',
'c' => 'c',
),
'numbers' => array(
0 => '0',
1 => '1',
2 => '2',
),
),
)
EOD
) . "</pre>")), array('field_id' => 'placeholder', 'type' => 'select2', 'title' => __('Placeholder', 'admin-page-framework-loader'), 'label' => array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'November', 'October', 'December'), 'options' => array('placeholder' => __('Select a mounth', 'admin-page-framework'), 'width' => '50%', 'allowClear' => true), 'description' => array("<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
array(
'type' => 'select2',
'label' => array( 'January', 'February', 'March',
'April', 'May', 'June', 'July',
'August', 'September', 'November',
'October', 'December'
),
'options' => array(
'placeholder' => 'Select a mounth',
'width' => '50%',
'allowClear' => true,
),
)
EOD
) . "</pre>")), array('field_id' => 'ajax', 'type' => 'select2', 'title' => __('Ajax', 'admin-page-framework-loader'), 'options' => array('minimumInputLength' => 2, 'width' => '100%'), 'callback' => array('search' => __CLASS__ . '::getPosts'), 'description' => array(__('Post titles will be listed.', 'admin-page-framework-loader'), __('To use a data source with AJAX, set a callback function to the <code>search_callback</code> argument.', 'admin-page-framework-loader') . ' ' . __('From the callback function, return an array of lists.', 'admin-page-framework-loader'), "<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
array(
'type' => 'select2',
'options' => array(
'minimumInputLength' => 2,
'width' => '100%',
),
'callback' => array(
// If the `search` callback is set, the field will be AJAX based.
'search' => __CLASS__ . '::getPosts',
),
)
EOD
) . "</pre>", "<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
function getPosts( \$aQueries, \$aFieldset ) {
\$_aArgs = array(
'post_type' => 'post',
'paged' => \$aQueries[ 'page' ],
's' => \$aQueries[ 'q' ],
'posts_per_page' => 30,
'nopaging' => false,
);
\$_oResults = new WP_Query( \$_aArgs );
\$_aPostTitles = array();
foreach( \$_oResults->posts as \$_iIndex => \$_oPost ) {
\$_aPostTitles[] = array( // must be numeric
'id' => \$_oPost->ID,
'text' => \$_oPost->post_title,
);
}
return array(
'results' => \$_aPostTitles,
'pagination' => array(
'more' => intval( \$_oResults->max_num_pages ) !== intval( \$_oResults->get( 'paged' ) ),
),
);
}
EOD
) . "</pre>")), array('field_id' => 'ajax_multiple', 'type' => 'select2', 'title' => __('Ajax Multiple', 'admin-page-framework-loader'), 'is_multiple' => true, 'options' => array('minimumInputLength' => 2, 'width' => '100%', 'selectOnClose' => true, 'tags' => true, 'tokenSeparators' => array(',')), 'callback' => array('search' => __CLASS__ . '::getTerms', 'new_tag' => __CLASS__ . '::createTerm'), 'description' => array(__('Enter post tags, separated by commas.', 'admin-page-framework-loader'), "<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
array(
'type' => 'select2',
'is_multiple' => true,
'options' => array(
'minimumInputLength' => 2,
'width' => '100%',
'selectOnClose' => true,
'tags' => true, // user can create new tags
'tokenSeparators' => array( ',', ),
),
'callback' => array(
'search' => __CLASS__ . '::getTerms', // Ajax feature will be enabled
'new_tag' => __CLASS__ . '::createTerm', // `options`->`tags` will be enabled
),
)
EOD
) . "</pre>", "<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
function getTerms( \$aQueries, \$aFieldset ) {
\$_aArguments = array(
'taxonomy' => 'post_tag',
'hide_empty' => false,
'name__like' => \$aQueries[ 'q' ],
);
\$_aTerms = get_terms( \$_aArguments );
if ( is_wp_error( \$_aTerms ) ) {
return array(
'results' => array(),
);
}
\$_aResults = array();
foreach( \$_aTerms as \$_iIndex => \$_oTerm ) {
\$_aResults[] = array( // must be numeric
'id' => \$_oTerm->term_id,
'text' => \$_oTerm->name,
);
}
return array(
'results' => \$_aResults,
);
}
EOD
) . "</pre>", "<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
function createTerm( \$aQueries, \$aFieldset ) {
\$_sTermName = \$aQueries[ 'tag' ];
\$_oTerm = get_term_by( 'name', \$_sTermName, 'post_tag' );
\$_bTermExists = is_object( \$_oTerm ) && isset( \$_oTerm->term_id );
if ( \$_bTermExists ) {
\$_iTermID = \$_oTerm->term_id;
return array(
'id' => \$_iTermID,
'text' => \$_sTermName,
);
}
\$_aoResult = wp_insert_term( \$_sTermName, 'post_tag' );
if ( is_wp_error( \$_aoResult )) {
return array(
'error' => \$_aoResult->get_error_message(),
);
}
\$_aResults = \$_aoResult; // e.g. array('term_id'=>12,'term_taxonomy_id'=>34))
\$_oTerm = get_term( \$_aResults[ 'term_id' ], 'post_tag' );
return array(
'id' => \$_oTerm->term_id,
'text' => \$_oTerm->name,
);
}
EOD
) . "</pre>")), array('field_id' => 'repeatable_and_sortable', 'type' => 'select2', 'title' => __('Repeatable & Sortable', 'admin-page-framework-loader'), 'label' => array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'November', 'October', 'December'), 'repeatable' => true, 'sortable' => true, 'options' => array('width' => '400px'), 'description' => array("<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
array(
'type' => 'select2',
'label' => array( 'January', 'February', 'March',
'April', 'May', 'June', 'July',
'August', 'September', 'November',
'October', 'December'
),
'repeatable' => true,
'sortable' => true,
'options' => array(
'width' => '400px',
),
)
EOD
) . "</pre>")), array('field_id' => 'ajax_repeatable_sortable', 'type' => 'select2', 'title' => __('Ajax Repeatable and Sortable', 'admin-page-framework-loader'), 'repeatable' => true, 'sortable' => true, 'options' => array('width' => '100%'), 'callback' => array('search' => __CLASS__ . '::getPosts'), 'description' => array("<pre>" . $oAdminPage->oWPRMParser->getSyntaxHighlightedPHPCode(<<<EOD
array(
'type' => 'select2',
'repeatable' => true,
'sortable' => true,
'options' => array(
'width' => '100%',
),
'callback' => array(
'search' => __CLASS__ . '::getPosts',
),
)
EOD
) . "</pre>")), array());
}