// All rights reserved.
This script is part of PHPWCMS. The PHPWCMS web content management system is
free software; you can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
The GNU General Public License can be found at http://www.gnu.org/copyleft/gpl.html
A copy is found in the textfile GPL.txt and important notices to the license
from the author is found in LICENSE.txt distributed with these scripts.
This script is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.
This copyright notice MUST APPEAR in all copies of the script!
*************************************************************************************/
// ----------------------------------------------------------------
// obligate check for phpwcms constants
if (!defined('PHPWCMS_ROOT')) {
die("You Cannot Access This Script Directly, Have a Nice Day.");
}
// ----------------------------------------------------------------
// Teaser (link article) content part
$content['alink'] = @unserialize($crow["acontent_form"]);
if(!isset($content['alink']['alink_id'])) {
$content['alink']['alink_id'] = explode(':', $crow['acontent_alink']);
}
if((is_array($content['alink']['alink_id']) && count($content['alink']['alink_id'])) || (!empty($content['alink']['alink_type']) && ((is_array($content['alink']['alink_level']) && count($content['alink']['alink_level'])) || (isset($content['alink']['alink_category']) && count($content['alink']['alink_category']))))) {
if(!isset($content['UNIQUE_ALINK'])) {
$content['UNIQUE_ALINK'] = array();
}
if(!empty($content['alink']['alink_template']) && is_file(PHPWCMS_TEMPLATE.'inc_cntpart/teaser/'.$content['alink']['alink_template'])) {
$content['alink']['alink_template'] = render_device( @file_get_contents(PHPWCMS_TEMPLATE.'inc_cntpart/teaser/'.$content['alink']['alink_template']) );
} elseif(is_file(PHPWCMS_TEMPLATE.'inc_default/teaser.tmpl')) {
$content['alink']['alink_template'] = render_device( @file_get_contents(PHPWCMS_TEMPLATE.'inc_default/teaser.tmpl') );
} else {
$content['alink']['alink_template'] = '
';
$content['alink']['alink_template'] .= '- {TITLE}
';
$content['alink']['alink_template'] .= '';
$content['alink']['alink_template'] .= '';
$content['alink']['alink_template'] .= '
';
$content['alink']['alink_template'] .= '';
}
$content['alink']['tags_group_by'] = '';
$content['alink']['tags_where'] = '';
$content['alink']['date_basis'] = 'article_date';
$content['alink']['alink_categoryalias'] = empty($content['alink']['alink_categoryalias']) ? 0 : 1;
$alink_sql = "SELECT ar.*, UNIX_TIMESTAMP(ar.article_tstamp) AS article_date FROM ".DB_PREPEND."phpwcms_article ar ";
// select by category
if(!empty($content['alink']['alink_category']) && count($content['alink']['alink_category'])) {
$content['alink']['tags_sql'] = array();
// and/or/not mode
switch($content['alink']['alink_andor']) {
case 'AND': $content['alink']['alink_andor'] = ' AND ';
$content['alink']['alink_compare'] = '=';
break;
case 'NOT': $content['alink']['alink_andor'] = ' AND ';
$content['alink']['alink_compare'] = '!=';
break;
default: //OR
$content['alink']['alink_andor'] = ' OR ';
$content['alink']['alink_compare'] = '=';
}
foreach($content['alink']['alink_category'] as $value) {
$content['alink']['tags_sql'][] = 'pcat.cat_name' . $content['alink']['alink_compare'] . "'" . aporeplace($value) . "'";
}
// JOIN with tags/categories for articles
$alink_sql .= "LEFT JOIN ".DB_PREPEND."phpwcms_categories pcat ON (pcat.cat_type='article' AND pcat.cat_pid=ar.article_id) ";
$content['alink']['tags_where'] = 'AND (' . implode($content['alink']['alink_andor'], $content['alink']['tags_sql']) . ') ';
// group by article ID
$content['alink']['tags_group_by'] = ' GROUP BY ar.article_id';
}
$alink_sql .= "WHERE ar.article_public=1 AND ar.article_aktiv=1 AND ar.article_deleted=0 ";
$alink_sql .= "AND ar.article_begin < NOW() AND ar.article_end > NOW() ";
// add possible WHERE clauses when tags/categories are used
$alink_sql .= $content['alink']['tags_where'];
if(empty($content['alink']['alink_type'])) {
if(!empty($content['alink']['alink_unique']) && count($content['UNIQUE_ALINK'])) {
$content['alink']['alink_id'] = array_diff($content['alink']['alink_id'], $content['UNIQUE_ALINK']);
$alink_sql .= count($content['alink']['alink_id']) ? 'AND ar.article_id IN ('.implode(',', $content['alink']['alink_id']) . ')' : ' AND 0 ';
} else {
$alink_sql .= 'AND ar.article_id IN ('.implode(',', $content['alink']['alink_id']) . ')';
}
// group by - when used with categories/tags
$alink_sql .= $content['alink']['tags_group_by'];
} else {
if(is_array($content['alink']['alink_level']) && count($content['alink']['alink_level'])) {
$alink_sql .= 'AND ar.article_cid IN ('.implode(',', $content['alink']['alink_level']) . ')';
if(!empty($content['alink']['alink_unique']) && count($content['UNIQUE_ALINK'])) {
$alink_sql .= ' AND ar.article_id NOT IN ('.implode(',', $content['UNIQUE_ALINK']) . ')';
}
}
// group by - when used with categories/tags
$alink_sql .= $content['alink']['tags_group_by'];
// don't use SQL UNION
$sql_union = '';
// add prio sorting value
if(empty($content['alink']['alink_prio'])) {
$sql_prio = '';
$sql_union_prio = '';
} else {
$sql_prio = 'ar.article_priorize DESC, ';
$sql_union_prio = 'article_priorize DESC, ';
}
switch($content['alink']['alink_type']) {
case 1: // create date, DESC
$content['alink']['date_basis'] = 'article_created';
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_created DESC"; break;
case 2: // create date, ASC
$content['alink']['date_basis'] = 'article_created';
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_created ASC"; break;
case 3: // change date, DESC
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_tstamp DESC"; break;
case 4: // change date, ASC
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_tstamp ASC"; break;
case 5: // live date, DESC
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_begin DESC"; break;
case 6: // live date, ASC
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_begin ASC"; break;
case 7: // kill date, DESC
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_end DESC"; break;
case 8: // kill date, ASC
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_end ASC"; break;
case 18: // article title, DESC
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_title DESC"; break;
case 19: // article title, ASC
$alink_sql .= " ORDER BY ".$sql_prio."ar.article_title ASC"; break;
case 9: // random
$alink_sql .= " ORDER BY RAND()"; break;
case 10: // random, create date, DESC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_created DESC"; break;
case 11: // random, create date, ASC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_created ASC"; break;
case 12: // random, change date, DESC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_tstamp DESC"; break;
case 13: // random, change date, ASC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_tstamp ASC"; break;
case 14: // random, live date, DESC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_begin DESC"; break;
case 15: // random, live date, ASC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_begin ASC"; break;
case 16: // random, kill date, DESC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_end DESC"; break;
case 17: // random, kill date, ASC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_end ASC"; break;
case 20: // random, kill date, DESC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_title DESC"; break;
case 21: // random, kill date, ASC
$alink_sql .= " ORDER BY RAND()";
$sql_union .= " ORDER BY ".$sql_union_prio."article_title ASC"; break;
}
if(!empty($content['alink']['alink_max']) && intval($content['alink']['alink_max'])) {
$alink_sql .= " LIMIT ".intval($content['alink']['alink_max']);
}
if($sql_union != '') {
$alink_sql = '('.$alink_sql.') UNION DISTINCT ('.$alink_sql.')'.$sql_union;
if(!empty($content['alink']['alink_max']) && intval($content['alink']['alink_max'])) {
$alink_sql .= " LIMIT ".intval($content['alink']['alink_max']);
}
}
}
$content['alink']['tr'] = array();
$content['alink']['alink_template_head'] = get_tmpl_section('TEASER_HEAD', $content['alink']['alink_template']);
$content['alink']['alink_template_footer'] = get_tmpl_section('TEASER_FOOTER', $content['alink']['alink_template']);
$content['alink']['alink_template_entry'] = get_tmpl_section('TEASER_ENTRY', $content['alink']['alink_template']);
$content['alink']['alink_template_space'] = get_tmpl_section('TEASER_ENTRY_SPACER', $content['alink']['alink_template']);
$content['alink']['alink_template_row'] = get_tmpl_section('TEASER_ROW_SPACER', $content['alink']['alink_template']);
$content['alink']['alink_template_column'] = trim( get_tmpl_section('TEASER_COLUMN_OVERWRITE', $content['alink']['alink_template']) );
$content['alink']['alink_template_head'] = str_replace('{LINK_ARTICLE_CLASS}', get_class_attrib($template_default["article"]["link_article_class"]), $content['alink']['alink_template_head']);
$content['alink']['result'] = _dbQuery($alink_sql);
if(isset($content['alink']['result'][0])) {
// lets handle columns and rows
if($content['alink']['alink_template_column'] !== '') {
$content['alink']['alink_columns'] = abs(intval($content['alink']['alink_template_column']));
} elseif(empty($content['alink']['alink_columns'])) {
$content['alink']['alink_columns'] = 0;
} else {
$content['alink']['alink_columns'] = $content['alink']['alink_columns'];
}
$content['alink']['column'] = 1;
$content['alink']['row'] = 1;
$content['alink']['row_space'] = false;
// before finding a faster solution...
if(!empty($content['alink']['alink_type'])) {
$content['alink']['alink_id'] = array();
foreach($content['alink']['result'] as $value) {
$content['alink']['alink_id'][] = $value['article_id'];
}
}
// Max teaser items
$content['alink']['max_items'] = count($content['alink']['alink_id']);
foreach($content['alink']['alink_id'] as $key => $value) {
$content['UNIQUE_ALINK'][$value] = $value; //save UNIQUE Teaser ID
foreach($content['alink']['result'] as $row) {
if($value == $row['article_id'] && isset($content['struct'][ $row['article_cid'] ])) {
// enable frontend edit link
$content['alink']['tr'][$key] = getFrontendEditLink('summary', $row["article_id"]);
// set columns/row class
if($content['alink']['alink_columns'] > 0) {
// check if the current teaser will be on a new row
if($content['alink']['row_space'] && $content['alink']['alink_template_row']) {
$content['alink']['tr'][$key] .= render_cnt_template($content['alink']['alink_template_row'], 'ROW', $content['alink']['row']);
}
$row['column'] = array(
'teaser-row'.$content['alink']['row'],
'teaser-col'.$content['alink']['column']
);
$row['column'] = implode(' ', $row['column']);
// now make the tests
if($content['alink']['column'] % $content['alink']['alink_columns']) {
// New column
$content['alink']['column']++;
$content['alink']['row_space'] = false;
} else {
// New row
$content['alink']['column'] = 1;
$content['alink']['row']++;
$content['alink']['row_space'] = true;
}
} else {
$row['column'] = '';
}
$content['alink']['tr'][$key] .= $content['alink']['alink_template_entry'];
$content['alink']['tr'][$key] = str_replace('{ARTICLEID}', $row['article_id'], $content['alink']['tr'][$key]);
$content['alink']['tr'][$key] = str_replace('{CATEGORYID}', $row['article_cid'], $content['alink']['tr'][$key]);
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'MENUTITLE', html_specialchars($row['article_menutitle']));
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'TITLE', html_specialchars($row['article_title']));
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'SUBTITLE', html_specialchars($row['article_subtitle']));
$content['alink']['tr'][$key] = render_cnt_date($content['alink']['tr'][$key], $row[ $content['alink']['date_basis'] ], phpwcms_strtotime($row['article_begin']), phpwcms_strtotime($row['article_end']));
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'PRIO', empty($row['article_priorize']) ? '' : $row['article_priorize']);
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'COLUMN', $row['column']);
$row['article_image'] = @unserialize( $row['article_image'] );
// article list image
if(strpos($content['alink']['tr'][$key], 'IMAGE') !== false) {
$row['article_image'] = setArticleSummaryImageData( $row['article_image'] );
$img_thumb_name = '';
$img_thumb_rel = '';
$img_thumb_abs = '';
$img_thumb_width = 0;
$img_thumb_height = 0;
$img_thumb_id = empty($row['article_image']['list_id']) ? '' : $row['article_image']['list_id'];
$img_thumb_hash = '';
$img_thumb_crop = 0;
// check if image available
if($img_thumb_id) {
if(!empty($content['alink']['alink_width'])) {
$row['article_image']['list_width'] = $content['alink']['alink_width'];
$img_thumb_width = $row['article_image']['list_width'];
}
if(!empty($content['alink']['alink_height'])) {
$row['article_image']['list_height'] = $content['alink']['alink_height'];
$img_thumb_height = $row['article_image']['list_height'];
}
// build image/image link
$content['alink']['poplink'] = '';
$thumb_image = false;
$thumb_img = '';
$img_thumb_hash = empty($row['article_image']['list_hash']) ? '' : $row['article_image']['list_hash'];
$img_thumb_crop = empty($content['alink']['alink_crop']) ? 0 : 1;
$content['alink']['caption'] = getImageCaption($row['article_image']['list_caption']);
$row['article_image']['list_caption'] = $content['alink']['caption'][0]; // caption text
if(strpos($content['alink']['tr'][$key], 'cmsimage.php') !== false && $img_thumb_hash) {
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'IMAGE', $img_thumb_hash);
} elseif($img_thumb_hash) {
$thumb_image = get_cached_image(
array( "target_ext" => $row['article_image']['list_ext'],
"image_name" => $row['article_image']['list_hash'] . '.' . $row['article_image']['list_ext'],
"max_width" => $row['article_image']['list_width'],
"max_height" => $row['article_image']['list_height'],
"thumb_name" => md5( $row['article_image']['list_hash'].
$row['article_image']['list_width'].
$row['article_image']['list_height'].
$GLOBALS['phpwcms']['sharpen_level'].
$img_thumb_crop
),
'crop_image' => $img_thumb_crop
));
if($thumb_image != false) {
$content['alink']['caption'][3] = empty($content['alink']['caption'][3]) ? '' : ' title="'.html_specialchars($content['alink']['caption'][3]).'"';
$content['alink']['caption'][1] = html_specialchars($content['alink']['caption'][1]);
$thumb_img = '';
$img_thumb_name = $thumb_image[0];
$img_thumb_rel = PHPWCMS_IMAGES.$thumb_image[0];
$img_thumb_abs = PHPWCMS_URL.PHPWCMS_IMAGES.$thumb_image[0];
$img_thumb_width = $thumb_image[1];
$img_thumb_height = $thumb_image[2];
}
}
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'IMAGE', $thumb_img);
} else {
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'IMAGE', '');
}
// replace thumbnail and zoom image information
$content['alink']['tr'][$key] = str_replace(
array( '{THUMB_NAME}', '{THUMB_REL}', '{THUMB_ABS}', '{THUMB_WIDTH}', '{THUMB_HEIGHT}', '{THUMB_ID}', '{THUMB_HASH}', '{THUMB_CROP}' ),
array( $img_thumb_name, $img_thumb_rel, $img_thumb_abs, $img_thumb_width, $img_thumb_height, $img_thumb_id, $img_thumb_hash, $img_thumb_crop ),
$content['alink']['tr'][$key]
);
// Image Caption
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'CAPTION', empty($row['article_image']['list_caption']) ? '' : html_specialchars($row['article_image']['list_caption']));
}
// article summary
if(strpos($content['alink']['tr'][$key], 'SUMMARY_RAW') !== false) {
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'SUMMARY_RAW', $row['article_summary']);
}
if(strpos($content['alink']['tr'][$key], 'SUMMARY') !== false) {
if(empty($content['alink']['alink_wordlimit']) && !empty($row['article_image']['list_maxwords'])) {
$content['alink']['alink_wordlimit'] = $row['article_image']['list_maxwords'];
}
$row['article_summary'] = empty($content['alink']['alink_allowedtags']) ? strip_tags($row['article_summary']) : strip_tags($row['article_summary'], $content['alink']['alink_allowedtags']);
if(!empty($content['alink']['alink_wordlimit'])) {
$row['article_summary'] = getCleanSubString($row['article_summary'], $content['alink']['alink_wordlimit'], $template_default['ellipse_sign'], 'word');
}
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'SUMMARY', $row['article_summary']);
}
// $content['struct'][ $row['article_cid'] ]['acat_articlecount']
// count the articles per category and decide where to link on that basis
// store it if used once
if($content['alink']['alink_categoryalias'] && ($row['article_structalias'] = get_structurelevel_single_article_alias($row['article_cid']))) {
$row['article_alias'] = $row['article_structalias'];
}
// link to article detail
//$content['alink']['tr'][$key] = str_replace('{ARTICLELINK}', , $content['alink']['tr'][$key]);
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'ARTICLELINK', $row['article_morelink'] ? 'index.php?'.setGetArticleAid($row) : '');
// article category
$content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'CATEGORY', html_specialchars($content['struct'][ $row['article_cid'] ]['acat_name']));
break;
}
}
}
}
// combine all teaser items
if(count($content['alink']['tr'])) {
$content['alink']['tr'] = implode($content['alink']['alink_template_space'], $content['alink']['tr']);
$content['alink']['teaser'] = ' ';
} else {
$content['alink']['tr'] = '';
$content['alink']['teaser'] = '';
}
// put all template and content into one
$content['alink']['alink_template'] = LF . $content['alink']['alink_template_head'] . $content['alink']['tr'] . $content['alink']['alink_template_footer'] . LF;
// render teaser elements - throw everything between [TEASER]...[/TEASER]
$content['alink'] = render_cnt_template($content['alink']['alink_template'], 'TEASER', $content['alink']['teaser']);
// render title
$content['alink'] = render_cnt_template($content['alink'], 'TITLE', html_specialchars($crow['acontent_title']));
$content['alink'] = render_cnt_template($content['alink'], 'SUBTITLE', html_specialchars($crow['acontent_subtitle']));
$CNT_TMP .= $content['alink'];
}
?>