#!/usr/bin/perl
use warnings;
use strict;
use sigtrap die => 'normal-signals';
use CGI;
use OpenGuides;
use OpenGuides::Config;
use OpenGuides::CGI;
use OpenGuides::JSON;
use OpenGuides::Utils;
use OpenGuides::Template;
my $config_file = $ENV{OPENGUIDES_CONFIG_FILE} || "wiki.conf";
my $config = OpenGuides::Config->new( file => $config_file );
my $guide = OpenGuides->new( config => $config );
my $wiki = $guide->wiki;
my $cgi = CGI->new();
my $action = $cgi->param('action') || '';
my $format = $cgi->param('format') || '';
if ( $action eq "set_preferences" ) {
set_preferences();
} elsif ( $action eq "show" && $format eq "json" ) {
my $json_writer = OpenGuides::JSON->new( wiki => $wiki,
config => $config );
print "Content-type: text/javascript\n\n";
print $json_writer->make_prefs_json();
} else {
$guide->display_prefs_form;
}
sub set_preferences {
my %prefs = OpenGuides::CGI->get_prefs_from_hash( $cgi->Vars );
my $prefs_cookie = OpenGuides::CGI->make_prefs_cookie(
config => $config,
%prefs,
);
my @cookies = ( $prefs_cookie );
# If they've asked not to have their recent changes visits tracked,
# clear any existing recentchanges cookie.
if ( ! $prefs{track_recent_changes_views} ) {
my $rc_cookie = OpenGuides::CGI->make_recent_changes_cookie(
config => $config,
clear_cookie => 1,
);
push @cookies, $rc_cookie;
}
# We have to send the username to OpenGuides::Template because they might
# have changed it, in which case it won't be in the cookie yet.
print OpenGuides::Template->output(
wiki => $wiki,
config => $config,
template => "preferences.tt",
cookies => \@cookies,
vars => {
not_editable => 1,
not_deletable => 1,
username => $prefs{username},
return_to_url => $cgi->param( "return_to_url" ) || "",
}
);
}