';
/**
* @var string
*/
private $after_title_html = '';
/**
* @var bool
*/
private $add_title_font_size = true;
/**
* Returns an empty jquery tmpl data object
* @return array
*/
private function getEmptyObjectArray() {
return array(
'container' => array(
'id' => '',
'class' => 'teaser'
),
'article' => array(
'title' => '',
'url' => '',
'html_title' => '',
'html_text' => false
),
'sub_articles' => false,
'streamer' => array(),
'related' => false,
'before_related' => false,
'article_end' => false,
'image' => false
);
}
/**
* @param array $article
* @return string
*/
private function getTitleHtml( $article ) {
if( $article[ 'title' ] == '' )
return '';
$title = str_replace( '__', '
', $article[ 'title' ]);
if( !empty($article[ 'options' ][ 'pre_title' ]) )
$title = '' . $article[ 'options' ][ 'pre_title' ] . ' ' . $title;
$title_html = '';
$header_classes = array();
if( $this->add_title_font_size )
$header_classes[] = ' fsize-'. $article[ 'title_fontsize' ];
if( !empty($article['options']['header_class']) )
$header_classes[] = $article['options']['header_class'];
$start_tag = $this->before_title_html;
if( !empty($header_classes) ) {
if( stristr( $start_tag, 'class' ) !== false )
$start_tag = str_replace( 'class="', 'class="arlima-title ' . implode(' ', $header_classes) . ' ' , $start_tag);
else
$start_tag = str_replace( '>', ' class="arlima-title ' . implode(' ', $header_classes) . '">' , $start_tag);
}
if( ! empty( $article[ 'url' ] ) )
$title_html .= '' . $title . '';
else
$title_html .= '' . $title .'';
return $start_tag . $title_html . $this->after_title_html;
}
/**
* @param $article
* @param $display_streamer
* @param $is_empty
* @param $is_post
* @param $post
* @param $article_counter
* @param null $img_size
* @param bool $load_related_articles
* @return array
*/
public function create($article, $display_streamer, $is_empty, $is_post, $post, $article_counter, $img_size=null, $load_related_articles = true) {
$data = $this->getEmptyObjectArray();
$has_streamer = $display_streamer && isset( $article[ 'options' ][ 'streamer' ] );
$img_opt_size = isset($article['image_options']) && !empty($article['image_options']['size']) ? $article['image_options']['size'] : false;
$url = isset($article['url']) ? $article['url']:'';
$post_id = !empty( $article['post_id'] ) ? $article['post_id']:'';
$data['container']['id'] = 'teaser-'.(is_numeric($post_id) ? $post_id: $url);
$data['container']['class'] = 'teaser'.($is_empty ? ' empty':'');
$data['article']['title'] = isset($article['title']) ? $article['title']:'';
$data['article']['html_title'] = $is_empty ? '':$this->getTitleHtml($article);
$data['article']['url'] = $url;
if( !$is_empty ) {
// Text content
$text_modifier = $this->text_callback;
$data['article']['html_text'] = $text_modifier($article, $is_post, $post, $article_counter);
$this->generateStreamerData($has_streamer, $data, $article);
$this->generateImageData($article, $img_size, $article_counter, $data, $img_opt_size);
// Related posts
if($load_related_articles) {
if(empty( $article[ 'options' ][ 'hiderelated' ] ) ) {
$get_related = $this->related_callback;
$data['related'] = $get_related($article, $is_post);
}
}
}
// Add article end content
if( is_callable($this->article_end_callback) ) {
$article_end = $this->article_end_callback;
$data['article_end'] = $article_end($post, $article, $article_counter);
}
return $data;
}
/**
* @param $article
* @param $img_size
* @param $article_counter
* @param $data
* @param $img_opt_size
*/
protected function generateImageData($article, $img_size, $article_counter, &$data, $img_opt_size) {
$get_img = $this->get_article_image_callback;
$img = $get_img($article, $img_size, $article_counter);
if ($img) {
$data['image'] = array(
'html' => $img,
'src' => false // src is actually only used by javascript in wp-admin
);
$data['container']['class'] .= $img_opt_size ? ' img-' . $img_opt_size : ' has-img';
}
else {
$data['container']['class'] .= ' no-img';
}
}
/**
* @param $has_streamer
* @param &$data
* @param $article
*/
protected function generateStreamerData($has_streamer, &$data, $article) {
$data['container']['class'] .= ($has_streamer ? '' : ' no-streamer');
if ($has_streamer) {
$data['streamer']['type'] = $article['options']['streamer_type'];
switch ($data['streamer']['type']) {
case 'text' :
$data['streamer']['content'] = $article['options']['streamer_content'];
break;
case 'image' :
$data['streamer']['content'] = '
';
break;
default :
$data['streamer']['content'] = 'EXTRA';
}
$data['streamer']['style'] = !empty($article['options']['streamer_color']) && $data['streamer']['type'] == 'text' ? 'background: #' . $article['options']['streamer_color'] : '';
}
}
/**
* @param boolean $add_title_font_size
*/
public function setAddTitleFontSize($add_title_font_size) {
$this->add_title_font_size = $add_title_font_size;
}
/**
* @param string $after_title_html
*/
public function setAfterTitleHtml($after_title_html) {
$this->after_title_html = $after_title_html;
}
/**
* @param Closure $article_end_callback
*/
public function setArticleEndCallback($article_end_callback) {
$this->article_end_callback = $article_end_callback;
}
/**
* @param string $before_title_html
*/
public function setBeforeTitleHtml($before_title_html) {
$this->before_title_html = $before_title_html;
}
/**
* @param Closure $get_article_image_callback
*/
public function setGetArticleImageCallback($get_article_image_callback) {
$this->get_article_image_callback = $get_article_image_callback;
}
/**
* @param Closure $related_callback
*/
public function setRelatedCallback($related_callback) {
$this->related_callback = $related_callback;
}
/**
* @param Closure $text_callback
*/
public function setTextCallback($text_callback) {
$this->text_callback = $text_callback;
}
}