lubuntu.me/plugins/revslider/includes/extension.class.php
2016-11-28 21:52:15 -08:00

213 lines
6.3 KiB
PHP

<?php
/* Provider: - *
* Slider Revolution
*
* @package Essential_Grid
* @author ThemePunch <info@themepunch.com>
* @link http://www.revolution.themepunch.com/
* @copyright 2015 ThemePunch
*/
/* Provider: - *
* @package RevSliderExtension
* @author ThemePunch <info@themepunch.com>
*/
if( !defined( 'ABSPATH') ) exit();
class RevSliderExtension {
public function __construct() {
$this->init_essential_grid_extensions();
}
/* Provider: - **************************
* Setup part for Revslider inclusion into Essential Grid
***************************/
/* Provider: - *
* Do all initializations for RevSlider integration
*/
public function init_essential_grid_extensions(){
if(!class_exists('Essential_Grid')) return false; //only add if Essential Grid is installed
add_filter('essgrid_set_ajax_source_order', array($this, 'add_slider_to_eg_ajax'));
add_filter('essgrid_handle_ajax_content', array($this, 'set_slider_values_to_eg_ajax'), 10, 4);
add_action('essgrid_add_meta_options', array($this, 'add_eg_additional_meta_field'));
add_action('essgrid_save_meta_options', array($this, 'save_eg_additional_meta_field'), 10, 2);
//only do on frontend
add_action('admin_head', array($this, 'add_eg_additional_inline_javascript'));
add_action('wp_head', array($this, 'add_eg_additional_inline_javascript'));
}
/* Provider: - *
* Add Slider to the List of choosable media
*/
public function add_slider_to_eg_ajax($media){
$media['revslider'] = array('name' => __('Slider Revolution', REVSLIDER_TEXTDOMAIN), 'type' => 'ccw');
return $media;
}
/* Provider: - *
* Add Slider to the List of choosable media
*/
public function set_slider_values_to_eg_ajax($handle, $media_sources, $post, $grid_id){
if($handle !== 'revslider') return false;
$slider_source = '';
$values = get_post_custom($post['ID']);
if(isset($values['eg_sources_revslider'])){
if(isset($values['eg_sources_revslider'][0]))
$slider_source = @$values['eg_sources_revslider'][0];
else
$slider_source = @$values['eg_sources_revslider'];
}
if($slider_source === ''){
return false;
}else{
return ' data-ajaxtype="'.$handle.'" data-ajaxsource="'.$slider_source.'"';
}
}
/* Provider: - *
* Adds custom meta field into the essential grid meta box for post/pages
*/
public function add_eg_additional_meta_field($values){
$sld = new RevSlider();
$sliders = $sld->getArrSliders();
$shortcodes = array();
if(!empty($sliders)){
$first = true;
foreach($sliders as $slider){
$name = $slider->getParam('shortcode','false');
if($name != 'false'){
$shortcodes[$slider->getID()] = $name;
$first = false;
}
}
}
$selected_slider = (isset($values['eg_sources_revslider'])) ? $values['eg_sources_revslider'] : '';
if($selected_slider == '') $selected_slider[0] = '';
?>
<p>
<strong style="font-size:14px"><?php _e('Choose Revolution Slider', REVSLIDER_TEXTDOMAIN); ?></strong>
</p>
<p>
<select name="eg_sources_revslider" id="eg_sources_revslider">
<option value=""<?php selected($selected_slider[0], ''); ?>><?php _e('--- Choose Slider ---', REVSLIDER_TEXTDOMAIN); ?></option>
<?php
if(!empty($shortcodes)){
foreach($shortcodes as $id => $name){
?>
<option value="<?php echo $id; ?>"<?php selected($selected_slider[0], $id); ?>><?php echo $name; ?></option>
<?php
}
}
?>
</select>
</p>
<?php
}
/* Provider: - *
* Adds custom meta field into the essential grid meta box for post/pages
*/
public function save_eg_additional_meta_field($metas, $post_id){
if(isset($metas['eg_sources_revslider']))
update_post_meta($post_id, 'eg_sources_revslider', $metas['eg_sources_revslider']);
}
/* Provider: - *
* Adds needed javascript to the DOM
*/
public function add_eg_additional_inline_javascript(){
?>
<script type="text/javascript">
jQuery(document).ready(function() {
// CUSTOM AJAX CONTENT LOADING FUNCTION
var ajaxRevslider = function(obj) {
// obj.type : Post Type
// obj.id : ID of Content to Load
// obj.aspectratio : The Aspect Ratio of the Container / Media
// obj.selector : The Container Selector where the Content of Ajax will be injected. It is done via the Essential Grid on Return of Content
var content = "";
data = {};
data.action = 'revslider_ajax_call_front';
data.client_action = 'get_slider_html';
data.token = '<?php echo wp_create_nonce("RevSlider_Front"); ?>';
data.type = obj.type;
data.id = obj.id;
data.aspectratio = obj.aspectratio;
// SYNC AJAX REQUEST
jQuery.ajax({
type:"post",
url:"<?php echo admin_url('admin-ajax.php'); ?>",
dataType: 'json',
data:data,
async:false,
success: function(ret, textStatus, XMLHttpRequest) {
if(ret.success == true)
content = ret.data;
},
error: function(e) {
console.log(e);
}
});
// FIRST RETURN THE CONTENT WHEN IT IS LOADED !!
return content;
};
// CUSTOM AJAX FUNCTION TO REMOVE THE SLIDER
var ajaxRemoveRevslider = function(obj) {
return jQuery(obj.selector+" .rev_slider").revkill();
};
// EXTEND THE AJAX CONTENT LOADING TYPES WITH TYPE AND FUNCTION
var extendessential = setInterval(function() {
if (jQuery.fn.tpessential != undefined) {
clearInterval(extendessential);
if(typeof(jQuery.fn.tpessential.defaults) !== 'undefined') {
jQuery.fn.tpessential.defaults.ajaxTypes.push({type:"revslider",func:ajaxRevslider,killfunc:ajaxRemoveRevslider,openAnimationSpeed:0.3});
// type: Name of the Post to load via Ajax into the Essential Grid Ajax Container
// func: the Function Name which is Called once the Item with the Post Type has been clicked
// killfunc: function to kill in case the Ajax Window going to be removed (before Remove function !
// openAnimationSpeed: how quick the Ajax Content window should be animated (default is 0.3)
}
}
},30);
});
</script>
<?php
}
}
?>