(Still working on getting Kwiki to run inside Mason...)

I'm now creating two plug ins to override the default CGI functions that
Kwiki uses since Mason pulls all the param and url_param values into
$m->request_args.

In my index.html, I do a $hub->cgi->set_mason($m) to inject the mason object
into my cgi plugin.  In config.yalm, I use "cgi_class: Kwiki::Mason".

Spoon::Mason looks like this so far:
package Spoon::Mason;
use Spoon::Base -Base;

use CGI -no_debug, -nosticky;
our @EXPORT = qw(cgi);

our $VERSION = '0.01';

my $all_params_by_class = {};

const class_id    => 'cgi';
const class_title => 'Get param from Mason args';

sub init {
    $self->add_params('page_name');
}

my $m = undef;

sub set_mason {
    $m = shift;
}

sub _get_raw {
    my $field = shift;
###    my $field = shift @_;

    my @values;
    if (defined(my $value = $self->{$field})) {
        @values = ref($value)
          ? @$value
          : $value;
    }
    else {
####        warn("getting $field");
        if (defined($m)) {

            if ($field eq "page_name"
                && !defined($m->request_args->{$field})) {
                foreach my $key (keys %{ $m->request_args }) {
####                    warn("~~~~~~~~ $key => ", $m->request_args->{$key}
|| "undef");
                    if (!defined($m->request_args->{$key}) ||
$m->request_args->{$key} eq "") {
                          @values = ($key);
                      }
                }
            } else {
                @values = !defined($m->request_args->{$field}) ? undef
                    : ref($m->request_args->{$field}) eq "ARRAY" ?
$m->request_args->{$field}->[0]
                    :
$m->request_args->{$field};
            }
###            warn($field, "====>", $values[0] || "undef");
        } else {

            @values = defined CGI::param($field)
                ? CGI::param($field)
                : CGI::url_param($field);
        }
        $self->utf8_decode($_)
          for grep defined, @values;

        $self->{$field} = @values > 1
          ? [EMAIL PROTECTED]
          : $values[0];
    }

    warn($field, "->", $values[0] || "undef");
    return wantarray
      ? @values
      : defined $values[0]
        ? $values[0]
        : '';
}

Followed by the standard spoon functions...

Kwiki::Mason looks like:

package Kwiki::Mason;
use Spoon::Mason -Base;
use Kwiki ':char_classes';

sub init {
    $self->add_params('page_name');
}

cgi 'action';
cgi 'button';
cgi 'page_content';  # pm Added
cgi 'revision_id';  # pm Added
cgi 'page_time';  # pm Added
cgi 'page_name'; # pm Added

sub page_name {
    return $self->{page_name} = shift if @_;
    return $self->{page_name}
      if defined $self->{page_name};
    my $page_name = CGI::param('page_name');
    if (not defined $page_name) {
        my $query_string = CGI::query_string();
        $query_string =~ s/%([0-9a-fA-F]{2})/pack("H*", $1)/ge;
        if ($query_string =~ /^keywords=/) {
            $page_name = join ' ',
                            grep length($_),
                            split /;?keywords=/, $query_string;
        }
        elsif ($ENV{QUERY_STRING} and $ENV{QUERY_STRING} =~ /[^=&;]+[&;]/) {
            ($page_name = $ENV{QUERY_STRING}) =~ s/(.*?)[&;].*/$1/;
        }
    }
    $page_name = '' if defined $page_name && $page_name =~ /=/;
    $page_name = $self->uri_unescape($page_name);
    $self->{page_name} = $self->set_default_page_name($page_name);
}

sub set_default_page_name {
    my $page_name = shift;
    $page_name = '' if $page_name and $page_name =~ /[^$ALPHANUM]/;
    $page_name ||= $self->hub->config->main_page;
}



It now picks up the page name ok and can save "get" edit/save actions, but
posts are still not picking up any content.  New pages also do not save.  Is
there anything obvious that I'm doing wrong here?
Thanks, Paul...

Reply via email to