190 lines
5.7 KiB
PHP
190 lines
5.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This class process event content.
|
|
*
|
|
* @author Time.ly Network Inc.
|
|
* @since 2.0
|
|
*
|
|
* @package AI1EC
|
|
* @subpackage AI1EC.View.Event
|
|
*/
|
|
class Ai1ec_View_Event_Content extends Ai1ec_Base {
|
|
|
|
/**
|
|
* Render event excerpt header.
|
|
*
|
|
* @param Ai1ec_Event $event Event to render excerpt for.
|
|
*
|
|
* @return void Content is not returned, just rendered.
|
|
*/
|
|
public function excerpt_view( Ai1ec_Event $event ) {
|
|
$location = $this->_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 = <<<HTML
|
|
<a class="ai1ec-calendar-link ai1ec-btn ai1ec-btn-default ai1ec-btn-sm
|
|
ai1ec-tooltip-trigger $class"
|
|
href="$href"
|
|
$data_type
|
|
data-placement="left"
|
|
title="$tooltip">
|
|
<i class="ai1ec-fa ai1ec-fa-calendar ai1ec-fa-fw"></i>
|
|
<span class="ai1ec-hidden-xs">$text</span>
|
|
</a>
|
|
HTML;
|
|
return apply_filters( 'ai1ec_get_back_to_calendar_html', $html, $href );
|
|
}
|
|
|
|
/**
|
|
* Simple regex-parse of post_content for matches of <img src="foo" />; 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(
|
|
'/<img([^>]+)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(
|
|
'<img' . $matches[1],
|
|
'<img' . $matches[1] . ' data-ai1ec-hidden ',
|
|
$event->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;
|
|
}
|
|
|
|
}
|