diff --git a/Credits.txt b/Credits.txt index 4e2d146b..1b50b0ba 100644 --- a/Credits.txt +++ b/Credits.txt @@ -19,6 +19,12 @@ Brick/math Website: https://github.com/brick/math License: http://opensource.org/licenses/MIT +Browser Icons + Description: Browser logo icons for UI + Location: applications/core/interface/logos/browsers + Website: https://github.com/alrra/browser-logos + License: https://github.com/alrra/browser-logos/blob/main/LICENSE.txt + Clipboard Description: Cross browser copy to clipboard functionality Location: applications/core/interface/clipboard @@ -29,7 +35,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.20.1 + Included version: 4.21.0 Website: http://ckeditor.com License: http://www.gnu.org/copyleft/lesser.html @@ -120,17 +126,10 @@ IcoMoon Website: https://icomoon.io/ License: http://creativecommons.org/licenses/by/4.0/ -IntersectionObserver Polyfill - Description: W3C polyfill for IntersectionObserver in browsers that don't support it (Webkit & IE) - Location: dev/js/library/IntersectionObserver/IntersectionObserver.js - Included version: [no version number] - Website: https://github.com/w3c/IntersectionObserver/tree/master/polyfill - License: https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document - jQuery Description: JavaScript Library - Location: In development: dev/js/library/jquery/jquery-3.5.1.min.js - Included version: 3.5.1 + Location: In development: dev/js/library/jquery/jquery.js + Included version: 3.7.0 Website: http://jquery.com License: http://jquery.org/license @@ -164,8 +163,8 @@ jQuery.menuaim.js jQuery Migrate Description: Migration tool for jQuery - Location: In development: dev/js/library/jquery/jquery-migrate-3.3.0.js - Included version: 3.3.0 + Location: In development: dev/js/library/jquery/jquery-migrate.js + Included version: 3.4.1 Website: https://github.com/jquery/jquery-migrate/ License: https://github.com/jquery/jquery-migrate/blob/master/LICENSE.txt @@ -193,7 +192,7 @@ jQuery.transform.js jQuery UI Description: Javascript library for drag+drop, resizing, date polyfill Location: applications/core/interface/jquery/jquery-ui.js - Included version: 1.13.1 + Included version: 1.13.2 Website: http://jqueryui.com License: http://jquery.org/license @@ -297,7 +296,7 @@ phpQuery PHP User Agent Parser Description: Parses user agent strings Location: system/3rd_party/PhpUserAgent - Included Version: 0.7.0 + Included Version: 1.7.0 Website: https://github.com/donatj/PhpUserAgent License: http://opensource.org/licenses/mit-license.php @@ -350,7 +349,7 @@ Web Push Library for PHP Whoops Description: Provides error handling for development mode Location: dev/Whoops - Included Version: 2.14.5 + Included Version: 2.15.2 Website: http://filp.github.io/whoops/ License: https://github.com/filp/whoops/blob/master/LICENSE.md diff --git a/admin/install/eula.txt b/admin/install/eula.txt index 57e13bc0..d4b8c4b5 100644 --- a/admin/install/eula.txt +++ b/admin/install/eula.txt @@ -1,5 +1,5 @@ =============================[NOTE]============================= - IPS 4.7.8 (107643) + IPS 4.7.13 (107712) =============================[NOTE]============================= Invision Community End User License Agreement diff --git a/applications/blog/data/javascript.xml b/applications/blog/data/javascript.xml index e633ebe1..4775b283 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}}\ "); @@ -373,7 +373,6 @@ controllers underscore jquery mustache -IntersectionObserver Debug.js app.js jquery.js diff --git a/applications/blog/data/lang.xml b/applications/blog/data/lang.xml index 1cb9fef3..a28fce9b 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 96cfd069..378bc240 100644 --- a/applications/blog/data/theme.xml +++ b/applications/blog/data/theme.xml @@ -112,7 +112,7 @@ {{endif}} {{endif}} - {{if \IPS\Settings::i()->blog_allow_grid AND !$forMobile AND member.member_id}} + {{if \IPS\Settings::i()->blog_allow_grid AND !$forMobile AND member.member_id and member.optionalCookiesAllowed}}
  • @@ -1388,6 +1402,10 @@ {{if \count( $entry->shareLinks() )}} {template="shareButton" app="core" group="sharelinks" params="$entry, 'verySmall', 'light'"} {{endif}} + {{if \IPS\Application::appIsEnabled('cloud')}} + {template="spam" app="cloud" group="spam" params="$entry"} + {{endif}} + {template="analyticsItemLink" app="core" group="system" params="$entry"} {template="follow" app="core" group="global" params="'blog', 'entry', $entry->id, $entry->followersCount()"} {template="promote" app="core" group="global" params="$entry"} @@ -1734,7 +1752,8 @@ {{if $blog->latestEntry()->isFutureDate() || $blog->latestEntry()->mapped('pinned') || $blog->latestEntry()->mapped('featured') || $blog->latestEntry()->hidden() === -1 || $blog->latestEntry()->hidden() === 1 || $blog->latestEntry()->status === 'draft'}} {{if $blog->latestEntry()->isFutureDate()}} - {{elseif $blog->latestEntry()->hidden() === -1}} + {{endif}} + {{if $blog->latestEntry()->hidden() === -1}} {{elseif $blog->latestEntry()->hidden() === 1}} diff --git a/applications/blog/data/versions.json b/applications/blog/data/versions.json index 37e41f71..b44f5cb6 100644 --- a/applications/blog/data/versions.json +++ b/applications/blog/data/versions.json @@ -549,5 +549,35 @@ "107640": "4.7.8 Beta 1", "107641": "4.7.8 Beta 2", "107642": "4.7.8 Beta 3", - "107643": "4.7.8" + "107643": "4.7.8", + "107644": "4.7.8", + "107645": "4.7.8", + "107660": "4.7.9 Beta 1", + "107661": "4.7.9 Beta 2", + "107662": "4.7.9 Beta 3", + "107663": "4.7.9", + "107664": "4.7.9", + "107665": "4.7.9", + "107666": "4.7.9", + "107667": "4.7.9", + "107668": "4.7.9", + "107680": "4.7.10 Beta 1", + "107681": "4.7.10 Beta 2", + "107682": "4.7.10", + "107683": "4.7.10", + "107684": "4.7.10", + "107690": "4.7.11 Beta 1", + "107691": "4.7.11 Beta 2", + "107692": "4.7.11", + "107693": "4.7.11", + "107694": "4.7.11", + "107695": "4.7.11.1", + "107700": "4.7.12 Beta 1", + "107701": "4.7.12 Beta 2", + "107702": "4.7.12 Beta 3", + "107703": "4.7.12 Beta 4", + "107704": "4.7.12", + "107710": "4.7.13 Beta 1", + "107711": "4.7.13 Beta 2", + "107712": "4.7.13" } \ No newline at end of file diff --git a/applications/blog/modules/front/blogs/entry.php b/applications/blog/modules/front/blogs/entry.php index ed510d5c..bf13e367 100644 --- a/applications/blog/modules/front/blogs/entry.php +++ b/applications/blog/modules/front/blogs/entry.php @@ -300,4 +300,157 @@ class _entry extends \IPS\Content\Controller { return $form->customTemplate( array( \IPS\Theme::i()->getTemplate( 'submit', 'blog' ), 'submitFormTemplate' ) ); } + + /** + * Move + * + * @return void + */ + protected function move() + { + try + { + $item = \IPS\blog\Entry::loadAndCheckPerms( \IPS\Request::i()->id ); + if ( !$item->canMove() ) + { + throw new \DomainException; + } + + $container = $item->container(); + + $wizard = new \IPS\Helpers\Wizard( array( + 'blog' => function( $data ) use ( $container ) { + $data['item'] = \IPS\Request::i()->id; + $item = \IPS\blog\Entry::loadAndCheckPerms( $data['item'] ); + $form = new \IPS\Helpers\Form; + $form->class = 'ipsForm_vertical'; + $form->add( new \IPS\Helpers\Form\Node( 'move_to', NULL, TRUE, array( + 'class' => \get_class( $item->container() ), + 'permissionCheck' => function( $node ) use ( $item ) + { + try + { + /* If the item is in a club, only allow moving to other clubs that you moderate */ + if ( \IPS\IPS::classUsesTrait( $item->container(), 'IPS\Content\ClubContainer' ) and $item->container()->club() ) + { + return $item::modPermission( 'move', \IPS\Member::loggedIn(), $node ) and $node->can( 'add' ) ; + } + + if ( $node->can( 'add' ) ) + { + return true; + } + } + catch( \OutOfBoundsException $e ) { } + + return false; + }, + 'clubs' => TRUE + ) ) ); + + if ( $values = $form->values() ) + { + $data['blog'] = $values['move_to']; + return $data; + } + + return $form; + }, + 'category' => function( $data ) { + $item = \IPS\blog\Entry::loadAndCheckPerms( $data['item'] ); + $newBlog = $data['blog']; + + $form = new \IPS\Helpers\Form; + + $categories = \IPS\blog\Entry\Category::roots( NULL, NULL, array( 'entry_category_blog_id=?', $newBlog->id ) ); + $choiceOptions = array( 0 => 'entry_category_choice_new' ); + $choiceToggles = array( 0 => array( 'blog_entry_new_category' ) ); + + if( \count( $categories ) ) + { + $choiceOptions[1] = 'entry_category_choice_existing'; + $choiceToggles[1] = array( 'entry_category_id' ); + } + + $form->add( new \IPS\Helpers\Form\Radio( 'entry_category_choice', 0, FALSE, array( + 'options' => $choiceOptions, + 'toggles' => $choiceToggles + ) ) ); + + if( \count( $categories ) ) + { + $options = array(); + foreach ( $categories as $category ) + { + $options[ $category->id ] = $category->name; + } + + $form->add( new \IPS\Helpers\Form\Select( 'entry_category_id', NULL, FALSE, array( 'options' => $options, 'parse' => 'normal' ), NULL, NULL, NULL, "entry_category_id" ) ); + } + $form->add( new \IPS\Helpers\Form\Text( 'blog_entry_new_category', NULL, TRUE, array(), NULL, NULL, NULL, "blog_entry_new_category" ) ); + $this->moderationAlertField( $form, $item ); + + if ( $values = $form->values() ) + { + if ( $data['blog'] === NULL OR !$data['blog']->can( 'add' ) ) + { + \IPS\Output::i()->error( 'node_move_invalid', '1S136/L', 403, '' ); + } + + /* If this item is read, we need to re-mark it as such after moving */ + if( $item instanceof \IPS\Content\ReadMarkers ) + { + $unread = $item->unread(); + } + + $item->move( $data['blog'], FALSE ); + + + if( $values['entry_category_choice'] == 1 and $values['entry_category_id'] ) + { + $item->category_id = $values['entry_category_id']; + } + else + { + $newCategory = new \IPS\blog\Entry\Category; + $newCategory->name = $values['blog_entry_new_category']; + $newCategory->seo_name = \IPS\Http\Url\Friendly::seoTitle( $values['blog_entry_new_category'] ); + + $newCategory->blog_id = $item->blog_id; + $newCategory->save(); + + $item->category_id = $newCategory->id; + } + + $item->save(); + + /* Mark it as read */ + if( $item instanceof \IPS\Content\ReadMarkers and $unread == 0 ) + { + $item->markRead( NULL, NULL, NULL, TRUE ); + } + + if( isset( $values['moderation_alert_content']) AND $values['moderation_alert_content'] ) + { + $item->sendModerationAlert($values, $item); + } + + \IPS\Session::i()->modLog( 'modlog__action_move', array( $item::$title => TRUE, $item->url()->__toString() => FALSE, $item->mapped( 'title' ) ?: ( method_exists( $item, 'item' ) ? $item->item()->mapped( 'title' ) : NULL ) => FALSE ), $item ); + + \IPS\Output::i()->redirect( $item->url() ); + } + + return $form; + } + ), $item->url()->setQueryString( array( 'do' => 'move' ) ) ); + + $this->_setBreadcrumbAndTitle( $item ); + \IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( 'move_item', FALSE, array( 'sprintf' => array( \IPS\Member::loggedIn()->language()->addToStack( \IPS\blog\Entry::$title ) ) ) ); + \IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'global', 'core' )->box( $wizard, array( 'ipsPad' ) ); + } + catch ( \Exception $e ) + { + \IPS\Output::i()->error( 'node_error', '2S136/D', 403, '' ); + } + } } \ No newline at end of file diff --git a/applications/blog/modules/front/blogs/view.php b/applications/blog/modules/front/blogs/view.php index ca4eeaa8..7a308e80 100644 --- a/applications/blog/modules/front/blogs/view.php +++ b/applications/blog/modules/front/blogs/view.php @@ -107,14 +107,10 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller $table->sortBy = \IPS\Request::i()->sortby ?: 'date'; /* Update views */ - \IPS\Db::i()->update( - 'blog_blogs', - "`blog_num_views`=`blog_num_views`+1", - array( "blog_id=?", $this->blog->id ), - array(), - NULL, - \IPS\Db::LOW_PRIORITY - ); + if ( !\IPS\Request::i()->isAjax() ) + { + $this->blog->updateViews(); + } /* Online User Location */ if( !$this->blog->social_group ) @@ -386,6 +382,10 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller { $options['autocomplete']['filterProfanity'] = TRUE; } + if ( \IPS\Settings::i()->tags_alphabetical ) + { + $options['autocomplete']['alphabetical'] = TRUE; + } $options['autocomplete']['prefix'] = \IPS\Content\Item::canPrefix( NULL, $this->blog ); $options['autocomplete']['disallowedCharacters'] = array( '#' ); // @todo Pending \IPS\Http\Url rework, hashes cannot be used in URLs diff --git a/applications/blog/setup/upg_107644/data.json b/applications/blog/setup/upg_107644/data.json new file mode 100644 index 00000000..d9cac4f3 --- /dev/null +++ b/applications/blog/setup/upg_107644/data.json @@ -0,0 +1,23 @@ +{ + "id": 107644, + "name": "4.7.8", + "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_107645/data.json b/applications/blog/setup/upg_107645/data.json new file mode 100644 index 00000000..58a569f7 --- /dev/null +++ b/applications/blog/setup/upg_107645/data.json @@ -0,0 +1,23 @@ +{ + "id": 107645, + "name": "4.7.8", + "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_107660/data.json b/applications/blog/setup/upg_107660/data.json new file mode 100644 index 00000000..eca36fd7 --- /dev/null +++ b/applications/blog/setup/upg_107660/data.json @@ -0,0 +1,23 @@ +{ + "id": 107660, + "name": "4.7.9 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_107661/data.json b/applications/blog/setup/upg_107661/data.json new file mode 100644 index 00000000..14d1aabc --- /dev/null +++ b/applications/blog/setup/upg_107661/data.json @@ -0,0 +1,23 @@ +{ + "id": 107661, + "name": "4.7.9 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_107662/data.json b/applications/blog/setup/upg_107662/data.json new file mode 100644 index 00000000..9c199922 --- /dev/null +++ b/applications/blog/setup/upg_107662/data.json @@ -0,0 +1,23 @@ +{ + "id": 107662, + "name": "4.7.9 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_107663/data.json b/applications/blog/setup/upg_107663/data.json new file mode 100644 index 00000000..68eecffb --- /dev/null +++ b/applications/blog/setup/upg_107663/data.json @@ -0,0 +1,23 @@ +{ + "id": 107663, + "name": "4.7.9", + "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_107664/data.json b/applications/blog/setup/upg_107664/data.json new file mode 100644 index 00000000..d7244f62 --- /dev/null +++ b/applications/blog/setup/upg_107664/data.json @@ -0,0 +1,23 @@ +{ + "id": 107664, + "name": "4.7.9", + "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_107665/data.json b/applications/blog/setup/upg_107665/data.json new file mode 100644 index 00000000..ca52b5c0 --- /dev/null +++ b/applications/blog/setup/upg_107665/data.json @@ -0,0 +1,23 @@ +{ + "id": 107665, + "name": "4.7.9", + "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_107666/data.json b/applications/blog/setup/upg_107666/data.json new file mode 100644 index 00000000..c340c0b4 --- /dev/null +++ b/applications/blog/setup/upg_107666/data.json @@ -0,0 +1,23 @@ +{ + "id": 107666, + "name": "4.7.9", + "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_107667/data.json b/applications/blog/setup/upg_107667/data.json new file mode 100644 index 00000000..54d18980 --- /dev/null +++ b/applications/blog/setup/upg_107667/data.json @@ -0,0 +1,23 @@ +{ + "id": 107667, + "name": "4.7.9", + "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_107668/data.json b/applications/blog/setup/upg_107668/data.json new file mode 100644 index 00000000..1bd2add4 --- /dev/null +++ b/applications/blog/setup/upg_107668/data.json @@ -0,0 +1,23 @@ +{ + "id": 107668, + "name": "4.7.9", + "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_107680/data.json b/applications/blog/setup/upg_107680/data.json new file mode 100644 index 00000000..fe471675 --- /dev/null +++ b/applications/blog/setup/upg_107680/data.json @@ -0,0 +1,23 @@ +{ + "id": 107680, + "name": "4.7.10 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_107680/theme.json b/applications/blog/setup/upg_107680/theme.json new file mode 100644 index 00000000..861865c1 --- /dev/null +++ b/applications/blog/setup/upg_107680/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_107681/data.json b/applications/blog/setup/upg_107681/data.json new file mode 100644 index 00000000..59181d3c --- /dev/null +++ b/applications/blog/setup/upg_107681/data.json @@ -0,0 +1,23 @@ +{ + "id": 107681, + "name": "4.7.10 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_107682/data.json b/applications/blog/setup/upg_107682/data.json new file mode 100644 index 00000000..74a66ad7 --- /dev/null +++ b/applications/blog/setup/upg_107682/data.json @@ -0,0 +1,23 @@ +{ + "id": 107682, + "name": "4.7.10", + "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_107683/data.json b/applications/blog/setup/upg_107683/data.json new file mode 100644 index 00000000..d82befc1 --- /dev/null +++ b/applications/blog/setup/upg_107683/data.json @@ -0,0 +1,23 @@ +{ + "id": 107683, + "name": "4.7.10", + "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_107684/data.json b/applications/blog/setup/upg_107684/data.json new file mode 100644 index 00000000..f674ff94 --- /dev/null +++ b/applications/blog/setup/upg_107684/data.json @@ -0,0 +1,23 @@ +{ + "id": 107684, + "name": "4.7.10", + "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_107690/data.json b/applications/blog/setup/upg_107690/data.json new file mode 100644 index 00000000..2f15c196 --- /dev/null +++ b/applications/blog/setup/upg_107690/data.json @@ -0,0 +1,23 @@ +{ + "id": 107690, + "name": "4.7.11 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_107690/theme.json b/applications/blog/setup/upg_107690/theme.json new file mode 100644 index 00000000..45fae43a --- /dev/null +++ b/applications/blog/setup/upg_107690/theme.json @@ -0,0 +1,26 @@ +{ + "html": { + "added": [], + "edited": [ + "front\/browse\/indexButtons", + "front\/browse\/indexGridEntry", + "front\/browse\/rows", + "front\/view\/blogHeader", + "front\/view\/blogViewLarge", + "front\/view\/blogViewMedium", + "front\/view\/entry", + "front\/widgets\/blogs" + ], + "removed": [] + }, + "css": { + "added": [], + "edited": [], + "removed": [] + }, + "resources": { + "added": [], + "edited": [], + "removed": [] + } +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107691/data.json b/applications/blog/setup/upg_107691/data.json new file mode 100644 index 00000000..0ef24235 --- /dev/null +++ b/applications/blog/setup/upg_107691/data.json @@ -0,0 +1,23 @@ +{ + "id": 107691, + "name": "4.7.11 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_107692/data.json b/applications/blog/setup/upg_107692/data.json new file mode 100644 index 00000000..cad4c48f --- /dev/null +++ b/applications/blog/setup/upg_107692/data.json @@ -0,0 +1,23 @@ +{ + "id": 107692, + "name": "4.7.11", + "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_107693/data.json b/applications/blog/setup/upg_107693/data.json new file mode 100644 index 00000000..8a588d02 --- /dev/null +++ b/applications/blog/setup/upg_107693/data.json @@ -0,0 +1,23 @@ +{ + "id": 107693, + "name": "4.7.11", + "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_107694/data.json b/applications/blog/setup/upg_107694/data.json new file mode 100644 index 00000000..525dd3eb --- /dev/null +++ b/applications/blog/setup/upg_107694/data.json @@ -0,0 +1,23 @@ +{ + "id": 107694, + "name": "4.7.11", + "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_107695/data.json b/applications/blog/setup/upg_107695/data.json new file mode 100644 index 00000000..6e3a06a2 --- /dev/null +++ b/applications/blog/setup/upg_107695/data.json @@ -0,0 +1,23 @@ +{ + "id": 107695, + "name": "4.7.11.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_107700/data.json b/applications/blog/setup/upg_107700/data.json new file mode 100644 index 00000000..32067f75 --- /dev/null +++ b/applications/blog/setup/upg_107700/data.json @@ -0,0 +1,23 @@ +{ + "id": 107700, + "name": "4.7.12 Beta 1", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeSettings": false, + "javascript": true, + "emailTemplates": false, + "hooks": false, + "acpSearchKeywords": false, + "settings": false, + "tasks": false, + "modules": false, + "widgets": false, + "customOptions": false, + "customRoutines": false + }, + "forceMainUpgrader": true, + "forceManualDownloadNoCiC": false, + "forceManualDownloadCiC": false +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107700/javascript.json b/applications/blog/setup/upg_107700/javascript.json new file mode 100644 index 00000000..bc26a6ca --- /dev/null +++ b/applications/blog/setup/upg_107700/javascript.json @@ -0,0 +1,14 @@ +{ + "files": { + "added": [], + "edited": [], + "removed": [] + }, + "orders": { + "added": [], + "edited": [ + "global\/\/dev\/js\/\/library\/" + ], + "removed": [] + } +} \ No newline at end of file diff --git a/applications/blog/setup/upg_107701/data.json b/applications/blog/setup/upg_107701/data.json new file mode 100644 index 00000000..58c531d8 --- /dev/null +++ b/applications/blog/setup/upg_107701/data.json @@ -0,0 +1,23 @@ +{ + "id": 107701, + "name": "4.7.12 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_107702/data.json b/applications/blog/setup/upg_107702/data.json new file mode 100644 index 00000000..699df2d7 --- /dev/null +++ b/applications/blog/setup/upg_107702/data.json @@ -0,0 +1,23 @@ +{ + "id": 107702, + "name": "4.7.12 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_107703/data.json b/applications/blog/setup/upg_107703/data.json new file mode 100644 index 00000000..21375964 --- /dev/null +++ b/applications/blog/setup/upg_107703/data.json @@ -0,0 +1,23 @@ +{ + "id": 107703, + "name": "4.7.12 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_107704/data.json b/applications/blog/setup/upg_107704/data.json new file mode 100644 index 00000000..818bde75 --- /dev/null +++ b/applications/blog/setup/upg_107704/data.json @@ -0,0 +1,23 @@ +{ + "id": 107704, + "name": "4.7.12", + "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_107710/data.json b/applications/blog/setup/upg_107710/data.json new file mode 100644 index 00000000..7bfaa034 --- /dev/null +++ b/applications/blog/setup/upg_107710/data.json @@ -0,0 +1,23 @@ +{ + "id": 107710, + "name": "4.7.13 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_107710/theme.json b/applications/blog/setup/upg_107710/theme.json new file mode 100644 index 00000000..861865c1 --- /dev/null +++ b/applications/blog/setup/upg_107710/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_107711/data.json b/applications/blog/setup/upg_107711/data.json new file mode 100644 index 00000000..ffc45637 --- /dev/null +++ b/applications/blog/setup/upg_107711/data.json @@ -0,0 +1,23 @@ +{ + "id": 107711, + "name": "4.7.13 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_107712/data.json b/applications/blog/setup/upg_107712/data.json new file mode 100644 index 00000000..310f21d1 --- /dev/null +++ b/applications/blog/setup/upg_107712/data.json @@ -0,0 +1,23 @@ +{ + "id": 107712, + "name": "4.7.13", + "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/sources/Blog/Blog.php b/applications/blog/sources/Blog/Blog.php index e1211d47..23182693 100644 --- a/applications/blog/sources/Blog/Blog.php +++ b/applications/blog/sources/Blog/Blog.php @@ -23,7 +23,7 @@ if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) ) */ class _Blog extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\Embeddable { - use \IPS\Content\ClubContainer; + use \IPS\Content\ClubContainer, \IPS\Content\ViewUpdates; /** * @brief [ActiveRecord] Multiton Store diff --git a/applications/blog/sources/Category/Category.php b/applications/blog/sources/Category/Category.php index db7b1c32..fa6fffdf 100644 --- a/applications/blog/sources/Category/Category.php +++ b/applications/blog/sources/Category/Category.php @@ -23,6 +23,8 @@ if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) ) */ class _Category extends \IPS\Node\Model { + use \IPS\Content\ViewUpdates; + /** * @brief [ActiveRecord] Multiton Store */ diff --git a/applications/blog/sources/Entry/Entry.php b/applications/blog/sources/Entry/Entry.php index 54aedd62..28fdfd58 100644 --- a/applications/blog/sources/Entry/Entry.php +++ b/applications/blog/sources/Entry/Entry.php @@ -27,7 +27,6 @@ class _Entry extends \IPS\Content\Item implements \IPS\Content\Followable, \IPS\Content\Shareable, \IPS\Content\ReadMarkers, - \IPS\Content\Views, \IPS\Content\Polls, \IPS\Content\Ratings, \IPS\Content\EditHistory, @@ -37,7 +36,7 @@ class _Entry extends \IPS\Content\Item implements \IPS\Content\MetaData, \IPS\Content\Anonymous { - use \IPS\Content\Reactable, \IPS\Content\Reportable; + use \IPS\Content\Reactable, \IPS\Content\Reportable, \IPS\Content\ViewUpdates, \IPS\Content\Statistics; /** * @brief Multiton Store diff --git a/applications/calendar/Application.php b/applications/calendar/Application.php index 538f532c..4462949d 100644 --- a/applications/calendar/Application.php +++ b/applications/calendar/Application.php @@ -107,12 +107,9 @@ class _Application extends \IPS\Application $feed->addEvent( $event ); } - $ics = $feed->buildICalendarFeed( $this->_calendar ); + $ics = $feed->buildICalendarFeed( $calendar ); - \IPS\Output::i()->sendHeader( "Content-type: text/calendar; charset=UTF-8" ); - \IPS\Output::i()->sendHeader( 'Content-Disposition: inline; filename=calendarEvents.ics' ); - - print $ics; + \IPS\Output::i()->sendOutput( $ics, 200, 'text/calendar', [ 'Content-Disposition' => \IPS\Output::getContentDisposition( 'inline', "calendarEvents.ics" ) ], FALSE, FALSE, FALSE ); exit; } diff --git a/applications/calendar/data/acpsearch.json b/applications/calendar/data/acpsearch.json index a8cd6f50..3d3eb35c 100644 --- a/applications/calendar/data/acpsearch.json +++ b/applications/calendar/data/acpsearch.json @@ -3,14 +3,8 @@ "lang_key": "menu__calendar_calendars_calendars", "restriction": "calendars_manage", "keywords": [ - "calendars" - ] - }, - "app=calendar&module=calendars&controller=calendars": { - "lang_key": "menu__calendar_calendars_calendars", - "restriction": "calendars_manage", - "keywords": [ - "edit calendar" + "edit calendar", + "events" ] }, "app=calendar&module=calendars&controller=calendars&do=permissions": { @@ -181,7 +175,8 @@ "lang_key": "menu__calendar_calendars_settings", "restriction": "settings_manage", "keywords": [ - "calendar settings" + "calendar settings", + "events" ] }, "app=calendar&module=calendars&controller=settings&searchResult=calendar_rss_feed_days": { @@ -234,5 +229,12 @@ "monday", "sunday" ] + }, + "app=calendar&module=calendars&controller=venues": { + "lang_key": "menu__calendar_calendars_venues", + "restriction": null, + "keywords": [ + "events" + ] } } \ No newline at end of file diff --git a/applications/calendar/data/build.xml b/applications/calendar/data/build.xml index 1d0d3705..52b919f3 100644 --- a/applications/calendar/data/build.xml +++ b/applications/calendar/data/build.xml @@ -20,7 +20,7 @@ - + @@ -42,11 +42,12 @@ - + + diff --git a/applications/calendar/data/extensions.json b/applications/calendar/data/extensions.json index 97b8ce24..6f10325f 100644 --- a/applications/calendar/data/extensions.json +++ b/applications/calendar/data/extensions.json @@ -34,6 +34,9 @@ "Permissions": { "Permissions": "IPS\\calendar\\extensions\\core\\Permissions\\Permissions" }, + "Statistics": { + "Rsvp": "IPS\\calendar\\extensions\\core\\Statistics\\Rsvp" + }, "StreamItems": { "StreamItems": "IPS\\calendar\\extensions\\core\\StreamItems\\StreamItems" } diff --git a/applications/calendar/data/furl.json b/applications/calendar/data/furl.json index b765aaf7..00d22322 100644 --- a/applications/calendar/data/furl.json +++ b/applications/calendar/data/furl.json @@ -95,6 +95,10 @@ "calendar": { "friendly": "", "real": "app=calendar&module=calendar&controller=view" - } + }, + "calendar_event_search": { + "friendly": "event-search", + "real": "app=calendar&module=calendar&controller=view&do=search" + } } } \ No newline at end of file diff --git a/applications/calendar/data/javascript.xml b/applications/calendar/data/javascript.xml index d7ca2da6..f8333453 100644 --- a/applications/calendar/data/javascript.xml +++ b/applications/calendar/data/javascript.xml @@ -1,6 +1,6 @@ - - - - - - - - - - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -2220,7 +2234,7 @@ var PER_PAGE = 16; }); }(jQuery, _)); - \ ");]]> - \
    \
    \ @@ -2255,7 +2269,6 @@ controllers underscore jquery mustache -IntersectionObserver Debug.js app.js jquery.js diff --git a/applications/calendar/data/lang.xml b/applications/calendar/data/lang.xml index 475eceb4..1ba078df 100644 --- a/applications/calendar/data/lang.xml +++ b/applications/calendar/data/lang.xml @@ -1,6 +1,6 @@ - + Events Events a comment on an event @@ -41,6 +41,8 @@ Can add iCalendar feed imports? Can edit iCalendar feed imports? Can delete iCalendar feed imports? + Statistics + Can view RSVP statistics? Viewing Calendar: %s Viewing Calendar Viewing Event: %s @@ -342,6 +344,7 @@ You do not have permission to review events The iCalendar feed %s is not correctly formatted in a recognized iCalendar format The iCalendar feed %s did not return any events to process + Subscribe Subscribe to iCalendar feed Download iCalendar export Calendar diff --git a/applications/calendar/data/theme.xml b/applications/calendar/data/theme.xml index 0df351ac..15fb97be 100644 --- a/applications/calendar/data/theme.xml +++ b/applications/calendar/data/theme.xml @@ -86,7 +86,7 @@ {{endif}}
    -
    +
    {{if $thisCalendar and $club = $thisCalendar->club()}} @@ -94,34 +94,29 @@ {{else}} {{if $thisCalendar}}{$thisCalendar->_title}{{else}}{lang="all_calendars"}{{endif}}   {{endif}} -    - {lang="jump_to"}
    - {{if $thisCalendar}} -
    -
    - {template="follow" app="core" group="global" params="'calendar', 'calendar', $thisCalendar->id, \IPS\calendar\Event::containerFollowerCount( $thisCalendar )"} -
    - +
    +
    + {{if $thisCalendar and \IPS\Application::appIsEnabled('cloud')}} + {template="analyticsButton" app="cloud" group="analytics" params="$thisCalendar, $thisCalendar->id"} + {{endif}} + {lang="subscribe_button"} + {lang="jump_to"} + {{if $thisCalendar}} +
    + {template="follow" app="core" group="global" params="'calendar', 'calendar', $thisCalendar->id, \IPS\calendar\Event::containerFollowerCount( $thisCalendar )"} +
    + {{endif}}
    - {{endif}} +
    {$jump->customTemplate( array( \IPS\Theme::i()->getTemplate( 'browse' ), 'dateJump' ) )|raw} - +{template="subscribeMenu" app="calendar" group="global" params="$thisCalendar, $downloadLinks"} ]]> + - - @@ -7526,7 +7528,7 @@ {lang="tags_no_js"} ]]> + - @@ -9798,8 +9922,10 @@
  • {lang="privacy"}
  • {{endif}} {{if \IPS\Member::loggedIn()->canUseContactUs() and !( \IPS\Dispatcher::i()->application->directory == 'core' and \IPS\Dispatcher::i()->module and \IPS\Dispatcher::i()->module->key == 'contact' )}} -
  • contact_type != 'contact_redirect' and (member.member_id or \IPS\Helpers\Form\Captcha::supportsModal())}}data-ipsdialog data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage='{lang="contact_sent_blurb"}' data-ipsdialog-title="{lang="contact"}"{{endif}}>{lang='contact'}
  • +
  • contact_type != 'contact_redirect' and (member.member_id or \IPS\Helpers\Form\Captcha::supportsModal())}}data-ipsdialog data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage='{{if member.member_id OR !settings.contact_email_verify}}{lang="contact_sent_blurb"}{{else}}{lang="contact_verify_your_email"}{{endif}}' data-ipsdialog-title="{lang="contact"}"{{endif}}>{lang='contact'}
  • {{endif}} +
  • {lang='cookies_about'}
  • + {{if \IPS\Dispatcher::i()->application instanceof \IPS\Application AND \IPS\Dispatcher::i()->application->canManageWidgets()}} @@ -9866,7 +9992,7 @@ {lang="site"} -
  • +
  • {{$md = \IPS\Dispatcher::i()->module->key;}} {{$ct = \IPS\Dispatcher::i()->controller;}} @@ -9891,6 +10017,16 @@
  • {{endif}} + {{if \IPS\Dispatcher\Admin::showSwitchLink()}} +
  • + + + Switch to Cloud + + + +
  • + {{endif}} {{$notificationsCount = \IPS\core\AdminNotification::notificationCount();}}
  • @@ -10132,7 +10268,7 @@
  • {template="mobileNavigation" if="theme.responsive" app="core" group="global" params=""} - {template="guestTermsBar" if="!\IPS\Member::loggedIn()->member_id and \IPS\Settings::i()->guest_terms_bar" app="core" group="global" params="base64_encode( \IPS\Settings::i()->base_url )"} + {template="guestTermsBar" if="\IPS\Settings::i()->guest_terms_bar" app="core" group="global" params="base64_encode( \IPS\Request::i()->url() )"} {template="includeJS" if="theme.js_include == 'footer'" app="core" group="global" location="global" params=""} {template="metaTagEditor" if="isset( $_SESSION['live_meta_tags'] ) and $_SESSION['live_meta_tags'] and member.isAdmin()" app="core" group="global" params=""} @@ -10220,41 +10356,51 @@
    {{endif}}
    ]]> - +]]> + + + + + + + +{template="mfaSetupOptOut" app="core" group="login" location="global"}]]> + + + + - + + + + + + + + + - - @@ -3551,236 +3517,6 @@ {{else}} {$number} {{endif}}]]> - - - - - - - - - - + + -