#!/usr/local/bin/perl ################################### #http://web.archive.org/web/20010305223003/http://www.ritsumei.ac.jp/~ec072981/ # ホームページ use Benchmark; $t1 = new Benchmark; # # ニュース記事 # $HEADLINE_HTML =<<'__EOF__';

琉球大学、裏講義概要オープンしました

琉球大学の講義のレビューを書きませんか? __EOF__ ################################## #ここから設定 # # 辞書の名前 $title = '琉大ナビ 裏講義概要'; # メールアドレス $mail = 'mail@oki-nabi.com'; # パスワード(必ず変更すること) $pass = 'mimimi320'; $super_passwd = "mimimi320"; # このCGIファイルの名前 $thiscgi ='review.cgi'; #オンラインシラバスのURL $onlinesyl = "http://www.u-ryukyu.ac.jp/syllabus/sylla_top.html"; #科目名+ファイル名一覧ファイル $lecfile = 'bkc/lecdata.csv'; #学部・コース・インスティテュート・科目分類一覧ファイル $catfile = 'bkc/leccat.csv'; #タイトル行を保存するログファイルを入れるディレクトリ $titledir = './bkc/title/'; #パーミッション777 #スレッドの記事を保存するログファイルを入れるディレクトリ $datadir = './bkc/log/'; # パーミッション777 #画像保存 $pic_dir = "./bkc/pic/"; $def_print_num = 20;#一頁に表示する件数 $ok_time = 120;#同じスレッドに対する投稿禁止期間(秒) # ライブラリへのパス require 'cgi-lib.pl'; require './jcode.pl'; require './mylib.pl'; ############################ # 設定ここまで ############################ &ReadParse; #デコード $mode = $in{"mode"}; $n = $in{"n"}; $o = $in{"o"}; $passwd = $in{"passwd"}; $subject = $in{"subject"}; $teacher = $in{"teacher"}; $about = $in{"about"}; $facl = $in{"facl"}; $stat = $in{"stat"}; $repu = $in{"repu"}; $enjoy = $in{"enjoy"}; $name = $in{"name"}; $pass = $in{"pass"}; $seme = $in{"seme"}; $year = $in{"year"}; $file = $in{"file"}; &jcode'convert(*about,sjis); &jcode'convert(*name,sjis); &jcode'convert(*year,sjis); &jcode'convert(*subject,sjis); &jcode'convert(*teacher,sjis); &jcode'convert(*facl,sjis); $next =0; if($ENV{'HTTP_ACCEPT_ENCODING'}=~/gzip/ ){ # ZIP圧縮できる場合(高速) print "Content-type: text/html\n"; print "Content-encoding: gzip\n\n"; open(STDOUT,"| /usr/bin/gzip -1 -c"); }else{ # ZIP圧縮できない場合(通常) print "Content-type: text/html\n\n"; } print <<"HT"; $title HT if($mode eq ""){ print ""; } print <<"HT";


琉大講義評価情報くちこみ系サイト。「琉大裏講義概要」
HT if($mode eq ""){ &MainPage; }elsif($mode eq "menu"){ # 左のフレーム &MenuPage; }elsif($mode eq "left_top"){# 左上 &LeftTop; }elsif($mode eq "view" || $mode eq "lecedit"|| $mode eq "regi3"){ #view:閲覧のみ,lecedit:講義情報書込,regi3:講義基礎データ登録 &ViewEachData; }elsif($mode eq "input"){ # レビューの書き込みフォーム &Input($file); }elsif($mode eq "preview"){ # レビューのプレビュー &Preview; }elsif($mode eq "regi"){ # 新規登録 &RegiPage1; }elsif($mode eq "regi2"){ # 新規登録 &RegiPage2; }elsif($mode eq "s"){ # 検索 &Kensaku($about); }elsif($mode eq "all"){ # 全てのスレッド一覧 &AllList; }elsif($mode eq "guide"){ # レビューのガイドライン &Guideline; }elsif($mode eq "admin"){ # 新規登録 &Admin1; }elsif($mode eq "sch"){ # 新規登録 &ReqSearch; }else{ &MainPage; # フレームを作る } print <<"HT";

このページの先頭へ

$titleについて

$titleは、 いかなる大学、組織とも関係ありません。 また、記載されている情報の信憑性を保障するものではありません。 各自の判断でご利用ください。単位取得は計画的に。 ヾ(´▽`;)ゝ

関連サイト: 琉大ちゃんねる -オキナビ - 2005オンラインシラバス(でもあんまないかも) -琉球大学

HT $t2 = new Benchmark; print "this code took: " .timestr(timediff($t2,$t1)); exit; ############################################## sub MainPage{ # ヘッダー部分 if($n ne ""){ &TitleList; }else{ $x=0; print <<"HT";

$titleは、あくまでも「主観的」な感想です。

講義の内容をレビューした高品位な講義レビューを募集しています。 ためになる講義、先生の熱意が感じられる講義など講義の情報をみんなで共有しよう。

HT &KensakuForm; print "
".$HEADLINE_HTML . "
"; &Guideline; } } sub TitleList{ print <<"HT";

検索結果

HT open (CAT ,"$catfile"); # categoryオープン while(){ ($id,$short,$l_name,$sum) = split(/,/,$_); if($n eq "$id"){ $temp_max = $sum; last; } } close(CAT); print "

"; #my $count = 0; $flag_num = int($temp_max / $def_print_num)+1; for($temp = 1 ;$temp <= $flag_num; $temp++){ print "$temp|"; } print "(全$temp_max件)

"; #$num_of_view_list#表示件数 #$p#$p=最初の数 #$print_num = $p + $num_of_view_list;#最終数 open (LOG ,"$lecfile"); # 個人ログファイルオープン my $num_of_view_list=1; while(){ $num_of_word++; local($faclnum,$sbj_name,$teacher,$filename,$num_rev,$stat,$pic,$kaisei) = split(/<>/,$_); if($n eq "$faclnum"){ &GetSbjData("$filename");#$short_data,$name_data,$file_name_data,$stat_data,$num_rev_data,$pic_data if($year eq "$kaisei" ||($year eq "")){#指定した回生、あるいは回生指定せず。 &PrintList("$num_of_view_list","$filename","$short_data","$name_data","$pic_data","$num_rev_data","$stat_data","$kaisei"); $num_of_view_list++; # if($def_print_num < $num_of_view_list){print "over";}#ここで打ち切り } } } if($num_of_view_list==1){ print "

選択した学部・学科・コース・インスティテュートには講義情報は登録されていません。募集中!

"; } } sub Guideline{ print <<"HT";

投稿のガイドライン

以下のものは削除対象です。常識的な範囲内でおねがいします。


ログについて

その科目がなくなったものや、担当教員が変わった場合、2年以上立ったものは削除したいと思います。 そのレビューが参考になりそうな場合は残しておくことにします。

HT } sub ViewEachData{ my $now_unix_time = time; #日付獲得 ($sec,$min,$hour,$mday,$mon,$year_t,$i) = localtime(time); $month = ($mon + 1);$year_t = ($year_t + 1900); $date = "$year_t/$month/$mday"; if($mode eq "regi3"){ #講義スレッドをたてる #二重投稿か? open CHK,"$lecfile"; my $marketdata; read(CHK,$before_data,512); ($b_num,$b_subject) = split(/<>/,$before_data); if($b_subject eq "$subject"){ $err_comment = "二重投稿はできません。"; }else{#違う @each_facl = split(/\0/,$facl); #時間だけだとダブる可能性があるので、乱数を利用 srand;$random=int(rand(10)); #ファイルネーム(スレッド番号)の作成 $datefile="$year_t$month$mday$hour$min$sec$random"; $file = "$datefile".".dat"; $short_data = "$subject"; $name_data = "$teacher"; foreach $number (@each_facl){ InputToFirstLine($lecfile,"$number<>$subject<>$teacher<>$datefile.dat<>$about<>\n");#一覧保存 open (CAT ,"$catfile"); #オープン @alldata = (); ($id,$s_name,$l_name,$sum) = split(/,/,$alldata[$number]); close(CAT); $new_sum = $sum +1; ChangeData("$catfile","$id,$s_name,$l_name,$new_sum,\n","$number");#各カテゴリへの件数の追加 } WriteNewData("$datadir$datefile.dat","$subject<>$teacher<>$datefile.dat<>$about<>\n"); #ログファイル WriteNewData("$titledir$datefile.dat","$subject<>$teacher<>$datefile.dat<>1<>0<><>$about<>\n"); #タイトルファイル } }elsif($mode eq "lecedit"){#記事を書き込む if($repu eq ""|| $year eq "" || $seme eq "" || $name eq "" || $subject eq "" || $facl eq ""){#必須事項が抜けている $err_comment = "必要事項が未記入です。戻って確認してください。"; }else{ $ip = $ENV{'REMOTE_ADDR'};#IPアドレスの取得 #タイトルファイルの書直し &GetSbjData("$file");#$short_data,$name_data,$file_name_data,$stat_data,$num_rev_data,$pic_data,$kaisei,$pre_pot_time if($ok_time >= $now_unix_time - $pre_pot_time && $pre_pot_time ne ""){#前の投稿より$ok_time秒以内の投稿はダメ。(他人でも) $err_comment = "$ok_time秒以内に投稿があったので、ブラウザの「戻る」ボタンで戻り、しばらく待って投稿してください。

(二重投稿を防止するため)"; }else{ my $new_rev_num = $num_rev_data + 1; WriteNewData("$titledir$file","$short_data<>$name_data<>$file_name_data<>$stat<>$new_rev_num<>$pic_data<>$kaisei<>$now_unix_time<>\n");#タイトルファイル #講義情報追加 open(IN, ">>$datadir$file"); flock(IN,2); print IN "$repu<>$enjoy<>$year<>$seme<>$subject<>$about<>$name<>$pass<>$facl<>$ip<>$now_unix_time<>$date<>$stat<>\n"; flock(IN,8); close(IN); } } } &GetSbjData("$file");#$short_data,$name_data,$file_name_data,$stat_data,$num_rev_data,$pic_data print <<"HT"; HT if($err_comment){ print "
"; print "

$err_comment

\n"; print "

"; }else{ } print <<"HT"; \n"; }elsif($stat_data == 2){ print "\n"; }else{ print "\n"; } if($kaisei eq "x"){ $kaisei = "(不明:確認してください)"; }else{ $kaisei = "$kaisei"."年次"; } print <<"HT";
$short_data
$name_data(担当)
HT if($stat_data == 3){ print "
現在は開講してない可\能\性があり。
担当教員が変更の可\能\性があり。
琉球大学

配当:$kaisei

この講義についてのレビュー(講義評価)を書く!
HT print <<"HT";


レビュー(講義評価)

HT if(-s "$datadir$file"){ #展開 open (LOG ,"$datadir$file"); # 講義ログファイルオープン $num_of_line=1; while(){ if($num_of_line > 1){ ($repu,$enjoy,$year,$seme,$subject,$about,$name,$pass,$facl,$ip,$time,$time,$stat) = split(/<>/,$_); &PrintReview($repu,$enjoy,$year,$seme,$subject,$about,$name,$pass,$facl,$ip,$time,$time,$stat); } $num_of_line++; } }else{ if($mode ne "regi3"){ print "Error : $file does not exist.."; } } if($num_of_line == 2 || $mode eq "regi3"){print "

まだ誰も書き込んでいません。情報提供をおねがいします。

";} print <<"HT";


同じ学部の講義を探す

HT open (CAT ,"$catfile"); # 個人ログファイルオープン @facl = (); close(CAT); open (LOG ,"$lecfile"); # 個人ログファイルオープン while(){ $num_of_word++; local($faclnum,$sbj_name,$teacher,$filename) = split(/<>/,$_); if($short_data eq "$sbj_name"){ ($id,$cat_subj_name,$cat_sbj_long_name,$sum) = split(/,/,$facl[$faclnum]); print "$cat_sbj_long_name
"; $count++; } } print <<"HT";

同じ教員の講義を探す

$name_data HT } sub Input{ my $file = $_[0]; &GetSbjData("$file");#$short_data,$name_data,$file_name_data,$stat_data,$reviw_num_data print <<"HT";

レビュー(講義評価)を書く

$short_data
$name_data

この講義に関するあなたの感想や意見をレビュー(講義評価)として\発\表\してみませんか?書き方や詳細については、レビューガイドライン をご覧ください。

それでは、下の欄にレビューをお願いします。



1.あなたについて

ニックネームでOK。できれば固定ハンドルでおねがいします。
 
 
2.あなたの受講状況について
 
2005 2004 2003 2002 2001 それ以前

セメスター[必須]
前期 後期 通年 夏季 その他 忘れた
 
3.現在の状況を知っている場合、チェックしてください。


たぶん変わらず。
先生が変わって内容が異なっている可能\性\がある。
開講されていない/覚えてない。
 
4.講義レビュー

単位取得度[必須]

難しい

やや難しい

普通

簡単

楽ちん

講義満足度[必須]

物足りない

やや物足りない

普通

充実

かなり充実

レビューを書く[必須]  ※根拠のない悪口は書かないでください。HTMLは無効です。

講義内容、教員について、試験情報、単位取得難易度、教科書が必要・不必要について、出席の取る、取らない、試験の詳細や毒舌コメントなどをどうぞ。

「楽勝情報のみ」は辞めてちょ。(出席:の所は書いても書かなくてもいいですよ。)
時折、改行すると読みやすくなります。
再編集パスワード (入れておくと再編集可\能\にする\予\定\)
JavaScriptをオンにしないと送信できません。

登録できないバグがたまに報告されています。念のため書いたものを保存しておいてください。






HT } sub Preview{ &GetSbjData("$file");#$short_data,$name_data,$file_name_data,$stat_data,$reviw_num_data print <<"HT";
講義レビューを書く

$short_data
$name_data

これでいいですか?よい場合は、登録ボタンを押してください。

HT $subject =~ s/&/&/g; $subject =~ s/>/>/g; $subject =~ s//g; $subject =~ s/\r|\n/
/g; &PrintReview($repu,$enjoy,$year,$seme,$subject,$about,$name,$pass,$facl,$ip,$time,$time,$stat); print <<"HT";





HT } ###### 登録1 sub RegiPage1{ print <<"HT"; 講義基礎データ新規登録

新規登録にあたって

講義基礎データの登録にご協力ください。
    方針:「漏れなくダブらず全てを網羅!」
  • 科目名が同じでも、教員が違う場合(語学などに多い)も、ここから新規登録してください。
  • 科目名が変わった場合、新規登録してください。
  • 科目名が違うけど、実は同じ講義の場合、は「/(半角スラッシュ)」で区切って両方書いてください。
  • キャンパスが違う場合は、別物として登録。
  • 分かる範囲でかまいません。間違いを見つけたら管理人が適宜訂正しますので。
  • 過去データで教員が違う場合、レビュー内に「2004年度は〇〇先生の講義で・・・」みたいな書きかたにしてOK

参考:琉大オンラインシラバス

HT &RegiForm; } #改訂する sub RegiRevise{ #データゲット &RegiForm; } ###### 登録2 sub RegiPage2{ @each_facl = split(/\0/,$facl); if($subject eq "" || $teacher eq "" | $facl eq "" ||$about eq ""){ print <<"HT";

未記入項目があります。

戻って再記入 HT }else{ print <<"HT"; 講義基礎データ新規登録
HT open (CAT ,"$catfile"); # categoryオープン @all_faculty = (); foreach $number (@each_facl){ ($id,$short,$name,$sum) = split(/,/,$all_faculty[$number]); print ""; } print <<"HT";
科目名$subject
担当者$teacher
配当年次$about
学部・学科・コース・インスティテュート

$name
HT foreach $number (@each_facl){ print "\n"; } print <<"HT";
HT } } sub Admin1{ my $line_count = 1; if($super_passwd eq "$pass"){ open (CAT ,"$datadir$file"); while(){ if($line_count == 1){ my ($sbj,$name,$file_name,$kaisei) = split(/<>/,$_); print <<"HT";
講義名
担当者
配当年次年次(半角数字を)

HT }else{ my ($repu,$year,$seme,$subject,$about,$name,$pass,$facl,$ip,$time,$time,$stat) = split(/<>/,$_); $strings = substr($subject,0,120); print ""; print ""; print ""; print "満足度:$enjoy"; print ""; print ""; print "
評価:$repu 受講:$yearセメスター:$seme
名前:$nameIP:$ip投稿時間:$time
(レビュー最初の120バイト)$strings ・・・"; print "\
"; print ""; print ""; print ""; } $line_count++; } }else{ print "ぱすわーどがちがうよ"; } } ### 登録フォーム sub RegiForm{ print <<"HT";

□講義基礎データ登録

科目名
担当者複数の場合は、リレー講義。
配当年次
開講学部学科 HT $line_count =0; open (CAT ,"$catfile"); # categoryオープン while(){ ($id,$short,$name,$sum) = split(/,/,$_); print "$name
\n"; $line_count++; } print <<"HT";

注意!両方にチェックを入れてください。
〇理工学部で学系共通専門科目:(経済専攻と経営専攻とか)
〇学部専門科目かつインス科目:


☆ご協力にかんしゃします
HT } sub NewList{ #タイトルリストを、日付を使ってソート #きれいに書ける気がするけど、とりあえず動いてるのでママ opendir(DIR, "$datadir"); my @tmp0 = grep /^[^.]/, readdir DIR; my @tmp1 = map { [$_, -M "$datadir/$_"] } @tmp0; my @tmp2 = sort { $a->[1] <=> $b->[1] } @tmp1; my @logz = map { $_->[0] } @tmp2; for($i = 0 ; $i<5;$i++){ $filename = $logz[$i]; $filename =~ s#.*/##; &GetSbjData($filename); $num = $i+1; &PrintList("$num","$filename","$short_data","$name_data","$pic_data","$num_rev_data","$stat_data","$kaisei",2); } } sub AllList{ #タイトルリストを、日付を使ってソート #きれいに書ける気がするけど、とりあえず動いてるのでママ opendir(DIR, "$datadir"); my @tmp0 = grep /^[^.]/, readdir DIR; my @tmp1 = map { [$_, -M "$datadir/$_"] } @tmp0; my @tmp2 = sort { $a->[1] <=> $b->[1] } @tmp1; my @logz = map { $_->[0] } @tmp2; print <<"HT"; 講義一覧

データファイルが更新されたものから順に$def_print_num件づつ\表\示

HT #foreach $filename (@logz){ my $num_of_data = @logz; my $first; if($n eq ""){ $first =0; }else{ $first = $n; } $how = int($num_of_data /$def_print_num) * $def_print_num; if($num_of_data % $def_print_num != 0){ $how = $how + $def_print_num; } my $count = 0; print "

"; for($j = 0 ; $j<$how;$j = $j +$def_print_num){ $count++; if($n >= $j && $n < $j +$def_print_num){ print "$count|"; }else{ print "$count|"; } } print "(全$num_of_data件)

"; my $print_num = $def_print_num + $n; for($i = $first ; $i<$print_num;$i++){ $filename = $logz[$i]; $filename =~ s#.*/##; &GetSbjData($filename); if($num_rev_data eq ""){$num_rev_data =0;} if($filename ne ""){ my $num = $i +1; &PrintList("$num","$filename","$short_data","$name_data","$pic_data","$num_rev_data","$stat_data","$kaisei"); } } print "

"; $count = 0; for($j = 0 ; $j<$how;$j = $j +$def_print_num){ $count++; if($n >= $j && $n < $j +$def_print_num){ print "$count|"; }else{ print "$count|"; } } if($num_of_data > $print_num){ print "次の$def_print_num件\n"; print "

"; } } sub ReqSearch{ print <<"HT"; 条件検索

工事中

科目名:

科目名の一部または全部
教員名:
配当年次:

指定した年次以上のものも含む
ジャンル:


HT } sub GetSbjData{ my $file = $_[0]; open (CAT ,"$titledir$file"); #オープン my @logdata = (); ($short_data,$name_data,$file_name_data,$stat_data,$num_rev_data,$pic_data,$kaisei,$pre_pot_time) = split(/<>/,$logdata[0]); close(CAT); } sub PrintList{ #改造(案) my $num_of_list = $_[0];#番号 my $filename = $_[1];#ログファイル名 my $sbj_name = $_[2];#講義名 my $staff_name = $_[3];#教員名 my $pic_data = $_[4];#画像の有無 my $rev_data = $_[5];#レビューの書込み数 my $now_data = $_[6];#現在の講義の情報 my $grade_data = $_[7];#回生 my $icon = $_[8];#アイコンのあるなし print "\n"; print ""; if($icon !=2){ print ""; print "\n"; print "\n"; if($rev_data eq "" ||$rev_data == 0){$rev_data = "(まだありません)";} print "\n"; if($now_data == 3){ print "
"; print ""; print "
"; print "
"; } print "
$num_of_list.\n"; print "$sbj_name
$staff_name(担当)
レビューの数:$rev_data
現在開講されていない可\能\性があります。\n"; }elsif($stat_data == 2){ print "
担当教員が変わっている可\能\性があります。\n"; }else{ print "
琉球大学\n"; } if($grade_data eq "x" || $grade_data eq ""){ print "配当年次不明"; }else{ print "$grade_data年次配当"; } print "

\n"; } sub PrintReview{ print "

"; print "難易度:"; $rest_star = 5 - $repu; for($star=0;$star < $repu;$star++){ print ""; } for($r_star=0;$r_star < $rest_star;$r_star++){ print ""; } print "

"; print "満足度:"; $rest_star = 5 - $enjoy; for($star=0;$star < $enjoy;$star++){ print ""; } for($r_star=0;$r_star < $rest_star;$r_star++){ print ""; } print "\n\n
投稿者  $name\"; if($facl == 1){print "(法文学部)";} if($facl == 2){print "(教育学部)";} if($facl == 3){print "(理学部)";} if($facl == 4){print "(医学部)";} if($facl == 5){print "(工学部)";} if($facl == 6){print "(農学部)";} if($facl == 7){print "(その他)";} print "\n   $year\年\n"; if($seme == 1){print "前期に受講";} if($seme == 2){print "後期に受講";} if($seme == 3){print "通年に受講";} if($seme == 4){print "夏季に受講";} if($seme == 5){print ",その他の期間に受講";} if($seme == 6){print "に受講(セメスターは不明)";} print "
\n\n"; print "$subject\n"; if($about){ print "

(試験についてのコメント)\n
$about"; } print "


\n\n"; } sub Kensaku{ $word = $_[0]; if($word eq ""){ &KensakuForm; }else{ print "

\"$word\"の検索結果

"; &KensakuForm($word); open (CA ,"$lecfile"); # categoryオープン $num=1; while(){ if(/$word/){ ($j,$short_data,$name_data,$filename,$kaisei)= split(/<>/,$_);$num_rev_data=1; if($tmpfile ne "$filename"){ &GetSbjData($filename); ;&PrintList("$num","$filename","$short_data","$name_data","$pic_data","$num_rev_data","$stat_data","$kaisei"); $num++; } #バグ修正 $tmpfile=$filename; } } if($num==1){ print "

該当する講義は存在しません。

"; print "検索のヒント"; print "検索語を短めに。ex. 苗字のみにする。"; } } } sub KensakuForm{ my $word = $_[0]; print <<"HT";
講義名または教員名で検索
HT }