all-in-one-event-calendar/lib/command/render-calendar.php
2017-11-09 17:36:04 +01:00

83 lines
No EOL
2.5 KiB
PHP

<?php
/**
* The concrete command that renders the calendar.
*
* @author Time.ly Network Inc.
* @since 2.0
*
* @package AI1EC
* @subpackage AI1EC.Command
*/
class Ai1ec_Command_Render_Calendar extends Ai1ec_Command {
/**
* @var string
*/
protected $_request_type;
/* (non-PHPdoc)
* @see Ai1ec_Command::is_this_to_execute()
*/
public function is_this_to_execute() {
$settings = $this->_registry->get( 'model.settings' );
$calendar_page_id = $settings->get( 'calendar_page_id' );
if ( empty( $calendar_page_id ) ) {
return false;
}
$localization = $this->_registry->get( 'p28n.wpml' );
$aco = $this->_registry->get( 'acl.aco' );
$page_ids_to_match = array( $calendar_page_id ) +
$localization->get_translations_of_page(
$calendar_page_id
);
foreach ( $page_ids_to_match as $page_id ) {
if ( is_page( $page_id ) ) {
$this->_request->set_current_page( $page_id );
if ( ! post_password_required( $page_id ) ) {
return true;
}
}
}
return false;
}
/* (non-PHPdoc)
* @see Ai1ec_Command::set_render_strategy()
*/
public function set_render_strategy( Ai1ec_Request_Parser $request ) {
try {
$this->_request_type = $request->get( 'request_type' );
$this->_render_strategy = $this->_registry->get(
'http.response.render.strategy.' . $this->_request_type
);
} catch ( Ai1ec_Bootstrap_Exception $e ) {
$this->_request_type = 'html';
$this->_render_strategy = $this->_registry->get(
'http.response.render.strategy.' . $this->_request_type
);
}
}
/* (non-PHPdoc)
* @see Ai1ec_Command::do_execute()
*/
public function do_execute() {
// get the calendar html
$calendar = $this->_registry->get( 'view.calendar.page' );
$css = $this->_registry->get( 'css.frontend' )
->add_link_to_html_for_frontend();
$js = $this->_registry->get( 'controller.javascript' )
->load_frontend_js( true );
return array(
'data' => $calendar->get_content( $this->_request ),
'callback' => Ai1ec_Request_Parser::get_param(
'callback',
null
),
'caller' => 'calendar',
);
}
}