@@ -0,0 +1,159 @@
|
||||
<?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
|
||||
);
|
||||
$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'];
|
||||
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 );
|
||||
$start = $this->_registry->get( 'date.time', '-3 years' );
|
||||
$end = $this->_registry->get( 'date.time', '+3 years' );
|
||||
$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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user