197 lines
6.0 KiB
Perl
197 lines
6.0 KiB
Perl
# Module of TWiki Enterprise Collaboration Platform, http://TWiki.org/
|
|
#
|
|
# Copyright (C) 1999-2007 TWiki Contributors.
|
|
# All Rights Reserved. TWiki Contributors
|
|
# are listed in the AUTHORS file in the root of this distribution.
|
|
# NOTE: Please extend that file, not this notice.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version. For
|
|
# more details read LICENSE in the root of this distribution.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
#
|
|
# As per the GPL, removal of this notice is prohibited.
|
|
|
|
package TWiki::Compatibility;
|
|
|
|
=pod
|
|
|
|
---+ package TWiki::Compatibility
|
|
|
|
Support for compatibility with old TWiki versions. Packaged
|
|
separately because 99.999999% of the time this won't be needed.
|
|
|
|
=cut
|
|
|
|
sub _upgradeCategoryItem {
|
|
my ( $catitems, $ctext ) = @_;
|
|
my $catname = '';
|
|
my $scatname = '';
|
|
my $catmodifier = '';
|
|
my $catvalue = '';
|
|
my @cmd = split( /\|/, $catitems );
|
|
my $src = '';
|
|
my $len = @cmd;
|
|
if( $len < '2' ) {
|
|
# FIXME
|
|
return ( $catname, $catmodifier, $catvalue )
|
|
}
|
|
my $svalue = '';
|
|
|
|
my $i;
|
|
my $itemsPerLine;
|
|
|
|
# check for CategoryName=CategoryValue parameter
|
|
my $paramCmd = '';
|
|
my $cvalue = ''; # was$query->param( $cmd[1] );
|
|
if( $cvalue ) {
|
|
$src = "<!---->$cvalue<!---->";
|
|
} elsif( $ctext ) {
|
|
foreach( split( /\r?\n/, $ctext ) ) {
|
|
if( /$cmd[1]/ ) {
|
|
$src = $_;
|
|
last;
|
|
}
|
|
}
|
|
}
|
|
|
|
if( $cmd[0] eq 'select' || $cmd[0] eq 'radio') {
|
|
$catname = $cmd[1];
|
|
$scatname = $catname;
|
|
#$scatname =~ s/[^a-zA-Z0-9]//g;
|
|
my $size = $cmd[2];
|
|
for( $i = 3; $i < $len; $i++ ) {
|
|
my $value = $cmd[$i];
|
|
$svalue = $value;
|
|
if( $src =~ /$value/ ) {
|
|
$catvalue = $svalue;
|
|
}
|
|
}
|
|
|
|
} elsif( $cmd[0] eq 'checkbox' ) {
|
|
$catname = $cmd[1];
|
|
$scatname = $catname;
|
|
#$scatname =~ s/[^a-zA-Z0-9]//g;
|
|
if( $cmd[2] eq 'true' || $cmd[2] eq '1' ) {
|
|
$i = $len - 4;
|
|
$catmodifier = 1;
|
|
}
|
|
$itemsPerLine = $cmd[3];
|
|
for( $i = 4; $i < $len; $i++ ) {
|
|
my $value = $cmd[$i];
|
|
$svalue = $value;
|
|
# I18N: FIXME - need to look at this, but since it's upgrading
|
|
# old forms that probably didn't use I18N, it's not a high
|
|
# priority.
|
|
if( $src =~ /$value[^a-zA-Z0-9\.]/ ) {
|
|
$catvalue .= ", " if( $catvalue );
|
|
$catvalue .= $svalue;
|
|
}
|
|
}
|
|
|
|
} elsif( $cmd[0] eq 'text' ) {
|
|
$catname = $cmd[1];
|
|
$scatname = $catname;
|
|
#$scatname =~ s/[^a-zA-Z0-9]//g;
|
|
$src =~ /<!---->(.*)<!---->/;
|
|
if( $1 ) {
|
|
$src = $1;
|
|
} else {
|
|
$src = '';
|
|
}
|
|
$catvalue = $src;
|
|
}
|
|
|
|
return ( $catname, $catmodifier, $catvalue )
|
|
}
|
|
|
|
=pod
|
|
|
|
---++ StaticMethod upgradeCategoryTable( $session, $web, $topic, $meta, $text ) -> $text
|
|
|
|
Upgrade old style category table
|
|
|
|
May throw TWiki::OopsException
|
|
|
|
=cut
|
|
|
|
sub upgradeCategoryTable {
|
|
my( $session, $web, $topic, $meta, $text ) = @_;
|
|
|
|
my $icat = $session->{templates}->readTemplate( 'twikicatitems' );
|
|
|
|
if( $icat ) {
|
|
my @items = ();
|
|
# extract category section and build category form elements
|
|
my( $before, $ctext, $after) = split( /<!--TWikiCat-->/, $text );
|
|
# cut TWikiCat part
|
|
$text = $before || '';
|
|
$text .= $after if( $after );
|
|
$ctext = '' if( ! $ctext );
|
|
|
|
my $ttext = '';
|
|
foreach( split( /\r?\n/, $icat ) ) {
|
|
my( $catname, $catmod, $catvalue ) = _upgradeCategoryItem( $_, $ctext );
|
|
if( $catname ) {
|
|
push @items, ( [$catname, $catmod, $catvalue] );
|
|
}
|
|
}
|
|
my $prefs = $session->{prefs};
|
|
my $listForms = $prefs->getWebPreferencesValue( 'WEBFORMS', $web );
|
|
$listForms =~ s/^\s*//go;
|
|
$listForms =~ s/\s*$//go;
|
|
my @formTemplates = split( /\s*,\s*/, $listForms );
|
|
my $defaultFormTemplate = '';
|
|
$defaultFormTemplate = $formTemplates[0] if ( @formTemplates );
|
|
|
|
if( ! $defaultFormTemplate ) {
|
|
$session->writeWarning( "Form: can't get form definition to convert category table " .
|
|
" for topic $web.$topic" );
|
|
foreach my $oldCat ( @items ) {
|
|
my $name = $oldCat->[0];
|
|
my $value = $oldCat->[2];
|
|
$meta->put( 'FORM', { name => '' } );
|
|
$meta->putKeyed( 'FIELD',
|
|
{ name => $name,
|
|
title => $name,
|
|
value => $value
|
|
} );
|
|
}
|
|
return;
|
|
}
|
|
|
|
my $def = new TWiki::Form($session, $web, $defaultFormTemplate );
|
|
$meta->put( 'FORM', { name => $defaultFormTemplate } );
|
|
|
|
foreach my $fieldDef ( @{$def->{fields}} ) {
|
|
my $value = '';
|
|
foreach my $oldCatP ( @items ) {
|
|
my @oldCat = @$oldCatP;
|
|
my $name = $oldCat[0] || '';
|
|
$name =~ s/[^A-Za-z0-9_\.]//go;
|
|
if( $name eq $fieldDef->{name} ) {
|
|
$value = $oldCat[2];
|
|
last;
|
|
}
|
|
}
|
|
$meta->putKeyed( 'FIELD',
|
|
{
|
|
name => $fieldDef->{name},
|
|
title => $fieldDef->{title},
|
|
value => $value,
|
|
} );
|
|
}
|
|
|
|
} else {
|
|
$session->writeWarning( "Form: get find category template twikicatitems for Web $web" );
|
|
}
|
|
return $text;
|
|
}
|
|
|
|
1;
|