add_actions();
}
// PRIVATE SITE
public function aioi_template_redirect() {
$options = $this->get_option_aioi();
if (!$options['aioi_privatesite']) {
return;
}
$allow_access = false;
if (substr($_SERVER['REQUEST_URI'], 0, 16) == '/wp-activate.php' || substr($_SERVER['REQUEST_URI'], 0, 11) == '/robots.txt') {
$allow_access = true;
}
$allow_access = apply_filters('aioi_allow_public_access', $allow_access);
if ($allow_access) {
return;
}
// We do want a private site
if (!is_user_logged_in()) {
auth_redirect();
}
else {
if (is_multisite()) {
$this->handle_private_loggedin_multisite($options);
}
else {
// Bar access to users with no role
$user = wp_get_current_user();
if (!$user || !is_array($user->roles) || count($user->roles) == 0) {
wp_logout();
$output = '
'.esc_html__('You attempted to login to the site, but you do not have any permissions. If you believe you should have access, please contact your administrator.', 'all-in-one-intranet').'
';
wp_die($output);
}
}
}
}
// Override to decide what to do for Multisite
protected function handle_private_loggedin_multisite($options) {
}
// Handler for robots.txt - just disallow if private
public function aioi_robots_txt($output, $public) {
$options = $this->get_option_aioi();
if ($options['aioi_privatesite']) {
return "Disallow: /\n";
}
return $output;
}
// Don't allow ping backs if private
public function aioi_option_ping_sites($sites) {
$options = $this->get_option_aioi();
if ($options['aioi_privatesite']) {
return '';
}
return $sites;
}
// Disable REST API
public function aioi_rest_pre_dispatch() {
$options = $this->get_option_aioi();
$allow_access = !$options['aioi_privatesite'] || is_user_logged_in();
$allow_access = apply_filters('aioi_allow_public_access', $allow_access);
if (!$allow_access) {
return new WP_Error( 'not-logged-in', 'REST API Requests must be authenticated because All-In-One Intranet is active', array( 'status' => 401 ) );
}
}
// LOGIN REDIRECT
public function aioi_login_redirect($redirect_to, $requested_redirect_to='', $user=null) {
if (!is_null($user) && isset($user->user_login)) {
$options = $this->get_option_aioi();
if ($options['aioi_loginredirect'] != '' && admin_url() == $redirect_to) {
return $options['aioi_loginredirect'];
}
}
return $redirect_to;
}
// AUTO-LOGOUT
// Reset timer on login
public function aioi_wp_login($username, $user) {
try {
if ($user->ID) {
update_user_meta($user->ID, 'aioi_last_activity_time', time());
}
} catch (Exception $ex) {
}
}
// Check whether user should be auto-logged out this time
public function aioi_check_activity() {
if (is_user_logged_in()) {
$user_id = get_current_user_id();
$last_activity_time = (int)get_user_meta($user_id, 'aioi_last_activity_time', true);
$logout_time_in_sec = $this->get_autologout_time_in_seconds();
if ($logout_time_in_sec > 0 && $last_activity_time + $logout_time_in_sec < time()) {
$current_url = 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
wp_logout();
wp_redirect($current_url); // Should hit the Login wall if site is private
exit;
} else {
update_user_meta($user_id, 'aioi_last_activity_time', time());
}
}
}
protected function get_autologout_time_in_seconds() {
$options = $this->get_option_aioi();
if ($options['aioi_autologout_time'] == 0) {
return 0;
}
switch ($options['aioi_autologout_units']) {
case 'days':
return $options['aioi_autologout_time'] * 60 * 60 * 24;
break;
case 'hours':
return $options['aioi_autologout_time'] * 60 * 60;
break;
case 'minutes':
default:
return $options['aioi_autologout_time'] * 60;
break;
}
}
// PUT SETTINGS MENU ON PLUGINS PAGE
public function aioi_plugin_action_links( $links, $file ) {
if ($file == $this->my_plugin_basename()) {
$settings_link = ''.__('Settings', 'all-in-one-intranet').'';
array_unshift( $links, $settings_link );
}
return $links;
}
// ADMIN OPTIONS
// *************
protected function get_options_menuname() {
return 'aioi_list_options';
}
protected function get_options_pagename() {
return 'aioi_options';
}
protected function get_settings_url() {
return is_multisite()
? network_admin_url( 'settings.php?page='.$this->get_options_menuname() )
: admin_url( 'options-general.php?page='.$this->get_options_menuname() );
}
// Add All-In-One Intranet to the Settings menu in admin panel
public function aioi_admin_menu() {
if (is_multisite()) {
add_submenu_page( 'settings.php', __('All-In-One Intranet settings', 'all-in-one-intranet'),
__('All-In-One Intranet', 'all-in-one-intranet'),
'manage_network_options', $this->get_options_menuname(),
array($this, 'aioi_options_do_page'));
}
else {
add_options_page( __('All-In-One Intranet settings', 'all-in-one-intranet'),
__('All-In-One Intranet', 'all-in-one-intranet'),
'manage_options', $this->get_options_menuname(),
array($this, 'aioi_options_do_page'));
}
}
// Entry point of admin settings page
public function aioi_options_do_page() {
wp_enqueue_script( 'aioi_admin_js', $this->my_plugin_url().'js/aioi-admin.js', array('jquery') );
$submit_page = is_multisite() ? 'edit.php?action='.$this->get_options_menuname() : 'options.php';
if (is_multisite()) {
$this->aioi_options_do_network_errors();
}
?>
get_option_aioi();
echo "
".esc_html__('Note that your media uploads (e.g. photos) will still be accessible to anyone who knows their direct URLs.', 'all-in-one-intranet')."
";
$this->display_registration_warning();
echo " ";
}
protected function display_registration_warning() {
if (get_option('users_can_register')) {
echo '
'
. ''.esc_html__('Warning:', 'all-in-one-intranet').' '
. esc_html__('Your site is set so that "Anyone can register" themselves. ', 'all-in-one-intranet');
echo ''.esc_html__('Turn off here', 'all-in-one-intranet').'';
echo '
';
}
}
// Override to deal with members of sub-sites in a multisite
protected function aioi_memberssection_text() {
}
protected function aioi_loginredirectsection_text() {
$options = $this->get_option_aioi();
echo "
".esc_html__('Effective when users login via /wp-login.php directly. Otherwise, they will be taken to the page they were trying to access before being required to login.', 'all-in-one-intranet')."