Version 4.2.0

This commit is contained in:
Neo committed 2025-12-19 05:44:59 -08:00
1 parent 0dc2aee5ed
commit 96997ddd8e
2074 files changed
+125454 -55780

No files matched your search

+6
View File
@@ -6,6 +6,12 @@
"do": "",
"restriction": "calendars_manage"
},
"venues": {
"tab": "community",
"controller": "venues",
"do": "",
"restriction": "venues_manage"
},
"ical": {
"tab": "community",
"controller": "ical",
@@ -5,6 +5,7 @@
"calendars_add": "calendars_add",
"calendars_edit": "calendars_edit",
"calendars_permissions": "calendars_permissions",
"calendars_massManageContent": "calendars_massManageContent",
"calendars_delete": "calendars_delete"
},
"ical": {
@@ -16,5 +17,10 @@
"settings": {
"settings_manage": "settings_manage"
}
},
"venues": {
"venues": {
"venues_manage": "venues_manage"
}
}
}
@@ -217,6 +217,15 @@
"events rss"
]
},
"app=calendar&module=calendars&controller=settings&searchResult=form_calendar_venues_enabled": {
"lang_key": "calendar_venues_enabled",
"restriction": "settings_manage",
"keywords": [
"address",
"venue",
"venues"
]
},
"app=calendar&module=calendars&controller=settings&searchResult=form_ipb_calendar_mon": {
"lang_key": "ipb_calendar_mon",
"restriction": "settings_manage",
+58 -1
View File
@@ -1,5 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<emails><template><template_app>calendar</template_app><template_name>notification_new_content</template_name><template_content_html><![CDATA[
<emails><template><template_app>calendar</template_app><template_name>notification_event_reminder</template_name><template_content_html><![CDATA[
{$email->language->addToStack("email_event_reminder", FALSE, array( 'sprintf' => array( $email->language->addToStack( "days_to_go", FALSE, array( 'pluralize' => array( $daysToGo ) ) ), $content->url(), $content->mapped('title') ) ) )}
<br />
<br />
{$email->language->addToStack("email_event_reminder_when", FALSE, array( 'sprintf' => array( $content->fixedDateTimeDescription( $email->language ) ) ) )}
{{if $content->location}}
<br />
{$email->language->addToStack("email_event_reminder_where", FALSE, array( 'sprintf' => array( \IPS\GeoLocation::buildFromjson( $content->location )->toString() ) ) )}
{{endif}}
<br />
<br />
<table width='100%' cellpadding='0' cellspacing='0' border='0'>
<tr>
<td dir='{dir}' width='40' valign='top' class='hidePhone' style='width: 0; max-height: 0; overflow: hidden; float: left;'>
<img src='{$content->author()->get_photo( true, true )}' width='40' height='40' style='border: 1px solid #777777; vertical-align: middle;'>
</td>
<td dir='{dir}' width='30' valign='top' class='hidePhone' style='width: 0; max-height: 0; overflow: hidden; float: left;'>
<br />
<span style='display: block; width: 0px; height: 0px; border-width: 15px; border-color: transparent #f9f9f9 transparent transparent; border-style: solid'></span>
</td>
<td dir='{dir}' valign='top' style='background: #f9f9f9;'>
<table width='100%' cellpadding='10' cellspacing='0' border='0'>
<tr>
<td dir='{dir}'>
<table width='100%' cellpadding='5' cellspacing='0' border='0'>
<tr>
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; line-height: 1.5; font-size: 14px; color: #8d8d8d">
{$email->language->addToStack("email_posted_in", FALSE, array( 'sprintf' => array( $content->container()->_title ) ) )}
</td>
</tr>
<tr>
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; line-height: 1.5; font-size: 14px;">
{$email->parseTextForEmail( $content->content(), $email->language )|raw}
</td>
</tr>
<tr>
<td dir='{dir}'>
<a href='{$content->url()}' style="color: #ffffff; font-family: 'Helvetica Neue', helvetica, sans-serif; text-decoration: none; font-size: 14px; background: {setting="email_color"}; line-height: 32px; padding: 0 10px; display: inline-block; border-radius: 3px;">{$email->language->addToStack("go_to_this_x", FALSE, array( 'sprintf' => array( mb_strtolower( $email->language->addToStack( $content::$title, FALSE ) ) ) ) )}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br /><br />
<em style='color: #8c8c8c'>&mdash; {setting="board_name"}</em>]]></template_content_html><template_data>$content, $daysToGo, $email</template_data><template_content_plaintext><![CDATA[{$email->language->addToStack("email_event_reminder_plain", FALSE, array( 'sprintf' => array( $email->language->addToStack( "days_to_go", FALSE, array( 'pluralize' => array( $daysToGo ) ) ), $content->mapped('title') ) ) )}
{$email->language->addToStack("email_event_reminder_when", FALSE, array( 'sprintf' => array( $content->fixedDateTimeDescription( $email->language ) ) ) )}
{{if $content->location}}{$email->language->addToStack("email_event_reminder_where", FALSE, array( 'sprintf' => array( \IPS\GeoLocation::buildFromjson( $content->location )->toString() ) ) )}{{endif}}
{$email->language->addToStack("go_to_this_x", FALSE, array( 'sprintf' => array( mb_strtolower( $email->language->addToStack( $content::$title, FALSE ) ) ) ) )}: {$content->url()}
-- {setting="board_name"}]]></template_content_plaintext></template><template><template_app>calendar</template_app><template_name>notification_new_content</template_name><template_content_html><![CDATA[
{{if $content->author()->member_id}}
{$email->language->addToStack("email_new_calevent", FALSE, array( 'sprintf' => array( $content->author()->url(), $content->author()->name, $content->indefiniteArticle( $email->language ), $content->url(), $content->mapped('title'), $content->fixedDateTimeDescription( $email->language ) ) ) )}
{{else}}
+5
View File
@@ -83,6 +83,11 @@
"friendly": "submit",
"real": "app=calendar&module=calendar&controller=submit"
},
"calendar_venue": {
"friendly": "venue/{#id}-{?}",
"real": "app=calendar&module=calendar&controller=venue",
"verify": "\\IPS\\calendar\\Venue"
},
"calendar": {
"friendly": "",
"real": "app=calendar&module=calendar&controller=view"
+382 -16
View File
@@ -1,8 +1,8 @@
<?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="101099" javascript_position="1000050"><![CDATA[/**
* IPS Community Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.main.js" javascript_type="controller" javascript_version="102002" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.browse.main.js - Calendar main browsing controller
*
@@ -112,9 +112,9 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.monthView.js" javascript_type="controller" javascript_version="101099" javascript_position="1000050"><![CDATA[/**
* IPS Community Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.monthView.js" javascript_type="controller" javascript_version="102002" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.browse.monthView.js - Month view controller
*
@@ -254,9 +254,9 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.dates.js" javascript_type="controller" javascript_version="101099" javascript_position="1000100"><![CDATA[/**
* IPS Community Suite 4
* (c) 2013 Invision Power Services - http://www.invisionpower.com
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.dates.js" javascript_type="controller" javascript_version="102002" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.submit.dates.js - Helper for date selection enhancements
*
@@ -268,6 +268,8 @@
ips.controller.register('calendar.front.submit.dates', {
initialize: function () {
this._hasFocusedEventEnd = false;
this.on( 'click', '[data-action="updateTimezone"]', this.updateTimezone );
// Monitor focus in recurring event input fields and select appropriate radio button
@@ -275,26 +277,74 @@
this.on( 'focus', 'input[name="repeat_end_date"]', function(){ $('#event_repeat_end_ondate').prop('checked', true); } );
this.on( 'change', 'input, select', this.checkForSummaryChange );
this.on( 'change', 'input, select', this.setEndDate );
this.on( 'change', '#check_single_day, #check_all_day', this.toggleFields );
this.on( 'click', '#elRecurRemove', this.disableRecurring );
this.on( 'change', 'input[name="event_dates[start_date]"]', this.setEndDateOnStartChange );
this.on( 'change', '#event_end_date', this.setHasFocusedEventOnEndChange );
$( window ).on( 'resize', _.bind( this._resizeEndGrid, this ) );
this.on( 'click', '[data-action="updateRepeat"]', this.finishRepeat );
this._checkAndSetEventEndState();
this.setup();
},
/**
* Set the end date for single & all day event
* On page load check to see what the current state of the end date is. If its set lets just go ahead and ignore any start date changes
*
* @returns {void}
*/
setEndDate: function() {
var singleDay = this.scope.find('#check_single_day');
var allDay = this.scope.find('#check_all_day');
_checkAndSetEventEndState: function() {
var eventEndDate = $("#event_end_date");
var date = eventEndDate.val();
if( singleDay.is(':checked') && !allDay.is(':checked') ) {
this.scope.find('input[name="event_dates[end_date]"]').val( this.scope.find('input[name="event_dates[start_date]"]').val() )
if (!this._hasFocusedEventEnd && this._isValidEndDate(date)) {
this._hasFocusedEventEnd = true;
}
},
/**
* Is the date passed in a valid date?
*
* @param {date} date Date to check
* @returns {boolean}
*/
_isValidEndDate: function(date) {
var tempDate = new Date(date);
if(!isNaN(tempDate.getDate())) {
return true;
}
return false;
},
/**
* If the end field has changed from input go ahead and ignore any start date changes
*
* @returns {void}
*/
setHasFocusedEventOnEndChange: function() {
this._hasFocusedEventEnd = true;
},
/**
* Event handler, handles changes to the start date
*
* @returns {void}
*/
setEndDateOnStartChange: function() {
var isSameDay = $("#check_single_day").is(":checked");
var eventStartDate = $('input[name="event_dates[start_date]');
var eventEndDate = $("#event_end_date");
if(!isSameDay && !this._hasFocusedEventEnd) {
if( ips.utils.time.supportsHTMLDate() ) {
eventEndDate.val(eventStartDate.val());
}
}
},
@@ -614,6 +664,320 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/venue" javascript_name="ips.venue.main.js" javascript_type="controller" javascript_version="102002" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.venue.main.js - Venue main browsing controller
*
*/
;( function($, _, undefined){
"use strict";
ips.controller.register('calendar.front.venue.main', {
_ajaxObj: null,
initialize: function () {
this.on( 'click', '[data-action="changeView"]', this.changeView );
this.on( window, 'statechange', this.stateChange );
this.setup();
},
/**
* Controller setup method
*
* @returns {void}
*/
setup: function () {
History.pushState( { controller: 'venueView' }, document.title, window.location.href );
},
/**
* Changes the calendar view dynamically
*
* @param {event} e Event object
* @returns {void}
*/
changeView: function (e) {
e.preventDefault();
// Load the url via ajax instead
var self = this;
var title = $( e.currentTarget ).attr('title');
var url = $( e.currentTarget ).attr('href');
History.pushState( { controller: 'venueView' }, title, url );
},
/**
* Event handler for history state changes
*
* @param {event} e Event object
* @returns {void}
*/
stateChange: function () {
var state = History.getState();
if( _.isUndefined( state.data.controller ) || state.data.controller != 'venueView' ) {
return;
}
// Track page view
ips.utils.analytics.trackPageView( state.url );
this._updateView( state.url, state.title )
},
/**
* Loads a new view
*
* @param {string} url URL to load
* @param {string} title New browser title
* @returns {void}
*/
_updateView: function (url, title) {
var self = this;
if( this._ajaxObj && _.isFunction( this._ajaxObj.abort ) ){
this._ajaxObj.abort();
}
this._setLoading( true );
this._ajaxObj = ips.getAjax()( url, {
showLoading: true
} )
.done( function (response) {
console.log( response );
self.scope.html( response );
$( document ).trigger( 'contentChange', [ self.scope ] );
History.pushState( { controller: 'venueView' }, title, url );
})
.always( function () {
self._setLoading( false );
});
},
/**
* Toggles the loading state on the view
*
* @param {boolean} state Enable the loading state?
* @returns {void}
*/
_setLoading: function (state) {
if( state ){
this.scope.animate( { opacity: 0.6 }, 'fast' );
} else {
this.scope.animate( { opacity: 1 }, 'fast' );
}
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderButton.js" javascript_type="controller" javascript_version="102002" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.calendar.reminderButton.js - Controller for event reminder button
*
* Author: Andrew Millne
*/
;( function($, _, undefined){
"use strict";
ips.controller.register('calendar.front.view.reminderButton', {
initialize: function () {
this.setup();
this.on( document, 'reminderItem', this.reminderItemChange );
},
setup: function () {
this._id = this.scope.attr('data-reminderID');
this._button = this.scope.find('[data-role="reminderButton"]');
},
/**
* Responds to events indicating the reminder status has changed
*
* @param {event} e Event object
* @param {object} data Event data object
* @returns {void}
*/
reminderItemChange: function (e, data) {
this._reloadButton();
},
/**
* Gets a new reminder button from the server and replaces the current one with the response
*
* @returns {void}
*/
_reloadButton: function () {
// Show button as loading
this._button.addClass('ipsFaded ipsFaded_more');
var self = this;
var pos = ips.utils.position.getElemPosition( this._button );
var dims = ips.utils.position.getElemDims( this._button );
this.scope.append( ips.templates.render('calendar.reminder.loading') );
// Adjust sizing
this.scope
.css({
position: 'relative'
})
.find('.ipsLoading')
.css({
width: dims.outerWidth + 'px',
height: dims.outerHeight + 'px',
top: 0,
left: 0,
position: 'absolute',
zIndex: ips.ui.zIndex()
});
// Load new contents
ips.getAjax()( ips.getSetting('baseURL') + 'index.php?app=calendar&module=calendar&controller=event&do=reminderButton', {
data: _.extend({
id: this._id
}, ( this.scope.attr('data-buttonType') ) ? { button_type: this.scope.attr('data-buttonType') } : {} )
})
.done( function (response) {
self.scope.html( response );
$( document ).trigger( 'contentChange', [ self.scope ] );
})
.fail( function () {
self._button.removeClass('ipsFaded ipsFaded_more');
})
.always( function () {
self.scope.find('.ipsLoading').remove();
});
}
});
}(jQuery, _));]]></file>
<file javascript_app="calendar" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.reminderForm.js" javascript_type="controller" javascript_version="102002" javascript_position="1000200">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.calendar.reminderButton.js - Controller for reminder button
*
* Author: Andrew Millne
*/
;( function($, _, undefined){
&quot;use strict&quot;;
ips.controller.register('calendar.front.view.reminderForm', {
initialize: function () {
this.on( 'submit', this.submitForm );
this.on( 'click', '[data-action=&quot;removereminder&quot;]', this.removereminder );
this.setup();
},
/**
* Setup method
*
* @returns {void}
*/
setup: function () {
},
/**
* Event handler for removing reminder
*
* @param {event} e Event object
* @returns {void}
*/
removereminder: function (e) {
e.preventDefault();
this._doRemindAction( $( e.currentTarget ).attr('href'), {}, true );
},
/**
* Event handler for submitting the reminder form
*
* @param {event} e Event object
* @returns {void}
*/
submitForm: function (e) {
e.preventDefault();
this._doRemindAction( this.scope.attr('action'), this.scope.serialize(), false );
},
/**
* Performs an ajax action.
*
* @param {string} url URL to call
* @param {object} data Object of data to include in the request
* @returns {void}
*/
_doRemindAction: function (url, data, removereminder ) {
var self = this;
var dims = ips.utils.position.getElemDims( this.scope.parent('div') );
// Set it to loading
this.scope
.hide()
.parent('div')
.css({
width: dims.outerWidth + 'px',
height: dims.outerHeight + 'px'
})
.addClass('ipsLoading');
// Update reminder preference via ajax
ips.getAjax()( url, {
data: data,
type: 'post'
})
.done( function (response, status, jqXHR) {
if( jqXHR.getAllResponseHeaders().indexOf('X-IPS-FormError: true') !== -1 || jqXHR.getAllResponseHeaders().indexOf('X-IPS-FormNoSubmit: true') !== -1 || jqXHR.getAllResponseHeaders().indexOf('x-ips-formerror: true') !== -1 || jqXHR.getAllResponseHeaders().indexOf('x-ips-formnosubmit: true') !== -1 ){
self.scope
.show()
.html( response )
.parent('div')
.removeClass('ipsLoading')
.css({
width: 'auto',
height: 'auto'
});
} else {
// Success, so trigger event to update button
self.trigger('reminderItem');
if( removereminder ) {
ips.ui.flashMsg.show(ips.getString('event_reminder_removed'));
}
else {
ips.ui.flashMsg.show(ips.getString('event_reminder_added'));
}
self.scope.parents('.ipsHovercard').remove();
}
})
.fail( function (jqXHR, textStatus, errorThrown) {
window.location = url;
})
.always( function () {
// If we're in a hovercard, remove it
});
}
});
}(jQuery, _));
</file>
<file javascript_app="calendar" javascript_location="front" javascript_path="templates" javascript_name="ips.calendar.templates.js" javascript_type="framework" javascript_version="102002" javascript_position="1000250"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*/
/* REMINDER BUTTON LOADING */
ips.templates.set('calendar.reminder.loading', " \
<div class='ipsLoading ipsLoading_tiny'></div>\
");]]></file>
<order app="global" path="/dev/js//framework/">templates
common/ips.loader.js
common/ui
@@ -629,4 +993,6 @@ app.js</order>
<order app="global" path="/dev/js//library//jquery">jquery.js
jquery.history.js
jquery.transform.js</order>
<order app="global" path="/dev/js//library//linkify">linkify.min.js
linkify-jquery.min.js</order>
</javascript>
+58 -3
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="calendar" version="101099">
<app key="calendar" version="102002">
<word key="__app_calendar" js="0">Calendar</word>
<word key="frontnavigation_calendar" js="0">Calendar</word>
<word key="__indefart_calendar_event_comment" js="0">a comment on a calendar event</word>
@@ -17,9 +17,11 @@
<word key="module__calendar_calendar" js="0">Calendar</word>
<word key="module__calendar_calendars" js="0">Calendars</word>
<word key="module__calendar_events" js="0">Events</word>
<word key="menu__calendar_venues" js="0">Venues</word>
<word key="event" js="0">Event</word>
<word key="editor__calendar_Events" js="0">Calendar Events</word>
<word key="editor__calendar_Calendar" js="0">Calendars</word>
<word key="editor__calendar_Venue" js="0">Venues</word>
<word key="acp_search_title_calendar_Calendars" js="0">Calendars</word>
<word key="calendar_event_pl_lc" js="0">calendar events</word>
<word key="search_contextual_item_calendars" js="0">This Calendar</word>
@@ -29,6 +31,7 @@
<word key="r__calendars_add" js="0">Can add calendars?</word>
<word key="r__calendars_edit" js="0">Can edit calendars?</word>
<word key="r__calendars_permissions" js="0">Can manage calendar permissions?</word>
<word key="r__calendars_massManageContent" js="0">Can mass move/delete events in calendars?</word>
<word key="r__calendars_delete" js="0">Can delete calendars?</word>
<word key="r__ical" js="0">iCalendar Feeds</word>
<word key="r__calendar_feeds_manage" js="0">Can manage iCalendar feed imports?</word>
@@ -92,6 +95,7 @@
<word key="can_feature_calendar_event" js="0">Can feature events?</word>
<word key="can_unfeature_calendar_event" js="0">Can unfeature events?</word>
<word key="can_move_calendar_event" js="0">Can move events?</word>
<word key="can_move_calendar_event_desc" js="0">Will be able to move events only between the calendars they have permission to moderate, not to any other calendar.</word>
<word key="can_lock_calendar_event" js="0">Can lock events?</word>
<word key="can_unlock_calendar_event" js="0">Can unlock events?</word>
<word key="can_reply_to_locked_calendar_event" js="0">Can comment on locked events?</word>
@@ -110,6 +114,11 @@
<word key="can_unhide_calendar_event_review" js="0">Can unhide reviews?</word>
<word key="can_view_hidden_calendar_event_review" js="0">Can view hidden reviews?</word>
<word key="can_delete_calendar_event_review" js="0">Can delete reviews?</word>
<word key="can_feature_comments_calendar_event" js="0">Can recommend comments on events?</word>
<word key="can_unfeature_comments_calendar_event" js="0">Can remove comments recommendations on events?</word>
<word key="can_add_item_message_calendar_event" js="0">Can add messages to events?</word>
<word key="can_edit_item_message_calendar_event" js="0">Can edit messages on events?</word>
<word key="can_delete_item_message_calendar_event" js="0">Can delete messages on events?</word>
<word key="ical_title" js="0">iCalendar Feed Imports</word>
<word key="ical_feed_title" js="0">Title</word>
<word key="ical_feed_added" js="0">Added</word>
@@ -176,8 +185,8 @@
<word key="calendar_event_comment_pl_lc" js="0">event comments</word>
<word key="calendar_event_review_pl" js="0">Event Reviews</word>
<word key="calendar_event_review_pl_lc" js="0">event reviews</word>
<word key="event_review_count" js="0"><![CDATA[<span id='reviewCount'>{#}</span> {!# [1:Review][?:Reviews]}]]></word>
<word key="event_comment_count" js="0"><![CDATA[<span id='commentCount'>{#}</span> {!# [1:Comment][?:Comments]}]]></word>
<word key="event_review_count" js="0">{# [1:Review][?:Reviews]}</word>
<word key="event_comment_count" js="0">{# [1:Comment][?:Comments]}</word>
<word key="event_rsvp_attendees_list" js="0">{# [1:user has][?:users have]} RSVPed{!#[0: ][?:, including]}</word>
<word key="calendar_rss_title" js="0">Upcoming Events</word>
<word key="submit_event" js="0">Submit an event</word>
@@ -230,6 +239,8 @@
<word key="submit_event_repeats" js="0">Repeats</word>
<word key="submit_event_remove_repeat" js="0">remove</word>
<word key="add_cal_event_header" js="0">Add Calendar Event</word>
<word key="copy_cal_event" js="0">Copy Calendar Event</word>
<word key="copy_cal_event_header" js="0">Copy %s</word>
<word key="calendar_jump" js="0">Go</word>
<word key="calendar_jump_today" js="0">Go to today</word>
<word key="jump_to_placeholder" js="0">Jump to...</word>
@@ -237,8 +248,10 @@
<word key="events_happening_today" js="0">Events happening today</word>
<word key="day_view_all_day" js="0"><![CDATA[ALL<br>DAY]]></word>
<word key="you_are_going" js="0">You are going</word>
<word key="you_arent_going" js="0">You aren't going</word>
<word key="you_are_going_to_this" js="0">You are going to this event</word>
<word key="you_are_not_going_to_this" js="0">You are not going to this event</word>
<word key="rsvp_change" js="0">Change RSVP</word>
<word key="confirm_attendance" js="0">Confirm attendance</word>
<word key="featured_events" js="0">Featured Events</word>
<word key="end_date_before_start" js="0">Please select an end date after the event start date</word>
@@ -272,6 +285,7 @@
<word key="rsvp_maybe_attendees" js="0">Maybe</word>
<word key="rsvp_notgoing_attendees" js="0">Declined</word>
<word key="event_address" js="0">Event Address</word>
<word key="add_similar_event" js="0">Add Similar Event</word>
<word key="no_rsvps_yet" js="0">No one is attending yet.</word>
<word key="no_decline_rsvps_yet" js="0">No one has declined yet.</word>
<word key="no_maybe_rsvps_yet" js="0">No one has said they might go yet.</word>
@@ -320,6 +334,14 @@
<word key="lock_title_event" js="0">Lock this event</word>
<word key="unlock_title_event" js="0">Unlock this event</word>
<word key="approve_title_event" js="0">Approve this event</word>
<word key="event_set_reminder" js="0">Set Reminder</word>
<word key="event_set_reminder_tip" js="0">Remind me when this event is approaching</word>
<word key="event_edit_reminder" js="0">Update Reminder</word>
<word key="event_dont_remind" js="0">Delete Reminder</word>
<word key="event_remind_me" js="0">Remind me</word>
<word key="event_remind_days_before" js="0">days before this event</word>
<word key="event_reminder_removed" js="0">Reminder Removed</word>
<word key="event_reminder_added" js="0">Reminder Saved</word>
<word key="block_upcomingEvents" js="0">Upcoming Events</word>
<word key="block_upcomingEvents_desc" js="0">Shows upcoming calendar events</word>
<word key="auto_hide" js="0">Automatically hide block</word>
@@ -385,6 +407,7 @@
<word key="digest_area_calendar_event" js="0">Event</word>
<word key="x_created_event_in" js="0">%s posted an event in %s</word>
<word key="x_commented_event" js="0">%s commented on an event</word>
<word key="x_reviewed_event" js="0">%s reviewed an event</word>
<word key="digest_event_on" js="0">Event on</word>
<word key="digest_users_going" js="0">{# [1:user][?:users]} going</word>
<word key="mailsub__calendar_notification_new_content" js="0"><![CDATA[{$content->mapped("title")|raw}]]></word>
@@ -394,6 +417,36 @@
<word key="__api_calendar_events" js="0">Events</word>
<word key="__api_calendar_comments" js="0">Comments</word>
<word key="__api_calendar_reviews" js="0">Reviews</word>
<word key="__api_calendar_calendars" js="0">Calendars</word>
<word key="calendar_activity_stream_rsvp" js="0"><![CDATA[%s is attending <a href='%s'>%s</a>]]></word>
<word key="all_activity_calendar_streamitems" js="0">When a member RSVPs to an event</word>
<word key="notifications__calendar_Events" js="0">Calendar</word>
<word key="notifications__event_reminder" js="0">Event Reminders</word>
<word key="mailsub__calendar_notification_event_reminder" js="0"><![CDATA[Event Reminder for {$content->mapped("title")|raw}]]></word>
<word key="email_event_reminder" js="0"><![CDATA[There's now less than %s to go until <a href='%s'>%s</a>.]]></word>
<word key="email_event_reminder_plain" js="0">There's now less than %s to go until %s</word>
<word key="email_event_reminder_when" js="0">When: %s</word>
<word key="email_event_reminder_where" js="0">Where: %s</word>
<word key="days_to_go" js="0">{# [1:day][?:days]}</word>
<word key="notification__event_reminder" js="0">Less than %s to go until %s</word>
<word key="menu__calendar_calendars_venues" js="0">Venues</word>
<word key="venues" js="0">Venues</word>
<word key="venue_title" js="0">Venue Name</word>
<word key="event_venue" js="0">Venue</word>
<word key="venues_not_listed" js="0">Venue not listed</word>
<word key="venue_address" js="0">Address</word>
<word key="r__venues" js="0">Venues</word>
<word key="r__venues_manage" js="0">Can Manage Venues</word>
<word key="module__venues_view" js="0">Venues</word>
<word key="editor__venues_Venue" js="0">Venue Description</word>
<word key="venue_description" js="0">Description</word>
<word key="calendar_venues_enabled" js="0">Enable Venues</word>
<word key="calendar_venues_enabled_desc" js="0">When enabled, administrators can create pre-defined venues that can be selected when creating events.</word>
<word key="calendar_more_events_at_x" js="0">More Events At This Venue</word>
<word key="venue_details" js="0">About the Venue</word>
<word key="venue_upcoming_events" js="0">Upcoming Events</word>
<word key="feed_venue_id" js="0">Venue</word>
<word key="event_new_venue" js="0">Save location as a new Venue?</word>
<word key="x_daily" js="1">{# [1:day][?:days]}</word>
<word key="x_weekly" js="1">{# [1:week][?:weeks]}</word>
<word key="x_monthly" js="1">{# [1:month][?:months]}</word>
@@ -418,5 +471,7 @@
<word key="not_single_not_allday" js="1"><![CDATA[From <strong>{{startDate}}</strong> at <strong>{{startTime}}</strong> until <strong>{{endDate}}</strong> at <strong>{{endTime}}</strong>]]></word>
<word key="not_single_allday" js="1"><![CDATA[From <strong>{{startDate}}</strong> to <strong>{{endDate}}</strong>]]></word>
<word key="select_time" js="1">(select time)</word>
<word key="event_reminder_removed" js="1">Reminder Removed</word>
<word key="event_reminder_added" js="1">Reminder Saved</word>
</app>
</language>
+5 -1
View File
@@ -3,12 +3,16 @@
"calendars": {
"default_controller": null,
"protected": 0
},
"venues": {
"default_controller": "",
"protected": false
}
},
"front": {
"calendar": {
"default_controller": "view",
"protected": false
"protected": 0
}
}
}
+278 -1
View File
@@ -127,6 +127,34 @@
"zerofill": false,
"auto_increment": false,
"binary": false
},
"cal_club_id": {
"name": "cal_club_id",
"type": "BIGINT",
"length": "20",
"decimals": null,
"values": null,
"allow_null": true,
"default": null,
"comment": "The club ID if this calendar belongs to a club, or NULL",
"unsigned": true,
"zerofill": false,
"auto_increment": false,
"binary": false
},
"cal_calendar_bitoptions": {
"name": "cal_calendar_bitoptions",
"type": "INT",
"length": 10,
"decimals": null,
"values": null,
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"zerofill": false,
"auto_increment": false,
"binary": false
}
},
"indexes": {
@@ -965,6 +993,34 @@
"unsigned": true,
"values": [],
"zerofill": false
},
"event_venue": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 5,
"name": "event_venue",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
},
"event_meta_data": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": 0,
"length": 1,
"name": "event_meta_data",
"type": "BIT",
"unsigned": false,
"values": [],
"zerofill": false
}
},
"indexes": {
@@ -1045,9 +1101,20 @@
"columns": [
"event_ip_address"
]
},
"event_venue": {
"type": "key",
"name": "event_venue",
"columns": [
"event_venue"
],
"length": [
null
]
}
},
"collation": "utf8mb4_unicode_ci"
"collation": "utf8mb4_unicode_ci",
"engine": "InnoDB"
},
"calendar_import_feeds": {
"name": "calendar_import_feeds",
@@ -1177,6 +1244,20 @@
"unsigned": true,
"values": [],
"zerofill": false
},
"feed_venue_id": {
"name": "feed_venue_id",
"type": "INT",
"length": 5,
"decimals": null,
"values": null,
"allow_null": true,
"default": null,
"comment": "",
"unsigned": true,
"zerofill": false,
"auto_increment": false,
"binary": false
}
},
"indexes": {
@@ -1582,5 +1663,201 @@
]
}
}
},
"calendar_event_reminders": {
"name": "calendar_event_reminders",
"columns": {
"reminder_id": {
"name": "reminder_id",
"type": "BIGINT",
"length": 20,
"decimals": null,
"values": null,
"allow_null": false,
"default": null,
"comment": "ID Number",
"unsigned": true,
"zerofill": false,
"auto_increment": true,
"binary": false
},
"reminder_event_id": {
"name": "reminder_event_id",
"type": "BIGINT",
"length": 10,
"decimals": null,
"values": null,
"allow_null": true,
"default": null,
"comment": "Event to remind about",
"unsigned": true,
"zerofill": false,
"auto_increment": false,
"binary": false
},
"reminder_member_id": {
"name": "reminder_member_id",
"type": "BIGINT",
"length": 20,
"decimals": null,
"values": null,
"allow_null": false,
"default": null,
"comment": "Member to notify",
"unsigned": true,
"zerofill": false,
"auto_increment": false,
"binary": false
},
"reminder_date": {
"name": "reminder_date",
"type": "INT",
"length": 10,
"decimals": null,
"values": null,
"allow_null": false,
"default": null,
"comment": "Timestamp after which to send notification",
"unsigned": true,
"zerofill": false,
"auto_increment": false,
"binary": false
},
"reminder_days_before": {
"name": "reminder_days_before",
"type": "INT",
"length": 2,
"decimals": null,
"values": null,
"allow_null": false,
"default": null,
"comment": "",
"unsigned": true,
"zerofill": false,
"auto_increment": false,
"binary": false
}
},
"indexes": {
"PRIMARY": {
"type": "primary",
"name": "PRIMARY",
"columns": [
"reminder_id"
],
"length": [
null
]
},
"reminder": {
"type": "key",
"name": "reminder",
"columns": [
"reminder_event_id",
"reminder_member_id"
],
"length": [
null,
null
]
},
"date": {
"type": "key",
"name": "date",
"columns": [
"reminder_date"
],
"length": [
null
]
}
}
},
"calendar_venues": {
"name": "calendar_venues",
"columns": {
"venue_id": {
"allow_null": false,
"auto_increment": true,
"binary": false,
"comment": "ID Number",
"decimals": null,
"default": null,
"length": 20,
"name": "venue_id",
"type": "BIGINT",
"unsigned": true,
"values": [],
"zerofill": false
},
"venue_position": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 5,
"name": "venue_position",
"type": "INT",
"unsigned": true,
"values": [],
"zerofill": false
},
"venue_enabled": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "1",
"length": 1,
"name": "venue_enabled",
"type": "TINYINT",
"unsigned": true,
"values": [],
"zerofill": false
},
"venue_title_seo": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": null,
"length": 255,
"name": "venue_title_seo",
"type": "VARCHAR",
"unsigned": false,
"values": [],
"zerofill": false
},
"venue_address": {
"name": "venue_address",
"type": "TEXT",
"length": 0,
"decimals": null,
"values": [],
"allow_null": true,
"default": "",
"comment": "Physical Address",
"unsigned": false,
"zerofill": false,
"auto_increment": false,
"binary": false
}
},
"indexes": {
"PRIMARY": {
"type": "primary",
"name": "PRIMARY",
"length": [
null
],
"columns": [
"venue_id"
]
}
}
}
}
+8
View File
@@ -1,4 +1,8 @@
[
{
"key": "all_activity_calendar_streamitems",
"default": "1"
},
{
"key": "calendar_date_format",
"default": "d_lm_y"
@@ -19,6 +23,10 @@
"key": "calendar_rss_feed_days",
"default": "30"
},
{
"key": "calendar_venues_enabled",
"default": "0"
},
{
"key": "ipb_calendar_mon",
"default": "1"
+1 -1
View File
@@ -1 +1 @@
{"icalendar":"P0Y0M0DT4H0M0S"}
{"icalendar":"P0Y0M0DT4H0M0S","eventreminders":"P0Y0M0DT1H0M0S"}
File diff suppressed because it is too large. Load diff
+22 -1
View File
@@ -149,5 +149,26 @@
"101096": "4.1.19.2",
"101097": "4.1.19.2",
"101098": "4.1.19.3",
"101099": "4.1.19.4"
"101099": "4.1.19.4",
"101100": "4.2.0 Beta 1",
"101101": "4.2.0 Beta 1",
"101102": "4.2.0 Beta 1",
"101103": "4.2.0 Beta 1",
"101104": "4.2.0 Beta 2",
"101105": "4.2.0 Beta 3",
"101106": "4.2.0 Beta 3a",
"101107": "4.2.0 Beta 4",
"101108": "4.2.0 Beta 4",
"101109": "4.2.0 Beta 5",
"101110": "4.2.0 Beta 5a",
"101111": "4.2.0 Beta 6",
"101112": "4.2.0 Beta 6a",
"101113": "4.2.0 Beta 6a",
"101114": "4.2.0 Beta 7",
"101115": "4.2.0 Beta 7a",
"101116": "4.2.0 Beta 8",
"101117": "4.2.0 Beta 8",
"102000": "4.2.0",
"102001": "4.2.0",
"102002": "4.2.0"
}