# --------------------------------------------------------------------------- # XML-RPC Filter tag # A Plugin for Movable Type # # Release 0.1 # August 18, 2002 # # From l.m.orchard # http://www.decafbad.com # --------------------------------------------------------------------------- # This software is provided as-is. # You may use it for commercial or personal use. # If you distribute it, please keep this notice intact. # # Copyright (c) 2002 l.m.orchard # --------------------------------------------------------------------------- use strict; use MT::Template::Context; use SOAP::Lite; use XMLRPC::Lite; MT::Template::Context->add_container_tag(XMLRPCFilter => \&XMLRPCFilter); sub XMLRPCFilter { my ($ctx, $args) = @_; ### Get the URL, method, content type, and filter parameters my $remove_whitespace = defined($args->{remove_whitespace}) ? $args->{'remove_whitespace'} : 1; my $url = $args->{url}; my $method = $args->{method} || 'wiki.filterData'; my $content_type = $args->{content_type} || "text/html"; my $raw_params = $args->{params} || ""; my %params = map { split(/=/, $_) } split(/,/, $raw_params); ### Build out any child tags. my $tokens = $ctx->stash('tokens'); my $builder = $ctx->stash('builder'); defined(my $raw = $builder->build($ctx, $tokens)) or return $ctx->error($builder->errstr); ### Remove whitespace before and after text. if ($remove_whitespace) { $raw =~ s/^(\s+)//; $raw =~ s/(\s+)$//; } ### Make the XML-RPC filter call my $result; eval { $result = XMLRPC::Lite->proxy($url)->call ($method, SOAP::Data->type(base64 => $raw), $content_type, \%params)->result(); }; ### Return something, hopefully the results, ### but possibly an error message return "Problem calling filter: ".$@ if ($@); return "Problem calling filter, empty result." if (! defined $result->{data}); return $result->{data}; }