Lines 24-29
Link Here
|
24 |
|
24 |
|
25 |
use Modern::Perl; |
25 |
use Modern::Perl; |
26 |
use CGI qw ( -utf8 ); |
26 |
use CGI qw ( -utf8 ); |
|
|
27 |
use Try::Tiny; |
28 |
use Array::Utils qw( array_minus ); |
27 |
use C4::Auth qw(get_template_and_user); |
29 |
use C4::Auth qw(get_template_and_user); |
28 |
use C4::Koha; |
30 |
use C4::Koha; |
29 |
use C4::Context; |
31 |
use C4::Context; |
Lines 65-82
if ( $op eq 'add_form' ) {
Link Here
|
65 |
|
67 |
|
66 |
my $additional_content = Koha::AdditionalContents->find($id); |
68 |
my $additional_content = Koha::AdditionalContents->find($id); |
67 |
my $translated_contents; |
69 |
my $translated_contents; |
68 |
if ( $additional_content ) { |
70 |
if ($additional_content) { |
69 |
$translated_contents = { |
71 |
$translated_contents = { map { $_->lang => $_ } $additional_content->translated_contents->as_list }; |
70 |
map { $_->lang => $_ } Koha::AdditionalContents->search( |
72 |
$category = $additional_content->category; |
71 |
{ |
|
|
72 |
category => $additional_content->category, |
73 |
code => $additional_content->code, |
74 |
location => $additional_content->location, |
75 |
branchcode => $additional_content->branchcode, |
76 |
} |
77 |
)->as_list |
78 |
}; |
79 |
$category = $additional_content->category; |
80 |
} |
73 |
} |
81 |
$template->param( |
74 |
$template->param( |
82 |
additional_content => $additional_content, |
75 |
additional_content => $additional_content, |
Lines 87-93
elsif ( $op eq 'add_validate' ) {
Link Here
|
87 |
my $location = $cgi->param('location'); |
80 |
my $location = $cgi->param('location'); |
88 |
my $code = $cgi->param('code'); |
81 |
my $code = $cgi->param('code'); |
89 |
my $branchcode = $cgi->param('branchcode') || undef; |
82 |
my $branchcode = $cgi->param('branchcode') || undef; |
90 |
my $idnew = $cgi->param('idnew'); |
|
|
91 |
|
83 |
|
92 |
my @lang = $cgi->multi_param('lang'); |
84 |
my @lang = $cgi->multi_param('lang'); |
93 |
|
85 |
|
Lines 95-195
elsif ( $op eq 'add_validate' ) {
Link Here
|
95 |
my $published_on = $cgi->param('published_on'); |
87 |
my $published_on = $cgi->param('published_on'); |
96 |
my $number = $cgi->param('number'); |
88 |
my $number = $cgi->param('number'); |
97 |
|
89 |
|
98 |
my $original_default = $idnew ? Koha::AdditionalContents->find($idnew) : undef; |
90 |
try { |
99 |
|
91 |
Koha::Database->new->schema->txn_do( |
100 |
my $success = 1; |
92 |
sub { |
101 |
for my $lang ( sort {$a ne 'default'} @lang ) { # Process 'default' first |
93 |
my $additional_content; |
102 |
my $title = $cgi->param( 'title_' . $lang ); |
94 |
my $params = { |
103 |
my $content = $cgi->param( 'content_' . $lang ); |
|
|
104 |
# Force a default record |
105 |
$content ||= '<!-- no_content -->' if $lang eq 'default'; |
106 |
|
107 |
my $additional_content = Koha::AdditionalContents->find( |
108 |
{ |
109 |
category => $category, |
110 |
code => $code, |
111 |
branchcode => $original_default ? $original_default->branchcode : $branchcode, |
112 |
lang => $lang, |
113 |
} |
114 |
); |
115 |
# Delete if title or content is empty |
116 |
if( $lang ne 'default' && !$title && !$content ) { |
117 |
if ( $additional_content ) { |
118 |
eval { $additional_content->delete }; |
119 |
unless ($@) { |
120 |
logaction('NEWS', 'DELETE' , undef, sprintf("%s|%s|%s|%s", $additional_content->code, $additional_content->title, $additional_content->lang, $additional_content->content)); |
121 |
} |
122 |
} |
123 |
next; |
124 |
} elsif ( $additional_content ) { |
125 |
my $updated; |
126 |
eval { |
127 |
$additional_content->set( |
128 |
{ |
129 |
category => $category, |
130 |
code => $code, |
131 |
location => $location, |
95 |
location => $location, |
132 |
branchcode => $branchcode, |
96 |
branchcode => $branchcode, |
133 |
title => $title, |
|
|
134 |
content => $content, |
135 |
lang => $lang, |
136 |
expirationdate => $expirationdate, |
97 |
expirationdate => $expirationdate, |
137 |
published_on => $published_on, |
98 |
published_on => $published_on, |
138 |
number => $number, |
99 |
number => $number, |
139 |
borrowernumber => $borrowernumber, |
100 |
borrowernumber => $borrowernumber, |
140 |
} |
101 |
}; |
141 |
); |
102 |
|
142 |
$updated = $additional_content->_result->get_dirty_columns; |
103 |
if ( $id ) { |
143 |
$additional_content->store; |
104 |
$additional_content = Koha::AdditionalContents->find($id); |
144 |
$id = $additional_content->idnew; |
105 |
$additional_content->set($params)->store; |
145 |
}; |
106 |
} else { |
146 |
if ($@) { |
107 |
$additional_content = Koha::AdditionalContent->new( |
147 |
$success = 0; |
108 |
{ |
148 |
push @messages, { type => 'error', code => 'error_on_update' }; |
109 |
category => $category, |
149 |
last; |
110 |
code => $code, |
150 |
} |
111 |
branchcode => $branchcode, |
151 |
|
112 |
%$params, |
152 |
logaction('NEWS', 'MODIFY' , undef, sprintf("%s|%s|%s|%s", $code, $title, $lang, $content)) |
113 |
} |
153 |
if C4::Context->preference("NewsLog") && $updated; |
114 |
)->store; |
154 |
} |
|
|
155 |
else { |
156 |
my $additional_content = Koha::AdditionalContent->new( |
157 |
{ |
158 |
category => $category, |
159 |
code => $code || 'tmp_code', |
160 |
location => $location, |
161 |
branchcode => $branchcode, |
162 |
title => $title, |
163 |
content => $content, |
164 |
lang => $lang, |
165 |
expirationdate => $expirationdate, |
166 |
published_on => $published_on, |
167 |
number => $number, |
168 |
borrowernumber => $borrowernumber, |
169 |
} |
115 |
} |
170 |
)->store; |
|
|
171 |
eval { |
172 |
$additional_content->store; |
173 |
unless ($code) { |
116 |
unless ($code) { |
174 |
$additional_content->discard_changes; |
117 |
$additional_content->discard_changes; |
175 |
$code = $category eq 'news' |
118 |
$code = |
176 |
? 'News_' . $additional_content->idnew |
119 |
$category eq 'news' |
177 |
: $location . '_' . $additional_content->idnew; |
120 |
? 'News_' . $additional_content->id |
|
|
121 |
: $location . '_' . $additional_content->id; |
178 |
$additional_content->code($code)->store; |
122 |
$additional_content->code($code)->store; |
179 |
$id = $additional_content->idnew; |
123 |
$id = $additional_content->id; |
180 |
} |
124 |
} |
181 |
}; |
125 |
my @translated_contents; |
182 |
if ($@) { |
126 |
my $existing_contents = $additional_content->translated_contents; |
183 |
$success = 0; |
127 |
my @seen_ids; |
184 |
push @messages, { type => 'error', code => 'error_on_insert' }; |
128 |
for my $lang (@lang) { |
185 |
last; |
129 |
my $id = $cgi->param( 'id_' . $lang ); |
186 |
} |
130 |
my $title = $cgi->param( 'title_' . $lang ); |
|
|
131 |
my $content = $cgi->param( 'content_' . $lang ); |
132 |
$content ||= '<!-- no_content -->' if $lang eq 'default'; |
133 |
|
134 |
next unless $title || $content; |
135 |
|
136 |
push @seen_ids, $id; |
137 |
push @translated_contents, |
138 |
{ |
139 |
title => $title, |
140 |
content => $content, |
141 |
lang => $lang, |
142 |
}; |
187 |
|
143 |
|
188 |
logaction('NEWS', 'ADD' , undef, sprintf("%s|%s|%s|%s", $code, $title, $lang, $content)) |
144 |
if ( C4::Context->preference("NewsLog") ) { |
189 |
if C4::Context->preference("NewsLog"); |
145 |
my $existing_content = $existing_contents->find($id); |
190 |
} |
146 |
if ( $existing_content ) { |
|
|
147 |
if ( $existing_content->title ne $title || $existing_content->content ne $content ) { |
148 |
logaction('NEWS', 'MODIFY' , undef, sprintf("%s|%s|%s|%s", $code, $title, $lang, $content)); |
149 |
} |
150 |
} else { |
151 |
logaction('NEWS', 'ADD' , undef, sprintf("%s|%s|%s|%s", $code, $title, $lang, $content)) |
152 |
} |
153 |
} |
154 |
} |
191 |
|
155 |
|
192 |
} |
156 |
if ( C4::Context->preference("NewsLog") ) { |
|
|
157 |
my @existing_ids = $existing_contents->get_column('id'); |
158 |
my @deleted_ids = array_minus( @existing_ids, @seen_ids ); |
159 |
for my $id ( @deleted_ids ) { |
160 |
my $c = $existing_contents->find($id); |
161 |
logaction('NEWS', 'DELETE' , undef, sprintf("%s|%s|%s", $code, $c->lang, $c->content)); |
162 |
} |
163 |
} |
164 |
|
165 |
$additional_content->translated_contents( \@translated_contents ); |
166 |
} |
167 |
); |
168 |
} catch { |
169 |
warn $_; |
170 |
if ( $id ) { |
171 |
push @messages, { type => 'error', code => 'error_on_update' }; |
172 |
} else { |
173 |
push @messages, { type => 'error', code => 'error_on_insert' }; |
174 |
} |
175 |
}; |
193 |
|
176 |
|
194 |
if( $redirect eq "just_save" ){ |
177 |
if( $redirect eq "just_save" ){ |
195 |
print $cgi->redirect("/cgi-bin/koha/tools/additional-contents.pl?op=add_form&id=$id&category=$category&editmode=$editmode&redirect=done"); |
178 |
print $cgi->redirect("/cgi-bin/koha/tools/additional-contents.pl?op=add_form&id=$id&category=$category&editmode=$editmode&redirect=done"); |
Lines 200-237
elsif ( $op eq 'add_validate' ) {
Link Here
|
200 |
} |
183 |
} |
201 |
elsif ( $op eq 'delete_confirmed' ) { |
184 |
elsif ( $op eq 'delete_confirmed' ) { |
202 |
my @ids = $cgi->multi_param('ids'); |
185 |
my @ids = $cgi->multi_param('ids'); |
203 |
my $deleted = eval { |
|
|
204 |
|
186 |
|
205 |
my $schema = Koha::Database->new->schema; |
187 |
try { |
206 |
$schema->txn_do( |
188 |
Koha::Database->new->schema->txn_do( |
207 |
sub { |
189 |
sub { |
208 |
my $contents = |
190 |
my $contents = |
209 |
Koha::AdditionalContents->search( { idnew => \@ids } ); |
191 |
Koha::AdditionalContents->search( { id => \@ids } ); |
210 |
|
192 |
|
211 |
while ( my $c = $contents->next ) { |
193 |
if ( C4::Context->preference("NewsLog") ) { |
212 |
Koha::AdditionalContents->search( { code => $c->code } )->delete; |
194 |
while ( my $c = $contents->next ) { |
213 |
if ( C4::Context->preference("NewsLog") ) { |
195 |
my $translated_contents = $c->translated_contents; |
214 |
logaction('NEWS', 'DELETE' , undef, sprintf("%s|%s|%s|%s", $c->code, $c->title, $c->lang, $c->content)); |
196 |
while ( my $translated_content = $translated_contents->next ) { |
|
|
197 |
logaction('NEWS', 'DELETE' , undef, sprintf("%s|%s|%s|%s", $c->code, $translated_content->lang, $translated_content->content)); |
198 |
} |
215 |
} |
199 |
} |
216 |
} |
200 |
} |
|
|
201 |
$contents->delete; |
217 |
} |
202 |
} |
218 |
); |
203 |
); |
219 |
}; |
|
|
220 |
|
221 |
if ( $@ or not $deleted ) { |
222 |
push @messages, { type => 'error', code => 'error_on_delete' }; |
223 |
} |
224 |
else { |
225 |
push @messages, { type => 'message', code => 'success_on_delete' }; |
204 |
push @messages, { type => 'message', code => 'success_on_delete' }; |
226 |
} |
205 |
} catch { |
|
|
206 |
warn $_; |
207 |
push @messages, { type => 'error', code => 'error_on_delete' }; |
208 |
}; |
227 |
|
209 |
|
228 |
$op = 'list'; |
210 |
$op = 'list'; |
229 |
} |
211 |
} |
230 |
|
212 |
|
231 |
if ( $op eq 'list' ) { |
213 |
if ( $op eq 'list' ) { |
232 |
my $additional_contents = Koha::AdditionalContents->search( |
214 |
my $additional_contents = Koha::AdditionalContents->search( |
233 |
{ category => $category, lang => 'default' }, |
215 |
{ category => $category, 'additional_contents_localizations.lang' => 'default' }, |
234 |
{ order_by => { -desc => 'published_on' } } |
216 |
{ order_by => { -desc => 'published_on' }, join => 'additional_contents_localizations' } |
235 |
); |
217 |
); |
236 |
$template->param( additional_contents => $additional_contents ); |
218 |
$template->param( additional_contents => $additional_contents ); |
237 |
} |
219 |
} |
Lines 267-272
$template->param(
Link Here
|
267 |
wysiwyg => $wysiwyg, |
249 |
wysiwyg => $wysiwyg, |
268 |
editmode => $editmode, |
250 |
editmode => $editmode, |
269 |
languages => \@languages, |
251 |
languages => \@languages, |
|
|
252 |
messages => \@messages, |
270 |
); |
253 |
); |
271 |
|
254 |
|
272 |
output_html_with_http_headers $cgi, $cookie, $template->output; |
255 |
output_html_with_http_headers $cgi, $cookie, $template->output; |