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;