149 lines
4.9 KiB
PHP
149 lines
4.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Renderer of settings page select option.
|
|
*
|
|
* @author Time.ly Network, Inc.
|
|
* @instantiator new
|
|
* @since 2.0
|
|
* @package Ai1EC
|
|
* @subpackage Ai1EC.Html
|
|
*/
|
|
class Ai1ec_Html_Setting_Select extends Ai1ec_Html_Element_Settings {
|
|
|
|
/* (non-PHPdoc)
|
|
* @see Ai1ec_Html_Element_Settings::render()
|
|
*/
|
|
public function render( $output = '', $wrap = true, $hidden = false ) {
|
|
$options = $this->_args['renderer']['options'];
|
|
if ( ! is_array( $options ) ) {
|
|
$callback = explode( ':', $options );
|
|
if ( ! isset( $callback[1] ) ) {
|
|
$options = $this->{$options}();
|
|
} else {
|
|
$value = $this->_args['value'];
|
|
if( false === is_array( $this->_args['value'] ) ){
|
|
$value = array( $this->_args['value'] );
|
|
}
|
|
try {
|
|
$options = $this->_registry->dispatch(
|
|
$callback[0],
|
|
$callback[1]
|
|
);
|
|
} catch (Ai1ec_Bootstrap_Exception $exc) {
|
|
return '';
|
|
}
|
|
}
|
|
}
|
|
$options = apply_filters( 'ai1ec_settings_select_options' , $options, $this->_args['id'] );
|
|
$fieldsets = array();
|
|
foreach ( $options as $key => &$option ) {
|
|
// if the key is a string, it's an optgroup
|
|
if ( is_string( $key ) ) {
|
|
foreach ( $option as &$opt ) {
|
|
$opt = $this->_set_selected_value( $opt );
|
|
}
|
|
} else {
|
|
$option = $this->_set_selected_value( $option );
|
|
if ( isset( $option['settings'] ) ) {
|
|
$fieldsets[] = $this->_render_fieldset(
|
|
$option['settings'],
|
|
$option['value'],
|
|
$this->_args['id'],
|
|
isset( $option['args']['selected'] )
|
|
);
|
|
}
|
|
}
|
|
}
|
|
$select_args = array();
|
|
$args = array(
|
|
'id' => $this->_args['id'],
|
|
'label' => $this->_args['renderer']['label'],
|
|
'attributes' => $select_args,
|
|
'options' => $options,
|
|
'fieldsets' => $fieldsets,
|
|
);
|
|
$loader = $this->_registry->get( 'theme.loader' );
|
|
$file = $loader->get_file( 'setting/select.twig', $args, true );
|
|
return parent::render( $file->get_content(), $wrap, $hidden );
|
|
}
|
|
|
|
/**
|
|
* Toggle `selected` attribute according to current selection.
|
|
*
|
|
* @param array $option Option being checked.
|
|
*
|
|
* @return array Optionally modified option entry.
|
|
*/
|
|
protected function _set_selected_value( array $option ) {
|
|
if ( $option['value'] === $this->_args['value'] ) {
|
|
$option['args'] = array(
|
|
'selected' => 'selected',
|
|
);
|
|
}
|
|
return $option;
|
|
}
|
|
|
|
/**
|
|
* Gets the options for the "Starting day of week" select.
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function get_weekdays() {
|
|
$locale = $this->_registry->get( 'p28n.wpml' );
|
|
$options = array();
|
|
for ( $day_index = 0; $day_index <= 6; $day_index++ ) {
|
|
$option = array(
|
|
'text' => $locale->get_weekday( $day_index ),
|
|
'value' => $day_index,
|
|
);
|
|
$options[] = $option;
|
|
}
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Renders fieldset with options for selected item.
|
|
*
|
|
* @param array $settings Settings structure.
|
|
* @param string $parent_id Option value from parent Html select element.
|
|
* @param string $select_id Html Select element id.
|
|
* @param bool $visible Whether fieldset is visible or not.
|
|
*
|
|
* @return string Html content.
|
|
*
|
|
* @throws Ai1ec_Bootstrap_Exception
|
|
*/
|
|
protected function _render_fieldset(
|
|
array $settings,
|
|
$parent_id,
|
|
$select_id,
|
|
$visible = false
|
|
) {
|
|
$setting_renderer = $this->_registry->get(
|
|
'html.element.setting-renderer'
|
|
);
|
|
$global_settings = $this->_registry->get(
|
|
'model.settings'
|
|
);
|
|
$content = '';
|
|
foreach ( $settings as $id => $setting ) {
|
|
$setting['id'] = $id;
|
|
// fetch value from real setting as this one is some kind of
|
|
// mockup.
|
|
$setting['value'] = $global_settings->get( $id );
|
|
$content .= $setting_renderer->render( $setting );
|
|
}
|
|
$args = array(
|
|
'parent_id' => $parent_id,
|
|
'contents' => $content,
|
|
'select_id' => $select_id,
|
|
'visible' => $visible,
|
|
);
|
|
$loader = $this->_registry->get( 'theme.loader' );
|
|
$file = $loader->get_file( 'setting/select-fieldsets.twig', $args, true );
|
|
return parent::render( $file->get_content(), false );
|
|
}
|
|
|
|
}
|