%PDF- %PDF-
Direktori : /home/dopla/www/wp-content/plugins/kingcomposer/includes/ |
Current File : /home/dopla/www/wp-content/plugins/kingcomposer/includes/kc.ajax.php |
<?php /** * * King Composer * (c) KingComposer.com * */ if(!defined('KC_FILE')) { header('HTTP/1.0 403 Forbidden'); exit; } class kc_ajax{ public function __construct(){ $ajax_events = array( 'get_welcome' => false, 'get_thumbn' => true, 'get_featured' => true, 'get_thumbn_size' => true, 'load_profile' => false, 'download_profile' => false, 'create_profile' => false, 'rename_profile' => false, 'delete_profile' => false, 'delete_section' => false, 'update_section' => false, 'instant_save' => false, 'suggestion' => false, 'tmpl_storage' => false, 'kcp_access' => false, 'revoke_domain' => false, 'download_pro' => false, 'update_plugin' => false, 'add_font' => false, 'update_font' => false, 'delete_font' => false, 'load_sections' => false, 'load_section' => false, 'push_section' => false, 'update_option' => false, 'update_mapper' => false, 'enable_optimized' => false, 'switch_off' => false, 'share_section' => false, 'load_element_via_ajax' => false, 'installed_extensions' => false, 'store_extensions' => false, ); foreach ( $ajax_events as $ajax_event => $nopriv ) { add_action( 'wp_ajax_kc_' . $ajax_event, array( $this, esc_attr( $ajax_event ) ) ); if ( $nopriv ) { add_action( 'wp_ajax_nopriv_kc_' . $ajax_event, array( $this, esc_attr( $ajax_event ) ) ); } } } public function get_welcome(){ $data = array( 'message' => __('Hello, I\'m King Composer!', 'kingcomposer') ); wp_send_json( $data ); } public function get_thumbn(){ global $kc; $id = !empty( $_GET['id'] ) ? esc_attr($_GET['id']) : ''; $size = !empty( $_GET['size'] ) ? esc_attr($_GET['size']) : 'medium'; $type = !empty( $_GET['type'] ) ? esc_attr($_GET['type']) : ''; if ($type == 'filter_url') { header( 'location: '.kc_attach_url(KC_SITE.urldecode($id))); exit; } if( $id == '' || $id == 'undefined' ) { header( 'location: '.$kc->apply_filters('kc_default_image', KC_URL.'/assets/images/get_start.jpg') ); exit; } if( $type == 'post_featured' ) { $img = get_the_post_thumbnail_url( $id, $size ); if (strpos($source, site_url()) !== false) { $meta = get_post_meta( $id, 'kc_data', true ); if (!empty($meta) && isset($meta['thumbnail'])) $img = $meta['thumbnail']; } if( !empty( $img ) ){ header( 'location: '.$img ); }else{ header( 'location: '. $kc->apply_filters('kc_section_default_image', KC_URL.'/assets/images/get_start_section.jpg')); } exit; } $img = wp_get_attachment_image_src( $id, $size ); if( !empty( $img[0] ) ) { header( 'location: '.$img[0] ); } else { header( 'location: '. $kc->default_image()); } exit(); } public function get_thumbn_size( $abc ){ global $kc; $imid = !empty( $_GET['id'] ) ? esc_attr( $_GET['id'] ) : ''; $size = !empty( $_GET['size'] ) ? esc_attr( $_GET['size'] ) : ''; if( empty($imid) || $imid == 'undefined' ) { header( 'location: '. $kc->default_image()); exit; } $img = wp_get_attachment_image_src( $imid, 'full' ); if( !empty($img[0]) ) { if ( !empty($size) ) $re_img = kc_tools::createImageSize( $img[0], $size); if (!empty($re_img)) header( 'location: '.$re_img ); else header( 'location: '.$img[0] ); } else { header( 'location: '.KC_URL.'/assets/images/default.jpg' ); } } public function download_profile(){ $name = isset( $_GET['name'] ) ? $_GET['name'] : ''; if( empty( $name ) ){ echo '[]'; exit; } $name = sanitize_title( esc_attr( $name ) ); if( get_option( 'kc-profile-'.$name ) !== false ){ $data = get_option( 'kc-profile-'.$name, true ); if( isset( $data[1] ) && !empty( $data[1] ) ) echo base64_decode( $data[1] ); else echo '[]'; }else echo '[]'; exit; } public function load_profile(){ global $kc; $profile_section_paths = $kc->get_profile_sections(); $name = !empty( $_POST['name'] ) ? $_POST['name'] : ''; $name = str_replace( array('..'), array( '' ), esc_attr( $name ) ); $data = ''; $slug = sanitize_title( $name ); if( $name == '' ){ $result = array( 'message' => esc_html__('Error #623! The name must not be empty', 'kingcomposer'), 'status' => 'fail' ); } else{ if( isset( $profile_section_paths[ $name ] ) && is_file( untrailingslashit( ABSPATH ).$profile_section_paths[ $name ] ) ){ $profile = $kc->get_data_profile( $name ); if( $profile !== false ){ if( isset( $profile[0] ) && !empty( $profile[0] ) && $profile[0] !== null ) $name = $profile[0]; if( isset( $profile[1] ) && !empty( $profile[1] ) && $profile[1] !== null ) $slug = $profile[1]; if( isset( $profile[2] ) && !empty( $profile[2] ) && $profile[2] !== null ) $data = $profile[2]; }else{ $message = esc_html__('Error #795! opening file Permission denied', 'kingcomposer').': '. $profile_section_paths[ $name ]; wp_send_json( array( 'message' => $message, 'status' => 'fail' ) ); return; } } else if( get_option( 'kc-profile-'.$name ) !== false ){ $getDB = get_option( 'kc-profile-'.$name, true ); $slug = $name; if( isset( $getDB[0] ) && !empty( $getDB[0] ) && $getDB[0] !== null ) $name = $getDB[0]; else $name = ''; if( isset( $getDB[1] ) && !empty( $getDB[1] ) && $getDB[1] !== null ) $data = $getDB[1]; else $data = base64_encode(''); } else{ $message = esc_html__('Error #528! profile not found', 'kingcomposer').': '.$name; wp_send_json( array( 'message' => $message, 'status' => 'fail' ) ); return; } } $result = array( 'message' => '<div class="mgs-c-status"><i class="et-happy"></i></div><h1 class="mgs-t02">'. esc_html__('Your sections profile has been downloaded successful', 'kingcomposer').'</h1>'. '<h2>'.esc_html__('Now you can use sections from new profile', 'kingcomposer').'</h2>', 'status' => 'success', 'name' => $name, 'slug' => $slug, 'data' => $data ); wp_send_json( $result ); exit; } public function create_profile(){ $name = !empty( $_POST['name'] ) ? $_POST['name'] : ''; if( $name == '' ){ $result = array( 'message' => esc_html__('Error #140! The name must not be empty', 'kingcomposer'), 'status' => 'fail' ); }else{ $slug = !empty( $_POST['slug'] ) ? $_POST['slug'] : sanitize_title( $name ); $data = !empty( $_POST['data'] ) ? $_POST['data'] : ''; if( get_option( 'kc-profile-'.$slug ) === false ){ add_option( 'kc-profile-'.$slug, array( $name, $data ), null, 'no' ); $result = array( 'message' => __('Your sections profile has been created successful', 'kingcomposer'), 'status' => 'success', 'name' => $name, 'slug' => $slug ); }else{ $result = array( 'message' => esc_html__('Error #101! The name must not be empty', 'kingcomposer'), 'status' => 'fail', 'name' => $name, 'slug' => $slug ); } } wp_send_json( $result ); exit; } public function rename_profile(){ $name = !empty( $_POST['name'] ) ? $_POST['name'] : ''; if( $name == '' ){ $result = array( 'message' => esc_html__('Error #197! The name must not be empty', 'kingcomposer'), 'status' => 'fail' ); }else{ $slug = !empty( $_POST['slug'] ) ? $_POST['slug'] : sanitize_title( $name ); $data = !empty( $_POST['data'] ) ? $_POST['data'] : ''; if( get_option( 'kc-profile-'.$slug ) === false ){ $result = array( 'message' => __('Error #501! could not find profile', 'kingcomposer'), 'status' => 'fail', 'name' => $name, 'slug' => $slug ); }else{ $data_db = get_option( 'kc-profile-'.$slug, true ); $data_db[0] = $name; update_option( 'kc-profile-'.$slug, $data_db ); $result = array( 'message' => esc_html__('The profile has been changed', 'kingcomposer'), 'status' => 'success', 'name' => $name, 'slug' => $slug ); } } wp_send_json( $result ); exit; } public function delete_profile(){ $slug = !empty( $_POST['slug'] ) ? $_POST['slug'] : ''; if( $slug == '' ){ $result = array( 'message' => esc_html__('Error #167! The slug must not be empty', 'kingcomposer'), 'status' => 'fail' ); }else{ if( get_option( 'kc-profile-'.$slug ) === false ){ $result = array( 'message' => __('Error #723! could not find profile', 'kingcomposer'), 'status' => 'fail', 'slug' => $slug ); }else{ delete_option( 'kc-profile-'.$slug ); $result = array( 'message' => esc_html__('The profile has been deleted', 'kingcomposer'), 'status' => 'success', 'slug' => $slug ); } } wp_send_json( $result ); exit; } public function update_section(){ $slug = !empty( $_POST['slug'] ) ? $_POST['slug'] : ''; if( $slug == '' ){ $result = array( 'message' => esc_html__('Error #193! The slug must not be empty', 'kingcomposer'), 'status' => 'fail' ); }else{ $id = !empty( $_POST['id'] ) ? $_POST['id'] : ''; $name = !empty( $_POST['name'] ) ? $_POST['name'] : ''; $data = !empty( $_POST['data'] ) ? $_POST['data'] : ''; if( !empty( $data ) ) $data = json_decode( base64_decode( $data ) ); if( get_option( 'kc-profile-'.$slug ) === false ){ global $kc; $profile = $kc->get_data_profile( $slug ); if( $profile !== false ){ $profile_data = json_decode( base64_decode( $profile[2] ) ); $found = false; foreach( $profile_data as $key => $value ){ if( $value->id == $id ){ $profile_data[ $key ] = $data; $found = true; } } if( $found === false ) array_push( $profile_data, $data ); $data = base64_encode( json_encode( $profile_data ) ); }else{ $data = base64_encode( json_encode( array( $data ) ) ); } add_option( 'kc-profile-'.$slug, array( $name, $data ) , null, 'no' ); $result = array( 'message' => esc_html__('The section has been updated', 'kingcomposer'), 'status' => 'success', 'name' => $name, 'data' => $data, 'slug' => $slug ); } else { $data_db = get_option( 'kc-profile-'.$slug, true ); $from_db = json_decode( base64_decode( $data_db[1] ) ); if( is_array( $from_db ) ){ $found = false; if( is_array( $from_db ) ){ foreach( $from_db as $key => $val ){ if( $val->id == $id ){ $from_db[ $key ] = $data; $found = true; } } } if( !$found ) array_push( $from_db, $data ); }else{ $from_db = array( $data ); } $from_db = base64_encode( json_encode( $from_db ) ); update_option( 'kc-profile-'.$slug, array( $data_db[0], $from_db ) ); $result = array( 'message' => esc_html__('The section has been updated', 'kingcomposer'), 'status' => 'success', 'name' => $data_db[0], 'data' => $from_db, 'slug' => $slug ); } } wp_send_json( $result ); exit; } public function delete_section(){ $name = isset( $_POST['name'] ) ? $_POST['name'] : ''; $id = isset( $_POST['id'] ) ? $_POST['id'] : ''; $slug = !empty( $_POST['slug'] ) ? $_POST['slug'] : sanitize_title( $name ); $data = !empty( $_POST['data'] ) ? $_POST['data'] : ''; if( get_option( 'kc-profile-'.$slug ) === false ){ $sections = json_decode( base64_decode( $data ) ); if( is_array( $sections ) ){ $data = array(); foreach( $sections as $key => $value ){ if( !isset( $value->id ) ) $value->id = rand( 100000, 1000000 ); if( $value->id != $id ) array_push( $data, $value ); } $data = base64_encode( json_encode( $data ) ); add_option( 'kc-profile-'.$slug, array( $name, $data ) , null, 'no' ); $result = array( 'message' => esc_html__('The section has been removed', 'kingcomposer'), 'status' => 'success', 'name' => $name, 'data' => $data, 'slug' => $slug ); }else{ $result = array( 'message' => esc_html__('Error profile data structure #416', 'kingcomposer'), 'status' => 'fail', 'name' => $name, 'slug' => $slug ); } }else{ $data_db = get_option( 'kc-profile-'.$slug, true ); $sections = @json_decode( base64_decode( $data_db[1] ) ); if( is_array( $sections ) ){ $data = array(); foreach( $sections as $key => $value ){ if( !isset( $value->id ) ) $value->id = rand( 100000, 1000000 ); if( $value->id != $id ) array_push( $data, $value ); } $data_db[1] = base64_encode( json_encode( $data ) ); update_option( 'kc-profile-'.$slug, $data_db ); $result = array( 'message' => esc_html__('The section has been removed', 'kingcomposer'), 'status' => 'success', 'name' => $data_db[0], 'data' => $data_db[1], 'slug' => $slug ); }else{ $result = array( 'message' => esc_html__('Error profile data structure #426', 'kingcomposer'), 'status' => 'fail', 'name' => $data_db[0], 'slug' => $slug ); } } wp_send_json( $result ); exit; } public function update_option(){ check_ajax_referer( 'kc-nonce', 'security' ); $data = json_decode(base64_decode($_POST['options']), true); if( count( $data ) >0 ){ foreach( $data as $k => $v ){ echo $k; if( !empty( $k )) update_option( $k, $v ); } } $result = array( 'message' => esc_html__('Update options successful', 'kingcomposer'), 'status' => 'success', ); wp_send_json( $result ); } public function update_mapper(){ check_ajax_referer( 'kc-mapper-nonce', 'security' ); if (empty($_POST['tag']) || empty($_POST['task']) || (empty($_POST['data']) && $_POST['task'] == 'update')) { wp_send_json(array( 'message' => esc_html__('Error: Missing data', 'kingcomposer'), 'stt' => 0, )); exit; } $data = json_decode(base64_decode($_POST['data']), true); $tag = $_POST['tag']; $task = $_POST['task']; $data = apply_filters('kc_update_mapper', $data, $tag, $task); $datas = get_option('kc_shortcodes_mapper', true); if (!$datas) add_option('kc_shortcodes_mapper', array(), null, 'no'); if (!is_array($datas)) $datas = array(); if ($task == 'update' && is_array($data)) { $datas[$tag] = $data; update_option('kc_shortcodes_mapper', $datas); wp_send_json(array( 'message' => esc_html__('Update maps successful', 'kingcomposer'), 'stt' => 1, )); exit; } if ($task == 'import' && is_array($data)) { update_option('kc_shortcodes_mapper', $data); wp_send_json(array( 'message' => esc_html__('Update maps successful', 'kingcomposer'), 'stt' => 1, )); exit; } if ($task == 'delete') { unset ($datas[$tag]); update_option('kc_shortcodes_mapper', $datas); wp_send_json(array( 'message' => esc_html__('Update maps successful', 'kingcomposer'), 'stt' => 1, )); exit; } wp_send_json(array( 'message' => esc_html__('Error: Incorrect data structure', 'kingcomposer'), 'stt' => 0, )); exit; } public function instant_save(){ check_ajax_referer( 'kc-nonce', 'security' ); $addition_check = false; if (!isset( $_POST['id'] ) || !isset( $_POST['title'] ) || !isset( $_POST['content'])) { echo $this->msg( __('Error: Invalid Post ID', 'kingcomposer'), 0 ); exit; } $id = esc_attr( $_POST['id'] ); if (get_post_status( $id ) === false) { echo $this->msg( __('Error: Post not exist', 'kingcomposer'), 0 ); exit; } global $wpdb, $kc, $post; $get_post = get_post( $id ); $addition_check = apply_filters('kc_before_instant_save', $addition_check, $id ); if (!isset( $get_post ) || $kc->user_can_edit( $get_post ) === false || $addition_check == true) { echo $this->msg( __('Error: You do not have permission to edit this post', 'kingcomposer'), 0 ); exit; } if (isset( $_POST['live_editor']) && $_POST['live_editor'] == 'yes' && $kc->check_pdk() === 3 && class_exists( 'kc_pro' ) ) { echo -3; exit; } $args = sanitize_post (array( 'ID' => $_POST['id'], 'post_title' => stripslashes( $_POST['title'] ), 'post_content' => stripslashes($_POST['content']), ), 'db' ); $data = array( 'post_content_filtered' => $args['post_content'] ); /* if (current_user_can ('publish_pages')) $data['post_status'] = 'publish'; */ /* * Save the raw first */ $result = $wpdb->update( $wpdb->prefix.'posts', $data, array( 'ID' => $id ) ); if ( false !== $result) { echo $this->msg( __('Your content has been saved Successful', 'kingcomposer'), 1 ); kc_process_save_meta($id, $_POST['meta']); } else { echo $this->msg( __('Error: could not save the content.', 'kingcomposer'), 0 ); } /* * after save the raw content, we'll process cache content */ /*=====================================================*/ /* * Process content before save */ require_once KC_PATH.'/includes/kc.front.php'; $content_processed = ''; if (!empty($args['post_content'])) { $ext = '<style type="text/css" id="kc-basic-css">'.kc_basic_layout_css().'</style>'; /*$ext .= '<p class="kc-off-notice">'.__('Notice: You are using wrong way to display KC Content', 'kingcomposer').', <a href="http://docs.kingcomposer.com/do-shortcode-for-kc-content" target=_blank>Correct It Now</a></p>';*/ $content_processed = $kc->do_shortcode ($args['post_content']); /* * we don't have body class if the plugin was disabled */ if (!empty($content_processed)) { $content_processed = $content_processed; $content_processed = str_replace( array("\n", 'body.kc-css-system'), array("", 'html body'), $content_processed ); } } // reset data after save the raw $data = array('post_content' => $content_processed); // Save post from live editor if (isset( $_POST['task'] ) && $_POST['task'] == 'frontend') { $wpdb->update( $wpdb->prefix.'posts', $data, array( 'ID' => $id ) ); exit; } // Save post from backend editor $data['post_title'] = stripslashes( $args['post_title'] ); $result = $wpdb->update( $wpdb->prefix.'posts', $data, array( 'ID' => $id ) ); exit; } public function suggestion(){ check_ajax_referer( 'kc-nonce', 'security' ); $field_name = isset($_POST['field_name']) ? esc_attr($_POST['field_name']) : 'kc_std'; if (has_filter('kc_autocomplete_'.$field_name)) { $data = apply_filters ('kc_autocomplete_'.$field_name, $_POST); $data['__session'] = isset($_POST['session']) ? $_POST['session'] : ''; wp_send_json ($data); exit; } $data = array( '__session' => isset($_POST['session']) ? $_POST['session'] : '' ); $args = array( 's' => isset( $_POST['s'] ) ? $_POST['s'] : '', 'post_type' => !empty( $_POST['post_type'] ) ? esc_attr( $_POST['post_type'] ) : 'any', 'category' => isset( $_POST['category'] ) ? esc_attr( $_POST['category'] ) : '', 'category_name' => isset( $_POST['category_name'] ) ? esc_attr( $_POST['category_name'] ) : '', 'numberposts' => !empty( $_POST['numberposts'] ) ? esc_attr( $_POST['numberposts'] ) : 120, ); if( isset( $_POST['taxonomy'] ) && !empty( $_POST['taxonomy'] ) ){ $taxonomyObj = get_taxonomy(esc_attr( $_POST['taxonomy'] )); if( isset( $taxonomyObj ) && isset( $taxonomyObj->object_type ) && isset( $taxonomyObj->object_type[0] ) ) $args['post_type'] = $taxonomyObj->object_type[0]; $terms = get_terms( array( 'taxonomy' => esc_attr($_POST['taxonomy']), 'hide_empty' => true, )); $list_terms = array(); foreach( $terms as $k => $term ){ if( !isset( $data[ $_POST['taxonomy'] ] ) ) $data[ $_POST['taxonomy'] ] = array(); $data[ $_POST['taxonomy'] ][] = $term->slug.':'.esc_html(str_replace( array(':',','), array('',''), $term->name)); } }else{ if ( 0 === strlen( $args['s'] ) ) { unset( $args['s'] ); } add_filter( 'posts_search', 'kc_filter_search', 500, 2 ); $posts = get_posts( $args ); if ( is_array( $posts ) && ! empty( $posts ) ) { foreach ( $posts as $post ) { if( !isset( $data[ $post->post_type ] ) ) $data[ $post->post_type ] = array(); $data[ $post->post_type ][] = $post->ID.':'.esc_html(str_replace( array(':',','), array('',''), $post->post_title)); } } } wp_send_json( $data ); exit; } public function tmpl_storage(){ check_ajax_referer( 'kc-nonce', 'security' ); global $kc; $kc->convert_paramTypes_cache(); require_once KC_PATH.'/includes/kc.templates.php'; do_action('kc_tmpl_storage'); echo '<!----END_KC_TMPL---->'; exit; } public function kcp_access(){ check_ajax_referer( 'kc-verify-nonce', 'security' ); $license = isset( $_POST['license'] ) ? esc_html( $_POST['license'] ) : ''; if( strlen( $license ) != 41 ) { echo '-2'; exit; } global $kc; $data = $kc->kcp_remote($license, 'kcp_access'); if( $data === false ) { echo '-2'; exit; } wp_send_json( $data ); exit; } public function revoke_domain(){ check_ajax_referer( 'kc-verify-nonce', 'security' ); global $kc; $pdk = $kc->get_pdk(); $license = $pdk['key']; if( strlen( $license ) != 41 ) { $data = array('stt' => 0, 'message' => 'Error'); } else { $data = $kc->kcp_remote( $license, 'revoke_domain' ); } wp_send_json( $data ); exit; } public function download_pro(){ check_ajax_referer( 'kc-pro-download', 'security' ); $skin_args = array( 'type' => 'web', 'title' => 'Install KC Pro!', 'url' => (is_ssl() ? 'https' : 'http').'://kingcomposer.com/downloads/kc_pro.zip?kc_store_action=download', 'nonce' => 'install-plugin_kc_pro', 'plugin' => '', 'api' => null, 'extra' => array('slug' => 'kc_pro'), ); if ( ! class_exists( 'Plugin_Upgrader', false ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } $skin = new Plugin_Installer_Skin( $skin_args ); $upgrader = new Plugin_Upgrader( $skin ); echo '<div class="kc-pro-download-result">'; if( $upgrader->install($skin_args['url']) === true ){ $result = activate_plugin('kc_pro/kc_pro.php'); if ( is_wp_error( $result ) ) { echo '<p>'.$result->get_error_message().'</p>'; }else{ echo '<h3 class="active-success">Active plugin successfully, reloading the page...</h3>'; } } echo '<br/><br /></div>'; exit; } public function update_plugin(){ check_ajax_referer( 'kc-nonce-update', 'security' ); if (!isset($_POST['slug']) || ($_POST['slug'] != 'kingcomposer' && $_POST['slug'] != 'kc_pro')) { echo '-1'; exit; } $slug = esc_attr ($_POST['slug']); $base = $slug.'/'.$slug.'.php'; $update_plugin = get_site_transient( 'update_plugins' ); if (!isset($update_plugin->response[$base])) { echo '-1'; exit; } $package = $update_plugin->response[$base]->package; $skin_args = array( 'type' => 'web', 'title' => 'Install '.$slug, 'url' => $package, 'nonce' => 'install-plugin_'.$slug, 'plugin' => '', 'api' => null, 'extra' => array('slug' => $slug), ); if ( ! class_exists( 'Plugin_Upgrader', false ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } $skin = new Plugin_Installer_Skin( $skin_args ); $upgrader = new Plugin_Upgrader(); echo '<div class="kc-pro-download-result">'; if( $upgrader->upgrade($package) === true ){ $result = activate_plugin($base); if ( is_wp_error( $result ) ) { echo '<p>'.$result->get_error_message().'</p>'; }else{ echo '<h3 class="active-success">Active plugin successfully, reloading the page...</h3>'; } } echo '<br/><br /></div>'; exit; } public function add_font(){ check_ajax_referer( 'kc-fonts-nonce', 'security' ); $kc_fonts = get_option('kc-fonts'); if( !is_array( $kc_fonts ) ){ $kc_fonts = array(); add_option('kc-fonts', $kc_fonts); } $family = esc_attr($_POST['family']); $subsets = esc_attr($_POST['subsets']); $variants = esc_attr($_POST['variants']); $data = array( 'message' => '', 'stt' => 0, 'data' => $kc_fonts ); if( empty( $family ) ){ $data['message'] = __('Error, missing font family', 'kingcomposer'); }else if( isset( $kc_fonts[$family] ) ){ $data['message'] = __('Error, font family already exists', 'kingcomposer'); }else if( count($kc_fonts) >= 9 ){ $data['message'] = __('Error, You have added too much fonts. Your page will load very slowly.', 'kingcomposer'); }else{ $kc_fonts[$family] = array( $subsets, $variants ); update_option('kc-fonts', $kc_fonts); $data['message'] = 'Your font has been added successful'; $data['stt'] = 1; $data['data'] = $kc_fonts; } wp_send_json( $data ); exit; } public function update_font(){ check_ajax_referer( 'kc-fonts-nonce', 'security' ); if( get_option('kc-fonts') === false ){ add_option('kc-fonts', $_POST['datas'], null, 'no'); }else{ update_option('kc-fonts', $_POST['datas']); } $data = array( 'message' => __('Your settings have been updated', 'kingcomposer'), 'stt' => 1, 'data' => $_POST['datas'] ); wp_send_json( $data ); exit; } public function delete_font(){ check_ajax_referer( 'kc-fonts-nonce', 'security' ); $kc_fonts = get_option('kc-fonts'); if( !is_array( $kc_fonts ) ){ $kc_fonts = array(); add_option('kc-fonts', $kc_fonts, null, 'no'); } $family = esc_attr($_POST['family']); $data = array( 'message' => '', 'stt' => 0, 'data' => $kc_fonts ); if( empty( $family ) ){ $data['message'] = __('Error, missing font family', 'kingcomposer'); }else if( !isset( $kc_fonts[$family] ) ){ $data['message'] = __('Error, font family does not exists', 'kingcomposer'); }else{ unset( $kc_fonts[$family] ); update_option('kc-fonts', $kc_fonts); $data['message'] = 'Your font has been deleted successful'; $data['stt'] = 1; $data['data'] = $kc_fonts; } wp_send_json( $data ); exit; } public function load_sections(){ check_ajax_referer( 'kc-nonce', 'security' ); $msg_return = 'Successful'; if( isset( $_POST['isdelete'] ) && !empty( $_POST['isdelete'] ) ){ global $post; $datap = $post; $post = get_post( $_POST['isdelete'] ); setup_postdata( $post ); if( current_user_can('edit_post') ){ @wp_delete_post( esc_attr($_POST['isdelete']) ); }else{ $msg_return = 'You do not have permission to remove this section'; } setup_postdata( $datap ); } $data = array( 'message' => 'Error: Unknow', 'stt' => 0, 'data' => array( 's' => isset($_POST['s']) ? esc_attr($_POST['s']) : '', 'term' => isset($_POST['term']) ? esc_attr($_POST['term']) : '', 'paged' => isset($_POST['paged']) ? esc_attr($_POST['paged']) : 1, 'per_page' => isset($_POST['per_page']) ? esc_attr($_POST['per_page']) : 10, 'type' => isset($_POST['type']) ? esc_attr($_POST['type']) : 'kc-section', 'cols' => isset($_POST['cols']) ? esc_attr($_POST['cols']) : 2, 'items' => array(), 'terms' => array(), 'total' => 0, 'count' => 0, ) ); global $kc; $prebuilt = $kc->get_prebuilt_templates('registered'); if (empty($_POST['type']) || strpos($_POST['type'], 'prebuilt-templates-') === 0) { if (count($prebuilt) > 0) $data['data']['type'] = 'prebuilt-templates-('.count($prebuilt).')'; else $data['data']['type'] = 'kc-section'; } if ($data['data']['type'] == 'prebuilt-templates-('.count($prebuilt).')') { $data = $kc->get_prebuilt_templates('load_sections', $data); wp_send_json( $data ); exit; } $taxonomies = get_object_taxonomies( array( 'post_type' => $data['data']['type'] ) ); $data['data']['terms'] = array(); foreach( $taxonomies as $taxonomy ){ $data['data']['terms'] = $this->get_terms( 0, '', $taxonomy, $data['data']['terms'] ); } $query = array( 'post_type' => $data['data']['type'], 'posts_per_page' => $data['data']['per_page'], 'post_status' => 'publish' ); $query['paged'] = $data['data']['paged']; if( !empty( $data['data']['term'] ) && strpos( $data['data']['term'], '|' ) !== false ){ $term = explode( '|', $data['data']['term'] ); $query['tax_query'] = array( array( 'taxonomy' => $term[1], 'field' => 'term_id', 'terms' => $term[0], ) ); } if( !empty( $data['data']['s'] ) ) $query['s'] = $data['data']['s']; $sections = new WP_Query($query); if ($sections->have_posts()) : while ($sections->have_posts()) : $sections->the_post(); $terms = get_the_terms( get_the_ID(), implode(',',$taxonomies) ); $term_slugs = array(); if( $terms && ! is_wp_error($terms) ){ foreach ($terms as $term) { $term_slugs[] = $term->slug; } } $categories = implode( ', ', $term_slugs); $meta = get_post_meta( get_the_ID(), 'kc_data', true ); $preview = get_the_post_thumbnail_url(); if (!empty($meta) && isset($meta['thumbnail']) && !empty($meta['thumbnail'])) $preview = $meta['thumbnail']; $data['data']['items'][] = array( 'title' => html_entity_decode( get_the_title() ), 'preview' => $preview, 'date' => get_the_date('F d, Y'), 'categories' => $term_slugs, 'id' => get_the_ID() ); endwhile; $data['message'] = $msg_return; $data['stt'] = 1; $data['data']['total'] = $sections->max_num_pages; $data['data']['count'] = $sections->found_posts; else: $data['message'] = $kc->apply_filters('kc_section_blank', '<span style="font-size: 50px;">\\(^Д^)/</span><br /><br /><span style="font-size: 16px">'.__('Oops, there are no section found. You can create section from rows or ', 'kingcomposer').' <a href="#" onclick="window.location.href=jQuery(\'a.kc-add-new-section\').attr(\'href\');">Add New</a></span><br /><br /><img src="'.KC_URL.'/assets/images/new_section.png" width="836" /><br /><span class="kc-notice" style="font-size: 14px;width: inherit">'.__('You can use the prebuilt templates from export *.xml via the method', 'kingcomposer').' <strong>kc_prebuilt_template()</strong> <a href="http://docs.kingcomposer.com/prebuilt-templates/" target=_blank>Read More</a></span>'); endif; wp_reset_query(); wp_send_json( $data ); exit; } public function load_section(){ check_ajax_referer( 'kc-nonce', 'security' ); $data = array( 'message' => 'Error: Unknow', 'stt' => 0, 'data' => '' ); $id = isset($_POST['id']) ? $_POST['id'] : ''; if (isset($_POST['xml_pack']) && !empty($_POST['xml_pack'])) { global $kc; $pack = esc_attr($_POST['xml_pack']); $registered_pack = $kc->get_prebuilt_templates(); if (!isset($registered_pack[$pack])) { $data = array( 'message' => 'Error: The template pack does not exist or invalid name', 'stt' => 0, 'data' => '' ); } else { $post = kc_get_template_xml($registered_pack[$pack], $id); if ($post[0] === null) { $data = array( 'message' => 'Error: The content returns null', 'stt' => 0, 'data' => '' ); }else{ $data = array( 'message' => 'Successful', 'stt' => 1, 'data' => $post[0], 'meta' => $post[1] ); } } } else { $content = stripslashes_deep( kc_raw_content( $id )); if ( FALSE === get_post_status( $id ) ){ $data['message'] = __( 'Error: The section does not exist or has been removed', 'kingcomposer' ); }else if( empty($content) || empty($id) ){ $data['message'] = __( 'Error: The section content is empty', 'kingcomposer' ); }else{ $data['stt'] = 1; $data['message'] = 'Successful'; $data['data'] = $content; } } wp_send_json( $data ); exit; } public function push_section(){ check_ajax_referer( 'kc-nonce', 'security' ); $data = array( 'message' => 'Error: Unknow', 'stt' => 0, 'data' => '' ); $id = isset($_POST['id']) ? esc_attr( $_POST['id'] ) : ''; $content = isset($_POST['content']) ? $_POST['content'] : ''; $overwrite = isset($_POST['overwrite']) ? $_POST['overwrite'] : false; if( $overwrite != 'true' ){ $content = get_post_field('post_content', $id).$content; } if ( FALSE === get_post_status( $id ) ){ $data['message'] = __( 'Error: The section does not exist or has been removed', 'kingcomposer' ); }else{ $arg = sanitize_post( array( 'ID' => $id, 'post_content' => $content ), 'db' ); $post_id = wp_update_post( $arg ); if (is_wp_error($post_id)) { $data['message'] = ''; $errors = $post_id->get_error_messages(); foreach ($errors as $error) { $data['message'] .= $error; } }else{ $data['stt'] = 1; $data['message'] = 'Successful'; $data['data'] = ''; $meta = get_post_meta( $id , 'kc_data', true ); if( !is_array( $data ) ){ $meta = array( "mode" => "kc", "classes" => "", "css" => "" ); }else $meta['mode'] = 'kc'; if( get_post_meta( $id, 'kc_data' ) === false ) add_post_meta( $id, 'kc_data' , $meta ); else update_post_meta( $id , 'kc_data' , $meta ); } } wp_send_json( $data ); exit; } public function load_element_via_ajax(){ check_ajax_referer( 'kc-nonce', 'security' ); if( !isset( $_POST['model'] ) || !isset( $_POST['code'] ) ){ wp_send_json( array( 'status' => '-1' ) ); exit; } require_once KC_PATH.'/includes/kc.front.php'; global $kc, $kc_front, $post; if (isset( $_POST['ID'] ) && isset($post)) $post->ID = $_POST['ID']; $code = isset( $_POST['code'] ) ? trim( base64_decode( esc_attr( $_POST['code'] ) ) ) : ''; $model = isset( $_POST['model'] ) ? esc_attr( $_POST['model'] ) : ''; $pattern_filter = get_shortcode_regex( array('kc_row') ); $atts = preg_replace( "/$pattern_filter/", '$3', $code ); $atts = shortcode_parse_atts( $atts ); if( is_array( $atts ) && isset( $atts['__section_link'] ) ){ $sid = $atts['__section_link']; $code = kc_raw_content( $sid ); $title = get_post_field('post_title', $sid ); if( !empty( $code ) ){ wp_send_json( array( 'status' => '1', 'model' => $model, 'html' => $code, '__section_link' => $sid, '__section_title' => $title )); exit; }else{ wp_send_json( array( 'status' => '0', 'model' => $model, 'html' => '', 'message' => __('The content is empty, please edit section to add content', 'kingcomposer'), '__section_link' => $sid, '__section_title' => $title )); exit; } } $code = $kc_front->do_filter_shortcode($code); $code = trim( $code ); $code = do_shortcode( $code ); if( empty( $code ) ){ $code = '<div class="kc-infinite-loop">'.__('The content is empty', 'kingcomposer').'</div>'; } wp_send_json( array( 'status' => '1', 'model' => $model, 'html' => '<!--kc s '.$model.'-->'.$code.'<!--kc e '.$model.'-->', 'css' => $kc_front->get_global_css(), 'callback' => $kc->live_js_callback )); exit; } public function enable_optimized(){ check_ajax_referer( 'kc-nonce', 'security' ); require_once KC_PATH.'/includes/kc.optimized.php'; $settings = isset($_POST['settings']) ? $_POST['settings'] : array(); $id = isset($_POST['id']) ? $_POST['id'] : 0; $settings = array_merge(array("enable" => "", "global" => "", "dvanced" => ""), (array)$settings); $optimized = new kc_optimized(); $data = array( 'msg' => __('Error message', 'kingcomposer'), 'stt' => 0 ); if (isset($settings['clear_cache']) && $settings['clear_cache'] == 'on') { if (!is_dir(ABSPATH.'optimized') || $optimized->delete_cache()) { $data = array( 'msg' => '<i class="fa-check-square"></i> '.__('All cache have been successfully deleted', 'kingcomposer'), 'stt' => 1 ); }else $data['msg'] = '<i class="fa-warning"></i> '.__('Your cache were cleaned or could not delete cache', 'kingcomposer'); wp_send_json( $data ); exit; } if ($settings['enable'] == 'on') { // Enable optimized $data = $optimized->check_htaccess($settings['advanced']); if ($data['stt'] == 1) { if (get_option('kc_optimized') === false) add_option('kc_optimized', $settings, null, 'no'); else update_option('kc_optimized', $settings); } } else { if ($optimized->deactive()) { $data = array( 'msg' => __('Deactive successful', 'kingcomposer'), 'stt' => 1 ); if (get_option('kc_optimized') === false) add_option('kc_optimized', $settings, null, 'no'); else update_option('kc_optimized', $settings); } else { $data = array( 'msg' => __('Could not deactive, please check the writable permission', 'kingcomposer'), 'stt' => 0 ); } } wp_send_json( $data ); exit; } public function switch_off() { global $wpdb; $id = $_POST['id']; $mode = $_POST['mode']; /* $wpdb->update( $wpdb->prefix.'posts', array( 'ID' => $id, 'post_content_filtered' => '' ), array( 'ID' => $id ) ); */ kc_process_save_meta($id, array('mode' => $mode)); echo 'success'; exit; } public function share_section(){ check_ajax_referer( 'kc-nonce', 'security' ); $data = array( 'msg' => __('Unknow reason', 'kingcomposer'), 'stt' => 0 ); $args = array( 'id' => isset($_POST['id']) ? esc_attr($_POST['id']) : '', 'label' => isset($_POST['label']) ? esc_attr(sanitize_title($_POST['label'])) : '', 'name' => isset($_POST['name']) ? esc_attr($_POST['name']) : '', 'email' => isset($_POST['email']) ? esc_attr($_POST['email']) : '', 'thumbnail' => isset($_POST['thumbnail']) ? esc_attr($_POST['thumbnail']) : '', 'source' => KC_SITE ); if (empty($args['id']) || empty($args['name']) || empty($args['email']) || empty($args['content'])) { $data = array( 'msg' => __('Your content is empty', 'kingcomposer'), 'stt' => 0 ); } $args['content'] = kc_raw_content($args['id']); $response = wp_remote_post((is_ssl() ? 'https' : 'http').'://hub.kingcomposer.com/submit/', array( 'method' => 'POST', 'timeout' => 45, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'body' => $args, )); if (is_wp_error($response)) { $data = array('msg' => $response->get_error_message(), 'stt' => 0); } else { $body = wp_remote_retrieve_body($response); if (!empty($body) && $body == 1) { $data = array( 'msg' => __('Thank you for submitting!', 'kingcomposer'), 'stt' => 1 ); }else{ $data = array('msg' => $body, 'stt' => 0); } } wp_send_json( $data ); exit; } public function installed_extensions () { check_ajax_referer( 'kc-nonce', 'security' ); $task = isset($_POST['task']) ? esc_attr($_POST['task']) : ''; $name = isset($_POST['name']) ? esc_attr($_POST['name']) : ''; $path = untrailingslashit(ABSPATH).KDS.'wp-content'.KDS.'uploads'.KDS.'kc_extensions'.KDS; $data = array('msg' => 'Unknow', 'stt' => 0); if ( empty($task) || empty($name) || !in_array($task, array('active', 'deactive', 'delete'))) { $data = array('msg' => 'Invalid action', 'stt' => 0); } else { $extensions = (array) get_option( 'kc_active_extensions', array() ); $path = $path.$name.KDS; switch ($task) { case 'active' : if (file_exists($path.'index.php')) { require_once($path.'index.php'); $ex_class = 'kc_extension_'.str_replace('-', '_', sanitize_title($name)); if (class_exists($ex_class)) { $extensions[$name] = 1; if (!add_option('kc_active_extensions', $extensions, null, 'no')) update_option('kc_active_extensions', $extensions); $data = array('msg' => 'Successful', 'stt' => 1); }else{ $data = array( 'msg' => 'Could not find the PHP classname "'.$ex_class.'" in the extenstion "/'.$name.KDS.'index.php"', 'stt' => 0 ); } } else { $data = array( 'msg' => 'Could not find the extension file /'.$name.KDS.'index.php', 'stt' => 0 ); } break; case 'deactive' : unset($extensions[$name]); update_option('kc_active_extensions', $extensions); $data = array('msg' => 'Successful', 'stt' => 1); break; case 'delete' : if (is_dir($path) && kc_remove_dir($path)) { unset($extensions[$name]); update_option('kc_active_extensions', $extensions); $data = array('msg' => 'Successful', 'stt' => 1); }else $data = array('msg' => 'Could not delete extension', 'stt' => 0); break; } } wp_send_json( $data ); exit; } public function store_extensions() { global $kc; check_ajax_referer( 'kc-nonce', 'security' ); $pdk = $kc->get_pdk(); $msg = array(); $id = $_POST['id']; /* * Start downloading extentions */ $ex_path = WP_CONTENT_DIR.KDS.'uploads'.KDS.'kc_extensions'.KDS; $file = time(); $file = $ex_path.$file.'.zip'; if (!is_dir($ex_path) && !mkdir($ex_path, 07555)) { $msg['status'] = 'error'; $msg['errors'] = array('Error: Could not create extensions folder'); echo json_encode($msg); exit; } $ref = array( "referer=".$_SERVER['HTTP_HOST'], "domain=".$pdk['domain'], "date=".$pdk['date'], "key=".$pdk['key'], "id=".$id ); $ref = implode('&', $ref); $download = download_url((is_ssl() ? 'https' : 'http').'://extensions.kingcomposer.com/download/?'.$ref); if (is_wp_error($download)) { $data = 0; } else { $data = file_put_contents($file, file_get_contents($download)); } /* * End downloading extentions */ if ($data === 0) { $msg['status'] = 'error'; $msg['errors'] = array($file.'Error: Could not download file, make sure that the fopen() funtion on your server is enabled'); } else if ($data < 250) { $msg['status'] = 'error'; $erro = @file_get_contents($file); $msg['errors'] = array('Error: '.$erro); } else if (!class_exists('ZipArchive')) { $msg['status'] = 'error'; $msg['errors'] = array('Error: Your server does not support ZipArchive to extract extensions'); } else { $zip = new ZipArchive; $res = $zip->open($file); if ($res === TRUE) { $zip->extractTo($ex_path); $zip->close(); if (is_dir($ex_path.'__MACOSX')) kc_remove_dir($ex_path.'__MACOSX'); $msg['status'] = 'success'; } else { $msg['status'] = 'error'; $msg['errors'] = array(__('Error: Could not open file', 'kingcomposer').$file); } } //@unlink($file); echo json_encode($msg); exit; } public function msg( $s = '', $t = 1 ){ if( $t == 1 ) return '<h3 class="mesg success"><i class="et-happy"></i><br />'.$s.'</h3>'; else return '<h3 class="mesg error"><i class="et-sad"></i><br />'.$s.'</h3>'; } private function get_terms( $parent = 0, $spacing = '', $taxonomy, $data = array() ){ $terms = get_terms( array( 'taxonomy' => $taxonomy, 'hide_empty' => false, 'parent' => $parent )); if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){ foreach ( $terms as $term ){ $data[] = array( 'name' => $spacing.$term->name, 'id' => $term->term_id, 'taxonomy' => $term->taxonomy ); $data = $this->get_terms( $term->term_id, $spacing.' - ', $taxonomy, $data ); } } return $data; } } #Start kc_Ajax new kc_ajax();