webgui_newsletter/sbin/install_newsletter.pl
2010-05-21 18:40:21 +02:00

255 lines
7.4 KiB
Perl

#!/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;
use List::MoreUtils qw{ insert_after_string };
# Get parameters here, including $help
GetOptions(
'configFile=s' => \$configFile,
);
my $session = start( $webguiRoot, $configFile );
installSubscriberAspectTable( $session );
installMailableAspectTable( $session );
installNewsletterCollection( $session );
installMailingTables( $session );
installNewsletterInAdminConsole( $session );
installNewsletterSettings( $session );
addPluginsToConfigFile( $session );
finish($session);
#----------------------------------------------------------------------------
sub installMailableAspectTable {
my $session = shift;
print "\tCreating Mailable aspect table...";
$session->db->write(<<EOSQL);
create table if not exists assetAspectMailable (
assetId char(22) binary not null,
revisionDate bigint(20) not null,
mailStyleTemplateId char(22) binary not null,
primary key( assetId, revisionDate )
);
EOSQL
print "Done.\n";
}
#----------------------------------------------------------------------------
sub installSubscriberAspectTable {
my $session = shift;
print "\tCreating Subscriber aspect table...";
$session->db->write(<<EOSQL);
create table if not exists assetAspectSubscriber (
assetId char(22) binary not null,
revisionDate bigint(20) not null,
subscriptionGroupId char(22) binary,
subscriptionEnabled tinyint(1) not null default 0,
alwaysConfirmSubscription tinyint(1) not null default 0,
allowAnonymousSubscription tinyint(1) not null default 0,
confirmationRequiredTemplateId char(22) binary,
confirmationEmailTemplateId char(22) binary,
confirmationEmailSubject varchar(255),
noMutationEmailTemplateId char(22) binary,
noMutationEmailSubject varchar(255),
primary key( assetId, revisionDate )
);
EOSQL
$session->db->write(<<EOSQL2);
create table if not exists assetAspectSubscriber_log (
assetId char(22) binary not null,
requestIp char(15) not null,
requestDate bigint(20) not null,
confirmationIp char(15),
confirmationDate bigint(20),
userId char(22) binary not null,
email varchar(255) not null,
type char(30) not null,
anonymous tinyint(1) not null,
confirmed tinyint(1) default 0,
code char(22) default null
);
EOSQL2
print "Done.\n";
}
#----------------------------------------------------------------------------
sub installNewsletterCollection {
my $session = shift;
print "\tCreating NewsletterCollection table...";
$session->db->write(<<EOSQL);
create table if not exists NewsletterCollection (
assetId char(22) binary not null,
revisionDate bigint(20) not null,
primary key( assetId, revisionDate )
);
EOSQL
print "Done.\n";
}
#----------------------------------------------------------------------------
sub installMailingTables {
my $session = shift;
print "\tInstalling Mailing table...";
use WebGUI::Mailing;
use WebGUI::Mailing::Email;
WebGUI::Mailing->crud_createOrUpdateTable( $session );
WebGUI::Mailing::Email->crud_createOrUpdateTable( $session );
print "Done\n";
}
#----------------------------------------------------------------------------
sub installNewsletterInAdminConsole {
my $session = shift;
print "\tAdding newsletter admin console section...";
$session->config->set( 'adminConsole/mailable', {
groupSetting => "admins",
icon => "newsletter.gif",
title => "Newsletter",
uiLevel => 7,
url => qq{^PageUrl("",newsletter=manage);},
} );
print "Done.\n";
}
#----------------------------------------------------------------------------
sub installNewsletterSettings {
my $session = shift;
my $setting = $session->setting;
print "\tInstalling newsletter setting slots...";
$setting->add( 'newsletterReturnDomain', undef ) unless $setting->has( 'newsletterReturnDomain' );
$setting->add( 'newsletterBounceScoreThreshold', 0 ) unless $setting->has( 'newsletterBounceScoreThreshold' );
print "Done.\n";
}
#----------------------------------------------------------------------------
sub addPluginsToConfigFile {
my $session = shift;
my $config = $session->config;
print "\tAdding plugins to config file...";
$config->set( 'assets/WebGUI::Asset::Wobject::NewsletterCollection', {
category => 'basic',
} );
my @handlers = @{ $session->config->get('contentHandlers') };
if ( !grep { $_ eq 'WebGUI::Content::NewsletterManager' } @handlers ) {
insert_after_string 'WebGUI::Content::Shop', 'WebGUI::Content::NewsletterManager', @handlers;
$session->config->set( 'contentHandlers', \@handlers );
}
my @workflows = @{ $session->config->get('workflowActivities/None') };
if ( !grep { $_ eq 'WebGUI::Workflow::Activity::SendQueuedMailings' } @workflows ) {
push @workflows, 'WebGUI::Workflow::Activity::SendQueuedMailings';
$session->config->set( 'workflowActivities/None', \@workflows );
}
print "Done.\n";
}
#----------------------------------------------------------------------------
sub start {
my $webguiRoot = shift;
my $configFile = shift;
my $session = WebGUI::Session->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