Author: spadkins
Date: Thu Oct 22 10:19:52 2009
New Revision: 13419

Modified:
   p5ee/trunk/App-Widget-ExtJS/cgi-bin/App/app-ext-repository

Log:
logic for filter and edit

Modified: p5ee/trunk/App-Widget-ExtJS/cgi-bin/App/app-ext-repository
==============================================================================
--- p5ee/trunk/App-Widget-ExtJS/cgi-bin/App/app-ext-repository  (original)
+++ p5ee/trunk/App-Widget-ExtJS/cgi-bin/App/app-ext-repository  Thu Oct 22 
10:19:52 2009
@@ -4,6 +4,7 @@
 
 use App::Options;
 use App;
+use JSON;
 
 {
     my ($json_result_set);
@@ -12,32 +13,37 @@
         my $request = $context->request();
         my $cgi     = $request->{cgi};
 
-        if ($App::options{verbose}) {
+        #$App::options{verbose}
+        if (1) {
             print STDERR "app-ext-repository: CGI=$cgi\n";
             foreach my $p ($cgi->param()) {
                 print STDERR "   $p : ", $cgi->param($p), "\n";
             }
         }
 
-        my $rep     = $context->repository();
-        my $json    = $context->serializer("json", class => 
"App::Serializer::Json");
+        my $repository  = $cgi->param("repository");
+        my $rep         = $context->repository($repository);
+        my $json        = $context->serializer("json", class => 
"App::Serializer::Json");
 
         my %cgi_param_ignored = (
-            context  => 1,
-            table    => 1,
-            columns  => 1,
-            start    => 1,
-            limit    => 1,
-            sort     => 1,
-            dir      => 1,
-            order_by => 1,
-            rowtype  => 1,
+            context     => 1,
+            table       => 1,
+            columns     => 1,
+            start       => 1,
+            limit       => 1,
+            sort        => 1,
+            dir         => 1,
+            order_by    => 1,
+            rowtype     => 1,
+            primary_key => 1,
+            repository  => 1,
         );
         my ($rows);
 
-        my @cgi_params  = $cgi->param();
+        my @cgi_params = $cgi->param();
 
-        my $table   = $cgi->param("table") || $App::options{table} || die 
"app-ext-repository: table param not set\n";
+        my $table       = $cgi->param("table") || $App::options{table} || die 
"app-ext-repository: table param not set\n";
+        my $primary_key = $cgi->param("primary_key");
 
         my $columns = $cgi->param("columns");
         if ($columns) {
@@ -50,24 +56,95 @@
         my $rowtype = $cgi->param("rowtype") || "array";
 
         my $params  = {};
-        my ($value);
+        my $filter_params = {};
+
+        my ($value, $modified_record, $record);
         foreach my $cgi_param (@cgi_params) {
             if (!$cgi_param_ignored{$cgi_param}) {
                 $value = $cgi->param($cgi_param);
-                $params->{$cgi_param} = $value if (defined $value && $value !~ 
/^\s*$/);
+                if ($cgi_param =~ /^filter\[\d+\]\[/) {
+                    if ($cgi_param =~ /^(filter\[\d+\])\[field\]$/) {
+                        $filter_params->{$1}{field} = $value;
+                    }
+                    if ($cgi_param =~ /^(filter\[\d+\])\[data\]\[([^.]+)\]$/) {
+                        $filter_params->{$1}{$2} = $value;
+                    }
+                }
+                elsif ($cgi_param eq "modifiedRecord") {
+                    $modified_record = decode_json $value;
+                }
+                elsif ($cgi_param eq "record") {
+                    $record = decode_json $value;
+                }
+                else {
+                    $params->{$cgi_param} = $value if (defined $value && 
$value !~ /^\s*$/);
+                }
+            }
+        }
+
+        # filter params
+        foreach my $key (keys %$filter_params) {
+            my $field      = $filter_params->{$key}{field};
+            my $type       = $filter_params->{$key}{type};
+            my $comparison = $filter_params->{$key}{comparison};
+            my $value      = $filter_params->{$key}{value};
+            if ($field) {
+                if ($comparison =~ /lt|gt/ && $type eq 'numeric') {
+                    my $param_key = "${field}.${comparison}";
+                    $params->{"$param_key"} = $value;
+                }
+                elsif ($comparison eq 'eq' || $type eq 'string') {
+                    $params->{$field} = $value;
+                }
             }
         }
 
-        my $options = {};
+        #edit parms/cols/rows
+        if ($#$modified_record > -1 && $primary_key ne "") {
+            my ($mod_record, $mod_record_value);
+            my (@row, @col);
+            foreach my $m_record (@$modified_record) {
+                foreach my $key (keys %$m_record) {
+                    $mod_record = $key;
+                    $mod_record_value = $m_record->{$key};
+                }
+            }
+            if ($mod_record && ($mod_record ne $primary_key)) {
+                 if ($mod_record_value eq "") {
+                     push(@row, undef);
+                 }
+                 else {
+                     push(@row, $mod_record_value);
+                 }
+                 push(@col, $mod_record);
+            }
+            foreach my $col (keys %$record) {
+                my $value = $record->{$col};
+                my $col   = $col;
+                if ($col eq $primary_key) {
+                    $params->{$col} = $value;
+                }
+                if ($col eq 'modify_dttm') {
+                    $params->{'modify_dttm'} = $value;
+                }
+            }
+            my $nrows = $rep->update($table, $params, \...@col, \...@row);
+        }
+
+        my $options  = {};
         my $startrow = ($cgi->param("start") || 0) + 1;
-        $startrow = 1 if ($startrow < 1);
-        my $limit = $cgi->param("limit");
+
+        $startrow  = 1 if ($startrow < 1);
+        my $limit  = $cgi->param("limit");
         my $endrow = $limit ? $startrow + $limit - 1: 0;
+
         $options->{startrow} = $startrow if ($startrow > 1);
-        $options->{endrow} = $endrow if ($endrow > 0);
-        my $sort = $cgi->param("sort");
+        $options->{endrow}   = $endrow if ($endrow > 0);
+
+        my $sort     = $cgi->param("sort");
         my $order_by = $cgi->param("order_by");
-        my $dir = $cgi->param("dir");
+        my $dir      = $cgi->param("dir");
+
         if ($sort || $order_by) {
             my (@order_by);
             @order_by = split(/,/, $order_by) if ($order_by);
@@ -79,10 +156,10 @@
         }
 
         if ($rowtype eq "object") {
-            $rows   = $rep->get_hashes($table, $params, $columns, $options);
+            $rows = $rep->get_hashes($table, $params, $columns, $options);
         }
         else {
-            $rows   = $rep->get_rows($table, $params, $columns, $options);
+            $rows = $rep->get_rows($table, $params, $columns, $options);
         }
         my $nrows = $rep->get($table, $params, "count(1)") + 0;
 

Reply via email to