939 lines
24 KiB
PHP
939 lines
24 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* King Composer
|
|
* (c) KingComposer.com
|
|
*
|
|
*/
|
|
if(!defined('KC_FILE')) {
|
|
header('HTTP/1.0 403 Forbidden');
|
|
exit;
|
|
}
|
|
|
|
if( !function_exists('wp_list_widgets') )
|
|
require_once(ABSPATH . '/wp-admin/includes/widgets.php');
|
|
|
|
function kc_admin_enable( $force = false ){
|
|
|
|
if( $force === true )
|
|
return true;
|
|
|
|
global $post, $kc;
|
|
|
|
$type = !empty( $post->post_type ) ? $post->post_type:'';
|
|
$page = !empty( $_GET['page'] ) ? $_GET['page'] : '';
|
|
|
|
$allows_types = $kc->get_support_content_types();
|
|
|
|
if( is_admin() && ( in_array( $type, $allows_types ) || $page == 'kc-mapper' || $kc->is_live() ) )
|
|
return true;
|
|
else return false;
|
|
|
|
}
|
|
|
|
function kc_add_map( $map = array() ){
|
|
|
|
global $kc;
|
|
|
|
if( !is_array( $map ) )
|
|
return;
|
|
|
|
$kc->add_map( $map );
|
|
|
|
}
|
|
/*
|
|
* Add maps from exported file
|
|
*/
|
|
function kc_include_map($file) {
|
|
|
|
if (!file_exists($file))
|
|
return;
|
|
|
|
ob_start();
|
|
@include($file);
|
|
$data = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
/*
|
|
$handle = fopen($file, 'r' );
|
|
$data = fread($handle, filesize($file));
|
|
fclose($handle);
|
|
*/
|
|
|
|
$data = @json_decode($data, true);
|
|
|
|
if (!empty($data) && is_array($data)) {
|
|
global $kc;
|
|
$kc->add_map($data);
|
|
}
|
|
|
|
}
|
|
|
|
function kc_remove_map( $name = '' ){
|
|
|
|
global $kc;
|
|
|
|
if( empty( $name ) )
|
|
return;
|
|
|
|
$kc->remove_map( $name );
|
|
|
|
}
|
|
|
|
function kc_prebuilt_template ($name = '', $pack = '') {
|
|
|
|
global $kc;
|
|
|
|
if (empty($name) || empty($pack))
|
|
return false;
|
|
|
|
$kc->prebuilt_template ($name, $pack);
|
|
|
|
}
|
|
|
|
function kc_hide_element( $name = '' ){
|
|
|
|
global $kc;
|
|
|
|
if( empty( $name ) )
|
|
return;
|
|
|
|
$kc->hide_element( $name );
|
|
|
|
}
|
|
|
|
function kc_add_param_type( $name = '', $func = '' ){
|
|
|
|
global $kc;
|
|
|
|
if( empty( $name ) || empty( $func ) )
|
|
return;
|
|
|
|
$kc->add_param_type( $name, $func );
|
|
|
|
}
|
|
|
|
function kc_add_icon( $source = '' ){
|
|
|
|
if( !empty( $source ) ){
|
|
KingComposer::globe()->add_icon_source( $source );
|
|
}
|
|
}
|
|
|
|
function kc_remove_wpautop( $content, $autop = false ) {
|
|
|
|
if ( $autop ) {
|
|
$content = wpautop( preg_replace( '/<\/?p\>/', "\n", $content ) . "\n" );
|
|
}
|
|
|
|
return do_shortcode( shortcode_unautop( $content ) );
|
|
}
|
|
|
|
function kc_validate_options( $plugin_options ){
|
|
|
|
if( isset( $_POST['kc_options'] ) && !empty( $_POST['kc_options'] ) ){
|
|
if( isset( $_POST['re-active-kc-pro'] ) && $_POST['re-active-kc-pro'] == '1' ){
|
|
$result = activate_plugin( 'kc_pro/kc_pro.php' );
|
|
}
|
|
return $plugin_options;
|
|
}
|
|
|
|
}
|
|
|
|
function kc_youtube_id_from_url( $url = '' ) {
|
|
|
|
parse_str( parse_url( $url, PHP_URL_QUERY ), $vars );
|
|
|
|
return isset( $vars['v'] ) ? $vars['v'] : '';
|
|
|
|
}
|
|
|
|
function kc_loop_box( $items ){
|
|
|
|
if( empty( $items ) )
|
|
return '';
|
|
|
|
$output = '';
|
|
|
|
foreach( $items as $item ){
|
|
|
|
if( is_object( $item ) && $item->tag != 'text' ){
|
|
|
|
|
|
if( !isset( $item->attributes ) || !is_object( $item->attributes ) )
|
|
$item->attributes = new stdClass();
|
|
|
|
if( !isset( $item->attributes->class ) )
|
|
$item->attributes->class = '';
|
|
|
|
if( $item->tag == 'image' )
|
|
$item->tag = 'img';
|
|
if( $item->tag == 'icon' )
|
|
$item->tag = 'i';
|
|
if( $item->tag == 'column' ){
|
|
$item->tag = 'div';
|
|
$item->attributes->class .= ' '.$item->attributes->cols;
|
|
unset( $item->attributes->cols );
|
|
}
|
|
|
|
$output .= '<'.$item->tag;
|
|
|
|
if( $item->tag == 'img' ){
|
|
if( empty( $item->attributes->src ) )
|
|
$item->attributes->src = KC_URL.'/assets/images/get_start.jpg';
|
|
|
|
if( $item->tag == 'img' && !isset( $item->attributes->alt ) )
|
|
$item->attributes->alt = '';
|
|
}
|
|
|
|
foreach( $item->attributes as $k => $v ){
|
|
if( !empty($v) )$output .= ' '.$k.'="'.trim($v).'"';
|
|
}
|
|
|
|
if( $item->tag == 'img' )
|
|
$output .= '/';
|
|
|
|
$output .= '>';
|
|
|
|
if( is_array( $item->children ) )
|
|
$output .= kc_loop_box( $item->children );
|
|
|
|
if( $item->tag != 'img' )
|
|
$output .= '</'.$item->tag.'>';
|
|
|
|
}else $output .= $item->content;
|
|
|
|
}
|
|
|
|
return $output;
|
|
|
|
}
|
|
|
|
function kc_get_terms( $tax = 'category', $key = 'id', $type = '', $default = '' ){
|
|
|
|
$get_terms = (array) get_terms( $tax, array( 'hide_empty' => false ) );
|
|
|
|
if( $type != '' ){
|
|
$get_terms = kc_get_terms_by_post_type( array($tax), array($type) );
|
|
}
|
|
|
|
$terms = array();
|
|
|
|
if( $default != '' ){
|
|
$terms[] = $default;
|
|
}
|
|
|
|
if ( $key == 'id' ){
|
|
foreach ( $get_terms as $term ){
|
|
if( isset( $term->term_id ) && isset( $term->name ) ){
|
|
$terms[$term->term_id] = $term->name;
|
|
}
|
|
}
|
|
}else if ( $key == 'slug' ){
|
|
foreach ( $get_terms as $term ){
|
|
if( !empty($term->name) ){
|
|
if( isset( $term->slug ) && isset( $term->name ) ){
|
|
$terms[$term->slug] = $term->name;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $terms;
|
|
|
|
}
|
|
|
|
function kc_filter_search( $s, &$w ) {
|
|
|
|
global $wpdb;
|
|
|
|
if ( empty( $s ) )return '';
|
|
|
|
$q = $w->query_vars;
|
|
|
|
$n = ! empty( $q['exact'] ) ? '' : '%';
|
|
$s = $sa = '';
|
|
|
|
foreach ( (array) $q['search_terms'] as $t ) {
|
|
$t = $wpdb->esc_like( $t );
|
|
$l = $n . $t . $n;
|
|
$s .= $wpdb->prepare( "{$sa}($wpdb->posts.post_title LIKE %s)", $l );
|
|
$sa = ' AND ';
|
|
}
|
|
|
|
if ( ! empty( $s ) )
|
|
$s = " AND ({$s}) ";
|
|
|
|
return $s;
|
|
}
|
|
|
|
function kc_get_submit_button( $text = '', $type = 'primary large', $name = 'submit', $wrap = true, $other_attributes = '' ) {
|
|
|
|
if ( ! is_array( $type ) )
|
|
$type = explode( ' ', $type );
|
|
|
|
$button_shorthand = array( 'primary', 'small', 'large' );
|
|
$classes = array( 'button' );
|
|
foreach ( $type as $t ) {
|
|
if ( 'secondary' === $t || 'button-secondary' === $t )
|
|
continue;
|
|
$classes[] = in_array( $t, $button_shorthand ) ? 'button-' . $t : $t;
|
|
}
|
|
$class = implode( ' ', array_unique( $classes ) );
|
|
|
|
if ( 'delete' === $type )
|
|
$class = 'button-secondary delete';
|
|
|
|
$text = $text ? $text : __( 'Save Changes' );
|
|
|
|
// Default the id attribute to $name unless an id was specifically provided in $other_attributes
|
|
$id = $name;
|
|
if ( is_array( $other_attributes ) && isset( $other_attributes['id'] ) ) {
|
|
$id = $other_attributes['id'];
|
|
unset( $other_attributes['id'] );
|
|
}
|
|
|
|
$attributes = '';
|
|
if ( is_array( $other_attributes ) ) {
|
|
foreach ( $other_attributes as $attribute => $value ) {
|
|
$attributes .= $attribute . '="' . esc_attr( $value ) . '" '; // Trailing space is important
|
|
}
|
|
} elseif ( ! empty( $other_attributes ) ) { // Attributes provided as a string
|
|
$attributes = $other_attributes;
|
|
}
|
|
|
|
// Don't output empty name and id attributes.
|
|
$name_attr = $name ? ' name="' . esc_attr( $name ) . '"' : '';
|
|
$id_attr = $id ? ' id="' . esc_attr( $id ) . '"' : '';
|
|
|
|
$button = '<input type="submit"' . $name_attr . $id_attr . ' class="' . esc_attr( $class );
|
|
$button .= '" value="' . esc_attr( $text ) . '" ' . $attributes . ' />';
|
|
|
|
if ( $wrap ) {
|
|
$button = '<p class="submit">' . $button . '</p>';
|
|
}
|
|
|
|
return $button;
|
|
}
|
|
|
|
function kc_process_tab_title( $matches ){
|
|
|
|
if( !empty( $matches[0] ) ){
|
|
|
|
$tab_atts = shortcode_parse_atts( $matches[0] );
|
|
|
|
$title = ''; $adv_title = '';$tab_id='';
|
|
if ( isset( $tab_atts['title'] ) )
|
|
$title = $tab_atts['title'];
|
|
if ( isset( $tab_atts['tab_id'] ) )
|
|
$tab_id = $tab_atts['tab_id'];
|
|
|
|
if( isset( $tab_atts['advanced'] ) && $tab_atts['advanced'] === 'yes' ){
|
|
|
|
if( isset( $tab_atts['adv_title'] ) && !empty( $tab_atts['adv_title'] ) )
|
|
$adv_title = base64_decode( $tab_atts['adv_title'] );
|
|
|
|
$icon=$icon_class=$image=$image_id=$image_url=$image_thumbnail=$image_medium=$image_large=$image_full='';
|
|
|
|
if( isset( $tab_atts['adv_icon'] ) && !empty( $tab_atts['adv_icon'] ) ){
|
|
$icon_class = $tab_atts['adv_icon'];
|
|
$icon = '<i class="'.$tab_atts['adv_icon'].'"></i>';
|
|
}
|
|
|
|
if( isset( $tab_atts['adv_image'] ) && !empty( $tab_atts['adv_image'] ) ){
|
|
$image_id = $tab_atts['adv_image'];
|
|
$image_url = wp_get_attachment_image_src( $image_id, 'full' );
|
|
$image_medium = wp_get_attachment_image_src( $image_id, 'medium' );
|
|
$image_large = wp_get_attachment_image_src( $image_id, 'large' );
|
|
$image_thumbnail = wp_get_attachment_image_src( $image_id, 'thumbnail' );
|
|
|
|
if( !empty( $image_url ) && isset( $image_url[0] ) ){
|
|
$image_url = $image_url[0];
|
|
$image_full = $image_url;
|
|
}
|
|
if( !empty( $image_medium ) && isset( $image_medium[0] ) )
|
|
$image_medium = $image_medium[0];
|
|
|
|
if( !empty( $image_large ) && isset( $image_large[0] ) )
|
|
$image_large = $image_large[0];
|
|
|
|
if( !empty( $image_thumbnail ) && isset( $image_thumbnail[0] ) )
|
|
$image_thumbnail = $image_thumbnail[0];
|
|
if( !empty( $image_url ) )
|
|
$image = '<img src="'.$image_url.'" alt="" />';
|
|
}
|
|
|
|
$adv_title = str_replace( array( '{title}', '{icon}', '{icon_class}', '{image}', '{image_id}', '{image_url}', '{image_thumbnail}', '{image_medium}', '{image_large}', '{image_full}', '{tab_id}' ), array( $title, $icon, $icon_class, $image, $image_id, $image_url, $image_thumbnail, $image_medium, $image_large, $image_full, $tab_id ), $adv_title );
|
|
|
|
echo '<li>'.$adv_title.'</li>';
|
|
|
|
}else{
|
|
if( isset( $tab_atts['icon_option'] ) && $tab_atts['icon_option'] == 'yes' ){
|
|
if(empty($tab_atts['icon']))
|
|
$tab_atts['icon'] = 'fa-leaf';
|
|
$title = '<i class="'.$tab_atts['icon'].'"></i> '.$title;
|
|
}
|
|
echo '<li><a href="#'.(isset($tab_atts['tab_id']) ? $tab_atts['tab_id'] : '').'" data-prevent="scroll">'.$title.'</a></li>';
|
|
}
|
|
|
|
}
|
|
|
|
return $matches[0];
|
|
|
|
}
|
|
|
|
function kc_is_using(){
|
|
|
|
global $post;
|
|
|
|
$kc_return = false;
|
|
|
|
if (
|
|
!isset( $post ) ||
|
|
!isset( $post->ID ) ||
|
|
empty( $post->ID ) ||
|
|
!get_post_meta( $post->ID , 'kc_data', false )
|
|
) {
|
|
$kc_return = false;
|
|
} else {
|
|
$kc_meta = get_post_meta( $post->ID , 'kc_data', true );
|
|
if( isset( $kc_meta['mode'] ) && $kc_meta['mode'] == 'kc' ) {
|
|
$kc_return = true;
|
|
}
|
|
}
|
|
|
|
$kc_return = apply_filters('kc_is_using', $kc_return, $post);
|
|
|
|
return $kc_return;
|
|
|
|
}
|
|
|
|
function kc_js_callback( $callback ){
|
|
|
|
global $kc;
|
|
$kc->js_callback( $callback );
|
|
|
|
}
|
|
|
|
function kc_add_content_type( $type = '', $setion = true ){
|
|
|
|
global $kc;
|
|
if( !empty( $type ) )
|
|
$kc->add_content_type( $type, $setion );
|
|
|
|
}
|
|
|
|
/*
|
|
* Return the type of content
|
|
*/
|
|
function kc_get_post_type(){
|
|
|
|
global $post;
|
|
|
|
$type = '';
|
|
|
|
if( isset( $post ) && isset( $post->post_type ) )
|
|
$type = $post->post_type;
|
|
|
|
return $type;
|
|
|
|
}
|
|
|
|
/*
|
|
* Get content as raw format
|
|
*/
|
|
function kc_raw_content( $id = 0 ){
|
|
|
|
$content = '';
|
|
|
|
if ( FALSE !== get_post_status( $id ) ) {
|
|
|
|
$content = get_post_field('post_content_filtered', $id );
|
|
|
|
if( empty( $content ) )
|
|
$content = get_post_field( 'post_content', $id );
|
|
|
|
}
|
|
|
|
return $content;
|
|
}
|
|
|
|
function kc_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 );
|
|
|
|
}
|
|
|
|
function kc_remove_dir ($dirPath = '') {
|
|
|
|
if (empty($dirPath))
|
|
return false;
|
|
|
|
$dirPath = untrailingslashit($dirPath).KDS;
|
|
|
|
if ($dirPath == ABSPATH)
|
|
return false;
|
|
|
|
if (! is_dir($dirPath)) {
|
|
return false;
|
|
}
|
|
|
|
$files = scandir($dirPath, 1);
|
|
|
|
foreach ($files as $file) {
|
|
if ($file != '.' && $file != '..') {
|
|
if (is_dir($dirPath.$file)) {
|
|
kc_remove_dir($dirPath.$file);
|
|
} else {
|
|
unlink($dirPath.$file);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (is_file($dirPath.'.DS_Store'))
|
|
unlink($dirPath.'.DS_Store');
|
|
|
|
return rmdir($dirPath);
|
|
|
|
}
|
|
/*
|
|
* Read changelogs from readme.txt
|
|
*/
|
|
function kc_changelogs(){
|
|
|
|
$path = KC_PATH.KDS.'readme.txt';
|
|
if (file_exists($path)) {
|
|
|
|
$content = @file_get_contents($path);
|
|
$anchor = strpos($content, '== Changelog ==');
|
|
|
|
if (!empty($content) && $anchor !== false) {
|
|
|
|
$content = substr($content, $anchor + strlen('== Changelog =='));
|
|
$content = explode("\n", $content);
|
|
$group = array('newfeatures' => array(), 'improve' => array(), 'bugfixes' => array(), 'changes' => array(), 'remove' => array());
|
|
|
|
foreach ($content as $n => $line) {
|
|
|
|
$line = trim($line);
|
|
|
|
if (substr ($line, 0, 1) == '*') {
|
|
|
|
$line = trim(substr ($line, 1));
|
|
if (strpos($line, '[New]') === 0)
|
|
$group['newfeatures'][] = substr ($line, 5);
|
|
else if (strpos($line, '[Improve]') === 0)
|
|
$group['improve'][] = substr ($line, 9);
|
|
else if (strpos($line, '[Fix]') === 0)
|
|
$group['bugfixes'][] = substr ($line, 5);
|
|
else if (strpos($line, '[Remove]') === 0)
|
|
$group['remove'][] = substr ($line, 8);
|
|
else $group['changes'][] = $line;
|
|
|
|
}
|
|
else {
|
|
|
|
foreach ($group as $label => $items) {
|
|
if (count($items) > 0) {
|
|
echo '<div class="kc-log-type '.esc_attr($label).'"><strong>'.esc_attr($label).'</strong></div>';
|
|
echo '<ul>';
|
|
foreach ($items as $i => $item) {
|
|
if (!empty($item))
|
|
echo '<li>'.esc_html($item).'</li>';
|
|
}
|
|
echo '</ul>';
|
|
}
|
|
}
|
|
|
|
$group = array('newfeatures' => array(), 'improve' => array(), 'bugfixes' => array(), 'changes' => array(), 'remove' => array());
|
|
|
|
if (substr ($line, strlen($line)-1) == '=' && substr ($line, 0, 1) == '=')
|
|
echo '<h3 class="kc-log-ver">Version '.substr ($line, 1, strlen($line)-2).'</h3>';
|
|
|
|
}
|
|
}
|
|
|
|
} else {
|
|
_e('Error: Could not read data', 'kingcomposer');
|
|
}
|
|
|
|
} else {
|
|
_e('Error: Could not find the file readme.txt', 'kingcomposer');
|
|
}
|
|
|
|
}
|
|
/*
|
|
* Build list template from prebuilt list
|
|
*/
|
|
function kc_prerebuilt_templates ($data = array(), $registered = array()) {
|
|
|
|
if (!isset($data['data']))
|
|
return $data;
|
|
|
|
$lz = array();
|
|
|
|
foreach ($registered as $name => $path) {
|
|
if (!isset($data['data']['term']) || empty($data['data']['term']) || !isset($registered[$data['data']['term']]))
|
|
$data['data']['term'] = $name;
|
|
$data['data']['terms'][] = array('name' => $name, 'id' => '', 'taxonomy' => $name);
|
|
}
|
|
|
|
$posts = kc_get_template_xml($registered[$data['data']['term']], '', $data['data']['s']);
|
|
|
|
if (count($posts) > 0) {
|
|
|
|
$to = (int)$data['data']['paged']*(int)$data['data']['per_page'];
|
|
$start = $to-(int)$data['data']['per_page'];
|
|
|
|
$data['data']['items'] = array();
|
|
|
|
for($i = $start; $i < $to; $i++){
|
|
if (isset($posts[$i]))
|
|
$data['data']['items'][] = $posts[$i];
|
|
}
|
|
|
|
$data['data']['total'] = ceil(count($posts)/(int)$data['data']['per_page']);
|
|
$data['data']['count'] = count($posts);
|
|
$data['stt'] = 1;
|
|
$data['message'] = 'Success';
|
|
}else{
|
|
$data['message'] = '<span style="font-size: 50px;">\\(^Д^)/</span><br /><br /><span style="font-size: 16px">'.__('Oops, there are no template found in package', 'kingcomposer').' <strong>'.$data['data']['term'].'</strong><br /><small><i>'.$registered[$data['data']['term']].'</i></small>';
|
|
}
|
|
|
|
return $data;
|
|
|
|
}
|
|
/*
|
|
* Read templates from xml
|
|
*/
|
|
function kc_get_template_xml($file = '', $id = '', $s = '') {
|
|
|
|
if (empty($file) || !file_exists($file))
|
|
return null;
|
|
|
|
$xml = simplexml_load_file($file);
|
|
$posts = array();
|
|
|
|
foreach ($xml->channel->item as $item) {
|
|
|
|
$meta = $item->children('http://wordpress.org/export/1.2/');
|
|
|
|
$kc_meta = false;
|
|
|
|
for ($i = 0; $i < count($meta->postmeta); $i++) {
|
|
if ($meta->postmeta[$i]->meta_key == 'kc_data') {
|
|
$kc_meta = unserialize($meta->postmeta[$i]->meta_value);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!empty($id) && $id == (string)$meta->post_id) {
|
|
if ($kc_meta !== false && isset($kc_meta['mode']) && $kc_meta['mode'] == 'kc') {
|
|
$content = $item->children('http://purl.org/rss/1.0/modules/content/');
|
|
return array((string)$content->encoded, $kc_meta);
|
|
}else{
|
|
return array(null, null);
|
|
}
|
|
}
|
|
|
|
if ($kc_meta !== false && isset($kc_meta['mode']) && $kc_meta['mode'] == 'kc') {
|
|
if ($s === '' || strpos(strtolower(html_entity_decode($item->title)), strtolower($s)) !== false) {
|
|
$posts[] = array(
|
|
'title' => html_entity_decode($item->title),
|
|
'preview' => isset($kc_meta['thumbnail']) ? $kc_meta['thumbnail'] : '',
|
|
'date' => date('F d, Y', strtotime((string)$item->pubDate)),
|
|
'categories' => array(),
|
|
'id' => (string)$meta->post_id,
|
|
'type' => 'xml'
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $posts;
|
|
|
|
}
|
|
/*
|
|
* Read templates from xml
|
|
*/
|
|
function kc_set_transient_xml_attachs() {
|
|
|
|
global $kc, $wpdb;
|
|
|
|
$delete_transient = "delete from {$wpdb->options} where option_name like '_transient_kc_attach_xml_%' or option_name like '_transient_timeout_kc_attach_xml_%'";
|
|
|
|
$xmls = $kc->get_prebuilt_templates();
|
|
|
|
if (is_array($xmls) && count($xmls) > 0) {
|
|
|
|
$sizes = 0;
|
|
$names = '';
|
|
$unique_key = get_option('kc_map_xml_attachments', true);
|
|
|
|
foreach ($xmls as $file) {
|
|
|
|
if (file_exists($file)) {
|
|
|
|
$sizes += filesize($file);
|
|
$names .= $file;
|
|
|
|
}
|
|
}
|
|
|
|
$unique = md5($names).$sizes;
|
|
|
|
if ($unique_key !== $unique) {
|
|
|
|
update_option('kc_map_xml_attachments', $unique);
|
|
|
|
// DELETE transient before adding new fresh bellow
|
|
$wpdb->query($delete_transient);
|
|
|
|
foreach ($xmls as $file) {
|
|
|
|
if (file_exists($file)) {
|
|
|
|
$xml = simplexml_load_file($file);
|
|
foreach ($xml->channel->item as $item) {
|
|
|
|
$meta = $item->children('http://wordpress.org/export/1.2/');
|
|
if ((string)$meta->post_type == 'attachment') {
|
|
|
|
$_wp_attached_file = '';
|
|
$_wp_attachment_metadata = array();
|
|
|
|
for ($i = 0; $i < count($meta->postmeta); $i++) {
|
|
if ($meta->postmeta[$i]->meta_key == '_wp_attached_file') {
|
|
$_wp_attached_file = (string)$meta->postmeta[$i]->meta_value;
|
|
}
|
|
if ($meta->postmeta[$i]->meta_key == '_wp_attachment_metadata') {
|
|
$_wp_attachment_metadata = unserialize($meta->postmeta[$i]->meta_value);
|
|
}
|
|
}
|
|
|
|
$serialized_value = maybe_serialize(array(
|
|
'url' => (string)$meta->attachment_url,
|
|
'metadata' => $_wp_attachment_metadata,
|
|
'expiration' => (defined('KC_ATTACHS_XML_EXPIRATION') ? (time()+(int)KC_ATTACHS_XML_EXPIRATION) : 0)
|
|
));
|
|
|
|
$wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", '_transient_kc_attach_xml_'.(string)$meta->post_id, $serialized_value, 'no' ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
} else if (get_option('kc_map_xml_attachments')) {
|
|
$wpdb->query($delete_transient);
|
|
delete_option('kc_map_xml_attachments');
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
* preg replace attach url
|
|
*/
|
|
function kc_images_filter($url = '') {
|
|
|
|
//$regx = '/\%SITE\_URL\%(.+?)\.(jpg|gif|png|jpeg|JPG|GIF|PNG|JPEG|http)/';
|
|
//$regx = '/\%SITE\_URL\%(.+?)\.([A-Za-z0-9\s]+)/i';
|
|
$regx = '/\%SITE\_URL\%(.+?)(\'|\"|\)|\ )/i';
|
|
|
|
return preg_replace_callback($regx, 'kc_images_filter_callback', $url);
|
|
|
|
}
|
|
function kc_images_filter_callback($m) {
|
|
|
|
return kc_attach_url(KC_SITE.$m[1]).$m[2];
|
|
|
|
}
|
|
/*
|
|
* Fix attach urls
|
|
*/
|
|
function kc_attach_url($url = '') {
|
|
|
|
if (strpos($url, KC_SITE.'/wp-content') === false)
|
|
return $url;
|
|
|
|
global $kc;
|
|
$xmls = $kc->get_prebuilt_templates();
|
|
|
|
$test_exist = str_replace(
|
|
array(KC_SITE . '/wp-content', '/', '\\'),
|
|
array(untrailingslashit(WP_CONTENT_DIR), KDS, KDS),
|
|
$url
|
|
);
|
|
|
|
if (count($xmls) === 0) {
|
|
|
|
if (strpos($url, KC_SITE) === 0 && !file_exists($test_exist)) {
|
|
return KC_URL.'/assets/images/get_start.jpg';
|
|
}
|
|
|
|
return $url;
|
|
|
|
}
|
|
|
|
if (strpos($url, KC_SITE) === 0 && file_exists($test_exist)) {
|
|
return $url;
|
|
}else{
|
|
|
|
global $wpdb;
|
|
|
|
kc_set_transient_xml_attachs();
|
|
|
|
$xurl = str_replace(KC_SITE, '', esc_url($url));
|
|
$posts = $wpdb->get_results("select * from {$wpdb->options} where (option_name like '_transient_kc_attach_xml_%' or option_name like '_transient_timeout_kc_attach_xml_%') and option_value like '%".$xurl."%'");
|
|
|
|
if (count($posts) > 0) {
|
|
|
|
$attach = unserialize($posts[0]->option_value);
|
|
|
|
if (isset($attach['expiration']) && ($attach['expiration'] === 0 || $attach['expiration'] > time())) {
|
|
if (isset($attach['url']) &&
|
|
strpos($attach['url'], $xurl) !== false &&
|
|
strpos($attach['url'], "/wp-content/uploads") !== false
|
|
){
|
|
$attach['url'] = explode("/wp-content/uploads", $attach['url']);
|
|
return $attach['url'][0].$xurl;
|
|
}
|
|
}else{
|
|
delete_transient(str_replace('_transient_', '', $posts[0]->option_name));
|
|
}
|
|
}
|
|
}
|
|
|
|
return $url;
|
|
|
|
}
|
|
/*
|
|
* Return a random string with length
|
|
*/
|
|
function kc_random_string( $length = 10 ){
|
|
$str = "";
|
|
$allow_characters = array_merge(range('A','Z'), range('a','z'), range('0','9'));
|
|
$_max_length = count($allow_characters) - 1;
|
|
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$rand = mt_rand(0, $_max_length);
|
|
$str .= $allow_characters[$rand];
|
|
}
|
|
|
|
return $str;
|
|
}
|
|
/*
|
|
* Get first image in content of a post
|
|
*/
|
|
function kc_first_image( $content ) {
|
|
|
|
$first_img = '';
|
|
|
|
ob_start();
|
|
ob_end_clean();
|
|
|
|
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $matches);
|
|
|
|
if( isset($matches[1][0]) )
|
|
return $matches[1][0];
|
|
|
|
return false;
|
|
}
|
|
/*
|
|
* Sort screen size as ordering
|
|
*/
|
|
function kc_screen_sort( array &$array ) {
|
|
$screens = array('any', '1000-5000', '1024', '999', '767', '479');
|
|
uksort($array, function($key1, $key2) use ($screens) {
|
|
return (array_search($key1, $screens) > array_search($key2, $screens));
|
|
});
|
|
}
|
|
|
|
/*
|
|
* Sort first array base on key as array second
|
|
*/
|
|
function kc_abasort( array &$array, $order ) {
|
|
$order = array('any', '1000-5000', '1024', '999', '767', '479');
|
|
uksort($array, function($key1, $key2) use ($order) {
|
|
return (array_search($key1, $order) > array_search($key2, $order));
|
|
});
|
|
}
|
|
|
|
|
|
/*
|
|
* Return options for CSS columns
|
|
*/
|
|
|
|
function kc_column_options ( $selector ){
|
|
|
|
return array(
|
|
array(
|
|
'screens' => "any,1024,999,767,479",
|
|
'Typography' => array(
|
|
array('property' => 'color', 'label' => 'Color'),
|
|
array('property' => 'font-size', 'label' => 'Font Size'),
|
|
array('property' => 'font-weight', 'label' => 'Font Weight'),
|
|
array('property' => 'font-style', 'label' => 'Font Style'),
|
|
array('property' => 'font-family', 'label' => 'Font Family'),
|
|
array('property' => 'text-align', 'label' => 'Text Align'),
|
|
array('property' => 'text-shadow', 'label' => 'Text Shadow'),
|
|
array('property' => 'text-transform', 'label' => 'Text Transform'),
|
|
array('property' => 'text-decoration', 'label' => 'Text Decoration'),
|
|
array('property' => 'line-height', 'label' => 'Line Height'),
|
|
array('property' => 'letter-spacing', 'label' => 'Letter Spacing'),
|
|
array('property' => 'overflow', 'label' => 'Overflow'),
|
|
array('property' => 'word-break', 'label' => 'Word Break'),
|
|
),
|
|
//Background group
|
|
'Background' => array(
|
|
array('property' => 'background'),
|
|
),
|
|
//Box group
|
|
'Box' => array(
|
|
array('property' => 'margin', 'label' => 'Margin'),
|
|
array('property' => 'padding', 'label' => 'Padding'),
|
|
array('property' => 'border', 'label' => 'Border'),
|
|
array('property' => 'width', 'label' => 'Width'),
|
|
array('property' => 'height', 'label' => 'Height'),
|
|
array('property' => 'border-radius', 'label' => 'Border Radius'),
|
|
array('property' => 'float', 'label' => 'Float'),
|
|
array('property' => 'display', 'label' => 'Display'),
|
|
array('property' => 'box-shadow', 'label' => 'Box Shadow'),
|
|
array('property' => 'opacity', 'label' => 'Opacity'),
|
|
),
|
|
|
|
//Box group
|
|
'Inside' => array(
|
|
array('property' => 'margin', 'label' => 'Margin', 'selector' => $selector),
|
|
array('property' => 'padding', 'label' => 'Padding', 'selector' => $selector),
|
|
array('property' => 'border', 'label' => 'Border', 'selector' => $selector),
|
|
array('property' => 'width', 'label' => 'Width', 'selector' => $selector),
|
|
array('property' => 'height', 'label' => 'Height', 'selector' => $selector),
|
|
array('property' => 'border-radius', 'label' => 'Border Radius', 'selector' => $selector),
|
|
array('property' => 'float', 'label' => 'Float', 'selector' => $selector),
|
|
array('property' => 'display', 'label' => 'Display', 'selector' => $selector),
|
|
array('property' => 'box-shadow', 'label' => 'Box Shadow', 'selector' => $selector),
|
|
array('property' => 'opacity', 'label' => 'Opacity', 'selector' => $selector),
|
|
),
|
|
|
|
//Custom code css
|
|
'Custom' => array(
|
|
array('property' => 'custom', 'label' => 'Custom CSS')
|
|
)
|
|
),
|
|
);
|
|
}
|