The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/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" ) || "",
                    }
    );
}