340 lines
10 KiB
Perl
340 lines
10 KiB
Perl
package TTXUpgrade;
|
|
#
|
|
# This module is a part of Trouble Ticket Express package
|
|
# http://www.troubleticketexpress.com
|
|
#
|
|
# COPYRIGHT: 2005-2006, United Web Coders
|
|
# http://www.unitedwebcoders.com
|
|
#
|
|
# $Revision: 181 $
|
|
# $Date: 2006-06-07 02:20:54 -0400 (Wed, 07 Jun 2006) $
|
|
#
|
|
|
|
$TTXUpgrade::VERSION='2.22';
|
|
BEGIN {
|
|
$TTXUpgrade::REVISION = '$Revision: 181 $';
|
|
if ($TTXUpgrade::REVISION =~ /(\d+)/) {
|
|
$TTXUpgrade::REVISION = $1;
|
|
}
|
|
};
|
|
use strict;
|
|
require TTXSetup;
|
|
|
|
my %upgradepath = (
|
|
'2.182' => { ver => '2.19', code => \&upgrade219 },
|
|
'2.19' => { ver => '2.191', code => \&upgrade2191 },
|
|
'2.191' => { ver => '2.20', code => \&upgrade220 },
|
|
'2.20' => { ver => '2.21', code => \&upgrade221 },
|
|
'2.21' => { ver => '2.22', code => \&upgrade222 },
|
|
);
|
|
|
|
# ====================================================================== upgrade
|
|
|
|
sub upgrade {
|
|
my $cfg = $_[0];
|
|
my $v = $cfg->get('ttx.version');
|
|
if ($v eq undef) {
|
|
if (-f $cfg->get('basedir'). "/templates/ticketed.html") {
|
|
$v = '2.182';
|
|
}
|
|
}
|
|
for (my $ver = $upgradepath{$v}; $ver ne undef ; $ver = $upgradepath{$ver->{ver}}) {
|
|
my $err = &{$ver->{code}}($cfg);
|
|
if ($err ne undef) {
|
|
return $err;
|
|
}
|
|
$cfg->set('ttx.version', $ver->{ver});
|
|
$cfg->save();
|
|
}
|
|
return undef;
|
|
}
|
|
|
|
# =================================================================== upgrade219
|
|
|
|
sub upgrade219 {
|
|
my $cfg = $_[0];
|
|
my $fn = $cfg->get('basedir'). "/templates/header.shtml";
|
|
return "File $fn does not exist" if ! -f $fn;
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
my $buff = join('', <F>);
|
|
if ($buff !~ /\btd\.txt\s+\{/) {
|
|
my $addthis = <<EOT;
|
|
td.txt {
|
|
padding-right: 4pt;
|
|
padding-left: 4pt;
|
|
padding-top: 2pt;
|
|
padding-bottom: 1pt;
|
|
border-width:1px;
|
|
border-style:solid;
|
|
border-top-width:0;
|
|
border-bottom-width:0;
|
|
border-right-width:0;
|
|
font-size : 8pt;
|
|
border-color: #FFF;
|
|
color: #666;
|
|
text-align: left;
|
|
}
|
|
EOT
|
|
$buff =~ s/<\/style>/$addthis\n<\/style>/;
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
truncate(F, tell(F));
|
|
}
|
|
close(F);
|
|
$fn = $cfg->get('basedir'). "/templates/helpdesk.html";
|
|
return "File $fn does not exist" if ! -f $fn;
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
$buff = join('', <F>);
|
|
if ($buff =~ /<\s*input\s+type="?hidden"?\s+name="?qwindow"?\s+value="?\(%INPUT_qwindow%\)"?\s*>/) {
|
|
$buff =~ s/<\s*input\s+type="?hidden"?\s+name="?qwindow"?\s+value="?\(%INPUT_qwindow%\)"?\s*>//;
|
|
my $addthis = <<EOT;
|
|
<tr>
|
|
<td align=left>
|
|
<span class=sm>
|
|
Show <input type=text size=3 class=sm name=qwindow value=(%INPUT_qwindow%)> tickets per page.
|
|
Include abstracts <input type=checkbox class=sm name=abstract value=1(%CHECKABSTRACT%)>
|
|
</span>
|
|
</td>
|
|
<td align=right>
|
|
<input type=submit value=Search> <input type=submit name=reset value="Show all">
|
|
</td>
|
|
</tr>
|
|
EOT
|
|
my $findthis = '<tr>\s*<td[^>]*><input\s+type="?submit"?[^>]*>[^<]*<input\s+type="?submit"?[^>]*>[^<]*</td>[^<]*</tr>';
|
|
$buff =~ s/$findthis/$addthis\n/i;
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
truncate(F, tell(F));
|
|
}
|
|
close(F);
|
|
$fn = $cfg->get('basedir'). "/templates/ticket.html";
|
|
return "File $fn does not exist" if ! -f $fn;
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
$buff = join('', <F>);
|
|
if ($buff =~ /width=700,\s*height=300,\s*resizable/) {
|
|
$buff =~ s/width=700,\s*height=300,\s*resizable/width=700,height=360,resizable/;
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
truncate(F, tell(F));
|
|
}
|
|
close(F);
|
|
$fn = $cfg->get('basedir'). "/templates/answerlib.html";
|
|
return "File $fn does not exist" if ! -f $fn;
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
$buff = join('', <F>);
|
|
if ($buff !~ /showcat/) {
|
|
$buff =~ s/-->\s*<\/style>/.lbl { font-size: 9pt; font-weight: 700;}-->\n<\/style>/;
|
|
my $addthis = <<EOT;
|
|
<script language=Javascript>
|
|
<!--
|
|
function showcat(id) {
|
|
location.href='(%ENV_SCRIPT_NAME%)?cmd=answerlib&sid=(%INPUT_sid%)&style=(%INPUT_style%)&cat='+escape(id);
|
|
return false;
|
|
}
|
|
// -->
|
|
</script>
|
|
</head>
|
|
EOT
|
|
$buff =~ s/<\/head>/$addthis/i;
|
|
$buff =~ s/\(%ANSWERLIBMSG%\)\s*<br>/(%ANSWERLIBMSG%)\n/;
|
|
$addthis = <<EOT;
|
|
<table cellpadding=1 cellspacing=1>
|
|
<tr>
|
|
<td>
|
|
<select name=cat size=1 OnChange="return showcat(this[this.selectedIndex].value);">
|
|
(%CATSELECTOR%)
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<select name=answer size=10 OnChange="return showanswer(this[this.selectedIndex].value);">
|
|
(%ANSWERSELECTOR%)
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
EOT
|
|
$buff =~ s/<select\s+name="?answer"?[^<]*<\/select>/$addthis/i;
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
truncate(F, tell(F));
|
|
}
|
|
close(F);
|
|
$fn = $cfg->get('basedir'). "/templates/newanswer.html";
|
|
return "File $fn does not exist" if ! -f $fn;
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
$buff = join('', <F>);
|
|
if ($buff !~ /CATSELECTOR/) {
|
|
$buff =~ s/-->\s*<\/style>/.lbl { font-size: 9pt; font-weight: 700;}-->\n<\/style>/;
|
|
my $addthis = <<EOT;
|
|
<td colspan=2></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan=2></td>
|
|
</tr>
|
|
<tr>
|
|
<td align=left class=lbl>Select existing category</td>
|
|
<td align=left>
|
|
<select name=cat OnChange="if (this[this.selectedIndex].value) {document.editor.catnew.value = ''}; return false;">
|
|
(%CATSELECTOR%)
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align=left class=lbl>or define new one: </td>
|
|
<td align=left><input type=text size=30 name=catnew value="(%INPUT_catnew%)"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan=2 valign=top class=lbl>Answer</td>
|
|
EOT
|
|
$buff =~ s/<td[^<>]*>\s*Answer\s*<\/td>/$addthis/i;
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
truncate(F, tell(F));
|
|
}
|
|
close(F);
|
|
$fn = $cfg->get('basedir'). "/templates/delanswer.html";
|
|
return "File $fn does not exist" if ! -f $fn;
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
$buff = join('', <F>);
|
|
if ($buff !~ /\.lbl/) {
|
|
$buff =~ s/-->\s*<\/style>/.lbl { font-size: 9pt; font-weight: 700;}-->\n<\/style>/;
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
truncate(F, tell(F));
|
|
}
|
|
close(F);
|
|
eval "use TTXLayout";
|
|
if ($@ ne undef) {
|
|
$cfg->set('fltrcols', 'text|subject|oper|status|id');
|
|
$cfg->save();
|
|
} else {
|
|
$cfg->set('fltrcols', 'text|'.$cfg->get('fltrcols'));
|
|
}
|
|
return undef;
|
|
}
|
|
# =================================================================== upgrade219
|
|
|
|
sub upgrade2191 {
|
|
my $cfg = $_[0];
|
|
my $fn = $cfg->get('basedir'). "/templates/helpdesk.html";
|
|
return "File $fn does not exist" if ! -f $fn;
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
my $buff = join('', <F>);
|
|
if ($buff =~ /<\s*input\s+type="?hidden"?\s+name="?qwindow"?\s+value="?\(%INPUT_qwindow%\)"?\s*>/) {
|
|
$buff =~ s/<\s*input\s+type="?hidden"?\s+name="?qwindow"?\s+value="?\(%INPUT_qwindow%\)"?\s*>//;
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
truncate(F, tell(F));
|
|
}
|
|
close(F);
|
|
return undef;
|
|
}
|
|
# =================================================================== upgrade220
|
|
|
|
sub upgrade220 {
|
|
my $cfg = $_[0];
|
|
# Disabled in 2.22. Default is do not use cache. Just to avoid problems while
|
|
# editing templates.
|
|
# $cfg->set('usecache', 1);
|
|
eval "use TTXSetup";
|
|
if ($@ ne undef) {
|
|
return "Error loading TTXSetup: $@";
|
|
}
|
|
my $v;
|
|
eval '$v = $TTXSetup::VERSION';
|
|
if ($@ ne undef) {
|
|
return "Error reading TTXSetup version: $@";
|
|
}
|
|
if ($v eq undef || $v < 2.20) {
|
|
return "Error: Version mismatch: TTXSetup $v, TTXUpgrade ".$TTXUpgrade::VERSION;
|
|
}
|
|
return TTXSetup::tmplreset($cfg, 'reports.html');
|
|
}
|
|
# =================================================================== upgrade221
|
|
|
|
sub upgrade221 {
|
|
return undef;
|
|
}
|
|
# =================================================================== upgrade222
|
|
|
|
sub upgrade222 {
|
|
my $cfg = $_[0];
|
|
for my $f ('header.shtml', 'ticketed.html', 'newanswer.html', 'answerlib.html', 'delanswer.html') {
|
|
my $fn = $cfg->get('basedir'). "/templates/$f";
|
|
next if ! -f $fn;
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
my $buff = join('', <F>);
|
|
if ($buff !~ /\(%HTML_CHARSET%\)/) {
|
|
$buff =~ s/<head>/<head>\n(%HTML_CHARSET%)/i;
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
truncate(F, tell(F));
|
|
}
|
|
close(F);
|
|
}
|
|
my $fn = $cfg->get('basedir'). "/templates/ticket.html";
|
|
if (-f $fn) {
|
|
return "File $fn is not writable" if ! -w $fn;
|
|
return "Can't open file $fn" if !open(F, "+<$fn");
|
|
flock(F,2);
|
|
my $buff = join('', <F>);
|
|
if ($buff !~ /function preview\(\)/) {
|
|
my $addthis = <<EOT;
|
|
<script language="JavaScript"><!--
|
|
function preview(){
|
|
hwstring="scrollbars=yes,width=600,height=500,resizable=yes,toolbar=no,menubar=no";
|
|
var newwin = window.open('', 'winpreview', hwstring);
|
|
newwin.focus();
|
|
document.forms['preview'].msg.value = document.forms['newticket'].problem.value;
|
|
document.forms['preview'].submit();
|
|
return false;
|
|
}
|
|
//--></script>
|
|
EOT
|
|
$buff =~ s/<table\s/$addthis<table /i;
|
|
}
|
|
if ($buff !~ /\(%PREVIEW%\)/) {
|
|
$buff =~ s/\(%ANSWERLIB%\)/(%ANSWERLIB%)(%PREVIEW%)/i;
|
|
}
|
|
seek(F,0,0);
|
|
print F $buff;
|
|
if ($buff !~ /value=preview/) {
|
|
print F <<EOT;
|
|
<form method="post" action="(%ENV_SCRIPT_NAME%)" id="preview" target="winpreview" >
|
|
<input type=hidden name=cmd value=preview>
|
|
<input type=hidden name=style value="(%INPUT_style%)">
|
|
<input type=hidden name=sid value=(%INPUT_sid%)>
|
|
<input type=hidden name=key value=(%INPUT_key%)>
|
|
<input type=hidden name=msg>
|
|
</form>
|
|
EOT
|
|
}
|
|
truncate(F, tell(F));
|
|
close(F);
|
|
}
|
|
my $ccode = TTXSetup::tmplreset($cfg, 'preview.html');
|
|
return $ccode if $ccode ne undef;
|
|
return TTXSetup::tmplreset($cfg, 'roticket.html');
|
|
}
|
|
1;
|
|
#
|
|
|