__NAMESPACE__.'\\on_settings_saved' )); setup_basic_settings(); if (!is_multisite()) { setup_addon_settings(); } } function network_settings_menu() { add_submenu_page ( 'settings.php', __('Revisionize Network Settings', 'revisionize'), __('Revisionize', 'revisionize'), 'manage_network_options', 'revisionize', __NAMESPACE__.'\\network_settings_page' ); register_setting('revisionize_network', 'revisionize_network_settings', array( "sanitize_callback" => __NAMESPACE__.'\\on_settings_saved' )); setup_addon_settings('revisionize_network'); } function network_update_settings() { check_admin_referer('revisionize_network-options'); // save files. on_settings_saved(); if (isset($_POST['revisionize_network_settings'])) { update_site_option('revisionize_network_settings', $_POST['revisionize_network_settings']); } // need to schedule an admin notice. wp_redirect(add_query_arg(array('page'=>'revisionize', 'updated'=>'true'), network_admin_url('settings.php'))); exit; } function settings_page() { if (!current_user_can('manage_options')) { echo __('Not Allowed.', 'revisionize'); return; } ?>

Note that site specific settings for Revisionize can be found when viewing a site. Such as here.

'; do_settings_fields($group, $key); echo ''; } function setup_basic_settings() { add_settings_section('revisionize_section_basic', '', '__return_null', 'revisionize'); input_setting('checkbox', __('Keep Backup', 'revisionize'), 'keep_backup', __("After publishing the revision, the previously live post will be kept around and marked as a backup revision of the new version.", 'revisionize'), true, 'revisionize_section_basic'); input_setting('checkbox', __('Preserve Date', 'revisionize'), 'preserve_date', __("The date of the original post will be maintained even if the revisionized post date changes. In particular, a scheduled revision won't modify the post date once it's published.", 'revisionize'), true, 'revisionize_section_basic'); input_setting('checkbox', __('Preserve Author', 'revisionize'), 'preserve_author', __("The author of the original post will be maintained even if the author of the revisionized post differs.", 'revisionize'), true, 'revisionize_section_basic'); } function setup_addon_settings($group="revisionize") { add_settings_section('revisionize_section_addons', '', '__return_null', $group); // These fields are displayed add_settings_field('revisionize_addon_file', __('Upload Addon', 'revisionize'), __NAMESPACE__.'\\settings_addon_file_html', $group, 'revisionize_section_addons', array('label_for' => 'revisionize_addon_file')); } function settings_addon_file_html($args) { $id = esc_attr($args['label_for']); ?>

To install or update an addon, choose a .rvz file and click

Improve the free Revisionize plugin with these official addons.
Visit revisionize.pro for more info.

* To install an addon update, visit https://revisionize.pro/account/ to login to your account.
Find the relevant purchase confirmation and download the updated .rvz file.
Come back here and upload the addon.

">

-
1, 'httpversion' => '1.1')); $json = is_array($response) && !empty($response['body']) ? $response['body'] : ''; $payload = !empty($json) ? json_decode($json, true) : array(); $addons = !empty($payload['addons']) ? $payload['addons'] : array(); if (remote_addons_valid($addons)) { \set_transient('revisionize_available_addons', $addons, \WEEK_IN_SECONDS * 2); } else { // for some reason our addons list is empty. cache this for a shorter time so site performance // isn't impacted by repeated network calls. \set_transient('revisionize_available_addons', [], \DAY_IN_SECONDS * 5); } } // failsafe - really make sure we have valid addons if (empty($addons) || !is_array($addons) || !remote_addons_valid($addons)) { $addons = array(); } foreach ($addons as &$addon) { $addon["installed"] = array_key_exists($addon["id"], $registered) ? $registered[$addon["id"]] : false; $addon["update_available"] = $addon["installed"] && version_compare($addon["version"], $addon["installed"]) > 0; } return $addons; } function remote_addons_valid($addons) { return !empty($addons) && count($addons) > 0 && all_keys_set($addons, "id") && all_keys_set($addons, "version"); } function all_keys_set($arr, $key) { $s = implode('', array_map(function($obj) use ($key) { return empty($obj[$key]) ? "" : $obj[$key]; }, $arr)); return !empty($s); } function check_for_addon_updates() { $addons = get_available_addons(); foreach ($addons as $addon) { if ($addon["update_available"]) { add_action(is_multisite() ? 'network_admin_notices' : 'admin_notices', __NAMESPACE__.'\\notify_needs_update'); } } } function get_installed_addons() { $addons = is_multisite() ? get_site_option('revisionize_installed_addons', array()) : get_option('revisionize_installed_addons', array()); return $addons ? $addons : array(); } function get_addons_root() { // version 2.2.3 - move the addons_root to a safe directory $uploads = wp_upload_dir(); $path = $uploads['basedir']; if (is_multisite() && !is_network_admin()) { // when network admin we get back /wp-content/uploads/ // when in a Site we get back /wp-content/uploads/sites/site-ID $path = str_replace('/sites/'.get_current_blog_id(), '', $path); } return apply_filters('revisionize_addons_root', $path.'/revisionize/addons'); } function set_installed_addons($installed) { if (is_multisite()) { update_site_option('revisionize_installed_addons', array_unique($installed)); } else { update_option('revisionize_installed_addons', array_unique($installed)); } } function load_addons() { $addons = get_installed_addons(); foreach ($addons as $id) { $file = get_addons_root().'/'.$id.'.php'; if (file_exists($file)) { if (is_addon_pending_delete($id)) { uninstall_addon($id, $file); } else { require_once $file; \RevisionizeAddon::create($id); } } else { // system thinks addon is installed, but the file doesn't exist. Probably because it got wiped during a core plugin update. // v2.2.3 changes the addons_root directory to wp-content/uploads/revisionize/addons add_action(is_multisite() ? 'network_admin_notices' : 'admin_notices', __NAMESPACE__.'\\notify_fix_addons'); } } do_action('revisionize_addons_loaded'); } function is_addon_active($id) { return is_checkbox_checked('addon_'.$id.'_active', true, is_multisite()); } function is_addon_pending_delete($id) { return is_checkbox_checked('addon_'.$id.'_delete', false, is_multisite()); } function filter_keep_backup($b) { return is_checkbox_checked('keep_backup', $b); } function filter_preserve_date($b) { return is_checkbox_checked('preserve_date', $b); } function filter_preserve_author($b) { return is_checkbox_checked('preserve_author', $b); } // basic inputs for now // $type: text|email|number|checkbox function input_setting($type, $name, $key, $description, $default, $section) { add_settings_field('revisionize_setting_'.$key, $name, __NAMESPACE__.'\\field_input', 'revisionize', $section, array( 'type' => $type, 'label_for' => 'revisionize_setting_'.$key, 'key' => $key, 'description' => $description, 'default' => $default )); } function field_input($args) { $type = $args['type']; $id = esc_attr($args['label_for']); $key = esc_attr($args['key']); $value = ''; if ($type == 'checkbox') { if (is_checkbox_checked($key, $args['default'])) { $value = 'checked'; } } else { $value = 'value="'.get_setting($key, $args['default']).'"'; } ?>
Revisionize has a new settings panel. Check it out!'; echo '

'.$notice.'

'; } function notify_updated_settings() { echo '

Settings saved.

'; } function notify_needs_update() { if (!is_on_settings_page() && !is_on_network_settings_page()) { $url = is_multisite() ? network_admin_url('settings.php?page=revisionize') : admin_url('options-general.php?page=revisionize'); echo '

Revisionize has 1 or more updates available for your installed addons. View settings for details.

'; } } function settings_css() { ?> Settings')); } function network_settings_link($links) { return array_merge($links, array('Settings')); } function notify_fix_addons() { echo '

Please re-install your Revisionize addons.
There was a problem where updates to the core Revisionize plugin would inadvertantly delete your installed addons.
This has been fixed in version 2.2.3. Sorry for the inconvenience!

'; } function save_settings_button_label() { return __('Save Settings', 'revisionize'); }