update_path = $update_path; $this->plugin_slug = $plugin_slug; $this->current_version = LEARNDASH_VERSION; //$this->get_plugin_data()->Version; list ( $t1, $t2 ) = explode( '/', $plugin_slug ); $this->slug = str_replace( '.php', '', $t2 ); $code = $this->code = $this->slug; $license = get_option( 'nss_plugin_license_' . $code ); $licenseemail = get_option( 'nss_plugin_license_email_' . $code ); if ( ( empty( $license ) ) || ( empty( $licenseemail ) ) ) { $this->reset(); } else { // Build the updater path ONLY if the license and email are not empty. This prevents unnecessary calls to the remote server. $this->update_path = add_query_arg( array( 'pluginupdate' => $code, 'licensekey' => urlencode( $license ), 'licenseemail' => urlencode( $licenseemail ), 'nsspu_wpurl' => urlencode( get_bloginfo( 'wpurl' ) ), 'nsspu_admin' => urlencode( get_bloginfo( 'admin_email' ) ), 'current_version' => $this->current_version, ), $update_path ); } //Add Menu add_action( 'admin_menu', array( $this, 'nss_plugin_license_menu' ), 1 ); // define the alternative API for updating checking add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); // Define the alternative response for information checking add_filter( 'plugins_api', array( $this, 'check_info' ), 50, 3 ); add_action( 'in_admin_header', array( $this, 'check_notice' ) ); add_action( 'admin_notices', array( &$this, 'admin_notice_upgrade_notice' ) ); add_action( 'in_plugin_update_message-' . $this->plugin_slug, array( $this, 'show_upgrade_notification' ), 10, 2 ); // Handle License post update. add_action( 'admin_init', array( $this, 'nss_plugin_license_update' ), 1 ); } /** * Handle license form post updates. * * @since 3.0 */ public function nss_plugin_license_update() { // See if the user has posted us some information // If they did, this hidden field will be set to 'Y' if ( ( isset( $_POST['ld_plugin_license_nonce'] ) ) && ( ! empty( $_POST['ld_plugin_license_nonce'] ) ) && ( wp_verify_nonce( $_POST['ld_plugin_license_nonce'], 'update_nss_plugin_license_' . $this->code ) ) ) { $license = ''; if ( ( isset( $_POST[ 'nss_plugin_license_' . $this->code ] ) ) && ( ! empty( $_POST[ 'nss_plugin_license_' . $this->code ] ) ) ) { $license = esc_attr( $_POST[ 'nss_plugin_license_' . $this->code ] ); } $email = ''; if ( ( isset( $_POST[ 'nss_plugin_license_email_' . $this->code ] ) ) && ( is_email( $_POST[ 'nss_plugin_license_email_' . $this->code ] ) ) ) { $email = $_POST[ 'nss_plugin_license_email_' . $this->code ]; } // Save the posted value in the database update_option( 'nss_plugin_license_' . $this->code, $license ); update_option( 'nss_plugin_license_email_' . $this->code, $email ); $this->reset(); ?> get_plugin_upgrade_notice(); if ( ! empty( $upgrade_notice ) ) { echo '
' . str_replace( array('
', '
' ), array( '', '' . $this->get_plugin_data()->Name . '', '' . __('here', 'learndash' ) . '' ); ?>
', '
', $upgrade_notice_message );
$upgrade_notice_message = str_replace( '
', '', $upgrade_notice_message ); $upgrade_notice_message = str_replace( '
', '', $upgrade_notice_message ); $upgrade_notice .= '' . $upgrade_notice_version . ': ' . $upgrade_notice_message . '
'; } } } } else if ( 'upgrade_notice_admin' === $admin ) { if ( ( isset( $plugin_readme['upgrade_notice_admin']['content'] ) ) && ( ! empty( $plugin_readme['upgrade_notice_admin']['content'] ) ) ) { foreach ( $plugin_readme['upgrade_notice_admin']['content'] as $upgrade_notice_version => $upgrade_notice_message ) { if ( version_compare( $upgrade_notice_version, $this->current_version, '>' ) ) { //if ( ! empty( $upgrade_notice ) ) { // $upgrade_notice .= '', '
', $upgrade_notice_message );
//$upgrade_notice_message = str_replace( '
', '', $upgrade_notice_message ); //$upgrade_notice_message = str_replace( '
', '', $upgrade_notice_message ); //$upgrade_notice .= '' . $upgrade_notice_version . ': ' . $upgrade_notice_message . '
'; $upgrade_notice_message = str_replace( array( '', '
' ), $upgrade_notice_message ); $upgrade_notice .= $upgrade_notice_message; } } } } return $upgrade_notice; } /** * Add our self-hosted description to the filter, or returns false * * @since 2.1.0 * * @param boolean $false * @param array $action * @param object $arg * * @return bool|object */ public function check_info( $false, $action, $arg ) { if ( empty( $arg ) || empty( $arg->slug ) || empty( $this->slug ) ) { return $false; } if ( $arg->slug === $this->slug ) { if ( ! $this->time_to_recheck() ) { $info = get_option( 'nss_plugin_info_' . $this->slug ); if ( ! empty( $info ) ) { return $info; } } if ( 'plugin_information' == $action ) { $information = $this->getRemote_information(); update_option( 'nss_plugin_info_' . $this->slug, $information ); $false = $information; } } return $false; } /** * Return the remote version, or returns false * * @return bool|string $remote_version */ public function getRemote_version() { if ( ! empty( $this->update_path ) ) { $request = wp_remote_post( $this->update_path, array( 'body' => array( 'action' => 'version' ), 'timeout' => LEARNDASH_HTTP_REMOTE_POST_TIMEOUT ) ); if ( ! is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) === 200 ) { return $request['body']; } } return false; } /** * Get information about the remote version, or returns false * * @return bool|object */ public function getRemote_information() { if ( ! empty( $this->update_path ) ) { $request = wp_remote_post( $this->update_path, array( 'body' => array( 'action' => 'info' ), 'timeout' => LEARNDASH_HTTP_REMOTE_POST_TIMEOUT ) ); if ( ! is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) === 200 ) { $information = @unserialize( $request['body'] ); if ( empty( $information ) ) { $information = new stdClass(); } $plugin_readme = $this->get_plugin_readme(); if ( ! empty( $plugin_readme ) ) { // First we remove the properties we DON'T want from the support site foreach ( array( 'sections', 'requires', 'tested', 'last_updated' ) as $property_key ) { if ( property_exists( $information, $property_key ) ) { unset( $information->$property_key ); } } foreach ( $plugin_readme as $key => $val ) { if ( ! property_exists( $information, $key ) ) { $information->$key = $val; } } } return $information; } } return false; } /** * Return the status of the plugin licensing, or returns true * * @since 2.1.0 * * @return bool|string $remote_license */ public function getRemote_license() { if ( ! empty( $this->update_path ) ) { $request = wp_remote_post( $this->update_path, array( 'body' => array( 'action' => 'license' ), 'timeout' => LEARNDASH_HTTP_REMOTE_POST_TIMEOUT ) ); if ( ! is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) === 200 ) { if ( '1' !== $request['body'] ) { $this->reset(); add_action( 'admin_notices', array( &$this, 'admin_notice' ) ); return false; } return $request['body']; } } return false; } /** * Retrieves the current license from remote server, or returns true * * @since 2.1.0 * * @return bool|string $current_license */ public function getRemote_current_license() { if ( ! empty( $this->update_path ) ) { $request = wp_remote_post( $this->update_path, array( 'body' => array( 'action' => 'current_license' ), 'timeout' => LEARNDASH_HTTP_REMOTE_POST_TIMEOUT ) ); if ( ! is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) === 200 ) { if ( $request['body'] == 'not_found' ) { //$this->invalid_current_license(); } return $request['body']; } } return true; } /** * Adds the license submenu to the administrative settings page * * @since 2.1.0 * */ public function nss_plugin_license_menu() { add_submenu_page( 'admin.php?page=learndash_lms_settings', $this->get_plugin_data()->Name . ' License', $this->get_plugin_data()->Name . ' License', LEARNDASH_ADMIN_CAPABILITY_CHECK, 'nss_plugin_license-' . $this->code . '-settings', array( $this, 'nss_plugin_license_menupage' ) ); } /** * Outputs the license settings page * * @since 2.1.0 * */ public function nss_plugin_license_menupage() { $code = $this->code; //must check that the user has the required capability if ( ! learndash_is_admin_user() ) { wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'default' ) ); } // Read in existing option value from database $license = get_option( 'nss_plugin_license_' . $code ); $email = get_option( 'nss_plugin_license_email_' . $code ); $domain = str_replace( array( 'http://', 'https://' ), '', get_bloginfo( 'url' ) ); $license = get_option( 'nss_plugin_license_' . $code ); $email = get_option( 'nss_plugin_license_email_' . $code ); $license_status = false; if ( ! empty( $license ) && ! empty( $email ) ) { $license_status = get_option( 'nss_plugin_remote_license_' . $this->slug ); if ( isset( $license_status['value'] ) ) { $license_status = $license_status['value']; } else { $license_status = $this->getRemote_license(); } } ?>