path_url = Ithemes_Updater_Functions::get_url( $GLOBALS['ithemes_updater_path'] ); list( $this->self_url ) = explode( '?', $_SERVER['REQUEST_URI'] ); $this->self_url .= '?page=' . $this->page_name; add_action( 'ithemes_updater_settings_page_index', array( $this, 'index' ) ); add_action( 'admin_print_scripts', array( $this, 'add_scripts' ) ); add_action( 'admin_print_styles', array( $this, 'add_styles' ) ); } public function add_scripts() { wp_enqueue_script( 'ithemes-updater-settings-page-script', "{$this->path_url}/js/settings-page.js", array(), 2 ); } public function add_styles() { wp_enqueue_style( 'ithemes-updater-settings-page-style', "{$this->path_url}/css/settings-page.css", array(), 2 ); } public function index() { $post_data = Ithemes_Updater_Functions::get_post_data( array( 'it-updater-username', 'it-updater-password', 'packages', 'action', 'site_url', 'redirect', 'relicense_option' ), true ); if ( empty( $post_data['packages'] ) ) { $post_data['packages'] = array(); } if ( ! empty( $post_data['action'] ) ) { $action = $post_data['action']; } else if ( ! empty( $_REQUEST['action'] ) ) { $action = $_REQUEST['action']; } else { $action = 'list_packages'; } if ( 'save_licensed_site_url' === $action ) { $this->save_licensed_site_url( $post_data ); } else if ( 'relicense' === $action ) { $this->relicense( $post_data ); } else if ( 'change_licensed_site_url' === $action || ! $GLOBALS['ithemes-updater-settings']->is_licensed_site_url_confirmed() ) { $this->show_licensed_site_url_confirmation_page( $post_data ); } else { if ( 'license_packages' === $action ) { $this->license_packages( $post_data ); } else if ( 'unlicense_packages' === $action ) { $this->unlicense_packages( $post_data ); } else if ( 'save_settings' === $action ) { $this->save_settings(); } $this->list_packages( $action, $post_data ); } } private function save_settings() { check_admin_referer( 'save_settings', 'ithemes_updater_nonce' ); $settings_defaults = array( 'quick_releases' => false, ); $settings = array(); foreach ( $settings_defaults as $var => $val ) { if ( isset( $_POST[$var] ) ) $settings[$var] = $_POST[$var]; else $settings[$var] = $val; } if ( $settings['quick_releases'] ) $settings['quick_releases'] = true; $GLOBALS['ithemes-updater-settings']->update_options( $settings ); $GLOBALS['ithemes-updater-settings']->flush( 'settings saved' ); $this->messages[] = __( 'Settings saved', 'it-l10n-ithemes-security-pro' ); } private function license_packages( $data ) { check_admin_referer( 'license_packages', 'ithemes_updater_nonce' ); if ( empty( $data['username'] ) && empty( $data['password'] ) ) $this->errors[] = __( 'You must supply an iThemes membership username and password in order to license products.', 'it-l10n-ithemes-security-pro' ); else if ( empty( $data['username'] ) ) $this->errors[] = __( 'You must supply an iThemes membership username in order to license products.', 'it-l10n-ithemes-security-pro' ); else if ( empty( $data['password'] ) ) $this->errors[] = __( 'You must supply an iThemes membership password in order to license products.', 'it-l10n-ithemes-security-pro' ); else if ( empty( $data['packages'] ) ) $this->errors[] = __( 'You must select at least one product to license. Ensure that you select the products that you wish to license in the listing below.', 'it-l10n-ithemes-security-pro' ); if ( ! empty( $this->errors ) ) return; $response = Ithemes_Updater_API::activate_package( $data['username'], $data['password'], $data['packages'] ); if ( is_wp_error( $response ) ) { $this->errors[] = Ithemes_Updater_API::get_error_explanation( $response ); return; } if ( empty( $response['packages'] ) ) { $this->errors[] = __( 'An unknown server error occurred. Please try to license your products again at another time.', 'it-l10n-ithemes-security-pro' ); return; } uksort( $response['packages'], 'strnatcasecmp' ); $success = array(); $warn = array(); $fail = array(); foreach ( $response['packages'] as $package => $data ) { if ( preg_match( '/ \|\|\| \d+$/', $package ) ) continue; $name = Ithemes_Updater_Functions::get_package_name( $package ); if ( ! empty( $data['key'] ) ) $success[] = $name; else if ( ! empty( $data['status'] ) && ( 'expired' == $data['status'] ) ) $warn[$name] = __( 'Your product subscription has expired', 'it-l10n-ithemes-security-pro' ); else $fail[$name] = $data['error']['message']; } if ( ! empty( $success ) ) $this->messages[] = wp_sprintf( __( 'Successfully licensed %l.', 'it-l10n-ithemes-security-pro' ), $success ); if ( ! empty( $fail ) ) { foreach ( $fail as $name => $reason ) $this->errors[] = sprintf( __( 'Unable to license %1$s. Reason: %2$s', 'it-l10n-ithemes-security-pro' ), $name, $reason ); } if ( ! empty( $warn ) ) { foreach ( $warn as $name => $reason ) $this->soft_errors[] = sprintf( __( 'Unable to license %1$s. Reason: %2$s', 'it-l10n-ithemes-security-pro' ), $name, $reason ); } } private function unlicense_packages( $data ) { check_admin_referer( 'unlicense_packages', 'ithemes_updater_nonce' ); if ( empty( $data['username'] ) && empty( $data['password'] ) ) $this->errors[] = __( 'You must supply an iThemes membership username and password in order to remove licenses.', 'it-l10n-ithemes-security-pro' ); else if ( empty( $data['username'] ) ) $this->errors[] = __( 'You must supply an iThemes membership username in order to remove licenses.', 'it-l10n-ithemes-security-pro' ); else if ( empty( $data['password'] ) ) $this->errors[] = __( 'You must supply an iThemes membership password in order to remove licenses.', 'it-l10n-ithemes-security-pro' ); else if ( empty( $data['packages'] ) ) $this->errors[] = __( 'You must select at least one license to remove. Ensure that you select the licenses that you wish to remove in the listing below.', 'it-l10n-ithemes-security-pro' ); if ( ! empty( $this->errors ) ) return; $response = Ithemes_Updater_API::deactivate_package( $data['username'], $data['password'], $data['packages'] ); if ( is_wp_error( $response ) ) { $this->errors[] = Ithemes_Updater_API::get_error_explanation( $response ); return; } if ( empty( $response['packages'] ) ) { $this->errors[] = __( 'An unknown server error occurred. Please try to remove licenses from your products again at another time.', 'it-l10n-ithemes-security-pro' ); return; } uksort( $response['packages'], 'strnatcasecmp' ); $success = array(); $fail = array(); foreach ( $response['packages'] as $package => $data ) { if ( preg_match( '/ \|\|\| \d+$/', $package ) ) continue; $name = Ithemes_Updater_Functions::get_package_name( $package ); if ( isset( $data['status'] ) && ( 'inactive' == $data['status'] ) ) $success[] = $name; else if ( isset( $data['error'] ) && isset( $data['error']['message'] ) ) $fail[$name] = $data['error']['message']; else $fail[$name] = __( 'Unknown server error.', 'it-l10n-ithemes-security-pro' ); } if ( ! empty( $success ) ) $this->messages[] = wp_sprintf( _n( 'Successfully removed license from %l.', 'Successfully removed licenses from %l.', count( $success ), 'it-l10n-ithemes-security-pro' ), $success ); if ( ! empty( $fail ) ) { foreach ( $fail as $name => $reason ) $this->errors[] = sprintf( __( 'Unable to remove license from %1$s. Reason: %2$s', 'it-l10n-ithemes-security-pro' ), $name, $reason ); } } public function list_packages( $action = 'list_packages', $post_data = array() ) { require_once( $GLOBALS['ithemes_updater_path'] . '/packages.php' ); $details = Ithemes_Updater_Packages::get_full_details(); $packages = $details['packages']; $licensed = array(); $unlicensed = array(); $unrecognized = array(); foreach ( $packages as $path => $data ) { $name = Ithemes_Updater_Functions::get_package_name( $data['package'] ); $data['path'] = $path; if ( isset( $data['status'] ) && 'unlicensed' == $data['status'] ) $unlicensed[$name] = $data; else if ( isset( $data['status'] ) && in_array( $data['status'], array( 'active', 'expired' ) ) ) $licensed[$name] = $data; else $unrecognized[$name] = $data; } if ( ! empty( $_REQUEST['updated_url'] ) ) { $this->messages[] = __( 'Successfully updated the Licensed URL.', 'it-l10n-ithemes-security-pro' ); } $this->show_notices(); ?>

list_licensed_products( $licensed, $post_data, $action ); $this->list_unlicensed_products( $unlicensed, $post_data, $action ); $this->list_unrecognized_products( $unrecognized ); $this->show_settings(); ?>
get_option( 'quick_releases' ); ?>

get_licensed_site_url(); ?>

errors ) ) { $post_data = array( 'username' => '', 'password' => '', 'packages' => array(), ); } ?>

$data ) : ?> ' . __( 'Upgrade', 'it-l10n-ithemes-security-pro' ) . ''; $expiration = $this->get_expiration_string( $data['expiration'] ); $expiration = ''; $time_left = $data['expiration'] - $time; $class = 'expiring'; if ( $time_left > ( 86400 * 30 ) ) $class = 'active'; else if ( $time_left <= 0 ) $class = 'expired'; if ( 'expired' == $data['status'] ) { $class = 'expired'; $remaining = ' '; } $status = ucfirst( $class ); if ( ++$count % 2 ) { $class .= ' alt'; } $check_id = "cb-select-{$data['package']}"; $checked = ( in_array( $data['package'], $post_data['packages'] ) ) ? ' checked' : ''; ?>
errors ) ) { $post_data = array( 'username' => '', 'password' => '', 'packages' => array(), ); foreach ( $products as $name => $data ) $post_data['packages'][] = $data['package']; } ?>

Click here for a quick video tutorial.', 'it-l10n-ithemes-security-pro' ), 'https://ithemes.com/licensing/' ); ?>

$data ) : ?>

iThemes support and provide them with the details given below.', 'it-l10n-ithemes-security-pro' ), 'https://ithemes.com/support/' ); ?>

$data ) : ?>
show_notices(); $site_url = $GLOBALS['ithemes-updater-settings']->get_licensed_site_url(); if ( empty( $site_url ) ) { $site_url = network_home_url(); } if ( empty( $post_data['username'] ) || empty( $this->errors ) ) { $post_data['username'] = ''; } if ( empty( $post_data['password'] ) || empty( $this->errors ) ) { $post_data['password'] = ''; } if ( ! empty( $post_data['redirect'] ) ) { $redirect = $post_data['redirect']; } else if ( ! empty( $_GET['redirect'] ) ) { $redirect = $_GET['redirect']; } else { $redirect = ''; } ?>

errors[] = __( 'The licensed URL cannot be blank.', 'it-l10n-ithemes-security-pro' ); } else if ( false === filter_var( $data['site_url'], FILTER_VALIDATE_URL ) ) { $this->errors[] = __( 'The licensed URL must be a valid URL.', 'it-l10n-ithemes-security-pro' ); } if ( ! empty( $this->errors ) ) { $this->show_licensed_site_url_confirmation_page( $data ); return; } $site_url = $GLOBALS['ithemes-updater-settings']->get_site_url( $data['site_url'] ); if ( $this->has_license_keys() ) { $site_url_from_server = $GLOBALS['ithemes-updater-settings']->get_licensed_site_url_from_server(); if ( $site_url_from_server !== $site_url ) { $data['site_url'] = $site_url; $this->show_relicensing_page( $data ); return; } } $GLOBALS['ithemes-updater-settings']->set_licensed_site_url( $site_url ); $this->messages[] = __( 'Successfully set the Licensed URL.', 'it-l10n-ithemes-security-pro' ); if ( empty( $data['redirect'] ) ) { $redirect = admin_url( 'options-general.php?page=ithemes-licensing&updated_url=true' ); } else { $redirect = $data['redirect']; } echo '' . "\n"; $this->list_packages(); } public function show_relicensing_page( $data = array() ) { $this->show_notices(); $site_url_from_server = $GLOBALS['ithemes-updater-settings']->get_licensed_site_url_from_server(); if ( empty( $data['relicense_option'] ) ) { $data['relicense_option'] = 'relicense'; } if ( empty( $data['username'] ) ) { $data['username'] = ''; } if ( empty( $data['password'] ) ) { $data['password'] = ''; } ?>

%s.', 'it-l10n-ithemes-security-pro' ), $site_url_from_server ); ?>


%s site still exists and is different from this site, you will have to create new licenses on that site.', 'it-l10n-ithemes-security-pro' ), $data['site_url'], $site_url_from_server ); ?>

%1$s to %2$s.', 'it-l10n-ithemes-security-pro' ), $site_url_from_server, $data['site_url'] ); ?>



errors[] = __( 'You must supply an iThemes membership username and password in order to change the licensed URL.', 'it-l10n-ithemes-security-pro' ); } else if ( empty( $data['username'] ) ) { $this->errors[] = __( 'You must supply an iThemes membership username in order to change the licensed URL.', 'it-l10n-ithemes-security-pro' ); } else if ( empty( $data['password'] ) ) { $this->errors[] = __( 'You must supply an iThemes membership password in order to change the licensed URL.', 'it-l10n-ithemes-security-pro' ); } else if ( empty( $data['site_url'] ) ) { $this->errors[] = __( 'The licensed URL cannot be blank.', 'it-l10n-ithemes-security-pro' ); } else if ( false === filter_var( $data['site_url'], FILTER_VALIDATE_URL ) ) { $this->errors[] = __( 'The licensed URL must be a valid URL.', 'it-l10n-ithemes-security-pro' ); } else if ( empty( $data['relicense_option'] ) || ! in_array( $data['relicense_option'], array( 'relicense', 'update' ) ) ) { $this->errors[] = __( 'You must pick one of the License Option options.', 'it-l10n-ithemes-security-pro' ); } if ( ! empty( $this->errors ) ) { $this->show_relicensing_page( $data ); return; } if ( 'update' === $data['relicense_option'] ) { $response = Ithemes_Updater_API::set_licensed_site_url( $data['username'], $data['password'], $data['site_url'] ); if ( is_wp_error( $response ) ) { $this->errors[] = Ithemes_Updater_API::get_error_explanation( $response ); $this->show_relicensing_page( $data ); return; } $GLOBALS['ithemes-updater-settings']->set_licensed_site_url( $data['site_url'] ); $this->messages[] = __( 'Successfully updated the Licensed URL.', 'it-l10n-ithemes-security-pro' ); } else { require_once( $GLOBALS['ithemes_updater_path'] . '/keys.php' ); $keys = Ithemes_Updater_Keys::get(); $packages = array_keys( $keys ); $response = Ithemes_Updater_API::deactivate_package( $data['username'], $data['password'], $packages ); if ( is_wp_error( $response ) ) { $this->errors[] = Ithemes_Updater_API::get_error_explanation( $response ); $this->show_relicensing_page( $data ); return; } $GLOBALS['ithemes-updater-settings']->set_licensed_site_url( $data['site_url'] ); $this->messages[] = __( 'Successfully updated the Licensed URL.', 'it-l10n-ithemes-security-pro' ); $response = Ithemes_Updater_API::activate_package( $data['username'], $data['password'], $packages ); if ( is_wp_error( $response ) ) { $this->errors[] = Ithemes_Updater_API::get_error_explanation( $response ); $this->show_relicensing_page( $data ); return; } } if ( empty( $data['redirect'] ) ) { $redirect = admin_url( 'options-general.php?page=ithemes-licensing&updated_url=true' ); } else { $redirect = $data['redirect']; } echo '' . "\n"; $this->list_packages(); return; } private function show_notices() { if ( ! empty( $this->messages ) ) { foreach ( $this->messages as $message ) { echo "

$message

\n"; } } if ( ! empty( $this->errors ) ) { foreach ( $this->errors as $error ) { echo "

$error

\n"; } } if ( ! empty( $this->soft_errors ) ) { foreach ( $this->soft_errors as $error ) { echo "

$error

\n"; } } } private function get_expiration_string( $expiration_timestamp ) { $time = time(); $time_left = $expiration_timestamp - $time; $expired = false; if ( $time_left < 0 ) { $expired = true; $time_left = abs( $time_left ); } if ( $time_left > ( 86400 * 30 ) ) $expiration = date( 'Y-m-d', $expiration_timestamp ); else { if ( $time_left > 86400 ) $expiration = sprintf( _n( '%d day', '%d days', intval( $time_left / 86400 ), 'it-l10n-ithemes-security-pro' ), intval( $time_left / 86400 ) ); else if ( $time_left > 3600 ) $expiration = sprintf( _n( '%d hour', '%d hours', intval( $time_left / 3600 ), 'it-l10n-ithemes-security-pro' ), intval( $time_left / 3600 ) ); else if ( $time_left > 60 ) $expiration = sprintf( _n( '%d minute', '%d minutes', intval( $time_left / 60 ), 'it-l10n-ithemes-security-pro' ), intval( $time_left / 60 ) ); else $expiration = sprintf( _n( '%d second', '%d seconds', $time_left, 'it-l10n-ithemes-security-pro' ), intval( $time_left / 60 ) ); if ( $expired ) $expiration = sprintf( __( '%s ago', 'it-l10n-ithemes-security-pro' ), $expiration ); } return $expiration; } private function has_license_keys() { require_once( $GLOBALS['ithemes_updater_path'] . '/keys.php' ); $keys = Ithemes_Updater_Keys::get(); $legacy_keys = Ithemes_Updater_Keys::get_legacy(); if ( empty( $keys ) && empty( $legacy_keys ) ) { return false; } return true; } } new Ithemes_Updater_Settings_Page();