HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux bsx-1-dev 6.8.0-101-generic #101-Ubuntu SMP PREEMPT_DYNAMIC Mon Feb 9 10:15:05 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
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___']"
						
					)
					
				), */
			)
			
		);
		
	}

}
	
?>