get_color_for_event( $event );
// Convert to style attribute.
if ( $color ) {
$color = $event->is_allday() || $event->is_multiday()
? 'background-color: ' . $color . ';'
: 'color: ' . $color . ' !important;';
} else {
$color = '';
}
return $color;
}
/**
* Returns HTML of category color swatches for this event.
*
* @param Ai1ec_Event $event Event object.
*
* @return string HTML of the event's category color swatches.
*/
public function get_category_colors( Ai1ec_Event $event ) {
$post_id = $event->get( 'post_id' );
if ( ! isset( $this->_event_color_squares_map[$post_id] ) ) {
$squares = '';
$categories = $this->_taxonomy_model->get_post_categories( $post_id );
if ( false !== $categories ) {
$squares = $this->get_event_category_colors( $categories );
}
// Allow add-ons to modify/add to category color swatch HTML.
$squares = apply_filters(
'ai1ec_event_color_squares',
$squares,
$event
);
$this->_event_color_squares_map[$post_id] = $squares;
}
return $this->_event_color_squares_map[$post_id];
}
/**
* Returns the HTML markup for the category color square.
*
* @param int $term_id The term ID of event category
*
* @return string
*/
public function get_category_color_square( $term_id ) {
$color = $this->_taxonomy_model->get_category_color( $term_id );
$event_taxonomy = $this->_registry->get( 'model.event.taxonomy' );
if ( null !== $color ) {
$taxonomy = $event_taxonomy->get_taxonomy_for_term_id( $term_id );
$cat = get_term( $term_id, $taxonomy->taxonomy );
return '';
}
return '';
}
/**
* Returns the HTML markup for the category image square.
*
* @param int $term_id The term ID of event category.
*
* @return string HTML snippet to use for category image.
*/
public function get_category_image_square( $term_id ) {
$image = $this->_taxonomy_model->get_category_image( $term_id );
if ( null !== $image ) {
return '';
}
return '';
}
/**
* Returns category color squares for the list of Event Category objects.
*
* @param array $cats The Event Category objects as returned by get_terms()
*
* @return string
*/
public function get_event_category_colors( array $cats ) {
$sqrs = '';
foreach ( $cats as $cat ) {
$tmp = $this->get_category_color_square( $cat->term_id );
if ( ! empty( $tmp ) ) {
$sqrs .= $tmp;
}
}
return $sqrs;
}
/**
* Style attribute for event background color.
*
* @param Ai1ec_Event $event Event object.
*
* @return string Color to assign to event background.
*/
public function get_category_bg_color( Ai1ec_Event $event ) {
$color = $this->get_color_for_event( $event );
// Convert to HTML attribute.
if ( $color ) {
$color = 'style="background-color: ' . $color . ';"';
} else {
$color = '';
}
return $color;
}
/**
* Style attribute for event multi-date divider color.
*
* @param Ai1ec_Event $event Event object.
*
* @return string Color to assign to event background.
*/
public function get_category_divider_color( Ai1ec_Event $event ) {
$color = $this->get_color_for_event( $event );
// Convert to HTML attribute.
if ( $color ) {
$color = 'style="border-color: ' . $color . ' transparent transparent transparent;"';
} else {
$color = '';
}
return $color;
}
/**
* Style attribute for event text color.
*
* @param Ai1ec_Event $event Event object.
*
* @return string Color to assign to event text (foreground).
*/
public function get_category_text_color( Ai1ec_Event $event ) {
$color = $this->get_color_for_event( $event );
// Convert to HTML attribute.
if ( $color ) {
$color = 'style="color: ' . $color . ';"';
} else {
$color = '';
}
return $color;
}
/**
* Caches color for event having the given post ID.
*
* @param int $post_id Event's post ID.
*
* @return string Color associated with event.
*/
public function get_color_for_event( $event ) {
$post_id = $event->get( 'post_id' );
// If color for this event is uncached, populate cache.
if ( ! isset( $this->_event_color_map[$post_id] ) ) {
// Find out if an add-on has provided its own color for the event.
$color = apply_filters( 'ai1ec_event_color', '', $event );
// If none provided, fall back to event categories.
if ( empty( $color ) ) {
$categories = $this->_taxonomy_model->get_post_categories( $post_id );
// Find the first category of this post that defines a color.
foreach ( $categories as $category ) {
$color = $this->_taxonomy_model->get_category_color(
$category->term_id
);
if ( $color ) {
break;
}
}
}
$this->_event_color_map[$post_id] = $color;
}
return $this->_event_color_map[$post_id];
}
/**
* Categories as HTML, either as blocks or inline.
*
* @param Ai1ec_Event $event Rendered Event.
* @param string $format Return 'blocks' or 'inline' formatted result.
*
* @return string String of HTML for category blocks.
*/
public function get_categories_html(
Ai1ec_Event $event,
$format = 'blocks'
) {
$categories = $this->_taxonomy_model->get_post_categories(
$event->get( 'post_id' )
);
foreach ( $categories as &$category ) {
$href = $this->_registry->get(
'html.element.href',
array( 'cat_ids' => $category->term_id )
);
$class = $data_type = $title = '';
if ( $category->description ) {
$title = 'title="' .
esc_attr( $category->description ) . '" ';
}
$html = '';
$class .= ' ai1ec-category';
$color_style = '';
if ( $format === 'inline' ) {
$taxonomy = $this->_registry->get( 'model.taxonomy' );
$color_style = $taxonomy->get_category_color(
$category->term_id
);
if ( $color_style !== '' ) {
$color_style = 'style="color: ' . $color_style . ';" ';
}
$class .= '-inline';
}
$html .= 'generate_href() . '">';
if ( $format === 'blocks' ) {
$html .= $this->get_category_color_square(
$category->term_id
) . ' ';
} else {
$html .=
'';
}
$html .= esc_html( $category->name ) . '';
$category = $html;
}
return implode( ' ', $categories );
}
/**
* Tags as HTML
*/
public function get_tags_html( Ai1ec_Event $event ) {
$tags = $this->_taxonomy_model->get_post_tags(
$event->get( 'post_id' )
);
if ( ! $tags ) {
$tags = array();
}
foreach ( $tags as &$tag ) {
$href = $this->_registry->get(
'html.element.href',
array( 'tag_ids' => $tag->term_id )
);
$class = '';
$data_type = '';
$title = '';
if ( $tag->description ) {
$title = 'title="' . esc_attr( $tag->description ) . '" ';
}
$tag = 'generate_href() . '">' .
'' .
esc_html( $tag->name ) . '';
}
return implode( ' ', $tags );
}
/**
* Filter Groups as HTML, either as blocks or inline.
*
* @param Ai1ec_Event $event Rendered Event.
* @param array $filter_group Filter Group (Option Model)
* @param string $format Return 'blocks' or 'inline' formatted result.
*
* @return string String of HTML for filter group blocks.
*/
public function get_filter_group_html(
Ai1ec_Event $event,
$filter_group,
$format = 'blocks'
) {
$filter_groups = $this->_taxonomy_model->get_post_taxonomy(
$event->get( 'post_id' ), $filter_group['taxonomy_name']
);
$icon_name = '';
if ( 'ai1eccfgi-null' !== $filter_group['icon'] ) {
$icon_name = $filter_group['icon'];
} else {
$icon_name = 'ai1ec-icon-timely';
}
foreach ( $filter_groups as &$group ) {
$href = $this->_registry->get(
'html.element.href',
array( $filter_group['taxonomy_name'] . '_ids' => $group->term_id )
);
$class = $data_type = $title = '';
if ( $group->description ) {
$title = 'title="' .
esc_attr( $group->description ) . '" ';
}
$html = '';
$class .= ' ai1ec-category';
$color_style = '';
if ( 'inline' === $format ) {
$taxonomy = $this->_registry->get( 'model.taxonomy' );
$color_style = $taxonomy->get_category_color(
$group->term_id
);
if ( $color_style !== '' ) {
$color_style = 'style="color: ' . $color_style . ';" ';
}
$class .= '-inline';
}
$html .= 'generate_href() . '">';
if ( 'blocks' === $format ) {
$html .= $this->get_category_color_square($group->term_id) . ' ';
} else {
$html = $html
. '';
}
$html .= esc_html( $group->name ) . '';
$group = $html;
}
return implode( ' ', $filter_groups );
}
public function __construct( Ai1ec_Registry_Object $registry ) {
parent::__construct( $registry );
$this->_taxonomy_model = $this->_registry->get( 'model.taxonomy' );
}
}