Merge branch 'devel' of h1dev:/srv/APKPM/
[APKPM.git] / lib / APKPM / CRM.pm
index 6f75a37..1d18d04 100644 (file)
@@ -10,8 +10,10 @@ with 'APKPM::Gearman';
 
 require RPC::XML;
 require RPC::XML::Client;
+use Encode;
+use Redis;
 
-$RPC::XML::ENCODING = "utf-8"; # FIXME really used?
+#$RPC::XML::ENCODING = "utf-8"; # FIXME really used?
 
 sub prefix { 'CRM_' }
 
@@ -26,7 +28,7 @@ sub begin {
        warn "# begin ", dump( $workload );
 }
 
-sub search : Job : MinProcesses(1) : MaxProcesses(5) : Encode(e_json) {
+sub search : Job : Encode(e_json_encode) {
        my ( $self, $job, $workload ) = @_;
        warn "# search ",dump($workload);
 
@@ -37,7 +39,23 @@ sub search : Job : MinProcesses(1) : MaxProcesses(5) : Encode(e_json) {
        my $cli = RPC::XML::Client->new($self->config('crmxml'));
        warn "RPC::XML $field $value";
        my $resp = $cli->send_request('search',RPC::XML::array->new( $field => $value ));
+
+       my $redis = Redis->new;
+       map {
+               my $key = 'CRM.' . $_->{USERNAME};
+               $redis->set( $key => $self->e_json($_) );
+               $redis->expire( $key => 15 * 60 );
+       } @{ $resp->value->[0] };
+
        return ref $resp ? $resp->value->[0] : { error => $resp };
 }
 
+sub e_json_encode {
+       my ($self,$data) = @_;
+       my $json = $self->e_json($data);
+       $json = Encode::decode('utf-8', $json);
+       Encode::from_to($json,'cp1250', 'utf-8');
+       return $json;
+}
+
 1;