Author: spadkins
Date: Wed Apr 25 12:40:06 2007
New Revision: 9452

Modified:
   p5ee/trunk/App-Repository/lib/App/ValueDomain/Repository.pm

Log:
add support for values_string_template, the : syntax on values_string, and 
Service.substitute() instead of homegrown

Modified: p5ee/trunk/App-Repository/lib/App/ValueDomain/Repository.pm
==============================================================================
--- p5ee/trunk/App-Repository/lib/App/ValueDomain/Repository.pm (original)
+++ p5ee/trunk/App-Repository/lib/App/ValueDomain/Repository.pm Wed Apr 25 
12:40:06 2007
@@ -67,7 +67,14 @@
     my ($values, $labels, $needs_loading, $refresh_interval, $time);
     my ($method, $args, $rows, $row);
 
-    $values_string ||= "";
+    if (!defined $values_string) {
+        if (defined $self->{values_string_template}) {
+            $values_string = 
$self->substitute($self->{values_string_template});
+        }
+        else {
+            $values_string = "";
+        }
+    }
 
     $values = $self->{values};
     $labels = $self->{labels};
@@ -79,9 +86,9 @@
     # then the values/labels indeed need loading
     my $repository  = $self->{repository};
 
-    if (!defined $values || !defined $labels ||                    # never 
loaded them yet
-        (!$values_string && $self->{values_string}) ||   # asking for the 
whole domain, only subset loaded
-        (defined $values_string && defined $self->{values_string} &&  # asking 
for a different subset than is loaded
+    if (!defined $values || !defined $labels ||                     # never 
loaded them yet
+        ($values_string eq "" && $self->{values_string}) ||         # asking 
for the whole domain, only subset loaded
+        ($values_string ne "" && defined $self->{values_string} &&  # asking 
for a different subset than is loaded
          $values_string ne $self->{values_string})) {
         $needs_loading = 1;
     }
@@ -108,39 +115,24 @@
         my $labelcolumn = $self->{labelcolumn};
         $labelcolumn = "" if ($labelcolumn eq $valuecolumn);
         my $params      = $self->{params} || {};
-        my %params      = %$params;
         my $sql         = $self->{sql};
 
-        # TODO. I might want to use [$params = $self->substitute($params);] 
here
-        my ($key, $keyvalue, $wname, $wvalue);
-        foreach my $key (keys %params) {
-            $keyvalue = $params{$key};
-            while ($keyvalue =~ /\{([A-Za-z0-9\._-]+)\}/) {
-                $wname = $1;
-                $wvalue = $context->so_get($wname);
-                if (defined $wvalue) {
-                    $keyvalue =~ s/\{$wname\}/$wvalue/g;
-                }
-                else {
-                    $keyvalue =~ s/\{$wname\}/NULL/g;
-                }
-            }
-            $params{$key} = $keyvalue;
-        }
+        my ($key);
+        my $subst_params = $self->substitute($params, undef, {undef_value => 
"NULL"});
 
-        if (defined $values_string && $values_string ne "") {
+        if (defined $values_string && $values_string ne "" && $values_string 
!~ /^:/) {
             my $values_string_columns = $self->{values_string_columns};
             if ($values_string_columns) {
                 $values_string_columns = [split(/,/, $values_string_columns)] 
if (!ref($values_string_columns));
                 my @values_string_values = split(/,/, $values_string);
                 if ($#values_string_values > -1 && $#$values_string_columns == 
$#values_string_values) {
                     for (my $i = 0; $i <= $#$values_string_columns; $i++) {
-                        $params{$values_string_columns->[$i]} = 
$values_string_values[$i];
+                        $subst_params->{$values_string_columns->[$i]} = 
$values_string_values[$i];
                     }
                 }
             }
             else {
-                $params{$valuecolumn} = $values_string;
+                $subst_params->{$valuecolumn} = $values_string;
             }
         }
 
@@ -151,7 +143,7 @@
             if ($self->{order_by}) {
                 $options = { order_by => $self->{order_by} };
             }
-            $rows   = $rep->get_rows($table, \%params, [EMAIL PROTECTED], 
$options);
+            $rows   = $rep->get_rows($table, $subst_params, [EMAIL PROTECTED], 
$options);
             $values = [];
             $labels = {};
             foreach $row (@$rows) {
@@ -183,17 +175,9 @@
         }
 
         if ($sql) {
-            # TODO. I might want to use [$params = 
$self->substitute($params);] here
-            while ($sql =~ /\{([A-Za-z0-9\._-]+)\}/g) {
-                $wname = $1;
-                $wvalue = $context->so_get($wname);
-                if (defined $wvalue && $wvalue ne "") {
-                    $sql =~ s/\{$wname\}/$wvalue/g;
-                }
-                else {
-                    $sql =~ s/\{$wname\}/NULL/g;
-                }
-            }
+            $sql = $self->substitute($sql, undef, {undef_value => "NULL"});
+
+            # TODO. I might want to use $db->_do($sql) here.
             my $dbh = $rep->{dbh};
             my $sth = $dbh->prepare($sql);
             return("Prepare error: $DBI::errstr\n") if ($DBI::err);
@@ -225,12 +209,6 @@
     $values = [] if (! defined $values);
     $labels = {} if (! defined $labels);
 
-    if (defined $values_string && $values_string ne "") {
-        return($labels);
-    }
-    else {
-        return($values,$labels);
-    }
     &App::sub_exit() if ($App::trace);
 }
 

Reply via email to