1package CGI::Kwiki::CGI;
2$VERSION = '0.16';
3use strict;
4use base 'CGI::Kwiki';
5use CGI::Kwiki ':char_classes';
6
7sub all {
8    my ($self) = @_;
9    return (
10        CGI::Vars(),
11        page_id => $self->page_id,
12        map { ($_, $self->{$_}) }
13        grep { not /^(cgi|config|driver)$/ } keys %$self
14    );
15}
16
17sub wiki_text {
18    my ($self) = shift;
19    if (not defined $self->{wiki_text}) {
20        $self->{wiki_text} = CGI::param('wiki_text');
21        $self->{wiki_text} =~ s/\015\012/\n/g;
22        $self->{wiki_text} =~ s/\015/\n/g;
23        $self->{wiki_text} =~ s/\n*\z/\n/;
24        $self->{wiki_text} = '' if $self->{wiki_text} eq "\n";
25        $self->decode($self->{wiki_text});
26    }
27    return $self->{wiki_text}
28}
29
30sub action {
31    my ($self) = shift;
32    if (@_) {
33        $self->{action} = shift;
34        return $self;
35    }
36    my $action = CGI::param('action') || '';
37    $action = '' if $action =~ /[^$WORD]/;
38    return $action || 'display';
39}
40
41sub page_id {
42    my ($self) = shift;
43    if (@_) {
44        $self->{page_id} = shift;
45        return $self;
46    }
47    return $self->{page_id}
48      if defined $self->{page_id};
49    my $page_id = '';
50    my $query_string = CGI::query_string();
51    $query_string =~ s/%([0-9a-fA-F]{2})/pack("H*", $1)/ge;
52    $self->decode($query_string);
53    if ($query_string =~ /^keywords=([$ALPHANUM\-:]+)$/) {
54        $page_id = $1;
55    }
56    elsif ($self->action eq 'search') {
57        $page_id = $self->search eq '' ? $self->loc('SiteMap') : $self->loc('SearchResults');
58    }
59    else {
60        $page_id = CGI::param('page_id') ||
61                   $self->config->top_page ||
62                   '';
63        $self->decode($page_id);
64    }
65    $page_id = '' if $page_id =~ /[^$ALPHANUM\-\:]/;
66    return $page_id || $self->config->top_page || '';
67}
68
69sub blog_id {
70    my ($self) = shift;
71    my $query_string = CGI::query_string();
72    my $blog_id = ($query_string =~ /^keywords=(\d{14})$/) ? $1 : '';
73    return $blog_id;
74}
75
76sub button {
77    my ($self) = shift;
78    my %params = $self->all;
79    while (my ($k, $v) = each %params) {
80        return uc($1) if $k =~ /^button-(\w+)$/;
81    }
82}
83
84use vars qw($AUTOLOAD);
85sub AUTOLOAD {
86    my $param = $AUTOLOAD;
87    $param =~ s/.*://;
88    my ($self) = shift;
89    if (@_) {
90        $self->{$param} = shift;
91        return $self;
92    }
93    my $value = $self->get_raw($param);
94    $value =~ s/[^$WORD\-\:\.\,\|\ ]//g;
95    return $value;
96}
97
98sub get_raw {
99    my ($self, $param) = @_;
100    my $value = defined $self->{$param}
101      ? $self->{$param}
102      : CGI::param($param);
103    $value = '' unless defined $value;
104    $self->decode($value);
105    return $value;
106}
107
1081;
109
110__END__
111
112=head1 NAME
113
114CGI::Kwiki::CGI - CGI Base Class for CGI::Kwiki
115
116=head1 DESCRIPTION
117
118See installed kwiki pages for more information.
119
120=head1 AUTHOR
121
122Brian Ingerson <INGY@cpan.org>
123
124=head1 COPYRIGHT
125
126Copyright (c) 2003. Brian Ingerson. All rights reserved.
127
128This program is free software; you can redistribute it and/or modify it
129under the same terms as Perl itself.
130
131See http://www.perl.com/perl/misc/Artistic.html
132
133=cut
134