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; } }