From cfa018e04bfa0089d2ebe273fc765564c8f9246c Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Thu, 22 Apr 2010 13:36:44 +0200 Subject: [PATCH] Initial commit. --- .../Asset/Wobject/NewsletterCollection.pm | 93 ++++++++++++ lib/WebGUI/AssetAspect/Mailable.pm | 87 +++++++++++ sbin/install_newsletter.pl | 135 ++++++++++++++++++ 3 files changed, 315 insertions(+) create mode 100644 lib/WebGUI/Asset/Wobject/NewsletterCollection.pm create mode 100644 lib/WebGUI/AssetAspect/Mailable.pm create mode 100644 sbin/install_newsletter.pl diff --git a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm new file mode 100644 index 0000000..af38050 --- /dev/null +++ b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm @@ -0,0 +1,93 @@ +package WebGUI::Asset::Wobject::NewsletterCollection; + +use strict; +use warnings; + +use Class::C3; + +use base qw{ + WebGUI::AssetAspect::Mailable + WebGUI::Asset::Wobject +}; + +#---------------------------------------------------------------------------- +sub definition { + my $class = shift; + my $session = shift; + my $definition = shift; + my $i18n = WebGUI::International->new( $session, 'Asset_NewsletterCollection' ); + + tie my %properties, 'Tie::IxHash', ( + ); + + push @{ $definition }, { + assetName => $i18n->echo('newsletter'), + icon => 'newWobject.gif', + autoGenerateForms => 1, + tableName => 'NewsletterCollection', + className => 'WebGUI::Asset::Wobject::NewsletterCollection', + properties => \%properties + }; + + return $class->SUPER::definition( $session, $definition ); +} + +#---------------------------------------------------------------------------- +sub generateEmailContent { + my $self = shift; + my $session = $self->session; + my $form = $session->form; + + my $issueId = $form->get('issueId'); + my $issue = WebGUI::Asset->newByDynamicClass( $session, $issueId ); + + return "Invalid issueId [$issueId]" unless $issue; + + $issue->prepareView; + return $issue->view; +} + +##------------------------------------------------------------------- +#sub prepareView { +# my $self = shift; +# $self->SUPER::prepareView(); +# my $template = WebGUI::Asset::Template->new( $self->session, $self->get("templateIdView") ); +# $template->prepare($self->getMetaDataAsTemplateVariables); +# $self->{_viewTemplate} = $template; +#} + +#------------------------------------------------------------------- +sub view { + my $self = shift; + my $session = $self->session; + + my $issues = $self->getLineage( [ 'children' ], { + returnObjects => 1, + orderByClause => 'revisionDate desc', + } ); + + my $output = $self->getToolbar if $session->var->isAdminOn; + + return $output . "No issues yet" unless scalar @{ $issues }; + + $output .= '

Issues:

'; + + $issues->[0]->prepareView; + $output .= $issues->[0]->view; + + return $output; +} + +1; + diff --git a/lib/WebGUI/AssetAspect/Mailable.pm b/lib/WebGUI/AssetAspect/Mailable.pm new file mode 100644 index 0000000..e9853a9 --- /dev/null +++ b/lib/WebGUI/AssetAspect/Mailable.pm @@ -0,0 +1,87 @@ +package WebGUI::AssetAspect::Mailable; + +use strict; +use warnings; +use Class::C3; + +use WebGUI::Macro; + +#---------------------------------------------------------------------------- +sub definition { + my $class = shift; + my $session = shift; + my $definition = shift; + my $i18n = WebGUI::International->new( $session,'AssetAspect_Mailable' ); + + tie my %properties, 'Tie::IxHash', ( + ); + + push( @{ $definition }, { + autoGenerateForms => 1, + tableName => 'assetAspectMailable', + className => 'WebGUI::AssetAspect::Mailable', + properties => \%properties + } ); + + return $class->next::method( $session, $definition ); +} + +#---------------------------------------------------------------------------- +sub getEditTabs { + my $self = shift; + + return ( $self->next::method, [ 'mailable', 'Mailing list', 9 ] ); +} + +#---------------------------------------------------------------------------- +sub generateEmailContent { + WebGUI::Error::OverrideMe->throw; + return; +} + +#---------------------------------------------------------------------------- +sub getIssueList { + WebGUI::Error::OverrideMe->throw; + return; +} + +#---------------------------------------------------------------------------- +sub getRecipients { + WebGUI::Error::OverrideMe->throw; + return; +} + +#---------------------------------------------------------------------------- +sub processContentAsUser { + my $self = shift; + my $userId = shift; + my $session = $self->session; + my $currentUser = $session->user; + + # Become the desired user + $session->user( { userId => $userId } ); + + # Generate email body for this user + my $content = $self->generateEmailContent; + + # Process macros + WebGUI::Macro::process( $session, \$content ); + + # Become ourselves again. + $session->user( { userId => $currentUser->getId } ); + + return $content; +} + +#---------------------------------------------------------------------------- +sub www_previewEmail { + my $self = shift; + my $form = $self->session->form; + + my $userId = $form->get('userId'); + + return $self->processContentAsUser( $userId ); +} + +1; + diff --git a/sbin/install_newsletter.pl b/sbin/install_newsletter.pl new file mode 100644 index 0000000..88b0b7f --- /dev/null +++ b/sbin/install_newsletter.pl @@ -0,0 +1,135 @@ +#!/usr/bin/env perl + +$|++; # disable output buffering +our ( $webguiRoot, $configFile ); + +BEGIN { + $webguiRoot = ".."; + unshift (@INC, $webguiRoot."/lib"); +} + +use strict; +use Pod::Usage; +use Getopt::Long; +use WebGUI::Session; + +# Get parameters here, including $help +GetOptions( + 'configFile=s' => \$configFile, +); + +my $session = start( $webguiRoot, $configFile ); + +installMailableAspectTable( $session ); +installNewsletterCollection( $session ); + +finish($session); + +#---------------------------------------------------------------------------- +sub installMailableAspectTable { + my $session = shift; + print "\tCreating Mailable aspect table..."; + + $session->db->write(<db->write(<open($webguiRoot,$configFile); + $session->user({userId=>3}); + + ## If your script is adding or changing content you need these lines, otherwise leave them commented + # + # my $versionTag = WebGUI::VersionTag->getWorking($session); + # $versionTag->set({name => 'Name Your Tag'}); + # + ## + + return $session; +} + +#---------------------------------------------------------------------------- +sub finish { + my $session = shift; + + ## If your script is adding or changing content you need these lines, otherwise leave them commented + # + # my $versionTag = WebGUI::VersionTag->getWorking($session); + # $versionTag->commit; + ## + + $session->var->end; + $session->close; +} + +__END__ + + +=head1 NAME + +utility - A template for WebGUI utility scripts + +=head1 SYNOPSIS + + utility --configFile config.conf ... + + utility --help + +=head1 DESCRIPTION + +This WebGUI utility script helps you... + +=head1 ARGUMENTS + +=head1 OPTIONS + +=over + +=item B<--configFile config.conf> + +The WebGUI config file to use. Only the file name needs to be specified, +since it will be looked up inside WebGUI's configuration directory. +This parameter is required. + +=item B<--help> + +Shows a short summary and usage + +=item B<--man> + +Shows this document + +=back + +=head1 AUTHOR + +Copyright 2001-2009 Plain Black Corporation. + +=cut + +#vim:ft=perl