#!/usr/local/bin/perl #↑あなたのブロバイダのCGIパスを記述してください。 #==================================================================# # Anthologys v2.5e # # Script by YASUU!! 2005/3/13 # # Ver.Mini Arrange by ZERO 2007/10/27 # #==================================================================# #======================あなたが設定する項目========================# #このCGI ScriptのURL指定(通常はこのまま) $reload = './mini3.cgi'; #HomepageのURL指定(相対パス・絶対パス http://〜 のどちらでも良い) $home = ''; #CGIのタイトル $title = 'Anthologys 詩歌集'; #----------------最初に表示されるページの設定-----------------# #BODYタグ設定(リンク色はBODYタグとは別々に設定) $body = ''; $link_c = '#9696ff'; #リンク色 $vlink_c = '#5599aa'; #既読リンク色 $alink_c = '#0099ff'; #選択リンク色 $olink = '#0099ff'; #オンマウス時のリンク色 #タイトルにイメージを使用する場合、画像のURLを指定 $title_img = ''; #タイトル文字表示定義(上の設定でイメージを使用しなかった場合) $title_def = ''; #作品タイトル等の強調フォントスタイル $font = 'times new roman'; $size{'font'} = '9pt'; #基本文字サイズ (全てのページに反映) $size{'table'} = '9pt'; #基本テーブルの文字サイズ (全てのページに反映) $table{'all_size'} = '750'; #投稿作品一覧全体の横の長さ $table{'tit_size'} = '40%'; #作品名一覧の横の長さ $table{'all_bg'} = '#222222'; #投稿作品一覧枠の全体背景 $table{'all_bord'} = '#333333'; #枠の色 $table{'bstyle'} = 'groove'; #枠の形状('none','solid','double','groove','dotted'など) $table{'up_bg'} = '#333333'; #投稿作品一覧の表題の背景 $table{'up_font'} = '#ffffff'; #投稿作品一覧の表題内の文字色 $table{'down_bg'} = '#000000'; #投稿作品一覧リストの背景 $table{'down_font'} = '#cccccc'; #投稿作品一覧リスト内の文字色 $form{'bg'} = '#000000'; #フォームの背景 $form{'font'} = '#00ee00'; #フォーム内の文字色 $form{'bord'} = '#666666'; #フォームの枠色 $align = 'center'; #ページを左揃えにする場合はleft,中央ぞろえにする場合はcenterに $src = ''; #一覧の作者欄に作者検索へのリンク (1=貼る 空白=貼らない) #-------------------------投稿者背景の設定---------------------------# $haik = '';#背景を統一する場合は 1 を消す(※この場合文字色も統一) #投稿FORMに32×32サイズでアイコンが表示されるので、正方形の画像を使用 #---'',で区切って画像URLを指定することにより、何個も追加できます。--# @IMG = ( './bg_a.gif', './bg_b.gif', './bg_c.gif', './bg_d.gif', './bg_e.gif', './bg_f.gif', './bg_g.gif', './bg_h.gif', ''); #-----------------------投稿者文字色の設定--------------------------# $moir = '';#文字色を統一する場合は 1 を消す @FONT = ( '#000000', '#0000A0', '#800040', '#E10000', '#005100', '#4F4F4F', '#575700', '#B500B5', '#5400A8', '#003377', ''); #-----------------------作品閲覧ページの設定--------------------------# #作品閲覧時のタイトルバーの表示文字(1=作品の前書き,空白=作品の題名[前書き機能OFF]) $sakutit = '1'; #基本背景色(背景を統一しない場合。BODYタグと同じ背景色を推奨) $bg_c = '#212121'; #基本文字色(背景を統一しない場合。BODYタグと同じ文字色を推奨) $txt_c = '#999999'; #作品・感想閲覧時の各罫線(横線)の色 $hr_c ='#444444'; #各種テーブルの横幅 $table{'s_size'} = '90%'; #作品閲覧時のテーブル幅 $table{'r_size'} = '90%'; #感想欄のテーブル幅 #各種文字の大きさ $size{'s_tit'} = '15pt'; #作品閲覧時のタイトルの文字サイズ $size{'s_ar'} = '10pt'; #作品の作者、日付記述等の文字サイズ $size{'s_font'} = '12pt'; #作品の内容の文字サイズ $size{'s_come'} = '10pt'; #作者からのメッセージの文字サイズ $size{'r_tit'} = '10pt'; #感想ページのタイトルの文字サイズ $size{'r_come'} = '10pt'; #感想記事の上欄の文字サイズ $size{'r_come2'} = '10pt'; #感想の文字サイズ #------------説明書などの各ページのレイアウト設定----------------# $size{'exp'} = '9pt'; #説明書の基本文字サイズ $size{'exp2'} = '11pt'; #説明書の見出し文字サイズ $table{'exp_size'} = '600'; #説明書のテーブル幅 $table{'exp2_size'} = '90%'; #説明書の見出し幅 $table{'serch_size'} = '50%'; #検索テーブル幅 $table{'del_size'} = '95%'; #作品管理のテーブル幅 $table{'del_t_size'} = '150'; #作品管理の作品名欄の幅 $table{'del2_size'} = '85%'; #感想管理のテーブル幅 $table{'del2_t_size'} = '20%'; #感想管理の記事NO.欄の幅 $table{'del2_t2_size'} = '30%'; #感想管理の登録日欄の幅 #-----------------------その他の重要な設定--------------------------# $pass = 'abc123'; #管理者passwordの設定 $cnts = '1'; #閲覧数カウント (1=IP解析をする 2=IP解析しない 空白=表示しない) $cntdir = './cnt/'; #カウント数のログを保存するディレクトリ $byte = '1'; #作品の長さ測定 (1=10KB以上で略記 2=BYTE数をそのまま表示 空白=表示しない) $hos = '1'; #ホスト表示 (1=ID化する 2=ID化しない 空白=表示しない) $trips = '1'; #トリップ機能を使用する場合は 1 を入れる $iplim = ''; #作品の作者からの感想投稿を制限する場合は 1 を入れる $iplim2 = ''; #同じ人の感想の連続投稿を制限する場合は 1 を入れる #海外の自動投稿プログラム対策 $eng = '1'; #英数字だけの投稿を制限する場合は 1 を入れる $urlmax = '10'; #内容に記述できるURLの数( 0 にすると制限なし) $encode = '1'; #「SHIFT-JIS」エンコード以外の投稿を制限する場合は 1 を入れる $list = '30'; #TOPpage 1pageに表示する記事数一覧のリスト数設定 $list2 = '5'; #1pageに表示する感想記事数一覧のリスト数設定 $list3 = '10240'; #閲覧時の作品分割設定 (数字=1pageに表示するbyte数[標準は10KB] 空白=分割機能OFF) $max = '100'; #最大記録保持数設定 この件数に達すると、ログのbackupを作成します(backupを設定した場合。) $max2 = '50'; #感想ログ最大記録数設定 $n_view = '3'; #NEW,UPの表示期間 (日) ( 0 を指定すると表示しなくなる) $n_img = ''; #NEWを画像にする場合のパス(空にするとNEW!!という文字が表示されます。) $u_img = ''; #同じくUPの画像パス $rom = ''; #一般投稿を募集しない場合は 1 を入れる(あなただけが投稿できるようになる) #一覧の表題の記述設定(左の欄から順番に記述) #(※閲覧数や文字数などを表示しない設定でも","は削除しないこと) @tab = ("Title","Name","最終更新","閲覧数","Byte","Res","Point"); #並び替えフォームの記述設定(※上と同様","は残しておく) @sort = ("登録順","更新順","作品名順","作者名順","閲覧数順","文字数順","返信数順","点数順"); #禁止タグ設定(","で区切って追加) @tag = ("table","meta","!--","form","embed","script","frame"); #作品削除ログを保存するディレクトリ(管理モード時のみ閲覧可) $del_dir = './del/'; #削除ログ最大記録数設定 $del_max = '100'; #作品の連続投稿の禁止期間 (左から順に'日','時','分','秒'。標準は5分) $wait = '00'.'00'.'05'.'00'; #修正時に、記事を最上欄に上げるかどうかの設定 (1=投稿者選択 2=上げる 空白=そのまま) $sel = '1'; #作品記事 $sel2 = '1'; #感想記事 #------------------------ログの設定-------------------------------# $backup = '1'; #バックアップをしない場合は1を削除 $backname = '作品集その'; #backupファイルへのリンク見出し #ログ、バックアップログを保存するディレクトリ(Anthology.cgiと同じディレクトリ内 同じディレクトリに設置できない場合は../log/というようにcgi-bin横に設定 パーミッション777 $dir = './log/'; #------------------------sendmailの設定-----------------------------# $mailsend = ''; #mailを受け取る場合は 1 を入れる $mailto = ''; #管理人のメールアドレス $sendmail = '/usr/sbin/sendmail'; #sendmailのパス プロバイダに確認すること $webmaster = ''; #管理人の名前 #---------------ログの消失を防ぐためロックを設定する--------------# $lockdir = './lock/'; #ロックファイルを生成するディレクトリ(パーミッション777) $lock = '1'; #ロック方法(1=symlink方式,2=open式,0=設定なし) #-------------------------感想記事の設定----------------------------# $res = '1'; #感想投稿をしない場合は 1 を消す $resdir = './res/'; #感想記事を保存するディレクトリ $point = '1'; #採点機能設定(1=選択式,2=点数入力式,空白=採点なし) $plus_c = 'green'; #得点が+のときの得点色(標準は青。#0000ffなどと色番号で指定しても良い) $minus_c = 'yellow'; #得点が−のときの得点色(標準は赤。上に同じ) #--- 採点機能で 1 を選択した場合の評価と点数一覧(評価のタイトル=点数) ---# @POINT = ( 'とても良い=50', '良い=30', '普通=10', '良くない=-20', '最悪=-30'); #--- 採点機能で 2 を選択した場合の点数の上限,下限設定 ---# $maxp = '100'; #最高点設定 $minp = '0'; #最低点設定 #-----アクセス拒否-----# $kyohi = ''; #する場合は 1 を入れる #--入室を拒否するIPまたはブロバイダ名を '127.0.0.1', というように''内に記述---# @kyohi = ( 'proxy', '', '', '', ''); #------表示するメッセージなどの設定<タグも使えます>------# #一覧のタイトルの下に表示するメッセージ sub mes{ print <ホームに戻る HTML #ここは新規投稿を打ち切る場合に必要な処理です if ($FORM{'log'} eq '' && $rom eq '') { if ($cnt <= $max) { print "■新規投稿\n"; } } print <説明書 ■検索管理用 HTML } #作品一覧の上に表示するメッセージ sub mes2{ print < *投稿作品一覧*

HTML } #新規投稿・検索のページなどで上部に表示するメッセージ sub mes3{ print < ■一覧に戻る HTML #こちらは投稿作品の編集時の場合のみ表示するメッセージ if ($FORM{'key'}) { print "■作品に戻る\n"; print "■削除・編集に戻る\n"; } } #作品一覧の下に表示するメッセージ sub mes4{ print <ホームに戻る HTML #ここは新規投稿を打ち切る場合に必要な処理です if ($FORM{'log'} eq '' && $rom eq '') { if ($cnt <= $max) { print "■新規投稿\n"; } } print <説明書 ■検索管理用 HTML } #説明書で表示するメッセージ("\"は文字化け防止用なので削除しないこと) sub mes5{ print <
HTML @mes=(); @ctgr=(); $ctgr[0] = "▼この掲示板について\n"; $mes[0] .= "
  • こちらは小説を公開する専用掲示板です。\n"; #新規投稿を禁止している場合は非表示 if ($rom ne '1') { $ctgr[1] = "▼作品の投稿について\n"; $mes[1] .= "
  • 作品を投稿するには、「新規投稿」の欄からどうぞ。\n"; $mes[1] .= "
  • 以下は投稿フォームの各項目の説明です。

    \n"; $mes[1] .= "
    \n"; $mes[1] .= "*小説投稿*\n"; $mes[1] .= "
    \n"; $mes[1] .= "
    \n"; $mes[1] .= "
    「お名前」\n"; $mes[1] .= "
    あなたのHNです。転載などの場合は、作品の作者名を入力してください。\n"; $mes[1] .= "
    また、名前欄にはトリップ機能\を実装しています。詳しくは▼投稿上の注意を参照。\n" if ($trips); $mes[1] .= "
    「Mail」\n"; $mes[1] .= "
    メールアドレスです。入力は任意です。\n"; $mes[1] .= "
    「URL」\n"; $mes[1] .= "
    ホームページのアドレスです。同じく入力は任意です。\n"; $mes[1] .= "
    \n"; $mes[1] .= "
    \n"; $mes[1] .= "
    \n"; $mes[1] .= "*投稿作品*\n"; $mes[1] .= "
    \n"; $mes[1] .= "
    \n"; $mes[1] .= "
    「TITLE」\n"; $mes[1] .= "
    作品の題名を入力します。\n"; #前書き機能OFFの時は非表示 if ($sakutit) { $mes[1] .= "
    「前書き」\n"; $mes[1] .= "
    作品の前書きです。入力は任意です。\n"; $mes[1] .= "
    入力すると作品閲覧時にタイトルバー(ブラウザの左上の方)に表\示されます。\n"; $mes[1] .= "
    また、一覧で作品名にカーソ\ルを合わせても表\示されます。\n"; } $mes[1] .= "
    「作品内容」\n"; $mes[1] .= "
    作品の内容を入力します。\n"; $mes[1] .= "
    作品には一部のタグを除き、HTMLタグが使用可能\です。\n"; $mes[1] .= "
     ◇使用禁止タグ一覧:
      \n"; foreach (@tag) { $mes[1] .= "<$_>\n"; $tags=1; } if (!$tags) { $mes[1] .= "なし\n"; } $mes[1] .= "
    「コメント」\n"; $mes[1] .= "
    作品の後書きです。入力は任意です。\n"; $mes[1] .= "
    入力無しの場合、「作者からのメッセージはありません」と表\示されます。\n"; $mes[1] .= "

    \n"; #背景統一時は非表示 if ($haik) { $mes[1] .= "
    \n"; $mes[1] .= "*背景と文字色の選択*\n"; $mes[1] .= "
    \n"; $mes[1] .= "
    \n"; $mes[1] .= "
    「背景画像」\n"; $mes[1] .= "
    作品の背景となる画像を選択します。選択しない場合、■の色が背景色となります。\n"; $mes[1] .= "
    また、画像をクリックすると背景プレビューが表\示されます。\n"; $mes[1] .= "
    「背景画像URL」\n"; $mes[1] .= "
    その他の画像を背景として用いる場合、背景画像のURLを入力します。\n"; $mes[1] .= "
    直リンク不可のサイト内の画像は使えません。また、無断で他人の画像を使うのはやめましょう。\n"; $mes[1] .= "
    「文字色」\n" if ($moir); $mes[1] .= "
    作品内容の文字色を指定します。\n" if ($moir); $mes[1] .= "

    \n"; } $mes[1] .= "
    \n"; $mes[1] .= "*その他*\n"; $mes[1] .= "
    \n"; $mes[1] .= "
    \n"; $mes[1] .= "
    「PASSWORD」\n"; $mes[1] .= "
    作品のパスワードを入力します。作品の修正・削除に使用します。\n"; $mes[1] .= "
    パスワードは半角英数字8文字以内で記入してください。\n"; $mes[1] .= "
    「プレビュー」\n"; $mes[1] .= "
    「あり」にすると登録前に投稿プレビューを表\示します。\n"; $mes[1] .= "
    通常は「あり」にして問題がないか確認してから投稿することをおすすめします。\n"; $mes[1] .= "
    「修正方法」\n" if ($sel eq '1'); $mes[1] .= "
    作品の修正の場合に出現します。詳しくは▼記事の修正・削除についてを参照。\n" if ($sel eq '1'); $mes[1] .= "

    \n"; $mes[1] .= "
  • 長編を公開する場合は、章立てなど作品を分割して公開することをおすすめします。\n"; $mes[1] .= "
     例: 「思い出 第一話」, 「明日の空 〜朝の巻〜」\n"; #連続投稿禁止期間が 0 の時は非表示 if ($wait + 0) { if ($wait < 100) { $p_wait = $wait + 0; $p_wait .= '秒'; } elsif ($wait < 10000) { $p_wait = $wait / 100; $p_wait .= '分'; } elsif ($wait < 1000000) { $p_wait = $wait / 10000; $p_wait .= '時間'; } elsif ($wait < 100000000) { $p_wait = $wait / 1000000; $p_wait .= '日'; } $mes[1] .= "
  • $p_wait以内の作品の連続投稿は受け付けませんのでご注意ください。\n"; } #バックアップの設定によって異なる処理 $cnt=0; open(FD,"$file"); while() { $cnt++; } close(FD); if ($backup) { $mes[1] .= "
  • 現在の作品投稿数は$cnt件です。$max件を超えると現在の作品集の投稿を締め切ります。\n"; } else { $mes[1] .= "
  • 現在の作品投稿数は$cnt件です。$max件を超えると若い記事から削除されます。\n"; } $mes[1] .= "
  • その他の注意点については、▼投稿上の注意を参照。\n"; } #感想投稿機能OFFの時は非表示 if ($res) { $ctgr[2] = "▼感想の投稿について\n"; $mes[2] .= "
  • 気に入った作品へ感想を寄せることができます。\n"; $mes[2] .= "
    まず作品下部の「感想を見る」の欄を選択すると感想閲覧ページに飛びます。\n"; $mes[2] .= "
    ページ下部に感想投稿フォームがあります。そちらからどうぞ。\n"; $mes[2] .= "
  • 以下は感想投稿フォームの各項目の説明です。

    \n"; $mes[2] .= "
    \n"; $mes[2] .= "
    「お名前」\n"; $mes[2] .= "
    あなたのHNを入力します。\n"; $mes[2] .= " トリップ機能\実装。(詳しくは▼投稿上の注意参照)\n" if ($trips); $mes[2] .= "
    「E-Mail」\n"; $mes[2] .= "
    メールアドレスを入力します。入力は任意です。\n"; $mes[2] .= "
    「URL」\n"; $mes[2] .= "
    参照先のホームページアドレスを入力します。入力は任意です。\n"; $mes[2] .= "
    「メッセージ」\n"; $mes[2] .= "
    感想の内容を入力します。\n"; #採点方法によって異なる処理。採点機能OFFの時は非表示 if ($point eq "1") { $mes[2] .= "
    「評価」\n"; $mes[2] .= "
    作品に点数をつけて評価します。セレクトボックスからお好みの評価を選んでください。
    \n"; #配点表の生成処理 local($pp) = ' 評価の配点:'; $mes[2] .= "\n"; foreach (@POINT) { local($p1,$p2) = split(/=/,$_); $mes[2] .= ""; $mes[2] .= "\n"; $mes[2] .= "\n"; $mes[2] .= "\n"; $mes[2] .= "\n"; undef $pp; } $mes[2] .= "
    $pp$p1$p2点
    \n"; } elsif ($point eq "2") { $mes[2] .= "
    「評価」\n"; $mes[2] .= "
    作品に点数をつけて評価します。$minp点から$maxp点までの間で入力してください。\n"; } $mes[2] .= "
    「削除用パス」\n"; $mes[2] .= "
    パスワードを設定します。後に感想内容の修正や削除に必要です。\n"; $mes[2] .= "
    半角英数字8文字以内で記入してください。\n"; $mes[2] .= "
    「修正方法」\n" if ($sel2 eq '1'); $mes[2] .= "
    記事修正時に出現。(詳しくは▼記事の修正・削除について参照)\n" if ($sel2 eq '1'); $mes[2] .= "

    \n"; $mes[2] .= "
  • 感想記事は$list2件ごとにページを分割して表\示します。\n"; $mes[2] .= "
  • 感想は$max2件まで投稿できます。指定件数を超えると、若い記事から削除されます。\n"; $mes[2] .= "
  • 作者自身は自分の作品に感想を投稿できません。読者からの感想を待ちましょう。\n" if ($iplim); $mes[2] .= "
  • 感想の投稿は一作品につき一回だけです。ご注意ください。\n" if ($iplim2); $mes[2] .= "
  • その他の感想投稿の注意点については、▼投稿上の注意を参照。\n"; } #小説・感想の両方の投稿を禁止している場合は非表示 if (!$rom || $res) { $ctgr[3] = "▼記事の修正・削除について\n"; $mes[3] .= "
  • 投稿した記事はパスワードを使って修正や削除などのメンテナンスを行うことができます。\n"; $mes[3] .= "
    \n"; $mes[3] .= "
     #作品の修正・削除:\n" if (!$rom); $mes[3] .= "
    作品下部の「編集・削除」の欄を選び、専用のフォームから行ってください。\n" if (!$rom); $mes[3] .= "
     #感想の修正・削除:\n" if ($res); $mes[3] .= "
    感想記事の真下に専用のフォームがあります。お目当ての記事のNo.を選んでください。\n" if ($res); $mes[3] .= "
    \n"; $mes[3] .= "
  • 「編集」を選ぶと、投稿時のフォームが、各項目に記事内容が自動入力されて現れます。\n"; $mes[3] .= "
    必要な項目を修正して「投稿」ボタンを押してください。\n"; if ( (!$rom && $sel eq '1') || ($res && $sel2 eq '1') ) { $mes[3] .= "
  • なお、投稿フォームには「修正方法」の欄が新たに出現します。\n"; $mes[3] .= "
    欄内の「記事を上げる」にチェックを入れると、記事が一覧の最上部に移動します。\n"; } $ctgr[4] = "▼投稿上の注意\n"; $mes[4] .= "
  • 半角カナは使用しないでください。文字化けの原因となります。\n"; $mes[4] .= "
  • また仕様上、半角コンマ「,」は使えません。全角コンマ「,」に置き換えてください。\n"; $mes[4] .= "
  • 英数字のみの投稿はご遠慮願います。小説・感想は日本語でお書きください。\n" if ($eng); $mes[4] .= "
  • 投稿内容に直接URLを書くと、自動でURL先へリンクされます。\n"; $mes[4] .= "
     例: http://google.co.jp/ ⇒ http://google.co.jp/\n"; $mes[4] .= "
  • 投稿内容へのURLの記述は$urlmax件まで可能\です。\n" if ($urlmax); $mes[4] .= "
  • 投稿時はブラウザの「エンコード」を「SHIFT-JIS」にしておいてください。\n" if ($encode); $mes[4] .= "
    通常はこの設定になっているので問題ありません。\n" if ($encode); #トリップ機能無効時は非表示 if ($trips) { $mes[4] .= "
  • 名前にはトリップが適用可能\です。\n"; $mes[4] .= "
    「名前#任意の文字列」と入力すると「名前◆暗号化文字列」と固有のHNに変換されます。\n"; $mes[4] .= "
     例: 「クロネコ#123」 ⇒ 「クロネコ◆T6WruEzj8n6」\n"; $mes[4] .= "
  • 「#」以降の文字列が一致して初めて同じHNになります。よってトリップは偽者防止になります。\n"; $mes[4] .= "
  • また、もし偽者が名前の欄にトリップHNを入力しても、◆が◇に変換されるため偽装が発覚します。\n"; $mes[4] .= "
     例: 「クロネコ◆T6WruEzj8n6」 ⇒ 「クロネコ◇T6WruEzj8n6」\n"; $mes[4] .= "
  • トリップは記事修正時に消滅します。再度トリップキーを入力してください。\n"; $mes[4] .= "
     例: 「クロネコ◆T6WruEzj8n6」 ⇒ 「クロネコ#」\n"; } #ID機能無効時は非表示 if ($hos eq '1') { $mes[4] .= "
  • 投稿時には個別にIDが割り振られるため、IDによって投稿者を識別することもできます。\n"; $mes[4] .= "
  • ただし、IDは完全に個人を判別できるわけではありません。\n"; $mes[4] .= "
    プロバイダが同じなどの場合にたまに他者と一致することがあります。\n"; $mes[4] .= "
    また、プロバイダによってはIPが変動するため、同時にIDも切り替わることがあります。\n"; } } $ctgr[5] = "▼作品一覧について\n"; $mes[5] .= "
  • こちら掲示板のTOPは、作品一覧となっています。\n"; $mes[5] .= "
  • 作品を閲覧するには、作品の題名をクリックしてください。\n"; $mes[5] .= "
  • なお、作品一覧は$list件ごとにページが別れて表\示されます。\n"; #NEW,UPの表示期間が 0 の時は非表示 if ($n_view) { if ($u_img eq '') { $up = "UP!!"; } else { $up = "\"UP\""; } if ($n_img eq '') { $new = "NEW!!"; } else { $new = "\"NEW\""; } $mes[5] .= "
  • $n_view日以内に投稿された作品には $new がつきます。\n"; $mes[5] .= "
  • 同じく$n_view日以内に修正された作品には $up がつきます。\n"; } $mes[5] .= "
  • 以下は一覧の各題目の説明です。

    \n"; $mes[5] .= "
    \n"; $mes[5] .= "
    「$tab[0]」\n"; $mes[5] .= "
    作品の題名です。カーソ\ルを合わせると作品の前書きが表\示されます。\n"; $mes[5] .= "
    「$tab[1]」\n"; $mes[5] .= "
    作品の作者名です。アドレス記入時のみ、作者宛てのメールへのリンクが貼\られています。\n"; $mes[5] .= "
    「$tab[2]」\n"; $mes[5] .= "
    作品の最後に修正のあった日付です。一度も修正されていない作品では投稿日と一致します。\n"; #閲覧数機能OFFの時は非表示 if ($cnts) { $mes[5] .= "
    「$tab[3]」\n"; $mes[5] .= "
    作品を閲覧した人数です。読者が作品を訪問するたびにカウントされます。\n"; $mes[5] .= "
    ただし同じ人が連続で作品をリロードしてもカウントされません。ご注意ください。\n" if ($cnts eq '1'); } #文字数計算機能OFFの時は非表示 if ($byte) { $mes[5] .= "
    「$tab[4]」\n"; $mes[5] .= "
    作品の長さを表\します。長さは半角文字=1、全角文字=2で計算されます。\n"; $mes[5] .= "
    また、10KB(=10240 byte)を超える作品については、長さをKB単位で表\します。\n" if ($byte eq '1'); $mes[5] .= "
     例: 20000 byte ⇒ 20K\n" if ($byte eq '1'); } #感想投稿機能OFFの時は非表示 if ($res) { $mes[5] .= "
    「$tab[5]」\n"; $mes[5] .= "
    感想の投稿数です。感想閲覧ページへ直接リンクが貼\られています。\n"; $mes[5] .= "
    また、オンカーソ\ルで感想投稿者の内訳が表\示されます。\n"; $mes[5] .= "
     例: 〔黒猫〕 〔KURONEKO〕 〔クロネコ〕  (※感想投稿者が3人の場合)\n"; } #採点機能OFFの時は非表示 if ($res && $point) { $mes[5] .= "
    「$tab[6]」\n"; $mes[5] .= "
    作品の評価の合計です。オンカーソ\ルで採点の内訳が表\示されます。\n"; $mes[5] .= "
     例: 〔50点×1〕 〔10点×2〕 〔0点×3〕  (※感想投稿者が6人の場合)\n"; } $mes[5] .= "

    \n"; $ctgr[6] = "▼作品閲覧について\n"; $mes[6] .= "
  • 一覧で作品をクリックすると作品の内容を閲覧できます。\n"; $mes[6] .= "この時に閲覧数がカウントされます。\n" if ($cnts); $mes[6] .= "
  • ${list3}byteを超える長い作品は、閲覧時に自動的に分割して表\示されます。\n" if ($list3); $ctgr[7] = "▼検索について\n"; $mes[7] .= "
  • 投稿されている作品は、作者や語句を検索して表\示する作品を絞り込むことができます。\n"; $mes[7] .= "
    TOPの「検索」メニューからどうぞ。\n"; $mes[7] .= "
  • また、同じメニューから作品を指定した方法で並び替えることもできます。\n"; $mes[7] .= "
    並び替えの内容は以下のとおりです。

    \n"; $mes[7] .= "
    \n"; $mes[7] .= "
    「$sort[0]」\n"; $mes[7] .= "
    投稿された順番に作品を表\示します。デフォルトではこれになっています。\n"; $mes[7] .= "
    「$sort[1]」\n"; $mes[7] .= "
    更新された日付が新しい作品を順に表\示します。\n"; $mes[7] .= "
    「$sort[2]」\n"; $mes[7] .= "
    作品をあいうえお順に並び替えます。ひらがな以外の文字の順番は、\n"; $mes[7] .= "
     英数字 ⇒ ひらがな ⇒ カタカナ ⇒ 漢字 の順になります。\n"; $mes[7] .= "
    「$sort[3]」\n"; $mes[7] .= "
    同じ作者の作品をまとめて表\示します。並び替え法は作者名であいうえお順となります。\n"; #閲覧数機能OFFの時は非表示 if ($cnts) { $mes[7] .= "
    「$sort[4]」\n"; $mes[7] .= "
    閲覧数の多い作品ほど上に来るように並び替えます。\n"; } #文字数計算機能OFFの時は非表示 if ($byte) { $mes[7] .= "
    「$sort[5]」\n"; $mes[7] .= "
    作品内容の長い作品から順に表\示します。\n"; } #感想投稿機能OFFの時は非表示 if ($res) { $mes[7] .= "
    「$sort[6]」\n"; $mes[7] .= "
    感想の多い作品から順に表\示します。\n"; } #採点機能OFFの時は非表示 if ($res && $point) { $mes[7] .= "
    「$sort[7]」\n"; $mes[7] .= "
    評価の合計の多い作品から順に表\示します。\n"; } $mes[7] .= "

    \n"; $mes[7] .= "
  • これらはすべて「降順」の並び方です。「昇順」を選択すると、通常の逆順に表\示されます。\n"; #カテゴリ列挙処理 $i=0; print "
    \n"; foreach (@ctgr) { if ($_ eq '') { $i++; next; }; print "$ctgr[$i]\n"; if ($#ctgr-1 >= $i) { print "|"; } $i++; } print "
    \n"; #各メッセージ表示処理 $i=0; foreach (@mes) { if ($_ eq '') { $i++; next; }; print "
    \n"; print "\n"; print "
    \n"; print "$ctgr[$i]\n"; print "
    \n"; print "
      \n"; print "$_\n"; print "
    \n"; $i++; } (@mes,@ctgr,$i) = undef; #フッタ表示処理 print "
    \n"; print "\n"; print "
  • \n"; } #著作権表示(※削除や見えにくくするなどの改変行為は禁止します) sub tyo{ print < Anthologys v2.5e Script by YASUU!!
    Ver.Mini Arrange by ZERO
    HTML } #----------------------メッセージの設定はここまで------------------------# #----------------------STYLE SHEETの設定---------------------------------# sub style { if ($styleflag) { return: } print < HTML $styleflag = 1; #STYLE SHEETの二重呼び出し防止 } #================設定項目はここまで(以下はプログラム)===============# $cookiename = 'anthology'; #=以下のファイルはこの掲示板のScriptと同じディレクトリに設置========# require './jcode.pl'; if ($kyohi eq '1') { &kyohi; } if ($ENV{'REQUEST_METHOD'} eq "POST") { $post=1; read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $post=0; $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach (@pairs) { ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/&/&/g; $value =~ s/"/"/g; if ($name eq "come") { $value =~ s/
    /\r/g; } if ($name ne "value") { $value =~ s//>/g; } else { foreach (@tag){ if ($value =~ /<$_(.|\n)*>/i) { &error("使用禁止タグが記述されています。"); } } } if ($value =~ /\,/i) { &error("半角コンマ「,」は使用できません。全角コンマ「,」に置き換えてください。"); } $value =~ s/\0//g; $value =~ s/\r\n/
    /g; $value =~ s/\r/
    /g; $value =~ s/\n/
    /g; if ($name eq 'target') { push(@CK,$value); } else { $FORM{$name} = $value; } } if ($FORM{'log'} eq '') { $file = "$dir" . 'anthology.txt'; } else { $file = "$dir" . "$FORM{'log'}" . '.txt'; if (!-e $file) { &error("指定されたログは存在しません。"); } } &link; if (!$res) { undef($point); } #=========ボタンもしくはアンカーをクリックしたときの処理の流れを制御=====# if ($FORM{'action'} eq 'form') { &form; } elsif ($FORM{'action'} eq 'form2') { &form2; } elsif ($FORM{'action'} eq 'dele') { &dele; &deleview; exit; } elsif ($FORM{'action'} eq 'dele2') { &dele2; &deleview2; exit; } elsif ($FORM{'action'} eq 'dele3') { &dele3; } elsif ($FORM{'action'} eq 'regist') { ®ist; } elsif ($FORM{'action'} eq 'regist2') { ®ist2; } elsif ($FORM{'action'} eq 'regist3') { ®ist3; } elsif ($FORM{'action'} eq 'html2') { &html2; } elsif ($FORM{'action'} eq 'html3') { &html3; } elsif ($FORM{'action'} eq 'html4') { &html4; } elsif ($FORM{'action'} eq 'html5') { &html5; } elsif ($FORM{'action'} eq 'in') { ∈ } elsif ($FORM{'action'} eq 'serch') { &serch; } elsif ($FORM{'action'} eq 'admin') { &admin; } elsif ($FORM{'action'} eq 'exp') { &exp; } elsif ($FORM{'action'} eq 'review') { &review; } elsif ($FORM{'action'} eq 'admin2') { &admin2; } elsif ($FORM{'action'} eq 'pv') { &pv; } elsif ($FORM{'action'} eq 'sentaku') { &deleview; } elsif ($FORM{'action'} eq 'sentaku2') { &deleview2; } &html; sub top { #HTMLヘッダ if ($headflag) { return: } print "Content-type: text/html; charset=Shift_JIS\n\n"; print "\n"; print "\n"; &style; $headflag = 1; } sub html { #トップページ &read; &date; ⊤ print "$title\n"; print "\n"; print "$body\n"; print "

    \n"; &title; &mes; &mes2; print "\n"; if ($backup eq '1') { &dir; } if ($FORM{'log'} eq '') { print "[ 現在 $cnt 作品公開中 ]\n"; } else { print "[ 合計 $cnt 作品 ]\n"; } print "\n"; if (@lines ne 0) { if ($FORM{'sort'}) { &sort(\@lines,$FORM{'sort'},$FORM{'rev'}); } elsif ($FORM{'rev'}) { @lines = reverse @lines; } local($page,$page_end) = &page_now($FORM{'page'},$cnt,$list); local(%param) = (start=>$page,end=>$page_end,range=>$list); print "

    \n"; &load(\%param); &rep(\@lines,\%param); &list(\@lines,\%param); } else { print "

    【作品が投稿されていません】\n"; } &mes4; &tyo; &foot; exit; } sub html2 { #1件の作品のみ表示するView local($lencnt)=0; &read2($FORM{'key'}); if ($cnts) { &count2($FORM{'key'}); } ⊤ $tit =~ s/\0/\,/g; if ($sakutit) { if ($mgki eq '') { print "$tit\n"; } else { print "$mgki\n"; } print "\n"; } else { print "$tit\n"; print "\n"; } if ($fcol eq '') { $fcol = $txt_c; } if ($haik) { print "\n"; } else { print "$body\n"; } print "

    \n"; print "\n"; $value =~ s/\0/\,/g; if ( $value !~ /
    / ) { $value =~ s/\r/
    /g; } $page3 = $FORM{'page3'} || 1; if ($list3 && length($value) > $list3) { $lencnt = &partition(undef); } &make_novel($tit,$name,$mail,$url,$date,$value,$come,$hosts,$lencnt); print "
    \n"; print "
    \n"; print "\n"; print "■一覧に戻る "; print "■感想を見る\n" if($res); print "■削除・編集\n"; print "
    \n"; &foot; exit; } sub html4 { #作者検索一覧 local(@lines,@find,$cnt,$name); if (!$FORM{'sakusha'}) { &html; } open(FD,"$file") || &error("ログファイル$fileがみつかりません。"); @lines = ; close(FD); @find = grep { $name = (split(/\,/,$_))[5]; $name eq $FORM{'sakusha'}; } @lines; undef(@lines); @lines = @find; $cnt = @find; if ($cnt==0) { &error("指定した作者は存在しません。"); } &date; ⊤ print "「$FORM{'sakusha'}」さんの作品\n"; print "\n"; print "$body\n"; print "
    \n"; print "$title_def\n"; print "$FORM{'sakusha'} さんの作品\n"; print "\n"; print "[ 現在 $cnt 作品公開中 ]\n"; print "

    "; local($page,$page_end) = &page_now($FORM{'page'},$cnt,$list); local(%param) = (start=>$page,end=>$page_end,range=>$list); &load(\%param); &rep(\@lines,\%param); &list(\@lines,\%param); print "

    \n"; print "[検索に戻る]\n"; print "[一覧に戻る]\n"; print "\n"; &foot; exit; } sub html5 { #語句検索一覧 local($serch,$type) = ($FORM{'serch'},$FORM{'type'}); local(@serch,@lines,@find,$flag,$cnt,$param,$num); if ($serch eq '') { &error("検索語句を指定してください。"); } $serch =~ s/\x81\x40/ /g; @serch = split(/\s+/,$serch); open(FD,"$file") || &error("ログファイル$fileがみつかりません。"); @lines = ; close(FD); foreach (@lines) { $param = (split(/\,/,$_))[$type]; foreach (@serch) { if (index($param,$_) >= 0) { $flag=1; } else { $flag=0; last; } } if ($flag) { push(@find,$_); } } undef(@lines); @lines = @find; $cnt = @find; &date; ⊤ print "「$FORM{'serch'}」が含まれる作品\n"; print "\n"; print "$body\n"; print "

    \n"; print "$title_def\n"; print "「$FORM{'serch'}」が含まれる作品\n"; print "\n"; if ($cnt > 0) { local($page,$page_end) = &page_now($FORM{'page'},$cnt,$list); local(%param) = (start=>$page,end=>$page_end,range=>$list); print "[ $cnt 作品が見つかりました。 ]\n"; print "

    "; &load(\%param); &rep(\@lines,\%param); &list(\@lines,\%param); } else { print "は見つかりませんでした。\n"; print "

    \n"; } print "

    \n"; print "[検索に戻る]\n"; print "[一覧に戻る]\n"; print "\n"; &foot; exit; } sub regist { #記事書き込み if (!$post) { &error("不正アクセスです。") } local(%param) = ( name => $FORM{'name'}, val => $FORM{'value'}, edit => $FORM{'passedit'}, pwd => $FORM{'pwd'}, mail => $FORM{'mail'}, url => $FORM{'url'}, axs => $FORM{'access'}, tit => $FORM{'tit'}, bg => $FORM{'bg'}, bg2 => $FORM{'bg2'}, img => $FORM{'img'} ); ($cname,$curl,$ctit,$cimg) = &fcheck(\%param); &host; $encpwd = &encopass($FORM{'pwd'}); &date; &lock; open(FD,"$file") || &error("ファイル読込みに失敗しました。"); @lines = ; close(FD); if ($FORM{'old_pw'} ne '') { local($flag,$check,$pw,$hs); @new = map { $flag=0; ($date,$num,$b_num,$pwds,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$hosts,$re,$mgki) = split(/\,/,$_); chomp($mgki); if ($FORM{'num'} eq $num) { if ($FORM{'passedit'} && $FORM{'old_pw'} eq $pass) { $pw = $pwds; } elsif ($FORM{'old_pw'} eq $pass || crypt($FORM{'old_pw'},substr($pwds,$salt,2)) eq $pwds) { $pw = $encpwd; } else { &error("PASSWORDが一致しません。"); } if ($FORM{'idedit'} && $FORM{'old_pw'} eq $pass) { $hs = $hosts; } else { $hs = $host; } $retry = 1; $_ = "$date_now\,$line_num\,$bass_num\,$pw\,$ctit\,$cname\,$FORM{'mail'}\,$curl\,$FORM{'value'}\,$FORM{'come'}\,$FORM{'fcol'}\,$cimg\,$hs\,$retry\,$FORM{'mgki'}\n"; if ($FORM{'check'}) { $check=$_; $flag=1; } } if (!$flag) { $_; } } @lines; if (!$retry) { &error("該当記事が見当たりません。"); } if ($check ne '') { unshift(@new,$check); } } else { local($i,$pw,$hs); if ($FORM{'log'} ne '') { &error("この作品集への新規投稿は締め切っています。"); } $i = 0; @new = map { ($num,$value,$hosts) = (split(/\,/,$_))[1,8,12]; if ($host eq $hosts) { if ($value eq $FORM{'value'}) { &error("二重投稿です。同じ内容がすでに登録されています。"); } if ($wait > $line_num - $num) { &error("前回の投稿からあまり時間が経っていません。もう少し待ってください。"); } } $i++; if ($i == $max) { if ($backup eq '1') { &backfile; } else { last; } } if (!$skip) { $_; } } @lines; $retry = 0; $pw = $encpwd; $hs = $host; $value = "$date_now\,$line_num\,$bass_num\,$pw\,$ctit\,$cname\,$FORM{'mail'}\,$curl\,$FORM{'value'}\,$FORM{'come'}\,$FORM{'fcol'}\,$cimg\,$hs\,$retry\,$FORM{'mgki'}\n"; unshift(@new,$value); } open(FD,">$file") || &error("ファイル書込みに失敗しました。"); print FD @new; close(FD); if ($retry) { &rename($FORM{'num'}); } elsif ($cnts) { &count($line_num); } &unlock; &cook1("name\:$FORM{'name'}","mail\:$FORM{'mail'}","url\:$curl","pwd\:$FORM{'pwd'}"); &mail; print "Location: $reload" . '?' . "log=$FORM{'log'}" . "\n\n"; } sub regist2 { #感想記事書き込み if (!$post) { &error("不正アクセスです。") } local(%param) = ( name => $FORM{'name_r'}, val => $FORM{'come_r'}, edit => $FORM{'passedit'}, pwd => $FORM{'pwd2'}, mail => $FORM{'mail_r'}, url => $FORM{'url_r'}, axs => $FORM{'access'}, point => $FORM{'point'}, regist2 => 1 ); ($cname,$curl) = &fcheck(\%param); &host; $encpwd = &encopass($FORM{'pwd2'}); &date; &lock; $file2 = "$resdir" . $FORM{'key'} . '.txt'; open(FD,"$file2"); @lines = ; close(FD); if ($FORM{'gai'} ne '') { local($find,$flag,$check,$hs,$pw); @new = map { $flag=0; ($date,$renum,$name,$mail,$url,$come,$poi,$hosts,$pwds2) = split(/\,/,$_); chomp($pwds2); if ($FORM{'gai'} == $renum) { if ($FORM{'passedit'} && $FORM{'old_pw'} eq $pass) { $pw = $pwds2; } elsif ($FORM{'old_pw'} eq $pass || crypt($FORM{'old_pw'},substr($pwds2,$salt,2)) eq $pwds2) { $pw = $encpwd; } else { &error("PASSWORDが一致しません。"); } if ($FORM{'idedit'} && $FORM{'old_pw'} eq $pass) { $hs = $hosts; } else { $hs = $host; } $_ = "$date_now2\,$line_num\,$cname\,$FORM{'mail_r'}\,$curl\,$FORM{'come_r'}\,$FORM{'point'}\,$hs\,$pw\n"; $find=1; if ($FORM{'check'}) { $check=$_; $flag=1; } } if (!$flag) { $_; } } @lines; if (!$find) { &error("該当記事が見当たりません。"); } if ($check ne '') { unshift(@new,$check); } } else { local($i,$pw,$hs,$value); if ($iplim) { &read2($FORM{'key'}); if ($host eq $hosts) { &error("作者は感想を投稿できません。読者からの感想を待ちましょう。"); } } $i = 0; @new = map { ($name_r,$come_r,$host_r) = (split(/\,/,$_))[2,5,7]; if ($host eq $host_r) { if ($iplim2) { &error("感想の投稿は1度までです。"); } if ($cname eq $name_r && $FORM{'come_r'} eq $come_r) { &error("二重投稿です。同じ内容がすでに投稿されています。"); } } $i++; if ($i == $max2) { last; } $_; } @lines; $pw = $encpwd; $hs = $host; $value = "$date_now2\,$line_num\,$cname\,$FORM{'mail_r'}\,$curl\,$FORM{'come_r'}\,$FORM{'point'}\,$hs\,$pw\n"; unshift(@new,$value); } open(FD,">$file2") || &error("ファイル書込みに失敗しました。"); print FD @new; close(FD); &unlock; &cook1("name\:$FORM{'name_r'}","mail\:$FORM{'mail_r'}","url\:$curl","pwd\:$FORM{'pwd2'}"); print "Location: $link3&action=review\n\n"; } sub form { #作品投稿フォーム local($admin,$checkflag,$f_tit); if ($in_flag) { if ($FORM{'pwd'} eq $pass) { $admin=1; } &read2($FORM{'key'}); if (!$admin && crypt($FORM{'pwd'},substr($pwd,$salt,2)) ne $pwd) { &error("PASSWORDが一致しません。"); } $f_tit = "「$tit」の編集"; $checkflag = 1; } else { if ($FORM{'log'} ne '') { &error("この作品集への新規投稿は締め切っています。"); } $f_tit = "新規作品投稿"; } if ($rom eq '1' && !$checkflag && $FORM{'pwd'} ne $pass) { &admin; } $tit =~ s/\0/\,/g; &cook2; ⊤ print "$f_tit\n"; print "\n"; print "$body\n"; print "

    \n"; &title; &mes3; &make_form($checkflag); &foot; exit; } sub form2 { #感想編集フォーム local($line,%param,@rlines); local($find,$no,$admin) = 0; if (!$post) { &error("不正アクセスです。") } if (@CK) { if ($FORM{'pwd'} ne $pass) { &error("PASSWORDが一致しません。"); } if (@CK >= 2) { &error("一度に編集できるのは一つまでです。"); } $FORM{'gai'} = $CK[0]; $FORM{'pwd2'} = $FORM{'pwd'}; #$FORM{'old_pw'}用 $admin=1; } $file2 = $resdir . $FORM{'key'} . '.txt'; ($line,$no) = &read_r($FORM{'gai'},$FORM{'key'}); if ($FORM{'pwd2'} eq $pass) { $admin = 1; } if (!$admin) { if ($pwd2 eq '' || crypt($FORM{'pwd2'},substr($pwd2,0,2)) ne $pwd2) { &error("PASSWORDが一致しません。"); } } &cook2; &read2($FORM{'key'}); ⊤ print "「$tit」の感想修正\n"; print "\n"; if ($fcol eq '') { $fcol = $txt_c; } if ($haik) { print "\n"; } else { print "$body\n"; } $tit =~ s/\0/\,/g; print "
    \n"; %param = (no=>$no); push(@rlines,$$line); &rep_r(\@rlines,\%param); print "
    \n"; print "

    ▼「$tit」 No.$no 感想修正フォーム

    \n"; $form2 = 1; &make_form2($form2); &foot; exit; } sub html3 { #作品投稿プレビュー local($lencnt)=0; local($flag)=0; if (!$post) { &error("不正アクセスです。"); } local(%param) = ( name => $FORM{'name'}, val => $FORM{'value'}, edit => $FORM{'passedit'}, pwd => $FORM{'pwd'}, mail => $FORM{'mail'}, url => $FORM{'url'}, axs => $FORM{'access'}, tit => $FORM{'tit'}, bg => $FORM{'bg'}, bg2 => $FORM{'bg2'}, ); ($cname,$curl,$ctit,$cimg) = &fcheck(\%param); ⊤ print "「$ctit」はこのイメージで表\示されます\n"; print "\n"; $fcol = $FORM{'fcol'} || $txt_c; if ($haik) { print "\n"; } else { print "$body\n"; } print "
    \n"; print "\n"; print "\n"; $page3 = $FORM{'page3'} || 1; if ($list3 && length($FORM{'value'}) > $list3) { $flag=1; $lencnt = &partition($flag); } $date = "****年**月**日(week) **時**分**秒"; $hosts = undef; &make_novel($ctit,$cname,$FORM{'mail'},$curl,$date,$FORM{'value'},$FORM{'come'},$hosts,$lencnt); local($ok) = <
    ※あなたの投稿作品はこのイメージで表\示されます

    間違いがなければOKボタンをクリックしてください。
    書き直したい場合はブラウザの「戻る」ボタンで戻ってください。
    投稿後もPASSWORD [ $FORM{'pwd'} ] を使って編集、削除が可\能\です。 HTML if (!$lencnt || $lencnt == $page3) { print "$ok\n"; } print "
    \n"; &foot; exit; } sub error { #エラー処理 if ($lockon) { &unlock; } print "Content-type: text/html\n\n"; print "エラーです\n"; print "$body\n"; print "
    \n"; print "

    ERROR!!

    \n"; print "

    $_[0]

    \n"; &foot; exit; } sub deleview { #作品の削除選択画面 local(@lines,$cnt); if ($FORM{'pwd'} ne $pass) { &error("PASSWORDが一致しません。"); } open(FD,"$file") || &error("ファイル読込みに失敗しました。"); @lines = ;$cnt = @lines; close(FD); ⊤ print "削除選択\n"; print "\n"; print "$body\n"; print "
    \n"; print "■一覧へ戻る\n"; if ($rom eq "1") { print "■新規作品公開\n"; } &del_log_show; print "

    削除項目を選択してください。

    \n"; print "
    \n"; print "\n"; print "\n"; print "\n"; print "

    削除リスト

    \n"; if (@lines ne 0) { print "\n"; print "\n"; ($page,$page_end) = &page_now($FORM{'page'},$cnt,$list); foreach ($page .. $page_end) { local($date,$num,$tit,$name,$hosts) = (split(/\,/,$lines[$_]))[0,1,4,5,12]; print "\n"; print "\n"; print "\n"; } print "
    記事NO\.登録日$tab[0]$tab[1]HOST作品
    $num$date$tit$name$hosts

    \n"; } else { print "【作品が投稿されていません】"; } print "

    \n"; print "

    編集\n"; print "\n"; print "削除\n"; print "

    \n"; %param = (start=>$page,range=>$list); &list(\@lines,\%param); &foot; exit; } sub deleview2 { #感想の削除選択画面 local($file2,@blines,$rescnt); if ($FORM{'pwd'} ne $pass) { &error("PASSWORDが一致しません。"); } $file2 = "$resdir" . "$FORM{'key'}" . '.txt'; open(FD,"$file2") || &error("ファイル読込みに失敗しました。"); @blines = ; $rescnt = @blines; close(FD); ⊤ print "削除選択\n"; print "\n"; print "$body\n"; print "

    \n"; print "[戻る]\n"; print "

    削除項目を選択してください。

    \n"; print "
    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "

    削除リスト

    \n"; print "\n"; print "\n"; local($page,$page_end) = &page_now($FORM{'page2'},$rescnt,$list2); foreach ($page .. $page_end) { local($len); local($date_r,$renum,$name_r,$come_r,$host_r) = (split(/\,/,$blines[$_]))[0,1,2,5,7]; $len = length($come_r); if ($len > 60) { $come_r = substr($come_r,0,60) . '...(省略)'; } print "\n"; print "\n"; } print "
    記事NO\.登録日感想$tab[1]host
    $renum$date_r$come_r$name_r$host_r

    \n"; print "編集\n"; print "削除\n"; print "

    \n"; print "

    \n"; %param = (start=>$page,range=>$list2,flg=>1); &list(\@blines,\%param); &foot; exit; } sub dele { #作品記事削除 local(%param,$lfile,$l_flag,$deleted); local($admin) = 0; if (!$post) { &error("不正アクセスです。") } if (!$in_flag && (!$FORM{'pwd'} || $FORM{'pwd'} ne $pass)) { &error("PASSWORDが一致しません。"); } if (!@CK) { &error("削除する記事にチェックが入っていません。"); } %param = ( file => $file, pwd => $FORM{'pwd'}, no_num => 1, no_pwd => 3, ); if ($FORM{'pwd'} eq $pass) { $admin = 1; } $deleted = &delete(\%param,\@CK,$admin); foreach (@$deleted) { local($date,$num,$tit,$name,$hosts) = (split(/\,/,$_))[0,1,4,5,12]; &unlink($num); &del_log; &mail2; } } sub dele2 { #管理者感想記事削除 local(%param,$file2); local($admin) = 0; if (!$post) { &error("不正アクセスです。") } if (!$FORM{'pwd'} || $FORM{'pwd'} ne $pass) { &error("PASSWORDが一致しません。"); } if (!@CK) { &error("削除する記事にチェックが入っていません。"); } $file2 = "$resdir" . "$FORM{'key'}" . '.txt'; %param = ( file => $file2, no_num => 1, ); if ($FORM{'pwd'} eq $pass) { $admin = 1; } &delete(\%param,\@CK,$admin); } sub dele3 { #投稿者感想記事削除 local(%param,$file2); local($admin) = 0; if (!$post) { &error("不正アクセスです。") } $file2 = "$resdir" . "$FORM{'key'}" . '.txt'; %param = ( file => $file2, pwd => $FORM{'pwd2'}, no_num => 1, no_pwd => 8, ); if ($FORM{'pwd2'} eq $pass) { $admin = 1; } push(@CK,$FORM{'gai'}); &delete(\%param,\@CK,$admin); print "Location: $link3&action=review\n\n"; } sub pv { #背景・文字色確認プレビュー ⊤ print "背景と文字色はこのように表\示されます\n"; print "\n"; print "\n"; foreach (@FONT) { if ($_ ne '') { print "Anthologys\n"; print "  \n"; print "Anthologys\n"; print "  \n"; print "($_)\n"; print "

    \n"; } } print "

    \n"; print "\n"; print "【閉じる】\n"; print "\n"; &foot; exit; } sub serch { #検索ページ &read; ⊤ print "作品の検索\n"; print "\n"; print "$body\n"; print "
    \n"; &title; &mes3; print "

    \n"; print "

    検索したい語句を入力するか、作者を選択してください\n"; print "

    \n"; print "\n"; print "\n"; print "\n"; print "題名\n"; print "本文\n"; print "\n"; print "

    \n"; print "

    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "

    \n"; print "
    \n"; print "

    作品を指定した方法で並び替えます

    \n"; print "

    \n"; print "\n"; print "\n"; print "降順\n"; print "昇順\n"; print "\n"; print "

    \n"; print "
    \n"; &foot; exit; } sub admin { #管理画面 ⊤ print "管理者入り口\n"; print "\n"; print "$body\n"; print "

    \n"; &title; &mes3; print "

    \n"; print "

    \n"; print "\n"; print "\n"; print "PASSWORD \n"; print "
    \n"; print "

    \n"; print "

    \n"; &foot; exit; } sub exp { #説明書閲覧 ⊤ print "$titleの説明\n"; print "\n"; print "$body\n"; print "
    \n"; &title; &mes3; &mes5; &foot; exit; } sub review { #感想記事閲覧 local(%param,%param2,@blines,$rescnt,$page,$page_end); &cook2; &read2($FORM{'key'}); ⊤ $tit =~ s/\0/\,/g; print "「$tit」の感想\n"; print "\n"; if ($fcol eq '') { $fcol = $txt_c; } if ($haik) { print "\n"; } else { print "$body\n"; } print "
    \n"; print "
    \n"; print "「$tit」の感想\n"; print "
    \n"; print "

    ■作品に戻る\n"; print "■一覧に戻る\n"; print "■削除・編集\n"; print "\n"; $re_flag = 0; $file2 = $resdir . $FORM{'key'} . '.txt'; if (-e $file2) { open(MD,"$file2"); @blines = ; $rescnt = @blines; close(MD); if ($point ne '') { foreach (@blines) { $poi2 = (split(/\,/,$_))[6]; $points += $poi2; } } ($page,$page_end) = &page_now($FORM{'page2'},$rescnt,$list2); if ($rescnt != 0) { $no = $rescnt - $page; %param2 = (start=>$page,end=>$page_end,no=>$no); &rep_r(\@blines,\%param2); $re_flag = 1; } } if (!$re_flag) { print "



    \n"; print "
    \n"; print "感想記事の投稿は現在ありません。\n"; print "

    \n"; } if ($re_flag) { %param = (start=>$FORM{'page2'},range=>$list2,flg=>1); &list(\@blines,\%param); print "
    \n"; } print "
    \n"; print "総レス数 $rescnt \n"; if ($point ne '') { if ($points > 0) { $points = "$points"; } elsif ($points < 0) { $points = "$points"; } else{ $points = 0; } print " 合計 $points 点
    \n"; print "\n"; print "\n"; print "
    感想記事編集\n"; print "\n"; print " PASS\n"; print "編集\n"; print "削除\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
    \n"; } print "
    \n"; print "

    ★感想を書いてね★

    \n"; &make_form2(undef); print "
    ■作品に戻る\n"; print "■一覧に戻る\n"; print "■削除・編集\n"; print "\n"; &foot; exit; } sub admin2 { #作品の管理画面 &cook2; &read2($FORM{'key'}); ⊤ $tit =~ s/\0/\,/g; print "「$tit」の感想\n"; print "\n"; if ($fcol eq '') { $fcol = $txt_c; } if ($haik) { print "\n"; } else { print "$body\n"; } print "
    \n"; print "
    \n"; print "「$tit」の編集\n"; print "
    \n"; print "

    ■作品に戻る\n"; print "■一覧に戻る\n"; print "■感想を見る\n" if($res); print "\n"; print "

    \n"; print "\n"; print "\n"; if ($res) { print "\n"; print "\n"; print "\n"; } print "
    \n"; print "
    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "投稿作品編集\n"; print " \n"; print " 編集\n"; print "削除\n"; print "\n"; print "
    \n"; print "
    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "感想記事管理\n"; print "\n"; print "\n"; print "
    \n"; &foot; exit; } sub cook1 { #クッキー発行(KENTさん[http://www.kent-web.com/]のクッキー処理を引用) local(@cook) = @_; local($gmt, $cook, @t, @m, @w); @t = gmtime(time + 60*24*60*60); @m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",$w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]); $cook=''; foreach (@cook) { $cook .= "$_\,"; } print "Set-Cookie: $cookiename=$cook; expires=$gmt\n"; } sub cook2 { #クッキー取得 glob %COOKIE; local($cookies,$n,$v,$n2,$v2,%DUMMY,@pairs,@pairs2); $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach (@pairs) { ($n, $v) = split(/=/, $_); $n =~ s/ //g; $DUMMY{$n} = $v; } @pairs2 = split(/,/,$DUMMY{$cookiename}); foreach (@pairs2) { ($n2, $v2) = split(/:/, $_); $COOKIE{$n2} = $v2; } } sub backfile { #過去ログ生成 local($backfilename) = "$dir" . "$t_back" . '.txt'; if (!open(BD,">$backfilename")) { last; } print BD @lines; close(BD); @new = ''; glob $skip = 1; &del_log; } sub dir { #過去ログ表示 local($b_files,$b_name,@dirfile); opendir(DIR,$dir); @dirfile = readdir(DIR); closedir DIR; if ($FORM{'log'} ne '') { print "○最新作品集\n"; } else { print "●最新作品集\n"; } $i = 1; foreach (@dirfile) { if ($_ =~ /.txt/ && $_ !~ /anthology.txt/) { $i++; $b_files = "$dir" . "$_"; if ($b_files ne '') { $_ =~ s/.txt//; $b_name = $backname . $i; if ($FORM{'log'} ne $_) { print "○$b_name\n"; } else { print "●$b_name\n"; } $s = $i % 7; if ($s == 0) { print "
    \n"; } } } } } sub encopass { #パスワード暗号化処理(KENTさん[http://www.kent-web.com/]のパスエンコードを引用) local($p1) = @_; local(@saltset,$salt,$encpwd); @saltset = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand; $salt = $saltset[int(rand(@saltset))] . $saltset[int(rand(@saltset))]; $encpwd = crypt($p1, $salt) || crypt ($p1, '$1$' . $salt); return $encpwd; } sub in { #作品の編集・削除の分岐 local($in_flag) = 1; if (!$post) { &error("不正アクセスです。") } if ($FORM{'type'} eq 'form') { if (@CK) { if ($FORM{'pwd'} ne $pass) { &error("PASSWORDが一致しません。"); } if (@CK >= 2) { &error("一度に編集できるのは一つまでです。"); } $FORM{'key'} = $CK[0]; $FORM{'num'} = $CK[0]; $admin = 1; } $num = $FORM{'num'}; $pwd = $FORM{'pwd'}; $log = $FORM{'log'}; &form; } elsif ($FORM{'type'} eq 'dele') { push (@CK,$FORM{'num'}); $pwd = $FORM{'pwd'}; $log = $FORM{'log'}; &dele; } } sub lock { #ロック開始 local($lockfile) = $lockdir . 'listlock'; local($try) = 3; if (!$lock) { return; } if (-e $lockfile) { local($mtime) = (stat($lockfile))[9]; if ($mtime < time - 60) { &unlock; } } if ($lock eq '1') { while (!symlink(".", $lockfile)) { if (--$try <= 0) { &error("ビジー状態です。もう少し後に再度投稿してください。"); } sleep(2); } } elsif ($lock eq '2') { while(-f "$lockfile") { if (--$try <= 0) { &error("ビジー状態です。もう少し後に再度投稿してください。"); } sleep(1); } open(LOCK,">$lockfile"); close(LOCK); } $lockon = 1; } sub unlock { #ロック解除 local($lockfile) = $lockdir . 'listlock'; if (-e $lockfile) { unlink($lockfile); } $lockon = 0; } sub date { #現在日時取得 ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); @week = ("日","月","火","水","木","金","土"); $date_now = sprintf("%04d年%02d月%02d日(%s) %02d時%02d分%02d秒", $year+1900,$mon+1,$mday,$week[$wday],$hour,$min,$sec); $date_now2 = sprintf("%04d-%02d-%02d %02d:%02d", $year+1900,$mon+1,$mday,$hour,$min); $line_num = sprintf("%04d%02d%02d%02d%02d%02d", $year+1900,$mon+1,$mday,$hour,$min,$sec); $bass_num = sprintf("%04d%02d%02d%02d%02d%02d", $year+1900,$mon+1,$mday,$hour,$min,$sec); $t_back = sprintf("%04d%02d%02d%02d", $year+1900,$mon+1,$mday,$hour); } sub newup { #NEW,UPの表示処理 if ($re eq '1') { if ($u_img eq '') { print "UP!!\n"; } else { print "\"UP\"\n"; } } else { if ($n_img eq '') { print "NEW!!\n"; } else { print "\"NEW\"\n"; } } } sub kyohi { #入室拒否 &host; foreach (@kyohi) { if (/^$/) { next; } if ($host =~ /$_/i || $addr =~ /$_/i) { &error("アクセス許可がありません。"); } } } sub host { #ホスト情報取得 glob $host = $ENV{'REMOTE_HOST'}; glob $addr = $ENV{'REMOTE_ADDR'}; if ($host eq '') { $host = $addr; } if ($host eq $addr) { $host = gethostbyaddr(pack("C4",split(/\./,$addr)),2) || $addr; } } sub id { #ホストID化 local($host) = @_; local($message,$ID); if ($hos eq "1") { $message = 'ID'; if ($host) { $host =~ s/softbank//ig; $ID = crypt($host,' '); $ID =~ s/^..//g; } else { $ID = '********'; } } else { $message = 'HOST'; $ID = $host || '********'; } return($message,$ID); } sub link { #リンク先の条件分岐 local($add)=undef; if ($FORM{'sakusha'}) { $nvlink = "$reload?log=$FORM{'log'}&sakusha=$FORM{'sakusha'}"; $add = "&action=html4"; } elsif ($FORM{'serch'}) { $nvlink = "$reload?log=$FORM{'log'}&serch=$FORM{'serch'}&type=$FORM{'type'}"; $add = "&action=html5"; } elsif ($FORM{'sort'}) { $nvlink = "$reload?log=$FORM{'log'}&sort=$FORM{'sort'}"; } else { $nvlink = "$reload?log=$FORM{'log'}"; } $nvlink .= "&rev=$FORM{'rev'}" if ($FORM{'rev'}); $lnk = $nvlink; $lnk .= $add if ($add); $link = $lnk; $link .= "&page=$FORM{'page'}" if ($FORM{'page'}); $link2 = "$link&key=$FORM{'key'}"; $link3 = "$link2"; $link3 .= "&page2=$FORM{'page2'}" if ($FORM{'page2'}); $link3 .= "&page3=$FORM{'page3'}" if ($FORM{'page3'}); $nvlink .= "&page=$FORM{'page'}" if ($FORM{'page'}); } sub read { #作品ログ読み込み処理 if (!-e $file) { open(FD,">$file") || &error("$dirが設定されていないか、パーミッションが書込みOKに設定されていません。"); @lines = ; close(FD); chmod (0666,"$file"); } else { open(FD,"$file") || &error("ファイル読込みに失敗しました。"); @lines = ; close(FD); } $cnt = @lines; } sub read2 { #作品閲覧時の作品ログ読み込み処理 local($key) = @_; local($tmp); local($find) = 0; open(FD,"$file") || &error("ファイル読込みに失敗しました。"); while () { $tmp = $_; ($date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$hosts,$re,$mgki) = split(/\,/,$_); chomp($mgki); if($num == $key) { $find=1; last; } } close(FD); if (!$find) { &error("指定した作品が見つかりません。"); } return \$tmp; } sub read_r { #感想ログ読み込み処理 local($key,$number) = @_; local($tmp,$rfile,@blines,$no); local($find)=0; $rfile = $resdir . $number . '.txt'; open(FD,"$rfile") || &error("ファイル読込みに失敗しました。"); @blines = ; $no = @blines; foreach (@blines) { $tmp = $_; ($date_r,$renum,$name_r,$mail_r,$url_r,$come_r,$poi,$host_r,$pwd2) = split(/\,/,$_); chomp($pwd2); if ($renum == $key) { $find=1; last; } $no--; } close(FD); if (!$find) { &error("該当記事が見当たりません。"); } return (\$tmp,$no); } sub title { #タイトルの文字・画像の表示定義 if ($title_img eq '') { print "$title_def\n"; print "$title\n"; print "\n"; } else { print "\n"; } } sub page_now { #現在居るページの参照処理 local($now,$cnt,$range) = @_; local($page,$page_end,$cnt2); if ($now > $cnt) { $now = $cnt - $range; } $page = $now || 0; $cnt2 = $cnt - 1; $page_end = $now + $range - 1; if ($page_end >= $cnt2) { $page_end = $cnt2; } return ($page,$page_end); } sub sort { #並び替え処理 local($ref,$method,$rev) = @_; local(@tmp); @tmp = map { local($date,$num,$tit,$name,$value) = (split(/\,/,$_))[0,1,4,5,8]; local($obj,$count,$add,$len,$rescnt,$points) = undef; local($files,@blines,$poi) = undef; $files = $resdir . $num . '.txt'; open(MD,"$files"); @blines = ; $rescnt = @blines; close(MD); foreach (@blines) { $poi = (split(/\,/,$_))[6]; $points += $poi; } if ($method eq "up") { $obj = $date; } elsif ($method eq "saku1") { $obj = $tit; } elsif ($method eq "saku2") { $obj = $name; } elsif ($method eq "visit") { $count = &count3($num); $obj = $count; } elsif ($method eq "leng") { $value =~ s/<[^>]*(>|$)//g; $len = length($value); $obj = $len; } elsif ($method eq "rescnt") { $obj = $rescnt; } elsif ($method eq "points") { $obj = $points; } else { return; } qq {$obj<>$_}; } @$ref; if ($method eq "up") { if ($rev) { @tmp = sort @tmp; } else { @tmp = sort {$b cmp $a} @tmp; } } elsif ($method eq "saku1" || $method eq "saku2") { if ($rev) { @tmp = sort {$b cmp $a} @tmp; } else { @tmp = sort @tmp; } } else { if ($rev) { @tmp = sort {$a <=> $b} @tmp; } else { @tmp = sort {$b <=> $a} @tmp; } } @$ref = map { local($obj,$line) = split(/<>/,$_); $line; } @tmp; return $ref; } sub load { #一覧表題の生成処理 local($p) = @_; print ""; print "\n"; print "\n"; print "\n"; print "\n"; print "\n" if ($cnts); print "\n" if ($byte); print "\n" if ($res); print "\n" if ($point); print "\n"; } sub rep { #一覧の生成処理 local($ref,$p) = @_; local($num_l,$tit_l,$line); foreach ($p->{start} .. $p->{end}) { local($points,%ress,@reses,$rname,$rno,$rfin,%sp,@sps, $spk,$spno,$spfin,$count,$len,$flag,@nameline,$nvl) = undef; local($date,$num,$b_num,$pwd,$tit,$name,$mail,$url, $value,$come,$fcol,$img,$hosts,$re,$mgki) = split(/\,/,$ref->[$_]); chomp($mgki); print "\n"; $nvl = "$nvlink&key=$num&action=html2"; print "\n"; print "\n"; print "\n"; if ($res) { $files = $resdir . $num . '.txt'; if (-e $files) { open(MD,"$files"); @blines = ; $rescnt = @blines; close(MD); if ($rescnt != 0) { foreach (@blines) { local($name_r,$poi) = (split(/\,/,$_))[2,6]; if ($name_r ne '') { $ress{$name_r}++; } if ($point ne '') { if ($poi eq '') { $poi = 0; } $sp{$poi}++; $points += $poi; } } } else { $points = ''; } } else { $rescnt = 0; $points = ''; } } if ($cnts) { $count = &count3($num); print "\n"; } if ($byte) { $value =~ s/<[^>]*(>|$)//g; $len = length($value); if ($byte eq '1' && $len > 10240) { $len >>= 10; $len .= "k"; $len = "$len"; } print "\n"; } if ($res) { if ($rescnt) { while ( ($rname,$rno) = each(%ress) ) { if ($rno <= 1) { push(@reses,"〔$rname〕 \n"); } else { push(@reses,"〔$rname($rno)〕 \n"); } } $reses[0] = " $reses[0]"; $rfin = pop(@reses); chomp($rfin); push(@reses,$rfin); } print "\n"; if ($point ne '') { if ($rescnt) { while ( ($spk,$spno) = each(%sp) ) { push(@sps,"〔$spk点×$spno〕 \n"); } $sps[0] = " $sps[0]"; $spfin = pop(@sps); chomp($spfin); push(@sps,$spfin); } if ($points eq '') { $points = '0'; } elsif ($points > 0) { $points = "$points"; } elsif ($points < 0) { $points = "$points"; } print "\n"; } } print "\n"; } print "
    $tab[0]$tab[1]$tab[2]$tab[3]$tab[4]$tab[5]$tab[6]
    \n"; if ($n_view && $n_view*1000000 >= $line_num - $b_num) { &newup; } print "\n"; print "$tit\n"; print "\n"; print "\n"; if ($mail ne '') { print "$name\n"; } else { print "$name\n"; } if ($src && !$FORM{'sakusha'}) { foreach (@nameline) { if ($_ eq $name) { $flag=1; last; } } if (!$flag) { print "[★]\n"; } push(@nameline,$name); } print "$date\n"; print "$count\n"; print "\n"; print "$len\n"; print "\n"; print "$rescnt\n"; print "\n"; print "$points\n"; print "
    \n"; } sub rep_r { #感想欄の生成処理 local($ref,$p) = @_; local($no) = $p->{no}; foreach ($p->{start} .. $p->{end}) { local($date_r,$renum,$name_r,$mail_r,$url_r,$come_r,$poi,$host_r,$pwd2) = split(/\,/,$ref->[$_]); $come_r =~ s/\0/\,/g; $come_r =~ s/\r/
    /g; $come_r =~ s/(http:[!#-9A-~]+)/$1<\/a><\/b>/g; print "


    \n"; print "\n"; print "\n"; print "\n"; print "
    No.$no\n"; if ($mail_r ne '') { print "  投稿者:$name_r\n"; } else { print "  投稿者:$name_r\n"; } if ($url_r ne '') { print " [URL]\n"; } if ($point ne '') { if ($poi > 0) { $poi = "$poi"; } elsif ($poi < 0) { $poi = "$poi"; } print "  評価:$poi点\n"; } print "  投稿日:$date_r\n"; if ($hos ne '') { local($message,$ID) = &id($host_r); print "  $message:$ID\n"; } print "
    $come_r
    \n"; --$no; } } sub list { #一覧の改page処理(作品リスト) local($ref,$p) = @_; local($pag,$no,$start,$final,$rlink,$cnt); $pag = 0; $no = 1; $start = $p->{start} + 1; $final = $p->{start} + $p->{range}; $cnt = @$ref; if (!$p->{flg}) { if ($FORM{'action'} eq 'sentaku' || $FORM{'action'} eq 'dele') { $rlink = "$reload?log=$FORM{'log'}&action=sentaku&pwd=$FORM{'pwd'}"; } else { $rlink = $lnk; } } else { if ($FORM{'action'} eq 'sentaku2' || $FORM{'action'} eq 'dele2') { $rlink = "$link3&action=sentaku2&pwd=$FORM{'pwd'}"; } elsif ($FORM{'action'} eq 'review') { $rlink = "$link2&action=review"; $rlink .= "&page3=$FORM{'page3'}" if ($FORM{'page3'}); } else { return; } } if (@$ref > $p->{range}) { if (!$p->{flg}) { print "

    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if (!$lencnt || $lencnt == $page3) { print "\n"; } } sub delete { #削除実行 local($p,$CK,$admin) = @_; local(@lines,@new,@dels,$del,$del_flag,$num,$pwd,$tmp); &lock; open(FD,"$p->{file}") || &error("ファイル読込みに失敗しました。"); @lines = ; close(FD); @new = map { ($num,$pwd) = (split(/\,/,$_))[$p->{no_num},$p->{no_pwd}]; chomp($pwd); $tmp = $_; $del = 0; foreach (@$CK) { if ($_ eq $num) { $del = 1; $del_flag = 1; if (!$admin && crypt($p->{pwd},substr($pwd,$salt,2)) ne $pwd) { &error("PASSWORDが一致しません。"); } push(@dels,$tmp); } } if(!$del) { $_; } } @lines; if (!$del_flag) { &error("該当記事が見当たりません。"); } open(FD,">$p->{file}") || &error("ファイル書込みに失敗しました。"); print FD @new; close(FD); &unlock; return \@dels; } sub fcheck { #フォームチェック local($p) = @_; local(@urls,$imgs,$pts,$p_flag,$err); local($ems) = "

    フォームの内容に誤りがあります。

    \n"; if ($p->{name} eq '') { $err=1; $ems .= "◆名前が記入されていません。
    \n"; } if ($p->{val} eq '') { $err=1; $ems .= "◆内容が記入されていません。
    \n"; } if (!$p->{edit}) { if (length $p->{pwd} > 8 || $p->{pwd} eq '' || $p->{pwd} =~ /\W/) { $err=1; $ems .= "◆投稿者用PASSWORDを半角英数8文字で登録してください。
    \n"; } } if ($p->{mail} && $p->{mail} !~ /(.*)\@(.*)\.(.*)/) { $err=1; $ems .= "◆E-MAILの形式が間違っています。正しく登録してください。
    \n"; } if ($trips) { $p->{name} = &trip($p->{name}); } $p->{url} =~ s/https?\:\/\///g; if ($p->{tit} eq '') { $p->{tit} = '無題'; } $imgs = $p->{img} || $p->{bg2} || $p->{bg}; if ($eng && $p->{val} !~ /[\x80-\xff]/) { $err=1; $ems .= "◆投稿は日本語でお願いします。
    \n"; } if ($encode && $p->{axs} ne "あ") { $err=1; $ems .= "◆エンコードは「SHIFT-JIS」しか受け付けません。ブラウザの設定をお確かめください。
    \n"; } @urls = ($p->{val} =~ m|https?://|ig); if ($urlmax && $#urls + 1 >= $urlmax) { $err=1; $ems .= "◆内容に記述されたURLが多すぎます。
    \n"; } if ($p->{regist2}) { if ($point eq "1") { foreach (@POINT) { if ($_ ne '') { $pts = (split(/=/,$_))[1]; if ($pts eq $p->{point}) { $p_flag=1; last; } } } if (!$p_flag) { $err=1; $ems .= "◆点数の設定が不正です。
    \n"; } } elsif ($point eq "2") { if ($p->{point} > $maxp || $p->{point} < $minp || $p->{point} eq '' || $p->{point} =~ /\D/ ) { $err=1; $ems .= "◆$minp点から$maxp点の間で点数をつけてください。
    \n"; } } } if ($err==1) { &error($ems); } return ($p->{name},$p->{url},$p->{tit},$imgs); } sub trip { #トリップ処理(KENTさん[http://www.kent-web.com/]のトリップ機能を引用) local($name) = @_; $name =~ s/◆/◇/g; if ($name =~ /#/) { local($handle,$trip) = split(/#/, $name, 2); local($enc) = crypt($trip, ' ') || crypt ($trip, '$1$' . ' '); $enc =~ s/^..//; return "$handle◆$enc"; } else { return $name; } } #Script_END
    【PAGE】\n"; } else { print "
    PAGE\n"; } while ($pag < $cnt ) { if ($p->{start} != $pag) { if (!$p->{flg}) { print "[$no]\n"; } else { print "[$no]\n"; } } else { print "[$no]\n"; } $pag += $p->{range}; $no++; } if ($final >= $cnt) { if (!$p->{flg}) { print "作品はここまでです。\n"; } $final = $cnt; } print " ( $start - $final / $cnt )\n"; print "
    "; } else { if (!$p->{flg}) { print "

    作品はここまでです。\n"; } } } sub partition { #作品内容の分割処理 local($html3_flag) = @_; local(@values,@tval,$i,$j,$tlen,$t,$no); @values = split(/
    /,$value); @tval=(); $i=0; $j=0; $tlen=0; while ($j < @values) { $tval[$i] .= "$values[$j]
    "; $values[$j] =~ s/<[^>]*(>|$)//g; $tlen += length($values[$j]); $j++; if ($tlen >= $list3) { $i++; $tlen=0; } } if (!$i == 0) { $lencnt = $i + 1; $t = "
    【PAGE $page3/$lencnt】 "; $no = 1; if (!$html3_flag) { while ($no <= $lencnt) { if ($page3 ne $no) { $t .= "[$no] "; } else { $t .= "[$no] "; } $no++; } } $t .= "
    "; $t .= "

    $tval[$page3 - 1]"; $pag3 = $page3 + 1; if ($page3 < $lencnt) { if (!$html3_flag) { $t .= "
    ⇒To Be Continued..."; } else { $t .= "

    "; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= " \" class=\"F_SUB\">
    "; } } $value = $t; } return $lencnt; } sub count { #カウントファイル生成 local($number) = @_; local($cfile,$data,$ct); $cfile = "$cntdir" . "$number" . '.txt'; open(NO,">$cfile"); print NO "0:"; close(NO); } sub count2 { #カウント数書き込み local($number) = @_; local($cfile,$data,$ct,$ip); $cfile = "$cntdir" . "$number" . '.txt'; &host; open(IN,"$cfile"); $data = ; close(IN); ($ct,$ip) = split(/:/, $data); $ct++; if ($cnts eq "2" || $addr ne $ip) { open(OUT,">$cfile"); print OUT "$ct\:$addr"; close(OUT); } } sub count3 { #カウント数読み込み local($number) = @_; local($cfile,$ct,$data); $cfile = "$cntdir" . "$number" . '.txt'; if (-e $cfile) { open(NO,"$cfile"); $data = ; close(NO); $ct = (split(/:/, $data))[0]; } else { $ct = 0; } $ct; } sub del_log { #削除ログ書き込み local($dfile,$del_cnt,$del_line,@del_lines); if ($FORM{'log'} eq '') { $dfile = "$del_dir" . 'del_' . 'anthology' . '.txt'; } else { $dfile = "$del_dir" . 'del_' . "$FORM{'log'}" . '.txt'; } open(FD,"$dfile"); @del_lines = ; $del_cnt = @del_lines; close(FD); &date; if (!$skip) { if ($del_cnt >= $del_max) { pop(@del_lines); } if ($admin) { $del_line .= "$date_now:『$tit』:$name:<管理者削除>\n"; } else { $del_line .= "$date_now:『$tit』:$name\n"; } unshift(@del_lines,$del_line); } else { unlink($dfile); $dfile = "$del_dir" . 'del_' . "$t_back" . '.txt'; } open(FD,">$dfile"); print FD @del_lines; close(FD); } sub del_log_show { #削除ログ表示(管理者モード時のみ) local($dfile); if ($FORM{'log'} eq '') { $dfile = "$del_dir" . 'del_' . 'anthology' . '.txt'; } else { $dfile = "$del_dir" . 'del_' . "$FORM{'log'}" . '.txt'; } if (-e $dfile) { print "■削除LOG\n"; } } sub mail { #投稿メール送信処理 local($ms,$frommail,$message); if ($mailsend ne "1") { return; } if (!$retry) { $ms = "新規投稿"; } else { $ms = "修正"; } $frommail = $FORM{'mail'} || $mailto; $message = <\n"; } sub rename { #作品記事更新時のリネーム処理 local($number) = @_; local($rfile,$cfile,$new_rfile,$new_cfile); if ($res) { $rfile = "$resdir" . "$number" . '.txt'; $new_rfile = "$resdir" . "$line_num" . '.txt'; rename $rfile => $new_rfile; } if ($cnts) { $cfile = "$cntdir" . "$number" . '.txt'; $new_cfile = "$cntdir" . "$line_num" . '.txt'; rename $cfile => $new_cfile; } } sub unlink { #作品記事削除時のデリート処理 local($number) = @_; local($rfile,$cfile); if ($res) { $rfile = "$resdir" . "$number" . '.txt'; unlink $rfile; } if ($cnts) { $cfile = "$cntdir" . "$number" . '.txt'; unlink $cfile; } } sub make_form { #作品投稿フォームの生成処理 local($flag) = @_; if (!$flag) { $name = $COOKIE{'name'}; $mail = $COOKIE{'mail'}; $url = $COOKIE{'url'}; } if ($trips) { $name =~ s/◆.*/#/g; } $value =~ s/\0/\,/g; $value =~ s/
    /\r/g; $come =~ s/\0/\,/g; $come =~ s/
    /\r/g; print "
    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($sakutit) { print "\n"; print "\n"; print "\n"; print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($haik) { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($moir ne '') { print "\n"; print "\n"; print "\n"; print "\n"; } } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($flag) { if ($admin || $sel eq "1") { print "\n"; print "\n"; print "\n"; print "\n"; } elsif ($sel eq "2") { print "\n"; } } print "\n"; print "\n"; print "\n"; print "
    小説投稿
    \n"; print "お名前\n"; print "\n"; print "\n"; print "
    \n"; print "Mail\n"; print "\n"; print "\n"; print "
    \n"; print "URL\n"; print "\n"; print "http\:\/\/\n"; print ""; print "
    投稿作品
    \n"; print "TITLE\n"; print "\n"; print "\n"; print "
    \n"; print "前書き\n"; print "\n"; print "\n"; print "
    作品内容\n"; print "\n"; print "
    \n"; print "コメント\n"; print "\n"; print "\n"; print "
    \n"; print "背景と文字色の選択\n"; print "(指定しない場合、背景色はになります。)\n"; print "
    \n"; print "背景画像\n"; print "\n"; print "\n"; print "\n"; $i = 0; foreach (@IMG) { if ($_ ne '') { $i++; if ($imgs eq $_) { $usr_img = '1'; print "\n"; $s = $i % 5; if ($s == 0) { print "\n"; } } else { print "\n"; $s = $i % 5; if ($s == 0) { print "\n"; } } } } print "\n"; print "
    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
    \n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
    \n"; print "
    \n"; print "背景画像url\n"; print "\n"; if ($imgs ne '' && $usr_img ne '1') { print "\n"; } else { print "\n"; } print "
    \n"; print "文字色\n"; print "\n"; $i = 0; foreach (@FONT) { if ($_ ne '') { $i++; if ($fcol ne '') { if ($fcol eq $_) { print "\n"; print "\n" } else { print "\n"; print "\n"; } print " \n"; $s = $i % 5; if ($s == 0) { print "
    \n"; } } else { if ($i == 1) { print "\n"; print "\n"; } else { print "\n"; print "\n"; } print " \n"; $s = $i % 5; if ($s == 0) { print "
    \n"; } } } } print "
    その他
    \n"; print "プレビュー\n"; print "\n"; print "あり\n"; print "なし\n"; print "
    \n"; print "修正方法\n"; print "\n"; print "記事を上げる\n"; print "PASS変更なし\n" if ($admin); print "ID変更なし\n" if ($admin && $hos eq '1'); print "
    \n"; print "PASSWORD\n"; if ($admin) { print "\n"; } else { print "\n"; } if ($flag) { print "\n"; print "\n"; } print "\n"; print "\n"; print "\n"; print "
    \n"; print "
    \n"; print "

    \n"; } sub make_form2 { #感想投稿フォームの生成処理 local($form2_flag) = @_; if (!$form2_flag) { $name_r = $COOKIE{'name'}; $mail_r = $COOKIE{'mail'}; $url_r = $COOKIE{'url'}; ($come_r,$poi) = undef; } if ($trips) { $name_r =~ s/◆.*/#/g; } $come_r =~ s/
    /\r/g; $poi =~ s/\D//g; print <
    HTML if ($form2_flag) { if ($admin || $sel2 eq "1") { print "\n"; print "\n"; print "\n"; print "\n"; } elsif ($sel2 eq "2") { print "\n"; } } print "\n"; if ($point eq '1') { print "
    お名前(必須)
    E-Mail(任意)
    URL(任意) http://
    メッセージ
    \n"; print "修正方法\n"; print "\n"; print "記事を上げる\n"; print "PASS変更なし\n" if ($admin); print "ID変更なし\n" if ($admin && $hos eq '1'); print "
    評価(必須)\n"; print "\n"; print "     \n"; } elsif ($point eq '2') { print "評価(必須)\n"; print "点\n"; print "     \n"; } else { print "\n"; } print "削除用パス\n"; if ($admin) { print "\n"; } else { print "\n"; } print "     \n"; print "\n"; print "\n"; print <
    HTML if ($form2_flag) { print "\n"; print "\n"; } print "\n"; print "

    \n"; } sub make_novel { #作品の生成処理 local($tit,$name,$mail,$url,$date,$value,$come,$hosts,$lencnt) = @_; $value =~ s/\0/\,/g; if ( $value !~ /
    / ) { $value =~ s/\r/
    /g; } $value =~ s/(http:[!#-9A-~]+)/$1<\/a><\/b>/g; $come =~ s/\0/\,/g; $come =~ s/\r/
    /g; $come =~ s/(http:[!#-9A-~]+)/
    $1<\/a><\/b>/g; print "
    \n"; print "\n"; print "$tit\n"; print "\n"; print "
    作者:\n"; if ($mail ne '') { print "$name\n"; } else { print "$name\n"; } if ($url ne '') { print "  URL: http://$url\n"; } print "  $date公開\n"; if ($hos ne '') { local($message,$ID) = &id($hosts); print "  $message:$ID\n"; } print "
    \n"; print "$value\n"; print "
    \n"; print "
    \n"; print "
    ■作者からのメッセージ\n"; print "
    \n"; if ($come ne '') { print "$come\n"; } else { print "作者からのメッセージはありません。\n"; } print "