source: trunk/newpage.cgi @ 154

Last change on this file since 154 was 154, checked in by kake, 19 years ago

Added newpage.cgi

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.1 KB
Line 
1#!/usr/bin/perl -w
2use strict;
3
4use CGI;
5use Config::Tiny;
6use OpenGuides::Template;
7use OpenGuides::Utils;
8use URI::Escape;
9
10my @badchars = qw( ! " $ % ^ & @ ~ ? { } [ ] );
11push @badchars, '#'; # Avoid warning about possible comments in qw()
12
13my $q = CGI->new;
14my $config = Config::Tiny->read('wiki.conf');
15my $wiki = OpenGuides::Utils->make_wiki_object( config => $config );
16
17my $pagename = $q->param("pagename") || "";
18$pagename =~ s/^\s*//;
19$pagename =~ s/\s*$//;
20
21my $action = $q->param("action") || "";
22
23if ( $action eq "makepage" ) {
24    make_page();
25} else {
26    show_form();
27}
28
29exit 0;
30
31sub show_form {
32    print OpenGuides::Template->output( wiki     => $wiki,
33                                        config   => $config,
34                                        template => "newpage.tt",
35                                        vars     => {
36                                            not_editable     => 1,
37                                            disallowed_chars => \@badchars,
38                                            pagename         => $pagename }
39    );
40}
41
42sub make_page {
43    # Ensure pagename not blank.
44    unless ( $pagename ) {
45        print OpenGuides::Template->output(
46            wiki     => $wiki,
47            config   => $config,
48            template => "error.tt",
49            vars     => { not_editable => 1,
50                          message      => "Please enter a page name!",
51                          return_url   => "newpage.cgi" } );
52        exit 0;
53    }
54
55    # Ensure pagename valid.
56    my %badhash = map { $_ => 1 } @badchars;
57    my @naughty;
58    foreach my $i ( 0 .. (length $pagename) - 1 ) {
59        my $char = substr( $pagename, $i, 1 );
60        push @naughty, $char if $badhash{$char};
61    }
62    if ( scalar @naughty ) {
63        my $message = "Page name $pagename contains disallowed characters";
64        print OpenGuides::Template->output(
65            wiki     => $wiki,
66            config   => $config,
67            template => "error.tt",
68            vars     => {
69                pagename     => $pagename,
70                not_editable => 1,
71                message      => $message,
72                return_url   => "newpage.cgi?pagename=" . uri_escape($pagename)
73            }
74        );
75        exit 0;
76    }
77
78    # Hurrah, we're OK.
79    my $node_param = $wiki->formatter->node_name_to_node_param($pagename);
80    print "Location: $config->{_}->{script_name}?action=edit;id=$node_param\n\n";
81    exit 0;
82}
83
84
Note: See TracBrowser for help on using the repository browser.