package version;
use strict;
use table;
sub new {
my $c=shift;
my $mk=shift;
my $t;
if ($mk) {$t=&sql::select1("version","mainkey",$mk);}
if (!$t) {
return bless {new=>1};
}
bless $t;
}
sub dlLink {
my $t=shift;
my $msg=shift;
$msg="Download Ver. @{[&html::escape($t->{number})]}" if (!$msg);
qq($msg);
}
sub dlConfirmLink {
my $t=shift;
&html::link("Download Ver. @{[&html::escape($t->{number})]}",
"confirmDownload",
{version=>$t->{mainkey}});
}
sub columnProp {
return ("admin"=>"e",
"new"=>"e",
"project"=>"i",
"mainkey"=>"m",
);
}
sub fileName {
my $t=shift;
"../files/$t->{filename}";
}
sub splitVersion {
my $vs=shift;
if ($vs =~ /^([0-9\.]+)(([a-zA-Z_][a-zA-Z_0-9]*)?)$/) {
return ($1,$2);
}
return ();
}
sub compare {
my ($an,$ap)=&splitVersion(shift);
my ($bn,$bp)=&splitVersion(shift);
return 1 if ($an>$bn) ;
return -1 if ($an<$bn) ;
return 1 if ($ap gt $bp);
return -1 if ($ap lt $bp);
return 0;
}
sub later{
my $vs=shift;
my ($vn)=&splitVersion($vs);
die (" invalid version string: $vs" ) if (!$vn);
my @n=unpack("C*",$vn);
my $cy;
for (my $i=@n-1; $i>=0 ; $i--) {
next if ($n[$i]==46 ); # .
if ($n[$i]>=48+0 && $n[$i]<=48+8) { # 0-8
$cy="";
$n[$i]++;
last;
}
if ($n[$i]==48+9) {
$n[$i]=48;
$cy=1;
} else {die("invalid letter $n[$i]");}
}
$cy . pack("C*",@n);
}
sub uploadForm {
my $t=shift;
my $latest=shift;
die("no latest version code") if (!$latest);
$latest=&later($latest);
my $tbl=new table;
$tbl->addRow->addCol("バージョン番号")
->addCol(&tag::p("input",
{type=>"text",name=>"number",value=>$latest }
));
$tbl->addRow->addCol("変更内容")
->addCol("");
$tbl->addRow->addCol("ファイル(lzh/zip)")
->addCol("");
&html::form($tbl->out.qq()
,"newVersionDone",{project=>$t->{project}},1);
}
sub upload {
my $t=shift;
my $c=shift;
open OUT ,">".$t->fileName or die("WRITE error ".$t->fileName);
binmode OUT;
print OUT $c;
close OUT;
&tmpl::default("アップロード完了","uploaded",
&html::link("戻る", "viewProject",{mainkey=>$t->{project}})
);
}
sub commentLink {
my $t=shift;
use comment;
&html::link(&comment::digest(&html::escape($t->{comment})) ,"viewComment",{mainkey=>$t->{comment_mainkey}});
}
1;