From f03fc6603fdf6081f177f94744086ed49e101e3f Mon Sep 17 00:00:00 2001 From: Len Kranendonk Date: Sat, 28 Feb 2004 07:53:38 +0000 Subject: [PATCH] Migrating the Navigation macro's --- docs/changelog/6.x.x.txt | 3 +- docs/upgrades/upgrade_5.9.9-6.0.0.pl | 272 ++++++++++++++++++++++++++- 2 files changed, 272 insertions(+), 3 deletions(-) diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index 679531c18..ddeb19bc5 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -81,6 +81,7 @@ webgui. http://www.dhtmlcentral.com) - Added a config file option for per-site International message caching. - Added an override in the user profile for toolbar icon set. - + - Migrated the navigation items (Thanks to Leendert Bottelberghs, Len + Kranendonk). diff --git a/docs/upgrades/upgrade_5.9.9-6.0.0.pl b/docs/upgrades/upgrade_5.9.9-6.0.0.pl index ee2288c6e..67c2dafa6 100644 --- a/docs/upgrades/upgrade_5.9.9-6.0.0.pl +++ b/docs/upgrades/upgrade_5.9.9-6.0.0.pl @@ -8,6 +8,7 @@ use strict; use WebGUI::Session; use WebGUI::SQL; use WebGUI::Forum; +use WebGUI::Macro; my $configFile; my $quiet; @@ -586,6 +587,256 @@ WebGUI::SQL->write("alter table Survey add column overviewTemplateId int not nul WebGUI::SQL->write("alter table Survey add column maxResponsesPerUser int not null default 1"); WebGUI::SQL->write("alter table Survey add column questionsPerResponse int not null default 9999999"); +#-------------------------------------------- +print "\tMigrating Navigation Macro's.\n" unless ($quiet); +my %dbFields = ( + template => { id => [ "templateId", "namespace" ], fields => [ "template" ] }, + wobject => { id => [ "wobjectId" ], fields => [ "description" ] }, + collateral => { id => [ "collateralId" ], fields => [ "parameters" ] } + ); +my %replace; +$replace{'C'} = { + columns => { + identifier=>'crumbTrail', depth=>1, method=>'self_and_ancestors', startAt=>'current', stopAtLevel=>'-1', + templateId=>'2', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>1, seperator=>'>' + }, + parameter => [ "seperator" ], + template => q{ + + + + +target="_blank" + href=""> + __SEPARATOR__ + +}, + }; +$replace{'FlexMenu'} = { + columns => { + identifier=>'FlexMenu', depth=>99, method=>'pedigree', startAt=>'current', stopAtLevel=>'2', + templateId=>'1', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ "depth" ] + }; +$replace{'M'} = { + 'columns'=>{ + identifier=>'currentMenuVertical', depth=>1, method=>'descendants', startAt=>'current', stopAtLevel=>'-1', + templateId=>'1', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ "depth" ] + }; +$replace{'m'} = { + 'columns'=>{ + identifier=>'currentMenuHorizontal', depth=>1, method=>'descendants', startAt=>'current',stopAtLevel=>'-1', + templateId=>'3', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'·' + }, + 'parameter'=>[ "seperator" ], + template=>q{ + + + + +target="_blank" + href=""> + __SEPARATOR__ + +}, + }; +$replace{'PreviousDropMenu'} = { + 'columns'=>{ + identifier=>'PreviousDropMenu', depth=>99, method=>'self_and_sisters', startAt=>'current',stopAtLevel=>'-1', + templateId=>'4', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ ] + }; +$replace{'P'} = { + 'columns'=>{ + identifier=>'previousMenuVertical', depth=>1, method=>'descendants', startAt=>'mother', stopAtLevel=>'-1', + templateId=>'1', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ "depth" ] + }; +$replace{'p'} = { + 'columns'=>{ + identifier=>'previousMenuHorizontal', depth=>1, method=>'descendants', startAt=>'mother', stopAtLevel=>'-1', + templateId=>'3', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'·' + }, + 'parameter'=>[ "seperator" ], + template=>q{ + + + + +target="_blank" + href=""> + __SEPARATOR__ + +}, + }; +$replace{'rootmenu'} = { + 'columns'=>{ + identifier=>'rootmenu', depth=>1, method=>'daughters', startAt=>'root', stopAtLevel=>'-1', + templateId=>'3', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'·' + }, + 'parameter'=>[ "seperator" ], + template=>q{ + + + + +target="_blank" + href=""> + __SEPARATOR__ + +}, + }; +$replace{'RootTab'} = { + 'columns'=>{ + identifier=>'RootTab', depth=>99, method=>'daughters', startAt=>'root', stopAtLevel=>'-1', + templateId=>'5', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ ] + }; +$replace{'SpecificDropMenu'} = { + 'columns'=>{ + identifier=>'SpecificDropMenu', depth=>3, method=>'descendants', startAt=>'home', stopAtLevel=>'-1', + templateId=>'4', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ "startAt", "depth" ] + }; +$replace{'S'} = { + 'columns'=>{ + identifier=>'SpecificMenuVertical', depth=>3, method=>'descendants', startAt=>'home', stopAtLevel=>'-1', + templateId=>'1', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ "startAt", "depth" ] + }; +$replace{'s'} = { + 'columns'=>{ + identifier=>'SpecificMenuHorizontal', depth=>3, method=>'descendants', startAt=>'home', stopAtLevel=>'-1', + templateId=>'3', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ "startAt", "seperator" ], + template=>q{ + + + + +target="_blank" + href=""> + __SEPARATOR__ + +}, + + }; +$replace{'TopDropMenu'} = { + 'columns'=>{ + identifier=>'TopDropMenu', depth=>0, method=>'self_and_sisters', startAt=>'top', stopAtLevel=>'-1', + templateId=>'4', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ ] + }; +$replace{'T'} = { + 'columns'=>{ + identifier=>'TopLevelMenuVertical', depth=>0, method=>'self_and_sisters', startAt=>'top', stopAtLevel=>'-1', + templateId=>'1', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'' + }, + 'parameter'=>[ "depth" ] + }; +$replace{'t'} = { + 'columns'=>{ + identifier=>'TopLevelMenuHorizontal', depth=>0, method=>'self_and_sisters', startAt=>'top', stopAtLevel=>'-1', + templateId=>'3', showSystemPages=>0, showHiddenPages=>0, showUnprivilegedPages=>0, reverse=>0, seperator=>'·' + }, + 'parameter'=>[ "seperator" ], + template=>q{ + + + + +target="_blank" + href=""> + __SEPARATOR__ + +}, + + }; + +my ($sth, $data, $code, $table, $column, %identifier); +foreach $table (keys %dbFields){ + $sth = WebGUI::SQL->read("SELECT * FROM $table "); + die "Cannot read from table $table " if ($!); + while ($data = $sth->hashRef){ + foreach $column (@{$dbFields{$table}{fields}}){ + $code = $data->{$column}; + while ($code =~ /$WebGUI::Macro::nestedMacro/gs){ + my ($macro, $searchString, $params) = ($1, $2, $3); + next if ($searchString =~ /^\d+$/); # don't process ^0; ^1; ^2; etc. + next if ($searchString =~ /^\-$/); # don't process ^-; + if ($params ne "") { + $params =~ s/(^\(|\)$)//g; # remove parenthesis + $params = WebGUI::Macro::process($params); # recursive process params + } + my @param = WebGUI::Macro::getParams($params); + if($replace{$searchString}){ + my $repNav = $replace{$searchString}; + my $replaceId = $macro.'_'.join('_',@param); + # print "\nReplacing macro: $macro\n"; + for(my $i=0; $i{columns}->{$repNav->{parameter}->[$i]} = $param[$i]; + # print "Found parameters:\n"; + # print "\t".$repNav->{parameter}->[$i].": ".$repNav->{columns}->{$repNav->{parameter}->[$i]}."\n"; + } + my $doTemplate = ($repNav->{template} && $repNav->{columns}->{seperator}); + if($doTemplate) { + if($identifier{cachedTemplate}{$replaceId."_".$repNav->{columns}->{seperator}}) { + $repNav->{columns}->{templateId} = + $identifier{cachedTemplate}{$replaceId."_".$repNav->{columns}->{seperator}}; + } else { + $repNav->{template} =~ s/__SEPARATOR__/$repNav->{columns}->{seperator}/g; + ($repNav->{columns}->{templateId}) = WebGUI::SQL->quickArray("select max(templateId) + from template where namespace=".quote('Navigation')); + if ($repNav->{columns}->{templateId} > 999) { + $repNav->{columns}->{templateId}++; + } else { + $repNav->{columns}->{templateId} = 1000; + } + } + } + unless ($identifier{cachedConfig}{$replaceId}) { + $identifier{cachedConfig}{$replaceId} = addNavigation($repNav->{columns}); + } + if($doTemplate && + ! $identifier{cachedTemplate}{$replaceId."_".$repNav->{columns}->{seperator}}) { + WebGUI::SQL->write("insert into template (templateId,namespace,name,template) values + ($repNav->{columns}->{templateId}, ".quote('Navigation').", ". + quote($identifier{$replaceId}).", ".quote($repNav->{template}).")"); + } + my $replacement = "^Navigation($identifier{cachedConfig}{$replaceId});"; + # print "\tReplacing macro $macro with $replacement "; + $code =~ s/\Q$macro/$replacement/ges; + } + } + my ($update, @where); + $update = "UPDATE $table SET $column=".quote($code)." WHERE "; + foreach (@{$dbFields{$table}{id}}){ + push (@where, $_."=".quote($data->{$_})); + } + $update .= join (" AND ", @where); + WebGUI::SQL->write($update); + } + } + $sth->finish; +} + + WebGUI::Session::close(); @@ -632,5 +883,22 @@ sub _positionFormat6x { '; return $newPositionCode; } - - +#-------------------------------------------- +sub addNavigation { + my $properties = shift; +# use Data::Dumper; print "\n\n". Dumper($properties); + my $navId = getNextId("navigationId"); + my $identifier = $properties->{identifier}."_".$navId; + WebGUI::SQL->write("INSERT INTO Navigation(navigationId, identifier) VALUES ($navId, ".quote($identifier).")"); + my ($update, @set); + $update = "UPDATE Navigation SET "; + foreach (keys %{$properties}){ + next if (/seperator/i); + push (@set, $_."=".quote($properties->{$_})) unless($_ eq "identifier"); + } + $update .= join(",", @set); + $update .= " WHERE navigationId=".quote($navId); + WebGUI::SQL->write($update); + return $identifier; +} +#--------------------------------------------