Bugzilla – Attachment 23206 Details for
Bug 11319
Marc modification templates improvements
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 11319: POC Marc modification templates improvements
Bug-11319-POC-Marc-modification-templates-improvem.patch (text/plain), 20.25 KB, created by
Jonathan Druart
on 2013-11-28 11:38:36 UTC
(
hide
)
Description:
Bug 11319: POC Marc modification templates improvements
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2013-11-28 11:38:36 UTC
Size:
20.25 KB
patch
obsolete
>From 1a5416ba9ebef98bdc9dcbbaeb4739b5aa061541 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Thu, 28 Nov 2013 12:34:41 +0100 >Subject: [PATCH] Bug 11319: POC Marc modification templates improvements > >This patch is a POC. > >Please give me your feedback on the implementation of the >fields/subfields split. > >This patch only implements the delete and the read routines. >See new UT at the end of t/SimpleMARC.t >--- > C4/MarcModificationTemplates.pm | 4 +- > Koha/SimpleMARC.pm | 102 +++++++++++----- > installer/data/mysql/updatedatabase.pl | 12 ++ > .../modules/tools/marc_modification_templates.tt | 8 +- > t/SimpleMARC.t | 123 +++++++++++++------- > tools/marc_modification_templates.pl | 2 +- > 6 files changed, 174 insertions(+), 77 deletions(-) > >diff --git a/C4/MarcModificationTemplates.pm b/C4/MarcModificationTemplates.pm >index 50b77df..55f8e0f 100644 >--- a/C4/MarcModificationTemplates.pm >+++ b/C4/MarcModificationTemplates.pm >@@ -587,8 +587,8 @@ sub ModifyRecordWithTemplate { > when ( /^move_field$/ ) { > move_field( @params ); > } >- when ( /^delete_field$/ ) { >- delete_field( @params ); >+ when ( /^delete$/ ) { >+ Koha::SimpleMarc::delete( @params ); > } > } > } >diff --git a/Koha/SimpleMARC.pm b/Koha/SimpleMARC.pm >index 2195143..ad42ddf 100644 >--- a/Koha/SimpleMARC.pm >+++ b/Koha/SimpleMARC.pm >@@ -16,11 +16,11 @@ our %EXPORT_TAGS = ( 'all' => [ qw( > our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); > > our @EXPORT = qw( >- read_field >+ read > update_field > copy_field > move_field >- delete_field >+ delete > field_exists > field_equals > ); >@@ -77,7 +77,7 @@ sub copy_field { > > if ( ! ( $record && $fromFieldName && $toFieldName ) ) { return; } > >- my @values = read_field( $record, $fromFieldName, $fromSubfieldName ); >+ my @values = Koha::SimpleMARC::read( $record, $fromFieldName, $fromSubfieldName ); > @values = ( $values[$n-1] ) if ( $n ); > > if ( $regex and $regex->{search} ) { >@@ -180,24 +180,55 @@ sub update_field { > > =cut > >-sub read_field { >- my ( $record, $fieldName, $subfieldName, $n ) = @_; >+sub read { >+ my ( $record, $fieldName, $subfieldName, $n ) = @_; > >- my @fields = $record->field( $fieldName ); >+ if ( not $subfieldName or $subfieldName eq '' ) { >+ _read_field( $record, $fieldName, $n ); >+ } else { >+ _read_subfield( $record, $fieldName, $subfieldName, $n ); >+ } > >- return map { $_->data() } @fields unless $subfieldName; >+} > >- my @subfields; >- foreach my $field ( @fields ) { >- my @sf = $field->subfield( $subfieldName ); >- push( @subfields, @sf ); >- } >+sub _read_field { >+ my ( $record, $fieldName, $n ) = @_; >+ >+ my @fields = $record->field( $fieldName ); >+ >+ return unless @fields; >+ >+ return map { $_->data() } @fields >+ if $fieldName < 10; >+ >+ my @values; >+ foreach my $field ( @fields ) { >+ my @sf = $field->subfields; >+ push( @values, @sf ); >+ } >+ >+ return $n >+ ? $values[$n-1] # I don't think it is what we want here >+ : @values; > >- if ( $n ) { >- return $subfields[$n-1]; >- } else { >- return @subfields; >- } >+} >+ >+sub _read_subfield { >+ my ( $record, $fieldName, $subfieldName, $n ) = @_; >+ >+ my @fields = $record->field( $fieldName ); >+ >+ return unless @fields; >+ >+ my @values; >+ foreach my $field ( @fields ) { >+ my @sf = $field->subfield( $subfieldName ); >+ push( @values, @sf ); >+ } >+ >+ return $n >+ ? $values[$n-1] >+ : @values; > } > > =head2 field_exists >@@ -243,7 +274,7 @@ sub field_equals { > > if ( ! $record ) { return; } > >- my @field_values = read_field( $record, $fieldName, $subfieldName, $n ); >+ my @field_values = Koha::SimpleMARC::read( $record, $fieldName, $subfieldName, $n ); > my $field_value = $field_values[$n-1]; > > if ( $regex ) { >@@ -269,9 +300,17 @@ sub field_equals { > sub move_field { > my ( $record, $fromFieldName, $fromSubfieldName, $toFieldName, $toSubfieldName, $regex, $n ) = @_; > copy_field( $record, $fromFieldName, $fromSubfieldName, $toFieldName, $toSubfieldName, $regex, $n , 'dont_erase' ); >- delete_field( $record, $fromFieldName, $fromSubfieldName, $n ); >+ Koha::SimpleMARC::delete( $record, $fromFieldName, $fromSubfieldName, $n ); > } > >+sub delete { >+ my ( $record, $fieldName, $subfieldName, $n ) = @_; >+ if ( not $subfieldName or $subfieldName eq '' ) { >+ _delete_field( $record, $fieldName, $n ); >+ } else { >+ _delete_subfield( $record, $fieldName, $subfieldName, $n ); >+ } >+} > =head2 delete_field > > delete_field( $record, $fieldName[, $subfieldName [, $n ] ] ); >@@ -283,22 +322,27 @@ sub move_field { > > =cut > >-sub delete_field { >- my ( $record, $fieldName, $subfieldName, $n ) = @_; >+sub _delete_field { >+ my ( $record, $fieldName, $n ) = @_; > >- my @fields = $record->field( $fieldName ); >+ my @fields = $record->field( $fieldName ); > >- @fields = ( $fields[$n-1] ) if ( $n ); >- >- if ( @fields && !$subfieldName ) { >+ @fields = ( $fields[$n-1] ) if ( $n ); > foreach my $field ( @fields ) { >- $record->delete_field( $field ); >+ $record->delete_field( $field ); > } >- } elsif ( @fields && $subfieldName ) { >+} >+ >+sub _delete_subfield { >+ my ( $record, $fieldName, $subfieldName, $n ) = @_; >+ >+ my @fields = $record->field( $fieldName ); >+ >+ @fields = ( $fields[$n-1] ) if ( $n ); >+ > foreach my $field ( @fields ) { >- $field->delete_subfield( code => $subfieldName ); >+ $field->delete_subfield( code => $subfieldName ); > } >- } > } > > 1; >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index a9bfbbf..d01150c 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -7778,6 +7778,18 @@ if(CheckVersion($DBversion)) { > SetVersion($DBversion); > } > >+ >+ >+$DBversion = "3.15.00.XXX"; >+if(CheckVersion($DBversion)) { >+ $dbh->do(q| >+ ALTER TABLE marc_modification_template_actions >+ CHANGE action action VARCHAR(16) NOT NULL; >+ |); >+ print "Upgrade to $DBversion done (Bug 11275: alter deleteditems.materials from varchar(10) to text)\n"; >+ SetVersion($DBversion); >+} >+ > =head1 FUNCTIONS > > =head2 TableExists($table) >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/marc_modification_templates.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/marc_modification_templates.tt >index 569b7f8..85a9e1c 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/marc_modification_templates.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/marc_modification_templates.tt >@@ -24,7 +24,7 @@ function onActionChange(selectObj) { > var action = selectObj.options[idx].value; > > switch( action ) { >- case 'delete_field': >+ case 'delete': > show('field_number_block'); > hide('with_value_block'); > hide('to_field_block'); >@@ -198,7 +198,7 @@ function editAction( mmta_id, ordering, action, field_number, from_field, from_s > function cancelEditAction() { > document.getElementById('mmta_id').value = ''; > >- setSelectByValue( 'action', 'delete_field' ); >+ setSelectByValue( 'action', 'delete' ); > document.getElementById('action').onchange(); > > document.getElementById('from_field').value = ''; >@@ -323,7 +323,7 @@ function setSelectByValue( selectId, value ) { > > <td>[% ActionsLoo.ordering %]</td> > <td> >- [% IF ( ActionsLoo.action_delete_field ) %] Delete [% END %] >+ [% IF ( ActionsLoo.action_delete ) %] Delete [% END %] > [% IF ( ActionsLoo.action_update_field ) %] Update [% END %] > [% IF ( ActionsLoo.action_move_field ) %] Move [% END %] > [% IF ( ActionsLoo.action_copy_field ) %] Copy [% END %] >@@ -402,7 +402,7 @@ function setSelectByValue( selectId, value ) { > <legend id="modaction_legend">Add a new action</legend> > > <select name="action" id="action" onchange="onActionChange(this);"> >- <option value="delete_field">Delete</option> >+ <option value="delete">Delete</option> > <option value="update_field">Add/Update</option> > <option value="move_field">Move</option> > <option value="copy_field">Copy</option> >diff --git a/t/SimpleMARC.t b/t/SimpleMARC.t >index 2969bd2..14bef3e 100644 >--- a/t/SimpleMARC.t >+++ b/t/SimpleMARC.t >@@ -1,6 +1,6 @@ > use Modern::Perl; > >-use Test::More tests => 37; >+use Test::More tests => 41; > > use_ok("MARC::Field"); > use_ok("MARC::Record"); >@@ -53,59 +53,59 @@ $record->append_fields( > > is( field_exists( $record, '650', 'a'), 'Computer programming.', '650$a exists, field_exists returns the first one' ); > >-# read_field >-my @fields_650a = read_field( $record, '650', 'a'); >+# Koha::SimpleMARC::read >+my @fields_650a = Koha::SimpleMARC::read( $record, '650', 'a'); > is( $fields_650a[0], 'Computer programming.', 'first 650$a' ); > is( $fields_650a[1], 'Computer algorithms.', 'second 650$a' ); >-is( read_field( $record, '650', 'a', 1 ), 'Computer programming.', 'first 650$a bis' ); >-is( read_field( $record, '650', 'a', 2 ), 'Computer algorithms.', 'second 650$a bis' ); >-is( read_field( $record, '650', 'a', 3 ), undef, 'There is no 3 650$a' ); >+is( Koha::SimpleMARC::read( $record, '650', 'a', 1 ), 'Computer programming.', 'first 650$a bis' ); >+is( Koha::SimpleMARC::read( $record, '650', 'a', 2 ), 'Computer algorithms.', 'second 650$a bis' ); >+is( Koha::SimpleMARC::read( $record, '650', 'a', 3 ), undef, 'There is no 3 650$a' ); > > # copy_field > copy_field( $record, '245', 'a', '246', 'a' ); >-is_deeply( read_field( $record, '245', 'a' ), 'The art of computer programming', 'After copy 245$a still exists' ); >-is_deeply( read_field( $record, '246', 'a' ), 'The art of computer programming', '246$a is a new field' ); >-delete_field( $record, '246' ); >+is_deeply( Koha::SimpleMARC::read( $record, '245', 'a' ), 'The art of computer programming', 'After copy 245$a still exists' ); >+is_deeply( Koha::SimpleMARC::read( $record, '246', 'a' ), 'The art of computer programming', '246$a is a new field' ); >+Koha::SimpleMARC::delete( $record, '246' ); > is( field_exists( $record, '246', 'a', '246$a does not exist anymore' ), undef ); > > copy_field( $record, '650', 'a', '651', 'a' ); >-my @fields_651a = read_field( $record, '651', 'a' ); >+my @fields_651a = Koha::SimpleMARC::read( $record, '651', 'a' ); > is_deeply( \@fields_651a, ['Computer programming.', 'Computer algorithms.'], 'Copy multivalued field' ); >-delete_field( $record, '651' ); >+Koha::SimpleMARC::delete( $record, '651' ); > > copy_field( $record, '650', 'a', '651', 'a', undef, 1 ); >-@fields_651a = read_field( $record, '651', 'a' ); >-is_deeply( read_field( $record, '651', 'a' ), 'Computer programming.', 'Copy first field 650$a' ); >-delete_field( $record, '651' ); >+@fields_651a = Koha::SimpleMARC::read( $record, '651', 'a' ); >+is_deeply( Koha::SimpleMARC::read( $record, '651', 'a' ), 'Computer programming.', 'Copy first field 650$a' ); >+Koha::SimpleMARC::delete( $record, '651' ); > > copy_field( $record, '650', 'a', '651', 'a', undef, 2 ); >-@fields_651a = read_field( $record, '651', 'a' ); >-is_deeply( read_field( $record, '651', 'a' ), 'Computer algorithms.', 'Copy second field 650$a' ); >-delete_field( $record, '651' ); >+@fields_651a = Koha::SimpleMARC::read( $record, '651', 'a' ); >+is_deeply( Koha::SimpleMARC::read( $record, '651', 'a' ), 'Computer algorithms.', 'Copy second field 650$a' ); >+Koha::SimpleMARC::delete( $record, '651' ); > > copy_field( $record, '650', 'a', '651', 'a', { search => 'Computer', replace => 'The art of' } ); >-@fields_651a = read_field( $record, '651', 'a' ); >+@fields_651a = Koha::SimpleMARC::read( $record, '651', 'a' ); > is_deeply( \@fields_651a, ['The art of programming.', 'The art of algorithms.'], 'Copy field using regex' ); > > copy_field( $record, '650', 'a', '651', 'a', { search => 'Computer', replace => 'The mistake of' } ); >-@fields_651a = read_field( $record, '651', 'a' ); >+@fields_651a = Koha::SimpleMARC::read( $record, '651', 'a' ); > is_deeply( \@fields_651a, ['The mistake of programming.', 'The mistake of algorithms.'], 'Copy fields using regex on existing fields' ); >-delete_field( $record, '651' ); >+Koha::SimpleMARC::delete( $record, '651' ); > > copy_field( $record, '650', 'a', '651', 'a', { search => 'Computer', replace => 'The art of' } ); > copy_field( $record, '650', 'a', '651', 'a', { search => 'Computer', replace => 'The mistake of' }, 1, "dont_erase" ); >-@fields_651a = read_field( $record, '651', 'a' ); >+@fields_651a = Koha::SimpleMARC::read( $record, '651', 'a' ); > is_deeply( \@fields_651a, [ > 'The art of programming.', > 'The mistake of programming.', > 'The art of algorithms.', > 'The mistake of programming.' > ], 'Copy first field using regex on existing fields without erase existing values' ); >-delete_field( $record, '651' ); >+Koha::SimpleMARC::delete( $record, '651' ); > > copy_field( $record, '650', 'a', '651', 'a', { search => 'Computer', replace => 'The art of' } ); > copy_field( $record, '650', 'a', '651', 'a', { search => 'Computer', replace => 'The mistake of' }, undef , "dont_erase" ); >-@fields_651a = read_field( $record, '651', 'a' ); >+@fields_651a = Koha::SimpleMARC::read( $record, '651', 'a' ); > is_deeply( \@fields_651a, [ > 'The art of programming.', > 'The mistake of programming.', >@@ -114,33 +114,33 @@ is_deeply( \@fields_651a, [ > 'The mistake of programming.', > 'The mistake of algorithms.' > ], 'Copy fields using regex on existing fields without erase existing values' ); >-delete_field( $record, '651' ); >+Koha::SimpleMARC::delete( $record, '651' ); > > # Copy with regex modifiers > copy_field( $record, '650', 'a', '652', 'a', { search => 'o', replace => 'foo' } ); >-my @fields_652a = read_field( $record, '652', 'a' ); >+my @fields_652a = Koha::SimpleMARC::read( $record, '652', 'a' ); > is_deeply( \@fields_652a, ['Cfoomputer programming.', 'Cfoomputer algorithms.'], 'Copy field using regex' ); > > copy_field( $record, '650', 'a', '653', 'a', { search => 'o', replace => 'foo', modifiers => 'g' } ); >-my @fields_653a = read_field( $record, '653', 'a' ); >+my @fields_653a = Koha::SimpleMARC::read( $record, '653', 'a' ); > is_deeply( \@fields_653a, ['Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.'], 'Copy field using regex' ); > > copy_field( $record, '650', 'a', '654', 'a', { search => 'O', replace => 'foo', modifiers => 'i' } ); >-my @fields_654a = read_field( $record, '654', 'a' ); >+my @fields_654a = Koha::SimpleMARC::read( $record, '654', 'a' ); > is_deeply( \@fields_654a, ['Cfoomputer programming.', 'Cfoomputer algorithms.'], 'Copy field using regex' ); > > copy_field( $record, '650', 'a', '655', 'a', { search => 'O', replace => 'foo', modifiers => 'gi' } ); >-my @fields_655a = read_field( $record, '655', 'a' ); >+my @fields_655a = Koha::SimpleMARC::read( $record, '655', 'a' ); > is_deeply( \@fields_655a, ['Cfoomputer prfoogramming.', 'Cfoomputer algfoorithms.'], 'Copy field using regex' ); > > # update_field > update_field( $record, '952', 'p', undef, '3010023918' ); >-is_deeply( read_field( $record, '952', 'p' ), '3010023918', 'update existing subfield 952$p' ); >-delete_field( $record, '952' ); >+is_deeply( Koha::SimpleMARC::read( $record, '952', 'p' ), '3010023918', 'update existing subfield 952$p' ); >+Koha::SimpleMARC::delete( $record, '952' ); > update_field( $record, '952', 'p', undef, '3010023918' ); > update_field( $record, '952', 'y', undef, 'BK' ); >-is_deeply( read_field( $record, '952', 'p' ), '3010023918', 'create subfield 952$p' ); >-is_deeply( read_field( $record, '952', 'y' ), 'BK', 'create subfield 952$k on existing 952 field' ); >+is_deeply( Koha::SimpleMARC::read( $record, '952', 'p' ), '3010023918', 'create subfield 952$p' ); >+is_deeply( Koha::SimpleMARC::read( $record, '952', 'y' ), 'BK', 'create subfield 952$k on existing 952 field' ); > $record->append_fields( > MARC::Field->new( > 952, ' ', ' ', >@@ -149,11 +149,11 @@ $record->append_fields( > ), > ); > update_field( $record, '952', 'p', undef, '3010023919' ); >-my @fields_952p = read_field( $record, '952', 'p' ); >+my @fields_952p = Koha::SimpleMARC::read( $record, '952', 'p' ); > is_deeply( \@fields_952p, ['3010023919', '3010023919'], 'update all subfields 952$p with the same value' ); > > update_field( $record, '952', 'p', undef, ('3010023917', '3010023918') ); >-@fields_952p = read_field( $record, '952', 'p' ); >+@fields_952p = Koha::SimpleMARC::read( $record, '952', 'p' ); > is_deeply( \@fields_952p, ['3010023917', '3010023918'], 'update all subfields 952$p with the different values' ); > > # move_field >@@ -167,18 +167,18 @@ $record->append_fields( > ), > ); > copy_field( $record, '952', 'd', '952', 'd' ); >-@fields_952d = read_field( $record, '952', 'd' ); >+@fields_952d = Koha::SimpleMARC::read( $record, '952', 'd' ); > is_deeply( \@fields_952d, ['2001-06-25', '2001-06-25'], 'copy 952$d into others 952 field' ); > > move_field( $record, '952', 'c', '954', 'c' ); >-@fields_952c = read_field( $record, '952', 'c' ); >-@fields_954c = read_field( $record, '954', 'c' ); >+@fields_952c = Koha::SimpleMARC::read( $record, '952', 'c' ); >+@fields_954c = Koha::SimpleMARC::read( $record, '954', 'c' ); > is_deeply( \@fields_952c, [], 'The 952$c has moved' ); > is_deeply( \@fields_954c, ['GEN'], 'Now 954$c exists' ); > > move_field( $record, '952', 'p', '954', 'p', undef, 1 ); # Move the first field >-@fields_952p = read_field( $record, '952', 'p' ); >-@fields_954p = read_field( $record, '954', 'p' ); >+@fields_952p = Koha::SimpleMARC::read( $record, '952', 'p' ); >+@fields_954p = Koha::SimpleMARC::read( $record, '954', 'p' ); > is_deeply( \@fields_952p, ['3010023917'], 'One of 952$p has moved' ); > is_deeply( \@fields_954p, ['3010023917'], 'Now 954$p exists' ); > >@@ -192,8 +192,49 @@ $record->append_fields( > ); > > move_field( $record, '952', 'p', '954', 'p' ); # Move all field >-@fields_952p = read_field( $record, '952', 'p' ); >-@fields_954p = read_field( $record, '954', 'p' ); >+@fields_952p = Koha::SimpleMARC::read( $record, '952', 'p' ); >+@fields_954p = Koha::SimpleMARC::read( $record, '954', 'p' ); > is_deeply( \@fields_952p, [], 'All 952$p have moved' ); > is_deeply( \@fields_954p, ['3010023917', '3010023917'], 'Now 2 954$p exist' ); > >+# delete >+$record = new_record; >+Koha::SimpleMARC::delete( $record, '952' ); >+my @fields_952 = Koha::SimpleMARC::read( $record, '952' ); >+is_deeply( \@fields_952, [], 'Delete all 952, 1 deleted' ); >+ >+$record = new_record; >+$record->append_fields( >+ MARC::Field->new( >+ 952, ' ', ' ', >+ p => '3010023917', >+ y => 'BK', >+ ), >+); >+Koha::SimpleMARC::delete( $record, '952' ); >+@fields_952 = Koha::SimpleMARC::read( $record, '952' ); >+is_deeply( \@fields_952, [], 'Delete all 952, 2 deleted' ); >+ >+$record = new_record; >+$record->append_fields( >+ MARC::Field->new( >+ 952, ' ', ' ', >+ p => '3010023917', >+ y => 'BK', >+ ), >+); >+Koha::SimpleMARC::delete( $record, '952', 'p', 1 ); >+@fields_952p = Koha::SimpleMARC::read( $record, '952', 'p' ); >+is_deeply( \@fields_952p, ['3010023917'], 'Delete first 952$p' ); >+ >+$record = new_record; >+$record->append_fields( >+ MARC::Field->new( >+ 952, ' ', ' ', >+ p => '3010023917', >+ y => 'BK', >+ ), >+); >+Koha::SimpleMARC::delete( $record, '952', 'p' ); >+@fields_952p = Koha::SimpleMARC::read( $record, '952', 'p' ); >+is_deeply( \@fields_952p, [], 'Delete all 952$p' ); >diff --git a/tools/marc_modification_templates.pl b/tools/marc_modification_templates.pl >index 4f9323f..d42d837 100755 >--- a/tools/marc_modification_templates.pl >+++ b/tools/marc_modification_templates.pl >@@ -120,7 +120,7 @@ unless ( $template_id ) { > > my @actions = GetModificationTemplateActions( $template_id ); > foreach my $action ( @actions ) { >- $action->{'action_delete_field'} = ( $action->{'action'} eq 'delete_field' ); >+ $action->{'action_delete'} = ( $action->{'action'} eq 'delete' ); > $action->{'action_update_field'} = ( $action->{'action'} eq 'update_field' ); > $action->{'action_move_field'} = ( $action->{'action'} eq 'move_field' ); > $action->{'action_copy_field'} = ( $action->{'action'} eq 'copy_field' ); >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 11319
:
23206
|
23414
|
23415
|
23416
|
23417
|
23418
|
23419
|
24650
|
25751
|
25752
|
25753
|
25754
|
25755
|
28988
|
28989
|
28990
|
28991
|
28992
|
29497
|
29498
|
29499
|
29500
|
29501
|
31343
|
33029
|
33030
|
33038
|
33039
|
33040
|
33041
|
33042
|
33043
|
33044