/wp-content/plugins/w3-total-cache/lib/W3/DbCacheAdminEnvironment.php
https://gitlab.com/juanito.abelo/nlmobile · PHP · 158 lines · 88 code · 18 blank · 52 comment · 18 complexity · a5dd7b6f03fa13a05e7e1954fa9dcadc MD5 · raw file
- <?php
- /**
- * W3 PgCache plugin - administrative interface
- */
- if (!defined('W3TC')) {
- die();
- }
- /**
- * Class W3_DbCacheAdminEnvironment
- */
- class W3_DbCacheAdminEnvironment {
- /*
- * Fixes environment in each wp-admin request
- * @param W3_Config $config
- * @param bool $force_all_checks
- *
- * @throws SelfTestExceptions
- **/
- public function fix_on_wpadmin_request($config, $force_all_checks) {
- $exs = new SelfTestExceptions();
- try {
- if ($config->get_boolean('dbcache.enabled'))
- $this->create_addin();
- else
- $this->delete_addin();
- } catch (FilesystemOperationException $ex) {
- $exs->push($ex);
- }
- if (count($exs->exceptions()) > 0)
- throw $exs;
- }
- /**
- * Fixes environment once event occurs
- * @throws SelfTestExceptions
- **/
- public function fix_on_event($config, $event, $old_config = null) {
- if ($config->get_boolean('dbcache.enabled') &&
- $config->get_string('dbcache.engine') == 'file') {
- if (!wp_next_scheduled('w3_dbcache_cleanup')) {
- wp_schedule_event(time(),
- 'w3_dbcache_cleanup', 'w3_dbcache_cleanup');
- }
- } else {
- $this->unschedule();
- }
- }
- /**
- * Fixes environment after plugin deactivation
- * @throws SelfTestExceptions
- * @return array
- */
- public function fix_after_deactivation() {
- $exs = new SelfTestExceptions();
- try {
- $this->delete_addin();
- } catch (FilesystemOperationException $ex) {
- $exs->push($ex);
- }
-
- $this->unschedule();
- if (count($exs->exceptions()) > 0)
- throw $exs;
- }
- /**
- * Returns required rules for module
- * @var W3_Config $config
- * @return array
- */
- function get_required_rules($config) {
- return null;
- }
- /**
- * scheduling stuff
- **/
- private function unschedule() {
- if (wp_next_scheduled('w3_dbcache_cleanup')) {
- wp_clear_scheduled_hook('w3_dbcache_cleanup');
- }
- }
- /**
- * Creates add-in
- * @throws FilesystemOperationException
- */
- private function create_addin() {
- $src = W3TC_INSTALL_FILE_DB;
- $dst = W3TC_ADDIN_FILE_DB;
- if ($this->db_installed()) {
- if ($this->is_dbcache_add_in()) {
- $script_data = @file_get_contents($dst);
- if ($script_data == @file_get_contents($src))
- return;
- } elseif (!$this->db_check_old_add_in()) {
- w3_require_once(W3TC_INC_FUNCTIONS_DIR . '/other.php');
- w3_require_once(W3TC_INC_FUNCTIONS_DIR . '/ui.php');
- if (isset($_GET['page']))
- $url = 'admin.php?page=' . $_GET['page'] . '&';
- else
- $url = basename(w3_remove_query($_SERVER['REQUEST_URI'])) . '?page=w3tc_dashboard&';
- $remove_url = w3_admin_url($url . 'w3tc_default_remove_add_in=dbcache');
- throw new FilesystemOperationException(
- sprintf(__('The Database add-in file db.php is not a W3 Total Cache drop-in.
- Remove it or disable Database Caching. %s', 'w3-total-cache'),
- w3tc_button_link(__('Remove it for me', 'w3-total-cache'), wp_nonce_url($remove_url,'w3tc'))));
- }
- }
- w3_wp_copy_file($src, $dst);
- }
- /**
- * Deletes add-in
- * @throws FilesystemOperationException
- */
- private function delete_addin() {
- if ($this->is_dbcache_add_in())
- w3_wp_delete_file(W3TC_ADDIN_FILE_DB);
- }
- /**
- * Returns true if db.php is installed
- *
- * @return boolean
- */
- public function db_installed() {
- return file_exists(W3TC_ADDIN_FILE_DB);
- }
- /**
- * Returns true if db.php is old version.
- * @return boolean
- */
- public function db_check_old_add_in() {
- return (($script_data = @file_get_contents(W3TC_ADDIN_FILE_DB))
- && strstr($script_data, '& w3_instance') !== false);
- }
- /**
- * Checks if db.php is W3TC drop in
- *
- * @return boolean
- */
- public function is_dbcache_add_in() {
- return (($script_data = @file_get_contents(W3TC_ADDIN_FILE_DB))
- && strstr($script_data, 'W3 Total Cache Database module') !== false);
- }
- }