Author: spadkins
Date: Wed May 21 14:07:40 2008
New Revision: 11301

Added:
   p5ee/trunk/App-Widget-ExtJS/lib/App/SessionObject/
   p5ee/trunk/App-Widget-ExtJS/lib/App/SessionObject/ExtJS/
   p5ee/trunk/App-Widget-ExtJS/lib/App/SessionObject/ExtJS/Store.pm

Log:
add support for Ajax queries to support the ExtJS Grid

Added: p5ee/trunk/App-Widget-ExtJS/lib/App/SessionObject/ExtJS/Store.pm
==============================================================================
--- (empty file)
+++ p5ee/trunk/App-Widget-ExtJS/lib/App/SessionObject/ExtJS/Store.pm    Wed May 
21 14:07:40 2008
@@ -0,0 +1,74 @@
+
+package App::SessionObject::ExtJS::Store;
+
+$VERSION = do { my @r=(q$Revision: 19698 $=~/\d+/g); sprintf 
"%d."."%02d"x$#r,@r};
+
+use App;
+use App::SessionObject;
[EMAIL PROTECTED] = ( "App::SessionObject" );
+
+use strict;
+
+sub load_rows {
+    &App::sub_entry if ($App::trace);
+    my ($self) = @_;
+    my $context         = $self->{context};
+    my $json_serializer = $context->serializer("json");
+    my $count_column    = $self->{count_column} || "totalCount";
+    my $rows_root       = $self->{rows_root}    || "data";
+    my $total_count     = $context->so_get("total_count");
+    my $table           = $context->so_get("table");
+    my $params          = $context->so_get("params");
+    my $sort            = $context->so_get("sort");
+    my $dir             = $context->so_get("dir");
+    my $callback        = $context->so_get("callback");
+
+    if ($params) {
+        $params = $json_serializer->deserialize($params);
+    }
+    else {
+        $params = {};
+    }
+
+    my $columns = $context->so_get("columns");
+    if ($columns) {
+        $columns = [ split(/,/, $columns) ];
+    }
+    else {
+        $columns = undef;
+    }
+
+    my $start   = $context->so_get("start") || 0;
+    my $limit   = $context->so_get("limit") || 25;
+    my $options = { startrow => $start+1, endrow => $start+$limit };
+    if ($sort) {
+        my $sort_spec = $sort;
+        $sort_spec .= ".$dir" if ($dir);
+        $options->{order_by} = [ $sort_spec ];
+    }
+
+    my $db      = $context->repository();
+    my $rows    = $db->get_hashes($table, $params, $columns, $options);
+    my $results = {
+        $rows_root => $rows,
+    };
+
+    if ($total_count) {
+        $results->{$count_column} = $total_count;
+    }
+    else {
+        my $count   = $db->get($table, $params, "count(*)");
+        $results->{$count_column} = $count;
+    }
+
+    my $json_text = $json_serializer->serialize($results);
+    if ($callback) {
+        $json_text = "$callback($json_text);";
+    }
+
+    &App::sub_exit($json_text) if ($App::trace);
+    return($json_text);
+}
+
+1;
+

Reply via email to