source: trunk/newpage.cgi @ 621

Last change on this file since 621 was 621, checked in by Dominic Hargreaves, 17 years ago

Use environment variable OPENGUIDES_CONFIG_FILE for config file location;
will be useful for mod_perl. Also add error checking to OpenGuides::Config
config file opening.

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