diff --git a/Credits.txt b/Credits.txt index 9d9601d0..a17b8690 100644 --- a/Credits.txt +++ b/Credits.txt @@ -5,10 +5,6 @@ Invision Power Services, Inc. is grateful to the following projects, whose work has been used throughout Invision Community to add style, flair and functionality to our product. -NULLING - Last Updated: 07 July 2022 - Author: IPBMafia.ru - AES implementation in PHP Description: Used by \IPS\Text\Encrypt to provide two-way text encryption for storing certain data. Location: system/3rd_party/AES @@ -33,7 +29,7 @@ Clipboard CKEditor Description: Provides the editor functionality for submitting content. Location: In development: applications/core/dev/ckeditor (custom build with additional plugins) - Included version: 4.19.0 + Included version: 4.19.1 Website: http://ckeditor.com License: http://www.gnu.org/copyleft/lesser.html @@ -93,7 +89,7 @@ google-diff-mode-patch graphql-php Description: PHP implementation of the GraphQL standard Location: system/3rd_party/graphql-php - Included version: 0.13.8 + Included version: 14.11.6 Website: https://webonyx.github.io/graphql-php/ License: http://opensource.org/licenses/MIT diff --git a/admin/convertutf8/system/Convert/Convert.php b/admin/convertutf8/system/Convert/Convert.php index 1aca9e5f..76f7db23 100644 --- a/admin/convertutf8/system/Convert/Convert.php +++ b/admin/convertutf8/system/Convert/Convert.php @@ -549,7 +549,7 @@ class Convert } /* If we have moved the only row from $batch to $nextbatch, then process that now */ - if ( \is_array( $batch ) and \count( $nextBatch ) and ! \count( $batch ) ) + if ( \is_array( $batch ) and ( \is_countable( $nextBatch ) and \count( $nextBatch ) ) and ! \count( $batch ) ) { $batch = $nextBatch; $nextBatch = array(); diff --git a/admin/install/eula.txt b/admin/install/eula.txt index abe550e9..1600a87c 100644 --- a/admin/install/eula.txt +++ b/admin/install/eula.txt @@ -1,9 +1,5 @@ =============================[NOTE]============================= - This software is Nulled! - Nulled by IPBMafia.ru - Buy license at https://www.invisionpower.com/buy/self-hosted -================================================================ - IPS 4.7.0 (107014) + IPS 4.7.6 (107601) =============================[NOTE]============================= Invision Community End User License Agreement diff --git a/admin/install/html/global/globalTemplate.phtml b/admin/install/html/global/globalTemplate.phtml index e032630a..31c7f150 100644 --- a/admin/install/html/global/globalTemplate.phtml +++ b/admin/install/html/global/globalTemplate.phtml @@ -65,8 +65,6 @@ {lang="gotosuite"} {lang="gotoacp"}

- Russian lang pack -

{lang="docs_link"} {{else}} @@ -88,7 +86,6 @@ {lang="install_guide"} {{endif}} -

Nulled by IPBMafia.ru

{lang="server_ip"} {expression="$_SERVER['SERVER_ADDR'] ?? ( $_SERVER['LOCAL_ADDR'] ?? 'unavailable' )"} diff --git a/admin/install/lang.php b/admin/install/lang.php index df0d6e91..f556bc45 100644 --- a/admin/install/lang.php +++ b/admin/install/lang.php @@ -28,6 +28,7 @@ $lang = array( 'err_conf_nowrite' => "In order to install Invision Community, you must make the conf_global.php writeable. If you are not sure how to do this, contact your hosting provider.", 'form_required' => "This field is required.", 'form_email_bad' => "That is not a valid email address.", + 'form_bad_value' => "That value is not allowed.", 'form_password_confirm' => "The passwords do not match.", 'step' => "Step %d", 'continue' => "Continue", @@ -133,7 +134,7 @@ $lang = array( 'sql_database' => "Database Name", 'sql_database_desc' => "If the database does not exist we will try to create it. If your MySQL user does not have permission and you're not sure how to create a database, contact your hosting provider for assistance.", 'sql_tbl_prefix' => "Table Prefix", - 'sql_tbl_prefix_desc' => "If provided, all database tables created will be prefixed with the value provided. It is recommended this is left blank.", + 'sql_tbl_prefix_desc' => "If provided, all database tables created will be prefixed with the value provided. It is recommended this is left blank. Allowed characters: 0-9 a-z - _", 'sql_port' => "Port", 'sql_port_desc' => "If you are not sure, leave at the default value.", 'sql_socket' => "Socket", diff --git a/admin/upgrade/css/misc.css b/admin/upgrade/css/misc.css index 7deb4a7e..c112a57e 100644 --- a/admin/upgrade/css/misc.css +++ b/admin/upgrade/css/misc.css @@ -132,7 +132,8 @@ hr.ipsHr { .ipsList_bullets { list-style-type: disc; - margin-left: 16px; + margin-left: 32px; + margin-bottom: 16px; } .ipsList_checks li { diff --git a/admin/upgrade/html/forms/apps.phtml b/admin/upgrade/html/forms/apps.phtml deleted file mode 100644 index bf0c4afb..00000000 --- a/admin/upgrade/html/forms/apps.phtml +++ /dev/null @@ -1,22 +0,0 @@ - - \ No newline at end of file diff --git a/admin/upgrade/html/global/disabled3rdParty.phtml b/admin/upgrade/html/global/disabled3rdParty.phtml index 8565bf18..8903e6a6 100644 --- a/admin/upgrade/html/global/disabled3rdParty.phtml +++ b/admin/upgrade/html/global/disabled3rdParty.phtml @@ -1,9 +1,11 @@ - -
-

{lang="third_party_stuff_disabled"}

+ +
+ {{if $showMessage}} +

{lang="third_party_stuff_disabled"}

+ {{endif}} {{if \count( $disabledApps )}}

{lang="third_party_stuff_disabled_apps"}

-
    +
      {{foreach $disabledApps as $app}}
    • {$app}
    • {{endforeach}} @@ -11,11 +13,13 @@ {{endif}} {{if \count( $disabledPlugins )}}

      {lang="third_party_stuff_disabled_plugins"}

      -
        +
          {{foreach $disabledPlugins as $plugin}}
        • {$plugin}
        • {{endforeach}}
        {{endif}} -

        {lang="third_party_stuff_disabled_end"}

        + {{if $showMessage}} +

        {lang="third_party_stuff_disabled_end"}

        + {{endif}}
\ No newline at end of file diff --git a/admin/upgrade/html/global/globalTemplate.phtml b/admin/upgrade/html/global/globalTemplate.phtml index e444c477..c5d56f8d 100644 --- a/admin/upgrade/html/global/globalTemplate.phtml +++ b/admin/upgrade/html/global/globalTemplate.phtml @@ -43,7 +43,7 @@
    - {{foreach array( 1 => 'login', 2 => 'healthcheck', 3 => 'license', 4 => 'applications', 5 => 'upgradeoptions', 6 => 'confirm', 7 => 'upgrade' ) as $i => $lang}} + {{foreach array( 1 => 'login', 2 => 'healthcheck', 3 => 'license', 5 => 'upgradeoptions', 6 => 'confirm', 7 => 'upgrade' ) as $i => $lang}}
  •   {lang="$lang"}
  • @@ -77,8 +77,6 @@ {lang="go_to_suite"} {lang="go_to_acp"}

    - Russian lang pack -

    {lang="suite_docs"}
{{else}} @@ -99,7 +97,6 @@ {lang="install_docs"}
{{endif}} -

Nulled by IPBMafia.ru

diff --git a/admin/upgrade/html/global/methodIssues.phtml b/admin/upgrade/html/global/methodIssues.phtml new file mode 100644 index 00000000..77e10dea --- /dev/null +++ b/admin/upgrade/html/global/methodIssues.phtml @@ -0,0 +1,8 @@ + + +
+
{lang="advise_removal_of_php8_incompatible_code"}
+
+ {$table|raw} +
+
\ No newline at end of file diff --git a/admin/upgrade/html/global/unfinishedUpgrade.phtml b/admin/upgrade/html/global/unfinishedUpgrade.phtml index 4e134cb6..99777d8d 100644 --- a/admin/upgrade/html/global/unfinishedUpgrade.phtml +++ b/admin/upgrade/html/global/unfinishedUpgrade.phtml @@ -6,7 +6,7 @@
  • {lang="upgrade_applications"}
      - {{foreach( $json['session']['apps'] ) as $app}} + {{foreach $json['session']['apps'] as $app => $data}}
    • {expression="ucfirst( $app )"}
    • {{endforeach}}
    diff --git a/admin/upgrade/lang.php b/admin/upgrade/lang.php index 3634c007..47b48ee7 100644 --- a/admin/upgrade/lang.php +++ b/admin/upgrade/lang.php @@ -681,4 +681,41 @@ $lang = array( '106000_deprecation' => "The following Cache and Datastore methods have been removed in Invision Community 4.6: APC, Wincache, Memcached and XCache.
    You do not need to do anything as the caching method will be reverted to 'None' after this upgrade.", + /* PHP 8 Compatibility Issues */ + 'method_check_fail' => 'PHP8 Incompatible Customizations', + 'method_check_fix' => 'Outdated Overloaded 3rd Party Methods', + 'methodscanner_no_issues' => 'No PHP8 Issues found', + 'invalid_php8_customization' => 'Contains outdated code. Please contact the Author for an updated version.', + 'method_issue_security' => 'Conflicting security level', + 'method_issue_static' => 'Inconsistent static declaration', + 'method_issue_return_type' => 'Conflicting return type hints', + 'method_issue_parameter_type' => 'Conflicting parameter type', + 'method_issue_nullable' => 'Conflicting parameter nullability', + 'method_issue_reference' => 'Conflicting reference', + 'method_issue_packed' => 'Packed status differs', + 'method_issue_final' => 'Overloaded final method', + 'method_issue_parameters' => 'Mismatching parameter list', + 'method_issue_security_desc' => 'Overloading method in the app/plugin changes the security (public, private, or protected) level from the base class from which it inherits', + 'method_issue_static_desc' => 'Base method is static and overloading method is not or vice versa', + 'method_issue_return_type_desc' => 'Base method has a different return type hint than the subclass\'s method', + 'method_issue_parameter_type_desc' => "Overloading method changes a parameter's type", + 'method_issue_nullable_desc' => 'Base method defined a parameter as nullable but the overloaded did not or vice versa', + 'method_issue_reference_desc' => 'The parameter is passed by reference to the base method but not to the overloading method or vice versa', + 'method_issue_packed_desc' => 'The parameter is "packed" in the base method but not in the overloading method or vice versa', + 'method_issue_final_desc' => 'A class in the app/plugin overloaded a method that was declared final, meaning it cannot be overloaded', + 'method_issue_parameters_desc' => 'A subclass method in the app/plugin defines a different set of parameters than the base class from which it inherits', + 'method_type' => 'Type', + 'method_app' => 'App', + 'method_reason' => 'Issue', + 'method_scanner_method' => 'Method', + 'method_subclassFile' => 'Subclass/Hook File', + 'method_baseFile' => 'Base Class File', + 'method_parameter' => 'Bad Parameter', + 'method_na' => 'N/A', + 'method_priority' => 'Priority', + 'acp_notification_ManualInterventionMessage' => 'PHP8 Incompatible Customizations', + 'advise_removal_of_php8_incompatible_code' => <<We are currently in the process of migrating our platform from PHP7 to PHP8 in order to provide you with the greatest level of performance and security. We've identified and disabled one or more Applications or Plugins currently installed on your site which contain PHP8 incompatible code. Refer to the AdminCP > Support > Get Support page for more information.

    You can re-enable these Applications and Plugins via the AdminCP > Applications page. Please make a note of the following Applications and Plugins so you are clear which have been automatically disabled via the upgrader.
  • +TEXT, + ); \ No newline at end of file diff --git a/applications/blog/Application.php b/applications/blog/Application.php index d42cb4d0..ca9e3e28 100644 --- a/applications/blog/Application.php +++ b/applications/blog/Application.php @@ -162,7 +162,7 @@ class _Application extends \IPS\Application public function getWebhooks() : array { return array_merge( [ - 'blogBlog_create' => \IPS\blogs\Blog::class + 'blogBlog_create' => \IPS\blog\Blog::class ], parent::getWebhooks()); } } \ No newline at end of file diff --git a/applications/blog/api/comments.php b/applications/blog/api/comments.php index 77cc96a5..bca0f3ae 100644 --- a/applications/blog/api/comments.php +++ b/applications/blog/api/comments.php @@ -281,15 +281,15 @@ class _comments extends \IPS\Content\Api\CommentController /** * POST /blog/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\blog\Entry\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\blog\Entry\Comment */ public function POSTitem_report( $id ) { diff --git a/applications/blog/api/entries.php b/applications/blog/api/entries.php index cfce7ed3..e72bcb1e 100644 --- a/applications/blog/api/entries.php +++ b/applications/blog/api/entries.php @@ -127,9 +127,9 @@ class _entries extends \IPS\Content\Api\ItemController * @apiparam int featured 1/0 indicating if the entry should be featured * @apiparam int category The blog entry category * @apiparam string poll_title Poll title (to create a poll) - * @apiparam bool poll_public Make the poll public - * @apiparam bool poll_only Make this a poll-only topic - * @apiparam array poll_options Array of objects with keys 'title' (string), 'answers' (array of objects with key 'value' set to the choice) and 'multichoice' (bool) + * @apiparam int poll_public 1/0 indicating if the poll is public + * @apiparam int poll_only 1/0 indicating if this a poll-only topic + * @apiparam array poll_options Array of objects with keys 'title' (string), 'answers' (array of objects with key 'value' set to the choice) and 'multichoice' (int 1/0) * @apiparam bool anonymous If 1, the item will be posted anonymously. * @throws 1B300/2 NO_BLOG The blog ID does not exist * @throws 1B300/3 NO_AUTHOR The author ID does not exist @@ -215,9 +215,9 @@ class _entries extends \IPS\Content\Api\ItemController * @apiparam int featured 1/0 indicating if the entry should be featured * @apiparam int category The blog entry category * @apiparam string poll_title Poll title (to create a poll) - * @apiparam bool poll_public Make the poll public - * @apiparam bool poll_only Make this a poll-only topic - * @apiparam array poll_options Array of objects with keys 'title' (string), 'answers' (array of objects with key 'value' set to the choice) and 'multichoice' (bool) + * @apiparam int poll_public 1/0 indicating if the poll is public + * @apiparam int poll_only 1/0 indicating if this a poll-only topic + * @apiparam array poll_options Array of objects with keys 'title' (string), 'answers' (array of objects with key 'value' set to the choice) and 'multichoice' (int 1/0) * @param int $id ID Number * @throws 2B300/6 INVALID_ID The entry ID is invalid or the authorized user does not have permission to view it * @throws 1B300/7 NO_BLOG The blog ID does not exist or the authorized user does not have permission to post in it diff --git a/applications/blog/data/javascript.xml b/applications/blog/data/javascript.xml index 1534067f..e914f054 100644 --- a/applications/blog/data/javascript.xml +++ b/applications/blog/data/javascript.xml @@ -1,6 +1,6 @@ - - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -66,7 +66,7 @@ } }); }(jQuery, _)); - - {{#lang}}manage_cats_new_row{{/lang}}\ "); diff --git a/applications/blog/data/lang.xml b/applications/blog/data/lang.xml index 932380ff..aeea5371 100644 --- a/applications/blog/data/lang.xml +++ b/applications/blog/data/lang.xml @@ -1,6 +1,6 @@ - + Blogs Blogs a comment on a blog entry diff --git a/applications/blog/data/theme.xml b/applications/blog/data/theme.xml index 7f8e970a..c7e2334b 100644 --- a/applications/blog/data/theme.xml +++ b/applications/blog/data/theme.xml @@ -1237,7 +1237,7 @@ {{endif}} {{if \count( $entry->tags() ) OR ( $entry->canEdit() AND $entry::canTag() )}} - {template="tags" group="global" app="core" params="$entry->tags(), FALSE, FALSE, ( $entry->canEdit() AND $entry::canTag() ) ? $entry->url() : NULL"} + {template="tags" group="global" app="core" params="$entry->tags(), FALSE, FALSE, ( $entry->canEdit() AND ( \count( $entry->tags() ) OR $entry::canTag() ) ) ? $entry->url() : NULL"} {{endif}} {{if \IPS\Settings::i()->blog_enable_rating}} diff --git a/applications/blog/data/versions.json b/applications/blog/data/versions.json index ded7012d..0a1b460c 100644 --- a/applications/blog/data/versions.json +++ b/applications/blog/data/versions.json @@ -488,5 +488,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" } \ No newline at end of file diff --git a/applications/blog/extensions/core/ContentRouter/Blog.php b/applications/blog/extensions/core/ContentRouter/Blog.php index 1b2c266b..74f7e059 100644 --- a/applications/blog/extensions/core/ContentRouter/Blog.php +++ b/applications/blog/extensions/core/ContentRouter/Blog.php @@ -33,6 +33,11 @@ class _Blog */ public $classes = array(); + /** + * @brief Can be shown in similar content + */ + public $similarContent = TRUE; + /** * Constructor * diff --git a/applications/blog/extensions/core/EditorLocations/Blogs.php b/applications/blog/extensions/core/EditorLocations/Blogs.php index 4fd16a9c..79592bce 100644 --- a/applications/blog/extensions/core/EditorLocations/Blogs.php +++ b/applications/blog/extensions/core/EditorLocations/Blogs.php @@ -56,7 +56,19 @@ class _Blogs */ public function canBeModerated( $member, $field ) { - if ( preg_match( '/^blogs\-(?:new-blog|blog|new-blog-group\d+)$/', $field->options['autoSaveKey'] ) ) + if ( preg_match( '/^blogs\-(?:new-blog|blog|new-blog-sidebar|new-blog-group\d+)$/', $field->options['autoSaveKey'] ) ) + { + return FALSE; + } + elseif ( preg_match( '/^blogs\-blog\-(\d+)m$/', $field->options['autoSaveKey'] ) ) + { + return FALSE; + } + elseif ( preg_match( '/^blogs\-blog\-(\d+)\-group(\d+)$/', $field->options['autoSaveKey'] ) ) + { + return FALSE; + } + elseif ( preg_match( '/^blogs\-blogsidebar\-(\d+)$/', $field->options['autoSaveKey'] ) ) { return FALSE; } diff --git a/applications/blog/extensions/core/MemberSync/Blog.php b/applications/blog/extensions/core/MemberSync/Blog.php index 037efc9c..fcf78008 100644 --- a/applications/blog/extensions/core/MemberSync/Blog.php +++ b/applications/blog/extensions/core/MemberSync/Blog.php @@ -36,8 +36,12 @@ class _Blog foreach( \IPS\blog\Blog::loadByOwner( $member2 ) as $blog ) { - $blog->member_id = $member->member_id; - $blog->save(); + /* Only do this if the blog is not a group blog */ + if ( !$blog->groupblog_ids ) + { + $blog->member_id = $member->member_id; + $blog->save(); + } } } diff --git a/applications/blog/extensions/core/RssImport/RssImport.php b/applications/blog/extensions/core/RssImport/RssImport.php index 03669605..f1fa275c 100644 --- a/applications/blog/extensions/core/RssImport/RssImport.php +++ b/applications/blog/extensions/core/RssImport/RssImport.php @@ -97,7 +97,7 @@ class _RssImport /* Send notifications */ $entry->sendNotifications(); - $entry->setTags( $settings['tags'] ); + $entry->setTags( $settings['tags'], $member ); return $entry; } diff --git a/applications/blog/modules/front/blogs/browse.php b/applications/blog/modules/front/blogs/browse.php index 90902ec3..acd1ae29 100644 --- a/applications/blog/modules/front/blogs/browse.php +++ b/applications/blog/modules/front/blogs/browse.php @@ -142,6 +142,9 @@ class _browse extends \IPS\Dispatcher\Controller \IPS\Output::i()->breadcrumb[] = array( $parent->url(), $parent->_title ); } \IPS\Output::i()->breadcrumb[] = array( $category->url(), $category->_title ); + + /* Set default search option */ + \IPS\Output::i()->defaultSearchOption = array( 'blog_entry', 'blog_entry_pl' ); } \IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_browse.js', 'blog', 'front' ) ); \IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('blogs'); diff --git a/applications/blog/modules/front/blogs/entry.php b/applications/blog/modules/front/blogs/entry.php index 1b5d95a9..ed510d5c 100644 --- a/applications/blog/modules/front/blogs/entry.php +++ b/applications/blog/modules/front/blogs/entry.php @@ -246,6 +246,7 @@ class _entry extends \IPS\Content\Controller catch( \RuntimeException $e ) {} /* Image is invalid */ catch( \InvalidArgumentException $e ){} + catch( \DomainException $e ) {} } /* Display */ @@ -280,6 +281,9 @@ class _entry extends \IPS\Content\Controller } catch ( \OutOfRangeException $e ) {} + /* Set default search option */ + \IPS\Output::i()->defaultSearchOption = array( 'blog_entry', 'blog_entry_pl' ); + \IPS\Output::i()->breadcrumb[] = array( $this->entry->container()->url(), $this->entry->container()->_title ); \IPS\Output::i()->breadcrumb[] = array( NULL, $this->entry->name ); diff --git a/applications/blog/modules/front/blogs/view.php b/applications/blog/modules/front/blogs/view.php index e93fa213..ca4eeaa8 100644 --- a/applications/blog/modules/front/blogs/view.php +++ b/applications/blog/modules/front/blogs/view.php @@ -216,6 +216,9 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller /* Categories */ $categories = \IPS\blog\Entry\Category::roots( NULL, NULL, array( 'entry_category_blog_id=?', $this->blog->id ) ); + /* Set default search option */ + \IPS\Output::i()->defaultSearchOption = array( 'blog_entry', 'blog_entry_pl' ); + \IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_browse.js', 'blog', 'front' ) ); \IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view' )->view( $this->blog, (string) $table, $category ); \IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack( 'search_contextual_item_blogs' ) ] = array( 'type' => 'blog_entry', 'nodes' => $this->blog->_id ); diff --git a/applications/blog/setup/upg_107015/data.json b/applications/blog/setup/upg_107015/data.json new file mode 100644 index 00000000..99d013c9 --- /dev/null +++ b/applications/blog/setup/upg_107015/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107016/data.json b/applications/blog/setup/upg_107016/data.json new file mode 100644 index 00000000..8a5ffcd6 --- /dev/null +++ b/applications/blog/setup/upg_107016/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107017/data.json b/applications/blog/setup/upg_107017/data.json new file mode 100644 index 00000000..edc44ca4 --- /dev/null +++ b/applications/blog/setup/upg_107017/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107018/data.json b/applications/blog/setup/upg_107018/data.json new file mode 100644 index 00000000..9575eaa0 --- /dev/null +++ b/applications/blog/setup/upg_107018/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107019/data.json b/applications/blog/setup/upg_107019/data.json new file mode 100644 index 00000000..a087977d --- /dev/null +++ b/applications/blog/setup/upg_107019/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107020/data.json b/applications/blog/setup/upg_107020/data.json new file mode 100644 index 00000000..81007ab4 --- /dev/null +++ b/applications/blog/setup/upg_107020/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107021/data.json b/applications/blog/setup/upg_107021/data.json new file mode 100644 index 00000000..76fb076c --- /dev/null +++ b/applications/blog/setup/upg_107021/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107022/data.json b/applications/blog/setup/upg_107022/data.json new file mode 100644 index 00000000..cec69124 --- /dev/null +++ b/applications/blog/setup/upg_107022/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107023/data.json b/applications/blog/setup/upg_107023/data.json new file mode 100644 index 00000000..897ac93d --- /dev/null +++ b/applications/blog/setup/upg_107023/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107024/data.json b/applications/blog/setup/upg_107024/data.json new file mode 100644 index 00000000..1450a530 --- /dev/null +++ b/applications/blog/setup/upg_107024/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107025/data.json b/applications/blog/setup/upg_107025/data.json new file mode 100644 index 00000000..cd1d87d8 --- /dev/null +++ b/applications/blog/setup/upg_107025/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107026/data.json b/applications/blog/setup/upg_107026/data.json new file mode 100644 index 00000000..b71b10b0 --- /dev/null +++ b/applications/blog/setup/upg_107026/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107027/data.json b/applications/blog/setup/upg_107027/data.json new file mode 100644 index 00000000..66d997f8 --- /dev/null +++ b/applications/blog/setup/upg_107027/data.json @@ -0,0 +1,24 @@ +{ + "id": 107027, + "name": "4.7.2 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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107028/data.json b/applications/blog/setup/upg_107028/data.json new file mode 100644 index 00000000..688e0f0a --- /dev/null +++ b/applications/blog/setup/upg_107028/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107029/data.json b/applications/blog/setup/upg_107029/data.json new file mode 100644 index 00000000..e83bbed1 --- /dev/null +++ b/applications/blog/setup/upg_107029/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107030/data.json b/applications/blog/setup/upg_107030/data.json new file mode 100644 index 00000000..11f56378 --- /dev/null +++ b/applications/blog/setup/upg_107030/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107031/data.json b/applications/blog/setup/upg_107031/data.json new file mode 100644 index 00000000..41b9162b --- /dev/null +++ b/applications/blog/setup/upg_107031/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107032/data.json b/applications/blog/setup/upg_107032/data.json new file mode 100644 index 00000000..4a587d8b --- /dev/null +++ b/applications/blog/setup/upg_107032/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107033/data.json b/applications/blog/setup/upg_107033/data.json new file mode 100644 index 00000000..da055839 --- /dev/null +++ b/applications/blog/setup/upg_107033/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107034/data.json b/applications/blog/setup/upg_107034/data.json new file mode 100644 index 00000000..210e1da1 --- /dev/null +++ b/applications/blog/setup/upg_107034/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107035/data.json b/applications/blog/setup/upg_107035/data.json new file mode 100644 index 00000000..9399906d --- /dev/null +++ b/applications/blog/setup/upg_107035/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107036/data.json b/applications/blog/setup/upg_107036/data.json new file mode 100644 index 00000000..dd26d457 --- /dev/null +++ b/applications/blog/setup/upg_107036/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107037/data.json b/applications/blog/setup/upg_107037/data.json new file mode 100644 index 00000000..31477bd5 --- /dev/null +++ b/applications/blog/setup/upg_107037/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107038/data.json b/applications/blog/setup/upg_107038/data.json new file mode 100644 index 00000000..8c4e1384 --- /dev/null +++ b/applications/blog/setup/upg_107038/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107300/data.json b/applications/blog/setup/upg_107300/data.json new file mode 100644 index 00000000..43c97158 --- /dev/null +++ b/applications/blog/setup/upg_107300/data.json @@ -0,0 +1,23 @@ +{ + "id": 107300, + "name": "4.7.3 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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107301/data.json b/applications/blog/setup/upg_107301/data.json new file mode 100644 index 00000000..cecb6e10 --- /dev/null +++ b/applications/blog/setup/upg_107301/data.json @@ -0,0 +1,23 @@ +{ + "id": 107301, + "name": "4.7.3 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, + "customOptions": false, + "customRoutines": false + }, + "forceMainUpgrader": false, + "forceManualDownloadNoCiC": false, + "forceManualDownloadCiC": false +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107302/data.json b/applications/blog/setup/upg_107302/data.json new file mode 100644 index 00000000..edc6af48 --- /dev/null +++ b/applications/blog/setup/upg_107302/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107303/data.json b/applications/blog/setup/upg_107303/data.json new file mode 100644 index 00000000..54adabe9 --- /dev/null +++ b/applications/blog/setup/upg_107303/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107304/data.json b/applications/blog/setup/upg_107304/data.json new file mode 100644 index 00000000..718e0ad2 --- /dev/null +++ b/applications/blog/setup/upg_107304/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107305/data.json b/applications/blog/setup/upg_107305/data.json new file mode 100644 index 00000000..e705e76a --- /dev/null +++ b/applications/blog/setup/upg_107305/data.json @@ -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": false + }, + "forceMainUpgrader": false, + "forceManualDownloadNoCiC": false, + "forceManualDownloadCiC": false +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107306/data.json b/applications/blog/setup/upg_107306/data.json new file mode 100644 index 00000000..84b644d3 --- /dev/null +++ b/applications/blog/setup/upg_107306/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107307/data.json b/applications/blog/setup/upg_107307/data.json new file mode 100644 index 00000000..146c08b8 --- /dev/null +++ b/applications/blog/setup/upg_107307/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107400/data.json b/applications/blog/setup/upg_107400/data.json new file mode 100644 index 00000000..84c7b095 --- /dev/null +++ b/applications/blog/setup/upg_107400/data.json @@ -0,0 +1,23 @@ +{ + "id": 107400, + "name": "4.7.4 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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107401/data.json b/applications/blog/setup/upg_107401/data.json new file mode 100644 index 00000000..4b21eb56 --- /dev/null +++ b/applications/blog/setup/upg_107401/data.json @@ -0,0 +1,23 @@ +{ + "id": 107401, + "name": "4.7.4 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, + "customOptions": false, + "customRoutines": false + }, + "forceMainUpgrader": false, + "forceManualDownloadNoCiC": false, + "forceManualDownloadCiC": false +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107402/data.json b/applications/blog/setup/upg_107402/data.json new file mode 100644 index 00000000..1296d86a --- /dev/null +++ b/applications/blog/setup/upg_107402/data.json @@ -0,0 +1,23 @@ +{ + "id": 107402, + "name": "4.7.4 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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107403/data.json b/applications/blog/setup/upg_107403/data.json new file mode 100644 index 00000000..02498d2a --- /dev/null +++ b/applications/blog/setup/upg_107403/data.json @@ -0,0 +1,23 @@ +{ + "id": 107403, + "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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107404/data.json b/applications/blog/setup/upg_107404/data.json new file mode 100644 index 00000000..a7dcc8b0 --- /dev/null +++ b/applications/blog/setup/upg_107404/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107405/data.json b/applications/blog/setup/upg_107405/data.json new file mode 100644 index 00000000..acbfe637 --- /dev/null +++ b/applications/blog/setup/upg_107405/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107406/data.json b/applications/blog/setup/upg_107406/data.json new file mode 100644 index 00000000..2373f693 --- /dev/null +++ b/applications/blog/setup/upg_107406/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107500/data.json b/applications/blog/setup/upg_107500/data.json new file mode 100644 index 00000000..73f253dc --- /dev/null +++ b/applications/blog/setup/upg_107500/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107501/data.json b/applications/blog/setup/upg_107501/data.json new file mode 100644 index 00000000..12b27fa9 --- /dev/null +++ b/applications/blog/setup/upg_107501/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107502/data.json b/applications/blog/setup/upg_107502/data.json new file mode 100644 index 00000000..5c06b7fc --- /dev/null +++ b/applications/blog/setup/upg_107502/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107503/data.json b/applications/blog/setup/upg_107503/data.json new file mode 100644 index 00000000..a0e9f1bb --- /dev/null +++ b/applications/blog/setup/upg_107503/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107504/data.json b/applications/blog/setup/upg_107504/data.json new file mode 100644 index 00000000..63f15ead --- /dev/null +++ b/applications/blog/setup/upg_107504/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107505/data.json b/applications/blog/setup/upg_107505/data.json new file mode 100644 index 00000000..54397e12 --- /dev/null +++ b/applications/blog/setup/upg_107505/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107600/data.json b/applications/blog/setup/upg_107600/data.json new file mode 100644 index 00000000..e7d9c5be --- /dev/null +++ b/applications/blog/setup/upg_107600/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107600/theme.json b/applications/blog/setup/upg_107600/theme.json new file mode 100644 index 00000000..861865c1 --- /dev/null +++ b/applications/blog/setup/upg_107600/theme.json @@ -0,0 +1,19 @@ +{ + "html": { + "added": [], + "edited": [ + "front\/view\/entry" + ], + "removed": [] + }, + "css": { + "added": [], + "edited": [], + "removed": [] + }, + "resources": { + "added": [], + "edited": [], + "removed": [] + } +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107601/data.json b/applications/blog/setup/upg_107601/data.json new file mode 100644 index 00000000..4ca1c4eb --- /dev/null +++ b/applications/blog/setup/upg_107601/data.json @@ -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 +} \ No newline at end of file diff --git a/applications/blog/setup/upg_40000/upgrade.php b/applications/blog/setup/upg_40000/upgrade.php index fa685253..8d10bec8 100644 --- a/applications/blog/setup/upg_40000/upgrade.php +++ b/applications/blog/setup/upg_40000/upgrade.php @@ -136,7 +136,7 @@ class _Upgrade public function step2() { \IPS\Db::i()->replace( 'core_ratings', - \IPS\Db::i()->select( "NULL, 'IPS\\blog\\Entry', entry_id, member_id, rating, ''", 'blog_ratings' ) + \IPS\Db::i()->select( "NULL, 'IPS\\blog\\Entry', entry_id, member_id, rating, '', NULL", 'blog_ratings' ) ); return TRUE; diff --git a/applications/blog/sources/Blog/Blog.php b/applications/blog/sources/Blog/Blog.php index 3eea49c7..cec27892 100644 --- a/applications/blog/sources/Blog/Blog.php +++ b/applications/blog/sources/Blog/Blog.php @@ -1044,7 +1044,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E */ protected function set__futureItems( $val ) { - $this->count_entries_future = $val; + $this->count_entries_future = ( $val > 0 ) ? $val : 0; } /** @@ -1165,10 +1165,8 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E /* Unclaim Attachments */ \IPS\File::unclaimAttachments( 'blog_Blogs', $this->id ); - - /* Delete Cover Photo -specifically call parent otherwise deleteOrMoveContent process cannot run within the AdminCP */ - $photo = parent::coverPhoto(); - $photo->delete(); + + $this->coverPhotoFile()?->delete(); /* Delete Follows */ \IPS\Db::i()->delete( 'core_follow', array( "follow_app=? AND follow_area=? AND follow_rel_id=?", 'blog', 'blog', $this->_id ) ); @@ -1187,7 +1185,7 @@ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\E public function coverPhoto() { $photo = parent::coverPhoto(); - $photo->overlay = \IPS\Theme::i()->getTemplate('view', 'blog')->coverPhotoOverlay($this); + $photo->overlay = \IPS\Theme::i()->getTemplate('view', 'blog', 'front')->coverPhotoOverlay($this); return $photo; } diff --git a/applications/blog/sources/Entry/Entry.php b/applications/blog/sources/Entry/Entry.php index 191bfe27..ad2957ae 100644 --- a/applications/blog/sources/Entry/Entry.php +++ b/applications/blog/sources/Entry/Entry.php @@ -317,9 +317,10 @@ class _Entry extends \IPS\Content\Item implements * @param bool $joinAuthor If true, will join the members table for the author * @param bool $joinLastCommenter If true, will join the members table for the last commenter * @param bool $showMovedLinks If true, moved item links are included in the results + * @param array|null $location Array of item lat and long * @return \IPS\Patterns\ActiveRecordIterator|int */ - public static function getItemsWithPermission( $where=array(), $order=NULL, $limit=10, $permissionKey='read', $includeHiddenItems=\IPS\Content\Hideable::FILTER_AUTOMATIC, $queryFlags=0, \IPS\Member $member=NULL, $joinContainer=FALSE, $joinComments=FALSE, $joinReviews=FALSE, $countOnly=FALSE, $joins=NULL, $skipPermission=FALSE, $joinTags=TRUE, $joinAuthor=TRUE, $joinLastCommenter=TRUE, $showMovedLinks=FALSE ) + public static function getItemsWithPermission( $where=array(), $order=NULL, $limit=10, $permissionKey='read', $includeHiddenItems=\IPS\Content\Hideable::FILTER_AUTOMATIC, $queryFlags=0, \IPS\Member $member=NULL, $joinContainer=FALSE, $joinComments=FALSE, $joinReviews=FALSE, $countOnly=FALSE, $joins=NULL, $skipPermission=FALSE, $joinTags=TRUE, $joinAuthor=TRUE, $joinLastCommenter=TRUE, $showMovedLinks=FALSE, $location=NULL ) { if ( \in_array( $permissionKey, array( 'view', 'read' ) ) ) { diff --git a/applications/calendar/Application.php b/applications/calendar/Application.php index b748e48f..538f532c 100644 --- a/applications/calendar/Application.php +++ b/applications/calendar/Application.php @@ -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 ); + } + } } \ No newline at end of file diff --git a/applications/calendar/api/calendars.php b/applications/calendar/api/calendars.php index a202cde5..6e59002e 100644 --- a/applications/calendar/api/calendars.php +++ b/applications/calendar/api/calendars.php @@ -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 ) { diff --git a/applications/calendar/api/comments.php b/applications/calendar/api/comments.php index 1c6f0f9a..ab7ac22c 100644 --- a/applications/calendar/api/comments.php +++ b/applications/calendar/api/comments.php @@ -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 ) { diff --git a/applications/calendar/api/reviews.php b/applications/calendar/api/reviews.php index ad0b8030..1d7879ce 100644 --- a/applications/calendar/api/reviews.php +++ b/applications/calendar/api/reviews.php @@ -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 ) { diff --git a/applications/calendar/api/venues.php b/applications/calendar/api/venues.php index 48d4cb08..2a755237 100644 --- a/applications/calendar/api/venues.php +++ b/applications/calendar/api/venues.php @@ -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 ) ) { diff --git a/applications/calendar/data/acpsearch.json b/applications/calendar/data/acpsearch.json index 0a24be73..a8cd6f50 100644 --- a/applications/calendar/data/acpsearch.json +++ b/applications/calendar/data/acpsearch.json @@ -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" - ] } } \ No newline at end of file diff --git a/applications/calendar/data/application.json b/applications/calendar/data/application.json index 6396c738..708ae255 100644 --- a/applications/calendar/data/application.json +++ b/applications/calendar/data/application.json @@ -1,5 +1,5 @@ { - "application_title": "Calendar", + "application_title": "Events", "app_author": "Invision Power Services, Inc.", "app_directory": "calendar", "app_protected": 0, diff --git a/applications/calendar/data/build.xml b/applications/calendar/data/build.xml index c5b863bc..1d0d3705 100644 --- a/applications/calendar/data/build.xml +++ b/applications/calendar/data/build.xml @@ -1,7 +1,8 @@ - + + icalendar eventreminders @@ -9,14 +10,14 @@ - + - - + + @@ -48,5 +49,4 @@ - diff --git a/applications/calendar/data/furl.json b/applications/calendar/data/furl.json index a60b0048..b765aaf7 100644 --- a/applications/calendar/data/furl.json +++ b/applications/calendar/data/furl.json @@ -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" diff --git a/applications/calendar/data/javascript.xml b/applications/calendar/data/javascript.xml index 2e256b1c..78aac5f9 100644 --- a/applications/calendar/data/javascript.xml +++ b/applications/calendar/data/javascript.xml @@ -1,6 +1,6 @@ - - div').css({ - height: $( maxHeightCell ).height() + 20 + 'px' - }); - }); } }); }(jQuery, _));]]> - { + let percentage = Math.floor(100 * this._scroller.scrollLeft / (this._scroller.scrollWidth-this._scroller.clientWidth)); + this._dotContainer.style.setProperty('--percentage', percentage); + }, { + passive: true, + }); + }, + + autoPlay: function(){ + let currentScroll = this._scroller.scrollLeft, + carouselChildWidth = this._scroller.firstElementChild.offsetWidth; + if ((currentScroll >= this._scroller.scrollWidth - this._scroller.clientWidth)){ + this._scroller.scrollLeft = 0; + } else { + this._scroller.scrollLeft = currentScroll + carouselChildWidth; + } + this.startTimer(); + }, + + dotClick: function(ev){ + let slide = this.scope[0].querySelector(`.cFeaturedEvents__scroller [data-item='${ev.target.dataset.carouselDot}']`); + slide.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' }); + }, + + stopTimer: function () { + clearInterval(this._timer); + }, + + startTimer: function () { + this._timer = setTimeout(this.autoPlay.bind(this), 5000); + } + + }); +}(jQuery, _));]]> + + + + + ` + ); + + + // Now the JS + window.ips.loader.get( [ 'https://api.mapbox.com/mapbox.js/v3.3.1/mapbox.js' ] ) + .then( + () => ips.loader.get([ + 'https://api.mapbox.com/mapbox.js/plugins/leaflet-markercluster/v1.0.0/leaflet.markercluster.js', + 'https://api.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v1.0.1/Leaflet.fullscreen.min.js' + ]) + ) + .then( () => { + + if ( this.useGeolocation ) { + self.getEventsByLocation(); + } else { + self.fetchEvents(); + } + + self._mapReady = true; + }); + } + }, + + googleMap: undefined, + + /** + * setup the map for google maps; really just a callback for the google maps api response + */ + setupGoogleMaps: function() { + // just enter the fetch event flow; the response will be handled on return + if ( this.useGeolocation ) { + this.getEventsByLocation(); + } else { + this.fetchEvents(); + } + + window.ipsGoogleMapsCallback = undefined; + + this._mapReady = true; + }, + + /** + * Handles use current location checkbox + */ + useCurrentLocation: function() { + + // Not the best way to go about this but we clear the map with fetchEvents response + if ( this.useGoogleMaps ) { + this.googleMap = false; + } + + if( this.scope.find('#useCurrentLocation').is(':checked') ) { + this.getEventsByLocation(); + } else { + ips.utils.geolocation.setGeolocationIsAllowed( ips.utils.geolocation.permissions.DENIED ); + this.fetchEvents(); + } + }, + /** + * Uses the browser's geolocation to set the lat and long of the map; those are then sent to community to get a listing of nearby events + */ + getEventsByLocation: function () { + // Save the contents just in case we need it again + this.showPlaceholders(); + ips.utils.geolocation.getCurrentPosition().then( coords => { + var lat = coords.latitude; + var long = coords.longitude; + + // Update the near me link + this.scope.find('[data-role="nearMeLink"]') + .attr('href', ips.getSetting('baseURL') + '?app=calendar&do=search&form_submitted=1&lat=' + lat + '&lon=' + long ) + .attr('data-lat', lat) + .attr('data-long', long); + + this.fetchEvents(lat, long); + + }).catch( () => { + ips.ui.alert.show( { + type: 'alert', + message: ips.getString('event_your_current_location_sorry'), + icon: 'warn' + }); + this.scope.find('#useCurrentLocation').closest('li').remove(); + this.fetchEvents(); + }); + }, + + fetchEvents: function (lat, long) { + var self = this; + + this.showPlaceholders(); + + ips.getAjax()( ips.getSetting('baseURL') + '?app=calendar&module=calendar&controller=view&view=overview&get=nearMe' + ( lat && long ? '&lat=' + lat + '&lon=' + long : '' ) ) + .done( function (response) { + self.scope.find('[data-role="locationEvents"]').html(response.content); + self.setUpMap(response.lat, response.long); + $(document).trigger('contentChange', [self.scope]); + }); + }, + + setUpMap: function (lat, long) { + var self = this; + var mapDiv = this.scope.find('#map'); + + if (!mapDiv.length) { + Debug.log("No map container"); + return; + } + + if ( this.useGoogleMaps ) { + // Make sure these are numbers. They might come in as string encoded Floats + lat = Number(lat); + long = Number(long); + + if ( !this.googleMap ) { + const mapContainer = mapDiv.get(0); + mapContainer.style.width = '100%'; + mapContainer.style.height = '400px'; + this.googleMap = new window.google.maps.Map(mapContainer, {zoom: 4, center: {lat, lng: long}}); + } else { + this.googleMap.setCenter({ lat, lng: long }); + } + + + // Update the near me link + self.scope.find('[data-role="nearMeLink"]') + .attr('href', ips.getSetting('baseURL') + '?app=calendar&do=search&form_submitted=1&lat=' + lat + '&lon=' + long ) + .attr('data-lat', lat) + .attr('data-long', long); + + // If we have the map now, set its contents + if ( this.googleMap ) { + let markers; + try { + + // We first copy the JSON and make sure lat an long are all numeric + let _markers = JSON.parse(mapDiv.attr('data-markers')); + let markers = []; + for ( let marker of Object.values(_markers) ) { + markers.push({ + ...marker, + lat: Number(marker.lat), + long: Number(marker.long) + }); + } + + for ( let marker of Object.values(markers) ) { + let mapMarker = new window.google.maps.Marker({ + position: {lat: marker.lat, lng: marker.long}, + map: this.googleMap, + title: marker.title + }); + } + + if ( Object.values(markers).length ) { + const cb = (() => { + let bounds = this.googleMap.getBounds(); + if ( !bounds ) { + return window.setTimeout( cb, 200 ); + } + let firstMarker = null; + let markerVisible = false; + let markerBounds = {latMax: null, latMin: null, lngMax: null, lngMin: null}; + for (let marker of Object.values(markers)) { + markerBounds.latMax = markerBounds.latMax === null ? marker.lat : Math.max(markerBounds.latMax, marker.lat); + markerBounds.latMin = markerBounds.latMin === null ? marker.lat : Math.min(markerBounds.latMin, marker.lat); + markerBounds.lngMax = markerBounds.lngMax === null ? marker.long : Math.max(markerBounds.lngMax, marker.long); + markerBounds.lngMin = markerBounds.lngMin === null ? marker.long : Math.min(markerBounds.lngMin, marker.long); + firstMarker = firstMarker || marker; + if ( bounds.contains({lat: marker.lat, lng: marker.long}) ) { + markerVisible = true; + } + } + if (!markerVisible && firstMarker) { + // find the centermost event + let evtMidpoint = { + lat: ((markerBounds.latMax + markerBounds.latMin) / 2), + lng: ((markerBounds.lngMax + markerBounds.lngMin) / 2) + }; + + let minDistance = null; + let mostMiddleMarker = null; + if ( Object.values(markers).length > 1 ) { + for (let marker of Object.values(markers)) { + // we need to use the haversine formula to get he distance + let distance = this.getDistance(evtMidpoint.lat, marker.lat, evtMidpoint.lng, marker.long); + if (minDistance === null || distance < minDistance) { + minDistance = distance; + mostMiddleMarker = {lat: marker.lat, lng: marker.long}; + } + } + } else { + mostMiddleMarker = {lat: firstMarker.lat, lng: firstMarker.long}; + } + + this.googleMap.panTo(mostMiddleMarker); + } + }).bind(this); + window.setTimeout(cb, 0); + } + + } catch (e) {} + } + } else { + + L.mapbox.accessToken = ips.getSetting('mapApiKey'); + this._map = L.mapbox + .map(mapDiv.get(0)) + .addLayer(L.mapbox.styleLayer('mapbox://styles/mapbox/streets-v11')); + + // Map prefs + this._map.zoomControl = false; + this._map.minZoom = 2; + this._map.dragging = false; + this._map.zoomControl = false; + + // Reposition zoom control + /*L.control.zoom({ + position: 'bottomright' + }).addTo(this._map);*/ + + // Add and position fullscreen control + /*this._map.addControl(new L.Control.Fullscreen({ + position: 'bottomleft' + }));*/ + + var markersGroup = new L.featureGroup([]); + var markers = $.parseJSON(mapDiv.attr('data-markers')); + + for (var id in markers) { + var marker = L.marker([Number(markers[id].lat), Number(markers[id].long)], { + title: markers[id].title, + draggable: false, + eventId: parseInt(id) + }); + + //self._map.addLayer( marker ); + markersGroup.addLayer(marker); + + // Build info popup for this marker + marker.on('mouseover', _.bind(this._markerMouseOver, this)); + marker.on('mouseout', _.bind(this._markerMouseOut, this)); + } + + markersGroup.addTo(this._map); + this._map.fitBounds(markersGroup.getBounds(), {maxZoom: 5}); + } + }, + + /** + * Use the haversine formula to get a COOEFFICIENT of the distance between two points. This coefficient must be multiplied by 2*3956 to get the miles and by 2*6371 to get the kilometers + * + * @param lat1 + * @param lat2 + * @param lng1 + * @param lng2 + * + * + * @return {number} + */ + getDistance: function (lat1, lat2, lng1, lng2) { + // The math module contains a function + // named toRadians which converts from + // degrees to radians. + lng1 = lng1 * Math.PI / 180; + lng2 = lng2 * Math.PI / 180; + lat1 = lat1 * Math.PI / 180; + lat2 = lat2 * Math.PI / 180; + + // Haversine formula + let dlng = lng2 - lng1; + let dlat = lat2 - lat1; + let a = Math.pow(Math.sin(dlat / 2), 2) + + Math.cos(lat1) * Math.cos(lat2) + * Math.pow(Math.sin(dlng / 2),2); + + let c = Math.asin(Math.sqrt(a)); + + // Radius of earth in kilometers. Use 3956 + // for miles + //let r = 6371; + + // calculate the result; multiply by 2*6371 for kilometers and 2*3956 for miles; at the time of writing this, the distance is only being compared so no need to factor in all these constants + return c; + }, + + _markerMouseOver: function (e) { + var eventId = e.target.options.eventId; + + // Fade out all events except this one + this.scope.find('[data-eventid]').stop(false, true); + this.scope.find('[data-eventid]:not([data-eventid="' + eventId + '"])').animate({ opacity: 0.4 }, 'fast'); + }, + + _markerMouseOut: function (e) { + this.scope.find('[data-eventid]').stop(false, true); + this.scope.find('[data-eventid]').animate({ opacity: 1 }, 'fast'); + }, + + showPlaceholders: function (count) { + var events = []; + + for( var i = 0; i < 6; i++ ){ + events.push( ips.templates.render('eventLoading') ); + } + + this.scope + .find('[data-role="locationEvents"]') + .removeClass('ipsJS_hide') + .html( ips.templates.render('nearMe', { events: events.join('') }) ); + } + }); +}(jQuery, _));]]> + " ); + + ips.loader.get( [ 'https://api.mapbox.com/mapbox.js/v3.3.1/mapbox.js' ] ).then( function () { + ips.loader.get( [ 'https://api.mapbox.com/mapbox.js/plugins/leaflet-markercluster/v1.0.0/leaflet.markercluster.js', + 'https://api.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v1.0.1/Leaflet.fullscreen.min.js' ] ).then( function () { + + self._mapReady = true; + + Debug.log( self._resultsContainer.find('[data-eventid]') ); + Debug.log( self._mapContainer.attr('data-markers') ); + + if( self._resultsContainer.find('[data-eventid]').length && self._mapContainer.attr('data-markers') ){ + Debug.log('here'); + + try { + var markers = JSON.parse( self._mapContainer.attr('data-markers') ); + Debug.log( markers ); + self._updateMap( markers ); + } catch (err) { + Debug.log("Invalid marker JSON"); + Debug.log(err); + } + } + }); + }); + + }, + + getInitialLocation: function () { + if ( ips.utils.geolocation.getGeolocationIsAllowed() ) { + + ips.utils.geolocation.getCurrentPosition().then( coords => { + this.setCoords( coords.latitude, coords.longitude ); + }) + + // Update useMyLocation link + this.setSearchToLocation(); + this._locationLink.hide(); + this._cancelLocationLink.show(); + } + }, + + setCoords: function (lat, long) { + this.scope.prepend(""); + this.scope.prepend(""); + this._gotCoords = true; + }, + + clearCoords: function () { + this.scope.find( 'input[name="lat"]' ).remove(); + this.scope.find( 'input[name="lon"]' ).remove(); + this._gotCoords = false; + }, + + moreNearMe: function (e) { + e.preventDefault(); + + // Get the lat/long from the link + var lat = $( e.currentTarget ).attr('data-lat'); + var long = $( e.currentTarget ).attr('data-long'); + var self = this; + + this.setSearchToLocation(); + this.scope.find('[name="date[start]"]').val(''); + this.scope.find('[name="date[end]"]').val(''); + this.scope.find('[name="show"]').val('regular'); + + $("html, body").animate({ scrollTop: "300px" }, function () { + self.doSearch(); + }); + }, + + moreExhibitions: function (e) { + e.preventDefault(); + + var self = this; + + this.cancelLocation(); + this.scope.find('[name="date[start]"]').val(''); + this.scope.find('[name="date[end]"]').val(''); + this.scope.find('[name="show"]').val('exhibitions'); + + $("html, body").animate({ scrollTop: "300px" }, function () { + self.doSearch(); + }); + }, + + /** + * Submit handler for the search form + * + * @param {event} e Event object + * @returns {void} + */ + doSearch: function (e) { + if( e ){ + e.preventDefault(); + } + + var url = this._getUrlFromData(); + + History.replaceState( { + controller: 'calendar.front.overview.search', + url: url + }, document.title, url ); + }, + + /** + * Build placeholder elements from a template + * + * @param {number} count Number to build (10 default) + * @returns {string} + */ + getPlaceholders: function (count) { + var events = []; + + if( _.isUndefined( count ) ){ + count = 10; + } + + for( var i = 0; i < count; i++ ){ + events.push( ips.templates.render('eventLoading') ); + } + + return events.join(''); + }, + + /** + * Main state change event handler that responds to URL changes + * + * @param {event} e Event object + * @param {object} data Event data object + * @returns {void} + */ + stateChange: function () { + var state = History.getState(); + + if( ( !state.data.controller || state.data.controller != 'calendar.front.overview.search' ) && this._initialURL !== state.url ){ + return; + } + + if( this._initialURL == state.url ){ + // If our URLs match but we have no state data, we can assume we've gone back to the intital search form, so let's reset + this.hideResults(); + } else if( this._initialURL == state.url && _.isUndefined( state.data.url ) ){ + // If we don't have a URL, get it from our initial data + this._loadResults( this._getUrlFromData( this._initialData ) ); + } else { + // Otherwise use the state url + this._loadResults( state.data.url ); + } + }, + + /** + * Builds a search URL based on on the form values + * + * @param {event} e Event object + * @param {object} data Event data object + * @returns {string} + */ + changeSort: function (e, data) { + e.preventDefault(); + this._currentSort = data.selectedItemID; + var title = data.menuElem.find('[data-ipsMenuValue="' + this._currentSort + '"]').text(); + $('body').find('[data-role="searchOrder"]').text( title ); + this.doSearch(); + }, + + /** + * Builds a search URL based on on the form values + * + * @param {event} e Event object + * @param {object} data Event data object + * @returns {string} + */ + _getUrlFromData: function () { + var formData = this.scope.serializeArray(); + var params = []; + + _.each( formData, function (item){ + if( $.trim( item.value ) !== '' ){ + params.push( item.name + "=" + encodeURIComponent( item.value ) ); + } + }); + + // @todo sort + params.push("sortBy=" + this._currentSort); + + return this._baseURL + '&' + params.join('&'); + }, + + /** + * Handles performing a new search + * + * @param {string} url URL to request + * @returns {void} + */ + _loadResults: function (url) { + var self = this; + + // Do we need to hide the overview stuff? + if( this._page.length ){ + this._page.find('[data-role="eventsOverview"]').hide(); + this._page.find('[data-role="searchResultsWrapper"]').show(); + } + + this._resultsContainer.removeClass('ipsHide').html( this.getPlaceholders(6) ); + this._mapContainer.addClass('cEvents__searchMap--loading').show(); + this._currentUrl = url; + + ips.getAjax()( url ) + .done( function (response){ + if( response.count ){ + self._resultsContainer.html( response.content ); + self._noResults.addClass('ipsHide'); + self._updateMap( _.extend( {}, self._markers, response.markers ) ); + + if( response.totalCount > ( response.count + self._offset ) ){ + self._loadMore.show(); + self._noMore.hide(); + } else { + self._loadMore.hide(); + self._noMore.hide(); + } + } else { + self._resultsContainer.html('').addClass('ipsHide'); + self._noResults.removeClass('ipsHide'); + self._loadMore.hide(); + self._noMore.hide(); + self._mapContainer.hide(); + } + + if( response.virtual ){ + self._mapContainer.hide(); + } + + $( document ).trigger('contentChange', [ self._resultsContainer ]); + }); + }, + + _updateMap: function (markers) { + if( !this._map ){ + L.mapbox.accessToken = ips.getSetting('mapApiKey'); + this._map = L.mapbox + .map( this._mapContainer.get(0) ) + .addLayer(L.mapbox.styleLayer('mapbox://styles/mapbox/streets-v11')); + + // Map prefs + this._map.zoomControl = false; + this._map.minZoom = 2; + this._map.dragging = false; + this._map.zoomControl = false; + + // Reposition zoom control + /*L.control.zoom({ + position: 'bottomright' + }).addTo(this._map); + + // Add and position fullscreen control + this._map.addControl(new L.Control.Fullscreen({ + position: 'bottomleft' + }));*/ + + this._markersGroup = new L.featureGroup([]); + this._markersGroup.addTo( this._map ); + } + + this._mapContainer.removeClass('cEvents__searchMap--loading'); + this._markersGroup.clearLayers(); // Remove all existing markers + + for( var id in markers ){ + var marker = L.marker([markers[id].lat, markers[id].long], { + title: markers[id].title, + draggable: false, + eventId: parseInt(id) + }); + + //self._map.addLayer( marker ); + this._markersGroup.addLayer( marker ); + + // Build info popup for this marker + marker.on('click', _.bind( this._markerClick, this ) ); + } + + this._mapContainer.show(); + this._map.fitBounds(this._markersGroup.getBounds(), { maxZoom: 5 }); + }, + + _markerClick: function (e, data) { + var targetEvent = e.target.options.eventId; + + // Find that event in our listing + var eventBlock = this._resultsContainer.find('[data-eventId="' + targetEvent + '"]'); + + // Get position + var topPos = eventBlock.offset().top; + + // Scroll to it + $('html, body').animate({ scrollTop: topPos }, function () { + eventBlock.css({ transform: 'scale(1.1)' }); + + setTimeout( function () { + eventBlock.css({ transform: 'scale(1)' }); + }, 2000); + }); + }, + + /** + * Handles loading more results into the current search + * + * @param {event} e Event object + * @returns {void} + */ + loadMore: function (e) { + e.preventDefault(); + + var placeholders = this.getPlaceholders(2); + this._resultsContainer.append( placeholders ); + this._loadMore.prop('disabled', true); + + var self = this; + var currentCount = this._resultsContainer.find('[data-eventid]').length; + + ips.getAjax()( this._currentUrl + "&offset=" + currentCount + "&limit=" + this._limit) + .done( function (response) { + self._resultsContainer.find('.event--loading').remove(); + self._resultsContainer.append( response.content ); + self._updateMap( response.markers ); + self._loadMore.prop('disabled', false); + + if( self._resultsContainer.find('[data-eventid]').length >= response.totalCount ){ + self._loadMore.hide(); + self._noMore.show(); + } else { + self._loadMore.show(); + self._noMore.hide(); + } + + $( document ).trigger('contentChange', [ self._resultsContainer ]); + }); + }, + + /** + * Remove current location as the search term + * + * @param {event} e Event object + * @returns {void} + */ + cancelLocation: function (e) { + if( e ){ + e.preventDefault(); + } + + let geolocation = ips.utils.geolocation.setGeolocationIsAllowed( ips.utils.geolocation.permissions.DENIED ); + + this._cancelledLookup = true; + this._searchBox.val( this._previousValue ).attr('placeholder', this._originalPlaceholder).prop('disabled', false).removeClass('ipsField_loading'); + this._locationLink.show(); + this._cancelLocationLink.hide(); + + this.scope.find('[name="searchNearLocation"]').remove(); + }, + + /** + * Fetch current location and use it as the current search param + * + * @param {event} e Event object + * @returns {void} + */ + useMyLocation: function (e) { + e.preventDefault(); + + var self = this; + + self._cancelledLookup = false; + self._searchBox.val('').attr('placeholder', ips.getString('event_finding_location')).prop('disabled', true).addClass('ipsField_loading'); + self._locationLink.hide(); + self._cancelLocationLink.show(); + + var afterCoords = function () { + if( self._cancelledLookup ){ + self._cancelledLookup = false; + return; + } + + self.setSearchToLocation(); + self._cancelledLookup = false; + }; + + if( self._gotCoords ){ + afterCoords() + } else { + ips.utils.geolocation.getCurrentPosition().then( coords => { + self.setCoords(coords.latitude, coords.longitude); + this.setSearchToLocation(); + }); + } + }, + + setSearchToLocation: function () { + this._searchBox.val('').attr('placeholder', ips.getString('event_your_current_location')).prop('disabled', true).removeClass('ipsField_loading'); + this.scope.prepend(""); + }, + + /** + * Cancal searching and show the overview page again + * + * @param {event} e Event object + * @returns {void} + */ + backToOverview: function (e) { + if( !this._page.length ){ + return; + } + + e.preventDefault(); + + History.replaceState( { + controller: 'calendar.front.overview.search', + url: this._initialURL + }, document.title, this._initialURL ); + }, + + /** + * Hide the search results panel + * + * @param {event} e Event object + * @returns {void} + */ + hideResults: function (e) { + this._page.find('[data-role="eventsOverview"]').show(); + this._page.find('[data-role="searchResultsWrapper"]').hide(); + } + }); +}(jQuery, _));]]> + - - - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -1132,7 +2149,7 @@ }); }(jQuery, _)); - \ +");]]> + \ +
    \ +
    \ +
    \ +
    \ +
    \ +
    \ + \ +"); + +ips.templates.set("nearMe", "\ +
      \ +
    • \ + {{{events}}}\ +
    \ ");]]>
    templates common/ips.loader.js diff --git a/applications/calendar/data/lang.xml b/applications/calendar/data/lang.xml index abbc8c76..74ebf1b9 100644 --- a/applications/calendar/data/lang.xml +++ b/applications/calendar/data/lang.xml @@ -1,32 +1,32 @@ - - Calendar - Calendar - a comment on a calendar event - a calendar event - a review on a calendar event - comment on a calendar event - {!#[1:comment][?:comments]} on a calendar event - calendar event - calendar {!#[1:event][?:events]} - review on a calendar event - {!#[1:review][?:reviews]} on a calendar event + + Events + Events + a comment on an event + an event + a review on an event + comment on an event + {!#[1:comment][?:comments]} on an event + event + {!#[1:event][?:events]} + review on an event + {!#[1:review][?:reviews]} on an event calendar - Calendar + Events Calendars iCalendar Feeds Settings - Calendar + Events Calendars Events Venues Event - Calendar Events + Events Calendars Venues Calendars - calendar events + events This Calendar This Event Calendars @@ -47,8 +47,6 @@ %s is viewing a calendar %s is viewing a calendar %s is viewing an event - Show birthdays on calendar - When enabled, the calendar will show the number of member birthdays for each day and will list member birthdays when viewing a date. Start calendar on Monday 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. Enable upcoming events RSS feed @@ -63,7 +61,7 @@ Current month Current week Current day - Stream of upcoming events + Overview Calendar Event Cover Photos Use default date formatting DD MMM YYYY (Example: 01 Jan 2000) @@ -186,10 +184,6 @@ No events scheduled today No events scheduled this month The date you requested appears to be invalid - {# [1:birthday][?:birthdays]} today - {# [1:birthday][?:birthdays]} - View all - Birthdays Event Event Comment Event Review @@ -244,6 +238,8 @@ Once the limit is reached, no further attendees will be allowed to RSVP for this event. Cover Photo Location + Showing events near your current location. + See more events by location Album 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. Event Start @@ -378,9 +374,6 @@ Number of days to show Number of events View the event %s - Today's Birthdays - Shows birthdays from today - No users celebrating today No upcoming events found ({# [1:year][?:years]} old) Recent Event Reviews @@ -494,6 +487,46 @@ Maybe Venues Fired when somebody changes his RSVP status + Online Event + URL + All + Online Events + Open Event + Powered by + Physical Events + Overview + Daily + Weekly + Monthly + Your location + Use my location + Cancel Location + Location + Search location + Type + From + To + Search + Search Events + Back to overview + Sort By: + Distance + Date + Show more results + No more events to show + There were no events matching your search + Happening Near You + Online Events + Browse By Month + No more events this month + Show more events + Map center latitude + Map center longitude + The default latitude to use when no user location can be determined by geolocation or ip lookup. + The default longitude to use when no user location can be determined by geolocation or ip lookup. + Happening Now + Happening Today + We couldn't find any events happening soon near you. Check back later! {# [1:day][?:days]} {# [1:week][?:weeks]} {# [1:month][?:months]} @@ -521,5 +554,8 @@ (select time) Reminder Removed Reminder Saved + Your Current Location + Sorry, we weren't able to get your location. Do you have location services enabled in your browser? + Finding your location... diff --git a/applications/calendar/data/modules.json b/applications/calendar/data/modules.json index c9665e1a..9e36f032 100644 --- a/applications/calendar/data/modules.json +++ b/applications/calendar/data/modules.json @@ -7,8 +7,13 @@ }, "stats": { "default_controller": "", - "protected": false, - "default": null + "protected": 0, + "default": 0 + }, + "venues": { + "default": 0, + "default_controller": "", + "protected": 0 } }, "front": { diff --git a/applications/calendar/data/schema.json b/applications/calendar/data/schema.json index 22f67512..fbce6874 100644 --- a/applications/calendar/data/schema.json +++ b/applications/calendar/data/schema.json @@ -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, diff --git a/applications/calendar/data/settings.json b/applications/calendar/data/settings.json index 5c613401..931976ab 100644 --- a/applications/calendar/data/settings.json +++ b/applications/calendar/data/settings.json @@ -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" } ] \ No newline at end of file diff --git a/applications/calendar/data/theme.xml b/applications/calendar/data/theme.xml index deafdd60..142bf1da 100644 --- a/applications/calendar/data/theme.xml +++ b/applications/calendar/data/theme.xml @@ -1,46 +1,6 @@ - - - - - + + + + + + + + + +{{if $reason = $item->approvalQueueReason()}} +
    +
    {lang="reason_for_approval"}
    +
    +

    {$reason}

    +
    +{{endif}}]]> + + + + + @@ -1215,8 +1596,8 @@
    @@ -1418,7 +1799,7 @@ {{if $upcoming}} {$upcoming|raw} {{else}} - {lang="venues_no_upcoming_events"} + {lang="no_upcoming_events"} {{endif}}
    @@ -1523,7 +1904,17 @@ {{endif}} ]]> - - - - - -