- 追加された行はこの色です。
- 削除された行はこの色です。
#counter
**内容 [#x2307cb2]
#setlinebreak(on)
#contents
**1.目的 [#l604e78e]
部署のメンバーが今どこで何しているのか把握するために使用します。
電話対応、取次ぎがスムーズになるかと思われます。
(入力するのだけは面倒。社内の勤務システムと連動できればさらに便利になりますね。。)
**2.ツールのURL [#w5c16ff2]
http://hinata.la.coocan.jp/tool/zaseki_koushin.cgi
(適当に更新していただいてまったく問題ありません。むしろたくさんいじってみて下さい。)
**3.機能の概要 [#re0dd3a1]
3-1.出勤状況を座席表に反映させ表示する。
「向きを逆にする」をクリックすると逆向きの座席表になる。
3-2.出勤状況は更新ページから更新できる。
「出勤状況を更新する」をクリックすると更新用ページが表示され、情報を更新できる。
(個別更新、チーム一括更新ができる。)
3-3.ロケーション(休務)ごとに並べえる。
「ロケーション(休務)ごとに表示する」をクリックすると
3-4.取次ぎ方法を表示する。
座席表の各座席にマウスをポイントすると、取り次ぎ方法が表示される。
別ロケーションの場合はその電話番号が出力される。
**4.使用イメージ [#peedc9d7]
4-1.出勤状況の更新
朝のミーティングの前などに各チームにて「出勤状況更新ページ」
から情報を更新する。
4-2.出勤状況の確認
電話がかかってきた時など、その人がどこにいるのか確認するためには
座席表(もしくは逆向きの座席表)を表示する。
※ 日中情報が更新されることもあるためすでに表示している場合は
「最新の情報を表示する」をクリックした方が無難です。
※ その情報がいつの情報であるか、最終更新日時も座席表に表示されている。
4-3.ロケーションごとに表示
「ロケーション(休務)ごとに表示する」のページは、
まとめて報告したい時(朝のミーティングなど)にはこのページを確認すると便利かと。
※ こツールの例では、大手町を本拠地としていてよく新宿ロケーションに出かけることがある、という設定です。
**5.ディレクトリ構成 [#e3f31060]
zaseki_asami.cgi
zaseki_hyouji.cgi
zaseki_koushin.cgi
zaseki_data/poptxt.js ←ポップアップを出力するためのJavascript
/url.txt ←内線番号と各人のURLを対応付けたtxt
zaseki1.txt ←出勤状況のデータたち
zaseki2.txt
zaseki3.txt
zaseki4.txt
zaseki5.txt
/tmp/ ←情報の更新時に一時的に使用するディレクトリ
/jpg/ ←顔写真用の画像置き場。内線番号.JPG(内線番号.gif)で保存。
※poptxt.jsのソースは[[HIMAJIN>http://himajin.moo.jp/]]様のページから頂きました。
誠にありがとうございます。
※顔写真用の画像は[[First Moon>http://www.first-moon.com/]]様のページから拝借しました。
誠にありがとうございます。
座席データ等はこんな感じ。
http://hinata.la.coocan.jp/tool/zaseki_data/zaseki1.txt
http://hinata.la.coocan.jp/tool/zaseki_data/zaseki2.txt
http://hinata.la.coocan.jp/tool/zaseki_data/zaseki3.txt
http://hinata.la.coocan.jp/tool/zaseki_data/zaseki4.txt
http://hinata.la.coocan.jp/tool/zaseki_data/zaseki5.txt
http://hinata.la.coocan.jp/tool/zaseki_data/memberinfo.txt
**6.ソースイメージ [#v8d7c0fa]
***6-1.zaseki_koushin.cgi [#xa7aa111]
#!/usr/bin/perl
sub decode {
local($args, $n_read, *terms, $tag, $value);
$ENV{'REQUEST_METHOD'} eq "POST" ?
($n_read = sysread(STDIN, $args, $ENV{'CONTENT_LENGTH'})):
($args = $ENV{'QUERY_STRING'});
@terms = split('&', $args);
foreach (@terms) {
($tag, $value) = split(/=/, $_, 2);
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/ge;
$tags{$tag} = $value; # tags is global
}
}
sub printradio{
my $checked ="";
if ($_[0] eq $_[1]){$checked="checked";}
print <<EOL;
<input type="radio" name="locate$_[2]_$_[3]" value="$_[0]" $checked>$_[0]
EOL
}
sub printform{
my $color ="white";
if($_[5]%2==1){$color="#CCFFFF";}
print <<EOL;
<tr bgcolor="$color"><td width="120"> $_[1]</td>
<td>
EOL
&printradio("大手町",$_[2],$_[4],$_[0]);
&printradio("新宿",$_[2],$_[4],$_[0]);
&printradio("年休",$_[2],$_[4],$_[0]);
&printradio("週休",$_[2],$_[4],$_[0]);
&printradio("長期出張",$_[2],$_[4],$_[0]);
&printradio("深夜勤務",$_[2],$_[4],$_[0]);
&printradio("研修",$_[2],$_[4],$_[0]);
&printradio("その他",$_[2],$_[4],$_[0]);
print "</td>";
print <<EOL;
<td> <input type=\"text\" name="bikou$_[4]_$_[0]" size="30" maxlength="40" value="$_[3]"></td>
<td> <input type="submit" value="個別更新" name="submit$_[4]_$_[0]"> </td>
</tr>
EOL
}
sub team{
my $color="";
my $bikou="";
my $koushin="";
my $count=0;
my $teamname="";
my $filename=$_[0];
my $teamnum="";
if($_[0]=~/zaseki([0-9])\.txt/){
$teamnum=$1;
}else{
return;
}
open(F,$filename);
while(<F>){
if($_=~/teamname=([\S\s]+),[0-9\-\/\s]+/){
$teamname=$1;
print <<EOL;
<input type="checkbox" name="check$teamnum" value="on"> $teamname
<table><tr><td></td><td><center>出勤状況</td><td><center>備考</td><td></td></tr>
EOL
}
if($_=~/([0-9]*),([0-9\-]*),(\S*),(\S*),([\S\s]*),[0-9\s\/:]*/){
if($4 eq ""){next;}
&printform("$1","$3","$4","$5",$teamnum,$count);
$count++;
next;
}
if($_=~/([0-9]*),(\S*),(\S*),([\S\s]*),[0-9\s\/:]*/){
if($3 eq ""){next;}
&printform("$1","$2","$3","$4",$teamnum,$count);
$count++;
}
}
print <<EOL;
<tr><td></td><td></td><td></td><td> <input type="submit" value="このチームをすべて更新" name="submit${teamnum}_all"></td></tr>
</table>
<hr>
EOL
close(F);
}
sub print_menu(){
print <<"EOL";
<table>
<tr>
<td>
<form method="POST" action="zaseki_koushin.cgi">
<input type="hidden" name="gyaku" value="$tags{gyaku}">
<input type="hidden" name="photo" value="$tags{photo}">
<input type="submit" value="最新の情報を表示する" name="sonomama">
</form>
</td>
<td width=20></td>
<td>
<form method="POST" action="zaseki_hyouji.cgi">
<input type="hidden" name="gyaku" value="$tags{gyaku}">
<input type="hidden" name="photo" value="$tags{photo}">
<input type="submit" value="情報を更新せずに座席表を表示する" name="sonomama">
</form>
</td>
<tr>
</table>
EOL
}
if ($ENV{'REQUEST_METHOD'} eq "POST") {
&decode();
}
print <<"EOL";
Content-type: text/html
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<TITLE>出勤状況更新ページ</TITLE>
</HEAD>
<BODY>
EOL
&print_menu();
print <<"EOL";
<hr>
<form method="POST" action="zaseki_hyouji.cgi">
EOL
@files = glob ("zaseki_data/zaseki*.txt");
foreach $i (@files){
&team("$i");
}
print<<"EOL";
<table align="center">
<tr><td><input type="submit" value="チェックしたチームを一括更新" name="submitchecked_all"></td><td></td><td></td></tr>
<tr><td align="right"><input type="submit" value="全チームを一括更新" name="submitall_all"></td><td><font size="2">←</font></td><td><font size="2">「全チームを一括更新」使用時は更新日時がすべて現在になる<br>ことに注意してください。</font></td></tr>
</table>
<input type="hidden" name="gyaku" value="$tags{gyaku}">
<input type="hidden" name="photo" value="$tags{photo}">
</form>
<hr>
EOL
&print_menu();
print <<"EOL";
</BODY>
</HTML>
EOL
***6-2.zaseki_hyouji.cgi [#gd9e2ba1]
#!/usr/bin/perl
$title="";
$gyaku=0;
$photo=0;
$photo_msg="";
@files = glob ("zaseki_data/zaseki*.txt");
sub decode {
local($args, $n_read, *terms, $tag, $value);
$ENV{'REQUEST_METHOD'} eq "POST" ?
($n_read = sysread(STDIN, $args, $ENV{'CONTENT_LENGTH'})):
($args = $ENV{'QUERY_STRING'});
@terms = split('&', $args);
foreach (@terms) {
($tag, $value) = split(/=/, $_, 2);
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/ge;
$tags{$tag} = $value; # tags is global
}
}
sub kobetsu_koushin{
my $updated_line="";
my $locate="locate${_[0]}_${_[1]}";
my $bikou="bikou${_[0]}_${_[1]}";
$tags{$bikou}=~s/,/、/g;
my $team=${_[0]};
my $naisen=${_[1]};
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
my $yyyymmddHHMM = sprintf("%04d/%02d/%02d %02d:%02d", $year + 1900, $mon +1, $mday, $hour, $min);
open(OLD,"zaseki_data/zaseki$team.txt");
while(<OLD>){
if($_=~/$naisen,([0-9\-]*),(\S*),\S*,[\S\s]*,[0-9\s\/:]*/){
$updated_line="$naisen,$1,$2,$tags{$locate},$tags{$bikou},$yyyymmddHHMM\n";
last;
}
if($_=~/$naisen,(\S*),\S*,[\S\s]*,[0-9\s\/:]*/){
$updated_line="$naisen,$1,$tags{$locate},$tags{$bikou},$yyyymmddHHMM\n";
last;
}
}
close(OLD);
open(TMP,">zaseki_data/tmp/zaseki${team}_tmp.txt");
open(OLD,"zaseki_data/zaseki$team.txt");
while(<OLD>){
if($_=~/$naisen/){print TMP $updated_line;}else{print TMP $_;}
}
close(OLD);
close(TMP);
open(TMP,"zaseki_data/tmp/zaseki${team}_tmp.txt");
open(NEW,">zaseki_data/zaseki$team.txt");
while(<TMP>){
print NEW $_;
}
close(NEW);
close(TMP);
}
sub button_check{
my $button="";
$button="submit$_[1]_all";
if($tags{$button} ne ""){return $button;}
open(F,$_[0]);
while(<F>){
if($_=~/^([0-9]{4})/){
$button="submit$_[1]_$1";
if($tags{$button} ne ""){return $button;}
}
}
}
sub which_button{
my $button="";
my $teamnum=0;
foreach $filename (@files){
if($filename=~/zaseki([0-9])\.txt/){
$teamnum=$1;
}else{
next;
}
$button=&button_check("$filename","$teamnum");
if($button ne ""){return $button;}
}
return $button;
}
sub data_koushin{
if($tags{sonomama} ne ""){return;}
if($tags{submitall_all} ne ""){
foreach $filename (@files){
if($filename=~/zaseki([0-9])\.txt/){
my $team=$1;
open(TEAM,"$filename");
while(<TEAM>){
if($_=~/^([0-9]{4})/){
&kobetsu_koushin("$team","$1");
}
}
close(TEAM);
}
}
return;
}
if($tags{submitchecked_all} ne ""){
foreach $filename (@files){
if($filename=~/zaseki([0-9])\.txt/){
my $team=$1;
my $checknum="check$team";
if($tags{$checknum} ne ""){
open(TEAM,"$filename");
while(<TEAM>){
if($_=~/^([0-9]{4})/){
&kobetsu_koushin("$team","$1");
}
}
close(TEAM);
}
}
}
return;
}
my $submitted_button= &which_button();
$submitted_button =~s/submit//g;
@list = split( /_/ , $submitted_button );
my $team=$list[0];
my $naisen=$list[1];
if($naisen eq "all"){
open(TEAM,"zaseki_data/zaseki$team.txt");
while(<TEAM>){
if($_=~/^([0-9]{4})/){
&kobetsu_koushin("$team","$1");
}
}
close(TEAM);
}else{
&kobetsu_koushin("$team","$naisen");
}
}
sub gyakuflg_koushin{
if($tags{hanten} ne ""){
if($tags{gyaku}==1){$gyaku=0;}elsif($tags{gyaku}==0){$gyaku=1;}
}else{
$gyaku=$tags{gyaku};
}
}
sub photoflg_koushin{
if($tags{photohanten} ne ""){
if($tags{photo}==1){$photo=0;}elsif($tags{photo}==0){$photo=1;}
}else{
$photo=$tags{photo};
}
}
sub desidecolor{
if($_[0] eq "年休") {return "gray";}
if($_[0] eq "週休") {return "gray";}
if($_[0] eq "研修") {return "gray";}
if($_[0] eq "長期出張"){return "gray";}
if($_[0] eq "その他") {return "gray";}
if($_[0] eq "深夜勤務"){return "#9999CC";}
if($_[0] eq "大手町") {return "#99CCCC";}
if($_[0] eq "新宿") {return "#99CC99";}
}
sub setbordercolor{
if($_[0]==1) {return "#b8860b";}
if($_[0]==2) {return "#006400";}
if($_[0]==3) {return "#006400";}
if($_[0]==4) {return "#000099";}
if($_[0]==5) {return "#800080";}
}
sub setmsg{
my $naisen=$_[0];
my $name=$_[1];
my $locate=$_[2];
if($locate eq "大手町" || $locate eq "深夜勤務"){
if($naisen eq "0000"){return "";}
else{
return "'■取次ぎ方法1 パーク保留<br> 1-1.「パーク保留」ボタンを押す。<br>"
. " 1-2.表示されたパーク番号を$nameさんに伝える。<br>"
. " 1-3.$nameさんはその番号を入力して発信する。<br>"
. "■取次ぎ方法2 転送<br> 2-1.「転送/音声メール」ボタンを押す。<br>"
. " 2-2.<font size=4><b>$naisen</b></font>を入力し「決定/発信」ボタンを押す。<br>"
. " 2-3.$nameさんが出たら切る。<br>"
. " (転送をやめたい場合は「取消」ボタンを押す。)'";
}
}elsif($locate eq "新宿"){
return "'■新宿電話番号<br>"
. " 03-xxxx-xxxx'";
}else{
return "";
}
}
sub zaseki_print{
my $naisen = $_[0];
my $name = $_[1];
my $locate = $_[2];
my $bikou = $_[3];
my $koushin= $_[4];
my $gaisen = $_[5];
my $count = $_[6];
my $msg="";
my $head="";
my $tail="";
my $color="";
my $local_bordercolor="bgcolor=$bordercolor";
my $img="";
my $url="";
my $naisennamelocate="";
my $width=0;
my $k_width=0;
if($photo==1 && $name ne ""){
# $img="<img src=\"./zaseki_data/jpg/$naisen.JPG\" width=\"50\" height=\"55\">";
$img="<img src=\"./zaseki_data/jpg/$naisen.gif\" width=\"50\" height=\"55\">";
}
if($naisen ne ""){
open(URL,"./zaseki_data/url.txt");
while(<URL>){
if($_=~/$naisen,(\S+)\s+\/\//){
$url="onClick=\"window.open('$1','_blank')\"";
}
}
close(URL);
}
if($gaisen ne ""){$gaisen="<br>$gaisen";}
if($photo==0){
$width=140;
$k_width=160;
$naisennamelocate=<<EOL;
<font size = "1">$naisen $gaisen</font><br>
<b>$name </b><br>
$locate <br>
EOL
}elsif($photo==1){
$width=160;
$k_width=180;
$naisennamelocate=<<EOL;
<table>
<tr><td width="100"><font size = "1">$naisen $gaisen</font></td><td rowspan="3">$img</td></tr>
<tr><td><b>$name </b></td>
<tr><td>$locate </td><tr>
</table>
EOL
}
$color = &desidecolor("$locate");
if($name eq "" || $name=~/BU/){
$local_bordercolor="";
}
if($2 ne ""){
$koushin="最終更新 $koushin";
}else{
$koushin=" ";
}
$msg=&setmsg("$naisen","$name","$locate");
if($count==0){$head= "<td><table border=1><tr>\n";}
elsif($count==4){$tail= "</tr><tr>";}
elsif($count==9){$tail= "</tr></table></td>";}
elsif($count==100){
my $border="";
if($name ne ""){$border="border=1";}
$head="<td width =$k_width><table $border><tr>";
$tail="</tr></table>";
}elsif($count==101){
my $border="";
if($name ne ""){$border="border=1";}
$head="<table $border $border><tr>";
$tail="</tr></table></td>";
}
print <<"EOL";
$head
<td>
<table border="0" $local_bordercolor cellspacing="3"><tr>
<td bgcolor ="$color" width="$width" $url onMouseover="opentext($msg)" onMouseout="opentext('')" >
$naisennamelocate
<font size = 2>$bikou </font><br>
<div align="right"><font size = 1>$koushin</font></div></td>
</tr></table>
</td>
$tail
EOL
}
sub shima{
my $count=0;
my $k_count=100;
my @line;
if($_[0]=~/zaseki([0-9])\.txt/){
$bordercolor=&setbordercolor("$1");
}else{
next;
}
open(F,$_[0]);
while(<F>){
if($_=~/teamname=([\S\s]+),([0-9\-\/\s]+)/){
if($gyaku==0){
print "<table><tr><td></td><td>■$1 ( $2)</td><tr>";
}elsif($gyaku==1){
print "<table><tr>■$1 ( $2)<td></td><td></td><tr>";
}
}
if($_=~/([0-9]*),([0-9\-]*),(\S*),(\S*),([\S\s]*),([0-9\s\/:]*)/){
if($gyaku==0){
&zaseki_print("$1","$3","$4","$5","$6","$2","$k_count");
$k_count++;
}elsif($gyaku==1){
$line[$linecnt]=$_;
$linecnt++;
}
next;
}
if($_=~/([0-9]*),(\S*),(\S*),([\S\s]*),([0-9\s\/:]*)/){
if($gyaku==0){
&zaseki_print("$1","$2","$3","$4","$5","","$count");
$count++;
}elsif($gyaku==1){
$line[$linecnt]=$_;
$linecnt++;
}
}
}
close(F);
$count=0;
if($gyaku==1){
for ($index=$linecnt;$index>=0;$index--){
if($line[$index]=~/([0-9]*),([0-9\-]*),(\S*),(\S*),([\S\s]*),([0-9\s\/:]*)/){
&zaseki_print("$1","$3","$4","$5","$6","$2","$k_count");
$k_count++;
next;
}
if($line[$index]=~/([0-9]*),(\S*),(\S*),([\S\s]*),([0-9\s\/:]*)/){
&zaseki_print("$1","$2","$3","$4","$5","","$count");
$count++;
}
}
}
print "</tr></table><br>";
}
sub print_menu{
print<<"EOL";
<table>
<tr>
<td>
<form method="POST" action="zaseki_hyouji.cgi">
<input type="hidden" name="gyaku" value="$gyaku">
<input type="hidden" name="photo" value="$photo">
<input type="submit" value="最新の情報を表示する" name="sonomama">
</form>
</td>
<td width=20></td>
<td>
<form method="POST" action="zaseki_koushin.cgi">
<input type="hidden" name="gyaku" value="$gyaku">
<input type="hidden" name="photo" value="$photo">
<input type="submit" value="出勤情報の更新ページへ" name="sonomama">
</form>
</td>
<td width=20></td>
<td>
<form method="POST" action="zaseki_hyouji.cgi">
<input type="hidden" name="gyaku" value="$gyaku">
<input type="hidden" name="photo" value="$photo">
<input type="submit" value="向きを逆にする" name="hanten">
</form>
</td>
<td width=20></td>
<td>
<form method="POST" action="zaseki_asami.cgi">
<input type="hidden" name="gyaku" value="$gyaku">
<input type="hidden" name="photo" value="$photo">
<input type="submit" value="ロケーション(休務)ごとに表示する" name="sonomama">
</form>
</td>
<tr>
</table>
EOL
}
if ($ENV{'REQUEST_METHOD'} eq "POST") {
&decode();
&data_koushin();
&gyakuflg_koushin();
&photoflg_koushin();
}
if($gyaku==0){
$tille="座席表 (山向き)";
}elsif($gyaku==1){
$tille="座席表 (海向き)";
}
if($photo==0){
$photo_msg="写真表示 ON";
}elsif($photo==1){
$photo_msg="写真表示 OFF";
}
print <<"EOL";
Content-type: text/html
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<TITLE>$tille</TITLE>
<script type="text/javascript" src="zaseki_data/poptxt.js">
</script>
</HEAD>
<BODY>
EOL
&print_menu();
print <<"EOL";
<hr>
<table>
<tr>
<td><table><tr><td bgcolor="#99CCCC" height="20" width="30"></td></tr></table></td>
<td>・・・大手町</td>
<td width="20"></td>
<td><table><tr><td bgcolor="#99CC99" height="20" width="30"></td></tr></table></td>
<td>・・・新宿</td>
<td width="20"></td>
<td><table><tr><td bgcolor="#9999CC" height="20" width="30"></td></tr></table></td>
<td>・・・深夜勤務</td>
<td width="20"></td>
<td><table><tr><td bgcolor="gray" height="20" width="30"></td></tr></table></td>
<td>・・・年休,週休,長期出張,研修,その他</td>
</tr>
</table>
<table align="right">
<tr>
<td>
<form method="POST" action="zaseki_hyouji.cgi">
<input type="hidden" name="gyaku" value="$gyaku">
<input type="hidden" name="photo" value="$photo">
<input type="submit" value="$photo_msg" name="photohanten">
</form>
</td>
</tr>
</table>
<br>
EOL
if($gyaku==0){
foreach $i (@files){
&shima("$i");
}
}elsif($gyaku==1){
my $filecount=@files;
my $ind;
for ($ind=$filecount;$ind>=0;$ind--){
&shima("$files[$ind]");
}
}
$time = localtime(time);
if($photo==1){
print "※ 画像素材は<a href=\"http://www.first-moon.com/\">First Moon</a>様のサイトからお借りいたしました。"
}
print "<hr>";
&print_menu();
print <<"EOL";
</BODY>
</HTML>
EOL
***6-3.zaseki_asami.cgi [#s3208208]
#!/usr/bin/perl
$globalcnt=0;
sub decode {
local($args, $n_read, *terms, $tag, $value);
$ENV{'REQUEST_METHOD'} eq "POST" ?
($n_read = sysread(STDIN, $args, $ENV{'CONTENT_LENGTH'})):
($args = $ENV{'QUERY_STRING'});
@terms = split('&', $args);
foreach (@terms) {
($tag, $value) = split(/=/, $_, 2);
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/ge;
$tags{$tag} = $value; # tags is global
}
}
@locations=("新宿","深夜勤務","年休","週休","研修","長期出張","その他","大手町");
sub desidecolor{
if($_[0] eq "年休") {return "gray";}
if($_[0] eq "週休") {return "gray";}
if($_[0] eq "研修") {return "gray";}
if($_[0] eq "長期出張"){return "gray";}
if($_[0] eq "その他") {return "gray";}
if($_[0] eq "深夜勤務"){return "#9999CC";}
if($_[0] eq "大手町") {return "#99CCCC";}
if($_[0] eq "新宿") {return "#99CC99";}
}
sub shima{
my $count=0;
my $color="";
my $koushin="";
my $msg="";
my $teamname="";
my $color=&desidecolor("$_[1]");
open(F,$_[0]);
while(<F>){
if($_=~/teamname=([\S\s]+),[0-9\-\/\s]+/){
$teamname=$1;
}
if($_=~/([0-9]*),([0-9\-]*),(\S*),(\S*),([\S\s]*),([0-9\s\/:]*)/){
if($4 eq $_[1]){
$count++;
}
next;
}
if($_=~/([0-9]*),(\S*),(\S*),([\S\s]*),([0-9\s\/:]*)/){
if($3 eq $_[1]){
$count++;
}
}
}
$globalcnt=$globalcnt+$count;
$teamname="<td width=150 rowspan=$count>$teamname</td>";
open(F,$_[0]);
while(<F>){
if($_=~/([0-9]*),([0-9\-]*),(\S*),(\S*),([\S\s]*),([0-9\s\/:]*)/){
if($4 eq $_[1]){
print <<EOL;
<tr bgcolor="$color">
$teamname
<td width=120>$3</td>
<td width=200>$5 </td>
<td><font size=2>最終更新 $6</font></td>
</tr>
EOL
$teamname="";
}
next;
}
if($_=~/([0-9]*),(\S*),(\S*),([\S\s]*),([0-9\s\/:]*)/){
if($3 eq $_[1]){
print <<EOL;
<tr bgcolor="$color">
$teamname
<td width=120>$2</td>
<td width=200>$4 </td>
<td><font size=2>最終更新 $5</font></td>
</tr>
EOL
$teamname="";
}
}
}
close(F);
}
sub print_menu{
print<<"EOL";
<table>
<tr>
<td>
<form method="POST" action="zaseki_asami.cgi">
<input type="hidden" name="gyaku" value="$tags{gyaku}">
<input type="hidden" name="photo" value="$tags{photo}">
<input type="submit" value="最新の情報を表示する" name="sonomama">
</form>
</td>
<td width=20></td>
<td>
<form method="POST" action="zaseki_hyouji.cgi">
<input type="hidden" name="gyaku" value="$tags{gyaku}">
<input type="hidden" name="photo" value="$tags{photo}">
<input type="submit" value="座席表を表示する" name="sonomama">
</form>
</td>
<td width=20></td>
<td>
<form method="POST" action="zaseki_koushin.cgi">
<input type="hidden" name="gyaku" value="$tags{gyaku}">
<input type="hidden" name="photo" value="$tags{photo}">
<input type="submit" value="出勤情報の更新ページへ" name="sonomama">
</form>
</td>
<tr>
</table>
EOL
}
print FW "zaseki_hyouji.cgi\n";
if ($ENV{'REQUEST_METHOD'} eq "POST") {
&decode();
}
print <<"EOL";
Content-type: text/html
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<TITLE>朝ミ確認用</TITLE>
<script type="text/javascript" src="zaseki_data/poptxt.js">
</script>
</HEAD>
<BODY>
EOL
&print_menu();
print <<"EOL";
<hr>
<br>
EOL
foreach $locate(@locations){
$globalcnt=0;
print "■$locate<br><table border=1>";
@files = glob ("zaseki_data/*.txt");
foreach $team (@files){
&shima("$team","$locate");
}
print "</table>";
if($globalcnt==0){
print "なし<br> <br>";
}else{print " <br>";}
}
print "<hr>";
&print_menu();
print <<"EOL";
</BODY>
</HTML>
EOL
**7.改版履歴 [#d6a87859]
***090414(初版) [#a1cac902]
#ref(zaseki_koushin.cgi_090414.txt)
#ref(zaseki_hyouji.cgi_090414.txt)
#ref(zaseki_gyaku.cgi_090414.txt)
#ref(zaseki_asami.cgi_090414.txt)
#ref(zaseki1.txt)
#ref(zaseki2.txt)
#ref(zaseki3.txt)
#ref(zaseki4.txt)
#ref(zaseki5.txt)
※poptxt.jsは[[HIMAJIN>http://himajin.moo.jp/]]様のページから拝借いたしました。
再配布になってしまうため、ここにはアップしません。
↑のリンクの「すぐに使えるJavaScript」→「ポップアップテキスト」です。
作った頃のメモ→[[メモメモ/2009-04-09]]、[[メモメモ/2009-04-12]]、[[メモメモ/2009-04-13]]
***090419 [#i9f7e135]
#ref(zaseki_090419.zip)
#ref(zaseki_koushin.cgi_090419.txt)
#ref(zaseki_hyouji.cgi_090419.txt)
#ref(zaseki_asami.cgi_090419.txt)
■Bug#1 zaseki_data配下に不正な.txtがあるとデータが壊れる。
■Bug#2 座席表を反転させた状態で更新した場合、反転させた座席表に戻るようにして欲しい。
■Bug#3 全チーム一括更新したい。
の対処。
***090421 [#cd7a9933]
#ref(zaseki_090421.zip)
#ref(zaseki_koushin.cgi_090421.txt)
#ref(zaseki_hyouji.cgi_090421.txt)
#ref(zaseki_asami.cgi_090421.txt)
■Bug#3 全チーム一括更新したい。
に関連し、チェックしたチームのみ一括更新する機能を追加。
***090422 [#v542834d]
#ref(zaseki_090422.zip)
#ref(zaseki_koushin.cgi_090422.txt)
#ref(zaseki_hyouji.cgi_090422.txt)
#ref(zaseki_asami.cgi_090422.txt)
■Bug#9 備考欄が2行のとき逆向きの座席表の表示がずれる。
■Bug#11 課長席の空箱を表示しないようにして欲しい。
■Bug#18 zaseki_data配下に不正なファイルがあると個別更新が行えない。
■Bug#19 部長も表示したい。
の対処。
***090423 [#j3027324]
#ref(zaseki_090423.zip)
#ref(zaseki_koushin.cgi_090423.txt)
#ref(zaseki_hyouji.cgi_090423.txt)
#ref(zaseki_asami.cgi_090423.txt)
#ref(url.txt)
■Bug#14 座席表に顔写真を載せて欲しい。
■Bug#15 各座席から電子社員録の個人URLにリンクして欲しい。
の対処及び
▲Bug#12 チームごとの識別も色で行いたい。
の暫定対処。
zaseki_hyouji.cgiの随所に散らばっていたglob(zaseki_data/zaseki*.txt)が実は1箇所でよいのではないかと気づき、ソースの頭1箇所に記述するよう修正。
合わせてglobal変数をわかりやすく頭に記述するようにした。いまさら。。。w
※ 画像はすべて[[First Moon>http://www.first-moon.com/]]様のページから拝借しました。
再配布になってしまうのでzipからは外しておきます。
jpgディレクトリ配下に内線番号.JPG(内線番号.gif)で画像が保存されています。
[[メモメモ/2009-04-23]]
**バグ管理簿 [#od1d05c2]
#ls2
----
- みました。とりあえずHTML::Templateなどを使って、プログラムとHTMLコードを分けたほうがいいですね。保守しづらいと思います -- [[yusuketsuiki]] &new{2009-04-17 (金) 17:23:30};
- あ、どうもです。なんか早速バグっていたようで、データがめちゃめちゃ壊れていました。。&br;そんなライブラリがあるんですね!アドバイスありがとうございます! -- [[日向充]] &new{2009-04-17 (金) 19:50:18};
- ちょっとググって見ました。めちゃめちゃ便利そうですね。いつもアドバイスありがとうございます。 -- [[日向充]] &new{2009-04-17 (金) 19:56:51};
- fmTPEp <a href="http://lbsgcoyhtver.com/">lbsgcoyhtver</a>, [url=http://znocmudietwq.com/]znocmudietwq[/url], [link=http://ctozorxwtdjw.com/]ctozorxwtdjw[/link], http://zavxgytiybex.com/ -- [[dlpnqyeehjj]] &new{2010-02-25 (木) 23:46:26};
- fmTPEp <a href="http://lbsgcoyhtver.com/">lbsgcoyhtver</a>, [url=http://znocmudietwq.com/]znocmudietwq[/url], [link=http://ctozorxwtdjw.com/]ctozorxwtdjw[/link], http://zavxgytiybex.com/ -- [[dlpnqyeehjj]] &new{2010-02-25 (木) 23:46:42};
- xBJUdC <a href="http://jbdwmcyultyq.com/">jbdwmcyultyq</a>, [url=http://fhgqfqxzortf.com/]fhgqfqxzortf[/url], [link=http://jmstwbhcxksi.com/]jmstwbhcxksi[/link], http://pbahjkxcfiqr.com/ -- [[vwcppb]] &new{2010-03-08 (月) 15:44:39};
- kXBHyb <a href="http://fyglocxouwub.com/">fyglocxouwub</a>, [url=http://gncfiefrcrvw.com/]gncfiefrcrvw[/url], [link=http://zwdvolyxphrz.com/]zwdvolyxphrz[/link], http://azlmhwniojfq.com/ -- [[jnxell]] &new{2010-03-09 (火) 09:36:02};
- DtV7p5 <a href="http://vrvkkugrhsdt.com/">vrvkkugrhsdt</a>, [url=http://ylnajuyylorv.com/]ylnajuyylorv[/url], [link=http://igqnrkwlcwap.com/]igqnrkwlcwap[/link], http://uyeuujbgykmm.com/ -- [[vruiqdnwhg]] &new{2010-03-15 (月) 05:28:46};
- tP9Q7K <a href="http://kgstnxezdsnb.com/">kgstnxezdsnb</a>, [url=http://dlomgzlqciez.com/]dlomgzlqciez[/url], [link=http://tmjdwzexwsti.com/]tmjdwzexwsti[/link], http://gsbyvhfkqkvz.com/ -- [[hcsvqn]] &new{2010-03-15 (月) 08:45:21};
- http://www.hotfrog.ca/Companies/Canadian-viagra-distributions/Cheap-viagra-20520 buy viagra :PP http://www.findtheneedle.co.uk/press-releases/21984-viagra-coupon-for-findtheneedle-users.asp cheap viagra >:-] http://www.armenian.com/cgi-bin/links.cgi?searchstring=cialis%20pills buy cialis =-OO -- [[Yfoqgcwa]] &new{2010-03-22 (月) 09:28:55};
- http://www.ratemds.com/filecache/doctor-ratings.jsp?did=957857&option=cialis buy cialis :[[ http://www.findtheneedle.co.uk/products/2700385-buy-cheap-viagra-pack.asp cheap viagra 8]] -- [[Awuqclny]] &new{2010-03-22 (月) 09:31:15};
- http://www.findtheneedle.co.uk/companies/128701-canadian-healthcare-center.asp?title=viagra cheap viagra :-))) http://www.uk-local-search.co.uk/business/buy+viagra+cheap+generic/1851115/ buy viagra 8-(( -- [[Fhrtbfey]] &new{2010-03-22 (月) 09:31:30};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=cheap%20cialis cheap cialis :PP http://www.armenian.com/cgi-bin/links.cgi?searchstring=cialis%20store cheap cialis =-)) -- [[Zmgovgfs]] &new{2010-03-24 (水) 11:06:20};
- http://www.ratemds.com/filecache/doctor-ratings.jsp?did=957857&option=cialis#1 buy cialis :( http://www.findtheneedle.co.uk/company-postcode.asp?postcode=K1G&code=viagra canadian pharmacy %)) -- [[Rmtyqcmb]] &new{2010-03-25 (木) 08:53:15};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=buy%20viagra generic viagra =-]] http://www.armenian.com/cgi-bin/links.cgi?searchstring=viagra%20store generic viagra =OOO -- [[Hvuxmgbq]] &new{2010-03-25 (木) 08:55:19};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=viagra%20store viagra =-[[[ -- [[Jhmlrybj]] &new{2010-03-27 (土) 07:51:07};
- http://www.hotfrog.ca/Companies/Canadian-viagra-distributions/Cheap-viagra-20520 viagra :[[ -- [[Cdaobapf]] &new{2010-03-27 (土) 07:52:11};
- http://www.stlouisbusinesslist.com/business/5021837.htm?info=viagra viagra =-[[[ -- [[Zbpakevb]] &new{2010-03-27 (土) 07:52:53};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=cialis%20pills cialis %))) -- [[Hlgbhzqb]] &new{2010-03-27 (土) 07:53:15};
- http://www.hotfrog.ca/Companies/Canadian-viagra-distributions viagra %-PPP -- [[Qmahbspn]] &new{2010-03-27 (土) 07:53:36};
- http://www.findtheneedle.co.uk/company-postcode.asp?postcode=K1G canadian viagra 8OOO -- [[Lucjplrv]] &new{2010-03-27 (土) 07:57:23};
- http://www.jobzilla.ca/details/company/2507/search/?opt=viagra viagra 8-))) -- [[Wfgrljnd]] &new{2010-03-27 (土) 07:57:36};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=cheap%20cialis cialis =O -- [[Bvlqnrpy]] &new{2010-03-27 (土) 07:57:52};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=buy%20viagra viagra 8) -- [[Sigrcgif]] &new{2010-03-27 (土) 07:58:21};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=noprescription%20cialis cialis =[ -- [[Dppmuivd]] &new{2010-03-27 (土) 07:58:58};
- http://www.jobzilla.ca/details/company/2507/search/?opt=viagra viagra 8-OOO -- [[Joxkchgo]] &new{2010-03-28 (日) 09:23:05};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=cialis%20store cialis :-O -- [[Vpabpeay]] &new{2010-03-28 (日) 09:23:35};
- http://www.armenian.com/cgi-bin/links.cgi?searchstring=cheap%20viagra viagra >:PPP -- [[Bfrjqlng]] &new{2010-03-28 (日) 09:24:23};
- http://www.ratemds.com/doctor-ratings/957853/NY/New-York/Lousanne?tag=viagra viagra %O -- [[Hmkludnf]] &new{2010-03-28 (日) 09:25:16};
- http://www.findtheneedle.co.uk/press-releases/21984-viagra-coupon-for-findtheneedle-users.asp viagra =OOO -- [[Ozifvcmp]] &new{2010-03-28 (日) 09:26:39};
- http://www.psu.com/forums/member.php?u=224293 order tramadol %-)) -- [[Xvedjmbv]] &new{2010-04-09 (金) 15:22:20};
- http://www.psu.com/forums/member.php?u=224291 tramadol online =[[ -- [[Eoxdgiyn]] &new{2010-04-10 (土) 00:42:23};
- http://www.psu.com/forums/member.php?u=224293 order tramadol 8-( -- [[Hjxbwgce]] &new{2010-04-10 (土) 00:42:26};
- http://www.psu.com/forums/member.php?u=224294 tramadol prescription %]] -- [[Gvryjsfs]] &new{2010-04-10 (土) 00:42:29};
- http://www.psu.com/forums/member.php?u=224296 soma >:-[[ -- [[Ybcopdhc]] &new{2010-04-10 (土) 00:42:31};
- NyLXoZASxFWgoCUmIn -- [[ocoaohpa]] &new{2010-05-02 (日) 13:44:17};
- Man is the only animal that can remain on friendly terms with the victims he intends to eat until he eats them., andrew solomon and depression, valium online. http://upetodposu.66ghz.com/anxiety-disorder-test/buy-valium-on-line.html - amitriptyline valium http://upetodposu.66ghz.com/anti-anxiety-medication-type/prince-valium-spaceballs.html - coping skill for depression http://owesy.66ghz.com/duration-valium/de-depression-test.html - anti depression foods http://owesy.66ghz.com/duration-valium/duration-valium.html - domain buy cheap valiumxto -- [[MILL@R]] &new{2010-05-07 (金) 17:02:26};
#comment
----
-[[Perlメモ]]
-[[プログラミング]]
#amazon_live(books-jp,search,Perl,48)
#amazon_search(small)