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;