トップページへ戻る | "read.cgiを読む" へ | パッケージ一覧へ

0ch書き込み用CGI "bbs.cgi" を読む (test041030)

"bbs.cgiを読む" の建設予定地です <(_ _;)>

# ***** BBSCGIの下請けサブルーチン *****
#
# PrintConfirm スレッド作成確認画面表示
# PrintCreate スレッド作成画面表示


BBSCGI;
exit;


sub BBSCGI{

  ... メインルーチン冒頭部分で、各種オブジェクト生成・作業用変数宣言 ...

  $S->DecodeForm(1); # フォーム情報デコード
  $M->Set('AGENT', $G->GetAgentMode($ENV{'HTTP_USER_AGENT'})); # エージェント設定

  $W->Load($M);
  $W->Method($S);
  $M->Set('RULE', $W->Check($S));
  $M->Set('BBS', $S->Get('bbs'));

  ...

  if($I->Load($M)){ # SETTING.TXTのロード

    if($I->Get('REFERER_CHECK') eq 'checked' && !$M->Get('AGENT')){ # リファラチェックあり

      if($G->IsReferer($M, \%ENV)){ # 自鯖以外からのCGI呼び出し

        ... エラー表示処理 ...

	return;
      }

    }

    if($S->Get('key')){ # スレッドキーあり

      $M->Set('KEY', $S->Get('key'));
      ...

    }else{ # スレッドキーなし

      $M->Set('KEY', $V->MakeNewThreadKey($M)); # スレッドキーを作成してセットする
      ...

      if($I->Get('BBS_SUBBBS_CGI') eq 'on'){ # SUBBBSオン

	if($S->Get('MESSAGE')){ # スレッド作成確認画面へ
	  PrintConfirm($M, $I, $S);

	}else{ # スレッド作成画面へ
	  PrintCreate($M, $I, $S);

	}

	return;
      }

    }

    $num = $V->WriteData($G, $S, $M, $I, $A); # 書き込み処理

    if($num){ # エラー無しで書き込み

      if($M->Get('FASTMODE') && $ENV{'HTTP_USER_AGENT'} =~ /Monazilla/){ # 高速モード発動
	... 高速モードの場合、何もしない ...
      }else{

	$V->UpdateSubject($M, $S, $num); # subject.txt更新
	$V->UpdateSubback($M, $E, $S->Get('bbs')); # subback.html更新
	$V->UpdateIndex($M, $I, $E, $G, $A); # index.html更新
	$V->UpdateMIndex($M, $I, $E); # i/index.html更新
	$V->UpdateIndexCGI($M); # index.cgi更新

      }

      $E->PrintJumpPage($T, $M, $I, $G, $S); # ジャンプページ出力

    }


  }else{ # SETTING.TXT読み込み失敗

    ... エラー表示処理 ...

  }

}

    

BBSCGI の下請けサブルーチン PrintConfirm の疑似コードを以下に示します
sub PrintConfirm{
  ...

  $cgi = $M->Get('PATH-CGI');
  $bbs = $S->Get('bbs');

  ...

  $E->PrintHTMLHeadA($T, $M, 0, "", $I->Get('BBS_TITLE'), 'Shift_JIS');
  $E->PrintHTMLBodyA($T, $I, 0);

  ... HTMLタグ出力 ...

  $T->Flush(0, 0, "");

}
    

BBSCGI の下請けサブルーチン PrintCreate の疑似コードを以下に示します
sub PrintCreate{

  ...

  $D->Load($M);
  $L->Load($M, 'HEAD');

  $kanban = $I->Get('BBS_FIGUREHEAD');

  $E->PrintHTMLHeadA($T, $M, 0, "", $I->Get('BBS_TITLE'), 'Shift_JIS');

  if($I->IsSetting('BBS_COOKIE', 'on')){

    ...

    $R->Print($T);

    ...

  }

  $E->PrintHTMLBodyA($T, $I, 0);

  if($kanban){ # 看板画像あり
    ...
  }else{
    ...
  }

  $L->Print($T, $I);
  $D->Print($T, $M, 95, 0);

  ...
  $E->PrintThreadForm($T, $M, $I, 1);
  ...

  $T->Flush(0, 0, "");

}
    

# ***** SubBBSCGIの下請けサブルーチン *****
#
# PrintMobileCreate 携帯用スレッド作成画面表示


sub SubBBSCGI{
  ...

  $S->DecodeForm(1);
  $M->Set('AGENT', $G->GetAgentMode($ENV{'HTTP_USER_AGENT'}));

  $W->Load($M);
  $W->Method($S);
  $M->Set('RULE', $W->Check($S));
  $M->Set('BBS', $S->Get('bbs'));

  ...

  if($I->Load($M)){ # SETTING.TXTのロード
    ...

    if($I->Get('REFERER_CHECK') eq 'checked' && !$M->Get('AGENT')){ # リファラチェックあり

      if($G->IsReferer($M, \%ENV)){ # 自鯖以外からのCGI呼び出し

	... エラー表示処理 ...

	return;
      }

    }

    if($S->Get('mobile') && $M->Get('AGENT')){ # 携帯からスレッド作成
      PrintMobileCreate($M, $S, $I, $T, $E);

      return;
    }

    $M->Set('KEY', $V->MakeNewThreadKey($M));
    $M->Set('MODE', 2);
    $M->MakeAnyPath();

    $num = $V->WriteData($G, $S, $M, $I, $A); # 書き込み処理

    if($num){

      $V->UpdateSubject($M, $S, $num);
      $V->UpdateSubback($M, $E, $S->Get('bbs'));
      $V->UpdateIndex($M, $I, $E, $G, $A);
      $V->UpdateMIndex($M, $I, $E);
      $V->UpdateIndexCGI($M);
      $E->PrintJumpPage($T, $M, $I, $G, $S);

    }

  }else{ # SETTING.TXT読み込み失敗

    ... エラー表示処理 ...

  }

}


sub PrintMobileCreate{
  ...

  $ttl = $I->Get('BBS_TITLE');
  $bbs = $M->Get('BBS');
  ...

  ... HTMLタグ出力 ...

  $T->Flush(0, 0, "");
}
    

トップページへ戻る | "read.cgiを読む" へ | パッケージ一覧へ