webgui/docs/upgrades/upgrade_7.7.6-7.7.7.pl
Colin Kuskie d6e242f8b2 Duplicate the old RSS asset fix right before the upgrade sub that causes problems,
to catch users who have upgraded past the original stopping point.
2009-07-07 19:30:01 +00:00

369 lines
13 KiB
Perl

#!/usr/bin/env perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
our ($webguiRoot);
BEGIN {
$webguiRoot = "../..";
unshift (@INC, $webguiRoot."/lib");
}
use strict;
use Getopt::Long;
use WebGUI::Session;
use WebGUI::Storage;
use WebGUI::Asset;
use WebGUI::FilePump::Bundle;
use WebGUI::Utility;
my $toVersion = '7.7.7';
my $quiet; # this line required
my $session = start(); # this line required
removeDanglingOldRssAssets( $session );
addOgoneToConfig( $session );
addUseEmailAsUsernameToSettings( $session );
alterVATNumberTable( $session );
addRedirectAfterLoginUrlToSettings( $session );
addSurveyTestResultsTemplateColumn( $session );
updateSurveyTest( $session );
fixSMSUserProfileI18N($session);
addEmsScheduleColumns ($session);
addMapAsset( $session );
installFilePumpHandler($session);
installFilePumpTable($session);
installFilePumpAdminGroup($session);
addMatrixMaxGroup($session);
addUserControlWorkflows($session);
finish($session); # this line required
#----------------------------------------------------------------------------
sub removeDanglingOldRssAssets {
my $session = shift;
print "\tChecking for uses of RSSCapable...\n" unless $quiet;
my @rssCapableClasses = $session->db->buildArray('SELECT className FROM RSSCapable INNER JOIN asset ON RSSCapable.assetId=asset.assetId GROUP BY className');
if (@rssCapableClasses) {
warn "\t\tThis site is using the assets\n\t\t\t" . join(', ', @rssCapableClasses) . "\n\t\twhich use the RSSCapable class! Support RSSCapable has been dropped and it will no longer be maintained.\n";
}
else {
print "\t\tNot used, removing leftover assets, if any.\n" unless $quiet;
$session->db->write(q|DELETE FROM assetData WHERE assetId IN (SELECT assetId FROM ASSET WHERE className="WebGUI::Asset::RssFromParent")|);
$session->db->write(q|DELETE FROM asset WHERE className = "WebGUI::Asset::RssFromParent"|);
}
print "\tDone.\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub addMatrixMaxGroup {
my $session = shift;
print "\tAdding maxComparisonsGroup to Matrix..." unless $quiet;
$session->db->write("alter table Matrix add column maxComparisonsGroup char(22);");
$session->db->write("alter table Matrix add column maxComparisonsGroupInt integer;");
print "Done.\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub addUserControlWorkflows {
my $session = shift;
print "\tAdding Activate, Deactivate, Delete User workflow activities..." unless $quiet;
$session->config->addToArray('workflowActivities/WebGUI::User', 'WebGUI::Workflow::Activity::ActivateUser');
$session->config->addToArray('workflowActivities/WebGUI::User', 'WebGUI::Workflow::Activity::DeactivateUser');
$session->config->addToArray('workflowActivities/WebGUI::User', 'WebGUI::Workflow::Activity::DeleteUser');
print " Done.\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub fixSMSUserProfileI18N {
my $session = shift;
print "\tFixing bad I18N in SMS user profile fields..." unless $quiet;
my $field = WebGUI::ProfileField->new($session, 'receiveInboxEmailNotifications');
my $properties = $field->get();
$properties->{label} = q!WebGUI::International::get('receive inbox emails','WebGUI')!;
$field->set($properties);
$field = WebGUI::ProfileField->new($session, 'receiveInboxSmsNotifications');
$properties = $field->get();
$properties->{label} = q!WebGUI::International::get('receive inbox sms','WebGUI')!;
$field->set($properties);
print "Done\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub addOgoneToConfig {
my $session = shift;
print "\tAdding Ogone payment plugin..." unless $quiet;
$session->config->addToArray('paymentDrivers', 'WebGUI::Shop::PayDriver::Ogone');
print "Done\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub addUseEmailAsUsernameToSettings {
my $session = shift;
print "\tAdding webguiUseEmailAsUsername to settings \n" unless $quiet;
$session->db->write("insert into settings (name, value) values ('webguiUseEmailAsUsername',0)");
print "Done.\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub addRedirectAfterLoginUrlToSettings {
my $session = shift;
print "\tAdding redirectAfterLoginUrl to settings \n" unless $quiet;
$session->db->write("insert into settings (name, value) values ('redirectAfterLoginUrl',NULL)");
print "Done.\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub alterVATNumberTable {
my $session = shift;
print "\tAdapting VAT Number table..." unless $quiet;
$session->db->write('alter table tax_eu_vatNumbers change column approved viesValidated tinyint(1)');
$session->db->write('alter table tax_eu_vatNumbers add column approved tinyint(1)');
print "Done\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub addSurveyTestResultsTemplateColumn {
my $session = shift;
print "\tAdding columns for Survey Test Results Template..." unless $quiet;
my $sth = $session->db->read('describe Survey testResultsTemplateId');
if (! defined $sth->hashRef) {
$session->db->write("alter table Survey add column `testResultsTemplateId` char(22)");
}
print "Done\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub updateSurveyTest {
my $session = shift;
print "\tUpdate Survey test table, via Crud... " unless $quiet;
use WebGUI::Asset::Wobject::Survey::Test;
WebGUI::Asset::Wobject::Survey::Test->crud_updateTable($session);
print "DONE!\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub installFilePumpAdminGroup {
my $session = shift;
print "\tAdding FilePump admin group setting... \n" unless $quiet;
##Content Handler
#if (! $session->setting->has('groupIdAdminFilePump')) {
$session->setting->add('groupIdAdminFilePump','8');
print "\tAdded FilePump admin group ... \n" unless $quiet;
#}
print "Done.\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub addEmsScheduleColumns {
my $session = shift;
print "\tAdding columns for the EMS Schedule table..." unless $quiet;
$session->db->write( 'alter table EventManagementSystem add column scheduleTemplateId char(22)' );
$session->db->write( 'alter table EventManagementSystem add column scheduleColumnsPerPage integer' );
print "Done\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub installFilePumpHandler {
my $session = shift;
print "\tAdding FilePump content handler... \n" unless $quiet;
##Content Handler
my $contentHandlers = $session->config->get('contentHandlers');
$session->config->addToHash( 'macros', { FilePump => 'FilePump' });
my $handlers = $session->config->get('contentHandlers');
my $newHandlers = [];
if (!isIn('WebGUI::Content::FilePump', @{ $handlers })) {
foreach my $handler (@{ $handlers }) {
if ($handler eq 'WebGUI::Content::Operation') {
push @{ $newHandlers }, 'WebGUI::Content::FilePump';
}
push @{ $newHandlers }, $handler;
}
}
else {
$newHandlers = $handlers;
}
$session->config->set('contentHandlers', $newHandlers);
##Admin Console
$session->config->addToHash('adminConsole', 'filePump', {
"icon" => "filePump.png",
"groupSetting" => "groupIdAdminFilePump",
"uiLevel" => 5,
"url" => "^PageUrl(\"\",op=filePump);",
"title" => "^International(File Pump,FilePump);"
});
##Setting for custom group
print "Done.\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub installFilePumpTable {
my $session = shift;
print "\tAdding FilePump database table via CRUD... \n" unless $quiet;
WebGUI::FilePump::Bundle->crud_createTable($session);
print "Done.\n" unless $quiet;
}
#----------------------------------------------------------------------------
# Add the map asset
sub addMapAsset {
my $session = shift;
print "\tAdding Google Map asset..." unless $quiet;
# Map asset
$session->db->write(<<'ENDSQL');
CREATE TABLE IF NOT EXISTS Map (
assetId CHAR(22) BINARY NOT NULL,
revisionDate BIGINT NOT NULL,
groupIdAddPoint CHAR(22) BINARY,
mapApiKey TEXT,
mapHeight CHAR(12),
mapWidth CHAR(12),
startLatitude FLOAT,
startLongitude FLOAT,
startZoom TINYINT UNSIGNED,
templateIdEditPoint CHAR(22) BINARY,
templateIdView CHAR(22) BINARY,
templateIdViewPoint CHAR(22) BINARY,
workflowIdPoint CHAR(22) BINARY,
PRIMARY KEY (assetId, revisionDate)
);
ENDSQL
# MapPoint asset
$session->db->write(<<'ENDSQL');
CREATE TABLE IF NOT EXISTS MapPoint (
assetId CHAR(22) BINARY NOT NULL,
revisionDate BIGINT NOT NULL,
latitude FLOAT,
longitude FLOAT,
website VARCHAR(255),
address1 VARCHAR(255),
address2 VARCHAR(255),
city VARCHAR(255),
state VARCHAR(255),
zipCode VARCHAR(255),
country VARCHAR(255),
phone VARCHAR(255),
fax VARCHAR(255),
email VARCHAR(255),
storageIdPhoto CHAR(22) BINARY,
userDefined1 TEXT,
userDefined2 TEXT,
userDefined3 TEXT,
userDefined4 TEXT,
userDefined5 TEXT,
PRIMARY KEY (assetId, revisionDate)
);
ENDSQL
# Add to assets
$session->config->addToHash( "assets", 'WebGUI::Asset::Wobject::Map', {
"category" => "basic",
});
print "Done!\n" unless $quiet;
}
# -------------- DO NOT EDIT BELOW THIS LINE --------------------------------
#----------------------------------------------------------------------------
# Add a package to the import node
sub addPackage {
my $session = shift;
my $file = shift;
# Make a storage location for the package
my $storage = WebGUI::Storage->createTemp( $session );
$storage->addFileFromFilesystem( $file );
# Import the package into the import node
my $package = WebGUI::Asset->getImportNode($session)->importPackage( $storage );
# Turn off the package flag, and set the default flag for templates added
my $assetIds = $package->getLineage( ['self','descendants'] );
for my $assetId ( @{ $assetIds } ) {
my $asset = WebGUI::Asset->newByDynamicClass( $session, $assetId );
if ( !$asset ) {
print "Couldn't instantiate asset with ID '$assetId'. Please check package '$file' for corruption.\n";
next;
}
my $properties = { isPackage => 0 };
if ($asset->isa('WebGUI::Asset::Template')) {
$properties->{isDefault} = 1;
}
$asset->update( $properties );
}
return;
}
#-------------------------------------------------
sub start {
my $configFile;
$|=1; #disable output buffering
GetOptions(
'configFile=s'=>\$configFile,
'quiet'=>\$quiet
);
my $session = WebGUI::Session->open($webguiRoot,$configFile);
$session->user({userId=>3});
my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->set({name=>"Upgrade to ".$toVersion});
return $session;
}
#-------------------------------------------------
sub finish {
my $session = shift;
updateTemplates($session);
my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->commit;
$session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")");
$session->close();
}
#-------------------------------------------------
sub updateTemplates {
my $session = shift;
return undef unless (-d "packages-".$toVersion);
print "\tUpdating packages.\n" unless ($quiet);
opendir(DIR,"packages-".$toVersion);
my @files = readdir(DIR);
closedir(DIR);
my $newFolder = undef;
foreach my $file (@files) {
next unless ($file =~ /\.wgpkg$/);
# Fix the filename to include a path
$file = "packages-" . $toVersion . "/" . $file;
addPackage( $session, $file );
}
}
#vim:ft=perl