do_items( ( array ) $handles ); } /** * Force style enqueue. * * @param array $handles * * @return void */ public static function do_styles( $handles ) { self::do_scripts( 'jquery' ); global $wp_styles; if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { $wp_styles = new WP_Styles(); } ob_start(); $wp_styles->do_items( ( array ) $handles ); $content = str_replace( array( "'", "\n" ), array( '"', '' ), ob_get_clean() ); echo ""; } /** * Enable delayed plugin activation. To be used with scb_init() * * @param string $plugin * @param string|array $callback * * @return void */ public static function add_activation_hook( $plugin, $callback ) { if ( defined( 'SCB_LOAD_MU' ) ) { register_activation_hook( $plugin, $callback ); } else { add_action( 'scb_activation_' . plugin_basename( $plugin ), $callback ); } } /** * Execute activation hook. * For debugging. * * @param string $plugin * * @return void */ public static function do_activation( $plugin ) { do_action( 'scb_activation_' . plugin_basename( $plugin ) ); } /** * Allows more than one uninstall hooks. * Also prevents an UPDATE query on each page load. * * @param string $plugin * @param string|array $callback * * @return void */ public static function add_uninstall_hook( $plugin, $callback ) { if ( ! is_admin() ) { return; } register_uninstall_hook( $plugin, '__return_false' ); // dummy add_action( 'uninstall_' . plugin_basename( $plugin ), $callback ); } /** * Execute uninstall hook. * For debugging. * * @param string $plugin * * @return void */ public static function do_uninstall( $plugin ) { do_action( 'uninstall_' . plugin_basename( $plugin ) ); } /** * Get the current, full URL. * * @return string */ public static function get_current_url() { return ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } /** * Apply a function to each element of a ( nested ) array recursively. * * @param string|array $callback * @param array $array * * @return array */ public static function array_map_recursive( $callback, $array ) { array_walk_recursive( $array, array( __CLASS__, 'array_map_recursive_helper' ), $callback ); return $array; } public static function array_map_recursive_helper( &$val, $key, $callback ) { $val = call_user_func( $callback, $val ); } /** * Extract certain $keys from $array. * * @deprecated WP 3.1 * @deprecated Use wp_array_slice_assoc() * @see wp_array_slice_assoc() * * @param array $array * @param array $keys * * @return array */ public static function array_extract( $array, $keys ) { _deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'WP 3.1', 'wp_array_slice_assoc()' ); return wp_array_slice_assoc( $array, $keys ); } /** * Extract a certain value from a list of arrays. * * @deprecated WP 3.1 * @deprecated Use wp_list_pluck() * @see wp_list_pluck() * * @param array $array * @param string $key * * @return array */ public static function array_pluck( $array, $key ) { _deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'WP 3.1', 'wp_list_pluck()' ); return wp_list_pluck( $array, $key ); } /** * Transform a list of objects into an associative array. * * @deprecated r41 * @deprecated Use scb_list_fold() * @see scb_list_fold() * * @param array $objects * @param string $key * @param string $value * * @return array */ public static function objects_to_assoc( $objects, $key, $value ) { _deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'r41', 'scb_list_fold()' ); return scb_list_fold( $objects, $key, $value ); } /** * Prepare an array for an IN statement. * * @param array $values * * @return string */ public static function array_to_sql( $values ) { foreach ( $values as &$val ) { $val = "'" . esc_sql( trim( $val ) ) . "'"; } return implode( ',', $values ); } /** * Example: split_at( '' ) => array( '', '' ) * * @param string $delim * @param string $str * * @return array */ public static function split_at( $delim, $str ) { $i = strpos( $str, $delim ); if ( false === $i ) { return false; } $start = substr( $str, 0, $i ); $finish = substr( $str, $i ); return array( $start, $finish ); } } /** * Return a standard admin notice. * * @param string $msg * @param string $class (optional) * * @return string */ function scb_admin_notice( $msg, $class = 'updated' ) { return html( "div class='$class fade'", html( "p", $msg ) ); } /** * Transform a list of objects into an associative array. * * @param array $objects * @param string $key * @param string $value * * @return array */ function scb_list_fold( $list, $key, $value ) { $r = array(); if ( is_array( reset( $list ) ) ) { foreach ( $list as $item ) { $r[ $item[ $key ] ] = $item[ $value ]; } } else { foreach ( $list as $item ) { $r[ $item->$key ] = $item->$value; } } return $r; } /** * Splits a list into sets, grouped by the result of running each value through $fn. * * @param array $list List of items to be partitioned. * @param callback $fn Function that takes an element and returns a string key. * * @return array */ function scb_list_group_by( $list, $fn ) { $groups = array(); foreach ( $list as $item ) { $key = call_user_func( $fn, $item ); if ( null === $key ) { continue; } $groups[ $key ][] = $item; } return $groups; } //_____Database Table Utilities_____ /** * Register a table with $wpdb. * * @param string $key The key to be used on the $wpdb object. * @param string $name (optional) The actual name of the table, without $wpdb->prefix. * * @return void */ function scb_register_table( $key, $name = false ) { global $wpdb; if ( ! $name ) { $name = $key; } $wpdb->tables[] = $name; $wpdb->$key = $wpdb->prefix . $name; } /** * Runs the SQL query for installing/upgrading a table. * * @param string $key The key used in scb_register_table(). * @param string $columns The SQL columns for the CREATE TABLE statement. * @param array $opts (optional) Various other options. * * @return void */ function scb_install_table( $key, $columns, $opts = array() ) { global $wpdb; $full_table_name = $wpdb->$key; if ( is_string( $opts ) ) { $opts = array( 'upgrade_method' => $opts ); } $opts = wp_parse_args( $opts, array( 'upgrade_method' => 'dbDelta', 'table_options' => '', ) ); $charset_collate = ''; if ( $wpdb->has_cap( 'collation' ) ) { if ( ! empty( $wpdb->charset ) ) { $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; } if ( ! empty( $wpdb->collate ) ) { $charset_collate .= " COLLATE $wpdb->collate"; } } $table_options = $charset_collate . ' ' . $opts['table_options']; if ( 'dbDelta' == $opts['upgrade_method'] ) { require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( "CREATE TABLE $full_table_name ( $columns ) $table_options" ); return; } if ( 'delete_first' == $opts['upgrade_method'] ) { $wpdb->query( "DROP TABLE IF EXISTS $full_table_name;" ); } $wpdb->query( "CREATE TABLE IF NOT EXISTS $full_table_name ( $columns ) $table_options;" ); } /** * Runs the SQL query for uninstalling a table. * * @param string $key The key used in scb_register_table(). * * @return void */ function scb_uninstall_table( $key ) { global $wpdb; $wpdb->query( "DROP TABLE IF EXISTS " . $wpdb->$key ); } //_____Minimalist HTML framework_____ /** * Generate an HTML tag. Atributes are escaped. Content is NOT escaped. * * @param string $tag * * @return string */ if ( ! function_exists( 'html' ) ): function html( $tag ) { static $SELF_CLOSING_TAGS = array( 'area', 'base', 'basefont', 'br', 'hr', 'input', 'img', 'link', 'meta' ); $args = func_get_args(); $tag = array_shift( $args ); if ( is_array( $args[0] ) ) { $closing = $tag; $attributes = array_shift( $args ); foreach ( $attributes as $key => $value ) { if ( false === $value ) { continue; } if ( true === $value ) { $value = $key; } $tag .= ' ' . $key . '="' . esc_attr( $value ) . '"'; } } else { list( $closing ) = explode( ' ', $tag, 2 ); } if ( in_array( $closing, $SELF_CLOSING_TAGS ) ) { return "<{$tag} />"; } $content = implode( '', $args ); return "<{$tag}>{$content}"; } endif; /** * Generate an tag. * * @param string $url * @param string $title (optional) * * @return string */ if ( ! function_exists( 'html_link' ) ): function html_link( $url, $title = '' ) { if ( empty( $title ) ) { $title = $url; } return html( 'a', array( 'href' => esc_url( $url ) ), $title ); } endif; /** * Returns an array of query flags. * * @param object $wp_query (optional) * * @return array */ function scb_get_query_flags( $wp_query = null ) { if ( ! $wp_query ) { $wp_query = $GLOBALS['wp_query']; } $flags = array(); foreach ( get_object_vars( $wp_query ) as $key => $val ) { if ( 'is_' == substr( $key, 0, 3 ) && $val ) { $flags[] = substr( $key, 3 ); } } return $flags; } //_____Compatibility layer_____ /** * Update data from a post field based on Post ID. * @see https://core.trac.wordpress.org/ticket/10946 * * @param string $field Post field name. * @param string $value Post field value. * @param int $post_id Post ID. * * @return bool Result of UPDATE query. */ if ( ! function_exists( 'set_post_field' ) ) : function set_post_field( $field, $value, $post_id ) { global $wpdb; $post_id = absint( $post_id ); $value = sanitize_post_field( $field, $value, $post_id, 'db' ); return $wpdb->update( $wpdb->posts, array( $field => $value ), array( 'ID' => $post_id ) ); } endif;