From ab6036444647f0386a775bcaa5464eee09347cc6 Mon Sep 17 00:00:00 2001 From: Vadim Belman Date: Thu, 7 Jul 2016 17:32:55 -0400 Subject: [PATCH] Item13897: NatEditPlugin conversion & tests fixes. Fixed a number of tests failing because of non-English localization. Disabling locales whenever necessary. Some tests are failing due to Request::Cache not being compatible with uploads attribute (expecting hash, now array). NatEditPlugin doesn't save, needs investigation. - Added leaks detection to foswiki_debug.psgi --- .../Plugins/JQueryPlugin/UI/ACCORDION.pm | 31 +++----- .../Plugins/JQueryPlugin/UI/AUTOCOMPLETE.pm | 31 +++----- .../Foswiki/Plugins/JQueryPlugin/UI/BUTTON.pm | 31 +++----- .../Plugins/JQueryPlugin/UI/DATEPICKER.pm | 41 +++++----- .../Plugins/JQueryPlugin/UI/DRAGGABLE.pm | 31 +++----- .../Plugins/JQueryPlugin/UI/PROGRESSBAR.pm | 31 +++----- .../Plugins/JQueryPlugin/UI/RESIZABLE.pm | 31 +++----- .../Foswiki/Plugins/JQueryPlugin/UI/SLIDER.pm | 31 +++----- .../Plugins/JQueryPlugin/UI/SPINNER.pm | 31 +++----- .../lib/Foswiki/Plugins/NatEditPlugin.pm | 9 --- .../Plugins/NatEditPlugin/FormButton.pm | 14 ++-- .../Foswiki/Plugins/NatEditPlugin/FormList.pm | 5 +- .../Foswiki/Plugins/NatEditPlugin/NATEDIT.pm | 76 ++++++++++--------- .../Plugins/NatEditPlugin/RestAttachments.pm | 15 ++-- .../Foswiki/Plugins/NatEditPlugin/RestSave.pm | 42 +++++----- .../test/unit/ExpandMacrosTests.pm | 3 + UnitTestContrib/test/unit/Fn_ENCODE.pm | 9 +++ UnitTestContrib/test/unit/Fn_INCLUDE.pm | 3 + UnitTestContrib/test/unit/Fn_MAKETEXT.pm | 6 +- UnitTestContrib/test/unit/Fn_REVINFO.pm | 5 +- UnitTestContrib/test/unit/Fn_SEARCH.pm | 5 +- UnitTestContrib/test/unit/FormattingTests.pm | 3 +- UnitTestContrib/test/unit/FuncTests.pm | 5 +- UnitTestContrib/test/unit/FuncUsersTests.pm | 2 + .../test/unit/HTMLValidationTests.pm | 1 + UnitTestContrib/test/unit/ManageDotPmTests.pm | 4 +- UnitTestContrib/test/unit/RegisterTests.pm | 2 + UnitTestContrib/test/unit/RenameTests.pm | 2 + UnitTestContrib/test/unit/RenderFormTests.pm | 3 +- UnitTestContrib/test/unit/SaveScriptTests.pm | 3 + .../test/unit/ViewFileScriptTests.pm | 3 + UnitTestContrib/test/unit/ViewScriptTests.pm | 5 +- core/bin/foswiki_debug.psgi | 29 ++++++- core/lib/Foswiki/Meta.pm | 5 +- 34 files changed, 268 insertions(+), 280 deletions(-) diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/ACCORDION.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/ACCORDION.pm index 24f40879b0..1a8c8e542f 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/ACCORDION.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/ACCORDION.pm @@ -3,8 +3,8 @@ package Foswiki::Plugins::JQueryPlugin::UI::ACCORDION; use strict; use warnings; -use Foswiki::Plugins::JQueryPlugin::Plugin; -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Moo; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -22,24 +22,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Accordion', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/accordion/', - javascript => ['jquery.ui.accordion.init.js'], - dependencies => [ 'ui', ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Accordion', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/accordion/', + javascript => ['jquery.ui.accordion.init.js'], + dependencies => [ 'ui', ], +); 1; diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/AUTOCOMPLETE.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/AUTOCOMPLETE.pm index 14edaf27ce..e9c25b84e5 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/AUTOCOMPLETE.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/AUTOCOMPLETE.pm @@ -3,8 +3,8 @@ package Foswiki::Plugins::JQueryPlugin::UI::AUTOCOMPLETE; use strict; use warnings; -use Foswiki::Plugins::JQueryPlugin::Plugin; -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Moo; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -22,24 +22,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Autocomplete', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/autocomplete/', - javascript => ['jquery.ui.autocomplete.init.js'], - dependencies => [ 'ui', ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Autocomplete', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/autocomplete/', + javascript => ['jquery.ui.autocomplete.init.js'], + dependencies => [ 'ui', ], +); 1; diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/BUTTON.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/BUTTON.pm index a342176679..922bb3ad1a 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/BUTTON.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/BUTTON.pm @@ -4,8 +4,8 @@ package Foswiki::Plugins::JQueryPlugin::UI::BUTTON; use strict; use warnings; -use Foswiki::Plugins::JQueryPlugin::Plugin; -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Moo; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -23,24 +23,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Button', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/button/', - javascript => ['jquery.ui.button.init.js'], - dependencies => [ 'ui', ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Button', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/button/', + javascript => ['jquery.ui.button.init.js'], + dependencies => [ 'ui', ], +); 1; diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/DATEPICKER.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/DATEPICKER.pm index 0876d0ef9e..48ed306c3a 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/DATEPICKER.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/DATEPICKER.pm @@ -22,24 +22,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Datepicker', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/datepicker/', - javascript => ['jquery.ui.datepicker.init.js'], - dependencies => [ 'ui', 'livequery' ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Datepicker', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/datepicker/', + javascript => ['jquery.ui.datepicker.init.js'], + dependencies => [ 'ui', 'livequery' ], +); =begin TML @@ -49,28 +40,30 @@ Initialize this plugin by adding the required static files to the page =cut -sub init { +around init => sub { + my $orig = shift; my $this = shift; - return unless $this->SUPER::init(); + return unless $orig->( $this, @_ ); # open matching localization file if it exists my $app = $this->app; + my $cfgData = $app->cfg->data; my $langTag = $app->i18n->language(); my $messagePath = - $Foswiki::cfg{SystemWebName} + $cfgData->{SystemWebName} . '/JQueryPlugin/i18n/jquery.ui.datepicker-' . $langTag . '.js'; - my $messageFile = $Foswiki::cfg{PubDir} . '/' . $messagePath; + my $messageFile = $cfgData->{PubDir} . '/' . $messagePath; if ( -f $messageFile ) { Foswiki::Func::addToZone( 'script', "JQUERYPLUGIN::UI::LANG", <<"HERE", 'JQUERYPLUGIN::UI' ); - + HERE } -} +}; 1; diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/DRAGGABLE.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/DRAGGABLE.pm index c45ab5ef04..59ba0d5bc7 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/DRAGGABLE.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/DRAGGABLE.pm @@ -3,8 +3,8 @@ package Foswiki::Plugins::JQueryPlugin::UI::DRAGGABLE; use strict; use warnings; -use Foswiki::Plugins::JQueryPlugin::Plugin; -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Moo; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -22,24 +22,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Draggable', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/draggable/', - javascript => ['jquery.ui.draggable.init.js'], - dependencies => [ 'ui', ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Draggable', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/draggable/', + javascript => ['jquery.ui.draggable.init.js'], + dependencies => [ 'ui', ], +); 1; diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/PROGRESSBAR.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/PROGRESSBAR.pm index 5326d7a14c..dc613a5e94 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/PROGRESSBAR.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/PROGRESSBAR.pm @@ -3,8 +3,8 @@ package Foswiki::Plugins::JQueryPlugin::UI::PROGRESSBAR; use strict; use warnings; -use Foswiki::Plugins::JQueryPlugin::Plugin; -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Moo; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -22,24 +22,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Progressbar', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/progressbar/', - javascript => ['jquery.ui.progressbar.init.js'], - dependencies => [ 'ui', ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Progressbar', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/progressbar/', + javascript => ['jquery.ui.progressbar.init.js'], + dependencies => [ 'ui', ], +); 1; diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/RESIZABLE.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/RESIZABLE.pm index 522229584f..de7d811f12 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/RESIZABLE.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/RESIZABLE.pm @@ -3,8 +3,8 @@ package Foswiki::Plugins::JQueryPlugin::UI::RESIZABLE; use strict; use warnings; -use Foswiki::Plugins::JQueryPlugin::Plugin; -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Moo; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -22,24 +22,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Resizable', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/resizable/', - javascript => ['jquery.ui.resizable.init.js'], - dependencies => [ 'ui', ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Resizable', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/resizable/', + javascript => ['jquery.ui.resizable.init.js'], + dependencies => [ 'ui', ], +); 1; diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/SLIDER.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/SLIDER.pm index 4f2f265254..5f49fbdc8d 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/SLIDER.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/SLIDER.pm @@ -3,8 +3,8 @@ package Foswiki::Plugins::JQueryPlugin::UI::SLIDER; use strict; use warnings; -use Foswiki::Plugins::JQueryPlugin::Plugin; -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Moo; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -22,24 +22,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Slider', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/slider/', - javascript => ['jquery.ui.slider.init.js'], - dependencies => [ 'ui', ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Slider', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/slider/', + javascript => ['jquery.ui.slider.init.js'], + dependencies => [ 'ui', ], +); 1; diff --git a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/SPINNER.pm b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/SPINNER.pm index a5c7d48b79..6ad27d162b 100644 --- a/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/SPINNER.pm +++ b/JQueryPlugin/lib/Foswiki/Plugins/JQueryPlugin/UI/SPINNER.pm @@ -3,8 +3,8 @@ package Foswiki::Plugins::JQueryPlugin::UI::SPINNER; use strict; use warnings; -use Foswiki::Plugins::JQueryPlugin::Plugin; -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Moo; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -22,24 +22,15 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'UI::Spinner', - version => '1.10.4', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', - author => 'see http://jqueryui.com/about', - homepage => 'http://api.jqueryui.com/spinner/', - javascript => ['jquery.ui.spinner.init.js'], - dependencies => [ 'ui', ], - ), - $class - ); - - return $this; -} +our %pluginParams = ( + name => 'UI::Spinner', + version => '1.10.4', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui', + author => 'see http://jqueryui.com/about', + homepage => 'http://api.jqueryui.com/spinner/', + javascript => ['jquery.ui.spinner.init.js'], + dependencies => [ 'ui', ], +); 1; diff --git a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin.pm b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin.pm index c0ff6216ae..c8dce21a73 100644 --- a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin.pm +++ b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin.pm @@ -21,15 +21,6 @@ use Foswiki::Validation (); use Foswiki::Request (); use Foswiki::Sandbox (); -BEGIN { - # Backwards compatibility for Foswiki 1.1.x - unless ( Foswiki::Request->can('multi_param') ) { - no warnings 'redefine'; - *Foswiki::Request::multi_param = \&Foswiki::Request::param; - use warnings 'redefine'; - } -} - our $VERSION = '9.07'; our $RELEASE = '06 Jan 2016'; our $NO_PREFS_IN_TOPIC = 1; diff --git a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/FormButton.pm b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/FormButton.pm index 1ca96abf9f..03feb67d2c 100644 --- a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/FormButton.pm +++ b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/FormButton.pm @@ -35,7 +35,8 @@ we need an empty addform.nat.tmp to switch off this feature of FORMFIELDS =cut sub handle { - my ( $session, $params, $theTopic, $theWeb ) = @_; + my $app = shift; + my ( $params, $theTopic, $theWeb ) = @_; Foswiki::Plugins::JQueryPlugin::createPlugin("natedit"); @@ -66,16 +67,15 @@ sub handle { } if ($form) { - $actionText = $session->{i18n}->maketext("Change form"); + $actionText = $app->i18n->maketext("Change form"); $actionTitle = - $session->{i18n}->maketext( "Change the current form of [_1]", + $app->i18n->maketext( "Change the current form of [_1]", "$theWeb.$theTopic" ); } elsif ( Foswiki::Func::getPreferencesValue( 'WEBFORMS', $theWeb ) ) { - $actionText = $session->{i18n}->maketext("Add form"); - $actionTitle = - $session->{i18n} - ->maketext( "Add a new form to [_1]", "$theWeb.$theTopic" ); + $actionText = $app->i18n->maketext("Add form"); + $actionTitle = $app->i18n->maketext( "Add a new form to [_1]", + "$theWeb.$theTopic" ); } else { return ''; diff --git a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/FormList.pm b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/FormList.pm index 6b2e4393a0..095f0c29ab 100644 --- a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/FormList.pm +++ b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/FormList.pm @@ -29,7 +29,8 @@ SMELL: should be added to the core =cut sub handle { - my ( $session, $params, $theTopic, $theWeb ) = @_; + my $app = shift; + my ( $params, $theTopic, $theWeb ) = @_; my $theFormat = $params->{_DEFAULT} @@ -61,7 +62,7 @@ sub handle { $legalForms =~ s/\s*$//; my %forms = map { my ( $formWeb, $formTopic ) = - $session->normalizeWebTopicName( $theWeb, $_ ); + $app->request->normalizeWebTopicName( $theWeb, $_ ); $_ => { web => $formWeb, topic => $formTopic, diff --git a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/NATEDIT.pm b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/NATEDIT.pm index ee882add4f..674215569e 100644 --- a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/NATEDIT.pm +++ b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/NATEDIT.pm @@ -14,12 +14,13 @@ # http://www.gnu.org/copyleft/gpl.html package Foswiki::Plugins::NatEditPlugin::NATEDIT; -use strict; -use warnings; +use v5.14; -use Foswiki::Func (); -use Foswiki::Plugins::JQueryPlugin::Plugin (); -our @ISA = qw( Foswiki::Plugins::JQueryPlugin::Plugin ); +use Foswiki::Func (); + +use Moo; +use namespace::clean; +extends qw( Foswiki::Plugins::JQueryPlugin::Plugin ); =begin TML @@ -37,36 +38,36 @@ Constructor =cut -sub new { - my $class = shift; - - my $this = bless( - $class->SUPER::new( - name => 'NatEdit', - version => '4.01', - author => 'Michael Daum', - homepage => 'http://foswiki.org/Extensions/NatEditPlugin', - puburl => '%PUBURLPATH%/%SYSTEMWEB%/NatEditPlugin', - css => ['styles.css'], - documentation => "$Foswiki::cfg{SystemWebName}.NatEditPlugin", - javascript => ['jquery.natedit.js'], - dependencies => [ - 'JQUERYPLUGIN::FOSWIKI::PREFERENCES', 'textboxlist', - 'pnotify', 'fontawesome', - 'form', 'validate', - 'ui', 'ui::dialog', - 'ui::tooltip', 'tabpane', - 'ui::autocomplete', 'ui::button', - 'button', 'loader', - 'JQUERYPLUGIN::UPLOADER', 'blockui', - 'render', - ], - ), - $class +around BUILDARGS => sub { + my $orig = shift; + my $class = shift; + my %params = @_; + + my $app = $params{app}; + + return $orig->( + $class, @_, + name => 'NatEdit', + version => '4.01', + author => 'Michael Daum', + homepage => 'http://foswiki.org/Extensions/NatEditPlugin', + puburl => '%PUBURLPATH%/%SYSTEMWEB%/NatEditPlugin', + css => ['styles.css'], + documentation => $app->cfg->data->{SystemWebName} . ".NatEditPlugin", + javascript => ['jquery.natedit.js'], + dependencies => [ + 'JQUERYPLUGIN::FOSWIKI::PREFERENCES', 'textboxlist', + 'pnotify', 'fontawesome', + 'form', 'validate', + 'ui', 'ui::dialog', + 'ui::tooltip', 'tabpane', + 'ui::autocomplete', 'ui::button', + 'button', 'loader', + 'JQUERYPLUGIN::UPLOADER', 'blockui', + 'render', + ], ); - - return $this; -} +}; =begin TML @@ -76,10 +77,11 @@ Initialize this plugin by adding the required static files to the html header =cut -sub init { +around init => sub { + my $orig = shift; my $this = shift; - return unless $this->SUPER::init(); + return unless $orig->( $this, @_ ); Foswiki::Func::addToZone( "script", "NATEDIT::PREFERENCES", @@ -93,6 +95,6 @@ sub init { } } HERE -} +}; 1; diff --git a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/RestAttachments.pm b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/RestAttachments.pm index 101fd87b2a..829dbc1060 100644 --- a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/RestAttachments.pm +++ b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/RestAttachments.pm @@ -16,14 +16,16 @@ use strict; use warnings; use Foswiki::Func (); -use Error qw( :try ); -use JSON (); +use JSON (); sub handle { - my ( $session, $plugin, $verb, $response ) = @_; + my $app = shift; + my ( $plugin, $verb, $response ) = @_; - my $web = $session->{webName}; - my $topic = $session->{topicName}; + my $req = $app->request; + + my $web = $req->web; + my $topic = $req->topic; my ( $meta, $text ) = Foswiki::Func::readTopic( $web, $topic ); my @results = (); @@ -38,8 +40,7 @@ sub handle { my @attachments = $meta->find("FILEATTACHMENT"); - my $request = $session->{request}; - my $term = $request->param("term"); + my $term = $req->param("term"); my $context = Foswiki::Func::getContext(); foreach diff --git a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/RestSave.pm b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/RestSave.pm index 74bb9ee949..6f5fd6a3af 100644 --- a/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/RestSave.pm +++ b/NatEditPlugin/lib/Foswiki/Plugins/NatEditPlugin/RestSave.pm @@ -11,6 +11,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. package Foswiki::Plugins::NatEditPlugin::RestSave; +use v5.14; use strict; use warnings; @@ -18,12 +19,14 @@ use Foswiki::UI::Save (); use Foswiki::OopsException (); use Foswiki::Validation (); use Encode (); -use Error qw( :try ); +use Try::Tiny; sub handle { - my ( $session, $plugin, $verb, $response ) = @_; + my $app = shift; + my ( $plugin, $verb, $response ) = @_; - my $request = $session->{request}; + my $request = $app->request; + my $cfgData = $app->cfg->data; foreach my $key ( $request->multi_param() ) { my @val = $request->multi_param($key); @@ -37,10 +40,11 @@ sub handle { } if ( ref $val[0] eq 'ARRAY' ) { - $request->param( $key, [ map( toSiteCharSet($_), @{ $val[0] } ) ] ); + $request->param( $key, + [ map( toSiteCharSet( $app, $_ ), @{ $val[0] } ) ] ); } else { - $request->param( $key, [ map( toSiteCharSet($_), @val ) ] ); + $request->param( $key, [ map( toSiteCharSet( $app, $_ ), @val ) ] ); } } @@ -48,17 +52,17 @@ sub handle { my $error; my $status = 200; try { - Foswiki::UI::Save::save($session); + $app->create('Foswiki::UI::Save')->save; # get a new lease my $topicObject = - Foswiki::Meta->new( $session, $session->{webName}, - $session->{topicName} ); - $topicObject->setLease( $Foswiki::cfg{LeaseLength} ); + $app->create( 'Foswiki::Meta', $request->web, $request->topic ); + $topicObject->setLease( $cfgData->{LeaseLength} ); } - catch Foswiki::OopsException with { - $error = shift; + catch { + $error = Foswiki::Exception::Fatal->transmute( $_, 0 ); + $error->rethrow unless $error->isa('Foswiki::OopsException'); $status = 419; }; @@ -69,11 +73,11 @@ sub handle { # add validation key to HTTP header, if required unless ( $response->getHeader('X-Foswiki-Validation') ) { - my $cgis = $session->getCGISession(); + my $cgis = $app->users->getCGISession(); my $context = $request->url( -full => 1, -path => 1, -query => 1 ) . time(); - my $usingStrikeOne = $Foswiki::cfg{Validation}{Method} eq 'strikeone'; + my $usingStrikeOne = $cfgData->{Validation}{Method} eq 'strikeone'; $response->pushHeader( 'X-Foswiki-Validation', _generateValidationKey( $cgis, $context, $usingStrikeOne ) ); @@ -106,28 +110,28 @@ sub stringifyError { my $s = ''; - $s .= $error->{-text} if defined $error->{-text}; - $s .= ' ' . join( ',', @{ $error->{params} } ) - if defined $error->{params}; + $s .= $error->text if defined $error->text; + $s .= ' ' . join( ',', @{ $error->params } ) + if defined $error->params; return $s; } sub toSiteCharSet { - my $string = shift; + my ( $app, $string ) = @_; return $string unless $string; return $string if $Foswiki::UNICODE; return $string - if ( $Foswiki::cfg{Site}{CharSet} =~ /^utf-?8/i ); + if ( $app->cfg->data->{Site}{CharSet} =~ /^utf-?8/i ); # If the site charset is not utf-8, need to convert it # Leave this code using Encode:: - not used on UNICODE core. require Encode; return Encode::encode( - $Foswiki::cfg{Site}{CharSet}, + $app->cfg->data->{Site}{CharSet}, Encode::decode_utf8($string), Encode::FB_PERLQQ ); diff --git a/UnitTestContrib/test/unit/ExpandMacrosTests.pm b/UnitTestContrib/test/unit/ExpandMacrosTests.pm index 6bb19e3d85..13f76cbf40 100644 --- a/UnitTestContrib/test/unit/ExpandMacrosTests.pm +++ b/UnitTestContrib/test/unit/ExpandMacrosTests.pm @@ -23,6 +23,9 @@ has _saveMacroHandler => ( is => 'rw', ); around set_up => sub { my $orig = shift; my $this = shift; + + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $orig->( $this, @_ ); my $macros = $this->app->macros; $this->_saveMacroExists( $macros->exists('MACRO') ); diff --git a/UnitTestContrib/test/unit/Fn_ENCODE.pm b/UnitTestContrib/test/unit/Fn_ENCODE.pm index 713f83d205..f283c95beb 100644 --- a/UnitTestContrib/test/unit/Fn_ENCODE.pm +++ b/UnitTestContrib/test/unit/Fn_ENCODE.pm @@ -14,6 +14,15 @@ around BUILDARGS => sub { return $orig->( $class, @_, testSuite => 'ENCODE' ); }; +around set_up => sub { + my $orig = shift; + my $this = shift; + + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + + return $orig->( $this, @_ ); +}; + sub test_default { my $this = shift; diff --git a/UnitTestContrib/test/unit/Fn_INCLUDE.pm b/UnitTestContrib/test/unit/Fn_INCLUDE.pm index d71383c401..54f5c0d26f 100644 --- a/UnitTestContrib/test/unit/Fn_INCLUDE.pm +++ b/UnitTestContrib/test/unit/Fn_INCLUDE.pm @@ -23,6 +23,9 @@ around BUILDARGS => sub { around set_up => sub { my $orig = shift; my $this = shift; + + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $orig->( $this, @_ ); $this->other_web( $this->test_web . "other" ); my $webObject = $this->populateNewWeb( $this->other_web ); diff --git a/UnitTestContrib/test/unit/Fn_MAKETEXT.pm b/UnitTestContrib/test/unit/Fn_MAKETEXT.pm index 508a73e07d..5ee8a00929 100644 --- a/UnitTestContrib/test/unit/Fn_MAKETEXT.pm +++ b/UnitTestContrib/test/unit/Fn_MAKETEXT.pm @@ -34,11 +34,11 @@ around set_up => sub { my $orig = shift; my $this = shift; - $this->__EnvReset->{$_} = undef - foreach grep { /(?:^LANG$|^LC_)/ } keys %ENV; - $orig->( $this, @_ ); + # Get around non-English system locale problem. + $this->app->prefs->setSessionPreferences( LANGUAGE => 'en', ); + ($topicObject) = Foswiki::Func::readTopic( $this->test_web, 'WebHome' ); }; diff --git a/UnitTestContrib/test/unit/Fn_REVINFO.pm b/UnitTestContrib/test/unit/Fn_REVINFO.pm index adeefb168d..3cc795b98f 100644 --- a/UnitTestContrib/test/unit/Fn_REVINFO.pm +++ b/UnitTestContrib/test/unit/Fn_REVINFO.pm @@ -25,7 +25,10 @@ around BUILDARGS => sub { around set_up => sub { my $orig = shift; my $this = shift; - $this->app->cfg->data->{DisableAllPlugins} = 1; + + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $this->app->cfg->data->{DisableAllPlugins} = 1; + $orig->( $this, @_ ); $this->guest_wikiname( Foswiki::Func::getWikiName() ); $this->app->user( $this->test_user_cuid ); # OUCH diff --git a/UnitTestContrib/test/unit/Fn_SEARCH.pm b/UnitTestContrib/test/unit/Fn_SEARCH.pm index 6e3691464e..0e064b24db 100644 --- a/UnitTestContrib/test/unit/Fn_SEARCH.pm +++ b/UnitTestContrib/test/unit/Fn_SEARCH.pm @@ -43,7 +43,7 @@ around BUILDARGS => sub { # This test is run in a separate process to be able to reclaim that memory # after the test is complete. sub run_in_new_process { - return 0; + return 1; } our $AElig; @@ -52,7 +52,8 @@ around set_up => sub { my $orig = shift; my ($this) = shift; - $this->app->cfg->data->{DisableAllPlugins} = 1; + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $this->app->cfg->data->{DisableAllPlugins} = 1; $orig->( $this, @_ ); diff --git a/UnitTestContrib/test/unit/FormattingTests.pm b/UnitTestContrib/test/unit/FormattingTests.pm index 7846105dc7..1472a8a283 100644 --- a/UnitTestContrib/test/unit/FormattingTests.pm +++ b/UnitTestContrib/test/unit/FormattingTests.pm @@ -225,7 +225,8 @@ around set_up => sub { my $orig = shift; my $this = shift; - $this->app->cfg->data->{DisableAllPlugins} = 1; + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $this->app->cfg->data->{DisableAllPlugins} = 1; $orig->( $this, @_ ); $this->sup( $this->app->cfg->getScriptUrl( 0, 'view' ) ); my ($topicObject) = Foswiki::Func::readTopic( $this->test_web, 'H_' ); diff --git a/UnitTestContrib/test/unit/FuncTests.pm b/UnitTestContrib/test/unit/FuncTests.pm index 7e359acb62..cdea167835 100644 --- a/UnitTestContrib/test/unit/FuncTests.pm +++ b/UnitTestContrib/test/unit/FuncTests.pm @@ -103,7 +103,10 @@ around BUILDARGS => sub { around set_up => sub { my $orig = shift; my $this = shift; - $this->app->cfg->data->{DisableAllPlugins} = 1; + + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $this->app->cfg->data->{DisableAllPlugins} = 1; + $orig->( $this, @_ ); my ($topicObject) = Foswiki::Func::readTopic( diff --git a/UnitTestContrib/test/unit/FuncUsersTests.pm b/UnitTestContrib/test/unit/FuncUsersTests.pm index 6197feab4b..275145d1da 100644 --- a/UnitTestContrib/test/unit/FuncUsersTests.pm +++ b/UnitTestContrib/test/unit/FuncUsersTests.pm @@ -195,6 +195,8 @@ sub noUsersRegistered { sub set_up_for_verify { my $this = shift; + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $this->createNewFoswikiApp( engineParams => { initialAttributes => diff --git a/UnitTestContrib/test/unit/HTMLValidationTests.pm b/UnitTestContrib/test/unit/HTMLValidationTests.pm index b4fa396b50..ab9c1f0e67 100644 --- a/UnitTestContrib/test/unit/HTMLValidationTests.pm +++ b/UnitTestContrib/test/unit/HTMLValidationTests.pm @@ -102,6 +102,7 @@ around set_up => sub { #print STDERR "HTML::Tidy Version: ".$HTML::Tidy::VERSION."\n"; #print STDERR "libtidy Version: ".HTML::Tidy::libtidy_version()."\n"; + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; $orig->( $this, @_ ); diff --git a/UnitTestContrib/test/unit/ManageDotPmTests.pm b/UnitTestContrib/test/unit/ManageDotPmTests.pm index daf6308d95..bcea5d2e30 100644 --- a/UnitTestContrib/test/unit/ManageDotPmTests.pm +++ b/UnitTestContrib/test/unit/ManageDotPmTests.pm @@ -30,7 +30,9 @@ around set_up => sub { my $orig = shift; my $this = shift; - $this->app->cfg->data->{DisableAllPlugins} = 1; + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $this->app->cfg->data->{DisableAllPlugins} = 1; + $orig->( $this, @_ ); $REG_TMPL = diff --git a/UnitTestContrib/test/unit/RegisterTests.pm b/UnitTestContrib/test/unit/RegisterTests.pm index 20e3525be0..f0ea12d9de 100644 --- a/UnitTestContrib/test/unit/RegisterTests.pm +++ b/UnitTestContrib/test/unit/RegisterTests.pm @@ -106,6 +106,8 @@ around set_up => sub { my $orig = shift; my $this = shift; + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $orig->( $this, @_ ); my $cfgData = $this->app->cfg->data; diff --git a/UnitTestContrib/test/unit/RenameTests.pm b/UnitTestContrib/test/unit/RenameTests.pm index 5b1cf8742c..3a426f9839 100644 --- a/UnitTestContrib/test/unit/RenameTests.pm +++ b/UnitTestContrib/test/unit/RenameTests.pm @@ -77,6 +77,8 @@ around set_up => sub { my $orig = shift; my $this = shift; + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $orig->( $this, @_ ); $this->new_web( $this->test_web . 'New' ); diff --git a/UnitTestContrib/test/unit/RenderFormTests.pm b/UnitTestContrib/test/unit/RenderFormTests.pm index 2e42333507..93c1db2c4a 100644 --- a/UnitTestContrib/test/unit/RenderFormTests.pm +++ b/UnitTestContrib/test/unit/RenderFormTests.pm @@ -50,7 +50,8 @@ around set_up => sub { my $orig = shift; my $this = shift; - $this->app->cfg->data->{DisableAllPlugins} = 1; + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $this->app->cfg->data->{DisableAllPlugins} = 1; $orig->( $this, @_ ); diff --git a/UnitTestContrib/test/unit/SaveScriptTests.pm b/UnitTestContrib/test/unit/SaveScriptTests.pm index eeea045f31..f2fa6e9047 100644 --- a/UnitTestContrib/test/unit/SaveScriptTests.pm +++ b/UnitTestContrib/test/unit/SaveScriptTests.pm @@ -94,6 +94,9 @@ has test_user_3_email => ( is => 'rw', ); around set_up => sub { my $orig = shift; my $this = shift; + + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $orig->( $this, @_ ); $this->test_user_2_forename('Buck'); diff --git a/UnitTestContrib/test/unit/ViewFileScriptTests.pm b/UnitTestContrib/test/unit/ViewFileScriptTests.pm index e2b143a67c..b7e76d31c7 100644 --- a/UnitTestContrib/test/unit/ViewFileScriptTests.pm +++ b/UnitTestContrib/test/unit/ViewFileScriptTests.pm @@ -26,6 +26,9 @@ around BUILDARGS => sub { around set_up => sub { my $orig = shift; my $this = shift; + + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $orig->( $this, @_ ); my $topic = 'TestTopic1'; diff --git a/UnitTestContrib/test/unit/ViewScriptTests.pm b/UnitTestContrib/test/unit/ViewScriptTests.pm index 5310fb355b..020986e512 100644 --- a/UnitTestContrib/test/unit/ViewScriptTests.pm +++ b/UnitTestContrib/test/unit/ViewScriptTests.pm @@ -88,7 +88,10 @@ around BUILDARGS => sub { around set_up => sub { my $orig = shift; my $this = shift; - $this->app->cfg->data->{DisableAllPlugins} = 1; + + $this->app->cfg->data->{UserInterfaceInternationalisation} = 0; + $this->app->cfg->data->{DisableAllPlugins} = 1; + $orig->( $this, @_ ); #set up nested web $this->test_web/Nest diff --git a/core/bin/foswiki_debug.psgi b/core/bin/foswiki_debug.psgi index 5ac3fe6508..40f0f96ab3 100755 --- a/core/bin/foswiki_debug.psgi +++ b/core/bin/foswiki_debug.psgi @@ -6,16 +6,39 @@ use lib Cwd::abs_path("../lib"), use Foswiki::App; use HTTP::Server::PSGI; +use constant CHECKLEAK => 0; + +BEGIN { + if (CHECKLEAK) { + eval "use Devel::Leak::Object qw{ GLOBAL_bless };"; + die $@ if $@; + $Devel::Leak::Object::TRACKSOURCELINES = 1; + $Devel::Leak::Object::TRACKSTACK = 1; + } +} + my $app = sub { my $env = shift; + + Devel::Leak::Object::checkpoint if CHECKLEAK; + my $rc = Foswiki::App->run( env => $env, ); - #$env->{'psgix.harakiri.commit'} = 1; + + if (CHECKLEAK) { + Devel::Leak::Object::status; + eval { + require Devel::MAT::Dumper; + Devel::MAT::Dumper::dump( + $starting_root . "/working/logs/foswiki_debug_psgi.pmat" ); + }; + } + return $rc; }; my $server = HTTP::Server::PSGI->new( - host => "127.0.0.1", - port => 5000, + host => "127.0.0.1", + port => 5000, timeout => 120, ); diff --git a/core/lib/Foswiki/Meta.pm b/core/lib/Foswiki/Meta.pm index 7d7e037c69..18550873e2 100644 --- a/core/lib/Foswiki/Meta.pm +++ b/core/lib/Foswiki/Meta.pm @@ -648,7 +648,10 @@ sub unload { # Avoid collisions, initiate removal from MetaCache only and only if object # has been previously stored in the cache. $this->app->search->metacache->removeMeta( $this->web, $this->topic ) - if $this->inMetaCache && $this->app && $this->app->has_search; + if $this->inMetaCache + && $this->app + && $this->app->has_search + && $this->app->search->metacache; $this->_clear_loadedRev; $this->_clear_latestIsLoaded; $this->clear_text;