id = $id; $this->title = $title; $this->capability = $capability; // Actions. add_action( 'admin_menu', array( &$this, 'add_page' ) ); add_action( 'admin_init', array( &$this, 'create_settings' ) ); add_action( 'admin_enqueue_scripts', array( &$this, 'scripts' ) ); } /** * Add Settings Theme page. */ public function add_page() { add_theme_page( $this->title, $this->title, $this->capability, $this->id, array( &$this, 'settings_page' ) ); } /** * Load options scripts. */ function scripts() { // Checks if is the settings page. if ( isset( $_GET['page'] ) && $this->id == $_GET['page'] ) { // Color Picker. wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'wp-color-picker' ); // Media Upload. wp_enqueue_media(); // jQuery UI. wp_enqueue_script( 'jquery-ui-sortable' ); // Theme Options. wp_enqueue_style( 'odin-admin', get_template_directory_uri() . '/core/assets/css/admin.css', array(), null, 'all' ); wp_enqueue_script( 'odin-admin', get_template_directory_uri() . '/core/assets/js/admin.js', array( 'jquery' ), null, true ); // Localize strings. wp_localize_script( 'odin-admin', 'odinAdminParams', array( 'galleryTitle' => __( 'Add images in gallery', 'avalon-b' ), 'galleryButton' => __( 'Add in gallery', 'avalon-b' ), 'galleryRemove' => __( 'Remove image', 'avalon-b' ), 'uploadTitle' => __( 'Choose a file', 'avalon-b' ), 'uploadButton' => __( 'Add file', 'avalon-b' ), ) ); } } /** * Set settings tabs. * * @param array $tabs Settings tabs. */ public function set_tabs( $tabs ) { $this->tabs = $tabs; } /** * Set settings fields * * @param array $fields Settings fields. */ public function set_fields( $fields ) { $this->fields = $fields; } /** * Get current tab. * * @return string Current tab ID. */ protected function get_current_tab() { if ( isset( $_GET['tab'] ) ) { $current_tab = $_GET['tab']; } else { $current_tab = $this->tabs[0]['id']; } return $current_tab; } /** * Get the menu current URL. * * @return string Current URL. */ private function get_current_url() { $url = 'http'; if ( isset( $_SERVER['HTTPS'] ) && 'on' == $_SERVER['HTTPS'] ) { $url .= 's'; } $url .= '://'; if ( '80' != $_SERVER['SERVER_PORT'] ) { $url .= $_SERVER['SERVER_NAME'] . ' : ' . $_SERVER['SERVER_PORT'] . $_SERVER['PHP_SELF']; } else { $url .= $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF']; } return esc_url( $url ); } /** * Get tab navigation. * * @param string $current_tab Current tab ID. * * @return string Tab Navigation. */ protected function get_navigation( $current_tab ) { $html = '
%s
', $args['description'] ); } echo $html; } /** * Text field callback. * * @param array $args Arguments from the option. * * @return string Text field HTML. */ public function callback_text( $args ) { // Sets regular text class. $args['attributes']['class'] = 'regular-text'; $this->callback_input( $args ); } /** * Textarea field callback. * * @param array $args Arguments from the option. * * @return string Textarea field HTML. */ public function callback_textarea( $args ) { $tab = $args['tab']; $id = $args['id']; $attrs = $args['attributes']; if ( ! isset( $attrs['cols'] ) ) { $attrs['cols'] = '60'; } if ( ! isset( $attrs['rows'] ) ) { $attrs['rows'] = '5'; } // Sets current option. $current = esc_textarea( $this->get_option( $tab, $id, $args['default'] ) ); $html = sprintf( '', $id, $tab, $current, $this->build_field_attributes( $attrs ) ); // Displays the description. if ( $args['description'] ) { $html .= sprintf( '%s
', $args['description'] ); } echo $html; } /** * Editor field callback. * * @param array $args Arguments from the option. * * @return string Editor field HTML. */ public function callback_editor( $args ) { $tab = $args['tab']; $id = $args['id']; $options = $args['options']; // Sets current option. $current = wpautop( $this->get_option( $tab, $id, $args['default'] ) ); // Set default options. if ( empty( $options ) ) { $options = array( 'textarea_rows' => 10 ); } $options[ 'textarea_name' ] = $tab . '[' . $id . ']'; echo '%s
', $args['description'] ); } } /** * Checkbox field callback. * * @param array $args Arguments from the option. * * @return string Checkbox field HTML. */ public function callback_checkbox( $args ) { $tab = $args['tab']; $id = $args['id']; $attrs = $args['attributes']; // Sets current option. $current = $this->get_option( $tab, $id, $args['default'] ); $html = sprintf( '', $id, $tab, checked( 1, $current, false ), $this->build_field_attributes( $attrs ) ); // Displays the description. if ( $args['description'] ) { $html .= sprintf( '', $id, $args['description'] ); } echo $html; } /** * Radio field callback. * * @param array $args Arguments from the option. * * @return string Radio field HTML. */ public function callback_radio( $args ) { $tab = $args['tab']; $id = $args['id']; $attrs = $args['attributes']; // Sets current option. $current = $this->get_option( $tab, $id, $args['default'] ); $html = ''; foreach( $args['options'] as $key => $label ) { $item_id = $id . '_' . $key; $key = sanitize_title( $key ); $html .= sprintf( '', $id, $tab, $key, checked( $current, $key, false ), $this->build_field_attributes( $attrs ) ); $html .= sprintf( '%s
', $args['description'] ); } echo $html; } /** * Select field callback. * * @param array $args Arguments from the option. * * @return string Select field HTML. */ public function callback_select( $args ) { $tab = $args['tab']; $id = $args['id']; $attrs = $args['attributes']; // Sets current option. $current = $this->get_option( $tab, $id, $args['default'] ); // If multiple add a array in the option. $multiple = ( in_array( 'multiple', $attrs ) ) ? '[]' : ''; $html = sprintf( ''; // Displays the description. if ( $args['description'] ) { $html .= sprintf( '%s
', $args['description'] ); } echo $html; } /** * Color field callback. * * @param array $args Arguments from the option. * * @return string Color field HTML. */ public function callback_color( $args ) { // Sets color class. $args['attributes']['class'] = 'odin-color-field'; $this->callback_input( $args ); } /** * Upload field callback. * * @param array $args Arguments from the option. * * @return string Upload field HTML. */ public function callback_upload( $args ) { $tab = $args['tab']; $id = $args['id']; $attrs = $args['attributes']; // Sets current option. $current = esc_url( $this->get_option( $tab, $id, $args['default'] ) ); $html = sprintf( ' ', $id, $tab, $current, __( 'Select file', 'avalon-b' ), $this->build_field_attributes( $attrs ) ); // Displays the description. if ( $args['description'] ) { $html .= sprintf( '%s
', $args['description'] ); } echo $html; } /** * Image field callback. * * @param array $args Arguments from the option. * * @return string Image field HTML. */ public function callback_image( $args ) { $tab = $args['tab']; $id = $args['id']; // Sets current option. $current = $this->get_option( $tab, $id, $args['default'] ); // Gets placeholder image. $image = get_template_directory_uri() . '/core/assets/images/placeholder.png'; $html = '%s
', $args['description'] ); } echo $html; } /** * Image Plupload field callback. * * @param array $args Arguments from the option. * * @return string Image Plupload field HTML. */ public function callback_image_plupload( $args ) { $tab = $args['tab']; $id = $args['id']; // Sets current option. $current = $this->get_option( $tab, $id, $args['default'] ); $html = '%s
', $args['description'] ); } echo $html; } /** * HTML callback. * * @param array $args Arguments from the option. * * @return string HTML. */ public function callback_html( $args ) { echo $args['description']; } /** * Sanitization fields callback. * * @param string $input The unsanitized collection of options. * * @return string The collection of sanitized values. */ public function validate_input( $input ) { // Create our array for storing the validated options. $output = array(); // Loop through each of the incoming options. foreach ( $input as $key => $value ) { // Check to see if the current option has a value. If so, process it. if ( isset( $input[ $key ] ) ) { $output[ $key ] = apply_filters( 'odin_theme_options_validate_' . $this->id, $value, $key ); } } return $output; } }