_registry->get( 'view.event.location' ); $location = esc_html( str_replace( "\n", ', ', rtrim( $location->get_location( $event ) ) ) ); $args = array( 'event' => $event, 'location' => $location, 'text_when' => __( 'When:', AI1EC_PLUGIN_NAME ), 'text_where' => __( 'Where:', AI1EC_PLUGIN_NAME ), ); $loader = $this->_registry->get( 'theme.loader' ); echo $loader->get_file( 'event-excerpt.twig', $args, true )->get_content(); } /** * Format events excerpt view. * * @param string $text Content to excerpt. * * @return string Formatted event excerpt. */ public function event_excerpt( $text ) { if ( ! $this->_registry->get( 'acl.aco' )->is_our_post_type() ) { return $text; } $event = $this->_registry->get( 'model.event', get_the_ID() ); $post = $this->_registry->get( 'view.event.post' ); $ob = $this->_registry->get( 'compatibility.ob' ); $ob->start(); $this->excerpt_view( $event ); // Re-apply any filters to the post content that normally would have // been applied if it weren't for our interference (below). echo shortcode_unautop( wpautop( $post->trim_excerpt( $event ) ) ); return $ob->get_clean(); } /** * Avoid re-adding `wpautop` for Ai1EC instances. * * @param string $content Processed content. * * @return string Paragraphs enclosed text. */ public function event_excerpt_noautop( $content ) { if ( ! $this->_registry->get( 'acl.aco' )->is_our_post_type() ) { return wpautop( $content ); } return $content; } public function get_post_excerpt( Ai1ec_Event $event ) { $content = strip_tags( strip_shortcodes( preg_replace( '#<\s*script[^>]*>.+<\s*/\s*script\s*>#x', '', apply_filters( 'ai1ec_the_content', apply_filters( 'the_content', $event->get( 'post' )->post_content ) ) ) ) ); $content = preg_replace( '/\s+/', ' ', $content ); $words = explode( ' ', $content ); if ( count( $words ) > 25 ) { return implode( ' ', array_slice( $words, 0, 25 ) ) . ' [...]'; } return $content; } /** * Generate the html for the "Calendar" button for this event. * * @return string */ public function get_back_to_calendar_button_html() { $class = ''; $data_type = ''; $href = ''; if ( isset( $_COOKIE['ai1ec_calendar_url'] ) ) { $href = json_decode( stripslashes( $_COOKIE['ai1ec_calendar_url'] ) ); setcookie( 'ai1ec_calendar_url', '', time() - 3600 ); } else { $href = $this->_registry->get( 'html.element.href', array() ); $href = $href->generate_href(); } $text = esc_attr( Ai1ec_I18n::__( 'Calendar' ) ); $tooltip = esc_attr( Ai1ec_I18n::__( 'View all events' ) ); $html = << $text HTML; return apply_filters( 'ai1ec_get_back_to_calendar_html', $html, $href ); } /** * Simple regex-parse of post_content for matches of ; if * one is found, return its URL. * * @param null $size (width, height) array of returned image * * @return string|null */ public function get_content_img_url( Ai1ec_Event $event, &$size = null ) { preg_match( '/]+)src=["\']?([^"\'\ >]+)([^>]*)>/i', $event->get( 'post' )->post_content, $matches ); // Check if we have a result, otherwise a notice is issued. if ( empty( $matches ) ) { return null; } // Mark found image. $event->get( 'post' )->post_content = str_replace( 'get( 'post' )->post_content ); $url = $matches[2]; $size = array( 0, 0 ); // Try to detect width and height. $attrs = $matches[1] . $matches[3]; $matches = null; preg_match_all( '/(width|height)=["\']?(\d+)/i', $attrs, $matches, PREG_SET_ORDER ); // Check if we have a result, otherwise a notice is issued. if ( ! empty( $matches ) ) { foreach ( $matches as $match ) { $size[ $match[1] === 'width' ? 0 : 1 ] = $match[2]; } } return $url; } }