Permalink
Cannot retrieve contributors at this time
310 lines (245 sloc)
7 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ###################################################################### | |
| # | |
| # EPrints::MetaField::Boolean; | |
| # | |
| ###################################################################### | |
| # | |
| # | |
| ###################################################################### | |
| =pod | |
| =head1 NAME | |
| B<EPrints::MetaField::Boolean> - no description | |
| =head1 DESCRIPTION | |
| not done | |
| =over 4 | |
| =cut | |
| package EPrints::MetaField::Boolean; | |
| use strict; | |
| use warnings; | |
| BEGIN | |
| { | |
| our( @ISA ); | |
| @ISA = qw( EPrints::MetaField ); | |
| } | |
| use EPrints::MetaField; | |
| sub get_sql_type | |
| { | |
| my( $self, $session ) = @_; | |
| # Could be a 'SET' on MySQL/Postgres | |
| return $session->get_database->get_column_type( | |
| $self->get_sql_name(), | |
| EPrints::Database::SQL_VARCHAR, | |
| !$self->get_property( "allow_null" ), | |
| 5, # 'TRUE' or 'FALSE' | |
| undef, | |
| $self->get_sql_properties, | |
| ); | |
| } | |
| sub get_index_codes | |
| { | |
| my( $self, $session, $value ) = @_; | |
| return( [], [], [] ); | |
| } | |
| sub render_single_value | |
| { | |
| my( $self, $session, $value ) = @_; | |
| return $session->html_phrase( | |
| "lib/metafield:".($value eq "TRUE"?"true":"false") ); | |
| } | |
| sub get_basic_input_elements | |
| { | |
| my( $self, $session, $value, $basename, $staff, $obj ) = @_; | |
| my @classes; | |
| push @classes, join('_', 'ep', $self->{dataset}->base_id, $self->name); | |
| push @classes, join('_', 'eptype', $self->{dataset}->base_id, $self->type); | |
| push @classes, join('_', 'eptype', $self->{dataset}->base_id, $self->type, $self->{input_style}) if $self->{input_style}; | |
| if( $self->{input_style} eq "menu" ) | |
| { | |
| my @values = qw/ TRUE FALSE /; | |
| my %labels = ( | |
| TRUE=> $session->phrase( $self->{confid}."_fieldopt_".$self->{name}."_TRUE"), | |
| FALSE=> $session->phrase( $self->{confid}."_fieldopt_".$self->{name}."_FALSE"), | |
| ); | |
| my $height = 2; | |
| if( !$self->get_property( "required" ) ) | |
| { | |
| push @values, ""; | |
| $labels{""} = $session->phrase( "lib/metafield:unspecified_selection" ); | |
| $height++; | |
| } | |
| if( $self->get_property( "input_rows" ) ) | |
| { | |
| $height = $self->get_property( "input_rows" ); | |
| } | |
| push @classes, "foobar0"; | |
| my %settings = ( | |
| height=>$height, | |
| values=>\@values, | |
| labels=>\%labels, | |
| name=>$basename, | |
| default=>$value, | |
| class=>join(" ", @classes), | |
| ); | |
| return [[{ el=>$session->render_option_list( %settings ) }]]; | |
| } | |
| if( $self->{input_style} eq "radio" ) | |
| { | |
| # render as radio buttons | |
| my $true = $session->render_noenter_input_field( | |
| type => "radio", | |
| checked=>( defined $value && $value eq | |
| "TRUE" ? "checked" : undef ), | |
| name => $basename, | |
| class => join(" ", @classes), | |
| value => "TRUE" ); | |
| my $false = $session->render_noenter_input_field( | |
| type => "radio", | |
| checked=>( defined $value && $value eq | |
| "FALSE" ? "checked" : undef ), | |
| name => $basename, | |
| class => join(" ", @classes), | |
| value => "FALSE" ); | |
| my $f = $session->make_doc_fragment; | |
| $f->appendChild( | |
| $session->html_phrase( | |
| $self->{confid}."_radio_".$self->{name}, | |
| true=>$true, | |
| false=>$false ) ); | |
| if( !$self->get_property( "required" ) ) | |
| { | |
| my $div = $session->make_element( "div" ); | |
| $div->appendChild( | |
| $session->render_noenter_input_field( | |
| type => "radio", | |
| checked=>( !EPrints::Utils::is_set($value) ? "checked" : undef ), | |
| name => $basename, | |
| class => join(" ", @classes), | |
| value => "" ) ); | |
| $f->appendChild( $div ); | |
| $div->appendChild( $session->html_phrase( | |
| "lib/metafield:unspecified_selection" ) ); | |
| } | |
| return [[{ el=>$f }]]; | |
| } | |
| # render as checkbox (ugly) | |
| return [[{ el=>$session->render_noenter_input_field( | |
| type => "checkbox", | |
| checked=>( defined $value && $value eq | |
| "TRUE" ? "checked" : undef ), | |
| name => $basename, | |
| class=>join(" ", @classes), | |
| value => "TRUE" ) }]]; | |
| } | |
| sub form_value_basic | |
| { | |
| my( $self, $session, $basename ) = @_; | |
| my $form_val = $session->param( $basename ); | |
| if( | |
| $self->{input_style} eq "radio" || | |
| $self->{input_style} eq "menu" ) | |
| { | |
| return if( !defined $form_val ); | |
| return "TRUE" if( $form_val eq "TRUE" ); | |
| return "FALSE" if( $form_val eq "FALSE" ); | |
| return; | |
| } | |
| # checkbox can't be NULL. | |
| return "TRUE" if defined $form_val; | |
| return "FALSE"; | |
| } | |
| sub get_unsorted_values | |
| { | |
| my( $self, $session, $dataset, %opts ) = @_; | |
| return [ "TRUE", "FALSE" ]; | |
| } | |
| sub render_search_input | |
| { | |
| my( $self, $session, $searchfield ) = @_; | |
| # Boolean: Popup menu | |
| my @bool_tags = ( "EITHER", "TRUE", "FALSE" ); | |
| my %bool_labels = ( | |
| "EITHER" => $session->phrase( "lib/searchfield:bool_nopref" ), | |
| "TRUE" => $session->phrase( "lib/searchfield:bool_yes" ), | |
| "FALSE" => $session->phrase( "lib/searchfield:bool_no" ) ); | |
| my $value = $searchfield->get_value; | |
| return $session->render_option_list( | |
| name => $searchfield->get_form_prefix, | |
| values => \@bool_tags, | |
| default => ( defined $value ? $value : $bool_tags[0] ), | |
| labels => \%bool_labels ); | |
| } | |
| sub from_search_form | |
| { | |
| my( $self, $session, $basename ) = @_; | |
| my $val = $session->param( $basename ); | |
| return unless defined $val; | |
| return( "FALSE" ) if( $val eq "FALSE" ); | |
| return( "TRUE" ) if( $val eq "TRUE" ); | |
| return; | |
| } | |
| sub render_search_description | |
| { | |
| my( $self, $session, $sfname, $value, $merge, $match ) = @_; | |
| if( $value eq "TRUE" ) | |
| { | |
| return $session->html_phrase( | |
| "lib/searchfield:desc_true", | |
| name => $sfname ); | |
| } | |
| return $session->html_phrase( | |
| "lib/searchfield:desc_false", | |
| name => $sfname ); | |
| } | |
| sub get_search_conditions_not_ex | |
| { | |
| my( $self, $session, $dataset, $search_value, $match, $merge, | |
| $search_mode ) = @_; | |
| return EPrints::Search::Condition->new( | |
| '=', | |
| $dataset, | |
| $self, | |
| $search_value ); | |
| } | |
| sub get_property_defaults | |
| { | |
| my( $self ) = @_; | |
| my %defaults = $self->SUPER::get_property_defaults; | |
| $defaults{input_style} = 0; | |
| $defaults{text_index} = 0; | |
| $defaults{input_rows} = $EPrints::MetaField::FROM_CONFIG; | |
| return %defaults; | |
| } | |
| sub render_xml_schema_type | |
| { | |
| my( $self, $session ) = @_; | |
| my $type = $session->make_element( "xs:simpleType", name => $self->get_xml_schema_type ); | |
| my $restriction = $session->make_element( "xs:restriction", base => "xs:string" ); | |
| $type->appendChild( $restriction ); | |
| foreach my $value (@{$self->get_unsorted_values}) | |
| { | |
| my $enumeration = $session->make_element( "xs:enumeration", value => $value ); | |
| $restriction->appendChild( $enumeration ); | |
| } | |
| return $type; | |
| } | |
| ###################################################################### | |
| 1; | |
| =head1 COPYRIGHT | |
| =for COPYRIGHT BEGIN | |
| Copyright 2019 University of Southampton. | |
| EPrints 3.4 is supplied by EPrints Services. | |
| http://www.eprints.org/eprints-3.4/ | |
| =for COPYRIGHT END | |
| =for LICENSE BEGIN | |
| This file is part of EPrints 3.4 L<http://www.eprints.org/>. | |
| EPrints 3.4 and this file are released under the terms of the | |
| GNU Lesser General Public License version 3 as published by | |
| the Free Software Foundation unless otherwise stated. | |
| EPrints 3.4 is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| See the GNU Lesser General Public License for more details. | |
| You should have received a copy of the GNU Lesser General Public | |
| License along with EPrints 3.4. | |
| If not, see L<http://www.gnu.org/licenses/>. | |
| =for LICENSE END | |