%PDF- %PDF-
Direktori : /var/www/html/higroup/1618475457800/wp-content/plugins/wp-event-solution/ |
Current File : /var/www/html/higroup/1618475457800/wp-content/plugins/wp-event-solution/bootstrap.php |
<?php namespace Etn; defined( 'ABSPATH' ) || exit; include_once ABSPATH . 'wp-admin/includes/plugin.php'; /** * Plugin final Class. * Handles dynamically loading classes only when needed. CheFck Elementor Plugin. * * @since 1.0.0 */ final class Bootstrap { private static $instance; private $event; private $speaker; private $schedule; private $attendee; private $has_pro; /** * __construct function * @since 1.0.0 */ public function __construct() { // load autoload method Autoloader::run(); } /** * Public function version. * set for plugin version * * @since 1.0.0 */ public function version() { return '2.4.0'; } /** * Public function name. * set for plugin name * * @since 1.0.0 */ public function name() { return __( "WP Event Solution", "eventin" ); } /** * Public function init. * call function for all * * @since 1.0.0 */ public function init() { $this->_action_create_table(); include_once ABSPATH . 'wp-admin/includes/plugin.php'; //handle woocommerce notice depending on settings $this->handle_woo_dependency(); $this->has_pro = defined('ETN_PRO_FILES_LOADED'); //handle buy-pro notice $this->handle_buy_pro_module(); // check permission for manage user if ( current_user_can( 'manage_options' ) ) { add_action( 'admin_menu', [$this, 'register_admin_menu'] ); } //register all styles and scripts add_action( 'admin_enqueue_scripts', [$this, 'js_css_admin'] ); add_action( 'wp_enqueue_scripts', [$this, 'js_css_public'] ); add_action( 'elementor/frontend/before_enqueue_scripts', [$this, 'elementor_js'] ); // Initialize plugin settings module Core\Settings\Settings::instance()->init( $this->name(), $this->version() ); // Initialize event module Core\Event\Hooks::instance()->init(); // Initialize attendee module Core\Attendee\Hooks::instance()->init(); Core\Attendee\Attendee_List::instance()->init(); // Initialize schedule module Core\Schedule\Hooks::instance()->init(); // Initialize speaker module Core\Speaker\Hooks::instance()->init(); // Iinitialize event ticket registration module Core\Event\Registration::instance()->init(); // Initialize attendee information-update module Core\Attendee\InfoUpdate::instance()->init(); // Initialize woocommerce module Core\Woocommerce\Base::instance()->init(); // initialize niche shortcode Core\Shortcodes\Hooks::instance()->init(); // initialize zoom module Core\Zoom_Meeting\Hooks::instance()->init(); // initialize elementor widget Widgets\Manifest::instance()->init(); //make admin menu open if custom taxonomy is selected add_action( 'parent_file', [$this, 'keep_taxonomy_menu_open'] ); // add minicart to header add_action('wp_head', [$this, 'etn_custom_inline_css']); load_plugin_textdomain('eventin', false, ETN_DIR . '/languages/'); // register gutenberg blocks if( file_exists( ETN_DIR . '/core/guten-block/inc/init.php' )){ include_once ETN_DIR . '/core/guten-block/inc/init.php'; } } /** * Handle woocommerce admin notice depending on settings * * @return void */ public function handle_woo_dependency(){ $eventin_global_settings = \Etn\Utils\Helper::get_settings(); $sell_tickets = !empty( $eventin_global_settings["sell_tickets"] ) ? true : false; if( $sell_tickets && !is_plugin_active( 'woocommerce/woocommerce.php' )){ add_action( 'admin_head',[$this, 'admin_notice_wc_not_active'] ); return; } } /** * Show buy-pro menu if pro plugin not active * * @return void */ public function handle_buy_pro_module(){ if ( !$this->has_pro ) { /** * Show WPMET banner (codename: jhanda) */ \Wpmet\Libs\Banner::instance('eventin') // ->is_test(true) ->set_api_url('https://api.wpmet.com/public/jhanda') ->set_plugin_screens('edit-etn') ->set_plugin_screens('edit-etn-attendee') ->set_plugin_screens('edit-etn_category') ->set_plugin_screens('edit-etn_tags') ->set_plugin_screens('edit-etn-schedule') ->set_plugin_screens('edit-etn_speaker_category') ->set_plugin_screens('edit-etn-speaker') ->set_plugin_screens('eventin_page_etn-event-settings') ->set_plugin_screens('eventin_page_etn_sales_report') ->set_plugin_screens('edit-etn-zoom-meeting') ->set_plugin_screens('eventin_page_eventin_get_help') ->call(); } //show get-help and upgrade-to-premium menu $this->handle_get_help_and_upgrade_menu(); } /** * Show menu for get-help * Show menu for upgrade-te-premium if pro version not active * * @return void */ public function handle_get_help_and_upgrade_menu(){ /** * Show go Premium menu */ \Wpmet\Libs\Pro_Awareness::instance('eventin') ->set_parent_menu_slug('etn-events-manager') ->set_plugin_file('wp-event-solution/eventin.php') ->set_pro_link( $this->has_pro ? "" : 'https://themewinter.com/eventin/' ) ->set_default_grid_thumbnail( ETN_PATH . '/utils/pro-awareness/assets/support.png' ) ->set_default_grid_link('http://support.themewinter.com/support-center/login') ->set_default_grid_desc(esc_html__('Our experienced support team is ready to resolve your issues any time.', 'eventin')) ->set_page_grid([ 'url' => 'https://www.facebook.com/groups/492321335116367', 'title' => esc_html__('Join the Community', 'eventin'), 'thumbnail' => ETN_PATH . '/utils/pro-awareness/assets/community.png', 'description' => esc_html__('Join our Facebook group to get 20% discount coupon on premium products. Follow us to get more exciting offers.', 'eventin'), ]) ->set_page_grid([ 'url' => 'https://www.youtube.com/channel/UCfdo_ujAqztsz4QnjkrrPlw', 'title' => esc_html__('Video Tutorials', 'eventin'), 'thumbnail' => ETN_PATH . '/utils/pro-awareness/assets/video_tutorial.png', 'description' => esc_html__('Learn the step by step process for developing your site easily from video tutorials.', 'eventin'), ]) ->set_page_grid([ 'url' => 'https://themewinter.com/eventin-roadmaps/#ideas', 'title' => esc_html__('Feature Request', 'eventin'), 'thumbnail' => ETN_PATH . '/utils/pro-awareness/assets/feature_request.png', 'description' => esc_html__('Have any special feature in mind? Let us know through the feature request.', 'eventin'), ]) ->set_page_grid([ 'url' => 'https://support.themewinter.com/docs/plugins/docs-category/eventin/', 'title' => esc_html__('Documentation', 'eventin'), 'thumbnail' => ETN_PATH . '/utils/pro-awareness/assets/documentation.png', 'description' => esc_html__('Detailed documentation to help you understand the functionality of each feature.', 'eventin'), ]) ->set_plugin_row_meta('Documentation','https://support.themewinter.com/docs/plugins/docs-category/eventin/', ['target'=>'_blank']) ->set_plugin_row_meta('Facebook Community','https://www.facebook.com/groups/wpmet', ['target'=>'_blank']) ->set_plugin_action_link('Settings', admin_url() . 'admin.php?page=etn-event-settings') ->set_plugin_action_link( ( $this->has_pro ? '' : 'Go Premium'),'https://themewinter.com/eventin/', ['target'=>'_blank', 'style' => 'color: #FCB214; font-weight: bold;']) ->call(); } /** * Show notice if woocommerce not active */ public function admin_notice_pro_not_active() { if ( isset( $_GET['activate'] ) ) { unset( $_GET['activate'] ); } $btn = [ 'default_class' => 'button', 'class' => 'button-primary ' ]; if ( file_exists( WP_PLUGIN_DIR . '/eventin-pro/eventin-pro.php' ) ) { $btn['text'] = esc_html__( 'Activate Eventin Pro', 'eventin' ); $btn['url'] = wp_nonce_url( 'plugins.php?action=activate&plugin=eventin-pro/eventin-pro.php&plugin_status=all&paged=1', 'activate-plugin_eventin-pro/eventin-pro.php' ); } else { $btn['text'] = esc_html__( 'Buy Eventin Pro', 'eventin' ); $btn['url'] = esc_url( $this->get_pro_link() ); } \Oxaim\Libs\Notice::instance('eventin', 'buy-eventin-pro') ->set_class( 'error' ) ->set_dismiss( 'global', ( 3600 * 24 * 30 ) ) ->set_message( sprintf( esc_html__( 'Get Eventin Pro for more exciting features.', 'eventin' ) ) ) ->set_button( $btn ) ->call(); } /** * Undocumented function * * @param [type] $parent_file * @return void */ public function keep_taxonomy_menu_open( $parent_file ) { global $current_screen; $taxonomy = $current_screen->taxonomy; $eligible_taxonomies = ['etn_category', 'etn_tags', 'etn_speaker_category']; if ( in_array($taxonomy, $eligible_taxonomies ) ) { $parent_file = 'etn-events-manager'; } return $parent_file; } /** * Show notice if woocommerce not active */ public function admin_notice_wc_not_active() { if ( isset( $_GET['activate'] ) ) { unset( $_GET['activate'] ); } $btn = [ 'default_class' => 'button', 'class' => 'button-primary ' ]; if ( file_exists( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php' ) ) { $btn['text'] = esc_html__( 'Activate WooCommerce', 'eventin' ); $btn['url'] = wp_nonce_url( 'plugins.php?action=activate&plugin=woocommerce/woocommerce.php&plugin_status=all&paged=1', 'activate-plugin_woocommerce/woocommerce.php' ); } else { $btn['text'] = esc_html__( 'Install WooCommerce', 'eventin' ); $btn['url'] = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=woocommerce' ), 'install-plugin_woocommerce' ); } \Oxaim\Libs\Notice::instance('eventin', 'unsupported-woocommerce-version') ->set_class('error') ->set_dismiss('global', (3600 * 24 * 30)) ->set_message(sprintf( esc_html__( 'Eventin requires WooCommerce to get all features, which is currently NOT RUNNING.', 'eventin' ) ) ) ->set_button($btn) ->call(); } /** * Public function package_type. * set for plugin package type * * @since 1.0.0 */ public function package_type() { return 'free'; } public function text_domain() { return 'eventin'; } /** * Public function js_css_public . * Include public function */ public function js_css_public() { if ( is_rtl() ) { wp_enqueue_style( 'etn-rtl', ETN_ASSETS . 'css/rtl.css' ); } wp_enqueue_style( 'etn-public-css', ETN_ASSETS . 'css/event-manager-public.css', [], $this->version(), 'all' ); wp_enqueue_style( 'fontawesome', ETN_ASSETS . 'css/font-awesome.css', [], '5.0', 'all' ); wp_enqueue_script( 'etn-public', ETN_ASSETS . 'js/event-manager-public.js', ['jquery'], $this->version(), true ); } public function elementor_js() { wp_enqueue_script( 'etn-elementor-inputs', ETN_ASSETS . 'js/elementor.js', ['elementor-frontend'], $this->version(), true ); } public function js_css_admin() { // get screen id $screen = get_current_screen(); $screen_id = $screen->id; $allowed_screen_ids = [ 'post', 'page', 'etn', 'edit-etn', 'etn-attendee', 'edit-etn-attendee', 'edit-etn_category', 'edit-etn_tags', 'etn-schedule', 'edit-etn-schedule', 'edit-etn_speaker_category', 'etn-speaker', 'edit-etn-speaker', 'etn-zoom-meeting', 'edit-etn-zoom-meeting', 'eventin_page_etn-event-settings', 'eventin_page_etn_sales_report', 'eventin_page_eventin_get_help', 'eventin_page_etn-license', ]; if( in_array($screen_id, $allowed_screen_ids) ){ $form_cpt = $this->event; if ( !wp_style_is( 'wp-color-picker', 'enqueued' ) ) { wp_enqueue_style( 'wp-color-picker' ); } wp_enqueue_style( 'thickbox' ); wp_enqueue_style( 'select2', ETN_ASSETS . 'css/select2.min.css', [], '4.0.10', 'all' ); wp_enqueue_style( 'fontawesome', ETN_ASSETS . 'css/font-awesome.css', [], '5.0', 'all' ); wp_enqueue_style( 'etn-ui', ETN_ASSETS . 'css/etn-ui.css', [], $this->version(), 'all' ); wp_enqueue_style( 'etn-icon', ETN_ASSETS . 'css/etn-icon.css', [], $this->version(), 'all' ); wp_enqueue_style( 'jquery-ui', ETN_ASSETS . 'css/jquery-ui.css', ['wp-color-picker'], $this->version(), 'all' ); wp_enqueue_style( 'admin-datetime', ETN_ASSETS . 'css/jquery.datetimepicker.min.css', [], $this->version(), 'all' ); wp_enqueue_style( 'event-manager-admin', ETN_ASSETS . 'css/event-manager-admin.css', [], $this->version(), 'all' ); wp_enqueue_style( 'etn-common', ETN_ASSETS . 'css/event-manager-public.css', [], $this->version(), 'all' ); if ( !did_action( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } // js wp_enqueue_script( 'wp-color-picker' ); wp_enqueue_script( 'media-upload' ); wp_enqueue_script( 'thickbox' ); wp_enqueue_script( 'jquery-ui-datepicker' ); wp_enqueue_script( 'jquery-ui', ETN_ASSETS . 'js/etn-ui.min.js', ['jquery'], '4.0.10', true ); wp_enqueue_script( 'popper', ETN_ASSETS . 'js/Popper.js', ['jquery'], '4.0.10', false ); wp_enqueue_script( 'etn', ETN_ASSETS . 'js/event-manager-admin.js', ['jquery'], $this->version(), false ); wp_enqueue_script( 'select2', ETN_ASSETS . 'js/select2.min.js', ['jquery'], '4.0.10', false ); wp_enqueue_script( 'jquery-repeater', ETN_ASSETS . 'js/jquery.repeater.min.js', ['jquery'], '4.0.10', true ); wp_enqueue_script( 'admin-datetime', ETN_ASSETS . 'js/jquery.datetimepicker.full.min.js', ['jquery'], $this->version(), true ); // locallize data $settings = \Etn\Core\Settings\Settings::instance()->get_settings_option(); $form_data = []; $form_data['ajax_url'] = admin_url( 'admin-ajax.php' ); $form_data['zoom_connection_check_nonce'] = wp_create_nonce( 'zoom_connection_check_nonce' ); $form_data['zoom_module'] = empty( $settings['etn_zoom_api'] ) ? "no" : "yes"; $form_data['attendee_module'] = empty( $settings['attendee_registration'] ) ? "no" : "yes"; wp_localize_script( 'etn', 'form_data', $form_data ); } } function register_admin_menu() { $admin_page = new \Etn\Core\Event\Pages\Event_Admin_Page(); $admin_page->add_admin_pages(); $settings = Core\Settings\Settings::instance()->init( $this->name(), $this->version() ); } public function flush_rewrites() { $event = new Core\Event\Cpt(); $event->flush_rewrites(); $speaker = new Core\Speaker\Cpt(); $speaker->flush_rewrites(); $schedule = new Core\Schedule\Cpt(); $schedule->flush_rewrites(); // flush cpt for attendee $attendee = new Core\Attendee\Cpt(); $attendee->flush_rewrites(); } public static function instance() { if ( !self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Create plugin specific tables to store data * * @return void */ public function _action_create_table() { global $wpdb; $tableName = $wpdb->prefix . 'etn_events'; $charset_collate = $wpdb->get_charset_collate(); require_once ABSPATH . 'wp-admin/includes/upgrade.php'; // create table for donation if ( $wpdb->get_var( "SHOW TABLES LIKE '$tableName'" ) != $tableName ) { // create fundraising table $wdp_sql = "CREATE TABLE IF NOT EXISTS `$tableName` ( `event_id` mediumint(9) NOT NULL AUTO_INCREMENT, `post_id` bigint(20) NOT NULL COMMENT 'This id is teh event id', `form_id` bigint(20) NOT NULL COMMENT 'This id From wp post table', `invoice` varchar(150) NOT NULL, `event_amount` double NOT NULL DEFAULT '0', `user_id` mediumint(9) NOT NULL, `email` varchar(200) NOT NULL, `event_type` ENUM('ticket') DEFAULT 'ticket', `payment_type` ENUM('woocommerce') DEFAULT 'woocommerce', `pledge_id` varchar(20) NOT NULL DEFAULT '0', `payment_gateway` ENUM('offline_payment', 'online_payment', 'bank_payment', 'check_payment', 'stripe_payment', 'other_payment') default 'online_payment', `date_time` datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, `status` ENUM('Active','Review', 'DeActive', 'Failed', 'Processing', 'Pending', 'Hold', 'Refunded', 'Delete', 'Completed', 'Cancelled') DEFAULT 'Pending', PRIMARY KEY (`event_id`) ) $charset_collate;"; dbDelta( $wdp_sql ); // create meta table $tableNameMeta = $wpdb->prefix . 'etn_trans_meta'; $wdp_meta = " CREATE TABLE IF NOT EXISTS `$tableNameMeta`( `meta_id` mediumint NOT NULL AUTO_INCREMENT, `event_id` mediumint NOT NULL, `meta_key` varchar(255), `meta_value` longtext, PRIMARY KEY(`meta_id`) ) $charset_collate; "; dbDelta( $wdp_meta ); update_option( 'etn_version', \Etn\Bootstrap::instance()->version() ); } //run table column migration for older version than 2.3.3 if( version_compare(get_option( 'etn_version'), '2.3.3', '<' )){ $migration_query = "ALTER TABLE `$tableName` MODIFY COLUMN `status` ENUM('Failed', 'Processing', 'Pending', 'Hold', 'Refunded', 'Completed', 'Cancelled') DEFAULT 'Pending';"; $wpdb->query( $migration_query ); } } /** * Custom inline css */ public function etn_custom_inline_css(){ $settings = \Etn\Core\Settings\Settings::instance()->get_settings_option(); $etn_custom_css = ''; $primary_color = "#5D78FF"; $secondary_color = ""; // cart bg color if( !empty( $settings['etn_primary_color'] ) ){ $primary_color = $settings['etn_primary_color'] ; } // cart icon color if( !empty( $settings['etn_secondary_color'] ) ){ $secondary_color = $settings['etn_secondary_color'] ; } $etn_custom_css.=" .etn-event-single-content-wrap .etn-event-meta .etn-event-category span, .etn-event-item .etn-event-footer .etn-atend-btn .etn-btn-border, .etn-btn.etn-btn-border, .attr-btn-primary.etn-btn-border, .etn-attendee-form .etn-btn.etn-btn-border, .etn-ticket-widget .etn-btn.etn-btn-border, .etn-settings-dashboard .button-primary.etn-btn-border, .etn-single-speaker-item .etn-speaker-content a:hover, .etn-event-style2 .etn-event-date, .etn-event-style3 .etn-event-content .etn-title a:hover, .etn-event-item:hover .etn-title a{ color: {$primary_color}; } .etn-event-item .etn-event-category span, .etn-btn, .attr-btn-primary, .etn-attendee-form .etn-btn, .etn-ticket-widget .etn-btn, .schedule-list-1 .schedule-header, .speaker-style4 .etn-speaker-content .etn-title a, .etn-speaker-details3 .speaker-title-info, .etn-event-slider .swiper-pagination-bullet, .etn-speaker-slider .swiper-pagination-bullet, .etn-event-slider .swiper-button-next, .etn-event-slider .swiper-button-prev, .etn-speaker-slider .swiper-button-next, .etn-speaker-slider .swiper-button-prev, .etn-single-speaker-item .etn-speaker-thumb .etn-speakers-social a, .etn-event-header .etn-event-countdown-wrap .etn-count-item, .schedule-tab-1 .etn-nav li a.etn-active, .etn-settings-dashboard .button-primary{ background-color: {$primary_color}; } .etn-event-item .etn-event-footer .etn-atend-btn .etn-btn-border, .etn-btn.etn-btn-border, .attr-btn-primary.etn-btn-border, .etn-attendee-form .etn-btn.etn-btn-border, .etn-ticket-widget .etn-btn.etn-btn-border, .etn-settings-dashboard .button-primary.etn-btn-border{ border-color: {$primary_color}; } .schedule-tab-wrapper .etn-nav li a.etn-active{ border-bottom-color: {$primary_color}; } .schedule-tab-wrapper .etn-nav li a:after, .schedule-tab-1 .etn-nav li a.etn-active:after{ border-color: {$primary_color} transparent transparent transparent; } .etn-event-item .etn-event-location, .etn-event-tag-list a:hover, .etn-schedule-wrap .etn-schedule-info .etn-schedule-time{ color: {$secondary_color}; } .etn-event-tag-list a:hover{ border-color: {$secondary_color}; } .etn-btn:hover, .attr-btn-primary:hover, .etn-attendee-form .etn-btn:hover, .etn-ticket-widget .etn-btn:hover, .speaker-style4 .etn-speaker-content p, .etn-single-speaker-item .etn-speaker-thumb .etn-speakers-social a:hover, .etn-settings-dashboard .button-primary:hover{ background-color: {$secondary_color}; }"; // add inline css wp_register_style('etn-custom-css', false); wp_enqueue_style('etn-custom-css'); wp_add_inline_style('etn-custom-css', $etn_custom_css); } public function get_pro_link(){ return 'https://themewinter.com/eventin/'; } /** * migrate event price into woocommerce product price * * @return void */ public function migrate_event_price(){ $migration_done = !empty( get_option( "etn_event_price_migration_done" ) ) ? true : false; if( !$migration_done ){ $all_events = \Etn\Utils\Helper::get_events(); if( is_array($all_events) && !empty($all_events) ){ foreach( $all_events as $event_id => $event_title ){ $event_price = get_post_meta( $event_id, "etn_ticket_price", true ); update_post_meta( $event_id, "_price", $event_price ); update_post_meta( $event_id, "_regular_price", $event_price ); update_post_meta( $event_id, "_sale_price", $event_price ); } } update_option( "etn_event_price_migration_done", true ); } } }