File: //proc/thread-self/cwd/wp-content/plugins/revslider-hovermorph-addon/framework/base.class.php
<?php
/*
* @author ThemePunch <info@themepunch.com>
* @link http://www.themepunch.com/
* @copyright 2024 ThemePunch
*/
if(!defined('ABSPATH')) exit();
class RsAddOnHoverMorphBase {
const MINIMUM_VERSION = '6.7.14';
protected function systemsCheck() {
if(!class_exists('RevSliderFront')) {
return 'add_notice_plugin';
}
else if(!version_compare(RevSliderGlobals::SLIDER_REVISION, RsAddOnHoverMorphBase::MINIMUM_VERSION, '>=')) {
return 'add_notice_version';
}
else if(get_option('revslider-valid', 'false') == 'false') {
return 'add_notice_activation';
}
return false;
}
protected function loadClasses() {
global $SR_GLOBALS;
$isAdmin = is_admin();
if($isAdmin) {
//handle update process, this uses the typical ThemePunch server process
require_once(static::$_PluginPath . 'admin/includes/update.class.php');
$update_admin = new RevAddOnHoverMorphUpdate(static::$_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);
// admin CSS/JS
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
add_action( 'revslider_do_ajax', array($this, 'do_ajax'),10,2);
add_filter('sr_exportSlider_usedMedia', array($this, 'export_adddon_images'), 10, 3);
add_filter('revslider_importSliderFromPost_modify_data', array($this, 'import_update_addon_image_urls'), 10, 3);
}
//v7, load always as things are needed in overview page
require_once(static::$_PluginPath . 'public/includes/front.class.php');
new SrHoverMorphFront(static::$_PluginTitle);
global $SR_GLOBALS;
if(!isset($SR_GLOBALS['front_version']) || $SR_GLOBALS['front_version'] !== 7){
/*
frontend scripts always enqueued for admin previews
*/
require_once(static::$_PluginPath . 'sr6/includes/slider.class.php');
require_once(static::$_PluginPath . 'sr6/includes/slide.class.php');
new RsHoverMorphSliderFront(static::$_Version, static::$_PluginUrl, static::$_PluginTitle, $isAdmin);
new RsHoverMorphSlideFront(static::$_PluginTitle);
}
}
/**
* Load the textdomain
**/
protected function _loadPluginTextDomain(){
load_plugin_textdomain('rs_' . static::$_PluginTitle, false, static::$_PluginPath . 'languages/');
}
// load admin scripts
public function enqueue_admin_scripts($hook) {
if($hook === 'toplevel_page_revslider') {
if(!isset($_GET['page']) || !isset($_GET['view'])) return;
$page = $_GET['page'];
if($page !== 'revslider') return;
$_handle = 'rs-' . static::$_PluginTitle;
$_base = static::$_PluginUrl . 'admin/assets/';
// load fronted Script for some global function
$_jsPathMin = file_exists(RS_HOVERMORPH_PLUGIN_PATH . 'sr6/assets/js/revolution.addon.' . static::$_PluginTitle . '.js') ? '' : '.min';
wp_enqueue_script($_handle.'-js', static::$_PluginUrl . 'sr6/assets/js/revolution.addon.' . static::$_PluginTitle . $_jsPathMin . '.js', array('jquery', 'revbuilder-admin'), static::$_Version, true);
$_jsPathMin = file_exists(static::$_PluginPath . 'admin/assets/js/revslider-' . static::$_PluginTitle . '-addon-admin.dev.js') ? '.dev' : '';
wp_enqueue_style($_handle.'-css', $_base . 'css/revslider-' . static::$_PluginTitle . '-addon-admin.css', array(), static::$_Version);
wp_enqueue_script($_handle.'-addon-admin-js', $_base . 'js/revslider-' . static::$_PluginTitle . '-addon-admin' . $_jsPathMin . '.js', array('jquery', 'revbuilder-admin'), static::$_Version, true);
wp_localize_script($_handle.'-addon-admin-js', 'revslider_hovermorph_addon', self::get_var() );
wp_enqueue_script('revbuilder-threejs', RS_PLUGIN_URL . 'sr6/assets/js/libs/three.min.js', array('jquery', 'revbuilder-admin',$_handle.'-js'), RS_REVISION);
add_action('revslider_do_ajax', array($this, 'do_ajax'), 10, 2);
}
}
/**
* add images to the export
**/
/* public function export_adddon_images($used_media, $slides, $sliderParams){
$func = new RevSliderFunctions();
foreach($slides ?? [] as $slide){
$layers = $func->get_val($slide, 'layers', []);
foreach($layers ?? [] as $layer){
$image = $func->get_val($layer, array('addOns', 'revslider-hovermorph-addon', 'parbackground'), '');
if(!empty($image)) $used_media[$image] = true;
}
}
return $used_media;
} */
public function export_adddon_images($data, $slides, $sliderParams){
$func = new RevSliderFunctions();
foreach($slides as $slide){
$layers = $func->get_val($slide, 'layers', array());
if(!empty($layers)){
foreach($layers as $layer){
$image = $func->get_val($layer, array('addOns', 'revslider-hovermorph-addon', 'parbackground'), '');
if(!empty($image)){
$ext = pathinfo($image, PATHINFO_EXTENSION);
if($ext == 'svg'){
$data['used_svg'][$image] = true;
}else{
$data['used_images'][$image] = true;
}
}
}
}
}
return $data;
}
/**
* import images if existing
**/
public function import_update_addon_image_urls($data, $slidetype, $image_path) {
global $wp_filesystem;
$func = new RevSliderFunctions();
$alias = $func->get_val($data, array('sliderParams', 'alias'), '');
if(!empty($alias)) {
$upload_dir = wp_upload_dir();
$path = '/';
$layers = $func->get_val($data, 'layers', array());
if(!empty($layers)){
foreach($layers as $k => $layer){
$_images = array(
'parbackground' => $func->get_val($layer, array('addOns', 'revslider-hovermorph-addon', 'parbackground'), '')
);
foreach($_images as $key => $_image){
if(empty($_image)) continue;
$imported = $func->get_val($data, 'imported', array());
$strip = false;
$zimage = $wp_filesystem->exists($image_path.'images/'.$_image);
if(!$zimage){
$zimage = $wp_filesystem->exists(str_replace('//', '/', $image_path.'images/'.$_image));
$strip = true;
}
$ext = pathinfo($_image, PATHINFO_EXTENSION);
if($ext == 'svg'){
//check if we need to import it, if its available in the zip file
if(!$zimage) $_image = content_url().$_image;
}
if($zimage){
if(!isset($imported['images/'.$_image])){
//check if we are object folder, if yes, do not import into media library but add it to the object folder
$uimg = ($strip == true) ? str_replace('//', '/', 'images/'.$_image) : $_image; //pclzip
$file = $upload_dir['basedir'] . $path . $_image;
$_file = $upload_dir['baseurl'] . $path . $_image;
@mkdir(dirname($file), 0777, true);
@copy($image_path.'images/'.$_image, $file);
$imported['images/'.$_image] = $_file;
$_image = $_file;
}else{
$_image = $imported['images/'.$_image];
}
}
if(!empty($_image)){
$data['layers'][$k]['addOns']['revslider-hovermorph-addon'][$key] = $_image;
}
}
}
}
}
return $data;
}
/**
* New function for ajax activation to include AddOn help definitions
*
* @since 2.0.0
*/
public static function get_data($var='',$slug='revslider-hovermorph-addon') {
if($slug === 'revslider-hovermorph-addon'){
$obj = self::get_var();
$obj['help'] = self::get_definitions();
return $obj;
}
return $var;
}
/**
* Called via php filter. Merges AddOn definitions with core revslider definitions
*
* @since 2.0.0
*/
public static function get_help($definitions) {
if(empty($definitions) || !isset($definitions['editor_settings'])) return $definitions;
if(isset($definitions['editor_settings']['layer_settings']) && isset($definitions['editor_settings']['layer_settings']['addons'])) {
$help = self::get_definitions();
$definitions['editor_settings']['layer_settings']['addons']['hovermorph_addon'] = $help['layer'];
}
return $definitions;
}
public function do_ajax($return = "",$action ="") {
switch ($action) {
case 'delete_custom_templates_revslider-hovermorph-addon':
$return = $this->delete_template($_REQUEST["data"]);
if($return){
return __('Fluid Dynamics Template deleted', 'revslider-hovermorph-addon');
}
else{
return __('Fluid Dynamics Template could not be deleted', 'revslider-hovermorph-addon');
}
break;
case 'save_custom_templates_revslider-hovermorph-addon':
$return = $this->save_template($_REQUEST["data"]);
if(empty($return) || !$return){
return __('Fluid Dynamics Template could not be saved', 'revslider-hovermorph-addon');
}
else {
return array( 'message' => __('Fluid Dynamics Template saved', 'revslider-hovermorph-addon'), 'data' => array("id" => $return));
}
break;
default:
return $return;
break;
}
}
/**
* Save Custom Template
*
* @since 2.0.0
*/
private function save_template($template){
//load already saved templates
$custom = $this->get_templates();
//empty custom templates?
if(!$custom || !is_array($custom)){
$custom = array();
$new_id = 1;
}
else{
//custom templates exist
if(isset($template["id"]) && is_numeric($template["id"]) ){
//id exists , overwrite
$new_id = $template["id"];
}
else{
//id does not exist , new template
$new_id = max(array_keys($custom))+1;
}
}
//update or insert template
$custom[$new_id]["title"] = $template["obj"]["title"];
$custom[$new_id]["preset"] = $template["obj"]["preset"];
if(update_option( 'revslider_addon_hovermorph_templates', $custom )){
//return the ID the template was saved with
return $new_id;
}
else {
//updating failed, blank result set
return "";
}
}
/**
* Delete Custom Template
*
* @since 2.0.0
*/
private function delete_template($template){
//load templates array
$custom = $this->get_templates();
//custom template exist
if(isset($template["id"]) && is_numeric($template["id"]) ){
//delete given ID
$delete_id = $template["id"];
unset($custom[$delete_id]);
//save the resulting templates array again
if(update_option( 'revslider_addon_hovermorph_templates', $custom )){
return true;
}
else {
return false;
}
}
}
/**
* Read Custom Templates from WP option, false if not set
*
* @since 2.0.0
*/
private static function get_templates(){
//load WP option
$custom = get_option('revslider_addon_hovermorph_templates',false);
//check for templates saved before 6.0
if(!isset($custom[1]["title"])){
$custom = self::fallback_templates($custom);
//save new array into WP option
update_option('revslider_addon_hovermorph_templates',$custom);
}
return $custom;
}
/**
* Prepare old templates (before 6.0) to be readable/translateable for 6.x
*
* @since 2.0.0
*/
private static function fallback_templates($templates){
$template_count = 1;
$custom = array();
/*
//run through templates and build compatible array
foreach($templates as $template_title => $template_presets){
$custom[$template_count]["title"] = $template_title;
$custom[$template_count]["preset"] = $template_presets;
}
*/
return $custom;
}
/**
* Returns the global JS variable
*
* @since 2.0.0
*/
public static function get_var() {
$_textdomain = 'revslider-hovermorph-addon';
return array(
'custom_templates' => self::get_templates(),
'bricks' => array(
// GENERAL
'hovermorph' => __('Hover Morph', $_textdomain),
'hovermorphdatt' => __('Hovermorph Setup', $_textdomain),
// PRESETS
'defaultpres' => __('Default Presets', $_textdomain),
'custompres' => __('Custom Presets', $_textdomain),
'presetslib' => __('Presets', $_textdomain),
// FOLDERS
'hmMain' => __('Main', $_textdomain),
'hmInter' => __('Interaction', $_textdomain),
// HEADERS
'imageHeader' => __('Image Setup', $_textdomain),
// MAIN
'image' => __('Image', $_textdomain),
'adjustBrightness' => __('Lighten Image', $_textdomain),
'shape' => __('Shape', $_textdomain),
'custom' => __('Image', $_textdomain),
'text' => __('Text', $_textdomain),
'circle' => __('Circle', $_textdomain),
'box' => __('Box', $_textdomain),
'triangle' => __('Triangle', $_textdomain),
'rhombus' => __('Rhombus', $_textdomain),
'triangleCustom' => __('Custom Triangle', $_textdomain),
'pentagon' => __('Pentagon', $_textdomain),
'hexagon' => __('Hexagon', $_textdomain),
'octogon' => __('Octogon', $_textdomain),
'star' => __('Star', $_textdomain),
'cross' => __('Cross', $_textdomain),
'heart' => __('Heart', $_textdomain),
'shapeSize' => __('Size', $_textdomain),
'shapeXPos' => __('X', $_textdomain),
'shapeYPos' => __('Y', $_textdomain),
'shapeZPos' => __('Z', $_textdomain),
'shapeFill' => __('Fill', $_textdomain),
'shapeSelector' => __('Select', $_textdomain),
'shapeBorderSize' => __('Thickness', $_textdomain),
'imgFit' => __('Source Type', $_textdomain),
'position' => __('Position', $_textdomain),
'cover' => __('Cover', $_textdomain),
'contain' => __('Contain', $_textdomain),
'scale' => __('Scale', $_textdomain),
'imageColor' => __('Color', $_textdomain),
'imgColorOpt' => __('Color Option', $_textdomain),
'full' => __('Full Color', $_textdomain),
'glow' => __('Color Glow', $_textdomain),
'colorfull' => __('Colorfull', $_textdomain),
'textFont' => __('Font', $_textdomain),
'textFontWeight' => __('Font Weight', $_textdomain),
'textFontSize' => __('Font Size', $_textdomain),
// INTERACTION
'interactionRadius' => __('Radius', $_textdomain),
'interIntens' => __('Intensity', $_textdomain),
)
);
}
/**
* Returns the addon help definitions
*
* @since 2.0.0
*/
private static function get_definitions() {
return array(
'layer' => array(
//__________ MAIN ____________
/* '___NAME___' => array(
'buttonTitle' => __('___TITLE___', 'revslider-hovermorph-addon'),
'title' => __('___TITLE___', 'revslider-hovermorph-addon'),
'helpPath' => 'addOns.revslider-hovermorph-addon.___NAME___',
'keywords' => array('addon', 'addons', 'hovermorph', 'hovermorph addon', '___TITLE___'),
'description' => __("___DESCRIBE_SETTING___", 'revslider-hovermorph-addon'),
'helpStyle' => 'normal',
'article' => 'http://docs.themepunch.com/slider-revolution/hovermorph-addon/',
'video' => false,
'section' => 'Layer Settings -> HoverMorph',
'highlight' => array(
'dependencies' => array('layerselected::shape{{hovermorph}}'),
'menu' => "#module_layers_trigger, #gst_layer_revslider-hovermorph-addon",
'scrollTo' => '#form_layerinner_revslider-hovermorph-addon',
'focus' => "*[data-r='addOns.revslider-hovermorph-addon.___NAME___']"
)
), */
)
);
}
}
?>