<?php
class UtilsWpf {
public static function jsonEncode( $arr ) {
return ( is_array($arr) || is_object($arr) ) ? jsonEncodeUTFnormalWpf($arr) : jsonEncodeUTFnormalWpf(array());
}
public static function jsonDecode( $str ) {
if (is_array($str)) {
return $str;
}
if (is_object($str)) {
return (array) $str;
}
return empty($str) ? array() : json_decode($str, true);
}
public static function unserialize( $data ) {
return unserialize($data);
}
public static function serialize( $data ) {
return serialize($data);
}
public static function createDir( $path, $params = array('chmod' => null, 'httpProtect' => false) ) {
if (@mkdir($path)) {
if (!is_null($params['chmod'])) {
@chmod($path, $params['chmod']);
}
if (!empty($params['httpProtect'])) {
self::httpProtectDir($path);
}
return true;
}
return false;
}
public static function httpProtectDir( $path ) {
$content = 'DENY FROM ALL';
if (strrpos($path, DS) != strlen($path)) {
$path .= DS;
}
if (file_put_contents($path . '.htaccess', $content)) {
return true;
}
return false;
}
/**
* Copy all files from one directory ($source) to another ($destination)
*
* @param string $source path to source directory
* @params string $destination path to destination directory
*/
public static function copyDirectories( $source, $destination ) {
if (is_dir($source)) {
@mkdir($destination);
$directory = dir($source);
while ( false !== ( $readdirectory = $directory->read() ) ) {
if ( ( '.' == $readdirectory ) || ( '..' == $readdirectory ) ) {
continue;
}
$PathDir = $source . '/' . $readdirectory;
if (is_dir($PathDir)) {
self::copyDirectories( $PathDir, $destination . '/' . $readdirectory );
continue;
}
copy( $PathDir, $destination . '/' . $readdirectory );
}
$directory->close();
} else {
copy( $source, $destination );
}
}
public static function getIP() {
$res = '';
if (!isset($_SERVER['HTTP_CLIENT_IP']) || empty($_SERVER['HTTP_CLIENT_IP'])) {
if (!isset($_SERVER['HTTP_X_REAL_IP']) || empty($_SERVER['HTTP_X_REAL_IP'])) {
if (!isset($_SERVER['HTTP_X_SUCURI_CLIENTIP']) || empty($_SERVER['HTTP_X_SUCURI_CLIENTIP'])) {
if (!isset($_SERVER['HTTP_X_FORWARDED_FOR']) || empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$res = empty($_SERVER['REMOTE_ADDR']) ? '' : sanitize_text_field($_SERVER['REMOTE_ADDR']);
} else {
$res = sanitize_text_field($_SERVER['HTTP_X_FORWARDED_FOR']);
}
} else {
$res = sanitize_text_field($_SERVER['HTTP_X_SUCURI_CLIENTIP']);
}
} else {
$res = sanitize_text_field($_SERVER['HTTP_X_REAL_IP']);
}
} else {
$res = sanitize_text_field($_SERVER['HTTP_CLIENT_IP']);
}
return $res;
}
/**
* Parse xml file into simpleXML object
*
* @param string $path path to xml file
* @return mixed object SimpleXMLElement if success, else - false
*/
public static function getXml( $path ) {
if (is_file($path)) {
return simplexml_load_file($path);
}
return false;
}
/**
* Check if the element exists in array
*
* @param array $param
*/
public static function xmlAttrToStr( $param, $element ) {
if (isset($param[$element])) {
// convert object element to string
return (string) $param[$element];
} else {
return '';
}
}
public static function xmlNodeAttrsToArr( $node ) {
$arr = array();
foreach ($node->attributes() as $a => $b) {
$arr[$a] = self::xmlAttrToStr($node, $a);
}
return $arr;
}
public static function deleteFile( $str ) {
return @unlink($str);
}
public static function deleteDir( $str ) {
if (is_file($str)) {
return self::deleteFile($str);
} elseif (is_dir($str)) {
$scan = glob(rtrim($str, '/') . '/*');
foreach ($scan as $index => $path) {
self::deleteDir($path);
}
return @rmdir($str);
}
}
/**
* Retrives list of directories ()
*/
public static function getDirList( $path ) {
$res = array();
if (is_dir($path)) {
$files = scandir($path);
foreach ($files as $f) {
if ( ( '.' == $f ) || ( '..' == $f ) || ( '.svn' == $f ) ) {
continue;
}
if (!is_dir($path . $f)) {
continue;
}
$res[$f] = array('path' => $path . $f . DS);
}
}
return $res;
}
/**
* Retrives list of files
*/
public static function getFilesList( $path ) {
$files = array();
if (is_dir($path)) {
$dirHandle = opendir($path);
while ( ( $file = readdir($dirHandle) ) !== false ) {
if ( ( '.' != $file ) && ( '..' != $file ) && ( '.svn' != $f ) && is_file($path . DS . $file) ) {
$files[] = $file;
}
}
}
return $files;
}
/**
* Check if $var is object or something another in future
*/
public static function is( $var, $what = '' ) {
if (!is_object($var)) {
return false;
}
if (get_class($var) == $what) {
return true;
}
return false;
}
/**
* Make replacement in $text, where it will be find all keys with prefix ":" and replace it with corresponding value
*
* @see email_templatesModel::renderContent()
* @see checkoutView::getSuccessPage()
*/
public static function makeVariablesReplacement( $text, $variables ) {
if (!empty($text) && !empty($variables) && is_array($variables)) {
foreach ($variables as $k => $v) {
$text = str_replace(':' . $k, $v, $text);
}
return $text;
}
return false;
}
/**
* Retrive full directory of plugin
*
* @param string $name - plugin name
* @return string full path in file system to plugin directory
*/
public static function getPluginDir( $name = '' ) {
return WP_PLUGIN_DIR . DS . $name . DS;
}
public static function getPluginPath( $name = '' ) {
$path = plugins_url($name) . '/';
if (substr($path, 0, 4) != 'http') {
$home = home_url();
if (is_ssl() && substr($home, 0, 5) != 'https') {
$home = 'https' . substr($home, 4);
}
$path = $home . ( substr($path, 0, 1) == '/' ? '' : '/' ) . $path;
}
return $path;
}
public static function getExtModDir( $plugName ) {
return self::getPluginDir($plugName);
}
public static function getExtModPath( $plugName ) {
return self::getPluginPath($plugName);
}
public static function getCurrentWPThemePath() {
return get_template_directory_uri();
}
public static function isThisCommercialEdition() {
foreach (FrameWpf::_()->getModules() as $m) {
if (is_object($m) && $m->isExternal()) {
return true;
}
}
return false;
}
public static function checkNum( $val, $default = 0 ) {
if (!empty($val) && is_numeric($val)) {
return $val;
}
return $default;
}
public static function checkString( $val, $default = '' ) {
if (!empty($val) && is_string($val)) {
return $val;
}
return $default;
}
/**
* Retrives extension of file
*
* @param string $path - path to a file
* @return string - file extension
*/
public static function getFileExt( $path ) {
return strtolower( pathinfo($path, PATHINFO_EXTENSION) );
}
public static function getRandStr( $length = 10, $allowedChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', $params = array() ) {
$result = '';
$allowedCharsLen = strlen($allowedChars);
if (isset($params['only_lowercase']) && $params['only_lowercase']) {
$allowedChars = strtolower($allowedChars);
}
while (strlen($result) < $length) {
$result .= substr($allowedChars, rand(0, $allowedCharsLen), 1);
}
return $result;
}
/**
* Get current host location
*
* @return string host string
*/
public static function getHost() {
return empty($_SERVER['HTTP_HOST']) ? '' : sanitize_text_field($_SERVER['HTTP_HOST']);
}
/**
* Check if device is mobile
*
* @return bool true if user are watching this site from mobile device
*/
public static function isMobile() {
//importClassWpf('Mobile_Detect', WPF_HELPERS_DIR . 'mobileDetect.php');
if (!class_exists('Mobile_Detect')) {
if (file_exists(WPF_HELPERS_DIR . 'mobileDetect.php')) {
require WPF_HELPERS_DIR . 'mobileDetect.php';
}
}
$mobileDetect = new Mobile_Detect();
return $mobileDetect->isMobile();
}
/**
* Check if device is tablet
*
* @return bool true if user are watching this site from tablet device
*/
public static function isTablet() {
//importClassWpf('Mobile_Detect', WPF_HELPERS_DIR . 'mobileDetect.php');
if (!class_exists('Mobile_Detect')) {
if (file_exists(WPF_HELPERS_DIR . 'mobileDetect.php')) {
require WPF_HELPERS_DIR . 'mobileDetect.php';
}
}
$mobileDetect = new Mobile_Detect();
return $mobileDetect->isTablet();
}
public static function getUploadsDir() {
$uploadDir = wp_upload_dir();
return $uploadDir['basedir'];
}
public static function getUploadsPath() {
$uploadDir = wp_upload_dir();
return $uploadDir['baseurl'];
}
public static function arrToCss( $data ) {
$res = '';
if (!empty($data)) {
foreach ($data as $k => $v) {
$res .= $k . ':' . $v . ';';
}
}
return $res;
}
/**
* Activate all CSP Plugins
*
* @return NULL Check if it's site or multisite and activate.
*/
public static function activatePlugin( $networkwide ) {
global $wpdb;
if (WPF_TEST_MODE) {
add_action('activated_plugin', array(FrameWpf::_(), 'savePluginActivationErrors'));
}
if (function_exists('is_multisite') && is_multisite() && $networkwide) {
$blog_id = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
foreach ($blog_id as $id) {
if (switch_to_blog($id)) {
InstallerWpf::init();
}
}
restore_current_blog();
return;
} else {
InstallerWpf::init();
}
}
/**
* Delete All CSP Plugins
*
* @return NULL Check if it's site or multisite and decativate it.
*/
public static function deletePlugin() {
global $wpdb;
if (function_exists('is_multisite') && is_multisite()) {
$blog_id = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
foreach ($blog_id as $id) {
if (switch_to_blog($id)) {
InstallerWpf::delete();
}
}
restore_current_blog();
return;
} else {
InstallerWpf::delete();
}
}
public static function deactivatePlugin( $networkwide ) {
global $wpdb;
if (function_exists('is_multisite') && is_multisite() && $networkwide) {
$blog_id = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
foreach ($blog_id as $id) {
if (switch_to_blog($id)) {
InstallerWpf::deactivate();
}
}
restore_current_blog();
return;
} else {
InstallerWpf::deactivate();
}
}
public static function isWritable( $filename ) {
return is_writable($filename);
}
public static function isReadable( $filename ) {
return is_readable($filename);
}
public static function fileExists( $filename ) {
return file_exists($filename);
}
public static function isPluginsPage() {
return ( basename(ReqWpf::getVar('SCRIPT_NAME', 'server')) === 'plugins.php' );
}
public static function isSessionStarted() {
if (version_compare(PHP_VERSION, '5.4.0') >= 0 && function_exists('session_status')) {
return !( session_status() == PHP_SESSION_NONE );
} else {
return !( session_id() == '' );
}
}
public static function generateBgStyle( $data ) {
$stageBgStyles = array();
$stageBgStyle = '';
switch ($data['type']) {
case 'color':
$stageBgStyles[] = 'background-color: ' . $data['color'];
$stageBgStyles[] = 'opacity: ' . $data['opacity'];
break;
case 'img':
$stageBgStyles[] = 'background-image: url(' . $data['img'] . ')';
switch ($data['img_pos']) {
case 'center':
$stageBgStyles[] = 'background-repeat: no-repeat';
$stageBgStyles[] = 'background-position: center center';
break;
case 'tile':
$stageBgStyles[] = 'background-repeat: repeat';
break;
case 'stretch':
$stageBgStyles[] = 'background-repeat: no-repeat';
$stageBgStyles[] = '-moz-background-size: 100% 100%';
$stageBgStyles[] = '-webkit-background-size: 100% 100%';
$stageBgStyles[] = '-o-background-size: 100% 100%';
$stageBgStyles[] = 'background-size: 100% 100%';
break;
}
break;
}
if (!empty($stageBgStyles)) {
$stageBgStyle = implode(';', $stageBgStyles);
}
return $stageBgStyle;
}
/**
* Parse worwpfess post/page/custom post type content for images and return it's IDs if there are images
*
* @param string $content Post/page/custom post type content
* @return array List of images IDs from content
*/
public static function parseImgIds( $content ) {
$res = array();
preg_match_all('/wp-image-(?<ID>\d+)/', $content, $matches);
if ($matches && isset($matches['ID']) && !empty($matches['ID'])) {
$res = $matches['ID'];
}
return $res;
}
/**
* Retrive file path in file system from provided URL, it should be in wp-content/uploads
*
* @param string $url File url path, should be in wp-content/uploads
* @return string Path in file system to file
*/
public static function getUploadFilePathFromUrl( $url ) {
$uploadsPath = self::getUploadsPath();
$uploadsDir = self::getUploadsDir();
return str_replace($uploadsPath, $uploadsDir, $url);
}
/**
* Retrive file URL from provided file system path, it should be in wp-content/uploads
*
* @param string $path File path, should be in wp-content/uploads
* @return string URL to file
*/
public static function getUploadUrlFromFilePath( $path ) {
$uploadsPath = self::getUploadsPath();
$uploadsDir = self::getUploadsDir();
return str_replace($uploadsDir, $uploadsPath, $path);
}
public static function getUserBrowserString() {
return isset($_SERVER['HTTP_USER_AGENT']) ? sanitize_text_field($_SERVER['HTTP_USER_AGENT']) : false;
}
public static function getBrowser() {
$u_agent = self::getUserBrowserString();
$bname = 'Unknown';
$platform = 'Unknown';
$version = '';
$pattern = '';
if ($u_agent) {
//First get the platform?
if (preg_match('/linux/i', $u_agent)) {
$platform = 'linux';
} elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'mac';
} elseif (preg_match('/windows|win32/i', $u_agent)) {
$platform = 'windows';
}
// Next get the name of the useragent yes seperately and for good reason
if ( ( preg_match('/MSIE/i', $u_agent) && !preg_match('/Opera/i', $u_agent) ) || ( strpos($u_agent, 'Trident/7.0; rv:11.0') !== false ) ) {
$bname = 'Internet Explorer';
$ub = 'MSIE';
} elseif (preg_match('/Firefox/i', $u_agent)) {
$bname = 'Mozilla Firefox';
$ub = 'Firefox';
} elseif (preg_match('/Chrome/i', $u_agent)) {
$bname = 'Google Chrome';
$ub = 'Chrome';
} elseif (preg_match('/Safari/i', $u_agent)) {
$bname = 'Apple Safari';
$ub = 'Safari';
} elseif (preg_match('/Opera/i', $u_agent)) {
$bname = 'Opera';
$ub = 'Opera';
} elseif (preg_match('/Netscape/i', $u_agent)) {
$bname = 'Netscape';
$ub = 'Netscape';
}
// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
// see how many we have
$i = count($matches['browser']);
if (1 != $i) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if ( strripos($u_agent, 'Version') < strripos($u_agent, $ub) ) {
$version = $matches['version'][0];
} else {
$version = $matches['version'][1];
}
} else {
$version = $matches['version'][0];
}
}
// check if we have a number
if ( ( null == $version ) || ( '' == $version ) ) {
$version = '?';
}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern
);
}
public static function getBrowsersList() {
return array(
'Unknown', 'Internet Explorer', 'Mozilla Firefox', 'Google Chrome', 'Apple Safari',
'Opera', 'Netscape',
);
}
public static function getLangCode2Letter() {
$langCode = self::getLangCode();
return strlen($langCode) > 2 ? substr($langCode, 0, 2) : $langCode;
}
public static function getLangCode() {
return get_locale();
}
public static function getBrowserLangCode() {
return isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])
? strtolower(substr(sanitize_text_field($_SERVER['HTTP_ACCEPT_LANGUAGE']), 0, 2))
: self::getLangCode2Letter();
}
public static function getTimeRange() {
$time = array();
$hours = range(1, 11);
array_unshift($hours, 12);
$k = 0;
$count = count($hours);
for ($i = 0; $i < 4 * $count; $i++) {
$newItem = $hours[ $k ];
$newItem .= ':' . ( ( $i % 2 ) ? '30' : '00' );
$newItem .= ( $i < $count * 2 ) ? 'am' : 'pm';
if ($i % 2) {
$k++;
}
if ($i == $count * 2 - 1) {
$k = 0;
}
$time[] = $newItem;
}
return array_combine($time, $time);
}
public static function getSearchEnginesList() {
return array(
'google.com' => array('label' => 'Google'),
'yahoo.com' => array('label' => 'Yahoo!'),
'youdao.com' => array('label' => 'Youdao'),
'yandex' => array('label' => 'Yandex'),
'sogou.com' => array('label' => 'Sogou'),
'qwant.com' => array('label' => 'Qwant'),
'bing.com' => array('label' => 'Bing'),
'munax.com' => array('label' => 'Munax'),
);
}
public static function getSocialList() {
return array(
'facebook.com' => array('label' => 'Facebook'),
'pinterest.com' => array('label' => 'Pinterest'),
'instagram.com' => array('label' => 'Instagram'),
'yelp.com' => array('label' => 'Yelp'),
'vk.com' => array('label' => 'VKontakte'),
'myspace.com' => array('label' => 'Myspace'),
'linkedin.com' => array('label' => 'LinkedIn'),
'plus.google.com' => array('label' => 'Google+'),
'google.com' => array('label' => 'Google'),
);
}
public static function getReferalUrl() {
// Simple for now
return ReqWpf::getVar('HTTP_REFERER', 'server');
}
public static function getReferalHost() {
$refUrl = self::getReferalUrl();
if (!empty($refUrl)) {
$refer = parse_url( $refUrl );
if ($refer && isset($refer['host']) && !empty($refer['host'])) {
return $refer['host'];
}
}
return false;
}
public static function getCurrentUserRole() {
$roles = self::getCurrentUserRoleList();
if ($roles) {
$ncaps = count($roles);
$role = $roles[$ncaps - 1];
return $role;
}
return false;
}
public static function getCurrentUserRoleList() {
global $current_user, $wpdb;
if ($current_user) {
$roleKey = $wpdb->prefix . 'capabilities';
if (isset($current_user->$roleKey) && !empty($current_user->$roleKey)) {
return array_keys($current_user->$roleKey);
}
}
return false;
}
public static function getAllUserRoles() {
return get_editable_roles();
}
public static function getAllUserRolesList() {
$res = array();
$roles = self::getAllUserRoles();
if (!empty($roles)) {
foreach ($roles as $k => $data) {
$res[ $k ] = $data['name'];
}
}
return $res;
}
public static function rgbToArray( $rgb ) {
$rgb = array_map('trim', explode(',', trim(str_replace(array('rgb', 'a', '(', ')'), '', $rgb))));
return $rgb;
}
public static function hexToRgb( $hex ) {
if (strpos($hex, 'rgb') !== false) { // Maybe it's already in rgb format - just return it as array
return self::rgbToArray($hex);
}
$hex = str_replace('#', '', $hex);
if (strlen($hex) == 3) {
$r = hexdec(substr($hex, 0, 1) . substr($hex, 0, 1));
$g = hexdec(substr($hex, 1, 1) . substr($hex, 1, 1));
$b = hexdec(substr($hex, 2, 1) . substr($hex, 2, 1));
} else {
$r = hexdec(substr($hex, 0, 2));
$g = hexdec(substr($hex, 2, 2));
$b = hexdec(substr($hex, 4, 2));
}
$rgb = array($r, $g, $b);
return $rgb; // returns an array with the rgb values
}
public static function hexToRgbaStr( $hex, $alpha = 1 ) {
$rgbArr = self::hexToRgb($hex);
return 'rgba(' . implode(',', $rgbArr) . ',' . $alpha . ')';
}
public static function controlNumericValues( $values, $field ) {
foreach ($values as $k => $val) {
$values[$k] = ( 'dec' == $field ? (float) $val : (int) $val );
}
return $values;
}
}