This repository has been archived on 2026-10-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
aktiv-web/wp-content/plugins/google-calendar-events/includes/register-settings.php
T
2014-11-20 21:01:19 +01:00

195 lines
6.0 KiB
PHP

<?php
/**
* Register all settings needed for the Settings API.
*
* @package gce
* @subpackage Includes
* @author Phil Derksen <pderksen@gmail.com>, Nick Young <mycorpweb@gmail.com>
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Main function to register all of the plugin settings
*
* @since 2.0.0
*/
function gce_register_settings() {
$gce_settings = array(
/* General Settings */
'general' => array(
'api_key' => array(
'id' => 'api_key',
'name' => __( 'Google API Key', 'gce' ),
'desc' => __( 'If left blank all displayed Google calendars will use a public Google API key shared across all plugin users.', 'gce' ) . ' ' .
__( 'Currently the shared key is limited to 500,000 requests per day and 5 requests per second.', 'gce' ) . '<br/>' .
sprintf( __( 'To avoid these limits <a href="%s" target="_blank">click here for instructions on how to generate and use your own Google API key.</a>', 'gce' ),
gce_ga_campaign_url( 'http://wpdocs.philderksen.com/google-calendar-events/getting-started/api-key-settings/', 'gce_lite', 'settings_link', 'docs' ) ),
'size' => 'regular-text',
'type' => 'text'
),
'save_settings' => array(
'id' => 'save_settings',
'name' => __( 'Save Settings', 'gce' ),
'desc' => __( 'Save your settings when uninstalling this plugin. Useful when upgrading or re-installing.', 'gce' ),
'type' => 'checkbox'
)
)
);
/* If the options do not exist then create them for each section */
if ( false == get_option( 'gce_settings_general' ) ) {
add_option( 'gce_settings_general' );
}
/* Add the General Settings section */
add_settings_section(
'gce_settings_general',
__( 'General Settings', 'gce' ),
'__return_false',
'gce_settings_general'
);
foreach ( $gce_settings['general'] as $option ) {
add_settings_field(
'gce_settings_general[' . $option['id'] . ']',
$option['name'],
function_exists( 'gce_' . $option['type'] . '_callback' ) ? 'gce_' . $option['type'] . '_callback' : 'gce_missing_callback',
'gce_settings_general',
'gce_settings_general',
gce_get_settings_field_args( $option, 'general' )
);
}
/* Register all settings or we will get an error when trying to save */
register_setting( 'gce_settings_general', 'gce_settings_general', 'gce_settings_sanitize' );
}
add_action( 'admin_init', 'gce_register_settings' );
/*
* Return generic add_settings_field $args parameter array.
*
* @since 2.0.0
*
* @param string $option Single settings option key.
* @param string $section Section of settings apge.
* @return array $args parameter to use with add_settings_field call.
*/
function gce_get_settings_field_args( $option, $section ) {
$settings_args = array(
'id' => $option['id'],
'desc' => $option['desc'],
'name' => $option['name'],
'section' => $section,
'size' => isset( $option['size'] ) ? $option['size'] : null,
'options' => isset( $option['options'] ) ? $option['options'] : '',
'std' => isset( $option['std'] ) ? $option['std'] : ''
);
// Link label to input using 'label_for' argument if text, textarea, password, select, or variations of.
// Just add to existing settings args array if needed.
if ( in_array( $option['type'], array( 'text', 'select', 'textarea', 'password', 'number' ) ) ) {
$settings_args = array_merge( $settings_args, array( 'label_for' => 'gce_settings_' . $section . '[' . $option['id'] . ']' ) );
}
return $settings_args;
}
/*
* Single checkbox callback function
*
* @since 2.0.0
*
*/
function gce_checkbox_callback( $args ) {
global $gce_options;
$checked = isset( $gce_options[$args['id']] ) ? checked( 1, $gce_options[$args['id']], false ) : '';
$html = "\n" . '<input type="checkbox" id="gce_settings_' . $args['section'] . '[' . $args['id'] . ']" name="gce_settings_' . $args['section'] . '[' . $args['id'] . ']" value="1" ' . $checked . '/>' . "\n";
// Render description text directly to the right in a label if it exists.
if ( ! empty( $args['desc'] ) )
$html .= '<label for="gce_settings_' . $args['section'] . '[' . $args['id'] . ']"> ' . $args['desc'] . '</label>' . "\n";
echo $html;
}
/**
* Textbox callback function
* Valid built-in size CSS class values:
* small-text, regular-text, large-text
*
* @since 2.1.0
*
*/
function gce_text_callback( $args ) {
global $gce_options;
if ( isset( $gce_options[ $args['id'] ] ) )
$value = $gce_options[ $args['id'] ];
else
$value = isset( $args['std'] ) ? $args['std'] : '';
$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : '';
$html = "\n" . '<input type="text" class="' . $size . '" id="gce_settings_' . $args['section'] . '[' . $args['id'] . ']" name="gce_settings_' . $args['section'] . '[' . $args['id'] . ']" value="' . esc_attr( $value ) . '"/>' . "\n";
// Render and style description text underneath if it exists.
if ( ! empty( $args['desc'] ) ) {
$html .= '<p class="description">' . $args['desc'] . '</p>' . "\n";
}
echo $html;
}
/*
* Function we can use to sanitize the input data and return it when saving options
*
* @since 2.0.0
*
*/
function gce_settings_sanitize( $input ) {
//add_settings_error( 'gce-notices', '', '', '' );
return $input;
}
/*
* Default callback function if correct one does not exist
*
* @since 2.0.0
*
*/
function gce_missing_callback( $args ) {
printf( __( 'The callback function used for the <strong>%s</strong> setting is missing.', 'gce' ), $args['id'] );
}
/*
* Function used to return an array of all of the plugin settings
*
* @since 2.0.0
*
*/
function gce_get_settings() {
// Set default settings
// If this is the first time running we need to set the defaults
if ( ! get_option( 'gce_upgrade_has_run' ) ) {
$general = get_option( 'gce_settings_general' );
$general['save_settings'] = 1;
update_option( 'gce_settings_general', $general );
}
$general_settings = is_array( get_option( 'gce_settings_general' ) ) ? get_option( 'gce_settings_general' ) : array();
return $general_settings;
}