# This code was forked from the LiveJournal project owned and operated # by Live Journal, Inc. The code has been modified and expanded by # Dreamwidth Studios, LLC. These files were originally licensed under # the terms of the license supplied by Live Journal, Inc, which can # currently be found at: # # http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt # # In accordance with the original license, this code and all its # modifications are provided under the GNU General Public License. # A copy of that license can be found in the LICENSE file included as # part of this distribution. package LJ::Setting::BoolSetting; use base 'LJ::Setting'; use strict; use warnings; use Carp qw(croak); # if override to something non-undef, current_value and save_text work # assuming a userprop vs. user field. sub prop_name { undef } sub user_field { undef } # must override these with values you want checked/unchecked to be sub checked_value { croak } sub unchecked_value { croak } sub current_value { my ( $class, $u ) = @_; if ( my $propname = $class->prop_name ) { return $u->prop($propname); } elsif ( my $field = $class->user_field ) { return $u->{$field}; } croak; } sub is_selected { my ( $class, $u ) = @_; my $current_value = $class->current_value($u); my $checked_value = $class->checked_value // ''; return 0 unless defined($current_value); return $current_value eq $checked_value; } sub label { croak; } sub des { "" } sub as_html { my ( $class, $u, $errs ) = @_; my $key = $class->pkgkey; my $html = LJ::html_check( { name => "${key}val", value => 1, id => "${key}check", selected => $class->is_selected($u), } ) . " "; return $html; } sub save { my ( $class, $u, $args ) = @_; my $new_val = $args->{val} ? $class->checked_value : $class->unchecked_value; $new_val //= ''; my $current_value = $class->current_value($u); return 1 if ( defined $current_value and $new_val eq $current_value ); if ( my $prop = $class->prop_name ) { return $u->set_prop( $prop, $new_val ); } elsif ( my $field = $class->user_field ) { return $u->update_self( { $field => $new_val } ); } croak "No prop_name or user_field set"; } 1;