%PDF- %PDF-
| Direktori : /home/dopla/www/wp-content/plugins/kingcomposer/ |
| Current File : /home/dopla/www/wp-content/plugins/kingcomposer/kingcomposer.php |
<?php
/*
Plugin Name: KingComposer
Plugin URI: https://kingcomposer.com/
Description: KingComposer is the most professional WordPress page builder plugin, it's lightweight and high efficiency to help you build any layout design quickly.
Version: 2.9.6
Author: King-Theme
Author URI: http://king-theme.com/
Text Domain: kingcomposer
*/
if( defined('KC_VERSION') || isset( $GLOBALS['kc'] ) ) {
die('ERROR: the plugin has been loaded before.');
}
/**
* unorthodox
*/
if(!defined('ABSPATH')) {
header('HTTP/1.0 403 Forbidden');
exit;
}
/**
* Start KingComposer
*/
class KingComposer{
/**
* Global Settings
*/
private $settings = array();
/**
* Definde where to load shortcode template
*/
private $template_path = null;
/**
* re-definde where to load shortcode template such as in theme or 3rd party plugin
*/
private $template_path_extend = array();
/**
* register list of external sections
*/
private $profile_section_paths = array();
/**
* Maps of core & extended
*/
private $maps = array();
/**
* list of views
*/
public $maps_views = array();
/**
* list of views
*/
public $maps_view = array();
/**
* Param types
*/
public $param_types = array();
/**
* WP Add_Shortcode $shortcode_tags
*/
public $shortcode_tags = array();
/**
* support content types
*/
private $param_types_cache = array();
/**
* Support icons
*/
private $icon_sources = array();
/*
* kcp access uri
*/
private $kcp_uri = '';
/**
* support content types
*/
private $content_types = array();
/**
* required content types
*/
private $required_content_types = array( 'page' );
/**
* ignored content types use as section
*/
private $ignored_section_content_types = array();
/**
* All filters of shortcodes
*/
public $filters = array();
/**
* Register filters for shortcodes
*/
public $add_filters = array();
/**
* register callback for live view on front-end editor
*/
public $live_js_callback = array();
/**
* status of premium version
*/
public $verify = false;
/**
* Default Key
*/
public $key = '';
/**
* DD PP KK
*/
private $pdk = array('pack' => '', 'date' => '', 'stt' => 0);
/*
* KC Action request
*/
public $action;
/*
* KC Optimized
*/
public $optimized;
/*
* register prebuilt templates
*/
private $prebuilt_templates = array();
/*
* load assets from map
*/
private $map_styles = array();
private $map_scripts = array();
/*
* KC post_content applied filter the_content. Use to speedup looping post_content
*/
public $generated = array();
public $stack_actions = array();
public $stack_filters = array();
public function __construct() {
// Constants
$version = get_file_data( __FILE__, array('Version') );
define('KC_VERSION', $version[0] );
define('KDS', DIRECTORY_SEPARATOR );
define('KC_FILE', __FILE__);
define('KC_PATH', dirname(__FILE__));
define('KC_URL', plugins_url('', __FILE__));
define('KC_SLUG', basename(dirname(__FILE__)));
define('KC_BASE', plugin_basename(__FILE__));
define('KC_SITE', site_url());
define('KC_TEXTDOMAIN', 'kingcomposer');
/*
* Set default template path
*/
$this->template_path = KC_PATH.KDS.'shortcodes'.KDS;
/*
* Set template path for activate theme
*/
array_push( $this->template_path_extend, get_template_directory().KDS.'kingcomposer'.KDS );
/*
* Get settings
*/
$this->settings = array(
"content_types" => array(),
"css_code" => "",
"animate" => "",
"max_width" => "1170px"
);
if (get_option('kc_options') !== false) {
$this->settings = get_option('kc_options', true);
} else {
add_option('kc_options', $this->settings, null, 'no');
}
/*
* Get PDK informations
*/
if( get_option('kc_tkl_pdk', false) )
$this->pdk = get_option('kc_tkl_pdk');
/*
* Load optimized
*/
$optimized = get_option('kc_optimized');
if ($this->is($optimized, array('enable'), 'on')) {
require_once KC_PATH.'/includes/kc.optimized.php';
$this->optimized = new kc_optimized();
}
/*
* Load builder actions
*/
require_once KC_PATH.'/includes/kc.actions.php';
require_once KC_PATH.'/includes/kc.widgets.php';
/*
* Set request action
*/
if (isset($_GET['kc_action']) && !empty($_GET['kc_action']))
$this->action = sanitize_title($_GET['kc_action']);
else if (isset($_POST['kc_action']) && !empty($_POST['kc_action']))
$this->action = sanitize_title($_POST['kc_action']);
if( get_option('kc_tkl_cc') && get_option('kc_tkl_dd') )
$this->verify = true;
/*
* Run on wp-init
*/
add_action( 'init', array( &$this, 'init_first' ), 0 );
add_action( 'init', array( &$this, 'init' ), 9999 );
register_deactivation_hook(__FILE__, array(&$this, 'deactive'));
/*
* Register assets via map
*/
add_filter('kc_register_styles', array( &$this, 'register_map_styles' ));
add_filter('kc_register_scripts', array( &$this, 'register_map_scripts' ));
$this->kcp_uri = (is_ssl() ? 'https' : 'http').'://kingcomposer.com/?kc_store_action=';
}
public static function globe(){
global $kc;
if( isset( $kc ) )
return $kc;
else wp_die('KingComposer Error: Global varible could not be loaded.');
}
public function init_first(){
/*
* Register maps
*/
require_once KC_PATH.'/includes/kc.maps.php';
/*
* Register params
*/
require_once KC_PATH.'/includes/kc.param.types.php';
/*
* This init action has highest priority
*/
require_once KC_PATH.'/includes/kc.extensions.php';
}
public function init(){
add_action( 'kc_before_admin_footer', array( &$this, 'convert_maps' ) );
add_action( 'kc_after_admin_footer', array( &$this, 'convert_paramTypes' ) );
$this->add_icon_source( KC_URL.'/assets/css/icons.css' );
$this->register_shortcodes();
/*
* Register shortcode filters
*/
$core_filters = apply_filters(
'kc-core-shortcode-filters',
array(
'row',
'row_inner',
'column',
'tabs',
'tab',
'box',
'video_play',
'counter_box',
'carousel_images',
'twitter_feed',
'feature_box',
'pie_chart',
'carousel_post',
'image_gallery',
'blog_posts'
)
);
foreach ($core_filters as $k => $v) {
$this->add_filter ('kc_'.$v, 'kc_'.$v.'_filter');
}
if (is_admin()) {
/*
* auto activate if the license registered
*/
$this->auto_verify();
}else{
global $kc_front;
$kc_front->add_filters();
}
/*
* Register post-type for kc-section
*/
if( !defined('KC_DISABLE_SECTIONS') || KC_DISABLE_SECTIONS !== true )
require_once KC_PATH.'/includes/kc.sections.php';
if ($this->action == 'dismiss' && isset($_GET['nid'])) {
$dismiss = get_option('kc_notices_dismiss', true);
if(!$dismiss) {
$dismiss = array();
add_option('kc_notices_dismiss', $dismiss, null, 'no');
}
if (!is_array($dismiss))
$dismiss = array();
array_push($dismiss, esc_attr($_GET['nid']));
update_option('kc_notices_dismiss', $dismiss);
}
}
public function deactive(){
if (isset($this->optimized))
$this->optimized->deactive();
}
public function load(){
// Shared
require_once KC_PATH.'/includes/kc.functions.php';
require_once KC_PATH.'/includes/kc.tools.php';
require_once KC_PATH.'/includes/kc.ajax.php';
// Back-end only
if( is_admin() ) {
require_once KC_PATH.'/includes/frontend/helpers/kc.ajax.php';
// Front-end only
}
require_once KC_PATH.'/includes/kc.front.php';
}
public function add_map( $map = array(), $flag = '' ){
/*
Add to global maps
*/
foreach( $map as $base => $atts )
{
$atts = apply_filters( 'kc_add_map', $atts, $base );
if( is_array( $atts ) ){
if (isset($atts['nested']) &&
$atts['nested'] === true
) {
$atts['is_container'] = true;
$atts['preview_editable'] = true;
}
$atts['flag'] = esc_attr($flag);
$this->maps[ $base ] = $atts;
if (isset($atts['filter']) &&
!empty($atts['filter'])
) {
$this->filters[ $base ] = $atts['filter'];
}
if (isset($atts['views']) &&
!empty($atts['views']['sections'])
){
array_push ($this->maps_views, $base);
array_push ($this->maps_view, $atts['views']['sections']);
}
if (isset($atts['assets']) &&
is_array($atts['assets'])
) {
if (isset($atts['assets']['scripts']) &&
is_array($atts['assets']['scripts'])
){
$this->map_scripts += $atts['assets']['scripts'];
}
if (isset($atts['assets']['styles']) &&
is_array($atts['assets']['styles'])
){
$this->map_styles += $atts['assets']['styles'];
}
}
}
}
}
public function remove_map( $map = '' ){
/*
Add to global maps
*/
if( isset( $this->maps[ $map ] ) )
unset( $this->maps[ $map ] );
}
public function hide_element( $name = '' ){
/*
Add to global maps
*/
if( isset( $this->maps[ $map ] ) ){
$this->maps[ $map ]['is_system'] = true;
}
}
public function add_param_type( $name = '', $func = '' ){
/*
Add to global params
*/
if( !empty( $name ) && !empty( $func ) )
{
$this->param_types[ $name ] = $func;
}
}
public function add_param_type_cache( $name = '', $func = '' ){
/*
Add to global params
*/
if( !empty( $name ) && !empty( $func ) )
{
$this->param_types_cache[ $name ] = $func;
}
}
public function get_maps($tag = ''){
if (isset($tag) && !empty($tag)) {
if (isset($this->maps[$tag]))
return $this->maps[$tag];
else return false;
}
return $this->maps;
}
public function convert_maps(){
global $post;
$post_id = isset($post) && isset($post->ID) ? $post->ID : 0;
if (
!$post &&
isset($_GET['kc_action']) &&
$_GET['kc_action'] == 'live-editor' &&
isset($_GET['id'])
) {
$post_id = (Int)$_GET['id'];
}
if (
(is_admin() && !kc_admin_enable()) ||
!current_user_can( 'edit_post', $post_id )
) return;
/*
Convert maps from php to js
*/
echo '<script type="text/javascript">';
echo 'var kc_maps = '.json_encode( (object)$this->maps ).';';
echo 'var kc_maps_views = '.json_encode( $this->maps_views ).';';
echo 'var kc_maps_view = '.json_encode( $this->maps_view ).';';
echo '</script>';
}
public function convert_paramTypes(){
$type_support = array();
foreach ($this->param_types as $name => $func) {
$method = null;
if (is_array($func))
$method = method_exists($func[0], $func[1]);
if (function_exists($func) || $method) {
echo '<script type="text/html" id="tmpl-kc-field-type-'.esc_attr($name).'-template">';
if($method)
call_user_func($func);
else
$func();
echo "</script>\n";
if (!in_array($name, $type_support))
array_push ($type_support, $name);
}
}
foreach ($this->param_types_cache as $name => $func) {
if (!in_array($name, $type_support))
array_push ($type_support, $name);
}
?>
<script type="text/javascript">
var kc_param_types_support = <?php echo json_encode($type_support); ?>
</script>
<?php
}
public function convert_paramTypes_cache(){
/*
Convert param types to js
*/
foreach ($this->param_types_cache as $name => $func) {
if (function_exists( $func )) {
echo '<script type="text/html" id="tmpl-kc-field-type-'.esc_attr($name).'-template">';
$func();
echo "</script>";
}
}
}
public function add_map_param($map = '', $param = '', $index = null, $group = '') {
if( isset( $this->maps[ $map ] ) )
{
if( is_array( $param ) )
{
$params = array();
if (!empty($group) && isset($this->maps[$map]['params'][$group]))
{
$params = $this->maps[$map]['params'][$group];
}else {
foreach ($this->maps[ $map ][ 'params' ] as $group => $params) {
if ($group === 0) {
$params = $this->maps[$map]['params'];
$group = '';
}
break;
}
}
if( $index == null )
{
array_push( $params, $param );
}
else if( empty( $params[ $index-1 ] ) )
{
array_push( $params, $param );
}
else
{
$new_array = array();
$done = false;
$j = 0;
for( $i = 0; $i <= count( $params ); $i++ )
{
if( $i != $index-1 )
{
if( isset( $params[$j] ) )
$new_array[ $i ] = $params[$j];
$j++;
}
else
{
$new_array[ $i ] = $param;
$done = true;
}
}
if( $done == false )
array_push( $new_array, $param );
$params = $new_array;
}
if( $group === '' )
$this->maps[ $map ][ 'params' ] = $params;
else $this->maps[ $map ][ 'params' ][$group] = $params;
}
}
}
public function remove_map_param( $map = '', $name = '', $group = '' ){
if (isset($this->maps[$map]) && isset($this->maps[$map]['params'])) {
if ($name != '') {
$new_array = array();
$i = 0;
foreach ($this->maps[$map]['params'] as $key => $params) {
if ($group == '' && isset($params[0]) && isset($params[0]['name']))
$group = $key;
if ($group !== '' && isset($this->maps[$map]['params'][$group])) {
if ($key == $group) {
$new_array = array();
foreach ($this->maps[$map]['params'][$key] as $nn => $param) {
if (isset($param['name']) && $param['name'] == $name)
unset($this->maps[$map]['params'][$key][$nn]);
}
}
}else{
foreach( $this->maps[$map]['params'] as $nn => $param ){
if (isset($param['name']) && $param['name'] == $name)
unset($this->maps[$map]['params'][$nn]);
}
}
}
}
}
}
public function update_map ($map = '', $name = '', $val = '') {
if (isset($this->maps[$map]))
{
if (!isset($this->maps[$map][$name]) && is_array($val))
$this->maps[$map][$name] = array();
if (is_array($val) && is_array($this->maps[$map][$name])) {
foreach ($val as $n => $v) {
if (is_array($v)) {
if (!isset($this->maps[$map][$name][$n]) || !is_array($this->maps[$map][$name][$n]))
$this->maps[$map][$name][$n] = array();
foreach ($v as $k => $l) {
if (!is_array($l)) {
$this->maps[$map][$name][$n][$k] = $l;
} else {
foreach ($l as $j => $r) {
$this->maps[$map][$name][$n][$k][$j] = $r;
}
}
}
} else {
$this->maps[$map][$name][$n] = $v;
}
}
} else if(!is_array($val) && !is_array($this->maps[$map][$name])) {
$this->maps[$map][$name] = $val;
}
}
}
public function set_default_value ($map = '', $param_name = '', $val = '') {
if (isset($this->maps[$map]))
{
foreach ($this->maps[$map]['params'] as $n => $params) {
if( is_array($params) )
foreach ($params as $k => $v) {
if( is_array( $v ) && $v['name'] == $param_name ){
$this->maps[$map]['params'][$n][$k]['value'] = $val;
}
}
}
}
}
public function set_priority ($element = '', $priority = 1000) {
if (isset($this->maps[$element]))
{
$this->maps[$element]['priority'] = $priority;
}
}
public function add_icon_source( $source ){
$source = esc_url($source);
$path = str_replace( WP_PLUGIN_URL, untrailingslashit( WP_PLUGIN_DIR ), $source );
$path = str_replace( site_url(), untrailingslashit( ABSPATH ), $path );
if( is_file( $path ) ){
$this->icon_sources[] = $source;
}
}
public function get_icon_sources(){
return $this->icon_sources;
}
public function set_template_path( $path ){
if( is_dir( $path ) )
{
array_push( $this->template_path_extend, $path );
}
}
public function locate_profile_sections( $profiles = array() ){
if( !is_array( $profiles ) )
$profiles = array( $profiles );
foreach( $profiles as $path ){
if( file_exists( $path ) ){
$path_info = pathinfo( $path );
$path = str_replace( untrailingslashit( ABSPATH ), '', $path );
if( !in_array( $path, $this->profile_section_paths ) && $path_info['extension'] == 'kc' ){
array_push( $this->profile_section_paths, $path );
}
}
}
}
public function get_profile_sections(){
$list = array();
$from_db = $this->get_profiles_db();
$slug = '';
if( !is_array( $this->profile_section_paths ) )
return $list;
foreach( $this->profile_section_paths as $path ){
$slug = sanitize_title( basename( $path, '.kc' ) );
if( !isset( $from_db[ $slug ] ) )
$list[ $slug ] = $path;
}
return $list;
}
public function get_data_profile ($name = ''){
$profile_section_paths = $this->get_profile_sections();
if( isset( $profile_section_paths[ $name ] ) && is_file( untrailingslashit( ABSPATH ).$profile_section_paths[ $name ] ) ){
$file = untrailingslashit( ABSPATH ).$profile_section_paths[ $name ];
$path_info = pathinfo( $file );
if( $path_info['extension'] != 'kc' )
return false;
$fp = @fopen( $file, 'r' );
$data = '';
if( !empty( $fp ) ){
$data = @fread( $fp, filesize( $file ) );
$data = base64_encode( $data );
$name = str_replace( array( '-', '_' ), array( ' ', ' ' ), basename( $name, '.kc' ) );
$slug = sanitize_title( basename( $name, '.kc' ) );
@fclose( $fp );
return array( $name, $slug, $data );
} return false;
}else return false;
}
public function get_template_path_extend( $base = '' ){
$path = '';
foreach( $this->template_path_extend as $tmpl )
{
if( file_exists( $tmpl.$base ) )
$path = $tmpl.$base;
}
return $path;
}
public function get_template_path ($base = ''){
return $this->template_path.$base;
}
public function prebuilt_template ($name = '', $pack = '') {
$atx = explode('.', $pack);
$type = array_pop($atx);
if (empty($name) || empty($pack) || $type != 'xml' || !file_exists($pack))
return false;
$this->prebuilt_templates[$name] = $pack;
}
public function get_prebuilt_templates ($st = 'registered', $data = array()) {
if ($st == 'registered')
return $this->prebuilt_templates;
else if ($st == 'load_sections') {
return kc_prerebuilt_templates($data, $this->prebuilt_templates);
}
return null;
}
private function register_shortcodes(){
global $shortcode_tags;
$shortcode = new kc_load_shortcodes();
$this->maps = apply_filters( 'kc_maps', $this->maps );
foreach( $this->maps as $name => $atts ){
if( isset( $shortcode_tags[$name] ) )
$this->shortcode_tags[$name] = $shortcode_tags[$name];
add_shortcode( $name, array( &$shortcode, 'kc_'.$name ) );
}
}
public function do_shortcode( $content = '' ){
if( empty( $content ) )
return '';
global $kc_front;
if( !isset( $kc_front ) )
return do_shortcode( $content );
else return $kc_front->do_shortcode( $content );
}
public function get_default_atts( $params ){
$sc = $params[2];
if( isset( $this->maps[$sc] ) ){
$pairs = array();
if( is_array( $params[0]))
$pairs = $params[0];
$reparams = $params[0];
foreach( $this->params_merge( $sc ) as $param ){
$name = $param['name'];
if( isset( $reparams[ $name ] ) && $reparams[ $name ] === '__empty__' ){
$param['value'] = '';
$reparams[ $name ] = '';
}
if( isset( $param['value'] ) )
$pairs[ $name ] = $param['value'];
else
$pairs[ $name ] = '';
if( in_array( $param['type'], array( 'editor', 'textarea', 'group' ) ) ){
if( !empty( $pairs[ $name ] ) ){
$pairs[ $name ] = kc_images_filter(base64_decode($pairs[$name]));
if( $param['type'] == 'group' )
$pairs[ $name ] = $this->get_default_group_atts( $pairs[ $name ], $param['params'] );
}
if( isset( $reparams[ $name ]) && !empty( $reparams[ $name ] ) ){
$reparams[ $name ] = kc_images_filter(base64_decode(str_replace( "\n", '', $reparams[$name])));
if( $param['type'] == 'group' )
$reparams[ $name ] = $this->get_default_group_atts($reparams[ $name ], $param['params']);
}
}
}
$atts = shortcode_atts( $pairs, $reparams, $sc );
return $atts;
}else return array();
}
public function get_default_group_atts( $atts, $params ){
$atts = json_decode( $atts, true );
if( count( $atts ) > 0 ){
foreach( $atts as $key => $obj ){
$atts[$key] = (array)$atts[$key];
foreach( (array)$params as $i => $std ){
if( !isset( $atts[ $key ][ $std['name'] ] ) && isset( $sid['value'] ) ){
$atts[ $key ][ $std['name'] ] = $sid['value'];
}
if( isset( $atts[ $key ][ $std['name'] ] ) && in_array( $std['type'], array( 'editor', 'textarea' ) ) )
$atts[ $key ][ $std['name'] ] = kc_images_filter(base64_decode($atts[$key][$std['name']]));
if( $std['type'] == 'group' )
$atts[ $key ][ $std['name'] ] = __( 'Do not support field type GROUP in its self', 'kingcomposer' );
}
$atts[$key] = (object)$atts[$key];
}
}
return $atts;
}
public function get_profiles_db( $_return = true ){
global $wpdb;
$list = array();
$query = "SELECT * FROM `".$wpdb->prefix."options` WHERE `".$wpdb->prefix."options`.`option_name` LIKE 'kc-profile%'";
$item = '';
$name = '';
$fromDB = $wpdb->get_results( $query );
if( isset( $fromDB ) ){
foreach( $fromDB as $profile ){
$name = substr( $profile->option_name, 11 );
if( !in_array( $name, $list ) ){
$item = @unserialize( $profile->option_value );
$list[ $name ] = isset( $item[0] ) ? $item[0] : str_replace( array( '-', '_' ), array( ' ', ' ' ), $name );
}
}
}
if( $_return === false ){
return json_encode( (object)$list );
}
return $list;
}
public function get_post_meta(){
global $post;
$data = array( "mode" => "", "classes" => "", "css" => "", "thumbnail" => "" );
if( isset( $post ) && isset( $post->ID ) && !empty( $post->ID ) ){
$meta = get_post_meta( $post->ID , 'kc_data', true );
if (!empty( $meta ) ){
$data = $meta;
}
}
return $data;
}
public function settings(){
return array_merge( array(
'content_types' => array(),
'load_icon' => '',
'css_code' => '',
'max_width' => '',
'animate' => '',
'envato_username' => '',
'api_key' => '',
'license_key' => '',
'instantor' => '',
'theme_key' => ''
), (array)$this->settings );
}
public function get_content_types(){
$default = $this->required_content_types;
$settings = $this->settings();
$types = $settings['content_types'];
if( empty( $types ) ){
return $default;
}else if( !is_array( $types ) ){
$types = explode( ',', $types );
}
return array_merge( $default, $types );
}
public function add_content_type( $type, $section = true ){
if( is_string( $type ) )
{
if( !in_array( $type, $this->required_content_types ) )
array_push( $this->required_content_types, $type );
if( $section === false && !in_array( $type, $this->ignored_section_content_types ) )
array_push( $this->ignored_section_content_types, $type );
}else if( is_array( $type ) ){
foreach( $type as $item ){
if( !in_array( $item, $this->required_content_types ) )
array_push( $this->required_content_types, $item );
if( $section === false && !in_array( $item, $this->ignored_section_content_types ) )
array_push( $this->ignored_section_content_types, $item );
}
}
}
public function get_required_content_types(){
return $this->required_content_types;
}
public function get_ignored_section_content_types(){
return $this->ignored_section_content_types;
}
public function add_filter( $name, $callback ){
if( is_callable( $callback ) ){
if( !isset( $this->add_filters[$name] ) || !is_array( $this->add_filters[$name] ) )
$this->add_filters[$name] = array();
$this->add_filters[$name][] = $callback;
}
}
public function params_merge( $name ){
if( !isset( $name ) || empty( $name ) || !isset( $this->maps[ $name ] ) )
return array();
$params = $this->maps[ $name ]['params'];
$merge = array();
if( isset( $params[0] ) ){
return $params;
}else{
foreach( $params as $k => $v ){
if( isset( $v[0] ) ){
foreach( $v as $prm )
array_push( $merge, $prm );
}
}
}
return $merge;
}
public function params_obj( $name ){
if( !isset( $name ) || empty( $name ) || !isset( $this->maps[ $name ] ) )
return array();
$params = $this->maps[ $name ]['params'];
$merge = array();
if( isset( $params[0] ) ){
foreach( $params as $k => $v ){
$merge[$v['name']] = $v;
}
}else{
foreach( $params as $k => $v ){
if( isset( $v[0] ) ){
foreach( $v as $p => $t )
$merge[$t['name']] = $t;
}
}
}
return $merge;
}
public function js_callback( $func ){
array_push( $this->live_js_callback, array( 'callback' => $func ) );
}
public function esc( $str ) {
if( empty( $str ) )
return '';
return str_replace( array('<','>','[',']','"','\''), array( ':lt:', ':gt:', ':lsqb:', ':rsqb:', ':quot:', ':apos:' ), $str );
}
public function unesc( $str ){
return str_replace( array( ':lt:', ':gt:', ':lsqb:', ':rsqb:', ':quot:', ':apos:' ), array('<','>','[',']','"','\''), $str );
}
public function user_can_edit( $post = null ){
global $wp_the_query, $current_user;
if( !isset( $post ) || empty( $post ) || $post === null )
global $post;
if (!is_admin() && (!isset($_GET['kc_action']) || $_GET['kc_action'] != 'live-editor')){
$post = $wp_the_query->get_queried_object();
}
wp_get_current_user();
if( isset($post) && is_object($post) && isset($post->ID) && isset($post->post_author) &&
isset($current_user) && is_object($current_user) && isset($current_user->ID) &&
(current_user_can('edit_others_posts', $post->ID) || ($post->post_author == $current_user->ID))
){
return true;
}
return false;
}
public static function is_live(){
if( isset( $_GET['kc_action'] ) && $_GET['kc_action'] == 'live-editor' )
return true;
else return false;
}
public function secrect_storage( $key = '', $mode = '' ){
if( empty( $key ) )
return '';
$kc_secrect_storage = get_option('kc_secrect_storage');
if( $kc_secrect_storage === false ){
add_option( 'kc_secrect_storage', array(), null, 'no' );
}
if( !is_array( $kc_secrect_storage ) )
$kc_secrect_storage = array();
if( $mode != 'hidden' ){
foreach( $kc_secrect_storage as $secrect => $relate ){
if( $relate == $key )
return $secrect;
}
/*
* If the key has not been hidden yet
*/
$mode = 'encrypt';
}
if( $mode == 'encrypt' ){
if( !isset( $kc_secrect_storage[$key] ) ){
$relate_key = 'kc-secrect-'.rand(4564585,234523453456);
$kc_secrect_storage[$key] = $relate_key;
update_option( 'kc_secrect_storage', $kc_secrect_storage );
return $relate_key;
}else return $kc_secrect_storage[$key];
}
}
public function enqueue_fonts(){
$fonts = get_option('kc-fonts');
$uri = '//fonts.googleapis.com/css?family=';
if( !is_array( $fonts ) || count( $fonts ) === 0 )
return;
foreach( $fonts as $family => $cfg ){
$params = urldecode( $family );
$params = str_replace( ' ', '+', $params );
if( isset( $cfg[3] ) ){
$params .= ':'.$cfg[3];
}else $params .= ':'.$cfg[1];
if( isset( $cfg[2] ) )
$params .= '&subset='.$cfg[2];
else $params .= '&subset='.$cfg[0];
$unique = strtolower( str_replace( ' ', '-', urldecode( $family ) ) );
wp_enqueue_style( $unique, $uri.$params, false, KC_VERSION );
}
}
public function verify( $code = '' ){
if(!defined('KC_LICENSE') && strlen($code) == 41)
define('KC_LICENSE', esc_attr($code));
}
public function kcp_remote( $code = '', $act = 'kcp_access' ){
/*
* check valid code
*/
if (empty ($code) || strlen ($code) != 41)
return false;
/*
* prepare info
*/
$theme = sanitize_title( basename( get_template_directory() ) );
$domain = str_replace( '=', '-d', base64_encode( site_url() ) );
$url = $this->kcp_uri.$act.'&domain='.$domain.'&theme='.$theme.'&license='.$code;
$date = time()+604800;
/*
* create a request to kcp
*/
$request = @wp_remote_get($url);
$response = @wp_remote_retrieve_body( $request );
if (is_wp_error($request) || empty($response)) {
$response = @file_get_contents($url);
}
$response = json_decode( $response, true );
$data = array('pack'=>'trial', 'theme'=>$theme, 'domain'=>$domain, 'date'=>$date, 'key'=>$code, 'stt'=>0);
/*
* merge with default
*/
foreach ($data as $i => $v)
{
if (isset ($response[$i]))
$data[$i] = $response[$i];
}
/*
* storage
*/
if ($data['stt'] == 1)
{
if ($act == 'kcp_access')
{
if (get_option ('kc_tkl_pdk' ) === false)
add_option ('kc_tkl_pdk', $data , null, 'no');
else update_option ('kc_tkl_pdk', $data);
}
else if ($act == 'revoke_domain')
{
delete_option ('kc_tkl_pdk');
}
}
return $data;
}
private function auto_verify(){
if (defined('KC_LICENSE') && ( $this->pdk['pack'] == 'trial' || $this->check_pdk() != 1))
{
$key = KC_LICENSE;
$time = time();
/*
* if nonactivate + defined license key
*/
if (get_option('kc_license_log') === false)
{
/*
* storage log
*/
$kcp_log = array();
add_option('kc_license_log', $kcp_log, null, 'no' );
}else $kcp_log = get_option('kc_license_log');
/*
* Make sure that do not sent too much request
*/
if (!isset( $kcp_log[$key] ) || ( $kcp_log[$key]['timer'] < $time && $kcp_log[$key]['counter'] < 10))
{
$data = $this->kcp_remote($key);
if(!isset($kcp_log[$key]) || !is_array($kcp_log[$key])){
$kcp_log[$key] = array( 'timer' => $time+180, 'counter' => 0 );
}else{
$kcp_log[$key]['timer'] = $time+180;
$kcp_log[$key]['counter']++;
}
update_option('kc_license_log', $kcp_log);
}
else if( $kcp_log[$key]['timer'] < $time-(60*60*24*7) )
{
$kcp_log[$key]['timer'] = $time+300;
$kcp_log[$key]['counter'] = 0;
}
}
}
public function check_pdk(){
if( !isset( $this->pdk['pack'] ) || !isset( $this->pdk['date'] ) )
return 0;
else if( $this->pdk['date'] < time() ){
if( $this->pdk['pack'] == 'trial' )
return 3;
else return 2;
}else if( $this->pdk['date'] - time() > 604800 && $this->pdk['pack'] == 'trial' )
return 3;
return 1;
}
public function get_pdk(){
return $this->pdk;
}
public function get_support_content_types(){
$settings = $this->settings();
if( !isset( $settings['content_types'] ) )
$settings['content_types'] = array();
$allows_types = array_merge( (array)$settings['content_types'], (array)$this->get_required_content_types() );
if (count($this->prebuilt_templates) > 0) {
array_unshift( $allows_types , 'prebuilt-templates-('.count($this->prebuilt_templates).')' );
}
return $this->apply_filters('kc_allows_types', $allows_types);
}
public function get_sidebars(){
global $wp_registered_sidebars;
$sidebars = array();
if (isset($wp_registered_sidebars))
{
foreach ($wp_registered_sidebars as $name => $args)
{
$sidebars[$name] = $args['name'];
}
}
return $sidebars;
}
public function plugin_active ($plugin = '') {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
/*
* Check value of an object
*/
public function is ($obj, $var, $val) {
if (count((array)$obj) === 0)
return false;
$check = '';
foreach ($var as $i) {
if (isset($obj[$i]))
$check = $obj[$i];
else return false;
}
if ($check == $val)
return true;
else return false;
}
public function register_map_styles($styles) {
return $styles+$this->map_styles;
}
public function register_map_scripts($scripts) {
return $scripts+$this->map_scripts;
}
public function do_action($tag, $args){
//some stuff to checking license
do_action($tag, $args);
}
public function apply_filters($tag, $args){
//some stuff to checking license
return apply_filters($tag, $args);
}
public function default_image(){
return $this->apply_filters('kc_default_image', KC_URL.'/assets/images/default.jpg');
}
}
/*
*
* Use magic method to autoload shortcode templates
*
*/
class kc_load_shortcodes{
public function __call( $func, $params ){
global $kc;
$shortcode = $params[2];
$content = str_replace( array('”', '″' ), array( '"', '"' ), $params[1] );
$base = $shortcode.'.php';
$atts = $kc->get_default_atts( $params );
$path = $kc->get_template_path_extend( $base );
$content = apply_filters( 'kc_shortcode_content', $content, $shortcode );
if( isset( $atts['content'] ) && isset( $content ) && !empty( $content ) )
$atts['content'] = $content;
$atts = apply_filters( 'kc_shortcode_attributes', $atts, $shortcode );
if( isset( $kc->shortcode_tags[$shortcode] ) && is_callable( $kc->shortcode_tags[$shortcode] ) ){
return call_user_func( $kc->shortcode_tags[$shortcode], $atts, $content, $shortcode );
}
if( empty( $path ) )
$path = $kc->get_template_path( $base );
if( !file_exists( $path ) ){
return __('KingComposer Error: could not find shortcode template: ', 'kingcomposer').get_template_directory().KDS.'kingcomposer'.KDS.$base.' <a href="http://docs.kingcomposer.com/display-the-output-of-the-shortcode/" target="_blank">Read More</a>';
}
ob_start();
include $path;
$content = ob_get_contents();
ob_end_clean();
return $content;
}
}
/************************/
global $kc;
$kc = new KingComposer();
// Load kingcomposer core
$kc->load();
/************************/