all-in-one-event-calendar/lib/command/export-events.php
2019-07-25 14:11:00 +02:00

171 lines
4.9 KiB
PHP

<?php
/**
* The concrete command that export events.
*
* @author Time.ly Network Inc.
* @since 2.0
*
* @package AI1EC
* @subpackage AI1EC.Command
*/
class Ai1ec_Command_Export_Events extends Ai1ec_Command {
/**
* @var string The name of the old exporter controller.
*/
const EXPORT_CONTROLLER = 'ai1ec_exporter_controller';
/**
* @var string The name of the old export method.
*/
const EXPORT_METHOD = 'export_events';
/**
* @var array Request parameters
*/
protected $_params;
/* (non-PHPdoc)
* @see Ai1ec_Command::is_this_to_execute()
*/
public function is_this_to_execute() {
$params = $this->get_parameters();
if ( false === $params ) {
return false;
}
if ( $params['action'] === self::EXPORT_METHOD &&
$params['controller'] === self::EXPORT_CONTROLLER ) {
$params['tag_ids'] = Ai1ec_Request_Parser::get_param(
'ai1ec_tag_ids',
false
);
$params['cat_ids'] = Ai1ec_Request_Parser::get_param(
'ai1ec_cat_ids',
false
);
$params['post_ids'] = Ai1ec_Request_Parser::get_param(
'ai1ec_post_ids',
false
);
$params['lang'] = Ai1ec_Request_Parser::get_param(
'lang',
false
);
$params['no_html'] = (bool)Ai1ec_Request_Parser::get_param(
'no_html',
false
);
$params['xml'] = (bool)Ai1ec_Request_Parser::get_param(
'xml',
false
);
$params['window'] = (bool)Ai1ec_Request_Parser::get_param(
'window',
false
);
$this->_params = $params;
return true;
}
return false;
}
/* (non-PHPdoc)
* @see Ai1ec_Command::set_render_strategy()
*/
public function set_render_strategy( Ai1ec_Request_Parser $request ) {
if ( isset( $_GET['xml']) ) {
$this->_render_strategy = $this->_registry->get(
'http.response.render.strategy.xcal'
);
} else {
$this->_render_strategy = $this->_registry->get(
'http.response.render.strategy.ical'
);
}
}
/* (non-PHPdoc)
* @see Ai1ec_Command::do_execute()
*/
public function do_execute() {
$ai1ec_cat_ids = $this->_params['cat_ids'];
$ai1ec_tag_ids = $this->_params['tag_ids'];
$ai1ec_post_ids = $this->_params['post_ids'];
$window = $this->_params['window'];
if ( ! empty( $this->_params['lang'] ) ) {
$loc_helper = $this->_registry->get( 'p28n.wpml' );
$loc_helper->set_language( $this->_params['lang'] );
}
$args = array( 'do_not_export_as_calendar' => false );
$filter = array();
if ( $ai1ec_cat_ids ) {
$filter['cat_ids'] = Ai1ec_Primitive_Int::convert_to_int_list(
',',
$ai1ec_cat_ids
);
}
if ( $ai1ec_tag_ids ) {
$filter['tag_ids'] = Ai1ec_Primitive_Int::convert_to_int_list(
',',
$ai1ec_tag_ids
);
}
if ( $ai1ec_post_ids ) {
$args['do_not_export_as_calendar'] = true;
$filter['post_ids'] = Ai1ec_Primitive_Int::convert_to_int_list(
',',
$ai1ec_post_ids
);
}
$filter = apply_filters( 'ai1ec_export_filter', $filter );
$my_start = '-3 years';
$my_end = '+3 years';
if ( $window ) {
$my_start = '-15 days';
$my_end = '+30 days';
}
$start = $this->_registry->get( 'date.time', $my_start );
$end = $this->_registry->get( 'date.time', $my_end );
$search = $this->_registry->get( 'model.search' );
$params = array(
'no_html' => $this->_params['no_html'],
'xml' => $this->_params['xml'],
);
$export_controller = $this->_registry->get(
'controller.import-export',
array( 'ics' ),
$params
);
$args['events'] = $this->unique_events(
$search->get_events_between( $start, $end, $filter )
);
$ics = $export_controller->export_events( 'ics', $args );
return array( 'data' => $ics );
}
/**
* Return unique events list.
*
* @param array $events List of Ai1ec_Event objects.
*
* @return array Unique Ai1ec_Events from input.
*/
public function unique_events( array $events ) {
$ids = array();
$output = array();
foreach ( $events as $event ) {
$id = (int)$event->get( 'post_id' );
if ( ! isset( $ids[$id] ) ) {
$output[] = $event;
$ids[$id] = true;
}
}
return $output;
}
}