root/trunk/newpage.cgi

Revision 1279, 2.8 kB (checked in by dom, 2 weeks ago)

Add read_only config option to turn off edits on a guide completely (fixes #276)

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