|
Lines 22-30
package Koha::Util::Dbrev;
Link Here
|
| 22 |
|
22 |
|
| 23 |
use Modern::Perl; |
23 |
use Modern::Perl; |
| 24 |
|
24 |
|
| 25 |
use Koha::BiblioFrameworks; |
25 |
use C4::Context; |
| 26 |
use Koha::Caches; |
26 |
use Koha::Caches; |
| 27 |
use Koha::MarcSubfieldStructures; |
|
|
| 28 |
|
27 |
|
| 29 |
=head1 NAME |
28 |
=head1 NAME |
| 30 |
|
29 |
|
|
Lines 54-72
The routines in this modules are called in OO style as class methods.
Link Here
|
| 54 |
sub sync_kohafield { |
53 |
sub sync_kohafield { |
| 55 |
my ( $class ) = @_; |
54 |
my ( $class ) = @_; |
| 56 |
|
55 |
|
|
|
56 |
my $dbh = C4::Context->dbh; |
| 57 |
|
| 57 |
# Clear the destination frameworks first |
58 |
# Clear the destination frameworks first |
| 58 |
Koha::MarcSubfieldStructures->search({ frameworkcode => { '>', q{} }, kohafield => { '>', q{} } })->update({ kohafield => undef }); |
59 |
$dbh->do(q| |
|
|
60 |
UPDATE marc_subfield_structure |
| 61 |
SET kohafield = NULL |
| 62 |
WHERE frameworkcode > '' |
| 63 |
AND Kohafield > '' |
| 64 |
|); |
| 59 |
|
65 |
|
| 60 |
# Now copy from Default |
66 |
# Now copy from Default |
| 61 |
my $rs = Koha::MarcSubfieldStructures->search({ frameworkcode => q{}, kohafield => { '>', q{} } }); |
67 |
my $msss = $dbh->selectall_arrayref(q| |
| 62 |
while( my $rec = $rs->next ) { |
68 |
SELECT kohafield, tagfield, tagsubfield |
| 63 |
Koha::MarcSubfieldStructures->search({ frameworkcode => { '>', q{} }, tagfield => $rec->tagfield, tagsubfield => $rec->tagsubfield })->update({ kohafield => $rec->kohafield }); |
69 |
FROM marc_subfield_structure |
|
|
70 |
WHERE frameworkcode = '' |
| 71 |
AND kohafield > '' |
| 72 |
|, { Slice => {} }); |
| 73 |
my $sth = $dbh->prepare(q| |
| 74 |
UPDATE marc_subfield_structure |
| 75 |
SET kohafield = ? |
| 76 |
WHERE frameworkcode > '' |
| 77 |
AND tagfield = ? |
| 78 |
AND tagsubfield = ? |
| 79 |
|); |
| 80 |
for my $mss ( @$msss ) { |
| 81 |
$sth->execute( $mss->{kohafield}, $mss->{tagfield}, $mss->{tagsubfield} ); |
| 64 |
} |
82 |
} |
| 65 |
|
83 |
|
|
|
84 |
my @frameworkcodes = $dbh->selectall_arrayref(q| |
| 66 |
# Clear the cache |
85 |
# Clear the cache |
| 67 |
my @fw = Koha::BiblioFrameworks->search({ frameworkcode => { '>', q{} } })->get_column('frameworkcode'); |
86 |
SELECT frameworkcode FROM biblio_framework WHERE frameworkcode > '' |
| 68 |
foreach( @fw ) { |
87 |
|); |
| 69 |
Koha::Caches->get_instance->clear_from_cache( "MarcSubfieldStructure-$_" ); |
88 |
for my $frameworkcode ( @frameworkcodes ) { |
|
|
89 |
Koha::Caches->get_instance->clear_from_cache( "MarcSubfieldStructure-$frameworkcode" ); |
| 70 |
} |
90 |
} |
| 71 |
Koha::Caches->get_instance->clear_from_cache("default_value_for_mod_marc-"); |
91 |
Koha::Caches->get_instance->clear_from_cache("default_value_for_mod_marc-"); |
| 72 |
} |
92 |
} |
|
Lines 84-112
sub sync_kohafield {
Link Here
|
| 84 |
=cut |
104 |
=cut |
| 85 |
|
105 |
|
| 86 |
sub get_kohafield_exceptions { |
106 |
sub get_kohafield_exceptions { |
| 87 |
my ( $class, $params ) = @_; |
107 |
my ( $class ) = @_; |
| 88 |
|
108 |
|
| 89 |
# Too bad that DBIx is not very helpful here |
109 |
my $dbh = C4::Context->dbh; |
| 90 |
my $default = Koha::MarcSubfieldStructures->search({ |
110 |
my $msss = $dbh->selectall_arrayref(q| |
| 91 |
frameworkcode => q{}, |
111 |
SELECT kohafield, tagfield, tagsubfield |
| 92 |
kohafield => { '>' => '' }, |
112 |
FROM marc_subfield_structure |
| 93 |
}); |
113 |
WHERE frameworkcode != '' |
| 94 |
my $other = Koha::MarcSubfieldStructures->search({ |
114 |
|, { Slice => {} }); |
| 95 |
frameworkcode => { '!=' => q{} }, |
115 |
|
| 96 |
}, { order_by => { -asc => [ qw/tagfield tagsubfield/ ] } }); |
116 |
|
| 97 |
|
117 |
my $sth = $dbh->prepare(q| |
| 98 |
# Compare |
118 |
SELECT kohafield |
| 99 |
my @return; |
119 |
FROM marc_subfield_structure |
| 100 |
while( my $rec = $other->next ) { |
120 |
WHERE frameworkcode = '' |
| 101 |
my @tags = ( $rec->tagfield, $rec->tagsubfield ); |
121 |
AND tagfield = ? |
| 102 |
my $defa = $default->find( q{}, @tags ); |
122 |
AND tagsubfield = ? |
| 103 |
if( $rec->kohafield ) { |
123 |
|); |
| 104 |
push @return, [ $rec->frameworkcode, @tags, $rec->kohafield ] if !$defa || !$defa->kohafield || $defa->kohafield ne $rec->kohafield; |
124 |
|
|
|
125 |
my @exceptions; |
| 126 |
for my $mss ( @$msss ) { |
| 127 |
$sth->execute($mss->{tagfield}, $mss->{tagsubfield} ); |
| 128 |
my ( $default_kohafield ) = $sth->fetchrow_array(); |
| 129 |
if( $mss->{kohafield} ) { |
| 130 |
push @exceptions, [ $mss->{frameworkcode}, $mss->{tagfield}, $mss->{tagsubfield}, $mss->{kohafield} ] if not $default_kohafield or $default_kohafield ne $mss->{kohafield}; |
| 105 |
} else { |
131 |
} else { |
| 106 |
push @return, [ $rec->frameworkcode, @tags, q{} ] if $defa && $defa->kohafield; |
132 |
push @exceptions, [ $mss->{frameworkcode}, $mss->{tagfield}, $mss->{tagsubfield}, q{} ] if $default_kohafield; |
| 107 |
} |
133 |
} |
| 108 |
} |
134 |
} |
| 109 |
return \@return; |
135 |
return \@exceptions; |
| 110 |
} |
136 |
} |
| 111 |
|
137 |
|
| 112 |
=head1 AUTHOR |
138 |
=head1 AUTHOR |
| 113 |
- |
|
|