*/
class AAM_Backend_Manager {
/**
* Single instance of itself
*
* @var AAM_Backend_Manager
*
* @access private
*/
private static $_instance = null;
/**
* Initialize the object
*
* @return void
*
* @access protected
*/
protected function __construct() {
//print required JS & CSS
add_action('admin_enqueue_scripts', array($this, 'enqueueScript'));
add_action('admin_print_scripts', array($this, 'printJavascript'));
add_action('admin_print_styles', array($this, 'printStylesheet'));
//manager Admin Menu
add_action('admin_menu', array($this, 'adminMenu'), 999);
//manager AAM Ajax Requests
add_action('wp_ajax_aam', array($this, 'ajax'));
//manager AAM Features Content rendering
add_action('admin_action_aam-content', array($this, 'renderContent'));
//manager user search and authentication control
add_filter('user_search_columns', array($this, 'searchColumns'));
//manage access action to the user list
add_filter('user_row_actions', array($this, 'userActions'), 10, 2);
//check extension version
$this->checkExtensionList();
//register backend hooks and filters
AAM_Backend_Filter::register();
}
/**
* Enqueue global js
*
* Very important to track the JS errors on page to notify the customer that
* plugin might not function properly because of the javascript error on the page
*
* @return void
*
* @access public
*/
public function enqueueScript() {
if (AAM::isAAM()) {
echo "\n";
}
}
/**
*
*/
protected function checkExtensionList() {
$list = AAM_Core_API::getOption('aam-extension-list', array());
$repo = AAM_Core_Repository::getInstance();
foreach($list as $extension) {
$status = $repo->extensionStatus($extension->title);
if ($status == AAM_Core_Repository::STATUS_UPDATE) {
AAM_Core_Console::add(
sprintf(
__('Extension %s has new update available for download.'),
$extension->title
)
);
}
}
}
/**
* Add extra column to search in for User search
*
* @param array $columns
*
* @return array
*
* @access public
*/
public function searchColumns($columns) {
$columns[] = 'display_name';
return $columns;
}
/**
* Add "Manage Access" action
*
* Add additional action to the user list table.
*
* @param array $actions
* @param WP_User $user
*
* @return array
*
* @access public
*/
public function userActions($actions, $user) {
$url = admin_url('admin.php?page=aam&user=' . $user->ID);
$actions['aam'] = '';
$actions['aam'] .= __('Manage Access', AAM_KEY) . '';
return $actions;
}
/**
* Print javascript libraries
*
* @return void
*
* @access public
*/
public function printJavascript() {
if (AAM::isAAM()) {
wp_enqueue_script('aam-bt', AAM_MEDIA . '/js/bootstrap.min.js');
wp_enqueue_script('aam-dt', AAM_MEDIA . '/js/datatables.min.js');
wp_enqueue_script('aam-dwn', AAM_MEDIA . '/js/download.min.js');
wp_enqueue_script('aam-main', AAM_MEDIA . '/js/aam.js');
//add plugin localization
$this->printLocalization('aam-main');
}
}
/**
* Print plugin localization
*
* @param string $localKey
*
* @return void
*
* @access protected
*/
protected function printLocalization($localKey) {
$subject = $this->getCurrentSubject();
wp_localize_script($localKey, 'aamLocal', array(
'nonce' => wp_create_nonce('aam_ajax'),
'ajaxurl' => admin_url('admin-ajax.php'),
'url' => array(
'site' => admin_url('index.php'),
'jsbase' => AAM_MEDIA . '/js',
'editUser' => admin_url('user-edit.php'),
'addUser' => admin_url('user-new.php')
),
'subject' => array(
'type' => $subject->type,
'id' => $subject->id,
'name'=> $subject->name,
'blog' => get_current_blog_id()
),
'welcome' => AAM_Core_API::getOption('aam-welcome', 1),
'translation' => require (dirname(__FILE__) . '/Localization.php')
));
}
/**
*
* @return type
*/
protected function getCurrentSubject() {
$userId = AAM_Core_Request::get('user');
if ($userId) {
$u = get_user_by('id', $userId);
$subject = array(
'type' => 'user',
'id' => $userId,
'name' => ($u->display_name ? $u->display_name : $u->user_nicename)
);
} else {
$roles = array_keys(get_editable_roles());
$role = array_shift($roles);
$subject = array(
'type' => 'role',
'id' => $role,
'name' => AAM_Core_API::getRoles()->get_role($role)->name
);
}
return (object) $subject;
}
/**
* Print necessary styles
*
* @return void
*
* @access public
*/
public function printStylesheet() {
if (AAM::isAAM()) {
wp_enqueue_style('aam-bt', AAM_MEDIA . '/css/bootstrap.min.css');
wp_enqueue_style('aam-db', AAM_MEDIA . '/css/datatables.min.css');
wp_enqueue_style('aam-main', AAM_MEDIA . '/css/aam.css');
}
}
/**
* Register Admin Menu
*
* @return void
*
* @access public
*/
public function adminMenu() {
if (AAM_Core_Console::hasIssues()) {
$counter = ' '
. '' . AAM_Core_Console::count()
. '';
} else {
$counter = '';
}
//register the menu
add_menu_page(
__('AAM', AAM_KEY),
__('AAM', AAM_KEY) . $counter,
AAM_Core_ConfigPress::get('aam.page.capability', 'administrator'),
'aam',
array($this, 'renderPage'),
AAM_MEDIA . '/active-menu.png'
);
}
/**
* Render Main Content page
*
* @return void
*
* @access public
*/
public function renderPage() {
echo AAM_Backend_View::getInstance()->renderPage();
}
/**
* Render list of AAM Features
*
* Must be separate from Ajax call because WordPress ajax does not load
* a lot of UI stuff like admin menu
*
* @return void
*
* @access public
*/
public function renderContent() {
check_ajax_referer('aam_ajax');
echo AAM_Backend_View::getInstance()->renderContent();
exit();
}
/**
* Handle Ajax calls to AAM
*
* @return void
*
* @access public
*/
public function ajax() {
check_ajax_referer('aam_ajax');
//clean buffer to make sure that nothing messing around with system
while (@ob_end_clean()){}
//process ajax request
echo AAM_Backend_View::getInstance()->processAjax();
exit();
}
/**
* Bootstrap the manager
*
* @return void
*
* @access public
*/
public static function bootstrap() {
if (is_null(self::$_instance)) {
self::$_instance = new self;
}
}
/**
* Get instance of itself
*
* @return AAM_Backend_View
*
* @access public
*/
public static function getInstance() {
if (is_null(self::$_instance)) {
self::bootstrap();
}
return self::$_instance;
}
}