[dw-free] Allow DW::Setting modules to be fully supported.
[commit: http://hg.dwscoalition.org/dw-free/rev/4a890b60b27c]
Allow DW::Setting modules to be fully supported.
Patch by
exor674.
Files modified:
Allow DW::Setting modules to be fully supported.
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Files modified:
- cgi-bin/LJ/Setting.pm
- htdocs/settings/index.bml
-------------------------------------------------------------------------------- diff -r ef00e8e44daa -r 4a890b60b27c cgi-bin/LJ/Setting.pm --- a/cgi-bin/LJ/Setting.pm Sat Mar 21 23:00:20 2009 +0000 +++ b/cgi-bin/LJ/Setting.pm Sat Mar 21 23:03:45 2009 +0000 @@ -5,7 +5,8 @@ use LJ::ModuleLoader; use LJ::ModuleLoader; # Autouse all settings -LJ::ModuleLoader->autouse_subclasses("LJ::Setting"); +LJ::ModuleLoader->autouse_subclasses( "LJ::Setting" ); +LJ::ModuleLoader->autouse_subclasses( "DW::Setting" ); # ---------------------------------------------------------------------------- @@ -45,9 +46,7 @@ sub save { my %posted; # class -> key -> value while (my ($k, $v) = each %$postargs) { - next unless $k =~ /^LJ__Setting__([a-zA-Z0-9]+)_(\w+)$/; - my $class = "LJ::Setting::$1"; - my $key = $2; + my ( $class, $key ) = class_from_key( $k ); $posted{$class}{$key} = $v; } @@ -60,6 +59,16 @@ sub save { # ---------------------------------------------------------------------------- # Don't override: + +# Internal method to do *proper* argument -> class/key mapping. +sub class_from_key { + my ( $val ) = @_; + + my ( $class, $key ) = $val =~ /^((?:[a-zA-Z0-9]+__)+[a-zA-Z0-9]+)_(\w+)$/; + $class =~ s/__/::/g if $class; + + return ( $class, $key ); +} sub pkgkey { my $class = shift; @@ -84,14 +93,14 @@ sub errdiv { # don't override this. sub errors { - my ($class, %map) = @_; + my ( $class, %map ) = @_; my $errclass = $class; - $errclass =~ s/^LJ::Setting:://; - $errclass = "LJ::Error::SettingSave::" . $errclass; - eval "\@${errclass}::ISA = ('LJ::Error::SettingSave');"; + $errclass =~ s/^([a-zA-Z0-9]+)::Setting:://; + $errclass = "$1::Error::SettingSave::" . $errclass; + eval "\@${errclass}::ISA = ( 'LJ::Error::SettingSave' );"; - my $eo = eval { $errclass->new(map => \%map) }; + my $eo = eval { $errclass->new( map => \%map ) }; $eo->log; $eo->throw; } @@ -136,15 +145,13 @@ sub error_map { # returns any errors and the post args for each setting sub save_all { shift if $_[0] eq __PACKAGE__; - my ($u, $post, $all_settings) = @_; + my ( $u, $post, $all_settings ) = @_; my %posted; # class -> key -> value my %returns; - while (my ($k, $v) = each %$post) { - next unless $k =~ /^LJ__Setting__([a-zA-Z0-9]+)_(\w+)$/; - my $class = "LJ::Setting::$1"; - my $key = $2; - $class =~ s/__/::/g; + while ( my ( $k, $v ) = each %$post ) { + my ( $class, $key ) = class_from_key( $k ); + next unless $class; $posted{$class}{$key} = $v; } diff -r ef00e8e44daa -r 4a890b60b27c htdocs/settings/index.bml --- a/htdocs/settings/index.bml Sat Mar 21 23:00:20 2009 +0000 +++ b/htdocs/settings/index.bml Sat Mar 21 23:03:45 2009 +0000 @@ -22,7 +22,7 @@ my $selminiclass = $GET{c}; # classname without LJ::Setting:: my $selclass = $selminiclass ? "LJ::Setting::$selminiclass" : ""; - my @settings = map { s!.+cgi-bin/!!; s!/!::!g; s/\.pm$//; $_ } (glob "$LJ::HOME/cgi-bin/LJ/Setting/*.pm"); + my @settings = map { s!.+cgi-bin/!!; s!/!::!g; s/\.pm$//; $_ } ( glob "$LJ::HOME/cgi-bin/LJ/Setting/*.pm", glob "$LJ::HOME/cgi-bin/DW/Setting/*.pm" ); my $tag = lc $GET{tag}; my %tags = (); --------------------------------------------------------------------------------