Version 4.7.6
This commit is contained in:
1 parent
8ba7d43898
commit
7b7404e741
1085 files changed
+30590
-7837
No files matched your search
@@ -6,7 +6,9 @@
|
||||
* @package Invision Community
|
||||
* @subpackage Calendar
|
||||
* @since 18 Dec 2013
|
||||
* @version
|
||||
* @version
|
||||
* @todo support for google maps as well as mapbox
|
||||
* @todo Only request location info when search box is focused.
|
||||
*/
|
||||
|
||||
namespace IPS\calendar;
|
||||
@@ -203,4 +205,28 @@ class _Application extends \IPS\Application
|
||||
]
|
||||
],parent::getWebhooks());
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform some legacy URL parameter conversions
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function convertLegacyParameters()
|
||||
{
|
||||
$url = \IPS\Request::i()->url();
|
||||
$baseUrl = parse_url( \IPS\Settings::i()->base_url );
|
||||
|
||||
/* We want to match /calendar/ if IC is not installed inside a directory, or if it is, the /path/calendar/ exactly */
|
||||
$strToCheck = ( ! empty( trim( $baseUrl['path'], '/' ) ) ) ? '/' . trim( $baseUrl['path'], '/' ) . '/calendar/' : '/calendar/';
|
||||
|
||||
|
||||
// once we use php8, we can use str_starts_with, right now here's the hacky way with substr
|
||||
if( \mb_substr($url->data[ \IPS\Http\Url::COMPONENT_PATH ], 0, \mb_strlen($strToCheck)) === $strToCheck )
|
||||
{
|
||||
$newPath = str_replace( '/calendar/', '/events/', $url->data[ \IPS\Http\Url::COMPONENT_PATH ] );
|
||||
$url = $url->setPath( $newPath );
|
||||
|
||||
\IPS\Output::i()->redirect( $url, NULL, 301 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,7 @@ class _calendars extends \IPS\Node\Api\NodeController
|
||||
* @param \IPS\node\Model $calendar The node
|
||||
* @return \IPS\node\Model
|
||||
*/
|
||||
protected function _createOrUpdate( \IPS\node\Model $calendar )
|
||||
protected function _createOrUpdate( \IPS\Node\Model $calendar )
|
||||
{
|
||||
if ( \IPS\Request::i()->title )
|
||||
{
|
||||
|
||||
@@ -267,15 +267,15 @@ class _comments extends \IPS\Content\Api\CommentController
|
||||
|
||||
/**
|
||||
* POST /calendar/comments/{id}/report
|
||||
* Reports a post
|
||||
* Reports a comment
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @apiparam int author ID of the member reporting
|
||||
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
|
||||
* @apiparam string message Optional message
|
||||
* @return \IPS\calendar\Event\Comment
|
||||
* @param int $id ID Number
|
||||
* @apiparam int author ID of the member reporting
|
||||
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
|
||||
* @apiparam string message Optional message
|
||||
* @throws 1S425/B NO_AUTHOR The author ID does not exist
|
||||
* @throws 1S425/C REPORTED_ALREADY The member has reported this item in the past 24 hours
|
||||
* @return \IPS\calendar\Event\Comment
|
||||
*/
|
||||
public function POSTitem_report( $id )
|
||||
{
|
||||
|
||||
@@ -281,15 +281,15 @@ class _reviews extends \IPS\Content\Api\CommentController
|
||||
}
|
||||
/**
|
||||
* POST /calendar/reviews/{id}/report
|
||||
* Reports a post
|
||||
* Reports a review
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @apiparam int author ID of the member reporting
|
||||
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
|
||||
* @apiparam string message Optional message
|
||||
* @return \IPS\calendar\Event\Review
|
||||
* @param int $id ID Number
|
||||
* @apiparam int author ID of the member reporting
|
||||
* @apiparam int report_type Report type (0 is default and is for letting CMGR team know, more options via core_automatic_moderation_types)
|
||||
* @apiparam string message Optional message
|
||||
* @throws 1S425/B NO_AUTHOR The author ID does not exist
|
||||
* @throws 1S425/C REPORTED_ALREADY The member has reported this item in the past 24 hours
|
||||
* @return \IPS\calendar\Event\Review
|
||||
*/
|
||||
public function POSTitem_report( $id )
|
||||
{
|
||||
|
||||
@@ -136,7 +136,7 @@ class _venues extends \IPS\Node\Api\NodeController
|
||||
* @param \IPS\node\Model $venue The node
|
||||
* @return \IPS\node\Model
|
||||
*/
|
||||
protected function _createOrUpdate( \IPS\node\Model $venue )
|
||||
protected function _createOrUpdate( \IPS\Node\Model $venue )
|
||||
{
|
||||
if( \IPS\Request::i()->address AND \is_array( \IPS\Request::i()->address ) )
|
||||
{
|
||||
|
||||
@@ -234,12 +234,5 @@
|
||||
"monday",
|
||||
"sunday"
|
||||
]
|
||||
},
|
||||
"app=calendar&module=calendars&controller=settings&searchResult=form_show_bday_calendar": {
|
||||
"lang_key": "show_bday_calendar",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"birthdays"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"application_title": "Calendar",
|
||||
"application_title": "Events",
|
||||
"app_author": "Invision Power Services, Inc.",
|
||||
"app_directory": "calendar",
|
||||
"app_protected": 0,
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<build>
|
||||
<module key="admin/calendars"><![CDATA[{"default_controller":null,"protected":0,"default":1}]]></module>
|
||||
<module key="admin/stats"><![CDATA[{"default_controller":"","protected":false,"default":null}]]></module>
|
||||
<module key="admin/stats"><![CDATA[{"default_controller":"","protected":0,"default":0}]]></module>
|
||||
<module key="admin/venues"><![CDATA[{"default":0,"default_controller":"","protected":0}]]></module>
|
||||
<module key="front/calendar"><![CDATA[{"default_controller":"view","protected":0,"default":1}]]></module>
|
||||
<task frequency="P0Y0M0DT4H0M0S">icalendar</task>
|
||||
<task frequency="P0Y0M0DT1H0M0S">eventreminders</task>
|
||||
@@ -9,14 +10,14 @@
|
||||
<setting key="calendar_block_past_changes"><![CDATA[{"key":"calendar_block_past_changes","default":"0","report":"full"}]]></setting>
|
||||
<setting key="calendar_date_format"><![CDATA[{"key":"calendar_date_format","default":"d_lm_y","report":"full"}]]></setting>
|
||||
<setting key="calendar_date_format_custom"><![CDATA[{"key":"calendar_date_format_custom","default":"","report":"bool"}]]></setting>
|
||||
<setting key="calendar_default_view"><![CDATA[{"key":"calendar_default_view","default":"month","report":"full"}]]></setting>
|
||||
<setting key="calendar_default_view"><![CDATA[{"key":"calendar_default_view","default":"overview","report":"full"}]]></setting>
|
||||
<setting key="calendar_rss_feed"><![CDATA[{"key":"calendar_rss_feed","default":"1","report":"full"}]]></setting>
|
||||
<setting key="calendar_rss_feed_days"><![CDATA[{"key":"calendar_rss_feed_days","default":"30","report":"full"}]]></setting>
|
||||
<setting key="calendar_rss_feed_order"><![CDATA[{"key":"calendar_rss_feed_order","default":"0","report":"full"}]]></setting>
|
||||
<setting key="calendar_venues_enabled"><![CDATA[{"key":"calendar_venues_enabled","default":"0","report":"full"}]]></setting>
|
||||
<setting key="ipb_calendar_mon"><![CDATA[{"key":"ipb_calendar_mon","default":"0","report":"full"}]]></setting>
|
||||
<setting key="show_bday_calendar"><![CDATA[{"key":"show_bday_calendar","default":"1","report":"full"}]]></setting>
|
||||
<widget key="todaysBirthdays"><![CDATA[{"class":"\\IPS\\Widget\\StaticCache","restrict":[],"default_area":"","allow_reuse":false,"menu_style":"menu","embeddable":true}]]></widget>
|
||||
<setting key="map_center_lat"><![CDATA[{"key":"map_center_lat","default":"37.411022","report":"none"}]]></setting>
|
||||
<setting key="map_center_lon"><![CDATA[{"key":"map_center_lon","default":"-79.1429788","report":"none"}]]></setting>
|
||||
<widget key="upcomingEvents"><![CDATA[{"class":"\\IPS\\Widget\\PermissionCache","restrict":["sidebar","cms"],"default_area":"","allow_reuse":true,"menu_style":"menu","embeddable":true}]]></widget>
|
||||
<widget key="recentReviews"><![CDATA[{"class":"\\IPS\\Widget\\PermissionCache","restrict":[],"default_area":"","allow_reuse":false,"menu_style":"menu","embeddable":true}]]></widget>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=calendars"><![CDATA[{"lang_key":"menu__calendar_calendars_calendars","restriction":"calendars_manage","keywords":["edit calendar"]}]]></acpsearch>
|
||||
@@ -48,5 +49,4 @@
|
||||
<acpsearch key="app=calendar&module=calendars&controller=settings&searchResult=form_calendar_rss_feed"><![CDATA[{"lang_key":"calendar_rss_feed","restriction":"settings_manage","keywords":["calendar rss","events rss"]}]]></acpsearch>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=settings&searchResult=form_calendar_venues_enabled"><![CDATA[{"lang_key":"calendar_venues_enabled","restriction":"settings_manage","keywords":["address","venue","venues"]}]]></acpsearch>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=settings&searchResult=form_ipb_calendar_mon"><![CDATA[{"lang_key":"ipb_calendar_mon","restriction":"settings_manage","keywords":["calendar start","monday","sunday"]}]]></acpsearch>
|
||||
<acpsearch key="app=calendar&module=calendars&controller=settings&searchResult=form_show_bday_calendar"><![CDATA[{"lang_key":"show_bday_calendar","restriction":"settings_manage","keywords":["birthdays"]}]]></acpsearch>
|
||||
</build>
|
||||
@@ -22,8 +22,12 @@
|
||||
* They must be provided in that order, otherwise the former will redirec to /myfolder/?do=myaction rather than /myfolder/myaction
|
||||
*/
|
||||
{
|
||||
"topLevel": "calendar",
|
||||
"topLevel": "events",
|
||||
"pages": {
|
||||
"featured": {
|
||||
"friendly": "featured",
|
||||
"real": "app=calendar&module=calendar&controller=view&view=overview&do=featured"
|
||||
},
|
||||
"calendar_calweek": {
|
||||
"friendly": "{#id}-{?}/week/{@w}",
|
||||
"real": "app=calendar&module=calendar&controller=view&view=week"
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,32 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="calendar" version="107014">
|
||||
<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>
|
||||
<word key="__indefart_calendar_event" js="0">a calendar event</word>
|
||||
<word key="__indefart_calendar_event_review" js="0">a review on a calendar event</word>
|
||||
<word key="__defart_calendar_event_comment" js="0">comment on a calendar event</word>
|
||||
<word key="__defart_calendar_event_comment_plural" js="0">{!#[1:comment][?:comments]} on a calendar event</word>
|
||||
<word key="__defart_calendar_event" js="0">calendar event</word>
|
||||
<word key="__defart_calendar_event_plural" js="0">calendar {!#[1:event][?:events]}</word>
|
||||
<word key="__defart_calendar_event_review" js="0">review on a calendar event</word>
|
||||
<word key="__defart_calendar_event_review_plural" js="0">{!#[1:review][?:reviews]} on a calendar event</word>
|
||||
<app key="calendar" version="107601">
|
||||
<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>
|
||||
<word key="__indefart_calendar_event" js="0">an event</word>
|
||||
<word key="__indefart_calendar_event_review" js="0">a review on an event</word>
|
||||
<word key="__defart_calendar_event_comment" js="0">comment on an event</word>
|
||||
<word key="__defart_calendar_event_comment_plural" js="0">{!#[1:comment][?:comments]} on an event</word>
|
||||
<word key="__defart_calendar_event" js="0">event</word>
|
||||
<word key="__defart_calendar_event_plural" js="0">{!#[1:event][?:events]}</word>
|
||||
<word key="__defart_calendar_event_review" js="0">review on an event</word>
|
||||
<word key="__defart_calendar_event_review_plural" js="0">{!#[1:review][?:reviews]} on an event</word>
|
||||
<word key="calendar_event_container" js="0">calendar</word>
|
||||
<word key="menu__calendar_calendars" js="0">Calendar</word>
|
||||
<word key="menu__calendar_calendars" js="0">Events</word>
|
||||
<word key="menu__calendar_calendars_calendars" js="0">Calendars</word>
|
||||
<word key="menu__calendar_calendars_ical" js="0">iCalendar Feeds</word>
|
||||
<word key="menu__calendar_calendars_settings" js="0">Settings</word>
|
||||
<word key="module__calendar_calendar" js="0">Calendar</word>
|
||||
<word key="module__calendar_calendar" js="0">Events</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_Events" js="0">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="calendar_event_pl_lc" js="0">events</word>
|
||||
<word key="search_contextual_item_calendars" js="0">This Calendar</word>
|
||||
<word key="search_contextual_item_calendar_event" js="0">This Event</word>
|
||||
<word key="r__calendars" js="0">Calendars</word>
|
||||
@@ -47,8 +47,6 @@
|
||||
<word key="loc_calendar_viewing_calendar_action" js="0">%s is viewing a calendar</word>
|
||||
<word key="loc_calendar_viewing_calendar_all_action" js="0">%s is viewing a calendar</word>
|
||||
<word key="loc_calendar_viewing_event_action" js="0">%s is viewing an event</word>
|
||||
<word key="show_bday_calendar" js="0">Show birthdays on calendar</word>
|
||||
<word key="show_bday_calendar_desc" js="0">When enabled, the calendar will show the number of member birthdays for each day and will list member birthdays when viewing a date.</word>
|
||||
<word key="ipb_calendar_mon" js="0">Start calendar on Monday</word>
|
||||
<word key="ipb_calendar_mon_desc" js="0">By default, the calendar will use Sunday as the start day for each week. You can use this setting to start the calendar on Monday instead.</word>
|
||||
<word key="calendar_rss_feed" js="0">Enable upcoming events RSS feed</word>
|
||||
@@ -63,7 +61,7 @@
|
||||
<word key="cal_df_month" js="0">Current month</word>
|
||||
<word key="cal_df_week" js="0">Current week</word>
|
||||
<word key="cal_df_day" js="0">Current day</word>
|
||||
<word key="cal_df_stream" js="0">Stream of upcoming events</word>
|
||||
<word key="cal_df_overview" js="0">Overview</word>
|
||||
<word key="filestorage__calendar_Events" js="0">Calendar Event Cover Photos</word>
|
||||
<word key="calendar_df_locale" js="0">Use default date formatting</word>
|
||||
<word key="calendar_df_d_sm_y" js="0">DD MMM YYYY (Example: 01 Jan 2000)</word>
|
||||
@@ -186,10 +184,6 @@
|
||||
<word key="no_events_today" js="0">No events scheduled today</word>
|
||||
<word key="no_events_month" js="0">No events scheduled this month</word>
|
||||
<word key="error_bad_date" js="0">The date you requested appears to be invalid</word>
|
||||
<word key="birthdays_today" js="0">{# [1:birthday][?:birthdays]} today</word>
|
||||
<word key="birthdays_count" js="0">{# [1:birthday][?:birthdays]}</word>
|
||||
<word key="birthdays_view_all" js="0">View all</word>
|
||||
<word key="birthdays" js="0">Birthdays</word>
|
||||
<word key="calendar_event" js="0">Event</word>
|
||||
<word key="calendar_event_comment" js="0">Event Comment</word>
|
||||
<word key="calendar_event_review" js="0">Event Review</word>
|
||||
@@ -244,6 +238,8 @@
|
||||
<word key="event_rsvp_limit_desc" js="0">Once the limit is reached, no further attendees will be allowed to RSVP for this event.</word>
|
||||
<word key="event_cover_photo" js="0">Cover Photo</word>
|
||||
<word key="event_location" js="0">Location</word>
|
||||
<word key="showing_events_near_you" js="0">Showing events near your current location.</word>
|
||||
<word key="see_more_events_near_you" js="0">See more events by location</word>
|
||||
<word key="event_album" js="0">Album</word>
|
||||
<word key="event_album_desc" js="0">You can link an album from the Gallery to this event which will show the images on the event page and cause information about the event to be displayed on the album page.</word>
|
||||
<word key="submit_event_start" js="0">Event Start</word>
|
||||
@@ -378,9 +374,6 @@
|
||||
<word key="days_ahead" js="0">Number of days to show</word>
|
||||
<word key="maximum_count" js="0">Number of events</word>
|
||||
<word key="view_this_event" js="0">View the event %s</word>
|
||||
<word key="block_todaysBirthdays" js="0">Today's Birthdays</word>
|
||||
<word key="block_todaysBirthdays_desc" js="0">Shows birthdays from today</word>
|
||||
<word key="no_members_birthday_today" js="0">No users celebrating today</word>
|
||||
<word key="no_upcoming_events" js="0">No upcoming events found</word>
|
||||
<word key="member_age" js="0">({# [1:year][?:years]} old)</word>
|
||||
<word key="block_recentReviews" js="0">Recent Event Reviews</word>
|
||||
@@ -494,6 +487,46 @@
|
||||
<word key="calendar_stats_rsvp_response_2" js="0">Maybe</word>
|
||||
<word key="menu__calendar_stats_venues" js="0">Venues</word>
|
||||
<word key="webhook_calendarEvent_rsvp" js="0">Fired when somebody changes his RSVP status</word>
|
||||
<word key="event_online" js="0">Online Event</word>
|
||||
<word key="event_url" js="0">URL</word>
|
||||
<word key="all_events" js="0">All</word>
|
||||
<word key="online_events" js="0">Online Events</word>
|
||||
<word key="open_event" js="0">Open Event</word>
|
||||
<word key="powered_by" js="0">Powered by</word>
|
||||
<word key="physical_events" js="0">Physical Events</word>
|
||||
<word key="event_view_overview" js="0">Overview</word>
|
||||
<word key="event_view_daily" js="0">Daily</word>
|
||||
<word key="event_view_weekly" js="0">Weekly</word>
|
||||
<word key="event_view_monthly" js="0">Monthly</word>
|
||||
<word key="events_search_your_location" js="0">Your location</word>
|
||||
<word key="events_search_use_location" js="0">Use my location</word>
|
||||
<word key="events_search_cancel_location" js="0">Cancel Location</word>
|
||||
<word key="events_search_location" js="0">Location</word>
|
||||
<word key="events_search_search_location" js="0">Search location</word>
|
||||
<word key="events_search_type" js="0">Type</word>
|
||||
<word key="events_search_from" js="0">From</word>
|
||||
<word key="events_search_to" js="0">To</word>
|
||||
<word key="events_search_search" js="0">Search</word>
|
||||
<word key="events_search_events" js="0">Search Events</word>
|
||||
<word key="events_search_back_to_overview" js="0">Back to overview</word>
|
||||
<word key="events_search_sort_by" js="0">Sort By:</word>
|
||||
<word key="events_search_distance" js="0">Distance</word>
|
||||
<word key="events_search_date" js="0">Date</word>
|
||||
<word key="events_search_show_more" js="0">Show more results</word>
|
||||
<word key="events_search_no_events" js="0">No more events to show</word>
|
||||
<word key="events_search_no_events_long" js="0">There were no events matching your search</word>
|
||||
<word key="events_happening_near_you" js="0">Happening Near You</word>
|
||||
<word key="events_online_events" js="0">Online Events</word>
|
||||
<word key="events_browse_by_month" js="0">Browse By Month</word>
|
||||
<word key="events_no_more_this_month" js="0">No more events this month</word>
|
||||
<word key="events_show_more" js="0">Show more events</word>
|
||||
<word key="map_center_lat" js="0">Map center latitude</word>
|
||||
<word key="map_center_lon" js="0">Map center longitude</word>
|
||||
<word key="map_center_lat_desc" js="0">The default latitude to use when no user location can be determined by geolocation or ip lookup.</word>
|
||||
<word key="map_center_lon_desc" js="0">The default longitude to use when no user location can be determined by geolocation or ip lookup.</word>
|
||||
<word key="event_happening_now" js="0">Happening Now</word>
|
||||
<word key="event_happening_today" js="0">Happening Today</word>
|
||||
<word key="events_near_you_soon" js="0">We couldn't find any events happening soon near you. Check back later!</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>
|
||||
@@ -521,5 +554,8 @@
|
||||
<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>
|
||||
<word key="event_your_current_location" js="1">Your Current Location</word>
|
||||
<word key="event_your_current_location_sorry" js="1">Sorry, we weren't able to get your location. Do you have location services enabled in your browser?</word>
|
||||
<word key="event_finding_location" js="1">Finding your location...</word>
|
||||
</app>
|
||||
</language>
|
||||
@@ -7,8 +7,13 @@
|
||||
},
|
||||
"stats": {
|
||||
"default_controller": "",
|
||||
"protected": false,
|
||||
"default": null
|
||||
"protected": 0,
|
||||
"default": 0
|
||||
},
|
||||
"venues": {
|
||||
"default": 0,
|
||||
"default_controller": "",
|
||||
"protected": 0
|
||||
}
|
||||
},
|
||||
"front": {
|
||||
|
||||
@@ -549,7 +549,6 @@
|
||||
"event_id": {
|
||||
"allow_null": false,
|
||||
"auto_increment": true,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -557,13 +556,11 @@
|
||||
"name": "event_id",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_calendar_id": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -571,13 +568,11 @@
|
||||
"name": "event_calendar_id",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_member_id": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -585,13 +580,11 @@
|
||||
"name": "event_member_id",
|
||||
"type": "BIGINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_content": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -599,13 +592,11 @@
|
||||
"name": "event_content",
|
||||
"type": "MEDIUMTEXT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_title": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "",
|
||||
@@ -613,13 +604,11 @@
|
||||
"name": "event_title",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_comments": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -627,41 +616,35 @@
|
||||
"name": "event_comments",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_rsvp": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 1,
|
||||
"length": 4,
|
||||
"name": "event_rsvp",
|
||||
"type": "TINYINT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_approved": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 1,
|
||||
"length": 4,
|
||||
"name": "event_approved",
|
||||
"type": "TINYINT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_saved": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -669,13 +652,11 @@
|
||||
"name": "event_saved",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_lastupdated": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -683,13 +664,11 @@
|
||||
"name": "event_lastupdated",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_recurring": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Holds an RRULE value to indicate how the event recurs",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -697,13 +676,11 @@
|
||||
"name": "event_recurring",
|
||||
"type": "TEXT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_start_date": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -711,13 +688,11 @@
|
||||
"name": "event_start_date",
|
||||
"type": "DATETIME",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_end_date": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -725,13 +700,11 @@
|
||||
"name": "event_end_date",
|
||||
"type": "DATETIME",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_title_seo": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -739,13 +712,11 @@
|
||||
"name": "event_title_seo",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_rating": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -753,13 +724,11 @@
|
||||
"name": "event_rating",
|
||||
"type": "SMALLINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_post_key": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -767,13 +736,11 @@
|
||||
"name": "event_post_key",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_sequence": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -781,13 +748,11 @@
|
||||
"name": "event_sequence",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_all_day": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -795,13 +760,11 @@
|
||||
"name": "event_all_day",
|
||||
"type": "TINYINT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_reviews": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -809,13 +772,11 @@
|
||||
"name": "event_reviews",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_ip_address": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -823,69 +784,59 @@
|
||||
"name": "event_ip_address",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_locked": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Whether the event is locked (for new comments\/reviews) or not",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 1,
|
||||
"length": 3,
|
||||
"name": "event_locked",
|
||||
"type": "TINYINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_featured": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Whether the event is featured or not",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 1,
|
||||
"length": 3,
|
||||
"name": "event_featured",
|
||||
"type": "TINYINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_last_comment": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 11,
|
||||
"length": 10,
|
||||
"name": "event_last_comment",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_last_review": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 11,
|
||||
"length": 10,
|
||||
"name": "event_last_review",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_approved_by": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Member ID who approved the event",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -893,27 +844,23 @@
|
||||
"name": "event_approved_by",
|
||||
"type": "BIGINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_approved_on": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Date the event was approved on",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 11,
|
||||
"length": 10,
|
||||
"name": "event_approved_on",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_location": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Stores location data for the event, used to create a map",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -921,27 +868,23 @@
|
||||
"name": "event_location",
|
||||
"type": "TEXT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_rsvp_limit": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Maximum number of attendees allowed for the event",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 10,
|
||||
"length": 11,
|
||||
"name": "event_rsvp_limit",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_cover_photo": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Header background image for the event",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -949,13 +892,11 @@
|
||||
"name": "event_cover_photo",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_album": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "Holds album ID associated with this event",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -963,13 +904,11 @@
|
||||
"name": "event_album",
|
||||
"type": "MEDIUMINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_cover_offset": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
@@ -977,13 +916,11 @@
|
||||
"name": "event_cover_offset",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_queued_comments": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -991,13 +928,11 @@
|
||||
"name": "event_queued_comments",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_hidden_comments": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -1005,13 +940,11 @@
|
||||
"name": "event_hidden_comments",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_unapproved_reviews": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -1019,13 +952,11 @@
|
||||
"name": "event_unapproved_reviews",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_hidden_reviews": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -1033,39 +964,35 @@
|
||||
"name": "event_hidden_reviews",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_venue": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 5,
|
||||
"length": 10,
|
||||
"name": "event_venue",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_meta_data": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 3,
|
||||
"name": "event_meta_data",
|
||||
"type": "TINYINT",
|
||||
"length": 1,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
"values": []
|
||||
},
|
||||
"event_recurring_end_date": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "End date if this is a recurring event which ends",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -1073,13 +1000,11 @@
|
||||
"name": "event_recurring_end_date",
|
||||
"type": "DATETIME",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_timezone": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -1087,27 +1012,23 @@
|
||||
"name": "event_timezone",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_edit_time": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 10,
|
||||
"length": 11,
|
||||
"name": "event_edit_time",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_edit_member_name": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
@@ -1115,41 +1036,96 @@
|
||||
"name": "event_edit_member_name",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_append_edit": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 1,
|
||||
"length": 4,
|
||||
"name": "event_append_edit",
|
||||
"type": "TINYINT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"values": []
|
||||
},
|
||||
"event_edit_reason": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 255,
|
||||
"name": "event_edit_reason",
|
||||
"type": "VARCHAR",
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"values": []
|
||||
},
|
||||
"event_latitude": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
"comment": "",
|
||||
"decimals": 8,
|
||||
"default": null,
|
||||
"length": 10,
|
||||
"name": "event_latitude",
|
||||
"type": "DECIMAL",
|
||||
"unsigned": false,
|
||||
"values": []
|
||||
},
|
||||
"event_longitude": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"comment": "",
|
||||
"decimals": 8,
|
||||
"default": null,
|
||||
"length": 11,
|
||||
"name": "event_longitude",
|
||||
"type": "DECIMAL",
|
||||
"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",
|
||||
"length": 255,
|
||||
"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_online": {
|
||||
"name": "event_online",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": 0,
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
},
|
||||
"event_url": {
|
||||
"name": "event_url",
|
||||
"type": "VARCHAR",
|
||||
"length": 250,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
@@ -1158,16 +1134,16 @@
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"event_is_anon": {
|
||||
"name": "event_is_anon",
|
||||
"type": "INT",
|
||||
"length": null,
|
||||
"event_online_type": {
|
||||
"name": "event_online_type",
|
||||
"type": "VARCHAR",
|
||||
"length": 250,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
@@ -1264,7 +1240,7 @@
|
||||
"type": "key",
|
||||
"name": "recurring_events",
|
||||
"length": [
|
||||
223,
|
||||
164,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
},
|
||||
{
|
||||
"key": "calendar_default_view",
|
||||
"default": "month",
|
||||
"default": "overview",
|
||||
"report": "full"
|
||||
},
|
||||
{
|
||||
@@ -50,8 +50,13 @@
|
||||
"report": "full"
|
||||
},
|
||||
{
|
||||
"key": "show_bday_calendar",
|
||||
"default": "1",
|
||||
"report": "full"
|
||||
"key": "map_center_lat",
|
||||
"default": "37.411022",
|
||||
"report": "none"
|
||||
},
|
||||
{
|
||||
"key": "map_center_lon",
|
||||
"default": "-79.1429788",
|
||||
"report": "none"
|
||||
}
|
||||
]
|
||||
+1437
-317
File diff suppressed because it is too large.
Load diff
@@ -460,5 +460,52 @@
|
||||
"107011": "4.7.0 Beta 9",
|
||||
"107012": "4.7.0 Beta 10",
|
||||
"107013": "4.7.0",
|
||||
"107014": "4.7.0"
|
||||
"107014": "4.7.0",
|
||||
"107015": "4.7.0",
|
||||
"107016": "4.7.0",
|
||||
"107017": "4.7.0",
|
||||
"107018": "4.7.1 Beta 1",
|
||||
"107019": "4.7.1 Beta 1",
|
||||
"107020": "4.7.1 Beta 2",
|
||||
"107021": "4.7.1",
|
||||
"107022": "4.7.1",
|
||||
"107023": "4.7.1",
|
||||
"107024": "4.7.1",
|
||||
"107025": "4.7.2 Beta 1",
|
||||
"107026": "4.7.2 Beta 1",
|
||||
"107027": "4.7.2 Beta 2",
|
||||
"107028": "4.7.2 Beta 3",
|
||||
"107029": "4.7.2 Beta 4",
|
||||
"107030": "4.7.2 Beta 5",
|
||||
"107031": "4.7.2 Beta 6",
|
||||
"107032": "4.7.2",
|
||||
"107033": "4.7.2",
|
||||
"107034": "4.7.2.1",
|
||||
"107035": "4.7.2.1",
|
||||
"107036": "4.7.2.1",
|
||||
"107037": "4.7.2.1",
|
||||
"107038": "4.7.2.1",
|
||||
"107300": "4.7.3 Beta 1",
|
||||
"107301": "4.7.3 Beta 2",
|
||||
"107302": "4.7.3 Beta 3",
|
||||
"107303": "4.7.3 Beta 4",
|
||||
"107304": "4.7.3",
|
||||
"107305": "4.7.3",
|
||||
"107306": "4.7.3",
|
||||
"107307": "4.7.3",
|
||||
"107400": "4.7.4 Beta 1",
|
||||
"107401": "4.7.4 Beta 2",
|
||||
"107402": "4.7.4 Beta 3",
|
||||
"107403": "4.7.4",
|
||||
"107404": "4.7.4",
|
||||
"107405": "4.7.4",
|
||||
"107406": "4.7.4",
|
||||
"107500": "4.7.5 Beta 1",
|
||||
"107501": "4.7.5",
|
||||
"107502": "4.7.5",
|
||||
"107503": "4.7.5",
|
||||
"107504": "4.7.5",
|
||||
"107505": "4.7.5",
|
||||
"107600": "4.7.6 Beta 1",
|
||||
"107601": "4.7.6"
|
||||
}
|
||||
@@ -1,12 +1,4 @@
|
||||
{
|
||||
"todaysBirthdays": {
|
||||
"class": "\\IPS\\Widget\\StaticCache",
|
||||
"restrict": [],
|
||||
"default_area": "",
|
||||
"allow_reuse": false,
|
||||
"menu_style": "menu",
|
||||
"embeddable": true
|
||||
},
|
||||
"upcomingEvents": {
|
||||
"class": "\\IPS\\Widget\\PermissionCache",
|
||||
"restrict": [
|
||||
|
||||
@@ -28,6 +28,11 @@ class _Calendar
|
||||
*/
|
||||
public $classes = array();
|
||||
|
||||
/**
|
||||
* @brief Can be shown in similar content
|
||||
*/
|
||||
public $similarContent = FALSE;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
|
||||
@@ -50,13 +50,12 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
|
||||
$form = new \IPS\Helpers\Form;
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'calendar_default_view', \IPS\Settings::i()->calendar_default_view, TRUE, array( 'options' => array( 'month' => 'cal_df_month', 'week' => 'cal_df_week', 'day' => 'cal_df_day', 'stream' => 'cal_df_stream' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'calendar_default_view', \IPS\Settings::i()->calendar_default_view, TRUE, array( 'options' => array( 'overview' => 'cal_df_overview', 'month' => 'cal_df_month', 'week' => 'cal_df_week', 'day' => 'cal_df_day' ) ) ) );
|
||||
|
||||
$options = array_combine( array_keys( \IPS\calendar\Date::$dateFormats ), array_map( function( $val ){ return "calendar_df_" . $val; }, array_keys( \IPS\calendar\Date::$dateFormats ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'calendar_date_format', \IPS\Settings::i()->calendar_date_format, TRUE, array( 'options' => $options, 'unlimited' => '-1', 'unlimitedLang' => "calendar_custom_df", 'unlimitedToggles' => array( 'calendar_date_format_custom' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'calendar_date_format_custom', \IPS\Settings::i()->calendar_date_format_custom, FALSE, array(), NULL, NULL, NULL, 'calendar_date_format_custom' ) );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'show_bday_calendar', \IPS\Settings::i()->show_bday_calendar ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'ipb_calendar_mon', \IPS\Settings::i()->ipb_calendar_mon ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'calendar_rss_feed', \IPS\Settings::i()->calendar_rss_feed, FALSE, array( 'togglesOn' => array( 'calendar_rss_feed_days', 'calendar_rss_feed_order' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Number( 'calendar_rss_feed_days', \IPS\Settings::i()->calendar_rss_feed_days, FALSE, array( 'unlimited' => -1 ), NULL, NULL, NULL, 'calendar_rss_feed_days' ) );
|
||||
@@ -68,7 +67,13 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'calendar_venues_enabled', \IPS\Settings::i()->calendar_venues_enabled ) );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'calendar_block_past_changes', \IPS\Settings::i()->calendar_block_past_changes ) );
|
||||
|
||||
|
||||
if( \IPS\GeoLocation::enabled() )
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\Number( 'map_center_lat', \IPS\Settings::i()->map_center_lat, FALSE, array( 'decimals' => 8, 'min' => "-180", 'max' => "180" ), NULL, NULL, NULL, 'map_center_lat' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Number( 'map_center_lon', \IPS\Settings::i()->map_center_lon, FALSE, array( 'decimals' => 8, 'min' => "-180", 'max' => "180" ), NULL, NULL, NULL, 'map_center_lon' ) );
|
||||
}
|
||||
|
||||
if ( $values = $form->values() )
|
||||
{
|
||||
if( $values['calendar_date_format'] == -1 AND !$values['calendar_date_format_custom'] )
|
||||
|
||||
@@ -53,7 +53,7 @@ class _rsvp extends \IPS\Dispatcher\Controller
|
||||
|
||||
foreach( array( 0,1,2 ) as $response )
|
||||
{
|
||||
$chart->addSeries( \IPS\Member::loggedIn()->language()->addToStack('calendar_stats_rsvp_response_' . $response ), 'number', 'COUNT(*)', FALSE );
|
||||
$chart->addSeries( \IPS\Member::loggedIn()->language()->addToStack('calendar_stats_rsvp_response_' . $response ), 'number', 'COUNT(*)', FALSE, $response );
|
||||
|
||||
}
|
||||
$chart->title = \IPS\Member::loggedIn()->language()->addToStack('calendar_stats_rsvp_title');
|
||||
|
||||
@@ -272,8 +272,6 @@ class _event extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function downloadRsvp()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
$output = \IPS\Theme::i()->getTemplate( 'view' )->attendees( $this->event );
|
||||
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $output );
|
||||
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->blankTemplate( $output ) );
|
||||
|
||||
@@ -121,8 +121,9 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
/* Otherwise use ACP default preference */
|
||||
else
|
||||
{
|
||||
\IPS\Request::i()->view = \IPS\Settings::i()->calendar_default_view;
|
||||
$method = "_view" . ucwords( \IPS\Settings::i()->calendar_default_view );
|
||||
$this->$method( $jump, iterator_to_array( \IPS\calendar\Event::featured( 4, '_rand' ) ) );
|
||||
$this->$method( $jump );
|
||||
}
|
||||
|
||||
/* Online User Location */
|
||||
@@ -140,10 +141,9 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
* Show month view
|
||||
*
|
||||
* @param \IPS\Helpers\Form $jump Calendar jump
|
||||
* @param array $featured Featured events (only populated for the ACP-specified default view)
|
||||
* @return void
|
||||
*/
|
||||
protected function _viewMonth( $jump, $featured=array() )
|
||||
protected function _viewMonth( $jump )
|
||||
{
|
||||
/* Get the month data */
|
||||
$day = NULL;
|
||||
@@ -156,20 +156,6 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
try
|
||||
{
|
||||
$date = \IPS\calendar\Date::getDate( \IPS\Request::i()->y ?: NULL, \IPS\Request::i()->m ?: NULL, $day );
|
||||
|
||||
$showBirthday = FALSE;
|
||||
/* Show birthdays if we're on the calendar landing page */
|
||||
if ( $this->_calendar === NULL OR \count( $this->roots ) == 0 )
|
||||
{
|
||||
$showBirthday = TRUE;
|
||||
}
|
||||
/* show birthdays if there's only one calendar */
|
||||
if ( \IPS\Request::i()->id AND $this->_calendar !== NULL OR \count( $this->roots ) == 1 )
|
||||
{
|
||||
$showBirthday = TRUE;
|
||||
}
|
||||
/* Get birthdays */
|
||||
$birthdays = $showBirthday ? $date->getBirthdays( FALSE, TRUE ) : array();
|
||||
|
||||
/* Get the events within this range */
|
||||
$events = \IPS\calendar\Event::retrieveEvents(
|
||||
@@ -190,7 +176,7 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
|
||||
/* Display */
|
||||
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarMonth( $this->roots, $date, $featured, $birthdays, $events, $this->_today, $this->_calendar, $jump );
|
||||
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarMonth( $this->roots, $date, $events, $this->_today, $this->_calendar, $jump );
|
||||
|
||||
if( \IPS\Request::i()->isAjax() )
|
||||
{
|
||||
@@ -206,7 +192,6 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
$this->_calendar,
|
||||
$jump,
|
||||
$date,
|
||||
$featured,
|
||||
$this->_downloadLinks()
|
||||
);
|
||||
}
|
||||
@@ -216,10 +201,9 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
* Show week view
|
||||
*
|
||||
* @param \IPS\Helpers\Form $jump Calendar jump
|
||||
* @param array $featured Featured events (only populated for the ACP-specified default view)
|
||||
* @return void
|
||||
*/
|
||||
protected function _viewWeek( $jump, $featured=array() )
|
||||
protected function _viewWeek( $jump )
|
||||
{
|
||||
/* Get the week data */
|
||||
$week = \IPS\Request::i()->w ? explode( '-', \IPS\Request::i()->w ) : NULL;
|
||||
@@ -245,9 +229,6 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
$days[] = \IPS\calendar\Date::getDate( $date->firstDayOfWeek('year'), $date->firstDayOfWeek('mon'), $date->firstDayOfWeek('mday') )->adjust( $i . ' days' );
|
||||
}
|
||||
|
||||
/* Get birthdays */
|
||||
$birthdays = ( $this->_calendar === NULL OR \count( $this->roots ) == 0 ) ? $date->getBirthdays( FALSE, TRUE ) : array();
|
||||
|
||||
/* Get the events within this range */
|
||||
$events = \IPS\calendar\Event::retrieveEvents(
|
||||
\IPS\calendar\Date::getDate( $date->firstDayOfWeek('year'), $date->firstDayOfWeek('mon'), $date->firstDayOfWeek('mday') ),
|
||||
@@ -267,7 +248,7 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
|
||||
/* Display */
|
||||
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarWeek( $this->roots, $date, $featured, $birthdays, $events, $nextWeek, $lastWeek, $days, $this->_today, $this->_calendar, $jump );
|
||||
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarWeek( $this->roots, $date, $events, $nextWeek, $lastWeek, $days, $this->_today, $this->_calendar, $jump );
|
||||
|
||||
if( \IPS\Request::i()->isAjax() )
|
||||
{
|
||||
@@ -289,8 +270,7 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
$this->roots,
|
||||
$this->_calendar,
|
||||
$jump,
|
||||
$date,
|
||||
$featured,
|
||||
$date,
|
||||
$this->_downloadLinks()
|
||||
);
|
||||
}
|
||||
@@ -300,10 +280,9 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
* Show day view
|
||||
*
|
||||
* @param \IPS\Helpers\Form $jump Calendar jump
|
||||
* @param array $featured Featured events (only populated for the ACP-specified default view)
|
||||
* @return void
|
||||
*/
|
||||
protected function _viewDay( $jump, $featured=array() )
|
||||
protected function _viewDay( $jump )
|
||||
{
|
||||
/* Get the day data */
|
||||
try
|
||||
@@ -318,23 +297,6 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
$tomorrow = clone $date->adjust( '+1 day' );
|
||||
$yesterday = clone $date->adjust( '-1 day' );
|
||||
|
||||
/* Get birthdays */
|
||||
if( isset( \IPS\Request::i()->show ) AND \IPS\Request::i()->show == 'birthdays' AND \IPS\Settings::i()->show_bday_calendar )
|
||||
{
|
||||
$table = new \IPS\Helpers\Table\Db( 'core_members', \IPS\Request::i()->url()->setQueryString('show', 'birthdays'), $date->getBirthdaysWhere( TRUE ) );
|
||||
$table->sortBy = 'name';
|
||||
$table->sortDirection = 'asc';
|
||||
$table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'browse', 'calendar', 'front' ), 'birthdaysTable' );
|
||||
$table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'browse', 'calendar', 'front' ), 'birthday' );
|
||||
|
||||
\IPS\Output::i()->output = $table;
|
||||
\IPS\Output::i()->metaTags['robots'] = 'noindex';
|
||||
return;
|
||||
}
|
||||
|
||||
$birthdayCount = \IPS\Settings::i()->show_bday_calendar ? $date->getBirthdays( TRUE, TRUE ) : [];
|
||||
$birthdays = \IPS\Settings::i()->show_bday_calendar ? $date->getBirthdays( TRUE, FALSE ) : [];
|
||||
|
||||
/* Get the events within this range */
|
||||
$events = \IPS\calendar\Event::retrieveEvents( clone $date, clone $date, $this->_calendar );
|
||||
|
||||
@@ -356,7 +318,7 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
$dayEvents['count']++;
|
||||
|
||||
if( $_event->all_day AND (
|
||||
if( $_event->all_day AND ( $_event->nextOccurrence( $date, 'startDate' ) AND
|
||||
$_event->nextOccurrence( $date, 'startDate' )->strFormat('%d') == $date->mday OR
|
||||
$_event->nextOccurrence( $date, 'endDate' ) AND $_event->nextOccurrence( $date, 'endDate' )->strFormat('%d') == $date->mday
|
||||
) )
|
||||
@@ -365,7 +327,7 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
else
|
||||
{
|
||||
if( $_event->nextOccurrence( $date, 'startDate' )->strFormat('%d') == $date->mday )
|
||||
if( $_event->nextOccurrence( $date, 'startDate' ) AND $_event->nextOccurrence( $date, 'startDate' )->strFormat('%d') == $date->mday )
|
||||
{
|
||||
$dayEvents[ $_event->_start_date->hours ][ $_event->id ] = $_event;
|
||||
}
|
||||
@@ -385,7 +347,7 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
|
||||
/* Display */
|
||||
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarDay( $this->roots, $date, $featured, $birthdays, $birthdayCount, $dayEvents, $tomorrow, $yesterday, $this->_today, $this->_calendar, $jump );
|
||||
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarDay( $this->roots, $date, $dayEvents, $tomorrow, $yesterday, $this->_today, $this->_calendar, $jump );
|
||||
|
||||
if( \IPS\Request::i()->isAjax() )
|
||||
{
|
||||
@@ -399,8 +361,7 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
$this->roots,
|
||||
$this->_calendar,
|
||||
$jump,
|
||||
$date,
|
||||
$featured,
|
||||
$date,
|
||||
$this->_downloadLinks()
|
||||
);
|
||||
}
|
||||
@@ -411,116 +372,6 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
*/
|
||||
public $streamPerPage = 50;
|
||||
|
||||
/**
|
||||
* Show stream view
|
||||
*
|
||||
* @param \IPS\Helpers\Form $jump Calendar jump
|
||||
* @param array $featured Featured events (only populated for the ACP-specified default view)
|
||||
* @return void
|
||||
*/
|
||||
protected function _viewStream( $jump, $featured=array() )
|
||||
{
|
||||
/* Get the month data */
|
||||
$day = NULL;
|
||||
|
||||
if( ( !\IPS\Request::i()->y OR \IPS\Request::i()->y == $this->_today->year ) AND ( !\IPS\Request::i()->m OR \IPS\Request::i()->m == $this->_today->mon ) )
|
||||
{
|
||||
$day = $this->_today->mday;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$date = \IPS\calendar\Date::getDate( \IPS\Request::i()->y ?: NULL, \IPS\Request::i()->m ?: NULL, $day );
|
||||
|
||||
/* Get the events within this range */
|
||||
$events = \IPS\calendar\Event::retrieveEvents(
|
||||
\IPS\calendar\Date::getDate( $date->firstDayOfMonth('year'), $date->firstDayOfMonth('mon'), $date->firstDayOfMonth('mday') ),
|
||||
\IPS\calendar\Date::getDate( $date->lastDayOfMonth('year'), $date->lastDayOfMonth('mon'), $date->lastDayOfMonth('mday'), 23, 59, 59 ),
|
||||
$this->_calendar,
|
||||
NULL,
|
||||
FALSE
|
||||
);
|
||||
}
|
||||
catch( \InvalidArgumentException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'error_bad_date', '2L182/A', 403, '' );
|
||||
}
|
||||
|
||||
/* Sort */
|
||||
$startDate = \IPS\calendar\Date::getDate();
|
||||
@usort( $events, function( $a, $b ) use ( $startDate )
|
||||
{
|
||||
if( $a->nextOccurrence( $startDate, 'startDate' ) === NULL )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if( $b->nextOccurrence( $startDate, 'startDate' ) === NULL )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( $a->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() == $b->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ( $a->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() < $b->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() ) ? -1 : 1;
|
||||
} );
|
||||
|
||||
/* Pagination */
|
||||
$pagination = array(
|
||||
'page' => ( isset( \IPS\Request::i()->page ) ) ? \IPS\Request::i()->page : 1,
|
||||
'pages' => ( \count( $events ) > 0 ) ? ceil( \count( $events ) / $this->streamPerPage ) : 1,
|
||||
'limit' => $this->streamPerPage
|
||||
);
|
||||
|
||||
if( $pagination['page'] < 1 )
|
||||
{
|
||||
$pagination['page'] = 1;
|
||||
}
|
||||
|
||||
/* If there are no events, tell search engines not to index the page but do NOT tell them not to follow links */
|
||||
if( \count( $events ) === 0 )
|
||||
{
|
||||
\IPS\Output::i()->metaTags['robots'] = 'noindex';
|
||||
}
|
||||
else
|
||||
{
|
||||
$events = \array_slice( $events, ( $pagination['page'] - 1 ) * $this->streamPerPage, $this->streamPerPage );
|
||||
}
|
||||
|
||||
/* Non-existent page */
|
||||
if( $pagination['page'] > 1 AND !\count( $events ) )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_events_month', '2L182/B', 404, '' );
|
||||
}
|
||||
|
||||
/* Display */
|
||||
$output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarStream( $this->roots, $date, $featured, $events, $this->_calendar, $jump, $pagination );
|
||||
|
||||
if( \IPS\Request::i()->isAjax() )
|
||||
{
|
||||
\IPS\Output::i()->sendOutput( $output, 200, 'text/html' );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We can show the sidebar in stream view */
|
||||
\IPS\Output::i()->sidebar['enabled'] = TRUE;
|
||||
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( 'cal_month_stream_title', FALSE, array( 'sprintf' => array( $date->monthName, $date->year ) ) );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'browse' )->calendarWrapper(
|
||||
$output,
|
||||
$this->roots,
|
||||
$this->_calendar,
|
||||
$jump,
|
||||
$date,
|
||||
$featured,
|
||||
$this->_downloadLinks()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate keyed links for RSS/iCal download
|
||||
*
|
||||
@@ -586,4 +437,514 @@ class _view extends \IPS\Dispatcher\Controller
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overview
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function _viewOverview()
|
||||
{
|
||||
$this->_today = \IPS\calendar\Date::getDate();
|
||||
|
||||
/* Featured events */
|
||||
$featured = iterator_to_array( \IPS\calendar\Event::featured( 13, '_rand' ) );
|
||||
|
||||
/* If there are no featured get upcoming */
|
||||
if( \count( $featured ) === 0 )
|
||||
{
|
||||
$featured = \IPS\calendar\Event::retrieveEvents(
|
||||
$this->_today,
|
||||
\IPS\calendar\Date::getDate()->adjust( "next year" ),
|
||||
NULL,
|
||||
3,
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE,
|
||||
NULL,
|
||||
TRUE
|
||||
);
|
||||
}
|
||||
|
||||
/* Events near me */
|
||||
$location = NULL;
|
||||
if( isset( \IPS\Request::i()->lat ) and isset( \IPS\Request::i()->lon ) )
|
||||
{
|
||||
$location = array( 'lat' => \IPS\Request::i()->lat, 'lon' => \IPS\Request::i()->lon );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Do an IP lookup */
|
||||
try
|
||||
{
|
||||
$geo = \IPS\GeoLocation::getByIp( \IPS\Request::i()->ipAddress() );
|
||||
$location = array( 'lat' => $geo->lat, 'lon' => $geo->long );
|
||||
}
|
||||
catch ( \Exception $e )
|
||||
{
|
||||
$location = array( 'lat' => \IPS\Settings::i()->map_center_lat, 'lon' => \IPS\Settings::i()->map_center_lon );
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the calendars we can view */
|
||||
$calendars = \IPS\Settings::i()->club_nodes_in_apps ? \IPS\calendar\Calendar::rootsWithClubs() : \IPS\calendar\Calendar::roots();
|
||||
|
||||
$nearme = \IPS\calendar\Event::retrieveEvents(
|
||||
$this->_today,
|
||||
\IPS\calendar\Date::getDate()->adjust( "next year" ),
|
||||
NULL,
|
||||
6,
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE,
|
||||
$location,
|
||||
FALSE
|
||||
);
|
||||
|
||||
/* Set map markers */
|
||||
$mapMarkers = array();
|
||||
foreach ( $nearme as $event )
|
||||
{
|
||||
$mapMarkers[ $event->id ] = array( 'lat' => (float) $event->latitude, 'long' => (float) $event->longitude , 'title' => $event->title );
|
||||
}
|
||||
|
||||
/* Are we just returning nearby events? */
|
||||
if( \IPS\Request::i()->isAjax() && \IPS\Request::i()->get == 'nearMe' )
|
||||
{
|
||||
$output = \IPS\Theme::i()->getTemplate( 'events', 'calendar' )->nearMeContent( $nearme, $mapMarkers );
|
||||
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $output );
|
||||
|
||||
$toReturn = array(
|
||||
'content' => $output,
|
||||
'lat' => (float) $location['lat'],
|
||||
'long' => (float) $location['lon']
|
||||
);
|
||||
|
||||
\IPS\Output::i()->sendOutput( json_encode($toReturn), 200, 'application/json' );
|
||||
return;
|
||||
}
|
||||
|
||||
/* By month */
|
||||
$day = NULL;
|
||||
|
||||
if( ( !\IPS\Request::i()->y OR \IPS\Request::i()->y == $this->_today->year ) AND ( !\IPS\Request::i()->m OR \IPS\Request::i()->m == $this->_today->mon ) )
|
||||
{
|
||||
$day = $this->_today->mday;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$date = \IPS\calendar\Date::getDate( \IPS\Request::i()->y ?: NULL, \IPS\Request::i()->m ?: NULL, $day );
|
||||
|
||||
/* Get the events within this range */
|
||||
$events = \IPS\calendar\Event::retrieveEvents(
|
||||
\IPS\calendar\Date::getDate( $date->firstDayOfMonth('year'), $date->firstDayOfMonth('mon'), $date->firstDayOfMonth('mday') ),
|
||||
\IPS\calendar\Date::getDate( $date->lastDayOfMonth('year'), $date->lastDayOfMonth('mon'), $date->lastDayOfMonth('mday'), 23, 59, 59 ),
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE
|
||||
);
|
||||
}
|
||||
catch( \InvalidArgumentException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'error_bad_date', '', 403, '' ); //@todo
|
||||
}
|
||||
|
||||
/* Sort */
|
||||
$startDate = \IPS\calendar\Date::getDate();
|
||||
@usort( $events, function( $a, $b ) use ( $startDate )
|
||||
{
|
||||
if( $a->nextOccurrence( $startDate, 'startDate' ) === NULL )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if( $b->nextOccurrence( $startDate, 'startDate' ) === NULL )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( $a->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() == $b->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ( $a->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() < $b->nextOccurrence( $startDate, 'startDate' )->mysqlDatetime() ) ? -1 : 1;
|
||||
} );
|
||||
|
||||
/* Pagination */
|
||||
$offset = isset( \IPS\Request::i()->offset ) ? min( array( \IPS\Request::i()->offset, \count( $events ) ) ) : 0;
|
||||
|
||||
/* If there are no events, tell search engines not to index the page but do NOT tell them not to follow links */
|
||||
if( \count( $events ) === 0 )
|
||||
{
|
||||
\IPS\Output::i()->metaTags['robots'] = 'noindex';
|
||||
}
|
||||
else
|
||||
{
|
||||
$events = \array_slice( $events, $offset, $this->streamPerPage );
|
||||
}
|
||||
|
||||
/* Return events if we're after those specifically */
|
||||
if( \IPS\Request::i()->isAjax() && \IPS\Request::i()->get == 'byMonth' )
|
||||
{
|
||||
$eventHtml = "";
|
||||
|
||||
if( \count( $events ) )
|
||||
{
|
||||
foreach( $events as $idx => $event )
|
||||
{
|
||||
$eventHtml .= \IPS\Theme::i()->getTemplate( 'events', 'calendar' )->event( $event );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$eventHtml = \IPS\Theme::i()->getTemplate( 'events', 'calendar' )->noEvents();
|
||||
}
|
||||
|
||||
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $eventHtml );
|
||||
|
||||
$toReturn = array(
|
||||
'count' => \count( $events ),
|
||||
'html' => $eventHtml
|
||||
);
|
||||
|
||||
\IPS\Output::i()->sendOutput( json_encode( $toReturn ), 200, 'application/json' );
|
||||
return;
|
||||
}
|
||||
|
||||
/* Non-existent page */
|
||||
if( $offset > 0 && !\count( $events ) )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_events_month', '2L182/B', 404, '' );
|
||||
}
|
||||
|
||||
/* Clone date so we can update time without affecting other areas on this page */
|
||||
$startTime = clone $date;
|
||||
$endTime = clone $date;
|
||||
|
||||
$startTime->setTime(0,0,0);
|
||||
$endTime->setTime(23,59,59);
|
||||
|
||||
/* Online */
|
||||
$online = \IPS\calendar\Event::retrieveEvents(
|
||||
$startTime,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE,
|
||||
NULL,
|
||||
TRUE
|
||||
);
|
||||
|
||||
/* Build an array of month objects for the nav */
|
||||
$months = new \DatePeriod( (new \DateTime)->setDate( date('Y'), date('m'), 1 ), new \DateInterval( 'P1M' ), 11 );
|
||||
|
||||
$stream = \IPS\Theme::i()->getTemplate( 'overview', 'calendar' )->byMonth( $calendars, $date, $featured, $events, NULL, $months );
|
||||
|
||||
$form = $this->getForm();
|
||||
|
||||
$date = \IPS\calendar\Date::getDate();
|
||||
|
||||
if( \IPS\Request::i()->isAjax() )
|
||||
{
|
||||
\IPS\Output::i()->sendOutput( $stream, 200, 'text/html' );
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_overview.js', 'calendar', 'front' ) );
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( '__app_calendar' );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'overview' )->wrapper( $featured, $nearme, $stream, $form, $mapMarkers, $online, $date );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Build search form
|
||||
*
|
||||
* @return \IPS\Helpers\Form
|
||||
*/
|
||||
public function getForm()
|
||||
{
|
||||
/* Search form */
|
||||
$form = new \IPS\Helpers\Form('form', 'search', \IPS\Http\Url::internal( 'app=calendar&module=calendar&controller=view&do=search' ) );
|
||||
if ( \IPS\GeoLocation::enabled() )
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'location', FALSE, \IPS\Request::i()->location, array( 'placeholder' => \IPS\Member::loggedIn()->language()->addToStack( 'events_search_search_location') ) ) );
|
||||
}
|
||||
$form->add( new \IPS\Helpers\Form\DateRange( 'date', array( 'start' => NULL, 'end' => NULL ), FALSE, array() ) );
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'show', 'all', FALSE, array( 'options' => array('all' => \IPS\Member::loggedIn()->language()->addToStack( 'all_events' ), 'online' => \IPS\Member::loggedIn()->language()->addToStack( 'online_events' ), 'physical' => \IPS\Member::loggedIn()->language()->addToStack( 'physical_events' ) ) ) ) );
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function search()
|
||||
{
|
||||
\IPS\Output::i()->bypassCsrfKeyCheck = TRUE;
|
||||
$results = array();
|
||||
|
||||
/* Build the search form */
|
||||
$form = $this->getForm();
|
||||
|
||||
if( $values = $form->values() )
|
||||
{
|
||||
$select = "calendar_events.*, core_clubs.name";
|
||||
$sort = 'event_start_date asc';
|
||||
$location = NULL;
|
||||
$having = array();
|
||||
$where = array();
|
||||
$where[] = array( 'event_approved=?', 1 );
|
||||
$searchNearLocation = FALSE; // Should results be limited to near the provided location only? If not, we'll just use location to allow sorting.
|
||||
|
||||
if( isset( \IPS\Request::i()->searchNearLocation ) && \IPS\Request::i()->searchNearLocation )
|
||||
{
|
||||
$searchNearLocation = TRUE;
|
||||
}
|
||||
|
||||
if( \IPS\GeoLocation::enabled() )
|
||||
{
|
||||
if( \IPS\Request::i()->location )
|
||||
{
|
||||
/* Is it a location? */
|
||||
$locations = static::geocodeLocation( \IPS\Request::i()->location, FALSE );
|
||||
if( \is_array( $locations ) and \count( $locations ) )
|
||||
{
|
||||
if( $locations[0]['value'] )
|
||||
{
|
||||
$having[] = "( event_title LIKE CONCAT( '%', '" . $locations[0]['value'] . "', '%' ) OR name LIKE CONCAT( '%', '" . $locations[0]['value'] . "', '%' ) )";
|
||||
}
|
||||
|
||||
$location = array( 'lat' => $locations[0]['lat'], 'lon' => $locations[0]['long'] );
|
||||
$searchNearLocation = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
$having[] = "( event_title LIKE CONCAT( '%', '" . \IPS\Request::i()->location . "', '%' ) OR name LIKE CONCAT( '%', '" . \IPS\Request::i()->location . "', '%' ) )";
|
||||
}
|
||||
}
|
||||
else if ( isset( \IPS\Request::i()->lat ) and isset( \IPS\Request::i()->lon ) and \IPS\Request::i()->lat !== 0 and \IPS\Request::i()->lon !== 0 )
|
||||
{
|
||||
$location = array( 'lat' => \IPS\Request::i()->lat, 'lon' => \IPS\Request::i()->lon );
|
||||
$searchNearLocation = TRUE;
|
||||
}
|
||||
elseif( $searchNearLocation )
|
||||
{
|
||||
/* Do an IP lookup */
|
||||
try
|
||||
{
|
||||
$geo = \IPS\GeoLocation::getByIp( \IPS\Request::i()->ipAddress() );
|
||||
$location = array( 'lat' => $geo->lat, 'lon' => $geo->long );
|
||||
}
|
||||
catch ( \Exception $e )
|
||||
{
|
||||
$location = array( 'lat' => \IPS\Settings::i()->map_center_lat, 'lon' => \IPS\Settings::i()->map_center_lon );
|
||||
}
|
||||
}
|
||||
|
||||
if ( \is_array( $location ) and isset( $location['lat'] ) and isset( $location['lon'] ) and is_numeric( $location['lat'] ) and is_numeric( $location['lon'] ) )
|
||||
{
|
||||
$select = $select . ', ( 3959 * acos( cos( radians(' . $location['lat'] . ') ) * cos( radians( event_latitude ) ) * cos( radians( event_longitude ) - radians(' . $location['lon'] . ') ) + sin( radians(' . $location['lat'] . ') ) * sin(radians(event_latitude)) ) ) AS distance';
|
||||
|
||||
if( $searchNearLocation )
|
||||
{
|
||||
$having[] = 'distance < 500';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$sort = 'event_start_date asc';
|
||||
|
||||
if( isset( \IPS\Request::i()->sortBy ) && \IPS\Request::i()->sortBy == 'nearest' && $location )
|
||||
{
|
||||
$sort = 'distance asc';
|
||||
}
|
||||
|
||||
/* Filter? */
|
||||
if( isset( \IPS\Request::i()->show ) && \IPS\Request::i()->show !== 'all' )
|
||||
{
|
||||
if( \IPS\Request::i()->show == 'online' )
|
||||
{
|
||||
$where[] = array( '( event_online = 1 )' );
|
||||
}
|
||||
else {
|
||||
$where[] = array( '( ( event_end_date IS NULL OR TIMESTAMPDIFF( DAY, event_start_date, event_end_date ) < ? ) AND event_online = 0)', 30 );
|
||||
}
|
||||
}
|
||||
|
||||
$today = new \IPS\calendar\Date;
|
||||
$member = \IPS\Member::loggedIn();
|
||||
|
||||
$startDate = \IPS\calendar\Date::dateTimeToCalendarDate( $values['date']['start'] ?: $today );
|
||||
$endDate = $values['date']['end'] ? \IPS\calendar\Date::dateTimeToCalendarDate( $values['date']['end'] ) : NULL;
|
||||
|
||||
/* Get timezone adjusted versions of start/end time */
|
||||
$startDateTimezone = \IPS\calendar\Date::parseTime( $startDate->mysqlDatetime(), TRUE );
|
||||
$endDateTimezone = ( $endDate !== NULL ) ? \IPS\calendar\Date::parseTime( $endDate->mysqlDatetime() ) : NULL;
|
||||
|
||||
if ( $member->timezone )
|
||||
{
|
||||
$startDateTimezone->setTimezone( new \DateTimeZone( 'UTC' ) );
|
||||
|
||||
if( $endDateTimezone !== NULL )
|
||||
{
|
||||
$endDateTimezone->setTimezone( new \DateTimeZone( 'UTC' ) );
|
||||
}
|
||||
}
|
||||
|
||||
if( $endDate !== NULL AND $startDate == $endDate )
|
||||
{
|
||||
$where[] = array(
|
||||
'(
|
||||
( event_end_date IS NULL AND DATE( event_start_date ) = ? AND event_all_day=1 )
|
||||
OR
|
||||
( event_end_date IS NOT NULL AND DATE( event_start_date ) <= ? AND DATE( event_end_date ) >= ? AND event_all_day=1 )
|
||||
OR
|
||||
( event_end_date IS NULL AND event_start_date >= ? AND event_start_date <= ? AND event_all_day=0 )
|
||||
OR
|
||||
( event_end_date IS NOT NULL AND event_start_date <= ? AND event_end_date >= ? AND event_all_day=0 )
|
||||
)',
|
||||
$startDate->mysqlDatetime( FALSE ),
|
||||
$endDate->mysqlDatetime( FALSE ),
|
||||
$startDate->mysqlDatetime( FALSE ),
|
||||
$startDateTimezone->mysqlDatetime(),
|
||||
$startDateTimezone->adjust('+1 day')->mysqlDatetime(),
|
||||
$endDateTimezone->adjust('+1 day')->mysqlDatetime(),
|
||||
$startDateTimezone->mysqlDatetime()
|
||||
);
|
||||
}
|
||||
elseif( $endDate !== NULL )
|
||||
{
|
||||
$where[] = array(
|
||||
'(
|
||||
( event_end_date IS NULL AND DATE( event_start_date ) >= ? AND DATE( event_start_date ) <= ? AND event_all_day=1 )
|
||||
OR
|
||||
( event_end_date IS NOT NULL AND DATE( event_start_date ) <= ? AND DATE( event_end_date ) >= ? AND event_all_day=1 )
|
||||
OR
|
||||
( event_end_date IS NULL AND event_start_date >= ? AND event_start_date <= ? AND event_all_day=0 )
|
||||
OR
|
||||
( event_end_date IS NOT NULL AND event_start_date <= ? AND event_end_date >= ? AND event_all_day=0 )
|
||||
)',
|
||||
$startDate->mysqlDatetime( FALSE ),
|
||||
$endDate->mysqlDatetime( FALSE ),
|
||||
$endDate->mysqlDatetime( FALSE ),
|
||||
$startDate->mysqlDatetime( FALSE ),
|
||||
$startDateTimezone->mysqlDatetime(),
|
||||
$endDateTimezone->mysqlDatetime(),
|
||||
$endDateTimezone->mysqlDatetime(),
|
||||
$startDateTimezone->mysqlDatetime()
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$where[] = array(
|
||||
"(
|
||||
( DATE( event_start_date ) >= ? AND event_all_day=1 )
|
||||
OR
|
||||
( event_start_date >= ? AND event_all_day=0 )
|
||||
OR
|
||||
( event_end_date IS NOT NULL AND DATE( event_start_date ) <= ? AND DATE( event_end_date ) >= ? AND event_all_day=1 )
|
||||
OR
|
||||
( event_end_date IS NOT NULL AND event_start_date <= ? AND event_end_date >= ? AND event_all_day=0 )
|
||||
)",
|
||||
$startDate->mysqlDatetime( FALSE ),
|
||||
$startDateTimezone->mysqlDatetime(),
|
||||
$startDate->mysqlDatetime( FALSE ),
|
||||
$startDate->mysqlDatetime( FALSE ),
|
||||
$startDateTimezone->adjust('+1 day')->mysqlDatetime(),
|
||||
$startDateTimezone->mysqlDatetime()
|
||||
);
|
||||
}
|
||||
|
||||
$offset = isset( \IPS\Request::i()->offset ) ? \intval( \IPS\Request::i()->offset ) : 0;
|
||||
$limit = isset( \IPS\Request::i()->limit ) ? min( array( \intval( \IPS\Request::i()->limit ), 50 ) ) : 20;
|
||||
$query = \IPS\Db::i()->select( $select, 'calendar_events', $where, $sort, array( $offset, $limit ), NULL, implode( " OR ", $having ) );
|
||||
$query->join( 'calendar_calendars', "event_calendar_id = cal_id" );
|
||||
$query->join( 'core_clubs', "cal_club_id = id" );
|
||||
|
||||
$results = new \IPS\Patterns\ActiveRecordIterator( $query, '\IPS\calendar\Event' );
|
||||
}
|
||||
|
||||
$mapMarkers = array();
|
||||
foreach ( $results as $event )
|
||||
{
|
||||
if( $event->latitude and $event->longitude )
|
||||
{
|
||||
$mapMarkers[ $event->id ] = array( 'lat' => (float) $event->latitude, 'long' => (float) $event->longitude , 'title' => $event->title );
|
||||
}
|
||||
}
|
||||
|
||||
if( \IPS\Request::i()->isAjax() ){
|
||||
|
||||
$countQuery = \IPS\Db::i()->select( $select, 'calendar_events', $where, NULL, array(), NULL, implode( " OR ", $having ) );
|
||||
$countQuery->join( 'calendar_calendars', "event_calendar_id = cal_id" );
|
||||
$countQuery->join( 'core_clubs', "cal_club_id = id" );
|
||||
|
||||
$output = \IPS\Theme::i()->getTemplate( 'events' )->searchResults( $results );
|
||||
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $output );
|
||||
|
||||
$toReturn = array(
|
||||
'totalCount' => $countQuery->count(),
|
||||
'count' => \count( $results ),
|
||||
'content' => $output,
|
||||
'markers' => $mapMarkers,
|
||||
'blurb' => '', // @todo
|
||||
'online' => ( \IPS\Request::i()->show == 'online' )
|
||||
);
|
||||
|
||||
\IPS\Output::i()->sendOutput( json_encode( $toReturn ), 200, 'application/json' );
|
||||
return;
|
||||
}
|
||||
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( '__app_calendar' );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'overview' )->search( $form, $results, json_encode( $mapMarkers ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Geocode Location
|
||||
*
|
||||
* @param string $input Location search term
|
||||
* @param bool $asJson Return type
|
||||
* @return array|string
|
||||
*/
|
||||
public static function geocodeLocation( $input = NULL, $asJson = TRUE )
|
||||
{
|
||||
$items = array();
|
||||
|
||||
try
|
||||
{
|
||||
$geolocation = \IPS\GeoLocation::geocodeLocation( $input );
|
||||
if( $geolocation instanceof \IPS\GeoLocation )
|
||||
{
|
||||
$items[] = array(
|
||||
'value' => $geolocation->placeName,
|
||||
'html' => $geolocation->placeName,
|
||||
'lat' => $geolocation->lat,
|
||||
'long' => $geolocation->long
|
||||
);
|
||||
}
|
||||
}
|
||||
catch( \BadFunctionCallException ){}
|
||||
|
||||
if( $asJson )
|
||||
{
|
||||
\IPS\Output::i()->json( $items );
|
||||
}
|
||||
else
|
||||
{
|
||||
return $items;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107015,
|
||||
"name": "4.7.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107016,
|
||||
"name": "4.7.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107017,
|
||||
"name": "4.7.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107018,
|
||||
"name": "4.7.1 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107019,
|
||||
"name": "4.7.1 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107020,
|
||||
"name": "4.7.1 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107021,
|
||||
"name": "4.7.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107022,
|
||||
"name": "4.7.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107023,
|
||||
"name": "4.7.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107024,
|
||||
"name": "4.7.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107025,
|
||||
"name": "4.7.2 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107026,
|
||||
"name": "4.7.2 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 107027,
|
||||
"name": "4.7.2 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/venue\/view",
|
||||
"front\/view\/view"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107028,
|
||||
"name": "4.7.2 Beta 3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107029,
|
||||
"name": "4.7.2 Beta 4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107030,
|
||||
"name": "4.7.2 Beta 5",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107031,
|
||||
"name": "4.7.2 Beta 6",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107032,
|
||||
"name": "4.7.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107033,
|
||||
"name": "4.7.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107034,
|
||||
"name": "4.7.2.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107035,
|
||||
"name": "4.7.2.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107036,
|
||||
"name": "4.7.2.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107037,
|
||||
"name": "4.7.2.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107038,
|
||||
"name": "4.7.2.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": [
|
||||
"app=calendar&module=calendars&controller=settings&searchResult=form_show_bday_calendar"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107300,
|
||||
"name": "4.7.3 Beta 1",
|
||||
"steps": {
|
||||
"queries": true,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": true,
|
||||
"settings": true,
|
||||
"tasks": false,
|
||||
"modules": true,
|
||||
"widgets": true,
|
||||
"customOptions": false,
|
||||
"customRoutines": true
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [
|
||||
"calendar\/front\/controllers\/overview\/ips.overview.carousel.js",
|
||||
"calendar\/front\/controllers\/overview\/ips.overview.eventList.js",
|
||||
"calendar\/front\/controllers\/overview\/ips.overview.nearMe.js",
|
||||
"calendar\/front\/controllers\/overview\/ips.overview.search.js",
|
||||
"calendar\/front\/templates\/ips.templates.overview.js"
|
||||
],
|
||||
"edited": [
|
||||
"calendar\/front\/controllers\/browse\/ips.browse.monthView.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"cal_df_overview",
|
||||
"showing_events_near_you",
|
||||
"see_more_events_near_you",
|
||||
"event_online",
|
||||
"event_url",
|
||||
"all_events",
|
||||
"online_events",
|
||||
"open_event",
|
||||
"powered_by",
|
||||
"physical_events",
|
||||
"event_view_overview",
|
||||
"event_view_daily",
|
||||
"event_view_weekly",
|
||||
"event_view_monthly",
|
||||
"events_search_your_location",
|
||||
"events_search_use_location",
|
||||
"events_search_cancel_location",
|
||||
"events_search_location",
|
||||
"events_search_type",
|
||||
"events_search_from",
|
||||
"events_search_to",
|
||||
"events_search_search",
|
||||
"events_search_events",
|
||||
"events_search_back_to_overview",
|
||||
"events_search_sort_by",
|
||||
"events_search_distance",
|
||||
"events_search_date",
|
||||
"events_search_show_more",
|
||||
"events_search_no_events",
|
||||
"events_search_no_events_long",
|
||||
"events_happening_near_you",
|
||||
"events_online_events",
|
||||
"events_browse_by_month",
|
||||
"events_no_more_this_month",
|
||||
"events_show_more",
|
||||
"map_center_lat",
|
||||
"map_center_lon",
|
||||
"map_center_lat_desc",
|
||||
"map_center_lon_desc",
|
||||
"event_happening_now",
|
||||
"event_happening_today"
|
||||
],
|
||||
"edited": [
|
||||
"__app_calendar",
|
||||
"frontnavigation_calendar",
|
||||
"__indefart_calendar_event_comment",
|
||||
"__indefart_calendar_event",
|
||||
"__indefart_calendar_event_review",
|
||||
"__defart_calendar_event_comment",
|
||||
"__defart_calendar_event_comment_plural",
|
||||
"__defart_calendar_event",
|
||||
"__defart_calendar_event_plural",
|
||||
"__defart_calendar_event_review",
|
||||
"__defart_calendar_event_review_plural",
|
||||
"menu__calendar_calendars",
|
||||
"module__calendar_calendar",
|
||||
"editor__calendar_Events",
|
||||
"calendar_event_pl_lc"
|
||||
],
|
||||
"removed": [
|
||||
"show_bday_calendar",
|
||||
"show_bday_calendar_desc",
|
||||
"cal_df_stream",
|
||||
"birthdays_today",
|
||||
"birthdays_count",
|
||||
"birthdays_view_all",
|
||||
"birthdays",
|
||||
"block_todaysBirthdays",
|
||||
"block_todaysBirthdays_desc",
|
||||
"no_members_birthday_today"
|
||||
]
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"added": [
|
||||
"admin\/venues"
|
||||
],
|
||||
"edited": [
|
||||
"admin\/stats"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"calendar_events",
|
||||
{
|
||||
"name": "event_online",
|
||||
"type": "TINYINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": 0,
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"calendar_events",
|
||||
{
|
||||
"name": "event_url",
|
||||
"type": "VARCHAR",
|
||||
"length": 250,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"method": "addColumn",
|
||||
"params": [
|
||||
"calendar_events",
|
||||
{
|
||||
"name": "event_online_type",
|
||||
"type": "VARCHAR",
|
||||
"length": 250,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"added": [
|
||||
"map_center_lat",
|
||||
"map_center_lon"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": [
|
||||
"show_bday_calendar"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [
|
||||
"front\/events\/event",
|
||||
"front\/events\/featured",
|
||||
"front\/events\/featuredEvent",
|
||||
"front\/events\/nearMe",
|
||||
"front\/events\/nearMeContent",
|
||||
"front\/events\/online",
|
||||
"front\/events\/searchResults",
|
||||
"front\/events\/searchResultsWrapper",
|
||||
"front\/overview\/byMonth",
|
||||
"front\/overview\/header",
|
||||
"front\/overview\/search",
|
||||
"front\/overview\/searchBar",
|
||||
"front\/overview\/wrapper"
|
||||
],
|
||||
"edited": [
|
||||
"front\/browse\/calendarDay",
|
||||
"front\/browse\/calendarHeader",
|
||||
"front\/browse\/calendarMonth",
|
||||
"front\/browse\/calendarWeek",
|
||||
"front\/browse\/calendarWrapper",
|
||||
"front\/view\/coverPhotoOverlay",
|
||||
"front\/view\/eventSidebar",
|
||||
"front\/view\/eventStreamBlock",
|
||||
"front\/view\/rsvpControls",
|
||||
"front\/view\/view"
|
||||
],
|
||||
"removed": [
|
||||
"front\/browse\/birthday",
|
||||
"front\/browse\/birthdaysTable",
|
||||
"front\/browse\/calendarFeatured",
|
||||
"front\/browse\/calendarStream",
|
||||
"front\/widgets\/todaysBirthdays"
|
||||
]
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/calendar_responsive.css",
|
||||
"front\/calendar.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.7.3 Beta 1 Upgrade Code
|
||||
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) Invision Power Services, Inc.
|
||||
* @license https://www.invisioncommunity.com/legal/standards/
|
||||
* @package Invision Community
|
||||
* @subpackage Events
|
||||
* @since 10 Aug 2022
|
||||
*/
|
||||
|
||||
namespace IPS\calendar\setup\upg_107300;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 4.7.3 Beta 1 Upgrade Code
|
||||
*/
|
||||
class _Upgrade
|
||||
{
|
||||
/**
|
||||
* ...
|
||||
*
|
||||
* @return bool|array If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
|
||||
*/
|
||||
public function step1()
|
||||
{
|
||||
\IPS\Settings::i()->changeValues( array( 'calendar_default_view' => 'overview' ) );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// You can create as many additional methods (step2, step3, etc.) as is necessary.
|
||||
// Each step will be executed in a new HTTP request
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": [
|
||||
"todaysBirthdays"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107301,
|
||||
"name": "4.7.3 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [
|
||||
"front\/events\/noEvents"
|
||||
],
|
||||
"edited": [
|
||||
"front\/browse\/calendarWrapper",
|
||||
"front\/overview\/byMonth",
|
||||
"front\/overview\/header",
|
||||
"front\/view\/eventSidebar",
|
||||
"front\/view\/view"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107302,
|
||||
"name": "4.7.3 Beta 3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107303,
|
||||
"name": "4.7.3 Beta 4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107304,
|
||||
"name": "4.7.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107305,
|
||||
"name": "4.7.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": true
|
||||
},
|
||||
"forceMainUpgrader": true,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.7.3 Upgrade Code
|
||||
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) Invision Power Services, Inc.
|
||||
* @license https://www.invisioncommunity.com/legal/standards/
|
||||
* @package Invision Community
|
||||
* @subpackage Events
|
||||
* @since 11 Oct 2022
|
||||
*/
|
||||
|
||||
namespace IPS\calendar\setup\upg_107305;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 4.7.3 Upgrade Code
|
||||
*/
|
||||
class _Upgrade
|
||||
{
|
||||
/**
|
||||
* ...
|
||||
*
|
||||
* @return bool|array If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
|
||||
*/
|
||||
public function step1()
|
||||
{
|
||||
\IPS\Widget::deprecateWidget('todaysBirthdays', 'calendar');
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// You can create as many additional methods (step2, step3, etc.) as is necessary.
|
||||
// Each step will be executed in a new HTTP request
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107306,
|
||||
"name": "4.7.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107307,
|
||||
"name": "4.7.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107400,
|
||||
"name": "4.7.4 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": true,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"calendar\/front\/controllers\/overview\/ips.overview.nearMe.js",
|
||||
"calendar\/front\/controllers\/overview\/ips.overview.search.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"events_search_search_location",
|
||||
"events_near_you_soon"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [
|
||||
"event_your_current_location",
|
||||
"event_your_current_location_sorry",
|
||||
"event_finding_location"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"calendar_default_view"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/events\/event",
|
||||
"front\/events\/featuredEvent",
|
||||
"front\/events\/nearMe",
|
||||
"front\/events\/nearMeContent",
|
||||
"front\/events\/searchResultsWrapper",
|
||||
"front\/modcp\/approvalQueueItem",
|
||||
"front\/overview\/byMonth",
|
||||
"front\/overview\/header",
|
||||
"front\/overview\/searchBar",
|
||||
"front\/submit\/datesForm",
|
||||
"front\/view\/eventSidebar"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107401,
|
||||
"name": "4.7.4 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"event_your_current_location_sorry"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/events\/event",
|
||||
"front\/events\/featuredEvent",
|
||||
"front\/overview\/searchBar"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107402,
|
||||
"name": "4.7.4 Beta 3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"calendar\/front\/controllers\/overview\/ips.overview.nearMe.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107403,
|
||||
"name": "4.7.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/events\/event",
|
||||
"front\/events\/featuredEvent"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107404,
|
||||
"name": "4.7.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107405,
|
||||
"name": "4.7.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107406,
|
||||
"name": "4.7.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107500,
|
||||
"name": "4.7.5 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107501,
|
||||
"name": "4.7.5",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107502,
|
||||
"name": "4.7.5",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107503,
|
||||
"name": "4.7.5",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107504,
|
||||
"name": "4.7.5",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107505,
|
||||
"name": "4.7.5",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107600,
|
||||
"name": "4.7.6 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/view\/view"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"id": 107601,
|
||||
"name": "4.7.6",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -353,4 +353,55 @@ class _Calendar extends \IPS\Node\Model implements \IPS\Node\Permissions
|
||||
$this->allow_comments = $values['cal_allow_comments'];
|
||||
$this->allow_reviews = $values['cal_allow_reviews'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Content was held for approval by container
|
||||
* Allow node classes that can determine if content should be held for approval in individual nodes
|
||||
*
|
||||
* @param string $content The type of content we are checking (item, comment, review).
|
||||
* @param \IPS\Member|NULL $member Member to check or NULL for currently logged in member.
|
||||
* @return bool
|
||||
*/
|
||||
public function contentHeldForApprovalByNode( string $content, ?\IPS\Member $member = NULL ): bool
|
||||
{
|
||||
/* If members group bypasses, then no. */
|
||||
$member = $member ?: \IPS\Member::loggedIn();
|
||||
if ( $member->group['g_avoid_q'] )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch( $content )
|
||||
{
|
||||
case 'item':
|
||||
return (bool) $this->moderate;
|
||||
break;
|
||||
|
||||
case 'comment':
|
||||
return (bool) $this->comment_moderate;
|
||||
break;
|
||||
|
||||
case 'review':
|
||||
return (bool) $this->comment_review;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get URL
|
||||
*
|
||||
* @return \IPS\Http\Url
|
||||
* @throws \BadMethodCallException
|
||||
*/
|
||||
public function url()
|
||||
{
|
||||
$url = parent::url();
|
||||
|
||||
if( \IPS\Settings::i()->calendar_default_view == 'overview' )
|
||||
{
|
||||
$url = $url->setQueryString( array( 'view' => 'month') );
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
}
|
||||
@@ -147,7 +147,14 @@ class _Date extends \IPS\DateTime
|
||||
}
|
||||
|
||||
/* If the date is not valid, that means a bad value was supplied */
|
||||
if( !checkdate( $month, $day, $year ) )
|
||||
try
|
||||
{
|
||||
if( !checkdate( $month, $day, $year ) )
|
||||
{
|
||||
throw new \InvalidArgumentException;
|
||||
}
|
||||
}
|
||||
catch ( \TypeError $e )
|
||||
{
|
||||
throw new \InvalidArgumentException;
|
||||
}
|
||||
@@ -196,6 +203,22 @@ class _Date extends \IPS\DateTime
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the Root DateTime instance to a \IPS\calendar\Date instance
|
||||
*
|
||||
* @param \DateTime $dateTime
|
||||
* @return Date
|
||||
*/
|
||||
public static function dateTimeToCalendarDate( \DateTime $dateTime ): \IPS\calendar\Date
|
||||
{
|
||||
if( \in_array( \get_class( $dateTime ), [ 'DateTime', 'IPS\\DateTime'] ) )
|
||||
{
|
||||
return new static( $dateTime->format('c'), $dateTime->getTimezone() );
|
||||
}
|
||||
|
||||
return $dateTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the time zone for the DateTime object
|
||||
*
|
||||
@@ -350,51 +373,6 @@ class _Date extends \IPS\DateTime
|
||||
return $dayNames;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief List of timezones and the PHP timezone IDs to utilize. Note that this is only used during submit.
|
||||
*/
|
||||
public static $timezones = array(
|
||||
'-12',
|
||||
'-11',
|
||||
'-10',
|
||||
'-9.5',
|
||||
'-9',
|
||||
'-8',
|
||||
'-7',
|
||||
'-6',
|
||||
'-5',
|
||||
'-4.5',
|
||||
'-4',
|
||||
'-3.5',
|
||||
'-3',
|
||||
'-2',
|
||||
'-1',
|
||||
'0',
|
||||
'1',
|
||||
'2',
|
||||
'3',
|
||||
'3.5',
|
||||
'4',
|
||||
'4.5',
|
||||
'5',
|
||||
'5.5',
|
||||
'5.75',
|
||||
'6',
|
||||
'6.5',
|
||||
'7',
|
||||
'8',
|
||||
'9',
|
||||
'9.5',
|
||||
'10',
|
||||
'10.5',
|
||||
'11',
|
||||
'11.5',
|
||||
'12',
|
||||
'12.75',
|
||||
'13',
|
||||
'14',
|
||||
);
|
||||
|
||||
/**
|
||||
* Get an array of time zones with GMT offset information supplied in a user-friendly format
|
||||
*
|
||||
@@ -402,20 +380,19 @@ class _Date extends \IPS\DateTime
|
||||
*/
|
||||
public static function getTimezones()
|
||||
{
|
||||
$return = array();
|
||||
$zones = \DateTimeZone::listIdentifiers( \DateTimeZone::ALL );
|
||||
|
||||
if( \IPS\Member::loggedIn()->timezone )
|
||||
$timezones[\IPS\Member::loggedIn()->timezone] = \IPS\Member::loggedIn()->timezone;
|
||||
foreach($zones as $timezone)
|
||||
{
|
||||
$return[ \IPS\Member::loggedIn()->timezone ] = array( 'text' => \IPS\Member::loggedIn()->timezone, 'short' => \IPS\Member::loggedIn()->timezone );
|
||||
if( $timezone == \IPS\Member::loggedIn()->timezone )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$timezones[$timezone] = $timezone;
|
||||
}
|
||||
|
||||
foreach( static::$timezones as $_offset )
|
||||
{
|
||||
$sprintf = ( \strpos( $_offset, '-' ) === 0 ) ? '- ' . \substr( $_offset, 1 ) : '+ ' . $_offset;
|
||||
$return[ $_offset !== '0' ? $_offset : 'GMT' ] = array( 'text' => \IPS\Member::loggedIn()->language()->addToStack('timezone_offset_' . $_offset ), 'short' => \IPS\Member::loggedIn()->language()->addToStack('timezone_offset_short', FALSE, array( 'sprintf' => array( $sprintf ) ) ) );
|
||||
}
|
||||
|
||||
return $return;
|
||||
return $timezones;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -475,42 +452,8 @@ class _Date extends \IPS\DateTime
|
||||
/* Avengers assemble! */
|
||||
$time = implode( ':', $_timeBits );
|
||||
}
|
||||
|
||||
/* Default timezone - fairly straightforward */
|
||||
if( \IPS\Member::loggedIn()->timezone AND $timezone == \IPS\Member::loggedIn()->timezone )
|
||||
{
|
||||
$dateObject = new static( $date . ( $time ? ' ' . $time : '' ), new \DateTimeZone( \IPS\Member::loggedIn()->timezone ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If time is supplied, we are going to create a date-time string containing timezone offset info, so reformat date since it might be m/d/yyyy for instance */
|
||||
$date = new static( $date, \IPS\Member::loggedIn()->timezone ? new \DateTimeZone( \IPS\Member::loggedIn()->timezone ) : NULL );
|
||||
$date = $date->format( 'Y-m-d' );
|
||||
|
||||
/* Reformat the time to give us what we want */
|
||||
if( $time )
|
||||
{
|
||||
if( $timezone == 'GMT' )
|
||||
{
|
||||
$time = 'T' . $time . '+00:00';
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Handle incrementals */
|
||||
$timezone = str_replace( array( '.5', '.75' ), array( ':30', ':45' ), $timezone );
|
||||
$timezone = explode( ':', $timezone );
|
||||
|
||||
$hours = ( mb_substr( $timezone[0], 0, 1 ) == '-' ) ? '-' . str_pad( ltrim( $timezone[0], "-" ), 2, '0', STR_PAD_LEFT ) : '+' . str_pad( $timezone[0], 2, '0', STR_PAD_LEFT );
|
||||
$time = 'T' . $time . $hours .':' . ( isset( $timezone[1] ) ? str_pad( $timezone[1], 2, '0', STR_PAD_LEFT ) : '00' );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$time = 'T00:00:00+00:00';
|
||||
}
|
||||
|
||||
$dateObject = new static( $date . $time );
|
||||
}
|
||||
$dateObject = new static( $date . ( $time ? ' ' . $time : '' ), new \DateTimeZone( $timezone ) );
|
||||
|
||||
return $dateObject->setTimezone( new \DateTimeZone( 'UTC' ) );
|
||||
}
|
||||
@@ -585,105 +528,6 @@ class _Date extends \IPS\DateTime
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the birthdays for the date
|
||||
*
|
||||
* @param bool $day Whether to limit to the current day or not
|
||||
* @param bool $count Flag to indicate we only need the count
|
||||
* @note When $count is TRUE we return an array of dates => integers (counts), when it is FALSE we return an array of dates => array( member objects )
|
||||
* @return array
|
||||
*/
|
||||
public function getBirthdays( $day=FALSE, $count=FALSE )
|
||||
{
|
||||
$birthdays = array();
|
||||
|
||||
/* Is the setting enabled? */
|
||||
if( !\IPS\Settings::i()->show_bday_calendar )
|
||||
{
|
||||
return $birthdays;
|
||||
}
|
||||
|
||||
/* Get where clause */
|
||||
$where = $this->getBirthdaysWhere( $day );
|
||||
|
||||
/* Now, do we just want the count? */
|
||||
if( $count )
|
||||
{
|
||||
$members = \IPS\Db::i()->select( 'COUNT(*) as total, bday_month, bday_day', 'core_members', $where, NULL, NULL, array( 'bday_month', 'bday_day' ) );
|
||||
|
||||
foreach( $members as $member )
|
||||
{
|
||||
$birthdays[ str_pad( $member['bday_month'], 2, 0, STR_PAD_LEFT ) . str_pad( $member['bday_day'], 2, 0, STR_PAD_LEFT ) ] = $member['total'];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$members = \IPS\Db::i()->select( '*', 'core_members', $where, 'name ASC', array( 0, 5 ) );
|
||||
|
||||
if( $members->count() )
|
||||
{
|
||||
foreach( $members as $member )
|
||||
{
|
||||
/* If it's not leap year we do the nice thing and show Feb 29th birthdays on Feb 28th */
|
||||
if( $this->mon == 2 AND !$this->leapYear() AND $member['bday_month'] == 2 AND $member['bday_day'] == 29 )
|
||||
{
|
||||
$member['bday_day'] = 28;
|
||||
}
|
||||
|
||||
$member = \IPS\Member::constructFromData( $member );
|
||||
|
||||
$birthdays[ str_pad( $member->bday_month, 2, 0, STR_PAD_LEFT ) . str_pad( $member->bday_day, 2, 0, STR_PAD_LEFT ) ][] = $member;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $birthdays;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the where clause to fetch birthdays
|
||||
*
|
||||
* @param bool $day Whether to limit to the current day or not
|
||||
* @return array
|
||||
*/
|
||||
public function getBirthdaysWhere( $day=FALSE )
|
||||
{
|
||||
/* We always limit by month */
|
||||
$where = array( array( 'bday_month=?', $this->mon ) );
|
||||
|
||||
/* Are we also limiting by day? */
|
||||
if( $day === TRUE )
|
||||
{
|
||||
/* February 29th is special */
|
||||
if( $this->mon == 2 AND $this->mday == 28 AND !$this->leapYear() )
|
||||
{
|
||||
$where[] = array( 'bday_day IN(28,29)' );
|
||||
}
|
||||
else
|
||||
{
|
||||
$where[] = array( 'bday_day=?', $this->mday );
|
||||
}
|
||||
}
|
||||
|
||||
/* Exclude banned users */
|
||||
$where[] = array( 'temp_ban=?', 0 );
|
||||
|
||||
/* Groups with 'g_view_board' off are also 'banned', so factor those in too */
|
||||
$goodGroups = array();
|
||||
|
||||
foreach( \IPS\Member\Group::groups() as $group )
|
||||
{
|
||||
if( $group->g_view_board )
|
||||
{
|
||||
$goodGroups[] = $group->g_id;
|
||||
}
|
||||
}
|
||||
|
||||
$where[] = array( "member_group_id IN(" . implode( ',', $goodGroups ) . ")" );
|
||||
|
||||
return $where;
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic method to make retrieving certain data easier
|
||||
*
|
||||
|
||||
@@ -151,6 +151,11 @@ class _Event extends \IPS\Content\Item implements
|
||||
* @brief Location Data Cache
|
||||
*/
|
||||
protected $locationData = NULL;
|
||||
|
||||
/**
|
||||
* @brief Happening Cache
|
||||
*/
|
||||
protected $happeningData = FALSE;
|
||||
|
||||
/**
|
||||
* @brief [Content] Key for hide reasons
|
||||
@@ -360,7 +365,8 @@ class _Event extends \IPS\Content\Item implements
|
||||
}
|
||||
|
||||
/* Return the results we found after storing them */
|
||||
$this->parsedOccurrences = static::_findOccurances( $this->_start_date, $this->_end_date, $startDate, $endDate, $recurringData );
|
||||
$timezone = ( !empty( $this->timezone ) and \in_array( \IPS\DateTime::getFixedTimezone( $this->timezone ), \DateTimeZone::listIdentifiers() ) ) ? new \DateTimeZone( $this->timezone ) : NULL;
|
||||
$this->parsedOccurrences = static::_findOccurances( $this->_start_date, $this->_end_date, $startDate, $endDate, $recurringData, $timezone );
|
||||
|
||||
return $this->parsedOccurrences;
|
||||
}
|
||||
@@ -400,9 +406,10 @@ class _Event extends \IPS\Content\Item implements
|
||||
* @param \IPS\calendar\Date $startDate Date to start from
|
||||
* @param \IPS\calendar\Date $endDate Date to end at
|
||||
* @param array $recurringData Reccurance data
|
||||
* @param \DateTimeZone $eventTimezone Event timezone
|
||||
* @return array
|
||||
*/
|
||||
public static function _findOccurances( $eventStart, $eventEnd, $startDate, $endDate, $recurringData )
|
||||
public static function _findOccurances( $eventStart, $eventEnd, $startDate, $endDate, $recurringData, ?\DateTimeZone $eventTimezone=NULL )
|
||||
{
|
||||
$keyword = NULL;
|
||||
$results = array();
|
||||
@@ -425,11 +432,25 @@ class _Event extends \IPS\Content\Item implements
|
||||
/* Get the days we repeat on */
|
||||
$_repeatDays = array();
|
||||
|
||||
foreach ( \IPS\calendar\Date::getDayNames() as $day )
|
||||
/* adjust repeat freq relative to event start date */
|
||||
$offset = 0;
|
||||
|
||||
if( $eventTimezone )
|
||||
{
|
||||
$relativeDate = clone $eventStart;
|
||||
$relativeDate->setTimezone( $eventTimezone );
|
||||
|
||||
if( $relativeDate->weekday !== $eventStart->weekday )
|
||||
{
|
||||
$offset = $relativeDate->wday - $eventStart->wday;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( \IPS\calendar\Date::getDayNames() as $key => $day )
|
||||
{
|
||||
if ( $recurringData['repeat_freq_on_' . $day['ical'] ] == TRUE )
|
||||
{
|
||||
$_repeatDays[] = $day['english'];
|
||||
$_repeatDays[] = \IPS\calendar\Date::getDayNames()[$key-$offset]['english'];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -768,6 +789,8 @@ class _Event extends \IPS\Content\Item implements
|
||||
/* Get our occurrences based on the period we are looping */
|
||||
foreach ( $period as $dateOccurrence )
|
||||
{
|
||||
$dateOccurrence = \IPS\calendar\Date::dateTimeToCalendarDate( $dateOccurrence );
|
||||
|
||||
$thisOccurrence = $dateOccurrence->getDateInformation( $dateOccurrence->getTimestamp() );
|
||||
$dateOccurrence = \IPS\calendar\Date::getDate( $thisOccurrence['year'], $thisOccurrence['mon'], $thisOccurrence['mday'], $thisOccurrence['hours'], $thisOccurrence['minutes'], $thisOccurrence['seconds'] );
|
||||
|
||||
@@ -776,7 +799,7 @@ class _Event extends \IPS\Content\Item implements
|
||||
if ( ( $dateOccurrence->mysqlDatetime( FALSE ) >= $startDate->mysqlDatetime( FALSE ) AND $dateOccurrence->mysqlDatetime( FALSE ) <= $endDate->mysqlDatetime( FALSE ) ) OR
|
||||
( $eDate !== NULL AND $eDate->mysqlDatetime( FALSE ) >= $startDate->mysqlDatetime( FALSE ) AND $eDate->mysqlDatetime( FALSE ) <= $endDate->mysqlDatetime( FALSE ) ) OR
|
||||
( $eDate !== NULL AND $dateOccurrence->mysqlDatetime( FALSE ) <= $startDate->mysqlDatetime( FALSE ) AND $eDate->mysqlDatetime( FALSE ) >= $endDate->mysqlDatetime( FALSE ) )
|
||||
)
|
||||
)
|
||||
{
|
||||
$results[] = array( 'startDate' => $dateOccurrence, 'endDate' => $eDate );
|
||||
}
|
||||
@@ -913,7 +936,7 @@ class _Event extends \IPS\Content\Item implements
|
||||
$occurrences = $this->findOccurrences( $date->adjust( "-2 years" ), $date );
|
||||
$occurrence = array_pop( $occurrences );
|
||||
|
||||
if ( $occurrence[ $type ] )
|
||||
if ( $occurrence and $occurrence[ $type ] )
|
||||
{
|
||||
return $occurrence[ $type ];
|
||||
}
|
||||
@@ -1565,6 +1588,8 @@ class _Event extends \IPS\Content\Item implements
|
||||
/* Cover photo and location */
|
||||
$return['header'] = new \IPS\Helpers\Form\Upload( 'event_cover_photo', ( $item AND $item->cover_photo ) ? \IPS\File::get( 'calendar_Events', $item->cover_photo ) : NULL, FALSE, array( 'image' => TRUE, 'allowStockPhotos' => TRUE, 'storageExtension' => 'calendar_Events', 'canBeModerated' => TRUE, 'retainDeleted' => $isCopy ) );
|
||||
|
||||
$return['event_online'] = new \IPS\Helpers\Form\YesNo( 'event_online', ( $item ) ? $item->online : FALSE, FALSE, array( 'togglesOff' => array( 'venue', 'event_location' ), 'togglesOn' => array( 'event_url' ) ) );
|
||||
|
||||
if ( \IPS\Settings::i()->calendar_venues_enabled )
|
||||
{
|
||||
$roots = \IPS\calendar\Venue::roots();
|
||||
@@ -1575,10 +1600,12 @@ class _Event extends \IPS\Content\Item implements
|
||||
'zeroVal' => 'venues_not_listed',
|
||||
'zeroValTogglesOn' => array( 'event_location', 'event_new_venue' ),
|
||||
'permissionCheck' => 'add',
|
||||
) );
|
||||
), NULL,NULL, NULL, 'venue' );
|
||||
}
|
||||
|
||||
$return['location'] = new \IPS\Helpers\Form\Address( 'event_location', ( $item AND $item->location ) ? \IPS\GeoLocation::buildFromJson( $item->location ) : NULL, FALSE, array( 'minimize' => ( $item AND $item->location ) ? FALSE : TRUE, 'requireFullAddress' => FALSE, 'preselectCountry' => FALSE ), NULL, NULL, NULL, 'event_location' );
|
||||
$return['location'] = new \IPS\Helpers\Form\Address( 'event_location', ( $item AND $item->location ) ? \IPS\GeoLocation::buildFromJson( $item->location ) : NULL, FALSE, array( 'minimize' => ( $item AND $item->location ) ? FALSE : TRUE, 'requireFullAddress' => FALSE, 'preselectCountry' => FALSE ), NULL, NULL, NULL, 'event_location' );
|
||||
|
||||
$return['url'] = new \IPS\Helpers\Form\Url( 'event_url', ( $item AND $item->url ) ? $item->url : NULL, FALSE, array(), NULL, NULL, NULL, 'event_url' );
|
||||
|
||||
/* Save location as a new venue? */
|
||||
if ( \IPS\Settings::i()->calendar_venues_enabled and \IPS\Member::loggedIn()->hasAcpRestriction( 'calendar', 'calendars', 'venues_manage' ) )
|
||||
@@ -1825,6 +1852,33 @@ class _Event extends \IPS\Content\Item implements
|
||||
|
||||
}
|
||||
|
||||
if ( isset( $this->venue ) or isset( $this->location ) )
|
||||
{
|
||||
$location = json_decode( ( isset( $this->venue ) ) ? $this->venue()->address : $this->location, true );
|
||||
$this->latitude = $location['lat'];
|
||||
$this->longitude = $location['long'];
|
||||
}
|
||||
|
||||
$this->online = $values['event_online'];
|
||||
$this->url = $values['event_url'];
|
||||
|
||||
/* Do we know the event type */
|
||||
if( $this->online and $values['event_url'] )
|
||||
{
|
||||
$domain = preg_replace("/^([a-zA-Z0-9].*\.)?([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z.]{2,})$/", '$2', $values['event_url']->data['host']);
|
||||
|
||||
$services = $this->onlineEventServices();
|
||||
|
||||
if( \array_key_exists( $domain, $services ) )
|
||||
{
|
||||
$this->online_type = $services[$domain];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->online_type = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Gallery album association */
|
||||
if ( \IPS\Application::appIsEnabled( 'gallery' ) AND $values['event_album'] instanceof \IPS\gallery\Album )
|
||||
{
|
||||
@@ -1912,9 +1966,7 @@ class _Event extends \IPS\Content\Item implements
|
||||
/* We should not delete maps for imported events, because we do not want to reimport them */
|
||||
//\IPS\Db::i()->delete( 'calendar_import_map', array( 'import_event_id=?', $this->id ) );
|
||||
|
||||
/* Delete Cover Photo -specifically call parent otherwise deleteOrMoveContent process cannot run within the AdminCP */
|
||||
$photo = parent::coverPhoto();
|
||||
$photo->delete();
|
||||
$this->coverPhotoFile()?->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1964,11 +2016,12 @@ class _Event extends \IPS\Content\Item implements
|
||||
* @param \IPS\Member $member The member (NULL to use currently logged in member)
|
||||
* @param \IPS\calendar\Venue $venue The venue to filter by (if provided)
|
||||
* @param bool $skipPermissions Skip permission checks (used by REST API to fetch all events which are filtered on later)
|
||||
* @param array|null $location Array of item lat and long
|
||||
* @return \IPS\Patterns\ActiveRecordIterator
|
||||
* @throws \InvalidArgumentException
|
||||
* @see \IPS\Content\_Item::getItemsWithPermission()
|
||||
*/
|
||||
public static function retrieveEvents ( $startDate, $endDate=NULL, $calendar=NULL, $limit=NULL, $formatEvents=TRUE, $member=NULL, $venue=NULL, $skipPermissions=FALSE )
|
||||
public static function retrieveEvents ( $startDate, $endDate=NULL, $calendar=NULL, $limit=NULL, $formatEvents=TRUE, $member=NULL, $venue=NULL, $skipPermissions=FALSE, $location = NULL, $online = NULL )
|
||||
{
|
||||
$where = array();
|
||||
|
||||
@@ -1995,6 +2048,16 @@ class _Event extends \IPS\Content\Item implements
|
||||
throw new \InvalidArgumentException;
|
||||
}
|
||||
|
||||
if( $online !== NULL )
|
||||
{
|
||||
$where[] = array( '( event_online = ? )', (int) $online );
|
||||
}
|
||||
|
||||
if( $location )
|
||||
{
|
||||
$where[] = array( '( event_location IS NOT NULL )' );
|
||||
}
|
||||
|
||||
/* Load member */
|
||||
if ( $member === NULL AND $skipPermissions === FALSE )
|
||||
{
|
||||
@@ -2084,7 +2147,7 @@ class _Event extends \IPS\Content\Item implements
|
||||
}
|
||||
|
||||
/* Get the non-recurring events */
|
||||
$events = \IPS\calendar\Event::getItemsWithPermission( array_merge( $where, $nonRecurring ), 'event_start_date ASC', NULL, ( $skipPermissions === TRUE ) ? NULL : 'read', ( $skipPermissions === TRUE ) ? \IPS\Content\Hideable::FILTER_SHOW_HIDDEN : \IPS\Content\Hideable::FILTER_AUTOMATIC, 0, $member );
|
||||
$events = \IPS\calendar\Event::getItemsWithPermission( array_merge( $where, $nonRecurring ), 'event_start_date ASC', NULL, ( $skipPermissions === TRUE ) ? NULL : 'read', ( $skipPermissions === TRUE ) ? \IPS\Content\Hideable::FILTER_SHOW_HIDDEN : \IPS\Content\Hideable::FILTER_AUTOMATIC, 0, $member, FALSE, FALSE, FALSE,FALSE, NULL, FALSE, TRUE, TRUE, TRUE, FALSE, $location );
|
||||
/* We need to make sure ranged events repeat each day that they occur on */
|
||||
$formattedEvents = array();
|
||||
|
||||
@@ -2116,7 +2179,7 @@ class _Event extends \IPS\Content\Item implements
|
||||
}
|
||||
|
||||
/* Now get the recurring events.... */
|
||||
$recurringEvents = \IPS\calendar\Event::getItemsWithPermission( array_merge( $where, array( array( "event_recurring IS NOT NULL AND (event_recurring_end_date IS NULL OR DATE(event_recurring_end_date) >= '{$startDate->mysqlDatetime( FALSE )}')" ) ) ), 'event_start_date ASC', NULL, ( $skipPermissions === TRUE ) ? NULL : 'read', ( $skipPermissions === TRUE ) ? \IPS\Content\Hideable::FILTER_SHOW_HIDDEN : \IPS\Content\Hideable::FILTER_AUTOMATIC, 0, $member );
|
||||
$recurringEvents = \IPS\calendar\Event::getItemsWithPermission( array_merge( $where, array( array( "event_recurring IS NOT NULL AND (event_recurring_end_date IS NULL OR DATE(event_recurring_end_date) >= '{$startDate->mysqlDatetime( FALSE )}')" ) ) ), 'event_start_date ASC', NULL, ( $skipPermissions === TRUE ) ? NULL : 'read', ( $skipPermissions === TRUE ) ? \IPS\Content\Hideable::FILTER_SHOW_HIDDEN : \IPS\Content\Hideable::FILTER_AUTOMATIC, 0, $member, FALSE, FALSE, FALSE,FALSE, NULL, FALSE, TRUE, TRUE, TRUE, FALSE, $location );
|
||||
|
||||
/* Loop over any results */
|
||||
foreach( $recurringEvents as $event )
|
||||
@@ -2240,7 +2303,8 @@ class _Event extends \IPS\Content\Item implements
|
||||
*/
|
||||
public function hasPassed()
|
||||
{
|
||||
$lastOccurrence = $this->lastOccurrence( 'endDate' ) ?? $this->lastOccurrence( 'startDate' );
|
||||
// Get the end date. If none is available use the start date plus an hour so that online event join links show for a short while after the start
|
||||
$lastOccurrence = $this->lastOccurrence( 'endDate' ) ?? $this->lastOccurrence( 'startDate' )->add( new \DateInterval("PT1H") );
|
||||
if ( $lastOccurrence < \IPS\DateTime::ts( time() ) )
|
||||
{
|
||||
return true;
|
||||
@@ -2257,7 +2321,7 @@ class _Event extends \IPS\Content\Item implements
|
||||
public function coverPhoto()
|
||||
{
|
||||
$photo = parent::coverPhoto();
|
||||
$photo->overlay = \IPS\Theme::i()->getTemplate('view', 'calendar')->coverPhotoOverlay($this);
|
||||
$photo->overlay = \IPS\Theme::i()->getTemplate('view', 'calendar', 'front')->coverPhotoOverlay($this);
|
||||
return $photo;
|
||||
}
|
||||
|
||||
@@ -2601,4 +2665,62 @@ class _Event extends \IPS\Content\Item implements
|
||||
|
||||
return \count( $attachments ) ? \array_slice( $attachments, 0, $limit ) : NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Online Event Services
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected static function onlineEventServices()
|
||||
{
|
||||
$services = array(
|
||||
'eventbrite.com' => 'eventbrite',
|
||||
'on24.com' => 'on24',
|
||||
'zoom.com' => 'zoom',
|
||||
'zoom.us' => 'zoom',
|
||||
'facebook.com' => 'facebook',
|
||||
'google.com' => 'google',
|
||||
'webex.com' => 'webex',
|
||||
'slack.com' => 'slack',
|
||||
'discord.com' => 'discord',
|
||||
'discord.gg' => 'discord',
|
||||
'microsoft.com' => 'teams',
|
||||
'tiktok.com' => 'tiktok',
|
||||
'twitch.tv' => 'twitch',
|
||||
'vimeo.com' => 'vimeo',
|
||||
'spotme.com' => 'spotme',
|
||||
);
|
||||
|
||||
return $services;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the event today/now?
|
||||
*
|
||||
* @return string|bool
|
||||
*/
|
||||
public function get__happening()
|
||||
{
|
||||
if( !$this->happeningData )
|
||||
{
|
||||
$now = \IPS\calendar\Date::ts( time() );
|
||||
|
||||
/* Non recurring and events with end date*/
|
||||
if( !$this->recurring and $this->_start_date and $this->_end_date and ( ( $now > $this->_start_date ) and $now < $this->_end_date ) )
|
||||
{
|
||||
$this->happeningData = \IPS\Member::loggedIn()->language()->get( 'event_happening_now' );
|
||||
}
|
||||
/* recurring/no end date */
|
||||
elseif( $this->nextOccurrence( $now ) and $now->format('Y-m-d') == $this->nextOccurrence( $now )->format('Y-m-d') )
|
||||
{
|
||||
$this->happeningData = \IPS\Member::loggedIn()->language()->get( 'event_happening_today' );
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->happeningData = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->happeningData;
|
||||
}
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief todaysBirthdays Widget
|
||||
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) Invision Power Services, Inc.
|
||||
* @license https://www.invisioncommunity.com/legal/standards/
|
||||
* @package Invision Community
|
||||
* @subpackage Calendar
|
||||
* @since 18 Dec 2013
|
||||
*/
|
||||
|
||||
namespace IPS\calendar\widgets;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* todaysBirthdays Widget
|
||||
*/
|
||||
class _todaysBirthdays extends \IPS\Widget
|
||||
{
|
||||
/**
|
||||
* @brief Widget Key
|
||||
*/
|
||||
public $key = 'todaysBirthdays';
|
||||
|
||||
/**
|
||||
* @brief App
|
||||
*/
|
||||
public $app = 'calendar';
|
||||
|
||||
/**
|
||||
* @brief Plugin
|
||||
*/
|
||||
public $plugin = '';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $uniqueKey Unique key for this specific instance
|
||||
* @param array $configuration Widget custom configuration
|
||||
* @param null|string|array $access Array/JSON string of executable apps (core=sidebar only, content=IP.Content only, etc)
|
||||
* @param null|string $orientation Orientation (top, bottom, right, left)
|
||||
* @return void
|
||||
*/
|
||||
public function __construct( $uniqueKey, array $configuration, $access=null, $orientation=null )
|
||||
{
|
||||
parent::__construct( $uniqueKey, $configuration, $access, $orientation );
|
||||
|
||||
/* We need to adjust for timezone too */
|
||||
$this->cacheKey = "widget_{$this->key}_" . $this->uniqueKey . '_' . md5( json_encode( $configuration ) . "_" . \IPS\Member::loggedIn()->language()->id . "_" . \IPS\Member::loggedIn()->skin . "_" . json_encode( \IPS\Member::loggedIn()->groups ) . "_" . $orientation . \IPS\Member::loggedIn()->timezone );
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify widget configuration
|
||||
*
|
||||
* @param null|\IPS\Helpers\Form $form Form object
|
||||
* @return null|\IPS\Helpers\Form
|
||||
*/
|
||||
public function configuration( &$form=null )
|
||||
{
|
||||
$form = parent::configuration( $form );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'auto_hide', isset( $this->configuration['auto_hide'] ) ? $this->configuration['auto_hide'] : FALSE, FALSE ) );
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render a widget
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
if( !\IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'calendar', 'calendar' ) ) )
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
$date = \IPS\calendar\Date::getDate();
|
||||
$birthdays = $date->getBirthdays( TRUE );
|
||||
$totalCount = $date->getBirthdays( TRUE, TRUE );
|
||||
|
||||
if( !isset( $birthdays[ $date->mon . $date->mday ] ) )
|
||||
{
|
||||
$birthdays[ $date->mon . $date->mday ] = array();
|
||||
}
|
||||
|
||||
/* Auto hiding? */
|
||||
if( !\count( $birthdays[ $date->mon . $date->mday ] ) AND isset( $this->configuration['auto_hide'] ) AND $this->configuration['auto_hide'] )
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
return $this->output( $birthdays[ $date->mon . $date->mday ], isset( $totalCount[ $date->mon . $date->mday ] ) ? $totalCount[ $date->mon . $date->mday ] : 0, $date );
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user