source: trunk/newpage.cgi @ 1045

Last change on this file since 1045 was 1045, checked in by kake, 15 years ago

Make sure that common categories and locales (if configured) show up on recent changes and create new page form (fixes #199).

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.9 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
32sub show_form {
33    my %tt_vars = (
34                    not_editable     => 1,
35                    not_deletable    => 1,
36                    deter_robots     => 1,
37                    disallowed_chars => \@badchars,
38                    pagename         => $pagename,
39                  );
40    if ($config->enable_common_categories || $config->enable_common_locales) {
41        $tt_vars{common_catloc} = 1;
42        $tt_vars{common_categories} = $config->enable_common_categories;
43        $tt_vars{common_locales} = $config->enable_common_locales;
44        $tt_vars{catloc_link} = $config->script_url . $config->script_name
45                                . "?id=";
46    }
47    print OpenGuides::Template->output( wiki     => $wiki,
48                                        config   => $config,
49                                        template => "newpage.tt",
50                                        vars     => \%tt_vars,
51    );
52}
53
54sub make_page {
55    # Ensure pagename not blank.
56    unless ( $pagename ) {
57        print OpenGuides::Template->output(
58            wiki     => $wiki,
59            config   => $config,
60            template => "error.tt",
61            vars     => { not_editable  => 1,
62                          not_deletable => 1,
63                          deter_robots  => 1,
64                          message       => "Please enter a page name!",
65                          return_url    => "newpage.cgi" } );
66        return 0;
67    }
68
69    # Ensure pagename valid.
70    my %badhash = map { $_ => 1 } @badchars;
71    my @naughty;
72    foreach my $i ( 0 .. (length $pagename) - 1 ) {
73        my $char = substr( $pagename, $i, 1 );
74        push @naughty, $char if $badhash{$char};
75    }
76    if ( scalar @naughty ) {
77        my $message = "Page name $pagename contains disallowed characters";
78        print OpenGuides::Template->output(
79            wiki     => $wiki,
80            config   => $config,
81            template => "error.tt",
82            vars     => {
83                pagename     => $pagename,
84                not_editable => 1,
85                not_deletable => 1,
86                deter_robots => 1,
87                message      => $message,
88                return_url   => "newpage.cgi?pagename=" . uri_escape($pagename)
89            }
90        );
91        return 0;
92    }
93
94    # Hurrah, we're OK.
95    my $node_param = $wiki->formatter->node_name_to_node_param($pagename);
96    print "Location: ".$config->script_url.$config->script_name."?action=edit;id=$node_param\n\n";
97    return 0;
98}
99
100
Note: See TracBrowser for help on using the repository browser.