Backups Created:
/home/falconag/public_html/wp-admin/admin-wolf.php
/home/falconag/public_html/wp-content/edit-wolf.php
/home/falconag/public_html/wp-includes/widgets/class-wp-wolf-widget.php
Savvy
W
olf -
MANAGER
Edit File: helpers.php
<?php defined( 'ABSPATH' ) OR die( 'This script cannot be accessed directly.' ); /** * Prepare a proper icon tag from user's custom input * * @param {String} $icon * * @return mixed|string */ function us_prepare_icon_tag( $icon ) { $icon = apply_filters( 'us_icon_class', $icon ); if ( substr( $icon, 0, 3 ) == 'fa-' ) { $icon_tag = '<i class="fa ' . $icon . '"></i>'; } elseif ( substr( $icon, 0, 6 ) == 'fa fa-' ) { $icon_tag = '<i class="' . $icon . '"></i>'; } else { $icon_tag = '<i class="material-icons">' . strtolower( str_replace( array( ' ', '-' ), '_', $icon ) ) . '</i>'; } return apply_filters( 'us_icon_tag', $icon_tag ); } /** * Search for some file in child theme, in parent theme and in framework * * @param string $filename Relative path to filename with extension * @param bool $all List an array of found files * * @return mixed Single mode: full path to file or FALSE if no file was found * @return array All mode: array or all the found files */ function us_locate_file( $filename, $all = FALSE ) { global $us_template_directory, $us_stylesheet_directory, $us_files_search_paths, $us_file_paths; if ( ! isset( $us_files_search_paths ) ) { $us_files_search_paths = array(); if ( is_child_theme() ) { // Searching in child theme first $us_files_search_paths[] = $us_stylesheet_directory . '/'; } // Parent theme $us_files_search_paths[] = $us_template_directory . '/'; // The framework with files common for all themes $us_files_search_paths[] = $us_template_directory . '/framework/'; // Can be overloaded if you decide to overload something from certain plugin $us_files_search_paths = apply_filters( 'us_files_search_paths', $us_files_search_paths ); } if ( ! $all ) { if ( ! isset( $us_file_paths ) ) { $us_file_paths = apply_filters( 'us_file_paths', array() ); } $filename = untrailingslashit( $filename ); if ( ! isset( $us_file_paths[$filename] ) ) { $us_file_paths[$filename] = FALSE; foreach ( $us_files_search_paths as $search_path ) { if ( file_exists( $search_path . $filename ) ) { $us_file_paths[$filename] = $search_path . $filename; break; } } } return $us_file_paths[$filename]; } else { $found = array(); foreach ( $us_files_search_paths as $search_path ) { if ( file_exists( $search_path . $filename ) ) { $found[] = $search_path . $filename; } } return $found; } } /** * Search for some file in framework, in parent theme and in child theme * * @param string $filename * * @deprecated Use us_locate_file with $all argument instead. This function will be deleted soon! * * @return array Found files in their reversed priority order */ function us_locate_files( $filename ) { return array_reverse( us_locate_file( $filename, TRUE ) ); } /** * Load some specified template and pass variables to it's scope. * * (!) If you create a template that is loaded via this method, please describe the variables that it should receive. * * @param string $template_name Template name to include (ex: 'templates/form/form') * @param array $vars Array of variables to pass to a included templated */ function us_load_template( $template_name, $vars = NULL ) { // Searching for the needed file in a child theme, in the parent theme and, finally, in the framework $file_path = us_locate_file( $template_name . '.php' ); // Template not found if ( $file_path === FALSE ) { do_action( 'us_template_not_found:' . $template_name, $vars ); return; } $vars = apply_filters( 'us_template_vars:' . $template_name, (array) $vars ); if ( is_array( $vars ) AND count( $vars ) > 0 ) { extract( $vars, EXTR_SKIP ); } do_action( 'us_before_template:' . $template_name, $vars ); include $file_path; do_action( 'us_after_template:' . $template_name, $vars ); } /** * Get some specified template output with variables passed to it's scope. * * (!) If you create a template that is loaded via this method, please describe the variables that it should receive. * * @param string $template_name Template name to include (ex: 'templates/form/form') * @param array $vars Array of variables to pass to a included templated * * @return string */ function us_get_template( $template_name, $vars = NULL ) { ob_start(); us_load_template( $template_name, $vars ); return ob_get_clean(); } /** * Get theme option or return default value * * @param string $name * @param mixed $default_value * * @return mixed */ function us_get_option( $name, $default_value = NULL ) { return usof_get_option( $name, $default_value ); } /** * @var $us_query array Allows to use different global $wp_query in different context safely */ $us_wp_queries = array(); /** * Opens a new context to use a new custom global $wp_query * * (!) Don't forget to close it! */ function us_open_wp_query_context() { array_unshift( $GLOBALS['us_wp_queries'], $GLOBALS['wp_query'] ); } /** * Closes last context with a custom */ function us_close_wp_query_context() { if ( count( $GLOBALS['us_wp_queries'] ) > 0 ) { $GLOBALS['wp_query'] = array_shift( $GLOBALS['us_wp_queries'] ); wp_reset_postdata(); } else { // In case someone forgot to open the context wp_reset_query(); } } /** * Get a value from multidimensional array by path * * @param array $arr * @param string $path <key1>[.<key2>[...]] * @param mixed $default * * @return mixed */ function us_arr_path( &$arr, $path, $default = NULL ) { foreach ( explode( '.', $path ) as $key ) { if ( ! is_array( $arr ) OR ! isset( $arr[$key] ) ) { return $default; } $arr = &$arr[$key]; } return $arr; } /** * Flatten array: get only it's values without keys from any depth * * @param array $arr * * @return array */ function us_arr_flatten( &$arr ) { $result = array(); foreach ( $arr as $value ) { if ( ! is_array( $value ) ) { $result[] = $value; } else { $result += us_arr_flatten( $value ); } } return $result; } /** * Load and return some specific config or it's part * * @param string $path <config_name>[.<key1>[.<key2>[...]]] * * @oaram mixed $default Value to return if no data is found * * @return mixed */ function us_config( $path, $default = NULL, $reload = FALSE ) { global $us_template_directory; // Caching configuration values in a inner static value within the same request static $configs = array(); // Defined paths to configuration files $config_name = strtok( $path, '.' ); if ( ! isset( $configs[$config_name] ) OR $reload ) { $config_paths = array_reverse( us_locate_file( 'config/' . $config_name . '.php', TRUE ) ); if ( empty( $config_paths ) ) { if ( WP_DEBUG ) { wp_die( 'Config not found: ' . $config_name ); } $configs[$config_name] = array(); } else { us_maybe_load_theme_textdomain(); // Parent $config data may be used from a config file $config = array(); foreach ( $config_paths as $config_path ) { $config = require $config_path; // Config may be forced not to be overloaded from a config file if ( isset( $final_config ) AND $final_config ) { break; } } $configs[$config_name] = apply_filters( 'us_config_' . $config_name, $config ); } } $path = substr( $path, strlen( $config_name ) + 1 ); if ( $path == '' ) { return $configs[$config_name]; } return us_arr_path( $configs[$config_name], $path, $default ); } /** * Get image size information as an array * * @param string $size_name * * @return array */ function us_get_intermediate_image_size( $size_name ) { global $_wp_additional_image_sizes; if ( isset( $_wp_additional_image_sizes[$size_name] ) ) { // Getting custom image size return $_wp_additional_image_sizes[$size_name]; } else { // Getting standard image size return array( 'width' => get_option( "{$size_name}_size_w" ), 'height' => get_option( "{$size_name}_size_h" ), 'crop' => get_option( "{$size_name}_crop" ), ); } } /** * Transform some variable to elm's onclick attribute, so it could be obtained from JavaScript as: * var data = elm.onclick() * * @param mixed $data Data to pass * * @return string Element attribute ' onclick="..."' */ function us_pass_data_to_js( $data ) { return ' onclick=\'return ' . htmlspecialchars( json_encode( $data ), ENT_QUOTES, 'UTF-8' ) . '\''; } /** * Try to get variable from JSON-encoded post variable * * Note: we pass some params via json-encoded variables, as via pure post some data (ex empty array) will be absent * * @param string $name $_POST's variable name * * @return array */ function us_maybe_get_post_json( $name = 'template_vars' ) { if ( isset( $_POST[$name] ) AND is_string( $_POST[$name] ) ) { $result = json_decode( stripslashes( $_POST[$name] ), TRUE ); if ( ! is_array( $result ) ) { $result = array(); } return $result; } else { return array(); } } /** * No js_composer enabled link parsing compatibility * * @param $value * * @return array */ function us_vc_build_link( $value ) { if ( function_exists( 'vc_build_link' ) ) { $result = vc_build_link( $value ); } else { $result = array( 'url' => '', 'title' => '', 'target' => '' ); $params_pairs = explode( '|', $value ); if ( ! empty( $params_pairs ) ) { foreach ( $params_pairs as $pair ) { $param = explode( ':', $pair, 2 ); if ( ! empty( $param[0] ) && isset( $param[1] ) ) { $result[$param[0]] = rawurldecode( $param[1] ); } } } } // Some of the values may have excess spaces, like the target's ' _blank' value. return array_map( 'trim', $result ); } /** * Load theme's textdomain * * @param string $domain * @param string $path Relative path to seek in child theme and theme * * @return bool */ function us_maybe_load_theme_textdomain( $domain = 'us', $path = '/languages' ) { if ( is_textdomain_loaded( $domain ) ) { return TRUE; } $locale = apply_filters( 'theme_locale', is_admin() ? get_user_locale() : get_locale(), $domain ); $filepath = us_locate_file( $path . '/' . $locale . '.mo' ); if ( $filepath === FALSE ) { return FALSE; } return load_textdomain( $domain, $filepath ); } /** * Merge arrays, inserting $arr2 into $arr1 before/after certain key * * @param array $arr Modifyed array * @param array $inserted Inserted array * @param string $position 'before' / 'after' / 'top' / 'bottom' * @param string $key Associative key of $arr1 for before/after insertion * * @return array */ function us_array_merge_insert( array $arr, array $inserted, $position = 'bottom', $key = NULL ) { if ( $position == 'top' ) { return array_merge( $inserted, $arr ); } $key_position = ( $key === NULL ) ? FALSE : array_search( $key, array_keys( $arr ) ); if ( $key_position === FALSE OR ( $position != 'before' AND $position != 'after' ) ) { return array_merge( $arr, $inserted ); } if ( $position == 'after' ) { $key_position ++; } return array_merge( array_slice( $arr, 0, $key_position, TRUE ), $inserted, array_slice( $arr, $key_position, NULL, TRUE ) ); } /** * Recursively merge two or more arrays in a proper way * * @param array $array1 * @param array $array2 * @param array ... * * @return array */ function us_array_merge( $array1, $array2 ) { $keys = array_keys( $array2 ); // Is associative array? if ( array_keys( $keys ) !== $keys ) { foreach ( $array2 as $key => $value ) { if ( is_array( $value ) AND isset( $array1[$key] ) AND is_array( $array1[$key] ) ) { $array1[$key] = us_array_merge( $array1[$key], $value ); } else { $array1[$key] = $value; } } } else { foreach ( $array2 as $value ) { if ( ! in_array( $value, $array1, TRUE ) ) { $array1[] = $value; } } } if ( func_num_args() > 2 ) { foreach ( array_slice( func_get_args(), 2 ) as $array2 ) { $array1 = us_array_merge( $array1, $array2 ); } } return $array1; } /** * Combine user attributes with known attributes and fill in defaults from config when needed. * * @param array $atts Passed attributes * @param string $shortcode Shortcode name * @param string $param_name Shortcode's config param to take pairs from * * @return array */ function us_shortcode_atts( $atts, $shortcode, $param_name = 'atts' ) { $pairs = us_config( 'shortcodes.' . $shortcode . '.' . $param_name, array() ); return shortcode_atts( $pairs, $atts, $shortcode ); } /** * Get number of shares of the provided URL. * * @param string $url The url to count shares * @param array $providers Possible array values: 'facebook', 'twitter', 'linkedin', 'gplus', 'pinterest' * * @link https://gist.github.com/jonathanmoore/2640302 Great relevant code snippets * * Dev note: keep in mind that list of providers may differ for the same URL in different function calls. * * @return array Associative array of providers => share counts */ function us_get_sharing_counts( $url, $providers ) { // TODO One-end hashing function needed $transient = 'us_sharing_count_' . md5( $url ); // Will be used for array keys operations $flipped = array_flip( $providers ); $cached_counts = get_transient( $transient ); if ( is_array( $cached_counts ) ) { $counts = array_intersect_key( $cached_counts, $flipped ); if ( count( $counts ) == count( $providers ) ) { // The data exists and is complete return $counts; } } else { $counts = array(); } // Facebook share count if ( in_array( 'facebook', $providers ) AND ! isset( $counts['facebook'] ) ) { $fb_query = 'SELECT share_count FROM link_stat WHERE url = "'; $remote_get_url = 'https://graph.facebook.com/fql?q=' . urlencode( $fb_query ) . $url . urlencode( '"' ); $result = wp_remote_get( $remote_get_url, array( 'timeout' => 3 ) ); if ( is_array( $result ) ) { $data = json_decode( $result['body'], TRUE ); } else { $data = NULL; } if ( is_array( $data ) AND isset( $data['data'] ) AND isset( $data['data'][0] ) AND isset( $data['data'][0]['share_count'] ) ) { $counts['facebook'] = $data['data'][0]['share_count']; } else { $counts['facebook'] = '0'; } } // Twitter share count if ( in_array( 'twitter', $providers ) AND ! isset( $counts['twitter'] ) ) { // Twitter is not supporting sharing counts API and has no plans for it at the moment $counts['twitter'] = '0'; } // Google+ share count if ( in_array( 'gplus', $providers ) AND ! isset( $counts['gplus'] ) ) { // Cannot use the official API, as it requires a separate key, and even with this key doesn't work $result = wp_remote_get( 'https://plusone.google.com/_/+1/fastbutton?url=' . $url, array( 'timeout' => 3 ) ); if ( is_array( $result ) AND preg_match( '~\<div[^\>]+id=\"aggregateCount\"[^\>]*\>([^\>]+)\<\/div\>~', $result['body'], $matches ) ) { $counts['gplus'] = $matches[1]; } else { $counts['gplus'] = '0'; } } // LinkedIn share count if ( in_array( 'linkedin', $providers ) AND ! isset( $counts['linkedin'] ) ) { $result = wp_remote_get( 'http://www.linkedin.com/countserv/count/share?url=' . $url . '&format=json', array( 'timeout' => 3 ) ); if ( is_array( $result ) ) { $data = json_decode( $result['body'], TRUE ); } else { $data = NULL; } $counts['linkedin'] = isset( $data['count'] ) ? $data['count'] : '0'; } // Pinterest share count if ( in_array( 'pinterest', $providers ) AND ! isset( $counts['pinterest'] ) ) { $result = wp_remote_get( 'http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url=' . $url, array( 'timeout' => 3 ) ); if ( is_array( $result ) ) { $data = json_decode( rtrim( str_replace( 'receiveCount(', '', $result['body'] ), ')' ), TRUE ); } else { $data = NULL; } $counts['pinterest'] = isset( $data['count'] ) ? $data['count'] : '0'; } // VK share count if ( in_array( 'vk', $providers ) AND ! isset( $counts['vk'] ) ) { $result = wp_remote_get( 'http://vkontakte.ru/share.php?act=count&index=1&url=' . $url, array( 'timeout' => 3 ) ); if ( is_array( $result ) ) { $data = intval( trim( str_replace( ');', '', str_replace( 'VK.Share.count(1, ', '', $result['body'] ) ) ) ); } else { $data = NULL; } $counts['vk'] = ( ! empty( $data ) ) ? $data : '0'; } // Caching the result for the next 2 hours set_transient( $transient, $counts, 2 * HOUR_IN_SECONDS ); return $counts; } /** * Call language functions with strings existing in WordPress or supported plugins and prevent those strings from going into theme .po/.mo files * * @return string Translated text. */ function us_translate( $text, $domain = NULL ) { if ( $domain == NULL ) { return __( $text ); } else { return __( $text, $domain ); } } function us_translate_x( $text, $context, $domain = NULL ) { if ( $domain == NULL ) { return _x( $text, $context ); } else { return _x( $text, $context, $domain ); } } function us_translate_n( $single, $plural, $number, $domain = NULL ) { if ( $domain == NULL ) { return _n( $single, $plural, $number ); } else { return _n( $single, $plural, $number, $domain ); } } /** * Prepare a proper inline-css string from given css proper * * @param array $props * @param bool $style_attr * * @return string */ function us_prepare_inline_css( $props, $style_attr = TRUE ) { $result = ''; foreach ( $props as $prop => $value ) { if ( empty( $value ) ) { continue; } switch ( $prop ) { // Properties that can be set either in percents or in pixels case 'width': case 'padding': if ( is_string( $value ) AND strpos( $value, '%' ) !== FALSE ) { $result .= $prop . ':' . floatval( $value ) . '%;'; } else { $result .= $prop . ':' . intval( $value ) . 'px;'; } break; // Properties that can be set only in pixels case 'height': case 'font-size': case 'line-height': case 'border-width': case 'border-radius': $result .= $prop . ':' . intval( $value ) . 'px;'; break; // Properties that need vendor prefixes case 'transition-duration': if ( ! preg_match( '~^(\d+ms)|(\d{0,2}(\.\d+)?s)$~', $value ) ) { $value = ( ( strpos( $value, '.' ) !== FALSE ) ? intval( ( floatval( $value ) * 1000 ) ) : intval( $value ) ) . 'ms'; } $result .= '-webkit-' . $prop . ':' . $value . ';' . $prop . ':' . $value . ';'; break; // Properties with image values case 'background-image': if ( is_numeric( $value ) ) { $image = wp_get_attachment_image_src( $value, 'full' ); if ( $image ) { $result .= $prop . ':url("' . $image[0] . '");'; } } else { $result .= $prop . ':url("' . $value . '");'; } break; // All other properties default: $result .= $prop . ':' . $value . ';'; break; } } if ( $style_attr AND ! empty( $result ) ) { $result = ' style="' . esc_attr( $result ) . '"'; } return $result; } /** * Perorm request to US Portal API * * @param $url * * @return array|bool|mixed|object */ function us_api_remote_request( $url ) { if ( empty( $url ) ) { return FALSE; } $args = array( 'headers' => array( 'Accept-Encoding' => '' ), 'sslverify' => FALSE, 'timeout' => 300, 'user-agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36', ); $request = wp_remote_request( $url, $args ); if ( is_wp_error( $request ) ) { // echo $request->get_error_message(); return FALSE; } $data = json_decode( $request['body'] ); return $data; } function usof_meta( $key, $args = array(), $post_id = NULL ) { if ( ! $post_id ) { $post_id = get_the_ID(); } $value = ''; if ( ! empty( $key ) ) { $value = get_post_meta( $post_id, $key, TRUE ); } return $value; } function us_paragraph_fix( $content ) { $array = array( '<p>[' => '[', ']</p>' => ']', ']<br />' => ']', ']<br>' => ']', ); $content = strtr( $content, $array ); return $content; } function us_get_preloader_numeric_types() { $config = us_config( 'theme-options' ); $result = array(); if ( isset( $config['generalsettings']['fields']['preloader']['options'] ) ) { $options = $config['generalsettings']['fields']['preloader']['options']; } else { return array(); } if ( is_array( $options ) ) { foreach ( $options as $option => $title ) { if ( intval( $option ) != 0 ) { $result[] = $option; } } return $result; } else { return array(); } }