Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

511 lines (471 sloc) 14.789 kb
<?php
// This file is part of the Carrington Core Platform for WordPress
// http://crowdfavorite.com/wordpress/carrington-core/
//
// Copyright (c) 2008-2011 Crowd Favorite, Ltd. All rights reserved.
// http://crowdfavorite.com
//
// Released under the GPL license
// http://www.opensource.org/licenses/gpl-license.php
//
// **********************************************************************
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// **********************************************************************
if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) { die(); }
// - add admin page for config settings
function cfct_option_css() {
}
/**
* Add a menu option under the admin themes menu
*
**/
function cfct_admin_menu() {
add_theme_page(
apply_filters('cfct_admin_settings_title', __('Carrington Theme Settings', 'carrington')),
apply_filters('cfct_admin_settings_menu', __('Theme Settings', 'carrington')),
'edit_theme_options',
'carrington-settings',
'cfct_settings_form'
);
}
add_action('admin_menu', 'cfct_admin_menu');
/**
* Add a menu option under the admin admin bar
*
**/
function cfct_admin_bar() {
global $wp_admin_bar;
if (current_user_can('edit_theme_options')) {
$wp_admin_bar->add_menu(array(
'id' => 'theme-settings',
'title' => apply_filters('cfct_admin_settings_menu', __('Theme Settings', 'carrington')),
'href' => admin_url('themes.php?page=carrington-settings'),
'parent' => 'appearance'
));
}
}
add_action('wp_before_admin_bar_render', 'cfct_admin_bar');
/**
* Deprecated in favor of WP Core Settings API
**/
function cfct_admin_request_handler() {
_deprecated_function(__FUNCTION__, '3.2');
}
/**
* Deprecated in favor of WP Core Settings API
**/
function cfct_update_settings() {
_deprecated_function(__FUNCTION__, '3.2');
}
/**
* Register Theme Settings screen options using WP Settings API
*/
function cfct_register_options() {
global $cfct_hidden_fields;
$yn_options = array(
'yes' => __('Yes', 'carrington'),
'no' => __('No', 'carrington')
);
$cfct_options = array(
'cfct' => array(
'label' => '',
//This is a callback, use cfct_options_blank to display nothing
'description' => 'cfct_options_blank',
'fields' => array(
'about' => array(
'type' => 'textarea',
'label' => __('About text (shown in sidebar)', 'carrington'),
'cols' => 60,
'rows' => 5,
'name' => 'about_text',
),
'header' => array(
'type' => 'textarea',
'label' => __('Header code (analytics, etc.)', 'carrington'),
'name' => 'wp_head',
),
'footer' => array(
'type' => 'textarea',
'label' => __('Footer code (analytics, etc.)', 'carrington'),
'name' => 'wp_footer',
),
'copyright' => array(
'type' => 'text',
'label' => __('Copyright / legal footer text', 'carrington'),
'name' => 'copyright',
'help' => '<br /><span class="cfct-help">'.__('(add %Y to output the current year)', 'carrington').'</span>',
'class' => 'cfct-text-long',
),
'login' => array(
'type' => 'radio',
'label' => __('Show log in/out links in footer', 'carrington'),
'name' => 'login_link_enabled',
'options' => $yn_options,
),
'credit' => array(
'type' => 'radio',
'label' => __('Give credit in footer', 'carrington'),
'name' => 'credit',
'options' => $yn_options,
),
/**
'radio' => array(
'type' => 'radio',
'label' => __('Radio Buttons', 'carrington'),
'name' => 'radio_test',
'options' => array(
'value_one' => 'Radio Bar',
'value_two' => 'Radio Bar 2',
),
),
'checkbox' => array(
'type' => 'checkbox',
'label' => __('Checkboxes', 'carrington'),
'name' => 'checkbox_test',
'options' => array(
'value_one' => 'Check Bar',
'value_two' => 'Check Bar 2',
),
),
*/
),
),
);
$cfct_options = apply_filters('cfct_options', $cfct_options);
foreach ($cfct_options as $section_name => $section) {
if (empty($section['description'])) {
$section['description'] = 'cfct_options_blank';
}
add_settings_section($section_name, $section['label'], $section['description'], 'cfct');
foreach ($section['fields'] as $key => $option) {
// Prefix the option name
$option['name'] = cfct_option_name($option['name']);
// Support for serialized options
// First we want to match on the name of the option. (everything up to the first []). Only matchs on alpha-numeric, dashes and underscores
if (preg_match('/^([a-zA-Z0-9-_]+)\[[a-zA-Z0-9-_]+\]/', $option['name'], $basename_match)) {
$basename = $basename_match[1];
register_setting('cfct', $basename, 'cfct_sanitize_options');
$serialize_option = cfct_get_option($basename);
// match on any subsequent [] with at least one character to determine the value of the option. Only matchs on alpha-numeric, dashes and underscores.
if (preg_match_all('/\[([a-zA-Z0-9-_]+)\]/', $option['name'], $key_matches)) {
$value = $serialize_option;
foreach ($key_matches[1] as $key_match) {
if (is_array($value) && array_key_exists($key_match, $value)) {
$value = $value[$key_match];
}
}
$option['value'] = $value;
}
}
else {
register_setting('cfct', $option['name'], 'cfct_sanitize_options');
$option['value'] = cfct_get_option($option['name']);
}
$option['label_for'] = $section_name.'_'.$key;
if ($option['type'] != 'hidden') {
add_settings_field($key, $option['label'], 'cfct_options_input', 'cfct', $section_name, $option);
}
else {
$cfct_hidden_fields[] = $option;
}
}
}
}
add_action('admin_init', 'cfct_register_options', 10);
/**
* Display hidden fields registered in `cfct_register_options()`. WP Forces padding when using `do_settings_sections`, so it cannot be truly hidden using that method.
*/
function cfct_hidden_fields() {
global $cfct_hidden_fields;
if (is_array($cfct_hidden_fields)) {
foreach ($cfct_hidden_fields as $field_options) {
echo cfct_options_input($field_options);
}
}
}
add_action('cfct_settings_form', 'cfct_hidden_fields', 10);
/**
* Empty callback, callback required by WP core function add_settings_section
*/
function cfct_options_blank() {
}
/**
* Prints an input field based on arguments passed.
* @param array $args Array of arguments used to generate the markup.
* 'type' => Type of input
* 'value' => Value of input
* 'name' => Name of input sent in post
* 'label_for' => ID attached to the input. Also used when generating the label in `add_settings_field`
* 'class' => CSS classes for the input
* 'cols' => Textarea specific
* 'rows' => Textarea specific
* 'options' => Radio button, Checkbox, Select specific. Used to define options
* 'help' => Help markup for the option.
* @return void
*/
function cfct_options_input($args) {
$type = $args['type'];
$value = $args['value'];
$name = $args['name'];
$id = empty($args['label_for']) ? $args['name'] : $args['label_for'];
$class = empty($args['class']) ? '' : ' class="'.esc_attr($args['class']).'"';
$html = '';
switch ($type) {
case 'text':
$html .= '<input id="'.esc_attr($id).'" name="'.esc_attr($name).'" type="text" value="'.esc_attr($value).'"'.$class.' />';
break;
case 'password':
$html .= '<input id="'.esc_attr($id).'" name="'.esc_attr($name).'" type="password" value="'.esc_attr($value).'"'.$class.' />';
break;
case 'textarea':
empty($args['cols']) ? $cols = 60 : $cols = (int) $args['cols'];
empty($args['rows']) ? $rows = 5 : $rows = (int) $args['rows'];
$html .= '<textarea id="'.esc_attr($id).'" name="'.esc_attr($name).'" cols="'.$cols.'" rows="'.$rows.'"'.$class.'>'.esc_textarea($value).'</textarea>';
break;
case 'select':
$html .= '<select id="'.esc_attr($id).'" name="'.esc_attr($name).'"'.$class.'>';
$options = $args['options'];
foreach ($options as $opt_value => $opt_label) {
$html .= '<option value="'.esc_attr($opt_value).'"'.selected($opt_value, $value, false).'>'.esc_html($opt_label).'</option>';
}
$html .= '</select>';
break;
case 'radio':
$options = $args['options'];
if (is_array($options)) {
$html .= '<ul>';
foreach ($options as $opt_value => $opt_label) {
$html .= '
<li>
<label for="'.esc_attr($name.'-'.$opt_value).'">
<input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($opt_value).'" id="'.esc_attr($name.'-'.$opt_value).'"'.checked($opt_value, $value, false).' />
'.esc_html($opt_label).'
</label>
</li>';
}
$html .= '</ul>';
}
break;
case 'checkbox':
$options = $args['options'];
if (is_array($options)) {
$html .= '<ul>';
foreach ($options as $opt_value => $opt_label) {
$html .= '
<li>
<label for="'.esc_attr($name.'-'.$opt_value).'">
<input type="checkbox" name="'.esc_attr($name.'['.$opt_value.']').'" value="'.esc_attr($opt_value).'" id="'.esc_attr($name.'-'.$opt_value).'"'.checked($opt_value, $value[$opt['id']], false).' />
'.esc_html($opt_label).'
</label>
</li>';
}
$html .= '</ul>';
}
break;
case 'hidden':
$html .= '<input id="'.esc_attr($id).'" type="hidden" name="'.esc_attr($name).'" value="'.esc_attr($value).'" class="'.esc_attr($class).'" />';
break;
default:
$html .= apply_filters('cfct_option_'.$type, $html, $args);
break;
}
if (!empty($args['help'])) {
$html .= $args['help'];
}
print($html);
}
/**
* Sanitizes options
* @todo Better handling coming in WP 3.3, targetable option names. For now, add a filter to 'sanitize_option_{$option_name}' for additional processing
*/
function cfct_sanitize_options($new_value) {
return stripslashes_deep($new_value);
}
/**
* Display a settings for for Carrington Framework
*
**/
function cfct_settings_form() {
settings_errors();
print('
<div class="wrap">
'.get_screen_icon().'<h2>'.apply_filters('cfct_admin_settings_form_title', __('Carrington Theme Settings', 'carrington')).'</h2>
<form action="'.admin_url('options.php').'" method="post">
');
do_action('cfct_settings_form_top');
do_settings_sections('cfct');
do_action('cfct_settings_form_bottom');
do_action('cfct_settings_form');
settings_fields('cfct');
print('
<p class="submit" style="padding-left: 230px;">
<input type="submit" name="submit_button" class="button-primary" value="'.__('Save', 'carrington').'" />
</p>
</form>
</div>
');
do_action('cfct_settings_form_after');
}
/**
* Deprecated in favor of WP Core Settings API
**/
function cfct_options_misc() {
_deprecated_function(__FUNCTION__, '3.2');
}
/**
* Display a form for image header customization
*
* @return string Markup displaying the form
*
**/
function cfct_header_image_form() {
global $wpdb;
$images = $wpdb->get_results("
SELECT * FROM $wpdb->posts
WHERE post_type = 'attachment'
AND post_mime_type LIKE 'image%'
AND post_parent = 0
ORDER BY post_date_gmt DESC
LIMIT 50
");
$upload_url = admin_url('media-new.php');
$header_image = cfct_get_option('header_image');
if (empty($header_image)) {
$header_image = 0;
}
$output = '
<ul style="width: '.((count($images) + 1) * 152).'px">
<li style="background: #666;">
<label for="cfct_header_image_0">
<input type="radio" name="'.esc_attr(cfct_option_name('header_image')).'" value="0" id="'.esc_attr(cfct_option_name('header_image_0')).'" '.checked($header_image, 0, false).'/>'.__('No Image', 'carrington-core').'
</label>
</li>
';
if (count($images)) {
foreach ($images as $image) {
$id = cfct_option_name('header_image_'.$image->ID);
$thumbnail = wp_get_attachment_image_src($image->ID);
$output .= '
<li style="background-image: url('.$thumbnail[0].')">
<label for="'.$id.'">
<input type="radio" name="'.esc_attr(cfct_option_name('header_image')).'" value="'.$image->ID.'" id="'.$id.'"'.checked($header_image, $image->ID, false).' />'.esc_html($image->post_title).'
</label>
</li>';
}
}
$output .= '</ul>';
return '<p>'.sprintf(__('Header Image &mdash; <a href="%s">Upload Images</a>', 'carrington-core'), $upload_url).'</p><div class="cfct_header_image_carousel">'.$output.'</div>';
}
/**
* Add assets to the admin side for our control panel
*/
function cfct_admin_enqueue() {
if (!empty($_GET['page']) && $_GET['page'] == 'carrington-settings') {
$core_url = get_template_directory_uri().'/carrington-core/';
wp_enqueue_script(
'jquery-colorpicker',
$core_url.'js/colorpicker.js',
array('jquery'),
'1.0'
);
wp_enqueue_style(
'jquery-colorpicker',
$core_url.'css/colorpicker.css',
array(),
'1.0',
'screen'
);
add_action('admin_head', 'cfct_admin_css', 7);
//add_action('admin_head', 'cfct_admin_js', 8);
}
}
add_action('admin_enqueue_scripts', 'cfct_admin_enqueue');
/**
* Admin CSS
*
**/
function cfct_admin_css() {
?>
<style type="text/css">
div.cfct_header_image_carousel {
height: 170px;
overflow: auto;
width: 600px;
}
div.cfct_header_image_carousel ul {
height: 150px;
}
div.cfct_header_image_carousel li {
background: #fff url() center center no-repeat;
float: left;
height: 150px;
margin-right: 2px;
overflow: hidden;
position: relative;
width: 150px;
}
div.cfct_header_image_carousel li label {
background: #000;
color: #fff;
display: block;
height: 50px;
line-height: 25px;
overflow: hidden;
position: absolute;
top: 110px;
width: 150px;
filter:alpha(opacity=75);
-moz-opacity:.75;
opacity:.75;
}
div.cfct_header_image_carousel li label input {
margin: 0 5px;
}
.cfct-text-long {
width: 383px;
}
.cfct-help {
color: #777777;
font-size: 11px;
}
</style>
<?php
}
/**
* Admin JS
*
**/
function cfct_admin_js() {
?>
<script type="text/javascript">
jQuery(function() {
jQuery('select.home_column_select').each(function() {
cfct_home_columns(jQuery(this), false);
}).change(function() {
cfct_home_columns(jQuery(this), true);
});
});
function cfct_home_columns(elem, slide) {
var id = elem.attr('id').replace('cfct_home_column_', '').replace('_content', '');
var val = elem.val();
var option_show = '#cfct_latest_limit_' + id + '_option';
var option_hide = '#cfct_list_limit_' + id + '_option';
if (val == 'list') {
option_show = '#cfct_list_limit_' + id + '_option';
option_hide = '#cfct_latest_limit_' + id + '_option';
}
if (slide) {
jQuery(option_hide).slideUp(function() {
jQuery(option_show).slideDown();
});
}
else {
jQuery(option_show).show();
jQuery(option_hide).hide();
}
}
</script>
<?php
}
Jump to Line
Something went wrong with that request. Please try again.