__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');
}