DBIx-Class-I18NColumns
view release on metacpan or search on metacpan
lib/DBIx/Class/I18NColumns.pm view on Meta::CPAN
Overloaded L<DBIx::Class::Row/store_column> to manage i18n columns cleanly.
=cut
sub store_column {
my ( $self, $column, $value ) = @_;
my $lang = $self->language;
$self->_i18n_column_row( {} ) unless $self->_i18n_column_row;
if ( $self->has_i18n_column($column) ) {
$self->_make_languages_dirty($lang);
if ( my $i18n_row = $self->_i18n_column_row->{$lang} ) {
return $i18n_row->$column($value);
}
else {
$self->_i18n_column_row->{$lang}
= $self->i18n_resultset->find_or_new({
$self->language_column => $lang,
$self->foreign_column => $self->id,
});
return $self->_i18n_column_row->{$lang}->$column($value);
}
}
return $self->next::method( $column, $value );
}
=head2 get_column
Overloaded L<DBIx::Class::Row/get_column> to manage i18n columns cleanly.
=cut
sub get_column {
my ( $self, $column ) = ( shift, shift );
my $lang = $self->language;
$self->_i18n_column_row({}) unless $self->_i18n_column_row;
if ( $self->has_i18n_column($column) ) {
unless ( exists $self->_i18n_column_row->{$lang} ) {
$self->_i18n_column_row->{$lang} =
$self->i18n_resultset->find_or_new({
$self->language_column => $lang,
$self->foreign_column => $self->id,
});
}
return $self->_i18n_column_row->{$lang}->$column;
}
return $self->next::method( $column, @_ );
}
=head2 update
Overloaded L<DBIx::Class::Row/update> to manage i18n columns cleanly.
=cut
sub update {
my $self = shift;
$self->next::method( @_ );
if ( $self->_i18n_column_row ) {
for my $lang ( keys %{$self->_i18n_column_row} ) {
my $i18n_row = $self->_i18n_column_row->{$lang};
$i18n_row->in_storage ? $i18n_row->update : $i18n_row->insert ;
}
}
return $self;
}
=head2 insert
Overloaded L<DBIx::Class::Row/insert> to manage i18n columns cleanly.
=cut
sub insert {
my $self = shift;
$self->next::method( @_ );
if ( $self->_i18n_column_row ) {
for my $lang ( keys %{$self->_i18n_column_row} ) {
my $i18n_row = $self->_i18n_column_row->{$lang};
my $fk = $self->foreign_column;
$i18n_row->$fk( $self->id );
$i18n_row->insert;
}
}
return $self;
}
=head2 get_from_storage
Overloaded L<DBIx::Class::Row/get_from_storage> to manage i18n columns cleanly.
=cut
sub get_from_storage {
my $self = shift;
my $language = $self->language;
my $new_object = $self->next::method( @_ );
if ( $language && $new_object ) {
$new_object->language($language);
}
return $new_object;
}
=head2 related_resultset
Overloaded L<DBIx::Class::Relationship::Base/related_resultset> to propagate
language to related resultsets that also use this component.
=cut
sub related_resultset {
( run in 1.493 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )