133 lines
4.4 KiB
PHP
133 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* Theme backward compatibility check.
|
|
*
|
|
* @author Time.ly Network Inc.
|
|
* @since 2.2
|
|
*
|
|
* @package AI1EC
|
|
* @subpackage AI1EC.Lib.Compatibility
|
|
*/
|
|
class Ai1ec_Compatibility_Check extends Ai1ec_Base {
|
|
|
|
/**
|
|
* @var null|bool Calculated response.
|
|
*/
|
|
protected $_use_backward_compatibility = null;
|
|
|
|
/**
|
|
* Returns whether calendar is using backward compatibility or not.
|
|
*
|
|
* @return bool|null Result
|
|
*
|
|
* @throws Ai1ec_Bootstrap_Exception
|
|
*/
|
|
public function use_backward_compatibility() {
|
|
if ( null === $this->_use_backward_compatibility ) {
|
|
$this->_use_backward_compatibility = (
|
|
AI1EC_THEME_COMPATIBILITY_FER &&
|
|
! $this->_registry->get(
|
|
'model.settings'
|
|
)->get( 'ai1ec_use_frontend_rendering', false )
|
|
);
|
|
}
|
|
return $this->_use_backward_compatibility;
|
|
}
|
|
|
|
/**
|
|
* Observes settings changes.
|
|
*
|
|
* If setting ai1ec_use_frontend_rendering is changed and set to true
|
|
* perfoms theme check.
|
|
*
|
|
* Checks if Date format was changed, and update dates to the new format
|
|
*
|
|
* @param array $old_options Old options array.
|
|
* @param array $new_options New options array.
|
|
*
|
|
* @return void Method does not return.
|
|
*
|
|
* @throws Ai1ec_Bootstrap_Exception
|
|
*/
|
|
public function ai1ec_settings_observer( $old_options, $new_options ) {
|
|
|
|
// Date format change checker
|
|
$old_date_format_value = isset( $old_options['input_date_format'] )
|
|
? $old_options['input_date_format']['value']
|
|
: null;
|
|
$new_date_format_value = isset( $new_options['input_date_format'] )
|
|
? $new_options['input_date_format']['value']
|
|
: null;
|
|
if (
|
|
null !== $old_date_format_value&&
|
|
null !== $new_date_format_value &&
|
|
$old_date_format_value !== $new_date_format_value
|
|
) {
|
|
// Get "Default calendar start date"
|
|
$exact_date = isset( $old_options['exact_date'] )
|
|
? $old_options['exact_date']['value']
|
|
: '';
|
|
if ( '' !== $exact_date ) {
|
|
$date_system = $this->_registry->get( 'date.system' );
|
|
|
|
// Change "Default calendar start date" format
|
|
$new_exact_date = $date_system->convert_date_format(
|
|
$exact_date,
|
|
$old_date_format_value,
|
|
$new_date_format_value
|
|
);
|
|
|
|
// Save new value
|
|
$settings = $this->_registry->get( 'model.settings' );
|
|
$settings->set( 'exact_date', $new_exact_date );
|
|
}
|
|
}
|
|
|
|
// Frontend rendering checker
|
|
$old_value = isset( $old_options['ai1ec_use_frontend_rendering'] )
|
|
? (bool)$old_options['ai1ec_use_frontend_rendering']['value']
|
|
: null;
|
|
$new_value = isset( $new_options['ai1ec_use_frontend_rendering'] )
|
|
? (bool)$new_options['ai1ec_use_frontend_rendering']['value']
|
|
: null;
|
|
if (
|
|
$old_value === $new_value ||
|
|
! $new_value
|
|
) {
|
|
return;
|
|
}
|
|
if ( $this->is_current_theme_outside_core() ) {
|
|
$this->_registry->get( 'notification.admin' )->store(
|
|
Ai1ec_I18n::__( 'You have turned on Frontend Rendering and you are using a custom calendar theme. If your theme does not support Frontend Rendering, your calendar may not work correctly.' ),
|
|
'error',
|
|
0,
|
|
array( Ai1ec_Notification_Admin::RCPT_ADMIN ),
|
|
true
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns whether current calendar theme is located under core directory
|
|
* or not.
|
|
*
|
|
* @return bool Result
|
|
*
|
|
* @throws Ai1ec_Bootstrap_Exception
|
|
*/
|
|
public function is_current_theme_outside_core() {
|
|
$option = $this->_registry->get( 'model.option' );
|
|
$cur_theme = $option->get( 'ai1ec_current_theme', array() );
|
|
$theme_root = dirname( AI1EC_DEFAULT_THEME_ROOT );
|
|
return (
|
|
isset( $cur_theme['theme_root'] ) &&
|
|
(
|
|
$theme_root !== dirname( $cur_theme['theme_root'] ) &&
|
|
false === strpos(
|
|
$cur_theme['theme_root'],
|
|
'all-in-one-event-calendar-saas-theme'
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|