bibhamrokhanpin/wp-content/plugins/ultimo-wp/ultimo-wp.php
2024-04-10 17:46:06 +05:45

399 lines
11 KiB
PHP

<?php
/**
* Plugin Name: Ultimo - WP Dashboard Theme
* Plugin URI: http://weare732.com/
* Description: Give your WordPress admin a whole new look with Ultimo WP.
* Version: 0.1.0
* Author: Arindo Duque - 732
* Author URI: http://weare732.com/
* Copyright: Arindo Duque, seventhreetwo
*/
/**
* Loads our incredibily awesome Paradox Framework, which we are going to use a lot.
*/
require 'paradox/paradox-plugin.php';
/**
* Loads TGM do require Redux Framework
*/
require 'inc/tgm/require.php';
// Loads the Plugin
require 'admin/admin.php';
/**
* Our plugin starts here
*
* UltimoWP is a WordPress plugin that completly transforms your WordPress admin interface, giving it a
* awesome and beautful Google Material Design interface.
*/
class UltimoWP extends ParadoxPlugin {
// Screen ID
public $screenID = 'toplevel_page_ultimo-wp';
/**
* Creates or returns an instance of this class.
* @return object The instance of this class, to be used.
*/
public static function init() {
// If an instance hasn't been created and set to $instance create an instance and set it to $instance.
if (null == self::$instance) {self::$instance = new self;}
return self::$instance;
}
/**
* Initializes the plugin adding all important hooks and generating important instances of our framework.
*/
public function __construct() {
// Check for Redux FrameWork
if (!class_exists("ReduxFramework"))
return;
// Setup
$this->id = 'ultimo-wp';
$this->textDomain = 'ultimo-wp';
$this->file = __FILE__;
// Set Debug Temporarily to True
$this->debug = true;
// Calling parent construct
parent::__construct();
// Now we call the Advanced Custom Posts Plugin, that will handle our Options Page
// $this->addACF(); // Since we wont use it, there's no point in adding it.
}
/**
* Enqueue and register Admin JavaScript files here.
*/
public function enqueueAdminScripts() {
// Common and Admin JS
wp_enqueue_script($this->id.'common', $this->url('assets/js/common.min.js'), false, '', true);
wp_enqueue_script($this->id.'admin', $this->url('assets/js/admin.min.js'), array($this->id.'common'), '', true);
}
/**
* Enqueue and register Admin CSS files here.
*/
public function enqueueAdminStyles() {
// Common and Admin styles
wp_dequeue_style('admin-bar');
wp_enqueue_style($this->id.'common', $this->url('assets/css/common.min.css'));
wp_enqueue_style($this->id.'admin', $this->url('assets/css/admin.min.css'));
// Custom CSS
$this->addCustomCSS();
}
/**
* Enqueue and register Login CSS files here.
*/
public function enqueueLoginStyles() {
// Common and Admin styles
wp_enqueue_style($this->id.'common', $this->url('assets/css/common.min.css'));
wp_enqueue_style($this->id.'login', $this->url('assets/css/login.min.css'));
// Custom CSS
$this->addCustomCSS();
}
/**
* Enqueue and register Login JavaScript files here.
*/
public function enqueueLoginScripts() {
// Common and Admin JS
wp_enqueue_script('jquery');
wp_enqueue_script($this->id.'common', $this->url('assets/js/common.min.js'), false, '', true);
wp_enqueue_script($this->id.'admin', $this->url('assets/js/login.min.js'), array($this->id.'common'), '', true);
} // end enqueueLoginScripts;
/**
* Enqueue and register Frontend JavaScript files here.
*/
public function enqueueFrontendStyles() {
// Common and Admin styles
wp_dequeue_style('admin-bar');
wp_enqueue_style('dashicons');
// Only if user is logged in
if (is_user_logged_in() && is_admin_bar_showing()) {
wp_enqueue_style($this->id.'common', $this->url('assets/css/common.min.css'));
wp_enqueue_style($this->id.'frontend', $this->url('assets/css/frontend.min.css'));
// Custom CSS
$this->addCustomCSS();
} // end if;
}
/**
* We need to attach our css, saved on the DB to the actual css loaded across the plugin
*/
public function addCustomCSS() {
// Get custom CSS saved
$css = get_option($this->id.'compiledCss');
// Adicitonal CSS to login Screen
$login = 'html {padding-top: 0px !important;}';
// Check and append
if ($css) {
wp_add_inline_style($this->id.'admin', $css);
wp_add_inline_style($this->id.'login', $css.$login);
wp_add_inline_style($this->id.'frontend', $css);
}
}
/**
* Here is where we create and manage our admin pages
*/
public function adminPages() {}
/**
* Place code that will be run on first activation
*/
public function onActivation() {
global $ultimoSettings;
// Check if activation exists
$isActive = get_option($this->id.'-activated');
if (!$isActive) {
// var_dump($ultimoSettings);
$this->runCompiler($ultimoSettings);
update_option($this->id.'-activated', true);
}
}
/**
* Recomplie our custom scss generated to apply new Color Scheme, based on user options
*/
public function runCompiler($options, $css = '') {
// Get custom SASS
ob_start();
include $this->path('inc/color-scheme/color-scheme.php');
$scss = ob_get_clean();
// Carries our CSS
$customCSS = $this->compileSass($scss);
$customCSS .= $css;
// Saves our new compiled CSS
update_option($this->id.'compiledCss', $customCSS);
}
/**
* After ACF saves
* @param mixed $post_id The post being save or, in our case, the option.
*/
public function onSave($post_id) {
if ($post_id === 'options') $this->runCompiler();
}
/**
* Material WP Ad
*/
public function materialWPAd() {
$screen = get_current_screen();
if ($screen->id == $this->screenID)
$this->render('material-wp-ad');
}
/**
* Place code for your plugin's functionality here.
*/
public function Plugin() {
// Shameless plug
add_action('admin_notices', array($this, 'materialWPAd'));
// adds body class to our admin pages
add_filter('admin_body_class', array($this, 'bodyClass'), -2000);
// Remove Color Schemes from profile_personal_options
add_action('admin_head', array($this, 'removeColorSchemes'));
// Remove Tabs
add_action('admin_head', array($this, 'removeHelpTab'));
add_action('screen_options_show_screen', array($this, 'removeSOTab'), 10, 2);
// Changes Footer Texts
add_filter('admin_footer_text', array($this, 'footerLeft'));
add_filter('update_footer', array($this, 'footerRight'), 11);
// remove WP logo from adminbar
add_action('wp_before_admin_bar_render', array($this, 'removeWPLogo'));
// adds our custom site logo
add_action('admin_bar_menu', array($this, 'customLogo'), 0);
// Remove Howdy
add_filter('admin_bar_menu', array($this, 'removeHowdy'), 25);
// On Activation
add_action('admin_init', array($this, 'onActivation'), 200);
}
/**
* Adds custom body class, based on our theme
*/
public function bodyClass($classes) {
// var_dump($classes); die;
global $ultimoSettings;
$add = array();
// Add new classes, if set
if ($ultimoSettings['menu-separators']) $add[] = 'ultimo-separators';
if ($ultimoSettings['menu-icons']) $add[] = 'ultimo-icons';
// Add theme
$add[] = "ultimo-wp-{$ultimoSettings['preset']}";
$add[] = $this->id;
return $classes .' '. implode(' ', $add);
}
/*
* Remove howdy
*/
function removeHowdy($wp_admin_bar) {
// If user is not logged, do nothing
if (!is_user_logged_in()) return;
global $ultimoSettings;
$my_account = $wp_admin_bar->get_node('my-account');
$user = wp_get_current_user();
// Randomly selects which greeting msg to display
$total = count($ultimoSettings['welcome-text']) - 1;
$which = rand(0, $total);
$welcome = $ultimoSettings['welcome-text'][$which];
$newtitle = sprintf(__('%s <strong>%s</strong> %s'), $welcome, $user->display_name, get_avatar($user->ID, 40));
$wp_admin_bar->add_node( array(
'id' => 'my-account',
'title' => $newtitle,
));
} // end removeHowdy;
/*
* Remove the WordPress Logo from the WordPress Admin Bar
*/
public function removeWPLogo() {
// If user is not logged, do nothing
if (!is_user_logged_in()) return;
global $wp_admin_bar;
$wp_admin_bar->remove_menu('wp-logo');
}
/**
* Adds our custom logo to the admin
*/
public function customLogo() {
// If user is not logged, do nothing
if (!is_user_logged_in()) return;
global $wp_admin_bar, $ultimoSettings;
// Check if title is image or text
$title = ($ultimoSettings['logo-type'] == 'image') ? "<img class='indigo-logo' src='". $ultimoSettings['logo-img']['url'] ."'><img class='indigo-logo-mini' src='". $ultimoSettings['logo-img-mini']['url'] ."'>" : "<span class='indigo-logo'>{$ultimoSettings['logo-text']}</span><span class='indigo-logo-mini'>". substr($ultimoSettings['logo-text'], 0 , 1) ."</span>";
$args = array(
'id' => 'my-site-logo',
'title' => $title,
'href' => admin_url(),
'meta' => array(
'class' => "custom-site-logo wp-ui-notification text-{$ultimoSettings['logo-align']}",
)
);
$wp_admin_bar->add_node($args);
}
/**
* Footer Left
*/
public function footerLeft($text) {
global $ultimoSettings;
return (empty($ultimoSettings['footer-left-text'])) ? $text : $ultimoSettings['footer-left-text'];
}
/**
* Footer Right
*/
public function footerRight($text) {
global $ultimoSettings;
return (empty($ultimoSettings['footer-right-text'])) ? $text : $ultimoSettings['footer-right-text'];
}
/**
* Function that removes Help
*/
public function removeHelpTab() {
global $ultimoSettings;
// if hide Help Tabs
if (!$ultimoSettings['help-tabs']) {
$screen = get_current_screen();
$screen->remove_help_tabs();
}
}
/**
* Function that removes Screen Options
*/
public function removeSOTab($display_boolean, $wp_screen_object) {
global $ultimoSettings;
// If hide Screen Options
if (!$ultimoSettings['screen-options-tabs']) {
$wp_screen_object->render_screen_layout();
$wp_screen_object->render_per_page_options();
return false;
}
else return true;
}
/**
* Remove color scheme selector from users
*/
public function removeColorSchemes() {
global $_wp_admin_css_colors;
$_wp_admin_css_colors = 0;
}
}
/**
* Finally we get to run our plugin.
*/
$UltimoWP = new UltimoWP;
global $UltimoWP;