public static function is_current_time_active($start, $end, $include_details = false) { $current_time = ITSEC_Core::get_current_time(); $now = $current_time - strtotime(date('Y-m-d', $current_time)); $active = false; if ($start <= $end) { if ($start <= $now && $now <= $end) { $active = true; } } else { if ($start <= $now || $now <= $end) { $active = true; } } if (!$include_details) { return $active; } $remaining = $end - $now; $next = $start - $now; $length = $end - $start; if ($active && $remaining < 0) { $remaining += DAY_IN_SECONDS; } else { if (!$active && $remaining >= 0) { $remaining -= DAY_IN_SECONDS; } } if ($next < 0) { $next += DAY_IN_SECONDS; } if ($length < 0) { $length += DAY_IN_SECONDS; } return compact('active', 'remaining', 'next', 'length'); }
protected function validate_settings() { $current_time = ITSEC_Core::get_current_time(); if (defined('ITSEC_DOING_FILE_CHECK') && true === ITSEC_DOING_FILE_CHECK) { $this->settings['last_run'] = $current_time; } else { if ($this->settings['split']) { $interval = 12282; } else { $interval = 86340; } if ($this->settings['last_run'] <= $current_time - $interval) { $this->settings['last_run'] = $current_time - $interval + 120; } } }
/** * Check if away mode is active * * @since 4.4 * @static * * @param bool $get_details Optional, defaults to false. True to receive details rather than a boolean response. * * @return mixed If $get_details is true, an array of status details. Otherwise, true if away and false otherwise. */ public static function is_active($get_details = false) { require_once dirname(__FILE__) . '/utilities.php'; $settings = ITSEC_Modules::get_settings('away-mode'); if ('daily' === $settings['type']) { $details = ITSEC_Away_Mode_Utilities::is_current_time_active($settings['start_time'], $settings['end_time'], true); } else { $details = ITSEC_Away_Mode_Utilities::is_current_timestamp_active($settings['start'], $settings['end'], true); } $details['has_active_file'] = ITSEC_Away_Mode_Utilities::has_active_file(); $details['override_type'] = $settings['override_type']; $details['override_end'] = $settings['override_end']; if (empty($settings['override_type']) || ITSEC_Core::get_current_time() > $settings['override_end']) { $details['override_active'] = false; } else { $details['override_active'] = true; if ('activate' === $details['override_type']) { $details['active'] = true; } else { $details['active'] = false; } } if (!$details['has_active_file']) { $details['active'] = false; $details['remaining'] = false; $details['next'] = false; $details['length'] = false; } if (!isset($details['error'])) { $details['error'] = false; } if ($get_details) { return $details; } return $details['active']; }
public function run($arguments) { $arguments = Ithemes_Sync_Functions::merge_defaults($arguments, $this->default_arguments); $details = ITSEC_Away_Mode::is_active(true); $settings = ITSEC_Modules::get_settings('away-mode'); $defaults = ITSEC_Modules::get_defaults('away-mode'); $errors = array(); if ('activate' === $arguments['intention']) { if ($details['active']) { $action = 'stayed-active'; $success = true; } else { if ($details['override_active'] && 'deactivate' === $details['override_type']) { $action = 'removed-deactivate-override'; $settings['override_type'] = $defaults['override_type']; $settings['override_end'] = $defaults['override_end']; } else { if (false === $details['next']) { $action = 'denied-activate'; $errors[] = new WP_Error('itsec-sync-verb-itsec-override-away-mode-cannot-override-activate-expired-one-time', __('iThemes Security received a request to modify the override behavior of the Away Mode module. However, the request is invalid as the module is configured for a one-time lockout that occurred in the past. Allowing an activate override would result in an unending Away Mode lockout.', 'better-wp-security')); $success = false; } else { $action = 'added-activate-override'; $settings['override_type'] = 'activate'; $settings['override_end'] = ITSEC_Core::get_current_time() + $details['next']; } } } } else { if ('deactivate' === $arguments['intention']) { if (!$details['active']) { $action = 'stayed-inactive'; $success = true; } else { if ($details['override_active'] && 'activate' === $details['override_type']) { $action = 'removed-activate-override'; $settings['override_type'] = $defaults['override_type']; $settings['override_end'] = $defaults['override_end']; } else { $action = 'added-deactivate-override'; $settings['override_type'] = 'deactivate'; $settings['override_end'] = ITSEC_Core::get_current_time() + $details['remaining']; } } } else { if (empty($arguments['intention'])) { $action = 'missing-intention'; $errors[] = new WP_Error('itsec-sync-verb-itsec-override-away-mode-missing-intention', __('iThemes Security received a request to modify the override behavior of the Away Mode module. However, the request is invalid as the required "intention" argument is missing.', 'better-wp-security')); $success = false; } else { $action = 'unknown-intention'; $errors[] = new WP_Error('itsec-sync-verb-itsec-override-away-mode-unknown-intention', sprintf(__('iThemes Security received a request to modify the override behavior of the Away Mode module. However, the request is invalid as the required "intention" argument is set to an unrecognized value: "".', 'better-wp-security'), $arguments['intention'])); $success = false; } } } if (!isset($success)) { ITSEC_Core::set_interactive(false); $results = ITSEC_Modules::set_settings('away-mode', $settings); if ($results['saved']) { $success = true; } else { $errors = $results['errors']; $success = false; } } if ($success) { $status = "{$arguments['intention']}d"; } else { $status = 'error'; } $response = array('api' => '1', 'status' => $status, 'action' => $action, 'errors' => $errors, 'details' => ITSEC_Away_Mode::is_active(true)); return $response; }