class Akismet_REST_API {
/**
* Register the REST API routes.
*/
public static function init() {
if ( ! function_exists( 'register_rest_route' ) ) {
// The REST API wasn't integrated into core until 4.4, and we support 4.0+ (for now).
return false;
}
register_rest_route( 'akismet/v1', '/key', array(
array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_key' ),
), array(
'methods' => WP_REST_Server::EDITABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'set_key' ),
'args' => array(
'key' => array(
'required' => true,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
),
),
), array(
'methods' => WP_REST_Server::DELETABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'delete_key' ),
)
) );
register_rest_route( 'akismet/v1', '/settings/', array(
array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_settings' ),
),
array(
'methods' => WP_REST_Server::EDITABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'set_boolean_settings' ),
'args' => array(
'akismet_strictness' => array(
'required' => false,
'type' => 'boolean',
'description' => __( 'If true, Akismet will automatically discard the worst spam automatically rather than putting it in the spam folder.', 'akismet' ),
),
'akismet_show_user_comments_approved' => array(
'required' => false,
'type' => 'boolean',
'description' => __( 'If true, show the number of approved comments beside each comment author in the comments list page.', 'akismet' ),
),
),
)
) );
register_rest_route( 'akismet/v1', '/stats', array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_stats' ),
'args' => array(
'interval' => array(
'required' => false,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_interval' ),
'description' => __( 'The time period for which to retrieve stats. Options: 60-days, 6-months, all', 'akismet' ),
'default' => 'all',
),
),
) );
register_rest_route( 'akismet/v1', '/stats/(?P[\w+])', array(
'args' => array(
'interval' => array(
'description' => __( 'The time period for which to retrieve stats. Options: 60-days, 6-months, all', 'akismet' ),
'type' => 'string',
),
),
array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_stats' ),
)
) );
register_rest_route( 'akismet/v1', '/alert', array(
array(
'methods' => WP_REST_Server::READABLE,
'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'get_alert' ),
'args' => array(
'key' => array(
'required' => false,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
),
),
),
array(
'methods' => WP_REST_Server::EDITABLE,
'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'set_alert' ),
'args' => array(
'key' => array(
'required' => false,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
),
),
),
array(
'methods' => WP_REST_Server::DELETABLE,
'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
'callback' => array( 'Akismet_REST_API', 'delete_alert' ),
'args' => array(
'key' => array(
'required' => false,
'type' => 'string',
'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
),
),
)
) );
}
/**
* Get the current Akismet API key.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function get_key( $request = null ) {
return rest_ensure_response( Akismet::get_api_key() );
}
/**
* Set the API key, if possible.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function set_key( $request ) {
if ( defined( 'WPCOM_API_KEY' ) ) {
return rest_ensure_response( new WP_Error( 'hardcoded_key', __( 'This site\'s API key is hardcoded and cannot be changed via the API.', 'akismet' ), array( 'status'=> 409 ) ) );
}
$new_api_key = $request->get_param( 'key' );
if ( ! self::key_is_valid( $new_api_key ) ) {
return rest_ensure_response( new WP_Error( 'invalid_key', __( 'The value provided is not a valid and registered API key.', 'akismet' ), array( 'status' => 400 ) ) );
}
update_option( 'wordpress_api_key', $new_api_key );
return self::get_key();
}
/**
* Unset the API key, if possible.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function delete_key( $request ) {
if ( defined( 'WPCOM_API_KEY' ) ) {
return rest_ensure_response( new WP_Error( 'hardcoded_key', __( 'This site\'s API key is hardcoded and cannot be deleted.', 'akismet' ), array( 'status'=> 409 ) ) );
}
delete_option( 'wordpress_api_key' );
return rest_ensure_response( true );
}
/**
* Get the Akismet settings.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function get_settings( $request = null ) {
return rest_ensure_response( array(
'akismet_strictness' => ( get_option( 'akismet_strictness', '1' ) === '1' ),
'akismet_show_user_comments_approved' => ( get_option( 'akismet_show_user_comments_approved', '1' ) === '1' ),
) );
}
/**
* Update the Akismet settings.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function set_boolean_settings( $request ) {
foreach ( array(
'akismet_strictness',
'akismet_show_user_comments_approved',
) as $setting_key ) {
$setting_value = $request->get_param( $setting_key );
if ( is_null( $setting_value ) ) {
// This setting was not specified.
continue;
}
// From 4.7+, WP core will ensure that these are always boolean
// values because they are registered with 'type' => 'boolean',
// but we need to do this ourselves for prior versions.
$setting_value = Akismet_REST_API::parse_boolean( $setting_value );
update_option( $setting_key, $setting_value ? '1' : '0' );
}
return self::get_settings();
}
/**
* Parse a numeric or string boolean value into a boolean.
*
* @param mixed $value The value to convert into a boolean.
* @return bool The converted value.
*/
public static function parse_boolean( $value ) {
switch ( $value ) {
case true:
case 'true':
case '1':
case 1:
return true;
case false:
case 'false':
case '0':
case 0:
return false;
default:
return (bool) $value;
}
}
/**
* Get the Akismet stats for a given time period.
*
* Possible `interval` values:
* - all
* - 60-days
* - 6-months
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function get_stats( $request ) {
$api_key = Akismet::get_api_key();
$interval = $request->get_param( 'interval' );
$stat_totals = array();
$response = Akismet::http_post( Akismet::build_query( array( 'blog' => get_option( 'home' ), 'key' => $api_key, 'from' => $interval ) ), 'get-stats' );
if ( ! empty( $response[1] ) ) {
$stat_totals[$interval] = json_decode( $response[1] );
}
return rest_ensure_response( $stat_totals );
}
/**
* Get the current alert code and message. Alert codes are used to notify the site owner
* if there's a problem, like a connection issue between their site and the Akismet API,
* invalid requests being sent, etc.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function get_alert( $request ) {
return rest_ensure_response( array(
'code' => get_option( 'akismet_alert_code' ),
'message' => get_option( 'akismet_alert_msg' ),
) );
}
/**
* Update the current alert code and message by triggering a call to the Akismet server.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function set_alert( $request ) {
delete_option( 'akismet_alert_code' );
delete_option( 'akismet_alert_msg' );
// Make a request so the most recent alert code and message are retrieved.
Akismet::verify_key( Akismet::get_api_key() );
return self::get_alert( $request );
}
/**
* Clear the current alert code and message.
*
* @param WP_REST_Request $request
* @return WP_Error|WP_REST_Response
*/
public static function delete_alert( $request ) {
delete_option( 'akismet_alert_code' );
delete_option( 'akismet_alert_msg' );
return self::get_alert( $request );
}
private static function key_is_valid( $key ) {
$response = Akismet::http_post(
Akismet::build_query(
array(
'key' => $key,
'blog' => get_option( 'home' )
)
),
'verify-key'
);
if ( $response[1] == 'valid' ) {
return true;
}
return false;
}
public static function privileged_permission_callback() {
return current_user_can( 'manage_options' );
}
/**
* For calls that Akismet.com makes to the site to clear outdated alert codes, use the API key for authorization.
*/
public static function remote_call_permission_callback( $request ) {
$local_key = Akismet::get_api_key();
return $local_key && ( strtolower( $request->get_param( 'key' ) ) === strtolower( $local_key ) );
}
public static function sanitize_interval( $interval, $request, $param ) {
$interval = trim( $interval );
$valid_intervals = array( '60-days', '6-months', 'all', );
if ( ! in_array( $interval, $valid_intervals ) ) {
$interval = 'all';
}
return $interval;
}
public static function sanitize_key( $key, $request, $param ) {
return trim( $key );
}
}
The Power of Your Words - Family Devotional | Bearded Nom Nom
/**
* Redux Framework is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* any later version.
*
* Redux Framework 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. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Redux Framework. If not, see .
*
* @package Redux Framework
* @subpackage Spectrum Color Picker
* @author Kevin Provance (kprovance)
* @version 1.0.0
*/
// Exit if accessed directly
if( !defined( 'ABSPATH' ) ) {
exit;
}
// Don't duplicate me!
if( !class_exists( 'ReduxFramework_color_rgba' ) ) {
/**
* Main ReduxFramework_color_rgba class
*
* @since 1.0.0
*/
class ReduxFramework_color_rgba {
/**
* Class Constructor. Defines the args for the extions class
*
* @since 1.0.0
* @access public
* @param array $field Field sections.
* @param array $value Values.
* @param array $parent Parent object.
* @return void
*/
public function __construct( $field = array(), $value ='', $parent ) {
// Set required variables
$this->parent = $parent;
$this->field = $field;
$this->value = $value;
$defaults = array(
'color' => '',
'alpha' => 1,
'rgba' => ''
);
$this->value = wp_parse_args( $this->value, $defaults );
$this->field['options']['show_input'] = isset($this->field['options']['show_input']) ? $this->field['options']['show_input'] : true;
$this->field['options']['show_initial'] = isset($this->field['options']['show_initial']) ? $this->field['options']['show_initial'] : false;
$this->field['options']['show_alpha'] = isset($this->field['options']['show_alpha']) ? $this->field['options']['show_alpha'] : true;
$this->field['options']['show_palette'] = isset($this->field['options']['show_palette']) ? $this->field['options']['show_palette'] : false;
$this->field['options']['show_palette_only'] = isset($this->field['options']['show_palette_only']) ? $this->field['options']['show_palette_only'] : false;
$this->field['options']['max_palette_size'] = isset($this->field['options']['max_palette_size']) ? $this->field['options']['max_palette_size'] : 10;
$this->field['options']['show_selection_palette'] = isset($this->field['options']['show_selection_palette']) ? $this->field['options']['show_selection_palette'] : false;
$this->field['options']['allow_empty'] = isset($this->field['options']['allow_empty']) ? $this->field['options']['allow_empty'] : true;
$this->field['options']['clickout_fires_change'] = isset($this->field['options']['clickout_fires_change']) ? $this->field['options']['clickout_fires_change'] : false;
$this->field['options']['choose_text'] = isset($this->field['options']['choose_text']) ? $this->field['options']['choose_text'] : 'Choose';
$this->field['options']['cancel_text'] = isset($this->field['options']['cancel_text']) ? $this->field['options']['cancel_text'] : 'Cancel';
$this->field['options']['show_buttons'] = isset($this->field['options']['show_buttons']) ? $this->field['options']['show_buttons'] : true;
$this->field['options']['palette'] = isset($this->field['options']['palette']) ? $this->field['options']['palette'] : null;
$this->field['options']['input_text'] = isset($this->field['options']['input_text']) ? $this->field['options']['input_text'] : 'Select Color';
// Convert empty array to null, if there.
$this->field['options']['palette'] = empty($this->field['options']['palette']) ? null : $this->field['options']['palette'];
$this->field['output_transparent'] = isset($this->field['output_transparent']) ? $this->field['output_transparent'] : false;
}
/**
* Field Render Function.
*
* Takes the vars and outputs the HTML for the field in the settings
*
* @since 1.0.0
* @access public
* @return void
*/
public function render() {
$field_id = $this->field['id'];
// Color picker container
echo '';
// Colour picker layout
$opt_name = $this->parent->args['opt_name'];
if ('' == $this->value['color'] || 'transparent' == $this->value['color']) {
$color = '';
} else {
$color = Redux_Helpers::hex2rgba($this->value['color'], $this->value['alpha']);
}
if ($this->value['rgba'] == ''){
$this->value['rgba'] = Redux_Helpers::hex2rgba($this->value['color'], $this->value['alpha']);
}
echo ' ';
echo ' ';
// Hidden input for alpha channel
echo ' ';
// Hidden input for rgba
echo ' ';
echo '
';
}
/**
* Enqueue Function.
*
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access public
* @return void
*/
public function enqueue() {
// Set up min files for dev_mode = false.
$min = Redux_Functions::isMin();
// Field dependent JS
if (!wp_script_is ( 'redux-field-color-rgba-js' )) {
wp_enqueue_script(
'redux-field-color-rgba-js',
ReduxFramework::$_url . 'inc/fields/color_rgba/field_color_rgba' . Redux_Functions::isMin() . '.js',
array('jquery', 'redux-spectrum-js'),
time(),
true
);
}
// Spectrum CSS
if (!wp_style_is ( 'redux-spectrum-css' )) {
wp_enqueue_style('redux-spectrum-css');
}
if ($this->parent->args['dev_mode']) {
if (!wp_style_is ( 'redux-field-color-rgba-css' )) {
wp_enqueue_style(
'redux-field-color-rgba-css',
ReduxFramework::$_url . 'inc/fields/color_rgba/field_color_rgba.css',
array(),
time(),
'all'
);
}
}
}
/**
* getColorVal. Returns formatted color val in hex or rgba.
*
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since 1.0.0
* @access private
* @return string
*/
private function getColorVal(){
// No notices
$color = '';
$alpha = 1;
$rgba = '';
// Must be an array
if (is_array($this->value)) {
// Enum array to parse values
foreach($this->value as $id => $val) {
// Sanitize alpha
if ($id == 'alpha') {
$alpha = !empty($val) ? $val : 1;
} elseif ($id == 'color') {
$color = !empty($val) ? $val : '';
} elseif ($id == 'rgba') {
$rgba = !empty($val) ? $val : '';
$rgba = Redux_Helpers::hex2rgba($color, $alpha);
}
}
// Only build rgba output if alpha ia less than 1
if ( $alpha < 1 && $alpha <> '' ) {
$color = $rgba;
}
}
return $color;
}
/**
* Output Function.
*
* Used to enqueue to the front-end
*
* @since 1.0.0
* @access public
* @return void
*/
public function output() {
if (!empty($this->value)) {
$style = '';
$mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' );
$color_val = $this->getColorVal();
$style .= $mode . ':' . $color_val . ';';
if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) {
$css = Redux_Functions::parseCSS( $this->field['output'], $style, $color_val );
$this->parent->outputCSS .= $css;
}
if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) {
$css = Redux_Functions::parseCSS( $this->field['compiler'], $style, $color_val );
$this->parent->compilerCSS .= $css ;
}
}
}
}
}
February 4, 2016
Valentines gifts for him
View more
September 23, 2015
16 YouTube Channels to Watch with Your Kids
View more
August 7, 2015
5 Reasons You Should Grow a Beard
View more
August 5, 2015
The Lost Art of Wrestling with Your Kids
View more
August 4, 2015
5 Back to School DAD Hacks
View more
August 4, 2015
15 Fun Ways to Initiate Wrestling with Your Kids
View more
The Power of Your Words – Family Devotional
The Power of Your Words – Family Devotional
Are your children speaking horribly to each other or you?
Do you want to connect with your kids but you’re not sure how?
The Power of Your Words Study Guide has been written specifically for use in small groups and/or a family-home setting to foster connection. The goal of this set of lessons is to grow your family (or group) as you study God’s Word together through activities, laughter and discussion.
In the heat of the moment we all struggle with keeping our tongue under control, of course, children are no different. As conflicts arise between children, we must realize that we need to do more than just referee their arguments – We have to get to the heart and train them from the inside out while helping them understand the power of their tongue according to God’s Word.
The Power of Your Words is one tool of many that you can use to allow God’s Word to do it’s work in the hearts of the children in your life. Through study of His Word, scripture memorization, point based coloring sheets, fun and relationship based teaching, children will learn the importance of the tongue and how to speak LIFE!
Join our Affiliate Program!
The Power of Your Words is available as a PDF download and comes with a PACKED Resource CD (in the form of a zip file) that contains resources & worksheets for each lesson. You’ll have access to posters to go with each lesson, worksheets that help bring the point home and even a video file to enhance one of the lessons.
Each lesson contains the following:
Preparation Instructions
Lesson Objectives
An Introduction
Suggested Worship/Song Time
A Unique and Engaging Activity
Lesson Outline (includes scripts)
Scripture Memorization
And Prayer Time
Each lesson is planned to last a total of 20-30 minutes and is intended for kids ages 4-8 but can be adapted for ages up to 11. For this age range, it is important to keep the truth simple and to the point. You’ll find that each lesson has a lot of discussion questions. I HIGHLY encourage you to engage and have discussions with the children. The more they are able to participate, the more these truths will “stick” in their minds and hearts.
These lessons may be used weekly to create a themed 9-week study (recommended) or delivered daily over a period of a week or two. The Power of Your Words also works well as a vacation Bible school theme.
Ready to Get Started?
Want to promote The Power of Your Words and make money doing it?
Join our Affiliate Program!
Sign up to receive 5 Days to a Healthier Beard right to your inbox!
×