356 lines
8.7 KiB
PHP
356 lines
8.7 KiB
PHP
<?php
|
|
/**
|
|
* Basic Whitelabel
|
|
*
|
|
* @package WP_Ultimo
|
|
* @subpackage Whitelabel
|
|
* @since 2.0.0
|
|
*/
|
|
|
|
namespace WP_Ultimo;
|
|
|
|
// Exit if accessed directly
|
|
defined('ABSPATH') || exit;
|
|
|
|
/**
|
|
* Handles the basic white-labeling of the WordPress admin interface.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
class Whitelabel {
|
|
|
|
use \WP_Ultimo\Traits\Singleton;
|
|
|
|
/**
|
|
* Checks if the cache was initiated.
|
|
*
|
|
* @since 2.0.0
|
|
* @var boolean
|
|
*/
|
|
protected $init = false;
|
|
|
|
/**
|
|
* Cached allowed domains.
|
|
*
|
|
* @since 2.0.0
|
|
* @var array
|
|
*/
|
|
protected $allowed_domains;
|
|
|
|
/**
|
|
* Array of terms to search for.
|
|
*
|
|
* @since 2.0.0
|
|
* @var array
|
|
*/
|
|
protected $search = array();
|
|
|
|
/**
|
|
* Array of terms to replace with. Must be a 1 to 1 relationship with the search array.
|
|
*
|
|
* @since 2.0.0
|
|
* @var array
|
|
*/
|
|
protected $replace = array();
|
|
|
|
/**
|
|
* Adds the hooks.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function init() {
|
|
|
|
add_action('wp_ultimo_load', array($this, 'add_settings'), 20);
|
|
|
|
add_action('admin_init', array($this, 'clear_footer_texts'));
|
|
|
|
add_action('init', array($this, 'hooks'));
|
|
|
|
add_filter('gettext', array($this, 'replace_text'), 10, 3);
|
|
}
|
|
|
|
/**
|
|
* Add the necessary hooks when the feature is enabled.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function hooks() {
|
|
|
|
if (wu_get_setting('hide_wordpress_logo', true)) {
|
|
add_action('wp_before_admin_bar_render', array($this, 'wp_logo_admin_bar_remove'), 0);
|
|
|
|
add_action('wp_user_dashboard_setup', array($this, 'remove_dashboard_widgets'), 11);
|
|
|
|
add_action('wp_dashboard_setup', array($this, 'remove_dashboard_widgets'), 11);
|
|
|
|
add_action('admin_enqueue_scripts', array($this, 'enqueue_styles'));
|
|
|
|
add_action('wp_enqueue_scripts', array($this, 'enqueue_styles'));
|
|
}
|
|
|
|
if (wu_get_setting('hide_sites_menu', true)) {
|
|
add_action('network_admin_menu', array($this, 'remove_sites_admin_menu'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Loads the custom css file.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function enqueue_styles() {
|
|
|
|
WP_Ultimo()->scripts->register_style('wu-whitelabel', wu_get_asset('whitelabel.css', 'css'));
|
|
|
|
wp_enqueue_style('wu-whitelabel');
|
|
}
|
|
|
|
/**
|
|
* Replaces the terms on the translated strings.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @param string $translation The translation.
|
|
* @param string $text The original text before translation.
|
|
* @param string $domain The gettext domain.
|
|
* @return string
|
|
*/
|
|
public function replace_text($translation, $text, $domain) {
|
|
|
|
if ($this->allowed_domains === null) {
|
|
$this->allowed_domains = apply_filters(
|
|
'wu_replace_text_allowed_domains',
|
|
array(
|
|
'default',
|
|
'wp-ultimo',
|
|
)
|
|
);
|
|
}
|
|
|
|
if ( ! in_array($domain, $this->allowed_domains, true)) {
|
|
return $translation;
|
|
}
|
|
|
|
/**
|
|
* Prevent replacement when dealing with URLs.
|
|
*
|
|
* WordPress uses translation functions to allow for its own URLs to
|
|
* be changed to the different locales. This means that if we try to
|
|
* edit those URLs, we might break things. PHP 8.0 is specially
|
|
* unforgiving in that scenario.
|
|
*
|
|
* @since 2.1.0
|
|
*/
|
|
if (strncmp($translation, 'http', strlen('http')) === 0) {
|
|
return $translation;
|
|
}
|
|
|
|
if ($this->init === false) {
|
|
$search_and_replace = array();
|
|
|
|
$site_plural = wu_get_setting('rename_site_plural');
|
|
|
|
if ($site_plural) {
|
|
$search_and_replace['sites'] = strtolower((string) $site_plural);
|
|
$search_and_replace['Sites'] = ucfirst((string) $site_plural);
|
|
}
|
|
|
|
$site_singular = wu_get_setting('rename_site_singular');
|
|
|
|
if ($site_singular) {
|
|
$search_and_replace['site'] = strtolower((string) $site_singular);
|
|
$search_and_replace['Site'] = ucfirst((string) $site_singular);
|
|
}
|
|
|
|
$wordpress = wu_get_setting('rename_wordpress');
|
|
|
|
if ($wordpress) {
|
|
$search_and_replace['wordpress'] = strtolower((string) $wordpress);
|
|
$search_and_replace['WordPress'] = ucfirst((string) $wordpress);
|
|
$search_and_replace['Wordpress'] = ucfirst((string) $wordpress);
|
|
$search_and_replace['wordPress'] = ucfirst((string) $wordpress);
|
|
}
|
|
|
|
if ($search_and_replace) {
|
|
$this->search = array_keys($search_and_replace);
|
|
$this->replace = array_values($search_and_replace);
|
|
}
|
|
|
|
$this->init = true;
|
|
}
|
|
|
|
if ( ! empty($this->search)) {
|
|
return str_replace($this->search, $this->replace, $translation);
|
|
}
|
|
|
|
return $translation;
|
|
}
|
|
|
|
/**
|
|
* Adds the whitelabel options.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @return void
|
|
*/
|
|
public function add_settings() {
|
|
|
|
wu_register_settings_section(
|
|
'whitelabel',
|
|
array(
|
|
'title' => __('Whitelabel', 'wp-ultimo'),
|
|
'desc' => __('Basic Whitelabel', 'wp-ultimo'),
|
|
'icon' => 'dashicons-wu-eye',
|
|
)
|
|
);
|
|
|
|
wu_register_settings_field(
|
|
'whitelabel',
|
|
'whitelabel_header',
|
|
array(
|
|
'title' => __('Whitelabel', 'wp-ultimo'),
|
|
'desc' => __('Hide a couple specific WordPress elements and rename others.', 'wp-ultimo'),
|
|
'type' => 'header',
|
|
)
|
|
);
|
|
|
|
$preview_image = wu_preview_image(wu_get_asset('settings/settings-hide-wp-logo-preview.png'));
|
|
|
|
wu_register_settings_field(
|
|
'whitelabel',
|
|
'hide_wordpress_logo',
|
|
array(
|
|
'title' => __('Hide WordPress Logo', 'wp-ultimo') . $preview_image,
|
|
'desc' => __('Hide the WordPress logo from the top-bar and replace the same logo on the My Sites top-bar item with a more generic icon.', 'wp-ultimo'),
|
|
'type' => 'toggle',
|
|
'default' => 1,
|
|
)
|
|
);
|
|
|
|
wu_register_settings_field(
|
|
'whitelabel',
|
|
'hide_sites_menu',
|
|
array(
|
|
'title' => __('Hide Sites Admin Menu', 'wp-ultimo'),
|
|
'desc' => __('We recommend that you manage all of your sites using the WP Multisite WaaS → Sites page. To avoid confusion, you can hide the default "Sites" item from the WordPress admin menu by toggling this option.', 'wp-ultimo'),
|
|
'type' => 'toggle',
|
|
'default' => 0,
|
|
)
|
|
);
|
|
|
|
wu_register_settings_field(
|
|
'whitelabel',
|
|
'rename_wordpress',
|
|
array(
|
|
'title' => __('Replace the word "WordPress"', 'wp-ultimo'),
|
|
'placeholder' => __('e.g. My App', 'wp-ultimo'),
|
|
'desc' => __('Replace all occurrences of the word "WordPress" with a different word.', 'wp-ultimo'),
|
|
'type' => 'text',
|
|
'default' => '',
|
|
)
|
|
);
|
|
|
|
wu_register_settings_field(
|
|
'whitelabel',
|
|
'rename_site_singular',
|
|
array(
|
|
'title' => __('Replace the word "Site" (singular)', 'wp-ultimo'),
|
|
'placeholder' => __('e.g. App', 'wp-ultimo'),
|
|
'desc' => __('Replace all occurrences of the word "Site" with a different word.', 'wp-ultimo'),
|
|
'type' => 'text',
|
|
'default' => '',
|
|
'wrapper_classes' => 'wu-w-1/2',
|
|
)
|
|
);
|
|
|
|
wu_register_settings_field(
|
|
'whitelabel',
|
|
'rename_site_plural',
|
|
array(
|
|
'title' => __('Replace the word "Sites" (plural)', 'wp-ultimo'),
|
|
'placeholder' => __('e.g. Apps', 'wp-ultimo'),
|
|
'desc' => __('Replace all occurrences of the word "Sites" with a different word.', 'wp-ultimo'),
|
|
'type' => 'text',
|
|
'default' => '',
|
|
'wrapper_classes' => 'wu-w-1/2',
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Removes the WordPress original logo from the top-bar.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function wp_logo_admin_bar_remove() {
|
|
|
|
global $wp_admin_bar;
|
|
|
|
$wp_admin_bar->remove_menu('wp-logo');
|
|
}
|
|
|
|
/**
|
|
* Remove the default widgets from the user panel.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function remove_dashboard_widgets() {
|
|
|
|
global $wp_meta_boxes;
|
|
|
|
unset($wp_meta_boxes['dashboard-user']['side']['core']['dashboard_quick_press']);
|
|
unset($wp_meta_boxes['dashboard-user']['normal']['core']['dashboard_incoming_links']);
|
|
unset($wp_meta_boxes['dashboard-user']['normal']['core']['dashboard_right_now']);
|
|
unset($wp_meta_boxes['dashboard-user']['normal']['core']['dashboard_plugins']);
|
|
unset($wp_meta_boxes['dashboard-user']['normal']['core']['dashboard_recent_drafts']);
|
|
unset($wp_meta_boxes['dashboard-user']['normal']['core']['dashboard_recent_comments']);
|
|
unset($wp_meta_boxes['dashboard-user']['side']['core']['dashboard_primary']);
|
|
unset($wp_meta_boxes['dashboard-user']['side']['core']['dashboard_secondary']);
|
|
}
|
|
|
|
/**
|
|
* Removes the WordPress credits from the admin footer.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function clear_footer_texts() {
|
|
|
|
if (current_user_can('manage_network')) {
|
|
return;
|
|
}
|
|
|
|
add_filter('admin_footer_text', '__return_empty_string', 11);
|
|
|
|
add_filter('update_footer', '__return_empty_string', 11);
|
|
}
|
|
|
|
/**
|
|
* Remove the sites admin menu, if the option is selected.
|
|
*
|
|
* @since 2.0.0
|
|
* @return void
|
|
*/
|
|
public function remove_sites_admin_menu() {
|
|
|
|
global $menu;
|
|
|
|
$index = '';
|
|
|
|
foreach ($menu as $i => $menu_item) {
|
|
if ($menu_item[2] === 'sites.php') {
|
|
$index = $i;
|
|
|
|
continue;
|
|
}
|
|
}
|
|
|
|
unset($menu[ $index ]);
|
|
}
|
|
}
|