primo commit

This commit is contained in:
2024-12-17 17:34:10 +01:00
commit e650f8df99
16435 changed files with 2451012 additions and 0 deletions

View File

@ -0,0 +1,547 @@
<?php
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\CMS\Date\Date;
BaseDatabaseModel::addIncludePath(JPATH_SITE.'/components/com_jem/models', 'JemModel');
/**
* Module-Teaser
*/
abstract class ModJemTeaserHelper
{
/**
* Method to get the events
*
* @access public
* @return array
*/
public static function getList(&$params)
{
mb_internal_encoding('UTF-8');
static $formats = array('year' => 'Y', 'month' => 'F', 'day' => 'j', 'weekday' => 'l');
static $defaults = array('year' => '&nbsp;', 'month' => '', 'day' => '?', 'weekday' => '');
$db = Factory::getContainer()->get('DatabaseDriver');
$user = JemFactory::getUser();
$levels = $user->getAuthorisedViewLevels();
# Retrieve Eventslist model for the data
$model = BaseDatabaseModel::getInstance('Eventslist', 'JemModel', array('ignore_request' => true));
# Set params for the model
# has to go before the getItems function
$model->setState('params', $params);
# filter published
# 0: unpublished
# 1: published
# 2: archived
# -2: trashed
# type:
# 0: upcoming (not started) - dates,times > now+offset
# 1: unfinished (not ended) - enddates,endtimes > now+offset
# 2: archived - no limit, but from now back to the past
# 3: running (today) - enddates,endtimes > today+offset AND dates,times < tomorrow+offset
# 4: featured - ? (same as upcoming yet)
$type = (int)$params->get('type');
$offset_hours = (int)$params->get('offset_hours', 0);
$max_title_length = (int)$params->get('cuttitle', '25');
$max_desc_length = (int)$params->get('descriptionlength', 300);
# clean parameter data
$catids = JemHelper::getValidIds($params->get('catid'));
$venids = JemHelper::getValidIds($params->get('venid'));
$eventids = JemHelper::getValidIds($params->get('eventid'));
$countryids = JemHelper::getValidIds($params->get('couid'));
$stateloc = $params->get('stateloc');
$stateloc_mode = $params->get('stateloc_mode', 0);
# Open date support
$opendates = empty($eventids) ? 0 : 1; // allow open dates if limited to specific events
$model->setState('filter.opendates', $opendates);
# all upcoming or unfinished events
if (($type == 0) || ($type == 1)) {
$offset_minutes = $offset_hours * 60;
$model->setState('filter.published',1);
$model->setState('filter.orderby',array('a.dates ASC', 'a.times ASC', 'a.created ASC'));
$cal_from = "(a.dates IS NULL OR (TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(a.dates,' ',IFNULL(a.times,'00:00:00'))) > $offset_minutes) ";
$cal_from .= ($type == 1) ? " OR (TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(IFNULL(a.enddates,a.dates),' ',IFNULL(a.endtimes,'23:59:59'))) > $offset_minutes)) " : ") ";
}
# archived events only
elseif ($type == 2) {
$model->setState('filter.published',2);
$model->setState('filter.orderby',array('a.dates DESC', 'a.times DESC', 'a.created DESC'));
$cal_from = "";
}
# currently running events only (today + offset is inbetween start and end date of event)
elseif ($type == 3) {
$offset_days = (int)round($offset_hours / 24);
$model->setState('filter.published',1);
$model->setState('filter.orderby',array('a.dates ASC', 'a.times ASC', 'a.created ASC'));
$cal_from = " ((DATEDIFF(a.dates, CURDATE()) <= $offset_days) AND (DATEDIFF(IFNULL(a.enddates,a.dates), CURDATE()) >= $offset_days))";
}
# featured
elseif ($type == 4) {
$offset_minutes = $offset_hours * 60;
$model->setState('filter.featured',1);
$model->setState('filter.orderby',array('a.dates ASC', 'a.times ASC', 'a.created ASC'));
$cal_from = "((TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(a.dates,' ',IFNULL(a.times,'00:00:00'))) > $offset_minutes) ";
$cal_from .= " OR (TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(IFNULL(a.enddates,a.dates),' ',IFNULL(a.endtimes,'23:59:59'))) > $offset_minutes)) ";
}
$model->setState('filter.calendar_from',$cal_from);
$model->setState('filter.groupby','a.id');
# filter category's
if ($catids) {
$model->setState('filter.category_id', $catids);
$model->setState('filter.category_id.include', true);
}
# filter venue's
if ($venids) {
$model->setState('filter.venue_id', $venids);
$model->setState('filter.venue_id.include', true);
}
# filter event id's
if ($eventids) {
$model->setState('filter.event_id', $eventids);
$model->setState('filter.event_id.include', true);
}
# filter venue's state/province
if ($stateloc) {
$model->setState('filter.venue_state', $stateloc);
$model->setState('filter.venue_state.mode', $stateloc_mode); // 0: exact, 1: partial
}
# filter country's
if ($countryids) {
$model->setState('filter.country_id', $countryids);
$model->setState('filter.country_id.include', true);
}
# count
$count = $params->get('count', '2');
$model->setState('list.limit', $count);
# date/time
$dateFormat = $params->get('formatdate', '');
$timeFormat = $params->get('formattime', '');
$addSuffix = empty($timeFormat); // if we use component's default time format we can also add corresponding suffix
# Retrieve the available Events
$events = $model->getItems();
$color = $params->get('color');
$fallback_color = $params->get('fallbackcolor', '#EEEEEE');
$fallback_color_is_dark = self::_is_dark($fallback_color);
# Loop through the result rows and prepare data
$lists = array();
$i = -1; // it's easier to increment first
foreach ($events as $row)
{
# create thumbnails if needed and receive imagedata
$dimage = $row->datimage ? JemImage::flyercreator($row->datimage, 'event') : null;
$limage = $row->locimage ? JemImage::flyercreator($row->locimage, 'venue') : null;
#################
## DEFINE LIST ##
#################
$lists[++$i] = new stdClass();
# check view access
if (in_array($row->access, $levels)) {
# We know that user has the privilege to view the event
$lists[$i]->link = Route::_(JemHelperRoute::getEventRoute($row->slug));
$lists[$i]->linkText = Text::_('MOD_JEM_TEASER_READMORE');
} else {
$lists[$i]->link = Route::_('index.php?option=com_users&view=login');
$lists[$i]->linkText = Text::_('MOD_JEM_TEASER_READMORE_REGISTER');
}
# cut title
$fulltitle = htmlspecialchars($row->title, ENT_COMPAT, 'UTF-8');
if (mb_strlen($fulltitle) > $max_title_length) {
$title = mb_substr($fulltitle, 0, $max_title_length) . '&hellip;';
} else {
$title = $fulltitle;
}
$lists[$i]->eventid = $row->id;
$lists[$i]->title = $title;
$lists[$i]->fulltitle = $fulltitle;
$lists[$i]->venue = htmlspecialchars($row->venue ?? '', ENT_COMPAT, 'UTF-8');
$lists[$i]->catname = implode(", ", JemOutput::getCategoryList($row->categories, $params->get('linkcategory', 1)));
$lists[$i]->state = htmlspecialchars($row->state ?? '', ENT_COMPAT, 'UTF-8');
$lists[$i]->postalCode = htmlspecialchars($row->postalCode ?? '', ENT_COMPAT, 'UTF-8');
$lists[$i]->street = htmlspecialchars($row->street ?? '', ENT_COMPAT, 'UTF-8');
$lists[$i]->city = htmlspecialchars($row->city ?? '', ENT_COMPAT, 'UTF-8');
$lists[$i]->country = htmlspecialchars($row->country ?? '', ENT_COMPAT, 'UTF-8');
$lists[$i]->eventlink = $params->get('linkevent', 1) ? Route::_(JemHelperRoute::getEventRoute($row->slug)) : '';
$lists[$i]->venuelink = $params->get('linkvenue', 1) ? Route::_(JemHelperRoute::getVenueRoute($row->venueslug)) : '';
$lists[$i]->showimageevent = $params->get('showimageevent', 1);
$lists[$i]->showimagevenue = $params->get('showimagevenue', 1);
$lists[$i]->showdescriptionevent = $params->get('showdescriptionevent', 1);
# time/date
$lists[$i]->day = modJEMteaserHelper::_format_day($row, $params);
$tmpdate = empty($row->dates) ? $defaults : self::_format_date_fields($row->dates, $formats);
$lists[$i]->dayname = $tmpdate['weekday']; // keep them for backward compatibility
$lists[$i]->daynum = $tmpdate['day'];
$lists[$i]->month = $tmpdate['month'];
$lists[$i]->year = $tmpdate['year'];
$lists[$i]->startdate = $tmpdate;
$lists[$i]->enddate = empty($row->enddates) ? $defaults : self::_format_date_fields($row->enddates, $formats);
list($lists[$i]->date,
$lists[$i]->time) = self::_format_date_time($row, $params->get('datemethod', 1), $dateFormat, $timeFormat, $addSuffix);
$lists[$i]->dateinfo = JemOutput::formatDateTime($row->dates, $row->times, $row->enddates, $row->endtimes, $dateFormat, $timeFormat, $addSuffix);
$lists[$i]->dateschema = JEMOutput::formatSchemaOrgDateTime($row->dates, $row->times, $row->enddates, $row->endtimes, $showTime = true);
if ($dimage == null) {
$lists[$i]->eventimage = Uri::base(true).'/media/com_jem/images/blank.png';
$lists[$i]->eventimageorig = Uri::base(true).'/media/com_jem/images/blank.png';
} else {
$lists[$i]->eventimage = Uri::base(true).'/'.$dimage['thumb'];
$lists[$i]->eventimageorig = Uri::base(true).'/'.$dimage['original'];
}
if ($limage == null) {
$lists[$i]->venueimage = Uri::base(true).'/media/com_jem/images/blank.png';
$lists[$i]->venueimageorig = Uri::base(true).'/media/com_jem/images/blank.png';
} else {
$lists[$i]->venueimage = Uri::base(true).'/'.$limage['thumb'];
$lists[$i]->venueimageorig = Uri::base(true).'/'.$limage['original'];
}
if ($max_desc_length != 1208) {
# append <br /> tags on line breaking tags so they can be stripped below
$description = preg_replace("'<(hr[^/>]*?/|/(div|h[1-6]|li|p|tr))>'si", "$0<br />", $row->introtext);
# strip html tags but leave <br /> tags
$description = strip_tags($description, "<br>");
# switch <br /> tags to space character
if ($params->get('br') == 0) {
$description = mb_ereg_replace('<br[ /]*>',' ', $description);
}
if (empty($description)) {
$lists[$i]->eventdescription = Text::_('MOD_JEM_TEASER_NO_DESCRIPTION');
} elseif (mb_strlen($description) > $max_desc_length) {
$lists[$i]->eventdescription = mb_substr($description, 0, $max_desc_length) . '&hellip;';
} else {
$lists[$i]->eventdescription = $description;
}
} else {
$description = $row->introtext;
if (empty($description)) {
$lists[$i]->eventdescription = Text::_('MOD_JEM_TEASER_NO_DESCRIPTION');
} else {
$lists[$i]->eventdescription = $description;
}
}
$lists[$i]->readmore = mb_strlen(trim($row->fulltext));
$lists[$i]->colorclass = $color;
if (($color == 'alpha') || (($color == 'category') && empty($row->categories))) {
$lists[$i]->color = $fallback_color;
$lists[$i]->color_is_dark = $fallback_color_is_dark;
}
elseif (($color == 'category') && !empty($row->categories)) {
$colors = array();
foreach ($row->categories as $category) {
if (!empty($category->color)) {
$colors[$category->color] = $category->color;
}
}
if (count($colors) == 1) {
$lists[$i]->color = array_pop($colors);
$lists[$i]->color_is_dark = self::_is_dark($lists[$i]->color);
} else {
$lists[$i]->color = $fallback_color;
$lists[$i]->color_is_dark = $fallback_color_is_dark;
}
}
# provide custom fields
for ($n = 1; $n <= 10; ++$n) {
$var = 'custom'.$n;
$lists[$i]->$var = htmlspecialchars($row->$var, ENT_COMPAT, 'UTF-8');
}
} // foreach ($events as $row)
return $lists;
}
/**
* Method to decide if given color is dark.
*
* @access protected
*
* @param string $color color value in form '#rgb' or '#rrggbb'
*
* @return bool given color is dark (true) or not (false)
*
* @since 2.2.1
*/
protected static function _is_dark($color)
{
$gray = false;
# we understand '#rgb' or '#rrggbb' colors only
# r:77, g:150, b:28
if (strlen($color) < 5) {
$scan = sscanf($color, '#%1x%1x%1x');
if (is_array($scan) && count($scan) == 3) {
$gray = (17 * $scan[0] * 77) / 255
+ (17 * $scan[1] * 150) / 255
+ (17 * $scan[2] * 28) / 255;
}
} else {
$scan = sscanf($color, '#%2x%2x%2x');
if (is_array($scan) && count($scan) == 3) {
$gray = ($scan[0] * 77) / 255
+ ($scan[1] * 150) / 255
+ ($scan[2] * 28) / 255;
}
}
return ($gray <= 160) ? 1 : 0;
}
/**
*format days
*/
protected static function _format_day($row, &$params)
{
//Get needed timestamps and format
//setlocale (LC_TIME, 'de_DE.UTF8');
$yesterday_stamp = mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
$yesterday = date("Y-m-d", $yesterday_stamp);
$today_stamp = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$today = date('Y-m-d');
$tomorrow_stamp = mktime(0, 0, 0, date("m"), date("d")+1, date("Y"));
$tomorrow = date("Y-m-d", $tomorrow_stamp);
$dates_stamp = strtotime($row->dates);
$enddates_stamp = $row->enddates ? strtotime($row->enddates) : null;
//check if today or tomorrow or yesterday and no current running multiday event
if (($row->dates == $today) && empty($enddates_stamp)) {
$result = Text::_('MOD_JEM_TEASER_TODAY');
} elseif ($row->dates == $tomorrow) {
$result = Text::_('MOD_JEM_TEASER_TOMORROW');
} elseif ($row->dates == $yesterday) {
$result = Text::_('MOD_JEM_TEASER_YESTERDAY');
} else {
//if daymethod show day
if ($params->get('daymethod', 1) == 1) {
//single day event
$date = date('l', strtotime($row->dates));
$result = Text::sprintf('MOD_JEM_TEASER_ON_DATE', $date);
//Upcoming multidayevent (From 16.10.2010 Until 18.10.2010)
if (($dates_stamp > $tomorrow_stamp) && $enddates_stamp) {
$startdate = date('l', strtotime($row->dates ?? ''));
$result = Text::sprintf('MOD_JEM_TEASER_FROM', $startdate);
}
//current multidayevent (Until 18.08.2008)
if ($row->enddates && ($enddates_stamp > $today_stamp) && ($dates_stamp <= $today_stamp)) {
//format date
$enddate = date('l', strtotime($row->enddates ?? ''));
$result = Text::sprintf('MOD_JEM_TEASER_UNTIL', $enddate);
}
} else { // show day difference
//the event has an enddate and it's earlier than yesterday
if ($row->enddates && ($enddates_stamp < $yesterday_stamp)) {
$days = round( ($today_stamp - $enddates_stamp) / 86400 );
$result = Text::sprintf('MOD_JEM_TEASER_ENDED_DAYS_AGO', $days);
//the event has an enddate and it's later than today but the startdate is today or earlier than today
//means a currently running event with startdate = today
} elseif ($row->enddates && ($enddates_stamp > $today_stamp) && ($dates_stamp <= $today_stamp)) {
$days = round( ($enddates_stamp - $today_stamp) / 86400 );
$result = Text::sprintf('MOD_JEM_TEASER_DAYS_LEFT', $days);
//the events date is earlier than yesterday
} elseif ($dates_stamp < $yesterday_stamp) {
$days = round( ($today_stamp - $dates_stamp) / 86400 );
$result = Text::sprintf('MOD_JEM_TEASER_DAYS_AGO', $days );
//the events date is later than tomorrow
} elseif ($dates_stamp > $tomorrow_stamp) {
$days = round( ($dates_stamp - $today_stamp) / 86400 );
$result = Text::sprintf('MOD_JEM_TEASER_DAYS_AHEAD', $days);
}
}
}
return $result;
}
/**
* Method to format date and time information
*
* @access protected
*
* @param object $row event as got from db
* @param int $method 1 for absolute date, or 2 for relative date
* @param string $dateFormat format string for date (optional)
* @param string $timeFormat format string for time (optional)
* @param bool $addSuffix show or hide (default) time suffix, e.g. 'h' (optional)
*
* @return array(string, string) returns date and time strings as array
*/
protected static function _format_date_time($row, $method, $dateFormat = '', $timeFormat = '', $addSuffix = false)
{
if (empty($row->dates)) {
# open date
$date = JemOutput::formatDateTime('', ''); // "Open date"
$times = $row->times;
$endtimes = $row->endtimes;
} else {
# Get needed timestamps and format
$yesterday_stamp = mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
$yesterday = date("Y-m-d", $yesterday_stamp);
$today_stamp = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$today = date('Y-m-d');
$tomorrow_stamp = mktime(0, 0, 0, date("m"), date("d")+1, date("Y"));
$tomorrow = date("Y-m-d", $tomorrow_stamp);
$dates_stamp = $row->dates ? strtotime($row->dates) : null;
$enddates_stamp = $row->enddates ? strtotime($row->enddates) : null;
$times = $row->times; // show starttime by default
# datemethod show day difference
if ($method == 2) {
# Check if today, tomorrow, or yesterday
if ($row->dates == $today) {
$date = Text::_('MOD_JEM_TEASER_TODAY');
} elseif ($row->dates == $tomorrow) {
$date = Text::_('MOD_JEM_TEASER_TOMORROW');
} elseif ($row->dates == $yesterday) {
$date = Text::_('MOD_JEM_TEASER_YESTERDAY');
}
# This one isn't very different from the DAYS AGO output but it seems
# adequate to use different language strings here.
#
# The event has an enddate and it's earlier than yesterday
elseif ($row->enddates && ($enddates_stamp < $yesterday_stamp)) {
$days = round(($today_stamp - $enddates_stamp) / 86400);
$date = Text::sprintf('MOD_JEM_TEASER_ENDED_DAYS_AGO', $days);
# show endtime instead of starttime
$times = false;
$endtimes = $row->endtimes;
}
# The event has an enddate and it's later than today but the startdate is earlier than today
# means a currently running event
elseif ($row->dates && $row->enddates && ($enddates_stamp > $today_stamp) && ($dates_stamp < $today_stamp)) {
$days = round(($today_stamp - $dates_stamp) / 86400);
$date = Text::sprintf('MOD_JEM_TEASER_STARTED_DAYS_AGO', $days);
}
# The events date is earlier than yesterday
elseif ($row->dates && ($dates_stamp < $yesterday_stamp)) {
$days = round(($today_stamp - $dates_stamp) / 86400);
$date = Text::sprintf('MOD_JEM_TEASER_DAYS_AGO', $days);
}
# The events date is later than tomorrow
elseif ($row->dates && ($dates_stamp > $tomorrow_stamp)) {
$days = round(($dates_stamp - $today_stamp) / 86400);
$date = Text::sprintf('MOD_JEM_TEASER_DAYS_AHEAD', $days);
}
else {
$date = JemOutput::formatDateTime('', ''); // Oops - say "Open date"
}
}
# datemethod show date - not shown beause there is a calendar image
else {
///@todo check date+time to be more acurate
# Upcoming multidayevent (From 16.10.2008 Until 18.08.2008)
if (($dates_stamp >= $today_stamp) && ($enddates_stamp > $dates_stamp)) {
$startdate = JemOutput::formatdate($row->dates, $dateFormat);
$enddate = JemOutput::formatdate($row->enddates, $dateFormat);
$date = Text::sprintf('MOD_JEM_TEASER_FROM_UNTIL', $startdate, $enddate);
# don't show endtime because calendar is shown
}
# Current multidayevent (Until 18.08.2008)
elseif ($row->enddates && ($enddates_stamp >= $today_stamp) && ($dates_stamp < $today_stamp)) {
$enddate = JEMOutput::formatdate($row->enddates, $dateFormat);
$date = Text::sprintf('MOD_JEM_TEASER_UNTIL', $enddate);
# don't show endtime because calendar is shown
}
# Single day event
else {
$startdate = JEMOutput::formatdate($row->dates, $dateFormat);
$date = Text::sprintf('MOD_JEM_TEASER_ON_DATE', $startdate);
# additionally show endtime, but on single day events only to prevent user confusion
if (empty($row->enddates)) {
$endtimes = $row->endtimes;
}
}
}
}
$time = empty($times) ? '' : JemOutput::formattime($times, $timeFormat, $addSuffix);
$time .= empty($endtimes) ? '' : ('&nbsp;-&nbsp;' . JemOutput::formattime($row->endtimes, $timeFormat, $addSuffix));
return array($date, $time);
}
/**
* Method to format different parts of a date as array
*
* @access public
*
* @param mixed date in form 'yyyy-mm-dd' or as Date object
* @param array formats to get as assotiative array (e.g. 'day' => 'j'; see {@link PHP_MANUAL#date})
*
* @return mixed array of formatted date parts or false
*/
protected static function _format_date_fields($date, array $formats)
{
if (empty($formats)) {
return false;
}
$result = array();
$jdate = ($date instanceof Date) ? $date : new Date($date);
foreach ($formats as $k => $v) {
$result[$k] = $jdate->format($v, false, true);
}
return $result;
}
}

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,109 @@
; @package JEM
; @subpackage JEM Teaser Module
; @copyright (C) 2013-2024 joomlaeventmanager.net
; @copyright (C) 2005-2009 Christoph Lukes
; @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
;
; All translations can be found at https://app.transifex.com/jemproject/
; Please join the translation team if you want to contribute your changes to the translations
;
; Note: All ini files need to be saved as UTF-8, no BOM
MOD_JEM_TEASER_EVENTS_IN_MODULE="Events in module"
MOD_JEM_TEASER_EVENTS_IN_MODULE_DESC="Number of events shown in module."
MOD_JEM_TEASER_UPCOMING_ARCHIVED_OR_CURRENT="Events Display-Type"
MOD_JEM_TEASER_UPCOMING_ARCHIVED_OR_CURRENT_DESC="Select if you want to display upcoming, unfinished, archived or today's Events."
MOD_JEM_TEASER_UPCOMING_EVENTS="Upcoming"
MOD_JEM_TEASER_UNFINISHED_EVENTS="Unfinished"
MOD_JEM_TEASER_ARCHIVED_EVENTS="Archived"
MOD_JEM_TEASER_CURRENT_EVENTS="Today"
MOD_JEM_TEASER_FEATURED_EVENTS="Featured"
MOD_JEM_TEASER_SHOW_NO_EVENTS="Show 'No events'"
MOD_JEM_TEASER_SHOW_NO_EVENTS_DESC="Show a text if no events has been found. Otherwise module will not be shown."
MOD_JEM_TEASER_OFFSET_HOURS="Time offset (in hours)"
MOD_JEM_TEASER_OFFSET_HOURS_DESC="Moves time into future (positive values) or into past (negative values). Only used to display not archived events, on today's events it's rounded to full days. <br>Examples: To show events finished at least two hours ago set type to Unfinished Events and offset to -2. To show events starting in one week or later set type to Upcoming Events and offset to 168 (7 * 24). To show events of tomorrow set type to Today and offset to 24."
MOD_JEM_TEASER_VENUE="Venue"
; MOD_JEM_TEASER_TITLE="Title"
MOD_JEM_TEASER_MAX_TITLE_LENGTH="Max. Title length"
MOD_JEM_TEASER_MAX_TITLE_LENGTH_DESC="Max. length of the title."
MOD_JEM_TEASER_LINK_TO_DETAILS="Link to Event on Title"
MOD_JEM_TEASER_LINK_TO_DETAILS_DESC="Link to the event page on Title."
MOD_JEM_TEASER_LINK_TO_CATEGORY="Link to Category"
MOD_JEM_TEASER_LINK_TO_CATEGORY_DESC="Link to the Category."
MOD_JEM_TEASER_LINK_TO_VENUE="Link to Venue"
MOD_JEM_TEASER_LINK_TO_VENUE_DESC="Link to the Venue."
MOD_JEM_TEASER_SHOW_DESCRIPTION_EVENT="Show description"
MOD_JEM_TEASER_SHOW_DESCRIPTION_EVENT_DESC="Show description of event."
MOD_JEM_TEASER_SHOW_IMAGE_EVENT="Show event image"
MOD_JEM_TEASER_SHOW_IMAGE_EVENT_DESC="Show image of the event."
MOD_JEM_TEASER_SHOW_IMAGE_VENUE="Show venue image"
MOD_JEM_TEASER_SHOW_IMAGE_VENUE_DESC="Show image of the venue."
MOD_JEM_TEASER_USE_MODAL="Modal window"
MOD_JEM_TEASER_USE_MODAL_DESC="The modal window shows the image in original size after a click with a nice effect within the current screen"
MOD_JEM_TEASER_DATE="Date"
MOD_JEM_TEASER_CATEGORY_ID="Categories"
MOD_JEM_TEASER_CATEGORY_ID_DESC="Choose categories to limit the output to them. Leave blank if you want to show all events."
MOD_JEM_TEASER_VENUE_ID="Venues"
MOD_JEM_TEASER_VENUE_ID_DESC="Choose venues to limit the output to them. Leave blank if you want to show all events."
MOD_JEM_TEASER_EVENT_ID="Event ID"
MOD_JEM_TEASER_EVENT_ID_DESC="Type in comma separated event ids to limit the output to them. Leave blank if you want to show all events."
MOD_JEM_TEASER_STATE="County"
MOD_JEM_TEASER_STATE_DESC="Type in comma separated counties to limit the events to the choosen ones. Leave blank to display events from all states."
MOD_JEM_TEASER_STATE_MODE="County Match Mode"
MOD_JEM_TEASER_STATE_MODE_DESC="Select if county must completely match one of the strings given above, or only contain one."
MOD_JEM_TEASER_STATE_MODE_EXACTMATCH="Complete Match"
MOD_JEM_TEASER_STATE_MODE_CONTAINS="Contain"
MOD_JEM_TEASER_COUNTRIES="Countries"
; MOD_JEM_TEASER_COUNTRIES_DESC="Choose countries to limit the output to them. Leave unselected ifyou want to show all events."
MOD_JEM_TEASER_SHOW_DATE="Show date"
MOD_JEM_TEASER_SHOW_DAY_DIFFERENCE="Show day difference"
MOD_JEM_TEASER_SHOW_DATE_OR_DAY_DIFFERENCE="Date Display-Type"
MOD_JEM_TEASER_SHOW_DATE_OR_DAY_DIFFERENCE_DESC="Select to show the formatted date or the difference in days from current day to the Event date. Note: The time will be hidden when the day difference is selected."
MOD_JEM_TEASER_DATE_FORMAT="Date format"
MOD_JEM_TEASER_DATE_FORMAT_DESC="Date format using the PHP date format, for example: \"j. M Y\". For more information <a href=\"https://www.php.net/manual/en/datetime.format.php\" target=\"_blank\">visit the PHP manual</a>."
MOD_JEM_TEASER_TIME_FORMAT="Time format"
MOD_JEM_TEASER_TIME_FORMAT_DESC="Time format using the PHP time format, for example: \"H:i\". For more information <a href=\"https://www.php.net/manual/en/datetime.format.php\" target=\"_blank\">visit the PHP manual</a>."
MOD_JEM_TEASER_MODULE_CLASS_SUFFIX="Module Class Suffix"
MOD_JEM_TEASER_MODULE_CLASS_SUFFIX_DESC="A suffix to be applied to the css class of the module, this allows individual module styling."
MOD_JEM_TEASER_CACHING="Caching"
MOD_JEM_TEASER_CACHING_DESC="Select whether to cache the content of this module."
MOD_JEM_TEASER_USE_GLOBAL="Use global"
MOD_JEM_TEASER_NO_CACHING="No caching"
MOD_JEM_TEASER_CACHE_TIME="Cache Time"
MOD_JEM_TEASER_CACHE_TIME_DESC="The time before the module is recached."
MOD_JEM_TEASER_XML_DESCRIPTION="JEM Latest Events Teaser Module. JEM is based on Eventlist by Christoph Lukes"
MOD_JEM_TEASER_ALLOW_LINEBREAK="Allow Linebreak"
MOD_JEM_TEASER_ALLOW_LINEBREAK_DESC="Allow linebreaks or replace them by a space."
MOD_JEM_TEASER_COLOR="Color"
MOD_JEM_TEASER_COLOR_DESC="Color of calendar image. If \"from Category\" is choosen color value will be taken from categories if unique."
MOD_JEM_TEASER_MAX_DESCRIPTION_LENGTH="Max description length"
MOD_JEM_TEASER_MAX_DESCRIPTION_LENGTH_DESC="Limit description shown to this amount of characters."
MOD_JEM_TEASER_BLUE="Blue"
MOD_JEM_TEASER_GREEN="Green"
MOD_JEM_TEASER_ORANGE="Orange"
MOD_JEM_TEASER_RED="Red"
MOD_JEM_TEASER_CATEGORY="from Category"
MOD_JEM_TEASER_FALLBACK_COLOR="Fallback Color"
MOD_JEM_TEASER_FALLBACK_COLOR_DESC="Color in HEX Code used for \"Fallback Color\" or if \"from Category\" is chosen and no category color value can be found."
; MOD_JEM_TEASER_FIELD_READMORE_DESC="If set to Show, the 'Read more...' link will show if Main text has been provided for an Event."
MOD_JEM_TEASER_FIELD_READMORE_LABEL="'Read more...' Link"
MOD_JEM_TEASER="JEM - Module-Teaser"
MOD_JEM_TEASER_XML_DESCRIPTION="JEM Latest Events Teaser Module"
;Frontend
MOD_JEM_TEASER_TODAY="Today"
MOD_JEM_TEASER_TOMORROW="Tomorrow"
MOD_JEM_TEASER_YESTERDAY="Yesterday"
MOD_JEM_TEASER_DAYS_AGO="%s days ago"
MOD_JEM_TEASER_DAYS_AHEAD="%s days ahead"
MOD_JEM_TEASER_ENDED_DAYS_AGO="Ended %s days ago"
MOD_JEM_TEASER_STARTED_DAYS_AGO="Started %s days ago"
MOD_JEM_TEASER_FROM="From %s"
MOD_JEM_TEASER_UNTIL="Until %s"
MOD_JEM_TEASER_FROM_UNTIL="From %s Until %s"
MOD_JEM_TEASER_ON_DATE="On %s"
MOD_JEM_TEASER_READMORE="Read more..."
MOD_JEM_TEASER_READMORE_REGISTER="Register to Read More"
MOD_JEM_TEASER_NO_DESCRIPTION=""
MOD_JEM_TEASER_NO_EVENTS="No events found."

View File

@ -0,0 +1,13 @@
; @package JEM
; @subpackage JEM Teaser Module
; @copyright (C) 2013-2024 joomlaeventmanager.net
; @copyright (C) 2005-2009 Christoph Lukes
; @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
;
; All translations can be found at https://app.transifex.com/jemproject/
; Please join the translation team if you want to contribute your changes to the translations
;
; Note: All ini files need to be saved as UTF-8, no BOM
MOD_JEM_TEASER="JEM - Teaser Module"
MOD_JEM_TEASER_XML_DESCRIPTION="This module shows events as teaser."

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,99 @@
; @version 2.1.6
; @package JEM
; @subpackage JEM Teaser Module
; @copyright (C) 2005-2009 Christoph Lukes
; @copyright (C) 2013-2016 joomlaeventmanager.net
; @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
;
; All translations can be found at https://www.transifex.com/projects/p/JEM/
; Please join the translation team if you want to contribute your changes to the translations
;
; Note : All ini files need to be saved as UTF-8 - No BOM
MOD_JEM_TEASER_EVENTS_IN_MODULE="Eventi nel modulo"
MOD_JEM_TEASER_EVENTS_IN_MODULE_DESC="Numero di eventi da mostrare nel modulo."
MOD_JEM_TEASER_UPCOMING_ARCHIVED_OR_CURRENT="Tipo di visualizzazione degli eventi"
MOD_JEM_TEASER_UPCOMING_ARCHIVED_OR_CURRENT_DESC="Scegliere se si desidera visualizzare gli eventi prossimi, non terminati, archiviati o attuali."
MOD_JEM_TEASER_UPCOMING_EVENTS="Prossimi"
MOD_JEM_TEASER_UNFINISHED_EVENTS="Incompleto/in corso"
MOD_JEM_TEASER_ARCHIVED_EVENTS="Archiviati"
MOD_JEM_TEASER_CURRENT_EVENTS="Oggi"
MOD_JEM_TEASER_FEATURED_EVENTS="In primo piano"
MOD_JEM_TEASER_OFFSET_HOURS="Tempo offset (in ore)"
MOD_JEM_TEASER_OFFSET_HOURS_DESC="Sposta il tempo nel futuro (valori positivi) o nel passato (valori negativi). Utilizzato solo per visualizzare gli eventi non archiviati, per gli eventi di oggi e` arrotondato ai giorni interi. <br> Esempi: Per mostrare gli eventi finiti almeno due ore fa impostare Tipo a Eventi Incompleti e offset a -2. Per mostrare gli eventi in partenza in settimana o piu` tardi impostare Tipo a Prossimi eventi e offset di 188. Per mostrare gli eventi di domani impostare Tipo a Oggi e offset a 24."
MOD_JEM_TEASER_VENUE="Sede"
MOD_JEM_TEASER_TITLE="Titolo"
MOD_JEM_TEASER_MAX_TITLE_LENGTH="Lunghezza massima titolo"
MOD_JEM_TEASER_MAX_TITLE_LENGTH_DESC="Lunghezza massima titolo."
MOD_JEM_TEASER_LINK_TO_DETAILS="Link all'evento sul titolo"
MOD_JEM_TEASER_LINK_TO_DETAILS_DESC="Link alla pagina dell'evento sul Titolo"
MOD_JEM_TEASER_LINK_TO_CATEGORY="Link alla categoria"
MOD_JEM_TEASER_LINK_TO_CATEGORY_DESC="Link alla categoria."
MOD_JEM_TEASER_LINK_TO_VENUE="Link alla sede"
MOD_JEM_TEASER_LINK_TO_VENUE_DESC="Link alla sede."
MOD_JEM_TEASER_USE_MODAL="Finestra modale"
MOD_JEM_TEASER_USE_MODAL_DESC="La finestra modale mostra l'immagine in dimensioni originali dopo un clic con un piacevole effetto all'interno della schermata corrente"
MOD_JEM_TEASER_DATE="Data"
MOD_JEM_TEASER_CATEGORY_ID="Categorie"
MOD_JEM_TEASER_CATEGORY_ID_DESC="Scegli categorie per limitare l'output. Lasciare vuoto se si desidera visualizzare tutti gli eventi."
MOD_JEM_TEASER_VENUE_ID="Sedi"
MOD_JEM_TEASER_VENUE_ID_DESC="Scegli categorie per limitare l'output. Lasciare vuoto se si desidera visualizzare tutti gli eventi."
MOD_JEM_TEASER_EVENT_ID="ID evento"
MOD_JEM_TEASER_EVENT_ID_DESC="Scrivi gli ID degli eventi separati da una virgola per limitare ai soli la visualizzazione. Lascia bianco per mostrare tutti gli eventi."
MOD_JEM_TEASER_STATE="Provincia"
MOD_JEM_TEASER_STATE_DESC="Inserire separati da virgola gli stati per limitare gli eventi scelti. Lasciare vuoto per visualizzare tutti gli eventi."
MOD_JEM_TEASER_STATE_MODE="Stato Match Mode"
MOD_JEM_TEASER_STATE_MODE_DESC="Scegliere se Stato deve corrispondere completamente a una delle stringhe di cui sopra, o contenerne solo una."
MOD_JEM_TEASER_STATE_MODE_EXACTMATCH="Confronto completo"
MOD_JEM_TEASER_STATE_MODE_CONTAINS="Contiene"
MOD_JEM_TEASER_SHOW_DATE="Mostra data"
MOD_JEM_TEASER_SHOW_DAY_DIFFERENCE="Mostra giorni mancanti"
MOD_JEM_TEASER_SHOW_DATE_OR_DAY_DIFFERENCE="Tipo di visualizzazione delle date"
MOD_JEM_TEASER_SHOW_DATE_OR_DAY_DIFFERENCE_DESC="Selezionare per visualizzare la data formattata o la differenza in giorni dal giorno corrente alla data dell'evento. Nota: Il tempo sarà nascosto quando è selezionata la differenza giorno."
MOD_JEM_TEASER_DATE_FORMAT="Formato data"
MOD_JEM_TEASER_DATE_FORMAT_DESC="Formato data utilizzando il formato della data di PHP, per esempio: "_QQ_"j. M Y"_QQ_". Per maggiori informazioni consulta il manuale PHP sui php.net."
MOD_JEM_TEASER_TIME_FORMAT="Formato ora"
MOD_JEM_TEASER_TIME_FORMAT_DESC="\nFormato ora utilizzando il formato PHP strftime, per esempio: "_QQ_"%H:%M. Per maggiori informazioni consulta il manuale PHP sui php.net."
MOD_JEM_TEASER_MODULE_CLASS_SUFFIX="Suffisso classe del modulo"
MOD_JEM_TEASER_MODULE_CLASS_SUFFIX_DESC="Un suffisso da applicare alla classe CSS del modulo, che ne permette lo stile indipendente."
MOD_JEM_TEASER_CACHING="Cache"
MOD_JEM_TEASER_CACHING_DESC="Selezionare se memorizzare nella cache il contenuto di questo modulo."
MOD_JEM_TEASER_USE_GLOBAL="Usa globali"
MOD_JEM_TEASER_NO_CACHING="Nessuna cache"
MOD_JEM_TEASER_CACHE_TIME="Durata cache"
MOD_JEM_TEASER_CACHE_TIME_DESC="Il tempo prima che la cache venga ricaricata."
MOD_JEM_TEASER="JEM eventi piu` recenti del Modulo Annuncio"
MOD_JEM_TEASER_XML_DESCRIPTION="JEM eventi piu` recenti del Modulo Annuncio. JEM e` basato su Eventlist di Christoph Lukes (http://www.schlu.net)"
MOD_JEM_TEASER_ALLOW_LINEBREAK="Consenti Linea di interruzione"
MOD_JEM_TEASER_ALLOW_LINEBREAK_DESC="Consenti Linea di interruzione"
MOD_JEM_TEASER_COLOR="Colore"
MOD_JEM_TEASER_COLOR_DESC="Colore dell'immagine del calendario. Se viene scelto "_QQ_"dalla categoria"_QQ_" verra` preso da categorie se unico."
MOD_JEM_TEASER_MAX_DESCRIPTION_LENGTH="Lunghezza massima descrizione"
MOD_JEM_TEASER_MAX_DESCRIPTION_LENGTH_DESC="Lunghezza massima descrizione"
MOD_JEM_TEASER_BLUE="Blu"
MOD_JEM_TEASER_GREEN="Verde"
MOD_JEM_TEASER_ORANGE="Arancione"
MOD_JEM_TEASER_RED="Rosso"
MOD_JEM_TEASER_CATEGORY="dalla categoria"
MOD_JEM_TEASER_FALLBACK_COLOR="Colore Fallback"
MOD_JEM_TEASER_FALLBACK_COLOR_DESC="Colore utilizzato se viene scelto "_QQ_"dalla categoria"_QQ_" ma non puo` essere trovato un unico colore."
MOD_JEM_TEASER_FIELD_READMORE_DESC="Se impostato su Mostra, il collegamento 'Leggi tutto ..' mostrera` il testo se il testo principale e` stato previsto per un evento."
MOD_JEM_TEASER_FIELD_READMORE_LABEL="Collegamento 'Leggi tutto ...'"
MOD_JEM_TEASER_XML_DESCRIPTION="JEM eventi piu` recenti del Modulo Annuncio. JEM e` basato su Eventlist di Christoph Lukes (http://www.schlu.net)"
;Frontend
MOD_JEM_TEASER_TODAY="Oggi"
MOD_JEM_TEASER_TOMORROW="Domani"
MOD_JEM_TEASER_YESTERDAY="Ieri"
MOD_JEM_TEASER_DAYS_AGO="%s giorni fa"
MOD_JEM_TEASER_DAYS_AHEAD="Tra %s giorni"
MOD_JEM_TEASER_ENDED_DAYS_AGO="Terminato %s giorni fa"
MOD_JEM_TEASER_STARTED_DAYS_AGO="Cominciato %s giorni fa"
MOD_JEM_TEASER_FROM="Dal %s"
MOD_JEM_TEASER_UNTIL="Al %s"
MOD_JEM_TEASER_FROM_UNTIL="Dal %s Al %s"
MOD_JEM_TEASER_ON_DATE="Alle %s"
MOD_JEM_TEASER_READMORE="Leggi altro..."
MOD_JEM_TEASER_READMORE_REGISTER="Registrati per leggere tutto"
MOD_JEM_TEASER_NO_DESCRIPTION=""

View File

@ -0,0 +1,14 @@
; @version 2.0.0
; @package JEM
; @subpackage JEM Teaser Module
; @copyright (C) 2005-2009 Christoph Lukes
; @copyright (C) 2013-2014 joomlaeventmanager.net
; @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
;
; All translations can be found at https://www.transifex.com/projects/p/JEM/
; Please join the translation team if you want to contribute your changes to the translations
;
; Note : All ini files need to be saved as UTF-8 - No BOM
MOD_JEM_TEASER="JEM - Modulo annuncio"
MOD_JEM_TEASER_XML_DESCRIPTION="Questo modulo mostra gli eventi come annunci."

View File

@ -0,0 +1,59 @@
<?php
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
// get module helper
require_once __DIR__.'/helper.php';
//require needed component classes
require_once(JPATH_SITE.'/components/com_jem/helpers/helper.php');
require_once(JPATH_SITE.'/components/com_jem/helpers/route.php');
require_once(JPATH_SITE.'/components/com_jem/classes/image.class.php');
require_once(JPATH_SITE.'/components/com_jem/classes/output.class.php');
require_once(JPATH_SITE.'/components/com_jem/factory.php');
Factory::getApplication()->getLanguage()->load('com_jem', JPATH_SITE.'/components/com_jem');
switch($params->get('color')) {
case 'red':
case 'blue':
case 'green':
case 'orange':
case 'category':
case 'alpha':
$color = $params->get('color');
break;
default:
$color = "red";
// ensure getList() always gets a valid 'color' setting
$params->set('color', $color);
break;
}
$list = ModJemTeaserHelper::getList($params);
// check if any results returned
if (empty($list) && !$params->get('show_no_events')) {
return;
}
$mod_name = 'mod_jem_teaser';
$jemsettings = JemHelper::config();
$iconcss = $mod_name . (($jemsettings->useiconfont == 1) ? '_iconfont' : '_iconimg');
JemHelper::loadModuleStyleSheet($mod_name);
JemHelper::loadModuleStyleSheet($mod_name, $color);
JemHelper::loadModuleStyleSheet($mod_name, $iconcss);
// load icon font if needed
JemHelper::loadIconFont();
require(JemHelper::getModuleLayoutPath($mod_name));

View File

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5" client="site" method="upgrade">
<name>mod_jem_teaser</name>
<author>JEM Community</author>
<authorEmail>info@joomlaeventmanager.net</authorEmail>
<authorUrl>https://www.joomlaeventmanager.net</authorUrl>
<creationDate>October 2024</creationDate>
<copyright>copyright (C) 2013-2024 joomlaeventmanager.net</copyright>
<license>https://www.gnu.org/licenses/gpl-3.0 GNU/GPL</license>
<version>4.3.1</version>
<description>MOD_JEM_TEASER_XML_DESCRIPTION</description>
<scriptfile>script.php</scriptfile>
<files>
<filename module="mod_jem_teaser">mod_jem_teaser.php</filename>
<filename>helper.php</filename>
<filename>script.php</filename>
<filename>index.html</filename>
<folder>tmpl</folder>
<folder>language</folder>
</files>
<languages>
<language tag="en-GB">language/en-GB/mod_jem_teaser.ini</language>
<language tag="en-GB">language/en-GB/mod_jem_teaser.sys.ini</language>
</languages>
<help key="Modules" />
<config>
<fields name="params">
<fieldset name="basic" addfieldpath="/administrator/components/com_jem/models/fields">
<field name="type" type="list"
default="1"
label="MOD_JEM_TEASER_UPCOMING_ARCHIVED_OR_CURRENT"
description="MOD_JEM_TEASER_UPCOMING_ARCHIVED_OR_CURRENT_DESC"
>
<option value="0">MOD_JEM_TEASER_UPCOMING_EVENTS</option>
<option value="1">MOD_JEM_TEASER_UNFINISHED_EVENTS</option>
<option value="2">MOD_JEM_TEASER_ARCHIVED_EVENTS</option>
<option value="3">MOD_JEM_TEASER_CURRENT_EVENTS</option>
<option value="4">MOD_JEM_TEASER_FEATURED_EVENTS</option>
</field>
<field name="count" type="text"
default="5"
label="MOD_JEM_TEASER_EVENTS_IN_MODULE"
description="MOD_JEM_TEASER_EVENTS_IN_MODULE_DESC"
/>
<field name="show_no_events" type="radio"
default="1"
label="MOD_JEM_TEASER_SHOW_NO_EVENTS"
description="MOD_JEM_TEASER_SHOW_NO_EVENTS_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="offset_hours" type="text"
default=""
label="MOD_JEM_TEASER_OFFSET_HOURS"
description="MOD_JEM_TEASER_OFFSET_HOURS_DESC"
/>
<field name="cuttitle" type="text"
default="25"
label="MOD_JEM_TEASER_MAX_TITLE_LENGTH"
description="MOD_JEM_TEASER_MAX_TITLE_LENGTH_DESC"
/>
<field name="linkevent" type="radio"
default="1"
label="MOD_JEM_TEASER_LINK_TO_DETAILS"
description="MOD_JEM_TEASER_LINK_TO_DETAILS_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="showimageevent" type="radio"
default="1"
label="MOD_JEM_TEASER_SHOW_IMAGE_EVENT"
description="MOD_JEM_TEASER_SHOW_IMAGE_EVENT_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="showimagevenue" type="radio"
default="1"
label="MOD_JEM_TEASER_SHOW_IMAGE_VENUE"
description="MOD_JEM_TEASER_SHOW_IMAGE_VENUE_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="color" type="list"
default="1"
label="MOD_JEM_TEASER_COLOR"
description="MOD_JEM_TEASER_COLOR_DESC"
>
<option value="red">MOD_JEM_TEASER_RED</option>
<option value="blue">MOD_JEM_TEASER_BLUE</option>
<option value="green">MOD_JEM_TEASER_GREEN</option>
<option value="orange">MOD_JEM_TEASER_ORANGE</option>
<option value="category">MOD_JEM_TEASER_CATEGORY</option>
<option value="alpha">MOD_JEM_TEASER_FALLBACK_COLOR</option>
</field>
<field name="fallbackcolor" type="color"
class="inputbox"
default="#EEEEEE"
size="8"
label="MOD_JEM_TEASER_FALLBACK_COLOR"
description="MOD_JEM_TEASER_FALLBACK_COLOR_DESC"
/>
<field name="use_modal" type="radio"
default="0"
label="MOD_JEM_TEASER_USE_MODAL"
description="MOD_JEM_TEASER_USE_MODAL_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="showdescriptionevent" type="radio"
default="1"
label="MOD_JEM_TEASER_SHOW_DESCRIPTION_EVENT"
description="MOD_JEM_TEASER_SHOW_DESCRIPTION_EVENT_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="descriptionlength" type="text"
default="300"
label="MOD_JEM_TEASER_MAX_DESCRIPTION_LENGTH"
description="MOD_JEM_TEASER_MAX_DESCRIPTION_LENGTH_DESC"
/>
<field name="br" type="radio"
default="0"
label="MOD_JEM_TEASER_ALLOW_LINEBREAK"
description="MOD_JEM_TEASER_ALLOW_LINEBREAK_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="readmore" type="radio"
default="0"
label="MOD_JEM_TEASER_FIELD_READMORE_LABEL"
description="MOD_JEM_TEASER_FIELD_READMORE_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="datemethod" type="list"
default="1"
label="MOD_JEM_TEASER_SHOW_DATE_OR_DAY_DIFFERENCE"
description="MOD_JEM_TEASER_SHOW_DATE_OR_DAY_DIFFERENCE_DESC"
>
<option value="1">MOD_JEM_TEASER_SHOW_DATE</option>
<option value="2">MOD_JEM_TEASER_SHOW_DAY_DIFFERENCE</option>
</field>
<field name="formatdate" type="text"
default=""
label="MOD_JEM_TEASER_DATE_FORMAT"
description="MOD_JEM_TEASER_DATE_FORMAT_DESC"
/>
<field name="formattime" type="text"
default=""
label="MOD_JEM_TEASER_TIME_FORMAT"
description="MOD_JEM_TEASER_TIME_FORMAT_DESC"
/>
<field name="linkcategory" type="radio"
default="1"
label="MOD_JEM_TEASER_LINK_TO_CATEGORY"
description="MOD_JEM_TEASER_LINK_TO_CATEGORY_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="linkvenue" type="radio"
default="1"
label="MOD_JEM_TEASER_LINK_TO_VENUE"
description="MOD_JEM_TEASER_LINK_TO_VENUE_DESC"
class="btn-group btn-group-yesno"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field name="catid" type="categoryedit"
default=""
multiple="true"
removeroot="true"
label="MOD_JEM_TEASER_CATEGORY_ID"
description="MOD_JEM_TEASER_CATEGORY_ID_DESC"
/>
<field name="venid" type="venueoptions"
default=""
multiple="true"
label="MOD_JEM_TEASER_VENUE_ID"
description="MOD_JEM_TEASER_VENUE_ID_DESC"
/>
<field name="eventid" type="text"
default=""
label="MOD_JEM_TEASER_EVENT_ID"
description="MOD_JEM_TEASER_EVENT_ID_DESC"
/>
<field name="stateloc" type="text"
default=""
label="MOD_JEM_TEASER_STATE"
description="MOD_JEM_TEASER_STATE_DESC"
/>
<field name="stateloc_mode" type="list"
default="0"
label="MOD_JEM_TEASER_STATE_MODE"
description="MOD_JEM_TEASER_STATE_MODE_DESC"
>
<option value="0">MOD_JEM_TEASER_STATE_MODE_EXACTMATCH</option>
<option value="1">MOD_JEM_TEASER_STATE_MODE_CONTAINS</option>
</field>
<field name="couid" type="list"
default=""
multiple="true"
removeroot="true"
label="MOD_JEM_TEASER_COUNTRIES"
description="MOD_JEM_TEASER_COUNTRIESE_DESC"
/>
<field name="moduleclass_sfx" type="text"
default=""
label="MOD_JEM_TEASER_MODULE_CLASS_SUFFIX"
description="MOD_JEM_TEASER_MODULE_CLASS_SUFFIX_DESC"
/>
</fieldset>
<fieldset name="advanced">
<field name="cache" type="list"
default="1"
label="MOD_JEM_TEASER_CACHING"
description="MOD_JEM_TEASER_CACHING_DESC"
>
<option value="1">MOD_JEM_TEASER_USE_GLOBAL</option>
<option value="0">MOD_JEM_TEASER_NO_CACHING</option>
</field>
<field name="cache_time" type="text"
default="900"
label="MOD_JEM_TEASER_CACHE_TIME"
description="MOD_JEM_TEASER_CACHE_TIME_DESC"
/>
</fieldset>
</fields>
</config>
</extension>

View File

@ -0,0 +1,132 @@
<?php
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\Registry\Registry;
/**
* Script file of JEM component
*/
class mod_jem_teaserInstallerScript
{
private $name = 'mod_jem_teaser';
private $oldRelease = "";
private $newRelease = "";
/**
* method to run before an install/update/uninstall method
* (it seams method is not called on uninstall)
*
* @return void
*/
function preflight($type, $parent)
{
// abort if the release being installed is not newer than the currently installed version
if (strtolower($type) == 'update') {
// Installed component version
$this->oldRelease = $this->getParam('version');
// Installing component version as per Manifest file
$this->newRelease = (string) $parent->getManifest()->version;
if (version_compare($this->newRelease, $this->oldRelease, 'lt')) {
return false;
}
}
}
/**
* Method to run after an install/update/uninstall method
* (it seams method is not called on uninstall)
*
* @return void
*/
function postflight($type, $parent)
{
if (strtolower($type) == 'update') {
// Changes between 2.1.5 -> 2.1.6
if (version_compare($this->oldRelease, '2.1.6-rc3', 'le') && version_compare($this->newRelease, '2.1.6-rc3', 'ge')) {
// change category/venue/event ID lists from string to array
$this->updateParams216();
}
}
}
/**
* Get a parameter from the manifest file (actually, from the manifest cache).
*
* @param $name The name of the parameter
*
* @return The parameter
*/
private function getParam($name)
{
$db = Factory::getContainer()->get('DatabaseDriver');
$query = $db->getQuery(true);
$query->select('manifest_cache')->from('#__extensions')->where(array("type = 'module'", "element = '".$this->name."'"));
$db->setQuery($query);
$manifest = json_decode($db->loadResult(), true);
return $manifest[$name];
}
/**
* Increment category ids in params of JEM modules.
* (required when updating from 1.9.4 or below to 1.9.5 or newer)
*
* @return void
*/
private function updateParams216()
{
// get all "mod_jem..." entries
$db = Factory::getContainer()->get('DatabaseDriver');
$query = $db->getQuery(true);
$query->select('id, params');
$query->from('#__modules');
$query->where('module = "' . $this->name . '"');
$db->setQuery($query);
$items = $db->loadObjectList();
foreach ($items as $item) {
// Decode the item params
$reg = new Registry;
$reg->loadString($item->params);
$modified = false;
// catid - if string then convert to array
$ids = $reg->get('catid');
if (!empty($ids) && is_string($ids)) {
$reg->set('catid', explode(',', $ids));
$modified = true;
}
// venid - if string then convert to array
$ids = $reg->get('venid');
if (!empty($ids) && is_string($ids)) {
$reg->set('venid', explode(',', $ids));
$modified = true;
}
// write back
if ($modified) {
// write changed params back into DB
$query = $db->getQuery(true);
$query->update('#__modules');
$query->set('params = '.$db->quote((string)$reg));
$query->where(array('id = '.$db->quote($item->id)));
$db->setQuery($query);
$db->execute();
}
}
}
}

View File

@ -0,0 +1,55 @@
.jem-teaser-calendar {
width: 80px;
height: 80px;
position: relative;
overflow: hidden;
box-shadow: 3px 4px 4px -3px rgba(0, 0, 0, 0.3), -3px 4px 4px -3px rgba(0, 0, 0, 0.3);
border-radius: 0 0 5px 5px;
}
.jem-teaser-calendar .color-bar {
position: absolute;
top: 5px;
left: 0;
right: 0;
height: 24px;
border-radius: 5px 5px 0 0;
}
.jem-teaser-calendar .lower-background {
position: absolute;
top: 29px;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(to top, #ddd 0%, #fff 50%);
}
.jem-teaser-calendar .background-image {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: url('img/cal.png');
background-repeat: no-repeat;
background-position: top;
background-size: contain;
z-index: 1;
}
#jemmoduleteaser [class|="calendar"] .monthteaser.monthcolor-dark {
color: black;
text-shadow: -1px -1px 0 rgba(255,255,255,0.2),
1px -1px 0 rgba(255,255,255,0.2),
-1px 1px 0 rgba(255,255,255,0.2),
1px 1px 0 rgba(255,255,255,0.2);
}
#jemmoduleteaser [class|="calendar"] .monthteaser.monthcolor-light {
color: #FFF;
text-shadow: -1px -1px 0 rgba(0,0,0,0.2),
1px -1px 0 rgba(0,0,0,0.2),
-1px 1px 0 rgba(0,0,0,0.2),
1px 1px 0 rgba(0,0,0,0.2);
}

View File

@ -0,0 +1,113 @@
<?php
/**
* @version 2.3.6
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2020 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
defined('_JEXEC') or die;
if ($params->get('use_modal', 0)) {
JHtml::_('behavior.modal', 'a.flyermodal');
$modal = 'flyermodal';
} else {
$modal = 'notmodal';
}
?>
<div class="jemmoduleteaser<?php echo $params->get('moduleclass_sfx')?>" id="jemmoduleteaser">
<?php ?>
<div class="eventset" summary="mod_jem_teaser">
<?php if (count($list)) : ?>
<?php foreach ($list as $item) : ?>
<h2 class="event-title">
<?php if ($item->eventlink) : ?>
<a href="<?php echo $item->eventlink; ?>" title="<?php echo $item->fulltitle; ?>"><?php echo $item->title; ?></a>
<?php else : ?>
<?php echo $item->title; ?>
<?php endif; ?>
</h2>
<table>
<tr>
<td class="event-calendar">
<div class="calendar<?php echo '-'.$item->colorclass; ?>"
title="<?php echo strip_tags($item->dateinfo); ?>"
<?php if (!empty($item->color)) : ?>
style="background-color: <?php echo $item->color; ?>"
<?php endif; ?>
>
<div class="monthteaser">
<?php echo $item->month; ?>
</div>
<div class="dayteaser">
<?php echo empty($item->dayname) ? '<br/>' : $item->dayname; ?>
</div>
<div class="daynumteaser">
<?php echo empty($item->daynum) ? '?' : $item->daynum; ?>
</div>
</div>
</td>
<td class="event-info">
<div class="teaser-jem">
<div>
<?php if(!empty($item->eventimage)) : ?>
<a href="<?php echo $item->eventimageorig; ?>" class="<?php echo $modal;?>" title="<?php echo $item->fulltitle; ?> ">
<img class="float_right image-preview" src="<?php echo $item->eventimage; ?>" alt="<?php echo $item->title; ?>" /></a>
<?php else : ?>
<?php endif; ?>
<?php if(!empty($item->venueimage)) : ?>
<a href="<?php echo $item->venueimageorig; ?>" class="<?php echo $modal;?>" title="<?php echo $item->venue; ?> ">
<img class="float_right image-preview" src="<?php echo $item->venueimage; ?>" alt="<?php echo $item->venue; ?>" /></a>
<?php endif; ?>
</div>
<div>
<?php echo $item->eventdescription; ?>
<?php if (isset($item->link) && $item->readmore != 0 && $params->get('readmore')) :
echo '<a class="readmore" href="'.$item->link.'">'.$item->linkText.'</a>';
endif;
?>
</div>
</div>
</td>
</tr>
<tr>
<td class="event-datetime">
<?php if ($item->date && $params->get('datemethod', 1) == 2) :?>
<div class="date" title="<?php echo strip_tags($item->dateinfo); ?>">
<small><?php echo $item->date; ?></small>
</div>
<?php endif; ?>
<?php if ($item->time && $params->get('datemethod', 1) == 1) :?>
<div class="time" title="<?php echo strip_tags($item->dateinfo); ?>">
<small><?php echo $item->time; ?></small>
</div>
<?php endif; ?>
</td>
<td class="event-vencat">
<?php if (!empty($item->venue)) : ?>
<div class="venue-title">
<?php if ($item->venuelink) : ?>
<a href="<?php echo $item->venuelink; ?>" title="<?php echo $item->venue; ?>"><?php echo $item->venue; ?></a>
<?php else : ?>
<?php echo $item->venue; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if (!empty($item->catname)) : ?>
<div class="category">
<?php echo $item->catname; ?>
</div>
<?php endif; ?>
</td>
</tr>
</table>
<?php endforeach; ?>
<?php else : ?>
<?php echo JText::_('MOD_JEM_TEASER_NO_EVENTS'); ?>
<?php endif; ?>
</div>
</div>

View File

@ -0,0 +1,119 @@
/**
* @version 2.3.6
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2020 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
div#jemmoduleteaser {
width: 100%;
}
div#jemmoduleteaser .teaser-jem a,
div#jemmoduleteaser .venue-title a {
background-color: transparent;
/*color:#095197;*/
}
#jemmoduleteaser td.event-calendar {
width: 1%; /* keep it as small as possible */
}
#jemmoduleteaser [class|="calendar"] {
background-repeat: no-repeat;
width: 82px;
height: 82px; /* + padding = 87px */
font-family: 'Lucida Grande',Geneva,Arial,Verdana,sans-serif;
text-align: center;
padding: 5px 1px 0 0;
float:left;
margin-right:10px;
line-height: 24px;
}
#jemmoduleteaser span.share {
margin-left:95px;
}
#jemmoduleteaser [class|="calendar"] .yearteaser {
font-size: 6px;
height:5px;
color: #e1e1e1;
}
#jemmoduleteaser [class|="calendar"] .monthteaser {
font-size: 8px;
color: white;
text-transform:uppercase;
font-weight:bold;
text-shadow: #666 1px 1px 1px;
height:20px;
}
#jemmoduleteaser [class|="calendar"] .dayteaser {
font-weight:bold;
font-size: 12px;
padding-top:3px;
color: #333;
}
#jemmoduleteaser [class|="calendar"] .daynumteaser {
font-size: 29px;
font-weight:bold;
color: #FF6400;
text-shadow: #000 1px 1px 1px;
}
div#jemmoduleteaser .eventset {
width: 100%;
margin-bottom: 10px;
padding: 5px;
border-bottom: 1px dotted silver;
text-align: left;
}
div#jemmoduleteaser .event-title {
padding-left: 8px;
font-size: medium;
}
div#jemmoduleteaser .time {
padding-left: 20px;
background: url(../img/time.png) 0 center no-repeat;
padding-top: 2px;
}
div#jemmoduleteaser div.date {
padding-left: 0px;
padding-top: 2px;
}
div#jemmoduleteaser .category {
position: relative;
padding-left: 20px;
background: url(../img/category.png) 0 center no-repeat;
font-size: smaller;
}
div#jemmoduleteaser .venue-title {
position: relative;
padding-left: 20px;
background: url(../img/venue.png) 0 center no-repeat;
font-size: smaller;
}
div#jemmoduleteaser .event-image-cell {
}
div#jemmoduleteaser .venue-image-cell {
}
div#jemmoduleteaser .image-preview {
height: 35px;
border: 1px solid #CCCCCC;
padding: 3px;
background-color: white;
margin: 3px;
}

View File

@ -0,0 +1,10 @@
/**
* @version 2.3.6
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2020 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
/* This template uses images in any case, so keep this empty file to prevent legacy fallback. */

View File

@ -0,0 +1,10 @@
/**
* @version 2.3.6
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2020 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
/* This template uses images in any case, so keep this empty file to prevent legacy fallback. */

View File

@ -0,0 +1,12 @@
#jemmoduleteaser .calendar-blue {
background-image: url(img/calendar_blue.png);
background-size: 100%;
}
#jemmoduleteaser .calendar-blue .monthteaser {
color: #fff;
text-shadow: -1px -1px 0 rgba(0,0,0,0.2),
1px -1px 0 rgba(0,0,0,0.2),
-1px 1px 0 rgba(0,0,0,0.2),
1px 1px 0 rgba(0,0,0,0.2);
}

View File

@ -0,0 +1,55 @@
.jem-teaser-calendar {
width: 80px;
height: 80px;
position: relative;
overflow: hidden;
box-shadow: 3px 4px 4px -3px rgba(0, 0, 0, 0.3), -3px 4px 4px -3px rgba(0, 0, 0, 0.3);
border-radius: 0 0 5px 5px;
}
.jem-teaser-calendar .color-bar {
position: absolute;
top: 5px;
left: 0;
right: 0;
height: 24px;
border-radius: 5px 5px 0 0;
}
.jem-teaser-calendar .lower-background {
position: absolute;
top: 29px;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(to top, #ddd 0%, #fff 50%);
}
.jem-teaser-calendar .background-image {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: url('img/cal.png');
background-repeat: no-repeat;
background-position: top;
background-size: contain;
z-index: 1;
}
#jemmoduleteaser [class|="calendar"] .monthteaser.monthcolor-dark {
color: black;
text-shadow: -1px -1px 0 rgba(255,255,255,0.2),
1px -1px 0 rgba(255,255,255,0.2),
-1px 1px 0 rgba(255,255,255,0.2),
1px 1px 0 rgba(255,255,255,0.2);
}
#jemmoduleteaser [class|="calendar"] .monthteaser.monthcolor-light {
color: #FFF;
text-shadow: -1px -1px 0 rgba(0,0,0,0.2),
1px -1px 0 rgba(0,0,0,0.2),
-1px 1px 0 rgba(0,0,0,0.2),
1px 1px 0 rgba(0,0,0,0.2);
}

View File

@ -0,0 +1,148 @@
<?php
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
$showcalendar = (int)$params->get('showcalendar', 1);
if ($params->get('use_modal', 0)) {
echo JemOutput::lightbox();
$modal = 'lightbox';
} else {
$modal = 'notmodal';
}
?>
<div class="jemmoduleteaser<?php echo $params->get('moduleclass_sfx')?>" id="jemmoduleteaser">
<div class="eventset" >
<?php if (count($list)) : ?>
<?php foreach ($list as $item) : ?>
<div class="event_id<?php echo $item->eventid; ?>" itemprop="event" itemscope itemtype="https://schema.org/Event">
<h2 class="event-title" itemprop="name">
<?php if ($item->eventlink) : ?>
<a href="<?php echo $item->eventlink; ?>" title="<?php echo $item->fulltitle; ?>" itemprop="url"><?php echo $item->title; ?></a>
<?php else : ?>
<?php echo $item->title; ?>
<?php endif; ?>
</h2>
<table>
<tr>
<td class="event-calendar">
<?php if ($showcalendar == 1) :?>
<?php if ($item->colorclass === "category" || $item->colorclass === "alpha"): ?>
<div class="calendar<?php echo '-' . $item->colorclass; ?> jem-teaser-calendar" title="<?php echo strip_tags($item->dateinfo); ?>">
<div class="color-bar" style="background-color:<?php echo !empty($item->color) ? $item->color : 'rgb(128,128,128)'; ?>"></div>
<div class="lower-background"></div>
<div class="background-image"></div>
<?php else: ?>
<div class="calendar<?php echo '-' . $item->colorclass; ?> jem-teaser-calendar"
title="<?php echo strip_tags($item->dateinfo); ?>">
<?php endif; ?>
<div class="monthteaser<?php
echo isset($item->color_is_dark)
? ($item->color_is_dark === 1
? ' monthcolor-light">'
: ($item->color_is_dark === 0
? ' monthcolor-dark">'
: '">'))
: '">';
echo $item->startdate['month']; ?>
</div>
<div class="dayteaser">
<?php echo $item->startdate['weekday']; ?>
</div>
<div class="daynumteaser">
<?php echo $item->startdate['day']; ?>
</div>
</div>
<?php endif; ?>
</td>
<td class="event-info">
<div class="teaser-jem">
<div>
<?php if($item->showimageevent): ?>
<?php if(strpos($item->eventimage,'/media/com_jem/images/blank.png') === false) : ?>
<a href="<?php echo $item->eventimageorig; ?>" class="teaser-flyerimage" rel="<?php echo $modal;?>" data-lightbox="teaser-flyerimage-<?php echo $item->eventid ?>" title="<?php echo Text::_('COM_JEM_CLICK_TO_ENLARGE'); ?>" data-title="<?php echo Text::_('COM_JEM_EVENT') .': ' . $item->fulltitle; ?>">
<img class="float_right image-preview" style="height:auto" src="<?php echo $item->eventimage; ?>" alt="<?php echo $item->title; ?>" itemprop="image" /></a>
<?php endif; ?>
<?php endif; ?>
<?php if($item->showimagevenue): ?>
<?php if(strpos($item->venueimage,'/media/com_jem/images/blank.png') === false) : ?>
<?php if(!empty($item->venueimage)) : ?>
<a href="<?php echo $item->venueimageorig; ?>" class="teaser-flyerimage" rel="<?php echo $modal;?>" data-lightbox="teaser-flyerimage-<?php echo $item->eventid ?>" title="<?php echo Text::_('COM_JEM_CLICK_TO_ENLARGE'); ?>" data-title="<?php echo Text::_('COM_JEM_VENUE') .': ' . $item->venue; ?>">
<img class="float_right image-preview" style="height:auto" src="<?php echo $item->venueimage; ?>" alt="<?php echo $item->venue; ?>" /></a>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
</div>
<div>
<?php if($item->showdescriptionevent): ?>
<div class="jem-description-teaser" itemprop="description">
<?php echo $item->eventdescription;
if (isset($item->link) && $item->readmore != 0 && $params->get('readmore')) :
echo '<a class="readmore" style="padding-left: 10px;" href="'.$item->link.'">'.$item->linkText.'</a>';
endif; ?>
</div>
<?php endif; ?>
</div>
</div>
</td>
</tr>
<tr>
<td class="event-datetime">
<?php if ($item->date && $params->get('datemethod', 1) == 2) :?>
<div class="date" title="<?php echo strip_tags($item->dateinfo); ?>">
<small><?php echo $item->date; ?></small>
</div>
<?php endif; ?>
<?php if ($item->time && $params->get('datemethod', 1) == 1) :?>
<div class="time" title="<?php echo strip_tags($item->dateinfo); ?>">
<small><?php echo $item->time; ?></small>
</div>
<?php endif;
echo $item->dateschema; ?>
<div itemprop="location" itemscope itemtype="https://schema.org/Place" style="display:none;">
<meta itemprop="name" content="<?php echo $item->venue; ?>" />
<div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress" style="display:none;">
<meta itemprop="streetAddress" content="<?php echo $item->street; ?>" />
<meta itemprop="addressLocality" content="<?php echo $item->city; ?>" />
<meta itemprop="addressRegion" content="<?php echo $item->state; ?>" />
<meta itemprop="postalCode" content="<?php echo $item->postalCode; ?>" />
</div>
</div>
</td>
<td class="event-vencat">
<?php if (!empty($item->venue)) : ?>
<div class="venue-title">
<?php if ($item->venuelink) : ?>
<a href="<?php echo $item->venuelink; ?>" title="<?php echo $item->venue; ?>"><?php echo $item->venue; ?></a>
<?php else : ?>
<?php echo $item->venue; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if (!empty($item->catname)) : ?>
<div class="category">
<?php echo $item->catname; ?>
</div>
<?php endif; ?>
</td>
</tr>
</table>
</div>
<?php endforeach; ?>
<?php else : ?>
<?php echo Text::_('MOD_JEM_TEASER_NO_EVENTS'); ?>
<?php endif; ?>
</div>
</div>

View File

@ -0,0 +1,12 @@
#jemmoduleteaser .calendar-green {
background-image: url(img/calendar_green.png);
background-size: 100%;
}
#jemmoduleteaser .calendar-green .monthteaser {
color: #fff;
text-shadow: -1px -1px 0 rgba(0,0,0,0.2),
1px -1px 0 rgba(0,0,0,0.2),
-1px 1px 0 rgba(0,0,0,0.2),
1px 1px 0 rgba(0,0,0,0.2);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 971 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,124 @@
/*
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
div#jemmoduleteaser {
width: 100%;
}
div#jemmoduleteaser [class^="event_id"]:not(:last-of-type) {
padding-bottom:0.5em;
margin-bottom: 0.5em;
border-bottom: 1px silver solid;
}
div#jemmoduleteaser .teaser-jem a,
div#jemmoduleteaser .venue-title a {
background-color: transparent;
/*color:#095197;*/
}
#jemmoduleteaser td.event-calendar {
width: 1%; /* keep it as small as possible */
}
#jemmoduleteaser [class|="calendar"] {
background-repeat: no-repeat;
width: 81px;
height: 85px;
text-align: center;
padding: 5px 1px 0 0;
margin: 0 10px 10px 0;
line-height: 24px;
box-shadow: 3px 4px 4px -3px rgba(0, 0, 0, 0.3), -3px 4px 4px -3px rgba(0, 0, 0, 0.3);
}
#jemmoduleteaser [class|="calendar"] .yearteaser,
#jemmoduleteaser [class|="calendar"] .monthteaser {
font-size: 13px;
height: 24px;
}
#jemmoduleteaser [class|="calendar"] .monthteaser,
#jemmoduleteaser [class|="calendar"] .dayteaser,
#jemmoduleteaser [class|="calendar"] .daynumteaser {
font-weight: bold;
position: relative;
z-index: 2;
display: block;
padding: 0;
text-align: center;
}
#jemmoduleteaser [class|="calendar"] .monthteaser {
padding-top: 2px;
}
#jemmoduleteaser [class|="calendar"] .dayteaser {
font-size: 12px;
min-height: 0.8rem;
}
#jemmoduleteaser [class|="calendar"] .daynumteaser {
font-size: 150%;
}
#jemmoduleteaser span.share {
margin-left:95px;
}
#jemmoduleteaser [class|="calendar"] .yearteaser {
font-size: 6px;
height:5px;
color: #e1e1e1;
}
div#jemmoduleteaser .eventset {
width: 100%;
padding: 5px;
text-align: left;
}
div#jemmoduleteaser .event-datetime {vertical-align: top;}
div#jemmoduleteaser .event-title {
font-size: medium;
}
div#jemmoduleteaser .time {
padding-top: 2px;
}
div#jemmoduleteaser div.date {
padding-top: 2px;
}
div#jemmoduleteaser .category {
position: relative;
font-size: smaller;
padding-top: 4px;
}
div#jemmoduleteaser .venue-title {
position: relative;
font-size: smaller;
padding-top: 4px;
}
div#jemmoduleteaser .event-image-cell {
}
div#jemmoduleteaser .venue-image-cell {
}
div#jemmoduleteaser .image-preview {
height: 35px;
border: 1px solid #CCCCCC;
padding: 3px;
background-color: white;
margin: 3px;
}

View File

@ -0,0 +1,31 @@
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
div#jemmoduleteaser .time:before,
div#jemmoduleteaser div.date:before,
div#jemmoduleteaser .category:before,
div#jemmoduleteaser .venue-title:before {
font-family:var(--fa-style-family,"Font Awesome 6 Free", "Font Awesome 5 Free");
font-weight:var(--fa-style,900);
}
div#jemmoduleteaser .time:before {
content:"\f017";
}
div#jemmoduleteaser div.date:before {
content:"\f133";
}
div#jemmoduleteaser .category:before {
content:"\f02b";
}
div#jemmoduleteaser .venue-title:before {
content:"\f041";
}

View File

@ -0,0 +1,26 @@
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
div#jemmoduleteaser .time {
padding-left: 20px;
background: url(img/time.png) 0 center no-repeat;
}
div#jemmoduleteaser div.date {
padding-left: 0;
}
div#jemmoduleteaser .category {
padding-left: 20px;
background: url(img/category.png) 0 center no-repeat;
}
div#jemmoduleteaser .venue-title {
padding-left: 20px;
background: url(img/building.png) 0 center no-repeat;
}

View File

@ -0,0 +1,12 @@
#jemmoduleteaser .calendar-orange {
background-image: url(img/calendar_orange.png);
background-size: 100%;
}
#jemmoduleteaser .calendar-orange .monthteaser {
color: #fff;
text-shadow: -1px -1px 0 rgba(0,0,0,0.2),
1px -1px 0 rgba(0,0,0,0.2),
-1px 1px 0 rgba(0,0,0,0.2),
1px 1px 0 rgba(0,0,0,0.2);
}

View File

@ -0,0 +1,12 @@
#jemmoduleteaser .calendar-red {
background-image: url(img/calendar_red.png);
background-size: 100%;
}
#jemmoduleteaser .calendar-red .monthteaser {
color: #fff;
text-shadow: -1px -1px 0 rgba(0,0,0,0.2),
1px -1px 0 rgba(0,0,0,0.2),
-1px 1px 0 rgba(0,0,0,0.2),
1px 1px 0 rgba(0,0,0,0.2);
}

View File

@ -0,0 +1,248 @@
<?php
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Factory;
use Joomla\CMS\Uri\Uri;
if ($params->get('use_modal', 0)) {
echo JemOutput::lightbox();
$modal = 'lightbox';
} else {
$modal = 'notmodal';
}
$imagewidth = 'inherit';
if ($jemsettings->imagewidth != 0) {
$imagewidth = $jemsettings->imagewidth .'px';
}
$imagewidthstring = 'jem-imagewidth';
if (JemHelper::jemStringContains($params->get('moduleclass_sfx'), $imagewidthstring)) {
$pageclass_sfx = $params->get('moduleclass_sfx');
$imagewidthpos = strpos($pageclass_sfx, $imagewidthstring);
$spacepos = strpos($pageclass_sfx, ' ', $imagewidthpos);
if ($spacepos === false) {
$spacepos = strlen($pageclass_sfx);
}
$startpos = $imagewidthpos + strlen($imagewidthstring);
$endpos = $spacepos - $startpos;
$imagewidth = substr($pageclass_sfx, $startpos, $endpos);
}
$imageheight = 'auto';
$imageheigthstring = 'jem-imageheight';
if (JemHelper::jemStringContains($params->get('moduleclass_sfx'), $imageheigthstring)) {
$pageclass_sfx = $params->get('moduleclass_sfx');
$imageheightpos = strpos($pageclass_sfx, $imageheigthstring);
$spacepos = strpos($pageclass_sfx, ' ', $imageheightpos);
if ($spacepos === false) {
$spacepos = strlen($pageclass_sfx);
}
$startpos = $imageheightpos + strlen($imageheigthstring);
$endpos = $spacepos - $startpos;
$imageheight = substr($pageclass_sfx, $startpos, $endpos);
}
$document = Factory::getDocument();
$css = '
#jemmoduleteaser .jem-eventimg-teaser img {
width: 100%;
height: ' . $imageheight . ';
}
@media not print {
@media only all and (max-width: 47.938rem) {
#jemmoduleteaser .jem-eventimg-teaser img {
width: ' . $imagewidth . ';
height: ' . $imageheight . ';
}
}
}';
$document->addStyleDeclaration($css);
?>
<div class="jemmoduleteaser<?php echo $params->get('moduleclass_sfx')?>" id="jemmoduleteaser">
<div class="eventset">
<?php if (count($list)) : ?>
<?php
$titletag = '<h2 class="event-title" itemprop="name">';
$titleendtag = '</h2>';
if ($module->showtitle) {
$titletag = '<h3 class="event-title" itemprop="name">';
$titleendtag = '</h3>';
}
?>
<?php foreach ($list as $item) : ?>
<div class="event_id<?php echo $item->eventid; ?>" itemprop="event" itemscope itemtype="https://schema.org/Event">
<?php echo $titletag; ?>
<?php if ($item->eventlink) : ?>
<a href="<?php echo $item->eventlink; ?>" title="<?php echo $item->fulltitle; ?>" itemprop="url"><?php echo $item->title; ?></a>
<?php else : ?>
<?php echo $item->title; ?>
<?php endif; ?>
<?php echo $titleendtag; ?>
<div class="jem-row-teaser jem-teaser-event">
<?php if ($item->colorclass === "category" || $item->colorclass === "alpha"): ?>
<div class="calendar<?php echo '-' . $item->colorclass; ?> jem-teaser-calendar" title="<?php echo strip_tags($item->dateinfo); ?>">
<div class="color-bar" style="background-color:<?php echo !empty($item->color) ? $item->color : 'rgb(128,128,128)'; ?>"></div>
<div class="lower-background"></div>
<div class="background-image"></div>
<?php else : ?>
<div class="calendar<?php echo '-' . $item->colorclass; ?> jem-teaser-calendar" title="<?php echo strip_tags($item->dateinfo); ?>"<?php if (!empty($item->color)): ?> style="background-color: <?php echo $item->color; ?>"<?php endif; ?>>
<?php endif; ?>
<div class="monthteaser<?php
echo isset($item->color_is_dark)
? ($item->color_is_dark === 1
? ' monthcolor-light">'
: ($item->color_is_dark === 0
? ' monthcolor-dark">'
: '">'))
: '">';
echo $item->startdate['month']; ?>
</div>
<div class="dayteaser">
<?php echo empty($item->dayname) ? '<br/>' : $item->dayname; ?>
</div>
<div class="daynumteaser">
<?php echo empty($item->daynum) ? '?' : $item->daynum; ?>
</div>
</div>
<div class="jem-event-details-teaser">
<div class="jem-row-teaser jem-teaser-datecat">
<?php if ($item->date && $params->get('datemethod', 1) == 2) :?>
<div class="date" title="<?php echo Text::_('COM_JEM_TABLE_DATE').': '.strip_tags($item->dateinfo); ?>">
<?php echo $item->date; ?>
</div>
<?php //endif; ?>
<?php elseif ($item->date && $params->get('datemethod', 1) == 1) : ?>
<div class="time" title="<?php echo Text::_('COM_JEM_TABLE_DATE').': '.strip_tags($item->dateinfo); ?>">
<?php echo $item->dateinfo; ?>
</div>
<?php //endif; ?>
<?php /* elseif ($item->time && $params->get('datemethod', 1) == 1) :?>
<div class="time" title="<?php echo strip_tags($item->dateinfo); ?>">
<i class="fa fa-clock-o" aria-hidden="true"></i>
<?php echo $item->time; ?>
</div>
<?php */endif; ?>
<?php if (!empty($item->venue)) : ?>
<?php if (!JemHelper::jemStringContains($params->get('moduleclass_sfx'), 'jem-novenue')) : ?>
<div class="venue-title" title="<?php echo Text::_('COM_JEM_TABLE_LOCATION').': '.strip_tags($item->venue); ?>">
<?php if ($item->venuelink) : ?>
<a href="<?php echo $item->venuelink; ?>"><?php echo $item->venue; ?></a>
<?php else : ?>
<?php echo $item->venue; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<?php endif; ?>
<?php if (!JemHelper::jemStringContains($params->get('moduleclass_sfx'), 'jem-nocats')) : ?>
<div class="category" title="<?php echo Text::_('COM_JEM_TABLE_CATEGORY').': '.strip_tags($item->catname); ?>">
<?php echo $item->catname; ?>
</div>
<?php endif; ?>
</div>
</div>
<div class="jem-event-image-teaser">
<div class="jem-row-image-teaser">
<?php if($item->showimageevent): ?>
<?php if(strpos($item->eventimage,'/media/com_jem/images/blank.png') === false) : ?>
<?php if (!JemHelper::jemStringContains($params->get('moduleclass_sfx'), 'jem-noimageevent')) : ?>
<?php if(!empty($item->eventimage)) : ?>
<div class="jem-eventimg-teaser">
<?php if ($params->get('use_modal')) : ?>
<?php if ($item->eventimageorig) {
$image = $item->eventimageorig;
$document = Factory::getDocument();
$document->addStyleSheet(Uri::base() .'media/com_jem/css/lightbox.min.css');
$document->addScript(Uri::base() . 'media/com_jem/js/lightbox.min.js');
echo '<script>lightbox.option({
\'showImageNumberLabel\': false,
})
</script>';
} else {
$image = '';
} ?>
<a href="<?php echo $image; ?>" class="teaser-flyerimage" data-lightbox="teaser-flyerimage-<?php echo $item->eventid; ?>" rel="<?php echo $modal;?>" title="<?php echo Text::_('COM_JEM_CLICK_TO_ENLARGE'); ?>" data-title="<?php echo Text::_('COM_JEM_EVENT') .': ' . $item->fulltitle; ?>">
<?php endif; ?>
<img class="float_right image-preview" src="<?php echo $item->eventimage; ?>" alt="<?php echo $item->title; ?>" itemprop="image" />
<?php if ($params->get('use_modal')) : ?>
</a>
<?php endif; ?>
</div>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
<?php if($item->showimagevenue): ?>
<?php if(strpos($item->venueimage,'/media/com_jem/images/blank.png') === false) : ?>
<?php if (!JemHelper::jemStringContains($params->get('moduleclass_sfx'), 'jem-noimagevenue')) : ?>
<?php if(!empty($item->venueimage)) : ?>
<div class="jem-eventimg-teaser">
<?php if ($params->get('use_modal')) : ?>
<?php if ($item->venueimageorig) {
$image = $item->venueimageorig;
} ?>
<a href="<?php echo $image; ?>" class="teaser-flyerimage" data-lightbox="teaser-flyerimage-<?php echo $item->eventid; ?>" rel="<?php echo $modal;?>" title="<?php echo Text::_('COM_JEM_CLICK_TO_ENLARGE'); ?>" data-title="<?php echo Text::_('COM_JEM_VENUE') .': ' . $item->venue; ?>">
<?php endif; ?>
<img class="float_right image-preview" src="<?php echo $item->venueimage; ?>" alt="<?php echo $item->venue; ?>" itemprop="image" />
<?php if ($params->get('use_modal')) : ?>
</a>
<?php endif; ?>
</div>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
<?php if($item->showdescriptionevent): ?>
<div class="jem-description-teaser" itemprop="description">
<?php
echo $item->eventdescription;
if (isset($item->link) && $item->readmore != 0 && $params->get('readmore')) : ?>
<div class="jem-readmore">
<a href="<?php echo $item->eventlink ?>" title="<?php echo Text::_('COM_JEM_EVENT_READ_MORE_TITLE'); ?>">
<?php echo Text::_('COM_JEM_EVENT_READ_MORE_TITLE'); ?>
</a>
</div>
<?php endif; ?>
</div>
<?php endif;
echo $item->dateschema; ?>
<div itemprop="location" itemscope itemtype="https://schema.org/Place" style="display:none;">
<meta itemprop="name" content="<?php echo $item->venue; ?>" />
<div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress" style="display:none;">
<meta itemprop="streetAddress" content="<?php echo $item->street; ?>" />
<meta itemprop="addressLocality" content="<?php echo $item->city; ?>" />
<meta itemprop="addressRegion" content="<?php echo $item->state; ?>" />
<meta itemprop="postalCode" content="<?php echo $item->postalCode; ?>" />
</div>
</div>
</div>
</div>
</div>
</div>
<?php
if ($item !== end($list)) :
echo '<hr class="jem-hr">';
endif;
?>
<?php endforeach; ?>
<?php else : ?>
<?php echo Text::_('MOD_JEM_TEASER_NO_EVENTS'); ?>
<?php endif; ?>
</div>
</div>

View File

@ -0,0 +1,184 @@
/*
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
/* Hoftix for SqueezeBox Modal overlay destroying images on mobile phones */
#sbox-overlay {
width: 100% !important;
}
#sbox-window {
height: auto !important;
}
#sbox-content {
height: auto !important;
width: auto !important;
max-height: 100%;
max-width: 100%;
}
body.body-overlayed {
overflow: auto;
}
#jemmoduleteaser .jem-row-teaser {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
}
#jemmoduleteaser .jem-row-image-teaser {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-end;
}
#jemmoduleteaser .jem-event-details-teaser {
flex: 1;
}
#jemmoduleteaser .jem-event-image-teaser {
flex: 1;
}
#jemmoduleteaser .jem-event-details-teaser .jem-row-teaser {
margin-bottom: 10px;
}
#jemmoduleteaser .jem-event-details-teaser .jem-row-teaser > div {
margin-right: 10px;
}
#jemmoduleteaser .jem-event-details-teaser .jem-row-teaser > div:last-child {
margin-right: 0;
}
#jemmoduleteaser .jem-eventimg-teaser {
float: right;
margin-left: 5px;
margin-bottom: 5px;
}
#jemmoduleteaser .event-title,
#jemmoduleteaser .jem-teaser-datecat {
hyphens: auto;
}
#jemmoduleteaser [class|="calendar"] {
background-repeat: no-repeat;
width: 81px;
height: 85px;
text-align: center;
padding: 5px 1px 0 0;
margin: 0 10px 10px 0;
line-height: 24px;
box-shadow: 3px 4px 4px -3px rgba(0, 0, 0, 0.3), -3px 4px 4px -3px rgba(0, 0, 0, 0.3);
}
#jemmoduleteaser [class|="calendar"] .yearteaser,
#jemmoduleteaser [class|="calendar"] .monthteaser {
font-size: 13px;
height: 24px;
}
#jemmoduleteaser [class|="calendar"] .monthteaser,
#jemmoduleteaser [class|="calendar"] .dayteaser,
#jemmoduleteaser [class|="calendar"] .daynumteaser {
font-weight:bold;
position: relative;
z-index: 2;
display: block;
padding: 0;
text-align: center;
}
#jemmoduleteaser [class|="calendar"] .monthteaser {
padding-top: 2px;
}
#jemmoduleteaser .time, #jemmoduleteaser .date {
font-weight: bold;
}
#jemmoduleteaser [class|="calendar"] .dayteaser {
font-size: 12px;
min-height: 0.8rem;
}
#jemmoduleteaser [class|="calendar"] .daynumteaser {
font-size: 150%;
}
@media not print {
@media only all and (max-width: 47.938rem) {
.jem-teaser-event {
display: block !important;
margin-bottom: 10px;
}
#jemmoduleteaser [class|="calendar"] {
margin-bottom: 10px;
}
.jem-eventimg-teaser {
display: block;
float: none;
margin-left: 0;
margin-bottom: 10px;
}
#jemmoduleteaser img {
display: block;
float: none !important;
}
}
}
@media print {
#main a:link, #main a:visited {
text-decoration: none;
color: inherit;
}
div#jem {
border: 0;
}
div#jem h2 {
border: none;
}
div#jem .flyerimage {
border: none !important;
}
a[href]:after {
content: none !important;
}
div#jem .buttons {
display: none;
}
abbr[title]:after {
content: none;
}
.ir a:after,
a[href^="javascript:"]:after,
a[href^="#"]:after {
content: none;
}
a:link:after, a:visited:after {
content: none;
}
div#jem .flyerimage {
border: none;
}
}

View File

@ -0,0 +1,9 @@
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
/* This template uses images in any case, so keep this empty file to prevent legacy fallback. */

View File

@ -0,0 +1,9 @@
/**
* @package JEM
* @subpackage JEM Teaser Module
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
/* This template uses images in any case, so keep this empty file to prevent legacy fallback. */