Initial Commit

This commit is contained in:
2019-11-21 12:25:31 +01:00
commit f4aabcb9b1
13959 changed files with 787761 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
/********************************************************
SLIDER REVOLUTION BACKUP
* REVOLUTION 5.2.0 EXTENSION - BACKUP ADMIN CSSrs-frame-
* @version: 1.0 (16.02.2016)
* @author ThemePunch
*********************************************************/
#rs-addon-settings-trigger-backup { border-radius:0px; padding:0px; color:transparent; background:url(../images/addon_logo.png); background-size:127px 54px; background-position:top center; width:127px;height:27px;}
#rs-addon-settings-trigger-backup.selected,
#rs-addon-settings-trigger-backup:hover { background-position: bottom center}
#rs-addon-settings-trigger-backup-settings { padding:15px 20px;}
.rs-addon-backup-trigger-button { line-height:28px; color:#fff; padding:0px 20px; background: #3498db; cursor: pointer; display:inline-block;}
.rs-addon-backup-trigger-button:hover { background: #2980b9}
#dialog_select_slide_backup { padding:0px;}
.rs-backup-data-holder { line-height:45px; vertical-align: middle; border-bottom:1px solid #ddd; padding:0px 20px;}
.rs-backup-id { display: inline-block;width: 20px;text-align: right;}
.eg-icon-calendar { margin-left:25px; color:#aaa; margin-right:5px;}
.eg-icon-calendar:before { color:#aaa; font-size:16px;}
.rs-preview-backup { border:1px solid #3498db; font-size:12px; color:#3498db; line-height: 24px; padding:0px 10px; font-weight: 400; cursor: pointer; display: inline-block;margin-top:10px; border-radius: 4px;}
.rs-load-backup { background:#3498db; font-size:12px; color:#fff; line-height: 26px; padding:0px 10px; font-weight: 400; cursor: pointer; display: inline-block;margin-top:10px;border-radius: 4px; margin-left:5px;}
.rs-preview-backup:hover { color:#fff;background:#3498db;}
.rs-load-backup:hover { background: #2980b9}
.rs-backup-data-holder.rs-temp-backup-holder { background:rgba(255,255,255,0.45); border-radius: 4px; position: absolute; top: 50px; left: 50%; border-bottom:none !important; width:320px; margin-left:-160px; height:40px;line-height: 40px;}
.rs-temp-backup-holder .rs-load-backup { float:right;margin-top:8px;}
.nobackups { padding:25px 20px; color:#999; font-size: 14px;}

View File

@@ -0,0 +1,31 @@
.tp-steps span {
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
border: 2px solid #d50000;
color: #d50000;
font-size: 17px;
font-weight: 700;
width: 40px;
height: 40px;
line-height: 37px;
text-align: center;
display: block;
margin: 0 auto;
margin-bottom: 10px;
}
.tp-steps.wb span {
border: 2px solid #22a2ad;
color: #fff;
background: #22a2ad;
}
h3.tp-steps {
font-size: 20px;
text-align: center;
}
.wb-featuretext {
margin-top: 10px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,24 @@
///////////////////////////////
// INIT BACKUP SCRIPTS //
///////////////////////////////
jQuery("document").ready(function() {
// CHECK EDITOR MODE
var editor_view = jQuery('#form_slider_params').length>0 ? "slider_settings" : "slide_settings";
if (editor_view==="slide_settings"){
rs_backup_slide_init();
}
});
/********************************************************************
LAYER / SLIDE SETTINGS BACKEND jQUERY EXTENSION
**********************************************************************/
var rs_backup_slide_init = function() {
if(typeof(rs_backup_loaded) === 'undefined') return false; //WILL BE WRITTEN BY admin/includes/slide.class.php DEPENDING IF BACKUP IS ENABLED/DISABLED
}

View File

@@ -0,0 +1,45 @@
(function( $ ) {
$(function() {
/*! Main Functionality for Settings SlideOut */
jQuery('document').ready(function() {
var a = jQuery('#rev_addon_gal_settings_slideout');
punchgs.TweenLite.set(a,{xPercent:"+100%", autoAlpha:0, display:"none"});
jQuery('body').on('click', '#rs-dash-addons-slide-out-trigger_revslider-backup-addon', function() {
console.log("clicked");
//hide all wrappers
jQuery('.rs-sbs-slideout-wrapper').each(function(){
punchgs.TweenLite.to(jQuery(this),0.4,{xPercent:"+100%", autoAlpha:0, display:"none",overwrite:"auto",ease:punchgs.Power3.easeInOut});
});
//display slideout
var a = jQuery('#rev_addon_backup_settings_slideout'),
b = jQuery('.rs-dash-addons');
punchgs.TweenLite.to(a,0.4,{xPercent:"0%", autoAlpha:1, display:"block",overwrite:"auto",ease:punchgs.Power3.easeOut});
//enable Scrollbars
jQuery('#rev_addon_backup_settings_slideout .rs-sbs-slideout-inner').css("max-height",$( window ).height()-300);
setTimeout(function() {
jQuery('#rev_addon_backup_settings_slideout .rs-sbs-slideout-inner').perfectScrollbar("update");
},400);
});
jQuery('body').on('click','#rev_addon_backup_settings_slideout .rs-sbs-close', function() {
var a = jQuery('#rev_addon_backup_settings_slideout');
punchgs.TweenLite.to(a,0.4,{xPercent:"+100%", autoAlpha:0, display:"none",overwrite:"auto",ease:punchgs.Power3.easeInOut});
});
//call scrollbars
jQuery('#rev_addon_backup_settings_slideout .rs-sbs-slideout-inner').perfectScrollbar({wheelPropagation:true, suppressScrollX:true});
$(window).resize(function(){
jQuery('#rev_addon_backup_settings_slideout .rs-sbs-slideout-inner').css("max-height",$( window ).height()-300);
jQuery('#rev_addon_backup_settings_slideout .rs-sbs-slideout-inner').perfectScrollbar("update");
});
}); //end document ready
});
})( jQuery );

View File

@@ -0,0 +1,594 @@
<?php
/**
* @author ThemePunch <info@themepunch.com>
* @link http://www.themepunch.com/
* @copyright 2016 ThemePunch
*/
if( !defined( 'ABSPATH') ) exit();
class rs_backup_slide extends RevSliderAdmin {
public static function init_backup(){
add_filter('revslider_slide_settings_addons', array('rs_backup_slide', 'add_backup_settings'), 10, 3); //adds interface / menu to the Slide General Settings
add_filter('revslider_admin_onAjaxAction_switch', array('rs_backup_slide', 'add_backup_ajax_functions'), 10, 6); //adds new ajax calls to the Slider
add_action('revslider_slide_updateSlideFromData_post', array('rs_backup_slide', 'check_add_new_backup'), 10, 3); //hooks into the saving process of a Slide
add_action('revslider_slide_updateStaticSlideFromData_post', array('rs_backup_slide', 'check_add_new_backup_static'), 10, 3); //hooks into the saving process of a Static Slide
add_action('revslider_slide_deleteSlide', array('rs_backup_slide', 'delete_backup_full')); //hooks into the deletion process of a Slide
add_action('revslider_slider_deleteAllSlides', array('rs_backup_slide', 'delete_backup_full_slider')); //hooks into the deletion process of a Slide
self::create_tables(); //creates tables needed for this plugin to work
if(isset($_GET["page"]) && $_GET["page"]=="revslider"){
add_action('admin_enqueue_scripts', array('rs_backup_slide', 'wb_enqueue_styles'));
add_action('admin_enqueue_scripts', array('rs_backup_slide', 'wb_enqueue_scripts'));
}
}
public static function wb_enqueue_styles(){
wp_register_style('revslider-backup-plugin-settings', RS_BACKUP_PLUGIN_URL . 'admin/assets/css/backup-admin.css', array(), RS_BACKUP_VERSION);
wp_enqueue_style('revslider-backup-plugin-settings');
}
public static function wb_enqueue_scripts(){
wp_register_script('revslider-backup-plugin-js', RS_BACKUP_PLUGIN_URL . 'admin/assets/js/backup-admin.js', array(), RS_BACKUP_VERSION);
wp_enqueue_script('revslider-backup-plugin-js');
}
/**
* adds interface / menu to the Slide General Settings
* @since: 1.0.0
*/
public static function add_backup_settings($settings, $slide, $slider){
$slide_id = ($slide->isStaticSlide()) ? 'static_'.$slider->getID() : $slide->getID();
$markup = '<input type="hidden" id="rs-session-id" value="'. substr(md5(rand()), 0, 7) .'" />';
$markup .=
'<div class="slide-show-backups-wrapper"><div class="slide-show-backups rs-addon-backup-trigger-button" data-slideid="'.$slide_id.'">'.__("Show available Backups for this Slide",'rs_backup').'</div></div>
<div id="dialog_select_slide_backup" class="dialog_select_slide_backup" title="'.__('Select Backup', 'rs_backup').'" style="display:none;">
<div id="rs-backup-wrapper">
</div>
</div>';
$settings['backup'] = array(
'title' => __('Backup', 'rs_backup'),
'markup' => $markup,
'javascript'=> "var rs_backup_loaded = true;
jQuery('body').append('<form id=\"rs-backup-preview-form\" name=\"rs-backup-preview-form\" action=\"".RevSliderBase::$url_ajax_actions."\" target=\"rs-frame-preview\" method=\"post\"><input type=\"hidden\" id=\"rs-backup-client-action\" name=\"client_action\" value=\"\"><input type=\"hidden\" id=\"rs-nonce\" name=\"rs-nonce\" value=\"".wp_create_nonce("revslider_actions")."\"><!-- SPECIFIC FOR SLIDE PREVIEW --><input type=\"hidden\" name=\"data[id]\" value=\"\" id=\"preview-slide-backup-data\"><input type=\"hidden\" name=\"data[slide_id]\" value=\"\" id=\"preview-slide-backup-data-slide_id\"><!-- SPECIFIC FOR SLIDER PREVIEW --></form>');
jQuery('body').on('click', '.slide-show-backups', function(){
var slideID = jQuery(this).data('slideid');
var data = {'slideID':slideID};
UniteAdminRev.ajaxRequest('fetch_slide_backups', data, function(response){
jQuery('#rs-backup-wrapper').html('');
if(response.slides !== undefined && response.slides.length > 0){
for(var key in response.slides){
jQuery('#rs-backup-wrapper').append('<div class=\"rs-backup-data-holder\" data-backup=\"'+response.slides[key]['id']+'\" data-slide_id=\"'+slideID+'\"><span class=\"rs-backup-time\"><span class=\"rs-backup-id\">'+response.slides[key]['id']+'.</span><i class=\"eg-icon-calendar\"></i>'+response.slides[key]['created']+'</span><span class=\"rs-load-backup\" style=\"float: right;\">".__('Load Backup', 'rs_backup')."</span><span class=\"rs-preview-backup\" style=\"float: right;\">".__('Preview Backup', 'rs_backup')."</span></div>');
}
}else{
jQuery('#rs-backup-wrapper').append('<div class=\"nobackups\">".__('No backups found for the selected Slide', 'rs_backup')."</div>');
}
jQuery('#dialog_select_slide_backup').dialog({
modal:true,
width: 580,
height:480,
resizable:false,
closeOnEscape:true,
create:function(ui) {
jQuery(ui.target).parent().find('.ui-dialog-titlebar').addClass('tp-slider-new-dialog-title');
}
});
});
});
jQuery('body').on('click', '.rs-close-preview', function(){
jQuery('#dialog_preview_slide_backup').hide();
var rs_form = jQuery('#rs-backup-preview-form');
jQuery('#rs-backup-client-action').val('preview_slide_backup');
jQuery(\"#preview-slide-backup-data\").val(\"empty_output\");
jQuery(\"#preview-slide-backup-data-slide_id\").val(\"empty_output\");
jQuery('#rs-preview-wrapper').hide();
jQuery('.rs-temp-backup-holder').remove();
rs_form.submit();
});
jQuery(document).keyup(function(e){
if (e.keyCode == 27) jQuery('.rs-close-backup-preview').click(); // 27 == esc
});
jQuery(window).resize(function() {
jQuery('.rs-preview-width').text(jQuery('.rs-frame-preview-wrapper').width());
jQuery('.rs-preview-height').text(jQuery('.rs-frame-preview-wrapper').height());
});
jQuery('body').on('click', '.rs-load-backup', function(){
var dh = jQuery(this).closest('.rs-backup-data-holder');
if(confirm('".__('Restore Slide Backup from', 'rs_backup')." '+dh.find('.rs-backup-time').text()+'?')){
jQuery('.rs-close-preview').click(); //to hide the overlay if it is open
var backup_id = dh.data('backup');
var slide_id = dh.data('slide_id');
var session_id = jQuery('#rs-session-id').val();
var data = {'id': backup_id, 'slide_id': slide_id, 'session_id': session_id};
jQuery('#dialog_select_slide_backup').dialog('close');
UniteAdminRev.ajaxRequest('restore_slide_backup', data, function(response){
});
}
});
jQuery('body').on('click', '.rs-preview-backup', function(){
var dh = jQuery(this).closest('.rs-backup-data-holder');
var backup_id = dh.data('backup');
var slide_id = dh.data('slide_id');
var backup_time = dh.find('.rs-backup-time').html();
jQuery('#dialog_select_slide_backup').dialog('close');
var rs_form = jQuery('#rs-backup-preview-form');
//set action and data
jQuery('#rs-backup-client-action').val('preview_slide_backup');
jQuery('#preview-slide-backup-data').val(backup_id);
jQuery('#preview-slide-backup-data-slide_id').val(slide_id);
jQuery('#rs-preview-wrapper').show();
//add apply button under the form
jQuery('#rs-preview-wrapper').append('<div class=\"rs-backup-data-holder rs-temp-backup-holder\" data-backup=\"'+backup_id+'\" data-slide_id=\"'+slide_id+'\"><span class=\"rs-backup-time\">'+backup_time+'</span><span class=\"rs-load-backup\">".__('Load Backup', 'rs_backup')."</span></div>');
rs_form.submit();
jQuery(window).trigger('resize');
});
var call_wb_saveEditSlide = {
callback : function(data) {
data.session_id = jQuery('#rs-session-id').val();
return data;
},
environment : 'saveEditSlide',
function_position : 'data'
};
// ADD CALLBACKS
UniteLayersRev.addon_callbacks.push(call_wb_saveEditSlide);"
);
return $settings;
}
/**
* adds ajax functions
* @since: 1.0.0
*/
public static function add_backup_ajax_functions($remove_error, $action, $data, $slider, $slide, $operations){
switch($action){
case 'fetch_slide_backups':
$slide_id = $data['slideID'];
$slide_data = self::fetch_slide_backups($slide_id, true);
self::ajaxResponseData(array('slides' => $slide_data));
break;
case 'restore_slide_backup':
$backup_id = intval($data['id']);
$slide_id = $data['slide_id'];
$session_id = esc_attr($data['session_id']);
$response = self::restore_slide_backup($backup_id, $slide_id, $session_id, $slide);
if($response !== true) RevSliderFunctions::throwError(__("Backup restoration failed...",'rs_backup'));
$urlRedirect = self::getViewUrl(self::VIEW_SLIDE,"id=$slide_id");
$responseText = __("Backup restored, redirecting...",'rs_backup');
self::ajaxResponseSuccessRedirect($responseText, $urlRedirect);
break;
case 'preview_slide_backup':
//check if we are static or not
$operations = new RevSliderOperations();
ob_start();
//first get data
$backup_id = intval($data['id']);
$slide_id = $data['slide_id'];
if($backup_id == "empty_output"){
echo '<div class="message_loading_preview">'.__("Loading Preview...",'rs_backup').'</div>';
exit();
}
$my_data = self::fetch_backup($backup_id);
$sliderID = $my_data['slider_id'];
if(strpos($slide_id, 'static_') !== false){
$my_data['slideid'] = $slide_id;
add_filter('revslider_enable_static_layers', array('rs_backup_slide', 'disable_static_slide_for_preview'));
}else{
$my_data['slideid'] = $my_data['slide_id'];
}
$my_data['params'] = (array)json_decode($my_data['params']);
$my_data['layers'] = (array)json_decode($my_data['layers']);
$my_data['layers'] = RevSliderFunctions::convertStdClassToArray($my_data['layers']);
$my_data['settings'] = (array)json_decode($my_data['settings']);
//asort($my_data['layers']);
$output = new RevSliderOutput();
$output->setOneSlideMode($my_data);
$operations->previewOutput($sliderID,$output);
$html = ob_get_contents();
ob_clean();
ob_end_clean();
//add button to apply the Backup
//$html .= '<div >'.__('', 'rs_backup').'</div>';
echo $html;
exit;
//self::ajaxResponseData(array('markup' => $html));
break;
}
return $remove_error; // if true, then the script will just exit instead of printing an error
}
/**
* disable static layer in preview for static slide
* @since: 1.0.0
*/
public static function disable_static_slide_for_preview($do_static){
return false;
}
/**
* fetch backup by backup_id
* @since: 1.0.0
*/
public static function fetch_backup($backup_id){
global $wpdb;
$record = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".$wpdb->prefix . 'revslider_backup_slides'." WHERE id = %s", array($backup_id)), ARRAY_A);
if(!empty($record)) $record = $record[0];
return $record;
}
/**
* restore slide backup
* @since: 1.0.0
*/
public static function restore_slide_backup($backup_id, $slide_id, $session_id, $slide = false){
global $wpdb;
$backup = self::fetch_backup($backup_id);
if($slide == false){
$slide = new RevSliderSlide();
}
$current = $slide->getDataByID($slide_id);
//update the current
if(!empty($backup) && !empty($current)){
//self::add_new_backup($current, $session_id);
$current['params'] = $backup['params'];
$current['layers'] = $backup['layers'];
$current['settings'] = $backup['settings'];
$update_id = $current['id'];
unset($current['id']);
if(strpos($slide_id, 'static_') !== false){
$return = $wpdb->update(RevSliderGlobals::$table_static_slides, $current, array('id' => $update_id));
}else{
$return = $wpdb->update(RevSliderGlobals::$table_slides, $current, array('id' => $update_id));
}
//now change the backup date to current date, to set it to the last version
$backup['created'] = date('Y-m-d H:i:s');
$update_id = $backup['id'];
unset($backup['id']);
$return1 = $wpdb->update($wpdb->prefix . 'revslider_backup_slides', $backup, array('id' => $update_id));
return true;
}
return false;
}
/**
* fetch all slide revisions by slide_id
* @since: 1.0.0
*/
public static function fetch_slide_backups($slide_id, $basic = false){
global $wpdb;
if(strpos($slide_id, 'static_') !== false){
$slide = new RevSliderSlide();
$slide_id = $slide->getStaticSlideID(str_replace('static_', '', $slide_id));
$where = array($slide_id);
$where[] = 'true';
}else{
$where = array($slide_id);
$where[] = 'false';
}
if($basic){
$record = $wpdb->get_results($wpdb->prepare("SELECT `id`, `slide_id`, `slider_id`, `created` FROM ".$wpdb->prefix . 'revslider_backup_slides'." WHERE slide_id = %s AND static = %s ORDER BY `created` ASC", $where),ARRAY_A);
if(!empty($record)){
foreach($record as $k => $rec){
$record[$k]['created'] = RevSliderFunctionsWP::convertPostDate($rec['created'], true);
}
}
}else{
$record = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".$wpdb->prefix . "revslider_backup_slides WHERE slide_id = %s AND static = %s", $where), ARRAY_A);
}
return $record;
}
/**
* check if a new backup should be created
* @since: 1.0.0
*/
public static function check_add_new_backup($slide_data, $ajax_data, $slide_class){
global $wpdb;
$record = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".RevSliderGlobals::$table_slides." WHERE id = %s", array($slide_class->getID())), ARRAY_A);
if(!empty($record)){
self::add_new_backup($record[0], esc_attr($ajax_data['session_id']));
}
}
/**
* check if a new backup should be created
* @since: 1.0.0
*/
public static function check_add_new_backup_static($slide_data, $ajax_data, $slide_class){
global $wpdb;
$record = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".RevSliderGlobals::$table_static_slides." WHERE id = %s", array($slide_class->getID())), ARRAY_A);
if(!empty($record)){
self::add_new_backup($record[0], esc_attr($ajax_data['session_id']), 'true');
}
}
/**
* add new slide backup
* @since: 1.0.0
*/
public static function add_new_backup($slide, $session_id, $static = 'false'){
global $wpdb;
$slide['slide_id'] = $slide['id'];
unset($slide['id']);
$slide['created'] = date('Y-m-d H:i:s');
$slide['session'] = $session_id;
$slide['static'] = $static;
//check if session_id exists, if yes then update
$row = $wpdb->get_results($wpdb->prepare("SELECT id FROM ".$wpdb->prefix . "revslider_backup_slides WHERE session = %s AND slide_id = %s", array($session_id, $slide['slide_id'])), ARRAY_A);
if(!empty($row) && isset($row[0]) && !empty($row[0])){
$wpdb->update($wpdb->prefix . "revslider_backup_slides", $slide, array('id' => $row[0]['id']));
}else{
$wpdb->insert($wpdb->prefix . "revslider_backup_slides", $slide);
}
$cur = self::check_backup_num($slide['slide_id']);
if($cur > 11){
$early = self::get_oldest_backup($slide['slide_id']);
if($early !== false){
self::delete_backup($early['id']);
}
}
}
/**
* delete a backup of a slide
* @since: 1.0.0
*/
public static function delete_backup($id){
global $wpdb;
$wpdb->query($wpdb->prepare("DELETE FROM ".$wpdb->prefix . "revslider_backup_slides WHERE id = %s", array($id)));
}
/**
* delete all backup of a slide
* @since: 1.0.0
*/
public static function delete_backup_full($id){
global $wpdb;
$wpdb->query($wpdb->prepare("DELETE FROM ".$wpdb->prefix . "revslider_backup_slides WHERE slide_id = %s", array($id)));
}
/**
* delete all backup of a slide
* @since: 1.0.0
*/
public static function delete_backup_full_slider($id){
global $wpdb;
$wpdb->query($wpdb->prepare("DELETE FROM ".$wpdb->prefix . "revslider_backup_slides WHERE slider_id = %s", array($id)));
}
/**
* get all slide backups by slide ID
* @since: 1.0.0
**/
public static function get_slide_backup($slide_id, $static = 'false'){
global $wpdb;
$slides = $wpdb->get_results($wpdb->prepare("SELECT `id`, `slide_id`, `slide_order`, `params`, `layers`, `settings`, `created` FROM ".$wpdb->prefix."revslider_backup_slides WHERE slide_id = %s AND static = %s ORDER BY id ASC", array($slide_id, $static)), ARRAY_A);
if(!empty($slides)){
return $slides[0];
}else{
}
}
/**
* get oldest backup of a slide
* @since: 1.0.0
*/
public static function get_oldest_backup($slide_id){
global $wpdb;
$early = $wpdb->get_results($wpdb->prepare("SELECT id FROM ".$wpdb->prefix . "revslider_backup_slides WHERE slide_id = %s ORDER BY `created` ASC LIMIT 0,1", array($slide_id)), ARRAY_A);
if(!empty($early)){
return $early[0];
}else{
return false;
}
}
/**
* check for the number of backups for a slide
* @since: 1.0.0
*/
public static function check_backup_num($slide_id){
global $wpdb;
$cur = $wpdb->get_results($wpdb->prepare("SELECT COUNT(*) AS `row` FROM ".$wpdb->prefix . "revslider_backup_slides WHERE slide_id = %s GROUP BY `slide_id`", array($slide_id)), ARRAY_A);
if(!empty($cur)){
return $cur[0]['row'];
}else{
return 0;
}
}
/**
* Create/Update Database Tables
*/
public static function create_tables($networkwide = false){
global $wpdb;
if(function_exists('is_multisite') && is_multisite() && $networkwide){ //do for each existing site
$old_blog = $wpdb->blogid;
// Get all blog ids and create tables
$blogids = $wpdb->get_col("SELECT blog_id FROM ".$wpdb->blogs);
foreach($blogids as $blog_id){
switch_to_blog($blog_id);
self::_create_tables();
}
switch_to_blog($old_blog); //go back to correct blog
}else{ //no multisite, do normal installation
self::_create_tables();
}
}
/**
* Create Tables, edited for multisite
* @since 1.5.0
*/
public static function _create_tables(){
global $wpdb;
//Create/Update Grids Database
$grid_ver = get_option("revslider_backup_table_version", '0.99');
if(version_compare($grid_ver, '1', '<')){
//require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$table_name = $wpdb->prefix . 'revslider_backup_slides';
$sql = "CREATE TABLE " .$table_name ." (
id int(9) NOT NULL AUTO_INCREMENT,
slide_id int(9) NOT NULL,
slider_id int(9) NOT NULL,
slide_order int not NULL,
params LONGTEXT NOT NULL,
layers LONGTEXT NOT NULL,
settings TEXT NOT NULL,
created DATETIME NOT NULL,
session VARCHAR(100) NOT NULL,
static VARCHAR(20) NOT NULL,
UNIQUE KEY id (id)
);";
dbDelta($sql);
update_option('revslider_backup_table_version', '1');
$grid_ver = '1';
}
}
}
?>

View File

@@ -0,0 +1,225 @@
<?php
/**
* @author ThemePunch <info@themepunch.com>
* @link http://www.themepunch.com/
* @copyright 2016 ThemePunch
*/
if( !defined( 'ABSPATH') ) exit();
class rs_backup_update {
private $plugin_url = 'http://codecanyon.net/item/slider-revolution-responsive-wordpress-plugin/2751380';
private $remote_url = 'http://updates.themepunch.tools/check_for_updates.php';
private $remote_url_info = 'http://updates.themepunch.tools/addons/revslider-backup-addon/revslider-backup-addon.php';
private $plugin_slug = 'revslider-backup-addon';
private $plugin_path = 'revslider-backup-addon/revslider-backup-addon.php';
private $version;
private $plugins;
private $option;
public function __construct($version) {
$this->option = $this->plugin_slug . '_update_info';
$this->_retrieve_version_info();
$this->version = $version;
}
public function delete_update_transients() {
delete_transient( 'update_themes' );
delete_transient( 'update_plugins' );
delete_site_transient( 'update_plugins' );
delete_site_transient( 'update_themes' );
}
public function add_update_checks(){
add_filter('pre_set_site_transient_update_plugins', array(&$this, 'set_update_transient'));
add_filter('plugins_api', array(&$this, 'set_updates_api_results'), 10, 3);
}
public function set_update_transient($transient) {
$this->_check_updates();
if(isset($transient) && !isset($transient->response)) {
$transient->response = array();
}
if(!empty($this->data->basic) && is_object($this->data->basic)) {
if(version_compare($this->version, $this->data->basic->version, '<')) {
$this->data->basic->new_version = $this->data->basic->version;
$transient->response[$this->plugin_path] = $this->data->basic;
}
}
return $transient;
}
public function set_updates_api_results($result, $action, $args) {
$this->_check_updates();
if(isset($args->slug) && $args->slug == $this->plugin_slug && $action == 'plugin_information') {
if(is_object($this->data->full) && !empty($this->data->full)) {
$result = $this->data->full;
}
}
return $result;
}
protected function _check_updates() {
$force_check = false;
if( (isset($_GET['checkforupdates']) && $_GET['checkforupdates'] == 'true') || isset($_GET["force-check"])) $force_check = true;
// Get data
if(empty($this->data)) {
$data = get_option($this->option, false);
$data = $data ? $data : new stdClass;
$this->data = is_object($data) ? $data : maybe_unserialize($data);
}
$last_check = get_option('rs_backup-update-check');
if($last_check == false){ //first time called
$last_check = time();
update_option('rs_backup-update-check', $last_check);
}
// Check for updates
if(time() - $last_check > 172800 || $force_check == true){
$data = $this->_retrieve_update_info();
if(isset($data->basic)) {
update_option('rs_backup-update-check', time());
$this->data->checked = time();
$this->data->basic = $data->basic;
$this->data->full = $data->full;
//update_option('rs_backup-stable-version', $data->full->stable);
update_option('rs_backup-latest-version', $data->full->version);
}
}
// Save results
update_option($this->option, $this->data);
}
public function _retrieve_update_info() {
global $wp_version;
$data = new stdClass;
// Build request
$validated = get_option('rs_backup-valid', 'false');
$purchase = (get_option('revslider-valid', 'false') == 'true') ? get_option('revslider-code', '') : '';
$rattr = array(
'code' => urlencode($purchase),
'version' => urlencode(RS_BACKUP_VERSION)
);
$request = wp_remote_post($this->remote_url_info, array(
'user-agent' => 'WordPress/'.$wp_version.'; '.get_bloginfo('url'),
'body' => $rattr
));
if(!is_wp_error($request)) {
if($response = maybe_unserialize($request['body'])) {
if(is_object($response)) {
$data = $response;
$data->basic->url = $this->plugin_url;
$data->full->url = $this->plugin_url;
$data->full->external = 1;
}
}
}
return $data;
}
public function _retrieve_version_info($force_check = false) {
global $wp_version;
$last_check = get_option('rs_backup-update-check-short');
if($last_check == false){ //first time called
$last_check = time();
update_option('rs_backup-update-check-short', $last_check);
}
// Check for updates
if(time() - $last_check > 172800 || $force_check == true){
update_option('rs_backup-update-check-short', time());
$purchase = (get_option('revslider-valid', 'false') == 'true') ? get_option('revslider-code', '') : '';
$response = wp_remote_post($this->remote_url, array(
'user-agent' => 'WordPress/'.$wp_version.'; '.get_bloginfo('url'),
'body' => array(
'item' => urlencode('revslider-backup-addon'),
'version' => urlencode(RS_BACKUP_VERSION),
'code' => urlencode($purchase)
)
));
$response_code = wp_remote_retrieve_response_code( $response );
$version_info = wp_remote_retrieve_body( $response );
if ( $response_code != 200 || is_wp_error( $version_info ) ) {
update_option('rs_backup-connection', false);
return false;
}else{
update_option('rs_backup-connection', true);
}
/*
$version_info = json_decode($version_info);
if(isset($version_info->version)){
update_option('rs_backup-latest-version', $version_info->version);
}
if(isset($version_info->notices)){
update_option('rs_backup-notices', $version_info->notices);
}
if(isset($version_info->dashboard)){
update_option('rs_backup-dashboard', $version_info->dashboard);
}
if(isset($version_info->deactivated) && $version_info->deactivated === true){
if(get_option('rs_backup-valid', 'false') == 'true'){
//remove validation, add notice
update_option('rs_backup-valid', 'false');
update_option('rs_backup-deact-notice', true);
}
}
*/
}
if($force_check == true){ //force that the update will be directly searched
update_option('rs_backup-update-check', '');
}
}
}
?>

View File

@@ -0,0 +1,44 @@
<?php
/**
* Provide a admin area view for the plugin
*
* This file is used to markup the admin-facing aspects of the plugin.
*
* @link http://www.themepunch.com
* @since 1.0.0
*
* @package Slider Revolution Backup Add-on
*/
if( !defined( 'ABSPATH') ) exit();
?>
<div id="rev_addon_backup_settings_slideout" class="rs-sbs-slideout-wrapper" style="display:none">
<div class="rs-sbs-header">
<div class="rs-sbs-step"><i class="eg-icon-cog"></i></div>
<div class="rs-sbs-title"><?php _e('How to use Backups', 'rs_backup'); ?></div>
<div class="rs-sbs-close"><i class="eg-icon-cancel"></i></div>
</div>
<div class="tp-clearfix"></div>
<div class="rs-sbs-slideout-inner">
<!-- Start Settings -->
<h3 class="tp-steps wb"><span>1</span> <?php _e('"Add-ons" Tab','rs_backup'); ?></h3>
<img src="<?php echo RS_BACKUP_PLUGIN_URL . "admin/assets/images/tutorial1.png"; ?>">
<div class="wb-featuretext"><?php _e('Right after installing the Backup add-on, you are ready for action!','rs_backup'); ?></div>
<h3 class="tp-steps wb"><span>2</span> <?php _e('Select "Backups"','rs_backup'); ?></h3>
<img src="<?php echo RS_BACKUP_PLUGIN_URL . "admin/assets/images/tutorial2.png"; ?>">
<div class="wb-featuretext"><?php _e('Click on the Backups button to reveal the "Show available Backups for this Slide" button.','rs_backup'); ?></div>
<h3 class="tp-steps wb"><span>3</span> <?php _e('Backups List','rs_backup'); ?></h3>
<img src="<?php echo RS_BACKUP_PLUGIN_URL . "admin/assets/images/tutorial3.png"; ?>">
<div class="wb-featuretext"><?php _e('Preview or load directly the desired backup from a rotating list of 11 backups.','rs_backup'); ?></div>
<h3 class="tp-steps wb"><span>4</span> <?php _e('Preview Backup','rs_backup'); ?></h3>
<img src="<?php echo RS_BACKUP_PLUGIN_URL . "admin/assets/images/tutorial4.png"; ?>">
<div class="wb-featuretext"><?php _e('Preview the slide backup with the possibility to load it.','rs_backup'); ?></div>
<!-- End Settings -->
</div>
</div>

View File

@@ -0,0 +1,114 @@
<?php
/**
* @author ThemePunch <info@themepunch.com>
* @link http://www.themepunch.com/
* @copyright 2016 ThemePunch
*/
if( !defined( 'ABSPATH') ) exit();
class rs_backup_base {
public function __construct(){
try{
if(class_exists('RevSliderFront')){ //check if Slider Revolution is installed
if(version_compare(RevSliderGlobals::SLIDER_REVISION, '5.2.0', '>=')){
if(get_option('revslider-valid', 'false') == 'true'){
self::load_plugin_textdomain();
if(is_admin()){
require_once(RS_BACKUP_PLUGIN_PATH.'admin/includes/slide.class.php');
rs_backup_slide::init_backup();
//Updates
require_once(RS_BACKUP_PLUGIN_PATH.'admin/includes/update.class.php');
$update_admin = new rs_backup_update(RS_BACKUP_VERSION);
add_filter( 'pre_set_site_transient_update_plugins', array($update_admin ,'set_update_transient') );
add_filter( 'plugins_api', array($update_admin ,'set_updates_api_results'),10,3 );
//Dashboard Slideout
add_filter('rev_addon_dash_slideouts',array('rs_backup_base','display_plugin_admin_page'));
add_action('admin_enqueue_scripts', array('rs_backup_base', 'enqueue_dash_scripts'));
add_action('admin_enqueue_scripts', array('rs_backup_base', 'enqueue_dash_style'));
}
}else{
add_action('admin_notices', array('rs_backup_base', 'add_notice_activation'));
//add notification that slider revolution needs to be activated
}
}else{
add_action('admin_notices', array('rs_backup_base', 'add_notice_version'));
//add notification that plugin version of Slider Revolution has to be at least version 5.2.0
}
}else{
add_action('admin_notices', array('rs_backup_base', 'add_notice_plugin'));
//add notification that plugin Slider Revolution has to be installed
}
}catch(Exception $e){
$message = $e->getMessage();
$trace = $e->getTraceAsString();
echo _e("Slider Revolution Backup Add-On:",'rs_backup')." <b>".$message."</b>";
}
}
public static function add_notice_plugin(){
?>
<div class="error below-h2 wb-notice-wrap" id="message"><p><?php _e('To use Slider Revolution Backup Add-on, please install Slider Revolution for WordPress', 'rs_backup'); ?></p></div>
<?php
}
public static function add_notice_version(){
?>
<div class="error below-h2 wb-notice-wrap" id="message"><p><?php _e('To use Slider Revolution Backup Add-on, please update Slider Revolution for WordPress to version 5.2.0 or later', 'rs_backup'); ?></p></div>
<?php
}
public static function add_notice_activation(){
?>
<div class="error below-h2 wb-notice-wrap" id="message"><p><?php _e('To use Slider Revolution Backup Add-on, please activate Slider Revolution for WordPress', 'rs_backup'); ?></p></div>
<?php
}
public static function load_plugin_textdomain(){
load_plugin_textdomain('rs_backup', false, RS_BACKUP_PLUGIN_PATH . 'languages/');
}
/**
* Render the settings page for this plugin.
*
* @since 1.0.0
*/
public static function display_plugin_admin_page() {
include_once( RS_BACKUP_PLUGIN_PATH . 'admin/views/admin-display.php' );
}
/**
* Register the JavaScript for the admin area.
*
* @since 1.0.0
*/
public static function enqueue_dash_scripts() {
if(isset($_GET["page"]) && $_GET["page"]=="rev_addon"){
wp_enqueue_script( "rs_backup_dash", RS_BACKUP_PLUGIN_URL . 'admin/assets/js/backup_dash-admin.js', array( 'jquery' ), RS_BACKUP_VERSION, false );
wp_localize_script( 'rs_backup', 'rs_backup', array(
'ajax_url' => admin_url( 'admin-ajax.php' )
));
}
}
/**
* Register the CSS for the admin area.
*
* @since 1.0.0
*/
public static function enqueue_dash_style() {
if(isset($_GET["page"]) && $_GET["page"]=="rev_addon"){
wp_enqueue_style( "rs_backup_dash", RS_BACKUP_PLUGIN_URL . 'admin/assets/css/backup-dash-admin.css', array() , RS_BACKUP_VERSION );
}
}
}
?>

View File

@@ -0,0 +1,20 @@
<div class="slider-revolution-update-list">
<h3 class="version-number">Version 1.0.1 (18th March 2016)</h3>
<div class="change"><strong style="font-weight:700">CHANGES</strong></div>
<ul>
<li>Added transient to the update checks for less server calls</li>
</ul>
<h3 class="version-number">Version 1.0.0 (19th January 2016)</h3>
<div class="newfeature"><strong style="font-weight:700">NEW FEATURES</strong></div>
<ul>
</ul>
<div class="change"><strong style="font-weight:700">CHANGES</strong></div>
<ul>
</ul>
<div class="bugfix"><strong style="font-weight:700">BUGFIXES</strong></div>
<ul>
</ul>
</div>

View File

@@ -0,0 +1,37 @@
<?php
/*
Plugin Name: Slider Revolution Backup Add-on
Plugin URI: http://www.themepunch.com/
Description: Make Backups Revisions for your safety
Author: ThemePunch
Version: 1.0.1
Author URI: http://themepunch.com
*/
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
die;
}
define( 'RS_BACKUP_PLUGIN_URL', str_replace('index.php','',plugins_url( 'index.php', __FILE__ )));
define( 'RS_BACKUP_PLUGIN_PATH', plugin_dir_path(__FILE__) );
define( 'RS_BACKUP_FILE_PATH', __FILE__ );
define( 'RS_BACKUP_VERSION', '1.0.1');
require_once(RS_BACKUP_PLUGIN_PATH.'includes/base.class.php');
add_action('plugins_loaded', 'rs_backup_init');
function rs_backup_init(){
$wb_base = new rs_backup_base();
}
/*
* Register hooks that are fired when the plugin is activated or deactivated.
* When the plugin is deleted, the uninstall.php file is loaded.
*/
register_activation_hook( __FILE__, array('rs_backup_slide', 'create_tables' ));
?>

View File

@@ -0,0 +1,6 @@
<?php
if( !defined( 'ABSPATH') && !defined('WP_UNINSTALL_PLUGIN') )
exit();
delete_option('revslider_backup_table_version');
?>