Version 4.7.8

This commit is contained in:
Neo committed 2025-12-19 16:10:42 -08:00
1 parent 7b7404e741
commit fd22d99e69
688 files changed
+19814 -10890

No files matched your search

+95 -25
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="calendar">
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.main.js" javascript_type="controller" javascript_version="107601" javascript_position="1000050"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.main.js" javascript_type="controller" javascript_version="107643" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -112,7 +112,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.monthView.js" javascript_type="controller" javascript_version="107601" javascript_position="1000050"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.monthView.js" javascript_type="controller" javascript_version="107643" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -231,7 +231,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/overview" javascript_name="ips.overview.carousel.js" javascript_type="controller" javascript_version="107601" javascript_position="1000100"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/overview" javascript_name="ips.overview.carousel.js" javascript_type="controller" javascript_version="107643" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -291,7 +291,7 @@
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/overview" javascript_name="ips.overview.eventList.js" javascript_type="controller" javascript_version="107601" javascript_position="1000100"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/overview" javascript_name="ips.overview.eventList.js" javascript_type="controller" javascript_version="107643" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -409,7 +409,7 @@ var PER_PAGE = 16;
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/overview" javascript_name="ips.overview.nearMe.js" javascript_type="controller" javascript_version="107601" javascript_position="1000100"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/overview" javascript_name="ips.overview.nearMe.js" javascript_type="controller" javascript_version="107643" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -776,7 +776,7 @@ var PER_PAGE = 16;
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/overview" javascript_name="ips.overview.search.js" javascript_type="controller" javascript_version="107601" javascript_position="1000100"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/overview" javascript_name="ips.overview.search.js" javascript_type="controller" javascript_version="107643" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -808,8 +808,6 @@ var PER_PAGE = 16;
*/
setup: function () {
var self = this;
// Other setup
this._gotCoords = false;
this._offset = 0;
@@ -837,6 +835,34 @@ var PER_PAGE = 16;
// Get map ready to show
if( ips.getSetting( 'mapProvider' ) === 'google' ){
this.setupGoogle();
} else {
this.setupMapbox();
}
},
setupGoogle: function(){
var self = this;
self._mapReady = true;
Debug.log( self._resultsContainer.find('[data-eventid]') );
Debug.log( self._mapContainer.attr('data-markers') );
if( self._resultsContainer.find('[data-eventid]').length && self._mapContainer.attr('data-markers') ){
Debug.log('here');
try {
var markers = JSON.parse( self._mapContainer.attr('data-markers') );
Debug.log( markers );
self._updateGoogleMap( markers );
} catch (err) {
Debug.log("Invalid marker JSON");
Debug.log(err);
}
}
},
setupMapbox: function(){
var self = this;
$('head').append( "<link rel='stylesheet' type='text/css' media='all' href='https://api.mapbox.com/mapbox.js/v3.3.1/mapbox.css'><link href='https://api.mapbox.com/mapbox.js/plugins/leaflet-markercluster/v1.0.0/MarkerCluster.css' rel='stylesheet' /><link href='https://api.mapbox.com/mapbox.js/plugins/leaflet-markercluster/v1.0.0/MarkerCluster.Default.css' rel='stylesheet' /><link rel='stylesheet' type='text/css' media='all' href='https://api.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v1.0.1/leaflet.fullscreen.css' />" );
ips.loader.get( [ 'https://api.mapbox.com/mapbox.js/v3.3.1/mapbox.js' ] ).then( function () {
@@ -844,17 +870,12 @@ var PER_PAGE = 16;
'https://api.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v1.0.1/Leaflet.fullscreen.min.js' ] ).then( function () {
self._mapReady = true;
Debug.log( self._resultsContainer.find('[data-eventid]') );
Debug.log( self._mapContainer.attr('data-markers') );
if( self._resultsContainer.find('[data-eventid]').length && self._mapContainer.attr('data-markers') ){
Debug.log('here');
try {
var markers = JSON.parse( self._mapContainer.attr('data-markers') );
Debug.log( markers );
self._updateMap( markers );
self._updateMapboxMap( markers );
} catch (err) {
Debug.log("Invalid marker JSON");
Debug.log(err);
@@ -862,7 +883,6 @@ var PER_PAGE = 16;
}
});
});
},
getInitialLocation: function () {
@@ -1076,7 +1096,57 @@ var PER_PAGE = 16;
});
},
_updateMap: function (markers) {
_updateMap: function ( markers ){
if( ips.getSetting( 'mapProvider' ) === 'google' ){
this._updateGoogleMap( markers );
} else {
this._updateMapboxMap( markers );
}
},
_updateGoogleMap: function (markers){
if( !this._map ){
this._map = new window.google.maps.Map( document.querySelector( '[data-role="searchResultsMap"]' ) );
this._mapMarkers = [];
}
this._mapContainer.removeClass('cEvents__searchMap--loading');
/* Clear existing markers before we rebuild */
if( this._mapMarkers.length ){
for ( let marker of Object.values(this._mapMarkers) ) {
marker.setMap(null);
}
this._mapMarkers = [];
}
var bounds = new google.maps.LatLngBounds();
for ( let marker of Object.values(markers) ) {
let mapMarker = new window.google.maps.Marker({
position: {lat: marker.lat, lng: marker.long},
map: this._map,
title: marker.title
});
this._mapMarkers.push( mapMarker );
var coords = new google.maps.LatLng( marker.lat, marker.long );
if( !( bounds.contains( coords ) ) ){
bounds.extend( coords );
}
}
/* If we have only one marker in here, fitting to the bounds zooms in way too much */
if( this._mapMarkers.length === 1 ){
this._map.setZoom(15);
this._map.setCenter(bounds.getCenter());
} else {
this._map.fitBounds( bounds );
}
this._mapContainer.show();
},
_updateMapboxMap: function (markers) {
if( !this._map ){
L.mapbox.accessToken = ips.getSetting('mapApiKey');
this._map = L.mapbox
@@ -1270,8 +1340,9 @@ var PER_PAGE = 16;
this._page.find('[data-role="searchResultsWrapper"]').hide();
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.dates.js" javascript_type="controller" javascript_version="107601" javascript_position="1000150"><![CDATA[/**
}(jQuery, _));
]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.dates.js" javascript_type="controller" javascript_version="107643" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1844,7 +1915,7 @@ var PER_PAGE = 16;
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/venue" javascript_name="ips.venue.main.js" javascript_type="controller" javascript_version="107601" javascript_position="1000200"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/venue" javascript_name="ips.venue.main.js" javascript_type="controller" javascript_version="107643" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1956,7 +2027,7 @@ var PER_PAGE = 16;
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderButton.js" javascript_type="controller" javascript_version="107601" javascript_position="1000250"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderButton.js" javascript_type="controller" javascript_version="107643" javascript_position="1000250"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -2039,7 +2110,7 @@ var PER_PAGE = 16;
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderForm.js" javascript_type="controller" javascript_version="107601" javascript_position="1000250">/**
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderForm.js" javascript_type="controller" javascript_version="107643" javascript_position="1000250">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -2149,7 +2220,7 @@ var PER_PAGE = 16;
});
}(jQuery, _));
</file>
<file javascript_app="calendar" javascript_location="front" javascript_path="templates" javascript_name="ips.calendar.templates.js" javascript_type="framework" javascript_version="107601" javascript_position="1000300"><![CDATA[/**
<file javascript_app="calendar" javascript_location="front" javascript_path="templates" javascript_name="ips.calendar.templates.js" javascript_type="framework" javascript_version="107643" javascript_position="1000300"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*/
@@ -2158,7 +2229,7 @@ var PER_PAGE = 16;
ips.templates.set('calendar.reminder.loading', " \
<div class='ipsLoading ipsLoading_tiny'></div>\
");]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.overview.js" javascript_type="template" javascript_version="107601" javascript_position="1000300"><![CDATA[ips.templates.set("eventLoading", "\
<file javascript_app="calendar" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.overview.js" javascript_type="template" javascript_version="107643" javascript_position="1000300"><![CDATA[ips.templates.set("eventLoading", "\
<li class='ipsBox ipsBox--child event event--withImage event--loading'>\
<div class='cEvents__skeleton cEvents__skeleton--eventImage'></div>\
<div class='cEvents__details'>\
@@ -2184,7 +2255,6 @@ controllers</order>
<order app="global" path="/dev/js//library/">underscore
jquery
mustache
jstz
IntersectionObserver
Debug.js
app.js</order>
+2 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="calendar" version="107601">
<app key="calendar" version="107643">
<word key="__app_calendar" js="0">Events</word>
<word key="frontnavigation_calendar" js="0">Events</word>
<word key="__indefart_calendar_event_comment" js="0">a comment on an event</word>
@@ -480,6 +480,7 @@
<word key="AchievementAction__Rsvp_log" js="0">RSVP'd to %s</word>
<word key="AchievementAction__Rsvp_title" js="0">Event RSVP</word>
<word key="menu__calendar_stats" js="0">Calendar</word>
<word key="emailstats__notification_event_reminder" js="0">Event Reminders</word>
<word key="menu__calendar_stats_rsvp" js="0">RSVP</word>
<word key="calendar_stats_rsvp_title" js="0">RSVPs over time</word>
<word key="calendar_stats_rsvp_response_0" js="0">Not Going</word>
+74 -50
View File
@@ -624,7 +624,7 @@
"comment": "",
"decimals": null,
"default": "0",
"length": 4,
"length": 1,
"name": "event_rsvp",
"type": "TINYINT",
"unsigned": false,
@@ -636,7 +636,7 @@
"comment": "",
"decimals": null,
"default": "0",
"length": 4,
"length": 1,
"name": "event_approved",
"type": "TINYINT",
"unsigned": false,
@@ -792,7 +792,7 @@
"comment": "Whether the event is locked (for new comments\/reviews) or not",
"decimals": null,
"default": "0",
"length": 3,
"length": 1,
"name": "event_locked",
"type": "TINYINT",
"unsigned": true,
@@ -804,7 +804,7 @@
"comment": "Whether the event is featured or not",
"decimals": null,
"default": "0",
"length": 3,
"length": 1,
"name": "event_featured",
"type": "TINYINT",
"unsigned": true,
@@ -876,7 +876,7 @@
"comment": "Maximum number of attendees allowed for the event",
"decimals": null,
"default": null,
"length": 11,
"length": 10,
"name": "event_rsvp_limit",
"type": "INT",
"unsigned": false,
@@ -1020,7 +1020,7 @@
"comment": "",
"decimals": null,
"default": null,
"length": 11,
"length": 10,
"name": "event_edit_time",
"type": "INT",
"unsigned": false,
@@ -1044,7 +1044,7 @@
"comment": "",
"decimals": null,
"default": "0",
"length": 4,
"length": 1,
"name": "event_append_edit",
"type": "TINYINT",
"unsigned": false,
@@ -1062,6 +1062,42 @@
"unsigned": false,
"values": []
},
"event_author_name": {
"allow_null": true,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": null,
"length": 255,
"name": "event_author_name",
"type": "VARCHAR",
"unsigned": false,
"values": []
},
"event_is_anon": {
"allow_null": false,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 10,
"name": "event_is_anon",
"type": "INT",
"unsigned": true,
"values": []
},
"event_external_url": {
"allow_null": true,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": null,
"length": 255,
"name": "event_external_url",
"type": "VARCHAR",
"unsigned": false,
"values": []
},
"event_latitude": {
"allow_null": true,
"auto_increment": false,
@@ -1086,33 +1122,45 @@
"unsigned": false,
"values": []
},
"event_author_name": {
"allow_null": true,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": null,
"length": 255,
"name": "event_author_name",
"type": "VARCHAR",
"unsigned": false,
"values": []
},
"event_is_anon": {
"event_online": {
"allow_null": false,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 10,
"name": "event_is_anon",
"type": "INT",
"length": 3,
"name": "event_online",
"type": "TINYINT",
"unsigned": true,
"values": []
},
"event_online": {
"name": "event_online",
"type": "TINYINT",
"event_url": {
"allow_null": true,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": null,
"length": 250,
"name": "event_url",
"type": "VARCHAR",
"unsigned": false,
"values": []
},
"event_online_type": {
"allow_null": true,
"auto_increment": false,
"comment": "",
"decimals": null,
"default": null,
"length": 250,
"name": "event_online_type",
"type": "VARCHAR",
"unsigned": false,
"values": []
},
"event_livetopic_id": {
"name": "event_livetopic_id",
"type": "INT",
"length": null,
"decimals": null,
"values": null,
@@ -1121,30 +1169,6 @@
"comment": "",
"unsigned": true,
"auto_increment": false
},
"event_url": {
"name": "event_url",
"type": "VARCHAR",
"length": 250,
"decimals": null,
"values": null,
"allow_null": true,
"default": null,
"comment": "",
"unsigned": false,
"auto_increment": false
},
"event_online_type": {
"name": "event_online_type",
"type": "VARCHAR",
"length": 250,
"decimals": null,
"values": null,
"allow_null": true,
"default": null,
"comment": "",
"unsigned": false,
"auto_increment": false
}
},
"indexes": {
+77 -65
View File
@@ -340,7 +340,7 @@
</ul>
</form>
</div>]]></template>
<template template_group="events" template_name="event" template_data="$event, $size='normal'" template_location="front" template_app="calendar"><![CDATA[
<template template_group="events" template_name="event" template_data="$event, $size='normal', $date=NULL" template_location="front" template_app="calendar"><![CDATA[{{$date = $date ?: \IPS\calendar\Date::getDate();}}
{{$sameDay = FALSE;}}
{{if $event->_end_date}}
{{$sameDay = !( ($event->_start_date->mday != $event->_end_date->mday) or ($event->_start_date->mon != $event->_end_date->mon) or ($event->_start_date->year != $event->_end_date->year) );}}
@@ -364,8 +364,8 @@
</a>
<div class='cEvent__dateAside'>
{{if $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
<span class='cEvent__dateAside__month'>{lang="_date_month_short" pluralize="$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format( 'n' )"}</span>
<span class='cEvent__dateAside__day'>{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format( 'd' )}</span>
<span class='cEvent__dateAside__month'>{lang="_date_month_short" pluralize="$event->nextOccurrence( $date, 'startDate' )->format( 'n' )"}</span>
<span class='cEvent__dateAside__day'>{$event->nextOccurrence( $date, 'startDate' )->format( 'd' )}</span>
{{else}}
<span class='cEvent__dateAside__month'>{lang="_date_month_short" pluralize="$event->lastOccurrence( 'startDate' )->format( 'n' )"}</span>
<span class='cEvent__dateAside__day'>{$event->lastOccurrence( 'startDate' )->format('d')}</span>
@@ -431,9 +431,9 @@
" data-ipsTooltip>{$event->_happening}</span>
{{else}}
<time datetime='{expression="$event->_start_date->format( 'Y-m-d' )"}'>
{{if $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
<span data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->calendarDate()}{{if !$event->all_day}}, {{endif}}
{{if $event->nextOccurrence( $date, 'startDate' )}}
<span data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( $date, 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
{$event->nextOccurrence( $date, 'startDate' )->calendarDate()}{{if !$event->all_day}}, {{endif}}
</span>
{{if !$event->all_day}}
<span data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
@@ -537,7 +537,7 @@
<div data-item="{$idx + 1}" class='cFeaturedEvents__event cFeaturedEvents__event--{$idx + 1}'>
{{if $image}}
<img class='cFeaturedEvents__image' src='{backgroundimage="$image->url"}' alt=''>
<img class='cFeaturedEvents__image' src='{$image->url}' alt=''>
{{endif}}
<div class='cFeaturedEvents__event-details'>
@@ -714,9 +714,7 @@
</li>
</ul>
</div>
{{if $mapMarkers and $mapMarkers !== '[]'}}
<div class='cEvents__searchMap cEvents__searchMap--loading event ipsAreaBackground ipsPad ipsSpacer_bottom ipsSpacer_double' data-role='searchResultsMap' {{if $mapMarkers}}data-markers="{$mapMarkers}"{{endif}}></div>
{{endif}}
<div class='cEvents__searchMap cEvents__searchMap--loading event ipsAreaBackground ipsPad ipsSpacer_bottom ipsSpacer_double' data-role='searchResultsMap' {{if $mapMarkers}}data-markers="{$mapMarkers}"{{endif}}></div>
<ul class='eventList {{if !\count( $results )}}ipsHide{{endif}}' data-role='searchResults'>
{template="searchResults" app="calendar" group="events" params="$results"}
</ul>
@@ -1327,8 +1325,7 @@
<p class='ipsType_light'>{$reason}</p>
</div>
{{endif}}]]></template>
<template template_group="overview" template_name="byMonth" template_data="$calendars, $date, $featured, $events, $thisCalendar, $months=array()" template_location="front" template_app="calendar"><![CDATA[
<section class='ipsBox' data-controller="calendar.front.overview.eventList">
<template template_group="overview" template_name="byMonth" template_data="$calendars, $date, $featured, $events, $thisCalendar, $months=array()" template_location="front" template_app="calendar"><![CDATA[<section class='ipsBox' data-controller="calendar.front.overview.eventList">
<h2 class='ipsType_sectionTitle'>{lang="events_browse_by_month"}</h2>
<div class='ipsPadding ipsAreaBackground_light ipsRadius:bl ipsRadius:br'>
<div class='cEvents__monthNav' data-role='monthNav'>
@@ -1344,7 +1341,7 @@
{{if \count($events) }}
<ul class='eventList' data-role='eventList'>
{{foreach $events as $event}}
{template="event" app="calendar" group="events" params="$event"}
{template="event" app="calendar" group="events" params="$event, 'normal', \IPS\calendar\Date::getDate( $date->firstDayOfMonth('year'), $date->firstDayOfMonth('mon'), $date->firstDayOfMonth('mday') )"}
{{endforeach}}
</ul>
<div class='ipsPadding_top ipsType_center'>
@@ -1366,12 +1363,36 @@
<ul class="ipsToolList ipsToolList_horizontal ipsClearfix">
<li class="ipsToolList_primaryAction">
{{if !\IPS\Settings::i()->club_nodes_in_apps and $theOnlyNode = \IPS\calendar\Calendar::theOnlyNode() }}
<a class="ipsButton ipsButton_medium ipsButton_important" href="{url="app=calendar&module=calendar&controller=submit&do=submit&id={$theOnlyNode->_id}" seoTemplate="calendar_submit"}">{lang="create_event"}</a>
{{elseif ( $thisCalendar AND $thisCalendar->can('add') )}}
<a class="ipsButton ipsButton_medium ipsButton_important" href='{url="app=calendar&module=calendar&controller=submit&do=submit&id={$thisCalendar->_id}" seoTemplate="calendar_submit"}' data-ipsTooltip title='{lang="add_event"}'>{lang="create_event"}</a>
{{elseif \IPS\calendar\Calendar::canOnAny('add')}}
<a class="ipsButton ipsButton_medium ipsButton_important" href="{url="app=calendar&module=calendar&controller=submit" seoTemplate="calendar_submit"}" data-ipsdialog="" data-ipsdialog-size="narrow" data-ipsdialog-title="{lang="select_calendar"}">{lang="create_event"}</a>
{{if \IPS\Application::appIsEnabled('cloud') and \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'cloud', 'livetopics' ) ) and \IPS\cloud\LiveTopic::canCreate( \IPS\Member::loggedIn() )}}
<a href="#elEventCreate_menu" id="elEventCreate" class="ipsButton ipsButton_medium ipsButton_important" data-ipsMenu>{lang="livetopic_create_event"} <i class="fa fa-caret-down"></i></a>
<ul id="elEventCreate_menu" class="ipsMenu ipsMenu_normal ipsHide">
<li class="ipsMenu_item" data-menuItem="livetopic">
{{if !\IPS\Settings::i()->club_nodes_in_apps and $theOnlyNode = \IPS\calendar\Calendar::theOnlyNode() }}
<a class="ipsMenu_link" href="{url="app=calendar&module=calendar&controller=submit&do=livetopic&id={$theOnlyNode->_id}" seoTemplate="calendar_submit"}">{lang="event_create_livetopic"}</a>
{{elseif ( $thisCalendar AND $thisCalendar->can('add') )}}
<a class="ipsMenu_link" href='{url="app=calendar&module=calendar&controller=submit&do=livetopic&id={$thisCalendar->_id}" seoTemplate="calendar_submit"}' data-ipsTooltip title='{lang="add_event"}'>{lang="event_create_livetopic"}</a>
{{elseif \IPS\calendar\Calendar::canOnAny('add')}}
<a class="ipsMenu_link" href="{url="app=calendar&module=calendar&controller=submit&do=livetopic" seoTemplate="calendar_submit"}">{lang="event_create_livetopic"}</a>
{{endif}}
</li>
<li class="ipsMenu_item" data-menuItem="event">
{{if !\IPS\Settings::i()->club_nodes_in_apps and $theOnlyNode = \IPS\calendar\Calendar::theOnlyNode() }}
<a class="ipsMenu_link" href="{url="app=calendar&module=calendar&controller=submit&do=submit&id={$theOnlyNode->_id}" seoTemplate="calendar_submit"}">{lang="event_create_normal"}</a>
{{elseif ( $thisCalendar AND $thisCalendar->can('add') )}}
<a class="ipsMenu_link" href='{url="app=calendar&module=calendar&controller=submit&do=submit&id={$thisCalendar->_id}" seoTemplate="calendar_submit"}' data-ipsTooltip title='{lang="add_event"}'>{lang="event_create_normal"}</a>
{{elseif \IPS\calendar\Calendar::canOnAny('add')}}
<a class="ipsMenu_link" href="{url="app=calendar&module=calendar&controller=submit" seoTemplate="calendar_submit"}" data-ipsdialog="" data-ipsdialog-size="narrow" data-ipsdialog-title="{lang="select_calendar"}">{lang="event_create_normal"}</a>
{{endif}}
</li>
</ul>
{{else}}
{{if !\IPS\Settings::i()->club_nodes_in_apps and $theOnlyNode = \IPS\calendar\Calendar::theOnlyNode() }}
<a class="ipsButton ipsButton_medium ipsButton_important" href="{url="app=calendar&module=calendar&controller=submit&do=submit&id={$theOnlyNode->_id}" seoTemplate="calendar_submit"}">{lang="create_event"}</a>
{{elseif ( $thisCalendar AND $thisCalendar->can('add') )}}
<a class="ipsButton ipsButton_medium ipsButton_important" href='{url="app=calendar&module=calendar&controller=submit&do=submit&id={$thisCalendar->_id}" seoTemplate="calendar_submit"}' data-ipsTooltip title='{lang="add_event"}'>{lang="create_event"}</a>
{{elseif \IPS\calendar\Calendar::canOnAny('add')}}
<a class="ipsButton ipsButton_medium ipsButton_important" href="{url="app=calendar&module=calendar&controller=submit" seoTemplate="calendar_submit"}" data-ipsdialog="" data-ipsdialog-size="narrow" data-ipsdialog-title="{lang="select_calendar"}">{lang="create_event"}</a>
{{endif}}
{{endif}}
</li>
<li>
@@ -1723,6 +1744,10 @@
{template="pageHeader" group="global" app="core" params="$pageHeader"}
{{if isset( \IPS\Request::i()->do ) and \IPS\Request::i()->do === 'livetopic'}}
<div class="ipsMargin_top ipsMargin_bottom">{lang="ai_service_livetopics_desc"}</div>
{{endif}}
{$output|raw}]]></template>
<template template_group="venue" template_name="upcomingStream" template_data="$date, $events, $venue" template_location="front" template_app="calendar"><![CDATA[
<div class='ipsPager cCalendarNav ipsSpacer_bottom lg:ipsPos_sticky'>
@@ -2168,6 +2193,11 @@
</div>
{{endif}}
{{endif}}
{{if $livetopic = $event->_livetopic_id}}
<div class='ipsBox ipsResponsive_pull ipsMargin_bottom ipsPadding'>
<a href='{$livetopic->url()}' target='_blank' class='ipsButton ipsButton_important ipsButton_fullWidth ipsMargin_bottom:half'>{lang="open_event"} <i class="fa fa-external-link" aria-hidden="true" style='margin-inline:.4em'></i></a>
</div>
{{endif}}
{{if $event->rsvp }}
<div class='ipsBox ipsResponsive_pull'>
@@ -2483,7 +2513,7 @@
{{endif}}
</div>]]></template>
<template template_group="view" template_name="rsvpControls" template_data="$event, $attendees" template_location="front" template_app="calendar"><![CDATA[<!-- Don't use IDs here, this template is called twice in view -->
{{if \IPS\Member::loggedIn()->member_id AND ( isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] ) OR isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] ) OR isset( $attendees[2][ \IPS\Member::loggedIn()->member_id ] ) )}}
{{if \IPS\Member::loggedIn()->member_id AND ( isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] ) OR isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] ) OR ( isset( $attendees[2][ \IPS\Member::loggedIn()->member_id ] ) ) AND \count( $attendees[1] ) < $event->rsvp_limit )}}
<div class='{{if isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}ipsAreaBackground_positive{{elseif isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] )}}ipsAreaBackground_negative{{else}}ipsAreaBackground_reset{{endif}} ipsPadding'>
<p class='ipsType_large ipsType_center ipsType_reset'>
<strong>
@@ -2592,7 +2622,7 @@
{template="contentItemMessages" group="global" app="core" params="$event->getMessages(), $event"}
<div id="sidebarWrapper">
{{if $event->rsvp || $address || $event->map( 270, 270 ) || $event->online }}
{{if $event->rsvp || $address || $event->map( 270, 270 ) || $event->online || $event->_livetopic_id }}
<div class='ipsColumns ipsColumns_collapsePhone'>
<div class='ipsColumn ipsColumn_fluid'>
{{endif}}
@@ -2608,7 +2638,7 @@
{{endif}}
</div>
<div class='ipsFlex-flex:01 ipsResponsive_hidePhone'>
<div class='ipsFlex ipsFlex-ai:center ipsFlex-fw:wrap ipsGap:2'>
<div class='ipsShareLinks'>
{{if \count( $event->shareLinks() )}}
{template="shareButton" app="core" group="sharelinks" params="$event"}
{{endif}}
@@ -2715,7 +2745,7 @@
</ul>
</div>
</div>
{{if $event->rsvp || $address || $event->map( 270, 270 ) || ( $event->online and $event->url and !$event->hasPassed() ) }}
{{if $event->rsvp || $address || $event->map( 270, 270 ) || ( $event->online and $event->url and !$event->hasPassed() ) || $event->_livetopic_id}}
</div>
<aside class='ipsColumn ipsColumn_veryWide'>
<div>
@@ -2728,23 +2758,15 @@
</section>
<div class='ipsBox ipsPadding ipsResponsive_pull ipsResponsive_showPhone ipsMargin_top'>
<div class='ipsGap_row:3'>
<div class='ipsShareLinks'>
{{if \count( $event->shareLinks() )}}
<div>
{template="shareButton" app="core" group="sharelinks" params="$event, 'verySmall', 'light'"}
</div>
{template="shareButton" app="core" group="sharelinks" params="$event, 'verySmall', 'light'"}
{{endif}}
{{if $event->canRemind()}}
<div>
{template="reminder" app="calendar" group="view" params="$event, $reminder, 'ipsButton_fullWidth'"}
</div>
{template="reminder" app="calendar" group="view" params="$event, $reminder, 'ipsButton_fullWidth'"}
{{endif}}
<div>
{template="follow" app="core" group="global" params="'calendar', 'event', $event->id, $event->followersCount()"}
</div>
<div>
{template="promote" app="core" group="global" params="$event"}
</div>
{template="follow" app="core" group="global" params="'calendar', 'event', $event->id, $event->followersCount()"}
{template="promote" app="core" group="global" params="$event"}
</div>
</div>
@@ -2766,27 +2788,25 @@
<template template_group="widgets" template_name="recentReviews" template_data="$reviews, $orientation='vertical'" template_location="front" template_app="calendar"><![CDATA[<h3 class='ipsType_reset ipsWidget_title'>{lang="block_recentReviews"}</h3>
<div class='ipsWidget_inner'>
{{if $orientation == 'vertical'}}
<div class='ipsPad_half'>
{{if !empty( $reviews ) }}
<ul class='ipsDataList ipsDataList_reducedSpacing'>
{{foreach $reviews as $review}}
<li class='ipsDataItem'>
<div class='ipsDataItem_icon'>
{template="userPhoto" app="core" group="global" params="$review->author(), 'tiny'"}
</div>
<div class='ipsDataItem_main ipsType_break ipsContained'>
<a href="{$review->item()->url( "getPrefComment" )}" title='{lang="view_this_event" sprintf="$review->item()->title"}' class='ipsTruncate ipsTruncate_line'>{$review->item()->title}</a><br>
<span class='ipsType_light ipsType_medium'>{lang="byline_nodate" htmlsprintf="$review->author()->link()"}</span><br>
{template="rating" group="global" location="front" app="core" params="'small', $review->rating, \IPS\Settings::i()->reviews_rating_out_of"} &nbsp;&nbsp;
<span class='ipsType_small ipsType_reset'><time datetime="{$review->mapped('date')}">{datetime="$review->mapped('date')" norelative="true"}</time></span>
</div>
</li>
{{endforeach}}
</ul>
{{else}}
<div class='ipsType_light ipsPad_half ipsType_center'>{lang="no_recent_reviews"}</div>
{{endif}}
</div>
{{if !empty( $reviews ) }}
<ul class='ipsDataList ipsDataList_reducedSpacing'>
{{foreach $reviews as $review}}
<li class='ipsDataItem'>
<div class='ipsDataItem_icon'>
{template="userPhoto" app="core" group="global" params="$review->author(), 'tiny'"}
</div>
<div class='ipsDataItem_main ipsType_break ipsContained'>
<a href="{$review->item()->url( "getPrefComment" )}" title='{lang="view_this_event" sprintf="$review->item()->title"}' class='ipsTruncate ipsTruncate_line'>{$review->item()->title}</a><br>
<span class='ipsType_light ipsType_medium'>{lang="byline_nodate" htmlsprintf="$review->author()->link()"}</span><br>
{template="rating" group="global" location="front" app="core" params="'small', $review->rating, \IPS\Settings::i()->reviews_rating_out_of"} &nbsp;&nbsp;
<span class='ipsType_small ipsType_reset'><time datetime="{$review->mapped('date')}">{datetime="$review->mapped('date')" norelative="true"}</time></span>
</div>
</li>
{{endforeach}}
</ul>
{{else}}
<div class='ipsType_light ipsPadding:half ipsType_center'>{lang="no_recent_reviews"}</div>
{{endif}}
{{else}}
{{if !empty( $reviews ) }}
<ul class='ipsDataList ipsDataList_reducedSpacing'>
@@ -2813,10 +2833,6 @@
<template template_group="widgets" template_name="upcomingEvents" template_data="$events, $today, $orientation='vertical'" template_location="front" template_app="calendar"><![CDATA[<h3 class='ipsType_reset ipsWidget_title'>{lang="block_upcomingEvents"}</h3>
<div class='ipsWidget_inner'>
{{if $orientation == 'vertical'}}
<div class='ipsPad_half'>
{{endif}}
{{if !empty( $events ) }}
<ul class='ipsDataList ipsDataList_reducedSpacing'>
@@ -2889,10 +2905,6 @@
<div class='ipsType_light ipsPad_half ipsType_center'>{lang="no_upcoming_events"}</div>
{{endif}}
{{if $orientation == 'vertical'}}
</div>
{{endif}}
</div>]]></template>
<css css_location="front" css_app="calendar" css_attributes="" css_path="." css_name="calendar_responsive.css"><![CDATA[/* BOTH */
@media screen and (max-width: 979px) {
+15 -1
View File
@@ -507,5 +507,19 @@
"107504": "4.7.5",
"107505": "4.7.5",
"107600": "4.7.6 Beta 1",
"107601": "4.7.6"
"107601": "4.7.6",
"107602": "4.7.6",
"107620": "4.7.7 Beta 1",
"107621": "4.7.7 Beta 2",
"107622": "4.7.7 Beta 2",
"107623": "4.7.7 Beta 3",
"107624": "4.7.7 Beta 4",
"107625": "4.7.7",
"107626": "4.7.7",
"107627": "4.7.7",
"107628": "4.7.7",
"107640": "4.7.8 Beta 1",
"107641": "4.7.8 Beta 2",
"107642": "4.7.8 Beta 3",
"107643": "4.7.8"
}