/** * Dynamic initiator, originally created to support initiation * with parent_id for add-ons. * * @author Vova Feldman (@svovaf) * @since 1.0.6 * * @param array $plugin_info * * @throws Freemius_Exception */ function dynamic_init(array $plugin_info) { $this->_logger->entrance(); $id = $this->_get_numeric_option($plugin_info, 'id', false); $public_key = $this->_get_option($plugin_info, 'public_key', false); $secret_key = $this->_get_option($plugin_info, 'secret_key', null); $parent_id = $this->_get_numeric_option($plugin_info, 'parent_id', null); $parent_name = $this->_get_option($plugin_info, 'parent_name', null); if (isset($plugin_info['parent'])) { $parent_id = $this->_get_numeric_option($plugin_info['parent'], 'id', null); // $parent_slug = $this->get_option( $plugin_info['parent'], 'slug', null ); // $parent_public_key = $this->get_option( $plugin_info['parent'], 'public_key', null ); $parent_name = $this->_get_option($plugin_info['parent'], 'name', null); } if (false === $id) { throw new Freemius_Exception('Plugin id parameter is not set.'); } if (false === $public_key) { throw new Freemius_Exception('Plugin public_key parameter is not set.'); } $plugin = $this->_plugin instanceof FS_Plugin ? $this->_plugin : new FS_Plugin(); $plugin->update(array('id' => $id, 'public_key' => $public_key, 'slug' => $this->_slug, 'parent_plugin_id' => $parent_id, 'version' => $this->get_plugin_version(), 'title' => $this->get_plugin_name(), 'file' => $this->_free_plugin_basename, 'is_premium' => $this->_get_bool_option($plugin_info, 'is_premium', true), 'is_live' => $this->_get_bool_option($plugin_info, 'is_live', true))); if ($plugin->is_updated()) { // Update plugin details. $this->_plugin = FS_Plugin_Manager::instance($this->_slug)->store($plugin); } $this->_plugin->secret_key = $secret_key; if (!isset($plugin_info['menu'])) { // Back compatibility to 1.1.2 $plugin_info['menu'] = array('slug' => isset($plugin_info['menu_slug']) ? $plugin_info['menu_slug'] : $this->_slug); } $this->_menu = FS_Admin_Menu_Manager::instance($this->_slug); $this->_menu->init($plugin_info['menu'], $this->is_addon()); $this->_has_addons = $this->_get_bool_option($plugin_info, 'has_addons', false); $this->_has_paid_plans = $this->_get_bool_option($plugin_info, 'has_paid_plans', true); $this->_is_org_compliant = $this->_get_bool_option($plugin_info, 'is_org_compliant', true); $this->_enable_anonymous = $this->_get_bool_option($plugin_info, 'enable_anonymous', true); $this->_permissions = $this->_get_option($plugin_info, 'permissions', array()); if (!$this->is_registered()) { if (!$this->has_api_connectivity()) { if (is_admin() && $this->_admin_notices->has_sticky('failed_connect_api')) { if (!$this->_enable_anonymous) { // If anonymous mode is disabled, add firewall admin-notice message. add_action('admin_footer', array('Freemius', '_add_firewall_issues_javascript')); add_action("wp_ajax_{$this->_slug}_resolve_firewall_issues", array(&$this, '_email_about_firewall_issue')); } } return; } // Check if Freemius is on for the current plugin. // This MUST be executed after all the plugin variables has been loaded. if (!$this->is_on()) { return; } } if (false === $this->_background_sync()) { // If background sync wasn't executed, // and if the plugin declared it has add-ons but // no add-ons found in the local data, then try to sync add-ons. if ($this->_has_addons && !$this->is_addon() && false === $this->get_addons()) { $this->_sync_addons(); } } if ($this->is_addon()) { if ($this->is_parent_plugin_installed()) { // Link to parent FS. $this->_parent = self::get_instance_by_id($parent_id); // Get parent plugin reference. $this->_parent_plugin = $this->_parent->get_plugin(); } } if (is_admin()) { global $pagenow; if ('plugins.php' === $pagenow) { $this->hook_plugin_action_links(); } if ($this->is_addon()) { if (!$this->is_parent_plugin_installed()) { $this->_admin_notices->add(is_string($parent_name) ? sprintf(__fs('addon-cannot-run-without-x', $this->_slug), $this->get_plugin_name(), $parent_name) : sprintf(__fs('addon-x-cannot-run-without-parent', $this->_slug), $this->get_plugin_name()), __fs('oops', $this->_slug) . '...', 'error'); return; } else { if ($this->_parent->is_registered() && !$this->is_registered()) { // If parent plugin activated, automatically install add-on for the user. $this->_activate_addon_account($this->_parent); } // @todo This should be only executed on activation. It should be migrated to register_activation_hook() together with other activation related logic. if ($this->is_premium()) { // Remove add-on download admin-notice. $this->_parent->_admin_notices->remove_sticky('addon_plan_upgraded_' . $this->_slug); } } } else { add_action('admin_init', array(&$this, '_admin_init_action')); if ($this->_has_addons() && 'plugin-information' === fs_request_get('tab', false) && $this->get_id() == fs_request_get('parent_plugin_id', false)) { // Remove default plugin information action. remove_all_actions('install_plugins_pre_plugin-information'); require_once WP_FS__DIR_INCLUDES . '/fs-plugin-functions.php'; // Override action with custom plugins function for add-ons. add_action('install_plugins_pre_plugin-information', 'fs_install_plugin_information'); // Override request for plugin information for Add-ons. add_filter('fs_plugins_api', array(&$this, '_get_addon_info_filter'), WP_FS__DEFAULT_PRIORITY, 3); } else { if ($this->is_paying() || $this->_has_addons()) { new FS_Plugin_Updater($this); } } } // if ( $this->is_registered() || // $this->is_anonymous() || // $this->is_pending_activation() // ) { // $this->_init_admin(); // } } $this->do_action('initiated'); if (!$this->is_addon()) { if ($this->is_registered()) { // Fix for upgrade from versions < 1.0.9. if (!isset($this->_storage->activation_timestamp)) { $this->_storage->activation_timestamp = WP_FS__SCRIPT_START_TIME; } if ($this->_storage->prev_is_premium !== $this->_plugin->is_premium) { if (isset($this->_storage->prev_is_premium)) { add_action(is_admin() ? 'admin_init' : 'init', array(&$this, '_plugin_code_type_changed')); } else { // Set for code type for the first time. $this->_storage->prev_is_premium = $this->_plugin->is_premium; } } $this->do_action('after_init_plugin_registered'); } else { if ($this->is_anonymous()) { $this->do_action('after_init_plugin_anonymous'); } else { if ($this->is_pending_activation()) { $this->do_action('after_init_plugin_pending_activations'); } } } } else { if ($this->is_registered()) { $this->do_action('after_init_addon_registered'); } else { if ($this->is_anonymous()) { $this->do_action('after_init_addon_anonymous'); } else { if ($this->is_pending_activation()) { $this->do_action('after_init_addon_pending_activations'); } } } } }
/** * Parse plugin's settings (as defined by the plugin dev). * * @author Vova Feldman (@svovaf) * @since 1.1.7.3 * * @param array $plugin_info * * @throws \Freemius_Exception */ private function parse_settings(&$plugin_info) { $this->_logger->entrance(); $id = $this->get_numeric_option($plugin_info, 'id', false); $public_key = $this->get_option($plugin_info, 'public_key', false); $secret_key = $this->get_option($plugin_info, 'secret_key', null); $parent_id = $this->get_numeric_option($plugin_info, 'parent_id', null); $parent_name = $this->get_option($plugin_info, 'parent_name', null); /** * @author Vova Feldman (@svovaf) * @since 1.1.9 Try to pull secret key from external config. */ if (is_null($secret_key) && defined("WP_FS__{$this->_slug}_SECRET_KEY")) { $secret_key = constant("WP_FS__{$this->_slug}_SECRET_KEY"); } if (isset($plugin_info['parent'])) { $parent_id = $this->get_numeric_option($plugin_info['parent'], 'id', null); // $parent_slug = $this->get_option( $plugin_info['parent'], 'slug', null ); // $parent_public_key = $this->get_option( $plugin_info['parent'], 'public_key', null ); $parent_name = $this->get_option($plugin_info['parent'], 'name', null); } if (false === $id) { throw new Freemius_Exception('Plugin id parameter is not set.'); } if (false === $public_key) { throw new Freemius_Exception('Plugin public_key parameter is not set.'); } $plugin = $this->_plugin instanceof FS_Plugin ? $this->_plugin : new FS_Plugin(); $plugin->update(array('id' => $id, 'public_key' => $public_key, 'slug' => $this->_slug, 'parent_plugin_id' => $parent_id, 'version' => $this->get_plugin_version(), 'title' => $this->get_plugin_name(), 'file' => $this->_plugin_basename, 'is_premium' => $this->get_bool_option($plugin_info, 'is_premium', true), 'is_live' => $this->get_bool_option($plugin_info, 'is_live', true))); if ($plugin->is_updated()) { // Update plugin details. $this->_plugin = FS_Plugin_Manager::instance($this->_slug)->store($plugin); } // Set the secret key after storing the plugin, we don't want to store the key in the storage. $this->_plugin->secret_key = $secret_key; if (!isset($plugin_info['menu'])) { // Back compatibility to 1.1.2 $plugin_info['menu'] = array('slug' => isset($plugin_info['menu_slug']) ? $plugin_info['menu_slug'] : $this->_slug); } $this->_menu = FS_Admin_Menu_Manager::instance($this->_slug); $this->_menu->init($plugin_info['menu'], $this->is_addon()); $this->_has_addons = $this->get_bool_option($plugin_info, 'has_addons', false); $this->_has_paid_plans = $this->get_bool_option($plugin_info, 'has_paid_plans', true); $this->_is_org_compliant = $this->get_bool_option($plugin_info, 'is_org_compliant', true); $this->_is_premium_only = $this->get_bool_option($plugin_info, 'is_premium_only', false); if ($this->_is_premium_only) { // If premium only plugin, disable anonymous mode. $this->_enable_anonymous = false; $this->_anonymous_mode = false; } else { $this->_enable_anonymous = $this->get_bool_option($plugin_info, 'enable_anonymous', true); $this->_anonymous_mode = $this->get_bool_option($plugin_info, 'anonymous_mode', false); } $this->_permissions = $this->get_option($plugin_info, 'permissions', array()); }
/** * Parse plugin's settings (as defined by the plugin dev). * * @author Vova Feldman (@svovaf) * @since 1.1.7.3 * * @param array $plugin_info * * @throws \Freemius_Exception */ private function parse_settings(&$plugin_info) { $this->_logger->entrance(); $id = $this->get_numeric_option($plugin_info, 'id', false); $public_key = $this->get_option($plugin_info, 'public_key', false); $secret_key = $this->get_option($plugin_info, 'secret_key', null); $parent_id = $this->get_numeric_option($plugin_info, 'parent_id', null); $parent_name = $this->get_option($plugin_info, 'parent_name', null); if (isset($plugin_info['parent'])) { $parent_id = $this->get_numeric_option($plugin_info['parent'], 'id', null); // $parent_slug = $this->get_option( $plugin_info['parent'], 'slug', null ); // $parent_public_key = $this->get_option( $plugin_info['parent'], 'public_key', null ); $parent_name = $this->get_option($plugin_info['parent'], 'name', null); } if (false === $id) { throw new Freemius_Exception('Plugin id parameter is not set.'); } if (false === $public_key) { throw new Freemius_Exception('Plugin public_key parameter is not set.'); } $plugin = $this->_plugin instanceof FS_Plugin ? $this->_plugin : new FS_Plugin(); $plugin->update(array('id' => $id, 'public_key' => $public_key, 'slug' => $this->_slug, 'parent_plugin_id' => $parent_id, 'version' => $this->get_plugin_version(), 'title' => $this->get_plugin_name(), 'file' => $this->_plugin_basename, 'is_premium' => $this->get_bool_option($plugin_info, 'is_premium', true), 'is_live' => $this->get_bool_option($plugin_info, 'is_live', true))); if ($plugin->is_updated()) { // Update plugin details. $this->_plugin = FS_Plugin_Manager::instance($this->_slug)->store($plugin); } // Set the secret key after storing the plugin, we don't want to store the key in the storage. $this->_plugin->secret_key = $secret_key; if (!isset($plugin_info['menu'])) { // Back compatibility to 1.1.2 $plugin_info['menu'] = array('slug' => isset($plugin_info['menu_slug']) ? $plugin_info['menu_slug'] : $this->_slug); } $this->_menu = FS_Admin_Menu_Manager::instance($this->_slug); $this->_menu->init($plugin_info['menu'], $this->is_addon()); $this->_has_addons = $this->get_bool_option($plugin_info, 'has_addons', false); $this->_has_paid_plans = $this->get_bool_option($plugin_info, 'has_paid_plans', true); $this->_is_org_compliant = $this->get_bool_option($plugin_info, 'is_org_compliant', true); $this->_enable_anonymous = $this->get_bool_option($plugin_info, 'enable_anonymous', true); $this->_permissions = $this->get_option($plugin_info, 'permissions', array()); }