prefix . "duplicator_packages"; //PRIMARY KEY must have 2 spaces before for dbDelta to work //see: https://codex.wordpress.org/Creating_Tables_with_Plugins $sql = "CREATE TABLE `{$table_name}` ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(250) NOT NULL, hash VARCHAR(50) NOT NULL, status INT(11) NOT NULL, created DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', owner VARCHAR(60) NOT NULL, package MEDIUMBLOB NOT NULL, PRIMARY KEY (id), KEY hash (hash))"; require_once(DUPLICATOR_WPROOTPATH . 'wp-admin/includes/upgrade.php'); @dbDelta($sql); } //WordPress Options Hooks update_option('duplicator_version_plugin', DUPLICATOR_VERSION); //Setup All Directories DUP_Util::initSnapshotDirectory(); } /** * Hooked into `plugins_loaded`. Routines used to update the plugin * * @access global * @return null */ function duplicator_update() { if (DUPLICATOR_VERSION != get_option("duplicator_version_plugin")) { duplicator_activate(); } load_plugin_textdomain( 'duplicator' ); } /** * Hooked into `register_deactivation_hook`. Routines used to deactivae the plugin * For uninstall see uninstall.php Wordpress by default will call the uninstall.php file * * @access global * @return null */ function duplicator_deactivate() { //Logic has been added to uninstall.php } /** ======================================================== * ACTION HOOKS * ===================================================== */ add_action('plugins_loaded', 'duplicator_update'); add_action('plugins_loaded', 'duplicator_wpfront_integrate'); add_action('admin_init', 'duplicator_init'); add_action('admin_menu', 'duplicator_menu'); add_action('admin_notices', array('DUP_UI_Notice', 'showReservedFilesNotice')); //CTRL ACTIONS add_action('wp_ajax_duplicator_package_scan', 'duplicator_package_scan'); add_action('wp_ajax_duplicator_package_build', 'duplicator_package_build'); add_action('wp_ajax_duplicator_package_delete', 'duplicator_package_delete'); $GLOBALS['CTRLS_DUP_CTRL_UI'] = new DUP_CTRL_UI(); $GLOBALS['CTRLS_DUP_CTRL_Tools'] = new DUP_CTRL_Tools(); $GLOBALS['CTRLS_DUP_CTRL_Package'] = new DUP_CTRL_Package(); /** * User role editor integration * * @access global * @return null */ function duplicator_wpfront_integrate() { if (DUP_Settings::Get('wpfront_integrate')) { do_action('wpfront_user_role_editor_duplicator_init', array('export', 'manage_options', 'read')); } } /** * Hooked into `admin_init`. Init routines for all admin pages * * @access global * @return null */ function duplicator_init() { /* CSS */ wp_register_style('dup-jquery-ui', DUPLICATOR_PLUGIN_URL . 'assets/css/jquery-ui.css', null, "1.11.2"); wp_register_style('dup-font-awesome', DUPLICATOR_PLUGIN_URL . 'assets/css/font-awesome.min.css', null, '4.7.0'); wp_register_style('dup-plugin-style', DUPLICATOR_PLUGIN_URL . 'assets/css/style.css', null, DUPLICATOR_VERSION); wp_register_style('dup-jquery-qtip',DUPLICATOR_PLUGIN_URL . 'assets/js/jquery.qtip/jquery.qtip.min.css', null, '2.2.1'); /* JS */ wp_register_script('dup-handlebars', DUPLICATOR_PLUGIN_URL . 'assets/js/handlebars.min.js', array('jquery'), '4.0.10'); wp_register_script('dup-parsley', DUPLICATOR_PLUGIN_URL . 'assets/js/parsley-standalone.min.js', array('jquery'), '1.1.18'); wp_register_script('dup-jquery-qtip', DUPLICATOR_PLUGIN_URL . 'assets/js/jquery.qtip/jquery.qtip.min.js', array('jquery'), '2.2.1'); } /** * Redirects the clicked menu item to the correct location * * @access global * @return null */ function duplicator_get_menu() { $current_page = isset($_REQUEST['page']) ? esc_html($_REQUEST['page']) : 'duplicator'; switch ($current_page) { case 'duplicator': include('views/packages/controller.php'); break; case 'duplicator-settings': include('views/settings/controller.php'); break; case 'duplicator-tools': include('views/tools/controller.php'); break; case 'duplicator-debug': include('debug/main.php'); break; case 'duplicator-gopro': include('views/help/gopro.php'); break; } } /** * Hooked into `admin_menu`. Loads all of the wp left nav admin menus for Duplicator * * @access global * @return null */ function duplicator_menu() { $wpfront_caps_translator = 'wpfront_user_role_editor_duplicator_translate_capability'; $icon_svg = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQXJ0d29yayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMy4yNXB4IiBoZWlnaHQ9IjIyLjM3NXB4IiB2aWV3Qm94PSIwIDAgMjMuMjUgMjIuMzc1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyMy4yNSAyMi4zNzUiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiM5Q0ExQTYiIGQ9Ik0xOC4wMTEsMS4xODhjLTEuOTk1LDAtMy42MTUsMS42MTgtMy42MTUsMy42MTRjMCwwLjA4NSwwLjAwOCwwLjE2NywwLjAxNiwwLjI1TDcuNzMzLDguMTg0QzcuMDg0LDcuNTY1LDYuMjA4LDcuMTgyLDUuMjQsNy4xODJjLTEuOTk2LDAtMy42MTUsMS42MTktMy42MTUsMy42MTRjMCwxLjk5NiwxLjYxOSwzLjYxMywzLjYxNSwzLjYxM2MwLjYyOSwwLDEuMjIyLTAuMTYyLDEuNzM3LTAuNDQ1bDIuODksMi40MzhjLTAuMTI2LDAuMzY4LTAuMTk4LDAuNzYzLTAuMTk4LDEuMTczYzAsMS45OTUsMS42MTgsMy42MTMsMy42MTQsMy42MTNjMS45OTUsMCwzLjYxNS0xLjYxOCwzLjYxNS0zLjYxM2MwLTEuOTk3LTEuNjItMy42MTQtMy42MTUtMy42MTRjLTAuNjMsMC0xLjIyMiwwLjE2Mi0xLjczNywwLjQ0M2wtMi44OS0yLjQzNWMwLjEyNi0wLjM2OCwwLjE5OC0wLjc2MywwLjE5OC0xLjE3M2MwLTAuMDg0LTAuMDA4LTAuMTY2LTAuMDEzLTAuMjVsNi42NzYtMy4xMzNjMC42NDgsMC42MTksMS41MjUsMS4wMDIsMi40OTUsMS4wMDJjMS45OTQsMCwzLjYxMy0xLjYxNywzLjYxMy0zLjYxM0MyMS42MjUsMi44MDYsMjAuMDA2LDEuMTg4LDE4LjAxMSwxLjE4OHoiLz48L3N2Zz4='; //Main Menu $perms = 'export'; $perms = apply_filters($wpfront_caps_translator, $perms); $main_menu = add_menu_page('Duplicator Plugin', 'Duplicator', $perms, 'duplicator', 'duplicator_get_menu', $icon_svg); //$main_menu = add_menu_page('Duplicator Plugin', 'Duplicator', $perms, 'duplicator', 'duplicator_get_menu', plugins_url('duplicator/assets/img/logo-menu.svg')); $perms = 'export'; $perms = apply_filters($wpfront_caps_translator, $perms); $lang_txt = __('Packages', 'duplicator'); $page_packages = add_submenu_page('duplicator', $lang_txt, $lang_txt, $perms, 'duplicator', 'duplicator_get_menu'); $perms = 'manage_options'; $perms = apply_filters($wpfront_caps_translator, $perms); $lang_txt = __('Tools', 'duplicator'); $page_tools = add_submenu_page('duplicator', $lang_txt, $lang_txt, $perms, 'duplicator-tools', 'duplicator_get_menu'); $perms = 'manage_options'; $perms = apply_filters($wpfront_caps_translator, $perms); $lang_txt = __('Settings', 'duplicator'); $page_settings = add_submenu_page('duplicator', $lang_txt, $lang_txt, $perms, 'duplicator-settings', 'duplicator_get_menu'); $perms = 'manage_options'; $lang_txt = __('Go Pro!', 'duplicator'); $go_pro_link = '' . $lang_txt . ''; $perms = apply_filters($wpfront_caps_translator, $perms); $page_gopro = add_submenu_page('duplicator', $go_pro_link, $go_pro_link, $perms, 'duplicator-gopro', 'duplicator_get_menu'); $package_debug = DUP_Settings::Get('package_debug'); if ($package_debug != null && $package_debug == true) { $perms = 'manage_options'; $perms = apply_filters($wpfront_caps_translator, $perms); $lang_txt = __('Debug', 'duplicator'); $page_debug = add_submenu_page('duplicator', $lang_txt, $lang_txt, $perms, 'duplicator-debug', 'duplicator_get_menu'); add_action('admin_print_scripts-' . $page_debug, 'duplicator_scripts'); add_action('admin_print_styles-' . $page_debug, 'duplicator_styles'); } //Apply Scripts add_action('admin_print_scripts-' . $page_packages, 'duplicator_scripts'); add_action('admin_print_scripts-' . $page_settings, 'duplicator_scripts'); add_action('admin_print_scripts-' . $page_tools, 'duplicator_scripts'); add_action('admin_print_scripts-' . $page_gopro, 'duplicator_scripts'); //Apply Styles add_action('admin_print_styles-' . $page_packages, 'duplicator_styles'); add_action('admin_print_styles-' . $page_settings, 'duplicator_styles'); add_action('admin_print_styles-' . $page_tools, 'duplicator_styles'); add_action('admin_print_styles-' . $page_gopro, 'duplicator_styles'); } /** * Loads all required javascript libs/source for DupPro * * @access global * @return null */ function duplicator_scripts() { wp_enqueue_script('jquery'); wp_enqueue_script('jquery-ui-core'); wp_enqueue_script('jquery-ui-progressbar'); wp_enqueue_script('dup-parsley'); wp_enqueue_script('dup-jquery-qtip'); } /** * Loads all CSS style libs/source for DupPro * * @access global * @return null */ function duplicator_styles() { wp_enqueue_style('dup-jquery-ui'); wp_enqueue_style('dup-font-awesome'); wp_enqueue_style('dup-plugin-style'); wp_enqueue_style('dup-jquery-qtip'); } /** ======================================================== * FILTERS * ===================================================== */ add_filter('plugin_action_links', 'duplicator_manage_link', 10, 2); add_filter('plugin_row_meta', 'duplicator_meta_links', 10, 2); /** * Adds the manage link in the plugins list * * @access global * @return string The manage link in the plugins list */ function duplicator_manage_link($links, $file) { static $this_plugin; if (!$this_plugin) $this_plugin = plugin_basename(__FILE__); if ($file == $this_plugin) { $settings_link = '' . __("Manage", 'duplicator') . ''; array_unshift($links, $settings_link); } return $links; } /** * Adds links to the plugins manager page * * @access global * @return string The meta help link data for the plugins manager */ function duplicator_meta_links($links, $file) { $plugin = plugin_basename(__FILE__); // create link if ($file == $plugin) { $links[] = '' . __('Go Pro', 'duplicator') . ''; return $links; } return $links; } /** ======================================================== * GENERAL * ===================================================== */ /** * Used for installer files to redirect if accessed directly * * @access global * @return null */ function duplicator_secure_check() { $baseURL = "http://" . strlen($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']; header("HTTP/1.1 301 Moved Permanently"); header("Location: $baseURL"); exit; } } ?>