diff --git a/Credits.txt b/Credits.txt index 7d18a751..96cab489 100644 --- a/Credits.txt +++ b/Credits.txt @@ -69,7 +69,7 @@ Enum FontAwesome Description: General icons for UI Location: applications/core/interface/fontawesome - Included version: 6.5.1 + Included version: 6.7.1 Website: https://fontawesome.com License: https://fontawesome.com/license/free diff --git a/admin/upgrade/lang.php b/admin/upgrade/lang.php index 24b35159..ba31673d 100644 --- a/admin/upgrade/lang.php +++ b/admin/upgrade/lang.php @@ -719,5 +719,5 @@ $lang = array( '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 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 via the AdminCP > Applications page. Please make a note of the following Applications so you are clear which have been automatically disabled via the upgrader. TEXT, - + '107783_pbr_captcha' => "Post Before Register Changes" ); \ No newline at end of file diff --git a/applications/blog/data/javascript.xml b/applications/blog/data/javascript.xml index e2347878..7e640f11 100644 --- a/applications/blog/data/javascript.xml +++ b/applications/blog/data/javascript.xml @@ -1,6 +1,6 @@ - - \ "); diff --git a/applications/blog/data/lang.xml b/applications/blog/data/lang.xml index 911845f8..02f7f9cd 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/versions.json b/applications/blog/data/versions.json index fbb59ba1..b5d021c6 100644 --- a/applications/blog/data/versions.json +++ b/applications/blog/data/versions.json @@ -285,5 +285,8 @@ "5000033": "5.0.0 Beta 7", "5000034": "5.0.0 Beta 7", "5000035": "5.0.0 Beta 7", - "5000036": "5.0.0 Beta 8" + "5000036": "5.0.0 Beta 8", + "5000037": "5.0.0 Beta 8", + "5000038": "5.0.0 Beta 9", + "5000039": "5.0.0 Beta 9.1" } \ No newline at end of file diff --git a/applications/blog/extensions/core/GroupForm/Blog.php b/applications/blog/extensions/core/GroupForm/Blog.php index 1762c32f..38de197f 100644 --- a/applications/blog/extensions/core/GroupForm/Blog.php +++ b/applications/blog/extensions/core/GroupForm/Blog.php @@ -11,8 +11,6 @@ namespace IPS\blog\extensions\core\GroupForm; -/* To prevent PHP errors (extending class does not exist) revealing path */ - use IPS\Extensions\GroupFormAbstract; use IPS\Helpers\Form; use IPS\Helpers\Form\Number; @@ -22,6 +20,7 @@ use IPS\Member\Group; use IPS\Settings; use function defined; +/* To prevent PHP errors (extending class does not exist) revealing path */ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { header( ( $_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.0' ) . ' 403 Forbidden' ); @@ -52,7 +51,7 @@ class Blog extends GroupFormAbstract } $form->add(new YesNo('g_blog_allowcomment', $group->g_blog_allowcomment)); - if( $group->g_id == Settings::i()->guest_group AND Settings::i()->post_before_registering ) + if( $group->g_id == Settings::i()->guest_group AND Settings::i()->post_before_registering and Settings::i()->bot_antispam_type !== 'none' ) { Member::loggedIn()->language()->words['g_blog_allowcomment_desc'] = Member::loggedIn()->language()->addToStack('g_blog_allowcomment_guestreg'); } diff --git a/applications/blog/setup/upg_5000037/data.json b/applications/blog/setup/upg_5000037/data.json new file mode 100644 index 00000000..41324595 --- /dev/null +++ b/applications/blog/setup/upg_5000037/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000037, + "name": "5.0.0 Beta 8", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": true, + "javascript": false, + "emailTemplates": 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_5000037/themeeditor.json b/applications/blog/setup/upg_5000037/themeeditor.json new file mode 100644 index 00000000..6493d217 --- /dev/null +++ b/applications/blog/setup/upg_5000037/themeeditor.json @@ -0,0 +1,14 @@ +{ + "categories": { + "added": [], + "edited": [], + "removed": [] + }, + "settings": { + "added": [], + "edited": [ + "layout_blog_view" + ], + "removed": [] + } +} \ No newline at end of file diff --git a/applications/blog/setup/upg_5000038/data.json b/applications/blog/setup/upg_5000038/data.json new file mode 100644 index 00000000..29c7d819 --- /dev/null +++ b/applications/blog/setup/upg_5000038/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000038, + "name": "5.0.0 Beta 9", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": true, + "javascript": false, + "emailTemplates": 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_5000038/themeeditor.json b/applications/blog/setup/upg_5000038/themeeditor.json new file mode 100644 index 00000000..6493d217 --- /dev/null +++ b/applications/blog/setup/upg_5000038/themeeditor.json @@ -0,0 +1,14 @@ +{ + "categories": { + "added": [], + "edited": [], + "removed": [] + }, + "settings": { + "added": [], + "edited": [ + "layout_blog_view" + ], + "removed": [] + } +} \ No newline at end of file diff --git a/applications/blog/setup/upg_5000039/data.json b/applications/blog/setup/upg_5000039/data.json new file mode 100644 index 00000000..269eac7f --- /dev/null +++ b/applications/blog/setup/upg_5000039/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000039, + "name": "5.0.0 Beta 9.1", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": true, + "javascript": false, + "emailTemplates": 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_5000039/themeeditor.json b/applications/blog/setup/upg_5000039/themeeditor.json new file mode 100644 index 00000000..6493d217 --- /dev/null +++ b/applications/blog/setup/upg_5000039/themeeditor.json @@ -0,0 +1,14 @@ +{ + "categories": { + "added": [], + "edited": [], + "removed": [] + }, + "settings": { + "added": [], + "edited": [ + "layout_blog_view" + ], + "removed": [] + } +} \ No newline at end of file diff --git a/applications/blog/sources/Entry/Entry.php b/applications/blog/sources/Entry/Entry.php index fd3a444b..22d9d45f 100644 --- a/applications/blog/sources/Entry/Entry.php +++ b/applications/blog/sources/Entry/Entry.php @@ -804,7 +804,8 @@ class Entry extends Item implements $response = parent::canComment( $member, $considerPostBeforeRegistering ); if( $response ) { - if ( !$member->member_id and $considerPostBeforeRegistering and Settings::i()->post_before_registering and Login::registrationType() != 'disabled' ) + if ( !$member->member_id and $considerPostBeforeRegistering and Settings::i()->post_before_registering + and Login::registrationType() != 'disabled'and Settings::i()->bot_antispam_type !== 'none' ) { return (bool) Group::load( Settings::i()->member_group )->g_blog_allowcomment; } diff --git a/applications/calendar/data/javascript.xml b/applications/calendar/data/javascript.xml index 1a05fcd9..53ac98a1 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 * @@ -2113,7 +2113,7 @@ var PER_PAGE = 16; }); }(jQuery, _)); - \ ");]]> -
diff --git a/applications/calendar/data/lang.xml b/applications/calendar/data/lang.xml index 2fa2cd5e..f29df6de 100644 --- a/applications/calendar/data/lang.xml +++ b/applications/calendar/data/lang.xml @@ -1,6 +1,6 @@ - + Events Events a comment on an event diff --git a/applications/calendar/data/versions.json b/applications/calendar/data/versions.json index fbb59ba1..b5d021c6 100644 --- a/applications/calendar/data/versions.json +++ b/applications/calendar/data/versions.json @@ -285,5 +285,8 @@ "5000033": "5.0.0 Beta 7", "5000034": "5.0.0 Beta 7", "5000035": "5.0.0 Beta 7", - "5000036": "5.0.0 Beta 8" + "5000036": "5.0.0 Beta 8", + "5000037": "5.0.0 Beta 8", + "5000038": "5.0.0 Beta 9", + "5000039": "5.0.0 Beta 9.1" } \ No newline at end of file diff --git a/applications/calendar/setup/upg_5000037/data.json b/applications/calendar/setup/upg_5000037/data.json new file mode 100644 index 00000000..3cb71265 --- /dev/null +++ b/applications/calendar/setup/upg_5000037/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000037, + "name": "5.0.0 Beta 8", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/calendar/setup/upg_5000038/data.json b/applications/calendar/setup/upg_5000038/data.json new file mode 100644 index 00000000..4dbd5d82 --- /dev/null +++ b/applications/calendar/setup/upg_5000038/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000038, + "name": "5.0.0 Beta 9", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/calendar/setup/upg_5000039/data.json b/applications/calendar/setup/upg_5000039/data.json new file mode 100644 index 00000000..bf5b7820 --- /dev/null +++ b/applications/calendar/setup/upg_5000039/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000039, + "name": "5.0.0 Beta 9.1", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/cms/data/javascript.xml b/applications/cms/data/javascript.xml index 375e6a51..b144052a 100644 --- a/applications/cms/data/javascript.xml +++ b/applications/cms/data/javascript.xml @@ -1,6 +1,6 @@ - - - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -156,7 +156,7 @@ } }); }(jQuery, _)); - - - - - - - - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -1420,7 +1420,7 @@ } }); }(jQuery, _)); - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -1470,7 +1470,7 @@ } }); }(jQuery, _)); - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -1542,7 +1542,7 @@ } }); }(jQuery, _)); - - - - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -3009,7 +3009,7 @@ } }); }(jQuery, _)); - \ {{{contents}}}\ \ @@ -3026,7 +3026,7 @@ ips.templates.set( 'templates.media.noSearchResults', "\ {{#lang}}mediaNoResults{{/lang}}\
\ ");]]>
- {{title}} \ diff --git a/applications/cms/data/lang.xml b/applications/cms/data/lang.xml index 334110e4..e9141818 100644 --- a/applications/cms/data/lang.xml +++ b/applications/cms/data/lang.xml @@ -1,6 +1,6 @@ - + Pages Pages file diff --git a/applications/cms/data/versions.json b/applications/cms/data/versions.json index 87f32506..0533f359 100644 --- a/applications/cms/data/versions.json +++ b/applications/cms/data/versions.json @@ -603,5 +603,8 @@ "5000033": "5.0.0 Beta 7", "5000034": "5.0.0 Beta 7", "5000035": "5.0.0 Beta 7", - "5000036": "5.0.0 Beta 8" + "5000036": "5.0.0 Beta 8", + "5000037": "5.0.0 Beta 8", + "5000038": "5.0.0 Beta 9", + "5000039": "5.0.0 Beta 9.1" } \ No newline at end of file diff --git a/applications/cms/modules/admin/pages/blocks.php b/applications/cms/modules/admin/pages/blocks.php index b5e63e2b..b2a48aad 100644 --- a/applications/cms/modules/admin/pages/blocks.php +++ b/applications/cms/modules/admin/pages/blocks.php @@ -27,6 +27,7 @@ use IPS\Member; use IPS\Node\Controller; use IPS\Node\Model; use IPS\Output; +use IPS\Platform\Bridge; use IPS\Request; use IPS\Session; use IPS\Theme; @@ -149,13 +150,20 @@ class blocks extends Controller Dispatcher::i()->checkAcpPermission( 'block_add' ); $form = new Form( 'block_add_first_step', 'next'); + + $blockTypes = [ + 'plugin' => 'content_block_add_type_plugin', + 'editor' => 'content_block_add_custom_type_wysiwyg', + 'html' => 'content_block_add_custom_type_html', + ]; + + if( Bridge::i()->featureIsEnabled( 'phpblocks' ) ) + { + $blockTypes['php'] = 'content_block_add_custom_type_php'; + } $form->add( new Radio( 'content_block_add_type', 'plugin', FALSE, array( - 'options' => array( - 'plugin' => 'content_block_add_type_plugin', - 'editor' => 'content_block_add_custom_type_wysiwyg', - 'html' => 'content_block_add_custom_type_html', - ), + 'options' => $blockTypes, 'toggles' => array( 'plugin' => array( 'content_block_add_type_plugin' ) ) diff --git a/applications/cms/setup/upg_5000037/data.json b/applications/cms/setup/upg_5000037/data.json new file mode 100644 index 00000000..3cb71265 --- /dev/null +++ b/applications/cms/setup/upg_5000037/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000037, + "name": "5.0.0 Beta 8", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/cms/setup/upg_5000038/data.json b/applications/cms/setup/upg_5000038/data.json new file mode 100644 index 00000000..4dbd5d82 --- /dev/null +++ b/applications/cms/setup/upg_5000038/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000038, + "name": "5.0.0 Beta 9", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/cms/setup/upg_5000039/data.json b/applications/cms/setup/upg_5000039/data.json new file mode 100644 index 00000000..bf5b7820 --- /dev/null +++ b/applications/cms/setup/upg_5000039/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000039, + "name": "5.0.0 Beta 9.1", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/cms/sources/Blocks/Block.php b/applications/cms/sources/Blocks/Block.php index c29821f9..00140b64 100644 --- a/applications/cms/sources/Blocks/Block.php +++ b/applications/cms/sources/Blocks/Block.php @@ -14,6 +14,7 @@ namespace IPS\cms\Blocks; /* To prevent PHP errors (extending class does not exist) revealing path */ use DomainException; +use Exception; use InvalidArgumentException; use IPS\Application; use IPS\cms\Pages\Page; @@ -37,6 +38,7 @@ use IPS\Node\Model; use IPS\Node\Permissions; use IPS\Output; use IPS\Patterns\ActiveRecord; +use IPS\Platform\Bridge; use IPS\Request; use IPS\Theme; use IPS\Widget; @@ -242,6 +244,20 @@ class Block extends Model implements Permissions if ( ! isset( Store::i()->$functionName ) ) { $content = $block->content; + + if( $block->getConfig('editor') == 'php' ) + { + /* If PHP blocks are disabled, stop here */ + if( !Bridge::i()->featureIsEnabled( 'phpblocks' ) ) + { + throw new OutOfRangeException; + } + + ob_start(); + eval( $content ); + $content = ob_get_clean(); + } + Store::i()->$functionName = Theme::compileTemplate( $content, $functionName ); } @@ -515,6 +531,12 @@ EOF; $block_editor = ( isset( Request::i()->block_editor ) ) ? Request::i()->block_editor : ( $this->id ? $this->getConfig('editor') : null ); $block_plugin = ( isset( Request::i()->block_plugin ) ) ? Request::i()->block_plugin : ( $this->id ? $this->plugin : null ); + /* Double check that we didn't force the PHP blocks */ + if( $block_editor == 'php' and !Bridge::i()->featureIsEnabled( 'phpblocks' ) ) + { + $block_editor = 'html'; + } + /* Build form */ $form->addTab( 'content_block_form_tab__details' ); $form->add( new Translatable( 'block_name', NULL, TRUE, array( @@ -692,7 +714,21 @@ EOF; } else { - $form->add( new Codemirror( 'block_content', htmlentities( (string) $this->content, ENT_DISALLOWED, 'UTF-8' ), FALSE, array( 'tagSource' => Url::internal( "app=cms&module=pages&controller=blocks&do=loadTags" ), "codeModeAllowedLanguages" => ["ipsphtml"]), function($val ) { + $form->add( new Codemirror( 'block_content', htmlentities( (string) $this->content, ENT_DISALLOWED, 'UTF-8' ), FALSE, array( 'tagSource' => Url::internal( "app=cms&module=pages&controller=blocks&do=loadTags" ), "codeModeAllowedLanguages" => ( $block_editor == 'php' ) ? [ "php"] : ["ipsphtml"] ), function( $val ) use( $block_editor ) { + if( $block_editor == 'php' ) + { + try + { + ob_start(); + @eval( $val ); + ob_get_clean(); + } + catch ( ParseError|Exception $e ) + { + throw new DomainException( $e->getMessage() ); + } + } + if ( mb_strpos( $val, '{block="' . Request::i()->block_key . '"}' ) !== FALSE ) { throw new DomainException('block_content_recursive_error'); diff --git a/applications/cms/sources/Pages/Page.php b/applications/cms/sources/Pages/Page.php index 2b19851d..7fcd530b 100644 --- a/applications/cms/sources/Pages/Page.php +++ b/applications/cms/sources/Pages/Page.php @@ -18,6 +18,7 @@ use ErrorException; use Exception; use InvalidArgumentException; use IPS\Application; +use IPS\Application\Module; use IPS\cms\Databases; use IPS\cms\extensions\core\FrontNavigation\Pages; use IPS\cms\Templates; @@ -1690,6 +1691,32 @@ class Page extends Model implements Permissions ) ); } + /** + * Check permissions + * + * @param mixed $permission A key which has a value in static::$permissionMap['view'] matching a column ID in core_permission_index + * @param Group|Member|null $member The member or group to check (NULL for currently logged in member) + * @param bool $considerPostBeforeRegistering If TRUE, and $member is a guest, will return TRUE if "Post Before Registering" feature is enabled + * @return bool + * @throws OutOfBoundsException If $permission does not exist in static::$permissionMap + */ + public function can( mixed $permission, Group|Member $member=NULL, bool $considerPostBeforeRegistering = TRUE ): bool + { + /* If this is a database page, check the Database module permissions. + The Dispatcher thinks we are in the Pages module and so the permission check is done on the + wrong module. */ + if( ( Dispatcher::hasInstance() AND Dispatcher::i()->controllerLocation == 'front' ) and $database = $this->getDatabase() ) + { + $member = $member ?: Member::loggedIn(); + if( !$member->canAccessModule( Module::get( 'cms', 'database' ) ) ) + { + return false; + } + } + + return parent::can( $permission, $member, $considerPostBeforeRegistering ); + } + /** * Get the Database from the page * @@ -1984,7 +2011,7 @@ class Page extends Model implements Permissions */ public function getSortableName() : string { - return $this->seo_name; + return $this->seo_name ?? ''; } /** diff --git a/applications/cms/sources/Records/Records.php b/applications/cms/sources/Records/Records.php index 8c586015..ee52bfd7 100644 --- a/applications/cms/sources/Records/Records.php +++ b/applications/cms/sources/Records/Records.php @@ -3804,7 +3804,17 @@ class Records extends Item implements */ public function getForumId() : int { - return $this->_forum_forum; + return ( $this->useForumComments() ) ? $this->_forum_forum : 0; + } + + /** + * Determine if the topic sync is enabled + * + * @return bool + */ + public function isTopicSyncEnabled() : bool + { + return $this->useForumComments(); } /** diff --git a/applications/convert/data/javascript.xml b/applications/convert/data/javascript.xml index a2ab26de..1de925b2 100644 --- a/applications/convert/data/javascript.xml +++ b/applications/convert/data/javascript.xml @@ -1,6 +1,6 @@ - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * @@ -45,7 +45,7 @@ } } ); }(jQuery, _)); - /** + /** * Invision Community * (c) Invision Power Services, Inc. - https://www.invisioncommunity.com * diff --git a/applications/convert/data/lang.xml b/applications/convert/data/lang.xml index 3664e9ad..64b073a2 100644 --- a/applications/convert/data/lang.xml +++ b/applications/convert/data/lang.xml @@ -1,6 +1,6 @@ - + Converter Conversions Start New Conversion diff --git a/applications/convert/data/versions.json b/applications/convert/data/versions.json index fbb59ba1..b5d021c6 100644 --- a/applications/convert/data/versions.json +++ b/applications/convert/data/versions.json @@ -285,5 +285,8 @@ "5000033": "5.0.0 Beta 7", "5000034": "5.0.0 Beta 7", "5000035": "5.0.0 Beta 7", - "5000036": "5.0.0 Beta 8" + "5000036": "5.0.0 Beta 8", + "5000037": "5.0.0 Beta 8", + "5000038": "5.0.0 Beta 9", + "5000039": "5.0.0 Beta 9.1" } \ No newline at end of file diff --git a/applications/convert/extensions/core/Queue/RebuildGalleryImages.php b/applications/convert/extensions/core/Queue/RebuildGalleryImages.php index 0fc89480..43d863b4 100644 --- a/applications/convert/extensions/core/Queue/RebuildGalleryImages.php +++ b/applications/convert/extensions/core/Queue/RebuildGalleryImages.php @@ -91,7 +91,7 @@ class RebuildGalleryImages extends QueueAbstract $last = NULL; - foreach( new ActiveRecordIterator( Db::i()->select( '*', 'gallery_images', array( "image_id>?", $offset ), 'image_id ASC', array( 0, REBUILD_SLOW ) ), 'IPS\gallery\Image' ) AS $image ) + foreach( new ActiveRecordIterator( Db::i()->select( '*', 'gallery_images', array( "image_id>?", $offset ), 'image_id ASC', array( 0, REBUILD_INTENSE ) ), 'IPS\gallery\Image' ) AS $image ) { $data['completed']++; diff --git a/applications/convert/modules/admin/manage/manage.php b/applications/convert/modules/admin/manage/manage.php index ee1cdfbd..e23562b8 100644 --- a/applications/convert/modules/admin/manage/manage.php +++ b/applications/convert/modules/admin/manage/manage.php @@ -149,7 +149,7 @@ class manage extends Controller try { - $classname = get_class( $app->getSource() ); + $classname = get_class( $app->getSource( true, false ) ); /* @var Software $classname */ return $classname::softwareName(); diff --git a/applications/convert/setup/upg_5000037/data.json b/applications/convert/setup/upg_5000037/data.json new file mode 100644 index 00000000..3cb71265 --- /dev/null +++ b/applications/convert/setup/upg_5000037/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000037, + "name": "5.0.0 Beta 8", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/convert/setup/upg_5000038/data.json b/applications/convert/setup/upg_5000038/data.json new file mode 100644 index 00000000..4dbd5d82 --- /dev/null +++ b/applications/convert/setup/upg_5000038/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000038, + "name": "5.0.0 Beta 9", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/convert/setup/upg_5000039/data.json b/applications/convert/setup/upg_5000039/data.json new file mode 100644 index 00000000..bf5b7820 --- /dev/null +++ b/applications/convert/setup/upg_5000039/data.json @@ -0,0 +1,22 @@ +{ + "id": 5000039, + "name": "5.0.0 Beta 9.1", + "steps": { + "queries": false, + "lang": false, + "theme": false, + "themeeditor": false, + "javascript": false, + "emailTemplates": 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/convert/sources/Library/Core.php b/applications/convert/sources/Library/Core.php index 72b3121e..ed6d1dd9 100644 --- a/applications/convert/sources/Library/Core.php +++ b/applications/convert/sources/Library/Core.php @@ -1419,7 +1419,7 @@ class Core extends Library } catch( OutOfRangeException $e ) { - Db::i()->delete( 'core_attachments', array( "attach_id=?", $id ) ); + Db::i()->delete( 'core_attachments', array( "attach_id=?", $inserted_id ) ); $this->software->app->log( 'attachment_missing_parent', __METHOD__, App::LOG_WARNING, $id ); return FALSE; } diff --git a/applications/convert/sources/Software/Forums/Smf.php b/applications/convert/sources/Software/Forums/Smf.php index 4bd871d8..85541ca0 100644 --- a/applications/convert/sources/Software/Forums/Smf.php +++ b/applications/convert/sources/Software/Forums/Smf.php @@ -350,22 +350,24 @@ class Smf extends Software $poll_data = $this->db->select( '*', 'polls', array( "id_poll=?", $row['id_poll'] ) )->first(); $options = $this->db->select( '*', 'poll_choices', array( "id_poll=?", $poll_data['id_poll'] ) ); - - $choices = array(); - $votes = 0; + + $choices = $votes = $search = []; + $index = 1; foreach( $options AS $option ) { - $choices[ $option['id_choice'] ] = $option['label']; - $votes += $option['votes']; + $choices[ $index ] = $option['label']; + $votes[ $index ] = $option['votes']; + $search[ $index ] = $option['id_choice']; + $index++; } $member_votes = array(); foreach( $this->db->select( '*', 'log_polls', array( "id_poll=?", $poll_data['id_poll'] ) ) AS $vote ) { - $member_votes[$vote['id_member']] = array( + $member_votes[ $vote['id_member'] ] = [ 'member_id' => $vote['id_member'], - 'member_choices' => array( $vote['id_choice'] ) - ); + 'member_choices' => [ 1 => array_search( $vote['id_choice'], $search ) ] + ]; } $poll = array( diff --git a/applications/core/data/acpsearch.json b/applications/core/data/acpsearch.json index 72168f61..4fa51025 100644 --- a/applications/core/data/acpsearch.json +++ b/applications/core/data/acpsearch.json @@ -206,6 +206,7 @@ "geo", "giphy", "indexnow", + "integration", "mapbox", "maps", "matomo", @@ -216,8 +217,7 @@ "sendgrid", "spam", "tag manager", - "zapier", - "integration" + "zapier" ] }, "app=core&module=applications&controller=enhancements&do=edit&id=core_FacebookPixel": { @@ -266,8 +266,8 @@ "lang_key": "menu__core_applications_menu", "restriction": "menu_manage", "keywords": [ - "menu manager", "header", + "menu manager", "navigation" ] }, @@ -455,9 +455,9 @@ "lang_key": "menu__core_discovery_streams", "restriction": "streams_manage", "keywords": [ + "activity stream", "stream subscriptions", - "streams", - "activity stream" + "streams" ] }, "app=core&module=discovery&controller=tags": { @@ -794,8 +794,8 @@ "keywords": [ "karma", "like", - "reputation", - "reactions" + "reactions", + "reputation" ] }, "app=core&module=members&controller=groups&searchResult=g_search_flood": { @@ -1488,7 +1488,11 @@ "restriction": "spam_manage", "keywords": [ "spam", - "spammers" + "spammers", + "delete guest content", + "delete guest posts", + "guest content", + "guest posts" ] }, "app=core&module=moderation&controller=spam&do=serviceLogs": { @@ -1508,16 +1512,6 @@ "security question" ] }, - "app=core&module=moderation&controller=spam&searchResult=guest_captcha": { - "lang_key": "guest_captcha_search_target", - "restriction": "spam_manage", - "keywords": [ - "delete guest content", - "delete guest posts", - "guest content", - "guest posts" - ] - }, "app=core&module=moderation&controller=spam&tab=captcha": { "lang_key": "spamprevention_captcha", "restriction": "spam_manage", @@ -1662,9 +1656,9 @@ "restriction": "mycharts_manage", "keywords": [ "charts", + "saved charts", "statistics", - "stats", - "saved charts" + "stats" ] }, "app=core&module=overview&controller=notifications&do=settings": { @@ -1757,7 +1751,8 @@ "reddit", "share links", "stumbleupon", - "twitter" + "twitter", + "tiktok" ] }, "app=core&module=settings&controller=advanced": { @@ -2076,7 +2071,10 @@ "facebook", "social profile", "twitter", - "x" + "x", + "bluesky", + "youtube", + "tiktok" ] }, "app=core&module=settings&controller=general&searchResult=form_site_twitter_id": { @@ -2179,6 +2177,14 @@ "coppa" ] }, + "app=core&module=settings&controller=login&tab=settings&searchResult=form_login_after_inactivity_notification": { + "lang_key": "login_after_inactivity_notification", + "restriction": "login_access", + "keywords": [ + "dormant", + "email" + ] + }, "app=core&module=settings&controller=login&tab=settings&searchResult=form_new_device_email": { "lang_key": "new_device_email", "restriction": "login_manage", @@ -2255,8 +2261,8 @@ "restriction": null, "keywords": [ "editor", - "posting", - "editor permissions" + "editor permissions", + "posting" ] }, "app=core&module=settings&controller=posting&searchResult=attach_allowed_extensions": { @@ -2547,6 +2553,13 @@ "iframe" ] }, + "app=core&module=settings&controller=posting&tab=simplifiedMode&searchResult=form_editor_r__table": { + "lang_key": "editor_r__table", + "restriction": null, + "keywords": [ + "table" + ] + }, "app=core&module=settings&controller=posting&tab=tags&searchResult=tags_can_prefix": { "lang_key": "tags_can_prefix", "restriction": "tags_manage", diff --git a/applications/core/data/build.xml b/applications/core/data/build.xml index d9b678cb..b0d40bf8 100644 --- a/applications/core/data/build.xml +++ b/applications/core/data/build.xml @@ -234,7 +234,6 @@ - @@ -277,6 +276,7 @@ + @@ -542,13 +542,13 @@ - + - + @@ -569,7 +569,7 @@ - + @@ -607,7 +607,7 @@ - + @@ -683,10 +683,9 @@ - + - @@ -703,7 +702,7 @@ - + @@ -712,7 +711,7 @@ - + @@ -748,7 +747,7 @@ - + @@ -759,12 +758,13 @@ + - + @@ -799,6 +799,7 @@ + diff --git a/applications/core/data/editorManifest.json b/applications/core/data/editorManifest.json index 053f9433..0407a6a6 100644 --- a/applications/core/data/editorManifest.json +++ b/applications/core/data/editorManifest.json @@ -26,6 +26,30 @@ "src": "src/assets/icons/spoiler.svg", "isDynamicEntry": true }, + "src/assets/icons/table-base.svg": { + "file": "assets/table-base-D1cd7bGZ.js", + "name": "table-base", + "src": "src/assets/icons/table-base.svg", + "isDynamicEntry": true + }, + "src/assets/icons/table-cell.svg": { + "file": "assets/table-cell-DVOKSKb6.js", + "name": "table-cell", + "src": "src/assets/icons/table-cell.svg", + "isDynamicEntry": true + }, + "src/assets/icons/table-columns.svg": { + "file": "assets/table-columns-BC6EiFm4.js", + "name": "table-columns", + "src": "src/assets/icons/table-columns.svg", + "isDynamicEntry": true + }, + "src/assets/icons/table-rows.svg": { + "file": "assets/table-rows-_EhIjim3.js", + "name": "table-rows", + "src": "src/assets/icons/table-rows.svg", + "isDynamicEntry": true + }, "src/assets/icons/wrap.svg": { "file": "assets/wrap-BOz3U5J1.js", "name": "wrap", @@ -45,7 +69,7 @@ "isDynamicEntry": true }, "src/main.jsx": { - "file": "assets/main-0gprcJBY.js", + "file": "assets/main-Ce8dEiGN.js", "name": "main", "src": "src/main.jsx", "isEntry": true, @@ -54,9 +78,16 @@ "src/assets/icons/box.svg", "src/assets/icons/katex.svg", "src/assets/icons/spoiler.svg", + "src/assets/icons/table-base.svg", + "src/assets/icons/table-cell.svg", + "src/assets/icons/table-columns.svg", + "src/assets/icons/table-rows.svg", "src/assets/icons/wrap.svg", "src/assets/icons/wrapInverted.svg", "src/assets/icons/wrapNone.svg" + ], + "css": [ + "assets/main-D9k5Klkm.css" ] } } \ No newline at end of file diff --git a/applications/core/data/emails.xml b/applications/core/data/emails.xml index 2f73a3e9..0fd476f7 100644 --- a/applications/core/data/emails.xml +++ b/applications/core/data/emails.xml @@ -132,7 +132,7 @@

-— {setting="board_name"}]]>$member, $vid, $securityKey, $emaillanguage->addToStack("email_registration_validate", FALSE)} +— {setting="board_name"}]]>$member, $vid, $securityKey, $newEmail, $emaillanguage->addToStack("email_registration_validate", FALSE)} ===== {$email->language->addToStack("email_validate_link", FALSE)}: {url="app=core&module=system&controller=register&do=validate&vid={$vid}&mid={$member->member_id}&security_key={$securityKey}" plain="true" base="front"} @@ -1377,7 +1377,7 @@ URL: {$content->url()} - {$member->email} + {$newEmail} @@ -1393,10 +1393,10 @@ URL: {$content->url()}

-— {setting="board_name"}]]>$member, $vid, $securityKey, $emaillanguage->addToStack("email_complete_email_plain", FALSE)} +— {setting="board_name"}]]>$member, $vid, $securityKey, $newEmail, $emaillanguage->addToStack("email_complete_email_plain", FALSE)} ===== -{$email->language->addToStack("email_new_email", FALSE)}: {$member->email} +{$email->language->addToStack("email_new_email", FALSE)}: {$newEmail} {$email->language->addToStack("email_confirm_address", FALSE)}: {url="app=core&module=system&controller=register&do=validate&vid={$vid}&mid={$member->member_id}&security_key={$securityKey}" seoTemplate="register" base="front" plain="true"} ===== @@ -1450,7 +1450,128 @@ URL: {$content->url()} {$email->language->addToStack("email_lost_pass_timelimit", FALSE)} ===== --- {setting="board_name"}]]>0 @@ -7060,20 +7065,18 @@ {{$i++;}}
  • -
    - - - -
    - {{if $options['checkboxes']}} - - - {{else}} - {$val} - {{endif}} -
    + + + +
    + {{if $options['checkboxes']}} + + + {{else}} +
    {$val}
    + {{endif}}
  • {{endforeach}} @@ -7352,12 +7355,14 @@ {{endforeach}} {{else}} {{if $textarea}} - {{foreach $languages as $lang}} - {$lang->_title} {{if $required and $lang->default}}{lang="required"}{{endif}}
    -
    -
    -
    - {{endforeach}} +
    + {{foreach $languages as $lang}} +
    +
    {$lang->_title} {{if $required and $lang->default}}{lang="required"}{{endif}}
    + +
    + {{endforeach}} +
    {{else}}
      {{foreach $languages as $lang}} @@ -8235,8 +8240,8 @@ {{endforeach}}
    ]]> - @@ -23150,6 +23158,9 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie ]]> + @@ -26364,7 +26375,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie

    {lang="reg_confirm_email"}

    -

    {lang="reg_confirm_email_desc" sprintf="\IPS\Member::loggedIn()->email"}

    +

    {lang="reg_confirm_email_desc"}

    {lang="reg_confirm_email_must"}

      @@ -26439,6 +26450,7 @@ data-view-tracking-data="{expression="base64_encode(json_encode( $review->getVie {{endif}}]]>