2017-03-16 16:59:53 +01:00
< ? 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 {
2017-11-09 17:36:04 +01:00
/**
* @ var null | bool Calculated response .
*/
protected $_use_backward_compatibility = null ;
2017-03-16 16:59:53 +01:00
2017-11-09 17:36:04 +01:00
/**
* 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 ;
}
2017-03-16 16:59:53 +01:00
2017-11-09 17:36:04 +01:00
/**
* 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 ) {
2017-03-16 16:59:53 +01:00
2017-11-09 17:36:04 +01:00
// 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' );
2017-03-16 16:59:53 +01:00
2017-11-09 17:36:04 +01:00
// Change "Default calendar start date" format
$new_exact_date = $date_system -> convert_date_format (
$exact_date ,
$old_date_format_value ,
$new_date_format_value
);
2017-03-16 16:59:53 +01:00
2017-11-09 17:36:04 +01:00
// Save new value
$settings = $this -> _registry -> get ( 'model.settings' );
$settings -> set ( 'exact_date' , $new_exact_date );
}
}
2017-03-16 16:59:53 +01:00
2017-11-09 17:36:04 +01:00
// 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
);
}
}
2017-03-16 16:59:53 +01:00
2017-11-09 17:36:04 +01:00
/**
* 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'
)
)
);
}
2017-03-16 16:59:53 +01:00
}