Bug 10212: Columns configuration for tables
[koha.git] / C4 / Utils / DataTables / ColumnsSettings.pm
1 package C4::Utils::DataTables::ColumnsSettings;
2
3 use Modern::Perl;
4 use List::Util qw( first );
5 use YAML;
6 use C4::Context;
7 use Koha::Database;
8
9 sub get_yaml {
10     my $yml_path =
11       C4::Context->config('intranetdir') . '/admin/columns_settings.yml';
12     my $yaml = eval { YAML::LoadFile($yml_path) };
13     warn
14 "ERROR: the yaml file for DT::ColumnsSettings is not correctly formated: $@"
15       if $@;
16     return $yaml;
17 }
18
19 sub get_columns {
20     my ( $module, $page, $tablename ) = @_;
21
22     my $list = get_yaml;
23
24     my $schema = Koha::Database->new->schema;
25
26     my $rs = $schema->resultset('ColumnsSetting')->search(
27         {
28             module    => $module,
29             page      => $page,
30             tablename => $tablename,
31         }
32     );
33
34     while ( my $c = $rs->next ) {
35         my $column = first { $c->columnname eq $_->{columnname} }
36         @{ $list->{modules}{ $c->module }{ $c->page }{ $c->tablename } };
37         $column->{is_hidden}         = $c->is_hidden;
38         $column->{cannot_be_toggled} = $c->cannot_be_toggled;
39     }
40
41     return $list->{modules}{$module}{$page}{$tablename} || [];
42 }
43
44 sub get_modules {
45     my $list = get_yaml;
46
47     my $schema = Koha::Database->new->schema;
48     my $rs     = $schema->resultset('ColumnsSetting')->search;
49
50     while ( my $c = $rs->next ) {
51         my $column = first { $c->columnname eq $_->{columnname} }
52         @{ $list->{modules}{ $c->module }{ $c->page }{ $c->tablename } };
53         $column->{is_hidden}         = $c->is_hidden;
54         $column->{cannot_be_toggled} = $c->cannot_be_toggled;
55     }
56
57     return $list->{modules};
58 }
59
60 sub update_columns {
61     my ($params) = @_;
62     my $columns = $params->{columns};
63
64     my $schema = Koha::Database->new->schema;
65
66     for my $c (@$columns) {
67         $c->{is_hidden}         //= 0;
68         $c->{cannot_be_toggled} //= 0;
69
70         my $column = $schema->resultset('ColumnsSetting')->search(
71             {
72                 module     => $c->{module},
73                 page       => $c->{page},
74                 tablename  => $c->{tablename},
75                 columnname => $c->{columnname},
76             }
77         );
78         if ( $column->count ) {
79             $column = $column->first;
80             $column->update(
81                 {
82                     module            => $c->{module},
83                     page              => $c->{page},
84                     tablename         => $c->{tablename},
85                     columnname        => $c->{columnname},
86                     is_hidden         => $c->{is_hidden},
87                     cannot_be_toggled => $c->{cannot_be_toggled},
88                 }
89             );
90         }
91         else {
92             $schema->resultset('ColumnsSetting')->create(
93                 {
94                     module            => $c->{module},
95                     page              => $c->{page},
96                     tablename         => $c->{tablename},
97                     columnname        => $c->{columnname},
98                     is_hidden         => $c->{is_hidden},
99                     cannot_be_toggled => $c->{cannot_be_toggled},
100                 }
101             );
102         }
103     }
104 }
105
106 1;