View | Details | Raw Unified | Return to bug 38384
Collapse All | Expand All

(-)a/C4/Context.pm (-6 / +80 lines)
Lines 22-33 use Modern::Perl; Link Here
22
use vars qw($AUTOLOAD $context);
22
use vars qw($AUTOLOAD $context);
23
23
24
BEGIN {
24
BEGIN {
25
    # Calling get_enabled_plugins here esnures that all plugin
25
    my $enable_plugins = 0;
26
    # modules are loaded before use and will not trigger
26
    if ( exists $ENV{'KOHA_CONF'} && -e $ENV{'KOHA_CONF'} ) {
27
    # a database connection reset
27
        require XML::Simple;
28
    Koha::Plugins->get_enabled_plugins();
28
        $enable_plugins =
29
            XML::Simple->new->XMLin( $ENV{'KOHA_CONF'}, ForceArray => 0, KeyAttr => [] )->{'config'}->{'enable_plugins'}
30
            // 0;
31
    }
32
33
    if ($enable_plugins) {
34
        require Koha::Cache::Memory::Lite;
35
        my $enabled_plugins = Koha::Cache::Memory::Lite->get_from_cache('enabled_plugins');
36
37
        if ( !$enabled_plugins ) {
38
            require Koha::Config;
39
            my $config = Koha::Config->get_instance;
40
41
            # Database connection setup
42
            my $driver = $config->get('db_scheme') eq 'Pg' ? 'Pg' : 'mysql';
43
            my $dsn    = sprintf(
44
                'dbi:%s:database=%s;host=%s;port=%s',
45
                $driver,
46
                $config->get("database_test") || $config->get("database"),
47
                $config->get("hostname"),
48
                $config->get("port") || q{},
49
            );
50
            my $attr = { RaiseError => 1, PrintError => 1 };
51
            if ( $driver eq 'mysql' && ( $config->get("tls") // q{} ) eq 'yes' ) {
52
                $dsn .= sprintf(
53
                    ';mysql_ssl=1;mysql_ssl_client_key=%s;mysql_ssl_client_cert=%s;mysql_ssl_ca_file=%s',
54
                    $config->get('key'), $config->get('cert'), $config->get('ca'),
55
                );
56
                $attr->{mysql_enable_utf8} = 1;
57
            }
58
59
            require DBI;
60
            my $dbh = DBI->connect( $dsn, $config->get("user"), $config->get("pass"), $attr );
61
62
            if ($dbh) {
63
                my $tz = $config->timezone // q{};
64
                my @queries;
65
                push @queries, "SET NAMES 'utf8mb4'"            if $driver eq 'mysql';
66
                push @queries, qq{SET time_zone = "$tz"}        if $tz && $driver eq 'mysql' && $tz ne 'local';
67
                push @queries, qq{SET TIME ZONE = "$tz"}        if $tz && $driver eq 'Pg';
68
                push @queries, 'set client_encoding = \'UTF8\'' if $driver eq 'Pg';
69
                if ( $driver eq 'mysql' ) {
70
                    my $sql_mode =
71
                        ( $config->get('strict_sql_modes') || $ENV{KOHA_TESTING} || ( $ENV{_} // q{} ) =~ m{prove}smx )
72
                        ? 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
73
                        : 'IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
74
                    push @queries, qq{SET sql_mode = '$sql_mode'};
75
                }
76
77
                $dbh->do($_) for grep { $_ } @queries;
78
79
                # Retrieve enabled plugin classes
80
                my $sth = $dbh->prepare(
81
                    q{SELECT plugin_class FROM plugin_data WHERE plugin_key = ' __ENABLED__ ' AND plugin_value = 1});
82
                $sth->execute();
83
                my @plugin_classes = map { $_->[0] } @{ $sth->fetchall_arrayref() };
84
                $sth->finish();
85
                $dbh->disconnect();
86
87
                # Load and instantiate plugins
88
                $enabled_plugins = [];
89
                foreach my $plugin_class (@plugin_classes) {
90
                    next
91
                        if !Module::Load::Conditional::can_load(
92
                        modules => { $plugin_class => undef },
93
                        nocache => 1
94
                        );
95
                    if ( my $plugin = eval { $plugin_class->new() } ) {
96
                        push @{$enabled_plugins}, $plugin;
97
                    }
98
                }
99
100
                Koha::Cache::Memory::Lite->set_in_cache( 'enabled_plugins', $enabled_plugins );
101
            }
102
        }
103
    }
29
104
30
    if ( $ENV{'HTTP_USER_AGENT'} ) { # Only hit when plack is not enabled
105
    if ( $ENV{'HTTP_USER_AGENT'} ) {    # Only hit when plack is not enabled
31
106
32
        # Redefine multi_param if cgi version is < 4.08
107
        # Redefine multi_param if cgi version is < 4.08
33
        # Remove the "CGI::param called in list context" warning in this case
108
        # Remove the "CGI::param called in list context" warning in this case
34
- 

Return to bug 38384