52 lines
1.3 KiB
52 lines
1.3 KiB
package NGCP::Panel::Form;
|
|
|
|
use warnings;
|
|
use strict;
|
|
|
|
use Module::Load::Conditional qw/can_load/;
|
|
use NGCP::Panel::Utils::I18N qw//;
|
|
|
|
my %forms = ();
|
|
our $dont_use_cache = 0;
|
|
|
|
sub dont_use_cache {
|
|
if (scalar @_){
|
|
$dont_use_cache = $_[0];
|
|
}
|
|
return $dont_use_cache;
|
|
}
|
|
|
|
sub get {
|
|
my ($name, $c, $create_new) = @_;
|
|
my $form;
|
|
$c->log->debug("Form requested: $name; dont_use_cache: $dont_use_cache; create_new: "
|
|
.( $create_new // "undefined" ).";");
|
|
if( !$dont_use_cache
|
|
&& !$create_new
|
|
&& exists $forms{$name}
|
|
) {
|
|
$c->log->debug("form is taken from cache");
|
|
$form = $forms{$name};
|
|
$form->clear();
|
|
$form->ctx($c);
|
|
$form->setup_form();
|
|
} else {
|
|
my $use_list = { $name => undef };
|
|
unless(can_load(modules => $use_list, nocache => 0, autoload => 0)) {
|
|
$c->log->error("Failed to load module $name: ".$Module::Load::Conditional::ERROR."\n");
|
|
return;
|
|
}
|
|
$form = $forms{$name} = $name->new(ctx => $c);
|
|
# translate form here to prevent multiple translations which leads to errors and doesn't work since the
|
|
# source IDs (english) are no longer present
|
|
NGCP::Panel::Utils::I18N->translate_form($c, $form);
|
|
}
|
|
return $form;
|
|
}
|
|
|
|
sub clear_form_cache {
|
|
%forms = ();
|
|
}
|
|
|
|
1;
|