package DADA::Template::HTML; use lib qw(./ ../); use DADA::Config; use DADA::App::Guts; my $Yeah_Root_Login = 0; use Fcntl qw( O_WRONLY O_TRUNC O_CREAT O_RDWR O_RDONLY LOCK_EX LOCK_SH LOCK_NB ); require Exporter; @ISA = qw(Exporter); @EXPORT = qw( admin_html_header admin_html_footer default_template check_if_template_exists available_templates open_template the_html submit_form archive_send_form make_feature_menu default_css ); use strict; use vars qw(@EXPORT $VERSION); use CGI; my $q = CGI->new; $q->param('flavor', $q->param('f')) if ! defined($q->param('flavor')); =pod =head1 NAME DADA::Template::HTML =head1 SYNOPSIS Module for generating HTML templates for lists and administration =head2 DESCRIPTION use DADA::Template::HTML; #print out a admin header template: print admin_html_header(-Title => "hola! I am a list header", -List => $list, ); # now, print the admin footer template: print admin_html_footer(-List => $list); # give me the default Dada Mail list template my $default_template = default_template($PROGRAM_URL); # do I have a template? my $template_exists = check_if_template_exists(-List => $list); print "my template exists!!" if $template_exists >= 1; # what lists do have templates? my @list_templates = available_templates(); # open up my template my $list_template = open_template(-List => $list); # print a list template header print the_html(-List => $list, -Path => 'header', ); # print the list template footer print the_html(-List => $list, -Path => 'footer', -Site_Name => "justin's site", -Site_URL => "http://skazat.com", ); # print a generic submit form print submit_form(-Submit => 'ZOOOOOOOOOM!', -Reset => 'stop.', -Align => 'left', -Width => '100%' ); # the 'send this archived message to a friend" link maker # print archive_send_link($list, $message_id); =cut #HTML Templates for Dada Mail sub admin_html_header { my %args = (-Title => "", -List => "", -Root_Login => 0, -Form => 1, @_); # This is horrible. $Yeah_Root_Login = 1 if $args{-Root_Login} == 1; require DADA::Template::Widgets::Admin_Menu; my $ADMIN_MENU; require DADA::MailingList::Settings; my $ls = DADA::MailingList::Settings->new(-List => $args{-List}); my $li = $ls->get; if($Yeah_Root_Login == 1){ $ADMIN_MENU = DADA::Template::Widgets::Admin_Menu::make_admin_menu('superuser'); }else{ $ADMIN_MENU = DADA::Template::Widgets::Admin_Menu::make_admin_menu('user', $li); } my $title = $args{-Title}; my $list = $args{-List}; my $root_login_message = ''; if($args{-Root_Login} == 1){ $root_login_message = 'Logged In as Root'; } my $header_part; if($ADMIN_TEMPLATE){ my ($saved_header, $saved_footer) = fetch_admin_template($ADMIN_TEMPLATE); $header_part = $saved_header; }else{ require DADA::Template::Widgets; my ($a_h, $a_f) = split(/\[content\]/, DADA::Template::Widgets::screen(-screen => 'default_admin_template.tmpl')); $header_part = $a_h; } my $login_switch_widget = ''; if($Yeah_Root_Login){ require DADA::Template::Widgets; $login_switch_widget = DADA::Template::Widgets::login_switch_widget({-list => $args{-List}, ($q->param('flavor') ? (-f => $q->param('flavor')) : ())}); } $header_part = $header_part . qq{
} unless $args{-Form} == 0; my $js = admin_js(); $header_part =~ s/\[login_switch_widget\]/$login_switch_widget/g; $header_part =~ s/<\!--\[javascript\]-->/$js/g; $header_part =~ s/\[javascript\]/$js/g; $header_part =~ s/\[admin_menu\]/$ADMIN_MENU/g; $header_part =~ s/\[title\]/$title/g; $header_part =~ s/\[list\]/$list/g; $header_part =~ s/\[list_name\]/$li->{list_name}/g; $header_part =~ s/\[ver\]/$VER/g; $header_part =~ s/\[program_url\]/$S_PROGRAM_URL/g; $header_part =~ s/\[root_login_message\]/$root_login_message/g; $header_part =~ s/\[program_name\]/$PROGRAM_NAME/g; $header_part = $q->header(-type => 'text/html', -charset => $HTML_CHARSET) . $header_part; return $header_part; } ############################################################################# # holds the default admin template. footer # ############################################################################# sub admin_html_footer { my %args = (-Form => 1, -Root_Login => 0, -List => '', @_); my $footer_part; # This is horrible. $Yeah_Root_Login = 1 if $args{-Root_Login} == 1; require DADA::Template::Widgets::Admin_Menu; my $ADMIN_MENU; require DADA::MailingList::Settings; my $ls = DADA::MailingList::Settings->new(-List => $args{-List}); my $li = $ls->get; if($Yeah_Root_Login == 1){ $ADMIN_MENU = DADA::Template::Widgets::Admin_Menu::make_admin_menu('superuser', $li); }else{ $ADMIN_MENU = DADA::Template::Widgets::Admin_Menu::make_admin_menu('user', $li); } if($ADMIN_TEMPLATE){ my ($saved_header, $saved_footer) = fetch_admin_template($ADMIN_TEMPLATE); $footer_part = $saved_footer; }else{ require DADA::Template::Widgets; my ($a_h, $a_f) = split(/\[content\]/, DADA::Template::Widgets::screen(-screen => 'default_admin_template.tmpl')); $footer_part = $a_f; } my $login_switch_widget = ''; if($Yeah_Root_Login){ require DADA::Template::Widgets; $login_switch_widget = DADA::Template::Widgets::login_switch_widget({-list => $args{-List}, ($q->param('flavor') ? (-f => $q->param('flavor')) : ())}); } $footer_part =~ s/\[program_url\]/$PROGRAM_URL/g; $footer_part =~ s/\[login_switch_widget\]/$login_switch_widget/g; $footer_part =~ s/\[admin_menu\]/$ADMIN_MENU/g; $footer_part =~ s/\[list_name\]/$li->{list_name}/g; $footer_part =~ s/\[list\]/$args{-List}/g; $footer_part = '
' . $footer_part unless $args{-Form} == 0; return $footer_part; } sub default_template { my $PROGRAM_URL = shift; # what was this for? if(!$USER_TEMPLATE){ require DADA::Template::Widgets; my $default_template = DADA::Template::Widgets::screen(-screen => 'default_list_template.tmpl'); return $default_template; }else{ if($USER_TEMPLATE =~ m/^http/){ return open_template_from_url(-URL => $USER_TEMPLATE); }else{ return fetch_user_template($USER_TEMPLATE); } } } ###################################################################### # templates and such that give the look of dada # ###################################################################### sub check_if_template_exists { ############################################################################# # dadautility <+> $template_exists <+> sees if the list has a template # ############################################################################# my %args = (-List => undef, @_); if($args{-List}){ my(@available_templates) = &available_templates; my $template_exists = 0; foreach my $hopefuls(@available_templates) { if ($hopefuls eq $args{-List}) { $template_exists++; } } return $template_exists; }else{ return 0; } } sub available_templates { my @all; my @available_templates; my $present_template = ""; opendir(TEMPLATES, $TEMPLATES) or die "$PROGRAM_NAME $VER error, can't open $TEMPLATES to read: $!"; while(defined($present_template = readdir TEMPLATES)) { next if $present_template =~ /^\.\.?$/; $present_template =~ s(^.*/)(); push(@all, $present_template); } closedir(TEMPLATES); foreach my $all_those(@all) { if($all_those =~ m/.*\.template/) { $all_those =~ s/\.template$//; push(@available_templates, $all_those) } } @available_templates = sort(@available_templates); my %seen = (); my @unique = grep {! $seen{$_} ++ } @available_templates; return @unique; } sub fetch_admin_template { my $file = shift; my $list_template; if($file =~ m/^http/){ $list_template = open_template_from_url(-URL => $file); }else{ if($file !~ m/^\//){ $file = $TEMPLATES .'/'. $file; } sysopen(TEMPLATE,"$file", O_RDONLY|O_CREAT, $FILE_CHMOD) or die "$PROGRAM_NAME $VER Error: Can't open list template for reading at '$file': $!"; flock(TEMPLATE, LOCK_SH) or warn "$PROGRAM_NAME $VER Error: Can't create a shared lock for template file at '$file': $!"; { local $/ = undef; $list_template =