source: trunk/newpage.cgi @ 165

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

Use full URL for links since some people mentioning no Doms want to have a blank script_name

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.2 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_url}.$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.