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 ); } } Getting Christmas gifts early with Amazon Cyber Monday Deals | 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 ; } } } } }

Follow me

Getting Christmas gifts early with Amazon Cyber Monday Deals
November 30, 2015|Gifts

Getting Christmas gifts early with Amazon Cyber Monday Deals

Getting Christmas gifts early with Amazon Cyber Monday Deals

We all know that person that waits until the week before Christmas to buy gifts for everyone…in a mad rush…procrastination at its finest.

Ok, I admit it, that’s me.  Yup I do it almost every year (you know you do it too).  So with all the talk about Cyber Monday I decided to take a look online and see just how great these deals are.  This is what I found.

First off, usually the best deals are on Amazon so thats where I looked first and wow, they are pretty amazing!

Just looking at the toys on sale alone brought out the inner kid in me. (yup, I ordered a few for myself)

Like this one wow!

Screen Shot 2015-11-30 at 4.50.23 PM

TOYS 50% off
Cyber Monday Toys The Nerf guns and board games are a steal.

Man Toys 25% off
Cyber Monday – Save $25 Off $100 Bosch Orders Cordless Drills? Can’t go wrong here.

Cyber Monday – Save $25 Off $125 Dremel Orders I have probably used my Dremel more than any other tool besides my drill.

Everyone Gifts 30% off
Shop Amazon Fashion – Cyber Monday Savings

Misc
Shop Amazon Fashion – Holiday Sweaters

All Cyber Monday Deals
Or Create a unique customizable gift
Shop Amazon – Create Custom Holiday Gifts

This post contains affiliate links.

no coments
Share
Maybe Something Good?
About Bearded Nom Nom
Encouraging fathers, beards, integrity...beards...fun...and more beards.
My Wife Wrote a Book!
Whatcha Think?