HEX
Server: Apache
System: Linux 244.240.109.208.host.secureserver.net 5.14.0-611.11.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Dec 3 09:47:37 EST 2025 x86_64
User: icsla (1002)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/icsla/.trash/new-website/wp-content/plugins/multi-step-form/includes/msf.class.php
<?php

if (!defined('ABSPATH')) exit;

class Mondula_Form_Wizard {

	/**
	 * The single instance of Mondula_Form_Wizard.
	 * @var 	object
	 * @access  private
	 * @since 	1.0.0
	 */
	private static $_instance = null;

	/**
	 * Settings class object
	 * @var     object
	 * @access  public
	 * @since   1.0.0
	 */
	public $settings = null;

	/**
	 * The version number.
	 * @var     string
	 * @access  public
	 * @since   1.0.0
	 */
	public $_version;

	/**
	 * The token.
	 * @var     string
	 * @access  public
	 * @since   1.0.0
	 */
	public $_token;

	/**
	 * The main plugin file.
	 * @var     string
	 * @access  public
	 * @since   1.0.0
	 */
	public $file;

	/**
	 * The main plugin directory.
	 * @var     string
	 * @access  public
	 * @since   1.0.0
	 */
	public $dir;

	/**
	 * The plugin assets directory.
	 * @var     string
	 * @access  public
	 * @since   1.0.0
	 */
	public $assets_dir;

	/**
	 * The plugin assets URL.
	 * @var     string
	 * @access  public
	 * @since   1.0.0
	 */
	public $assets_url;

	/**
	 * Suffix for Javascripts.
	 * @var     string
	 * @access  public
	 * @since   1.0.0
	 */
	public $script_suffix;

	private $_wizard_service;

	/**
	 * Constructor function.
	 * @access  public
	 * @since   1.0.0
	 * @return  void
	 */
	public function __construct ($file = '', $version = '1.0.4') {
		$this->_version = $version;
		$this->_token = 'mondula_form_wizard';

		// Load plugin environment variables
		$this->file = $file;
		$this->dir = dirname($this->file);
		$this->assets_dir = trailingslashit($this->dir) . 'dist';
		$this->assets_url = esc_url(trailingslashit(plugins_url('/dist/', $this->file)));

		$this->script_suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';

		register_activation_hook($this->file, array($this, 'install'));
		register_deactivation_hook($this->file, array($this, 'uninstall'));

		// Load frontend JS & CSS
		add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'), 10);

		// Setup cronjob
		add_action('msf_cron_upload_clean', array($this, 'cleanup_upload_dir'));
		if (!wp_next_scheduled('msf_cron_upload_clean')) {
			wp_schedule_event(time(), 'daily', 'msf_cron_upload_clean');
		}

		// Set up service
		$this->_wizard_service = new Mondula_Form_Wizard_Wizard_Service(
			new Mondula_Form_Wizard_Wizard_Repository('mondula_form_wizards'),
				$this->_version
		);

		// Load admin JS & CSS
		add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'), 10, 1);

		// Load API for generic admin functions
		if (is_admin()) {
			$this->admin = new Mondula_Form_Wizard_Admin(
				$this->_wizard_service,
				$this->_token,
				$this->assets_url,
				$this->script_suffix,
				$this->_version,
				'multi-step-form' // text domain
			);
		}

		// Handle localisation
		$this->load_plugin_textdomain();
		add_action('init', array($this, 'load_localisation'), 0);

		// Setup shortcode
		$this->shortcode = new Mondula_Form_Wizard_Shortcode($this, $this->_token, $this->_wizard_service);
		/* Notify other plugins that Multi Step Form has loaded */
		do_action('msf_loaded');
	} // End __construct ()


	/**
	 * Allows other plugins to get translations
	 */
	public static function get_translation() {
		return array(
			'sending' => __('sending data', 'multi-step-form'),
			'submitSuccess' => __('success', 'multi-step-form'),
			'submitError' => __('submit failed', 'multi-step-form'),
			'uploadingFile' => __('Uploading file', 'multi-step-form'),
			'chooseFile' => __('Choose a file', 'multi-step-form'),
			'showSummary' => __('show summary', 'multi-step-form'),
			'hideSummary' => __('hide summary', 'multi-step-form'),
			'registration' => __('Registration', 'multi-step-form'),
			'registrationAs' => __('You are registering as', 'multi-step-form'),
			'registrationFailed' => __('You will not be registered', 'multi-step-form'),
			'errors' => array(
				'requiredFields' => __('Please fill all the required fields!', 'multi-step-form'),
				'requiredField' => __('This field is required', 'multi-step-form'),
				'someRequired' => __('Some required Fields are empty', 'multi-step-form'),
				'checkFields' => __('Please check the highlighted fields.', 'multi-step-form'),
				'noEmail' => __('No email address provided', 'multi-step-form'),
				'invalidEmail' => __('Invalid email address', 'multi-step-form'),
				'takenEmail' => __('Email is already registered', 'multi-step-form'),
				'noUsername' => __('No username provided', 'multi-step-form'),
				'invalidUsername' => __('Invalid username', 'multi-step-form'),
				'takenUsername' => __('Username is already registered', 'multi-step-form'),
				'invalidNumeric' => __('Invalid number', 'multi-step-form'),
				'invalidRegex' => __('Invalid input', 'multi-step-form'),
				'noCaptcha' => __('Please solve the captcha first!', 'multi-step-form'),
				'emailsDontMatch' => __('Emails provided don\'t match!', 'multi-step-form'),
			),
		);
	}

	/**
	 * Logs MSF-Specific Errors.
	 */
	public static function log($message, $data) {
		$pre = 'Multi Step Form: ';
		if (WP_DEBUG === true) {
			if (is_array($data) || is_object($data)) {
				error_log($pre . $message . ' Data: ' . print_r($data, true));
			} else {
				error_log($pre . $message . ' Data: ' . $data);
			}
		}
	}

	/**
	 * Load frontend JavaScript and CSS.
	 * @access  public
	 * @since   1.0.0
	 * @return  void
	 */
	public function enqueue_scripts() {
		// Vendor
		wp_register_style($this->_token . '-vendor', esc_url($this->assets_url) . 'styles/msf-vendor.min.css', array(), $this->_version);
		wp_register_script($this->_token . '-vendor', esc_url($this->assets_url) . 'scripts/msf-vendor' . $this->script_suffix . '.js', array('jquery'), $this->_version, true);

		// CSS
		wp_register_style($this->_token . '-frontend', esc_url($this->assets_url) . 'styles/msf-frontend.min.css', array(), $this->_version);

		// JavaScript
		$i18n = $this->get_translation();
		wp_register_script($this->_token . '-frontend', esc_url($this->assets_url) . 'scripts/msf-frontend' . $this->script_suffix . '.js', array('jquery', 'jquery-ui-datepicker'), $this->_version, true);
		$ajax = array(
			'i18n' => $i18n,
			'version' => apply_filters('multi-step-form/version-filter', $this->_version),
			'ajaxurl' => admin_url('admin-ajax.php'),
		);
		wp_localize_script($this->_token . '-frontend', 'msfAjax', $ajax);
	}

	/**
	 * Load admin JavaScript and CSS.
	 * @access  public
	 * @since   1.0.0
	 * @return  void
	 */
	public function admin_enqueue_scripts ($hook = '') {
		// Vendor
		wp_register_style($this->_token . '-vendor', esc_url($this->assets_url) . 'styles/msf-vendor.min.css', array(), $this->_version);
		wp_register_script($this->_token . '-vendor', esc_url($this->assets_url) . 'scripts/msf-vendor' . $this->script_suffix . '.js', array('jquery'), $this->_version, true);
		
		wp_enqueue_style($this->_token . '-admin');
		wp_enqueue_script($this->_token . '-admin');
	}

	/**
	 * Deletes old files in the upload directory.
	 */
	public function cleanup_upload_dir() {
		if (!function_exists('getlist_files_plugins')){
			require_once(ABSPATH . '/wp-admin/includes/file.php');
		}

		$files = list_files(WP_CONTENT_DIR . '/uploads/msf-temp/', 1);
		
		if (is_array($files)) {
			foreach ($files as $file) {
				/* File is older than 4 hours: */
				if (time() - filemtime($file) > (60 * 60 * 4)) {
					wp_delete_file_from_directory($file, WP_CONTENT_DIR . '/uploads/msf-temp/');
				}
			}
		}
	}

	/**
	 * Load plugin localisation
	 * @access  public
	 * @since   1.0.0
	 * @return  void
	 */
	public function load_localisation () {
		load_plugin_textdomain('multi-step-form', false, dirname(plugin_basename($this->file)) . '/lang/');
	}

	/**
	 * Load plugin textdomain
	 * @access  public
	 * @since   1.0.0
	 * @return  void
	 */
	public function load_plugin_textdomain () {
		$domain = 'multi-step-form';

		$locale = apply_filters('plugin_locale', get_locale(), $domain);

		load_textdomain($domain, WP_LANG_DIR . '/' . $domain . '/' . $domain . '-' . $locale . '.mo');
		load_plugin_textdomain($domain, false, dirname(plugin_basename($this->file)) . '/lang/');
	}

	/**
	 * Main Mondula_Form_Wizard Instance
	 *
	 * Ensures only one instance of Mondula_Form_Wizard is loaded or can be loaded.
	 *
	 * @since 1.0.0
	 * @static
	 * @see Mondula_Form_Wizard()
	 * @return Main Mondula_Form_Wizard instance
	 */
	public static function instance($file = '', $version = '1.0.0') {
		if (is_null(self::$_instance)) {
			self::$_instance = new self($file, $version);
		}
		return self::$_instance;
	}

	/**
	 * Cloning is forbidden.
	 *
	 * @since 1.0.0
	 */
	public function __clone () {
		_doing_it_wrong(__FUNCTION__, __('Cheatin&#8217; huh?'), $this->_version);
	}

	/**
	 * Unserializing instances of this class is forbidden.
	 *
	 * @since 1.0.0
	 */
	public function __wakeup() {
		_doing_it_wrong(__FUNCTION__, __('Cheatin&#8217; huh?'), $this->_version);
	}

	/**
	 * Installation. Runs on activation.
	 * @access  public
	 * @since   1.0.0
	 * @return  void
	 */
	public function install() {
		$this->_log_version_number();
	}

	/**
	 * Uninstallation. Runs on deactivation.
	 * @access  public
	 * @since   1.3.2
	 * @return  void
	 */
	public function uninstall() {
		$timestamp = wp_next_scheduled('msf_cron_upload_clean');
		wp_unschedule_event($timestamp, 'msf_cron_upload_clean');
	}

	/**
	 * Log the plugin version number.
	 * @access  public
	 * @since   1.0.0
	 * @return  void
	 */
	private function _log_version_number () {
		update_option($this->_token . '_version', $this->_version);
	}

}