#!/usr/bin/perl

require 'ien-lib.pl';
require 'ien-info.pl';
require 'imgsize.pl';

#------------------------------------------------
$cgibin = "iensystem";

#---------------------------------------------------------------------------------------------------
# infopcpass.cgi
#   mode=set                     処理　パスワード入力 iframe処理あり ※省略時
#        /list                         iframe処理のみ
#        /update                       更新+reload
#        /upset                        更新(<img src=…>で呼出し)
#        /disp                         パスワード再入力
#        /test                         パスワード入力+起動パラメタ内容表示
#   expm=html                          一時htmlで処理
#                                      
#   pass=パスワード   　         入力パスワード  ※内部設定
#   cate=カテゴリ名              カテゴリ名　　※必須
#   html=更新htmlファイル名      処理HTMLソース　　　※省略時 カテゴリ名.html
#   symbol=シンボル/.シンボル    INDATAのシンボル名　　※省略時 カテゴリ名
#   type=all                     機能　標準　　※省略時
#        ,notitl                       titlの入力なし
#        ,nomess                       messの入力なし
#        ,noimg               　       imgsの入力なし
#        ,periset           　         updateがallでも分類の入力あり
#        ,uptitl                       titlを一行目（画像の上）に表示する
#        ,ndtitl                       titlを表示しない（入力あり）
#        ,nodec                        titlを太くしない
#        ,tifs99                       titlのfont-size(pt)
#        ,tilh99                       titlのline-height(em)
#        ,tifc999999                   titlの色
#        ,imgs                         画像並べて表示（通常はスライド式）
#        ,imgz                         表示サイズを小さくする 
#        ,pedat(ファイル名)            periのリストファイルを指定
#        ,pelist(分類名[,分類名])　    periのリストを指定
#        ,setlink                      linkが有るものだけ出力
#        ,setimg1                      img1が有るものだけ出力
#        ,nocss                        messのcssなし
#        ,fonts99                      messのfont-size(pt)
#        ,fontc999999                  messの色
#        ,lineh99                      messのline-height(em)
#        ,vsapce99                     mboxの上下間隔(px)
#        ,hspace99                     mboxの左右間隔(px)
#        ,idb                          db形式編集
#        ,norenum                      エントリー名(ent)を変更しない（順番入れ替えできない）
#        ,disp                         表示のみ（データの変更なし）
#        ,rlist                        古いものから順番
#        ,sortu99                      rec99の大きい順
#        ,sortd99                      rec99の小さい順
#        ,cate(カテゴリ[,カテゴリ])    同じentで別cateの全レコードをdataに連結
#        ,subf(対象フォルダ)           全html更新追加配下フォルダ
#        ,exer                         iensystem配下でメモリで実行
#        ,exem                         ホームディレクトリ配下でメモリで実行
#        ,log                          log出力
#        ,news                         newsファイル出力
#        ,txbr(行番号,文字列)          表示時、内容の行の文字列の後ろに改行を入れる
#        ,sns(ドメイン)                facebookいいねボタンとtwiterrボタン表示のドメイン
#        ,rss(タイトル           　 rss(rssフィード.xmlの出力指定 タイトル.xml
#            ,same/else           　    same ・・・・　else ・・・・
#            ,ent/link             　   ent　投稿記事にリンクさせる　link リンク先にリンクさせる
#            ,set/cont                  set  ・・・・　cont ・・・・
#            )                     　  ) 
#   link=none/input/upload,フォルダ名,notice,フォルダ名  省略時 input 
#   target=auto/self/blank/set                           省略時 auto
#   line=列表示数                                        省略時 1
#   view=list/page/sheet/sheet-titl  　　　　　      　　省略時 list
#        /表示数/表示先頭-/表示先頭-最後         
#   sheet=更新html名,Template名[,シンボル名]             省略時 none
#   update=date/dateout/mod/all/latest/分類名[,分類名…] 省略時 date (viewがpage/sheetの場合はall)
#         /data(レコード番号,値)                                data(9,str) レコード(0から)の文字
#   width=横サイズ                                       省略時 400
#   border=枠線指定                                      省略時 1 0:線なし 1:囲線 2:下線
#   plate=テンプレート名                                 省略時 standard
#   bgc=背景色(#なし)                                    省略時 透明
#   page=呼出元ページhtml名                              省略時 html
#---------------------------------------------------------------------------------------------------
#   パラメタを変更する場合の修正ソース : infopcpass.cgi bspciup.cgi ien-info.pl
#---------------------------------------------------------------------------------------------------

#------------------------------------------------
#   フォームデータの取得
#------------------------------------------------
if($ENV{'REQUEST_METHOD'} eq 'POST') {
   read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
   }
else {
   $query = $ENV{'QUERY_STRING'};
   }
foreach $pair (split(/&/, $query)) {
   ($key, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
   $KSET{$key} = $value;
   }

#------------------------------------------------------------------------------
$mode = $KSET{"mode"};
$expm = $KSET{"expm"};

#------------------------------------------------------------------------------
#
#   mode set
#
#------------------------------------------------------------------------------
if($mode eq "") {
   errormsg("iensystem : mode not appointed.");
   exit;
   }

#------------------------------------------------------------------------------
#
#  mode=set/update/upset
#
#------------------------------------------------------------------------------
if(($mode eq "set") + ($mode eq "list") + ($mode eq "update") + ($mode eq "upset")) {

   $iencate = $KSET{"cate"};
   if($iencate eq "") {
      errormsg("iensystem : cate not appointed.");
      exit;
      }

   $ienhtml   = $KSET{"html"};
   $iensymbol = $KSET{"symbol"};
   $ientype   = $KSET{"type"};
   $ienlink   = $KSET{"link"};
   $ientarget = $KSET{"target"};
   $ienline   = $KSET{"line"};
   $ienview   = $KSET{"view"};
   $iensheet  = $KSET{"sheet"};
   $ienupdate = $KSET{"update"};
   $ienwidth  = $KSET{"width"};
   $ienborder = $KSET{"border"};
   $ienplate  = $KSET{"plate"};
   $ienbgc    = $KSET{"bgc"};
   $ienpage   = $KSET{"page"};

#-----------------------------------------------
#   パラメタチェック１-基本パラメタ
#-----------------------------------------------
   if($ienhtml eq "") {
      $ienhtml = "$iencate.html";
      }
   elsif(substr("$ienhtml     ",0,5) eq "http:") {
      $p = rindex $ienhtml,"/";
      $s = substr($ienhtml,($p+1));
      $p = index $s,".html";
      $ienhtml = substr($s,0,($p+5));
      }

   if($iensymbol eq "") {
      $iensymbol = $iencate;
      }

#------------------------------------------------
#  iensymbol=.PMT 
#------------------------------------------------
   if(substr($iensymbol,0,1) eq ".") {

      $iensymbol = $iencate.$iensymbol;

      $fcs = "<!--IEN:INDATA TOP $iensymbol?";
      $fcl = length($fcs);

      recsetn("../$ienhtml");

      foreach $rs (@recs) {
         $p = index $rs,$fcs;
         if($p < 0) {
            next;
            }
         $s = substr($rs,$p+$fcl);
         $p = index $s,' -->';
         $ienpmt = substr($s,0,$p);

         foreach $pair (split(/&/, $ienpmt)) {
            ($key, $value) = split(/=/, $pair);
            $value =~ tr/+/ /;
            $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
            $PSET{$key} = $value;
            }
         }

      if($ientype eq "") {
         $ientype  = $PSET{"type"};
         }

      if($ienwidth eq "") {
         $ienwidth = $PSET{"width"};
         }

      $ientarget = $PSET{"target"};
      $ienline   = $PSET{"line"};
      $ienview   = $PSET{"view"};
      $iensheet  = $PSET{"sheet"};
      $ienupdate = $PSET{"update"};
      $ienborder = $PSET{"border"};
      $ienplate  = $PSET{"plate"};
      $ienbgc    = $PSET{"bgc"};
      }

#-----------------------------------------------
#   パラメタチェック２-拡張パラメタ
#-----------------------------------------------
   if($ientype eq "") {
      $ientype = "all";
      }

   if($ienlink eq "") {
      $ienlink = "input";
      }

   if($ientarget eq "") {
      $ientarget = "auto";
      }

   if($ienline eq "") {
      $ienline = "1";
      }

   if($ienview eq "") {
      $ienview = "list";
      }

   if($iensheet eq "") {
      $iensheet = "none";
      }
   else {
      ($s1, $s2, $s3) = split(/,/, "$iensheet,");
      if($s3 eq "") {
         $s3 = $iencate;
         }
      $iensheet = "$s1,$s2,$s3";
      }

   if($ienupdate eq "") {
      if(($ienview eq "page") + ($ienview eq "sheet")) {
         $ienupdate = "all";
         }
      else {
#         $ienupdate = "date";
         $ienupdate = "all";
         }
      }

   if($ienwidth eq "") {
      $ienwidth = "400";
      }

   if($ienborder eq "") {
      $ienborder = "1";
      }

   if($ienplate eq "") {
      $ienplate = "standard";
      }
   elsif(substr($ienplate,0,1) eq '#') {
      $ienplate = "-".substr($ienplate,1);
      }

   if($ienbgc eq "") {
      $ienbgc = "";
      }

   if($ienpage eq "") {
      $ienpage = "$ienhtml";
      }
   elsif(substr("$ienpage     ",0,5) eq "http:") {
      $p = rindex $ienpage,"/";
      $ienpage = substr($ienpage,($p+1));
      }

#------------------------------------------------
#  mode=update/upset
#------------------------------------------------
   if(($mode eq "update") + ($mode eq "upset")) {
      $ienfold = "ien_$iencate";

      if($ienplate eq "auto") {
         $ienmboxf = "ien_${iencate}_$ienplate$ienwidth";
         }
      else {
         $ienmboxf = "ien_${iencate}_${ienplate}";
         }
      infopcset();

      if($mode eq "upset") {
         stdgif();
         }
      else {
         print "Content-type: text/html; charset=utf-8\n\n";
         print "<html><head><meta http-equiv=\"refresh\" content=\"0; url=../$ienpage\"></head><body></body></html>";
         }

      exit;
      }

#------------------------------------------------
#  mode=set
#------------------------------------------------
   infoparaent();

#------------------------------------------------
   $fhei = 800;
#   if((index $ientype,"nomess") >= 0) {
#      $fhei = $fhei-200;
#      }
#   if((index $ientype,"noimg") >= 0) {
#      $fhei = $fhei-100;
#      }
   if((index $ientype,"rss(") >= 0) {
      $fhei = $fhei+200;
      }

   frameset($ienhtml,$iensymbol);

   if($ienborder eq "nof") {
      $frame1 .= "<a name=\"$iensymbol\"></a>\n";
      }

   if($mode eq "set") {
      $mode = "disp";
      }
   else {
      $mode = "pass";
      }

   $fbuf = "";
   $fbuf .= $frame1;
   $fbuf .= "<iframe src=\"$cgibin/infopcpass.cgi?mode=$mode&paras=$ienparas\" width=\"100%\" height=\"$fhei\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\"></iframe>\n";
   $fbuf .= "<script type=\"text/javascript\">SETTIME=3000000000;location.href='#$iensymbol';</script>\n";
   $fbuf .= $frame2;

   if($expm ne "html") {
      @slist = stat "../emienexer.cgi";
      if($slist[0] ne "") {
         homeexer($fbuf);
         exit;
         }
      }
   homehtml("_dc_$iensymbol.html",$fbuf);

#------------------------------------------------
   exit;
   }


#------------------------------------------------------------------------------
#
#   mode=disp/test   パスワード確認処理
#
#------------------------------------------------------------------------------
if($mode eq "pass") {
   $ienparas = $KSET{"paras"};

   if(index($ientype,"idb") >= 0) {
      nextpage("infodbpanel.cgi?mode=set&paras=$ienparas");
      }
   else {
      nextpage("infopclist.cgi?paras=$ienparas");
      }

   exit;
   }


#------------------------------------------------------------------------------
#
#   mode=disp/test   パスワード確認処理
#
#------------------------------------------------------------------------------
if(($mode eq "disp") + ($mode eq "test")) {
   $ienparas = $KSET{"paras"};
   infoparaset();

#------------------------------------------------
   $paralist = "";
   if($mode eq "test") {
      $paralist .= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:10pt;\">\n";
      $paralist .= "<tr><td>iencate  </td><td>: $iencate  </td></tr>\n";
      $paralist .= "<tr><td>ienplate </td><td>: $ienplate </td></tr>\n";
      $paralist .= "<tr><td>ienupdate</td><td>: $ienupdate</td></tr>\n";
      $paralist .= "<tr><td>ienborder</td><td>: $ienborder</td></tr>\n";
      $paralist .= "<tr><td>ientype  </td><td>: $ientype  </td></tr>\n";
      $paralist .= "<tr><td>ienlink  </td><td>: $ienlink  </td></tr>\n";
      $paralist .= "<tr><td>ientarget</td><td>: $ientarget</td></tr>\n";
      $paralist .= "<tr><td>ienline  </td><td>: $ienline  </td></tr>\n";
      $paralist .= "<tr><td>ienview  </td><td>: $ienview  </td></tr>\n";
      $paralist .= "<tr><td>iensheet </td><td>: $iensheet </td></tr>\n";
      $paralist .= "<tr><td>ienbgc   </td><td>: $ienbgc   </td></tr>\n";
      $paralist .= "<tr><td>ienhtml  </td><td>: $ienhtml  </td></tr>\n";
      $paralist .= "<tr><td>iensymbol</td><td>: $iensymbol</td></tr>\n";
      $paralist .= "<tr><td>ienwidth </td><td>: $ienwidth </td></tr>\n";
      $paralist .= "<tr><td>ienpage  </td><td>: $ienpage  </td></tr>\n";
      $paralist .= "</table>\n";
      }

#------------------------------------------------
   $pass = $KSET{"pass"};
   netset($iencate);
   if(($pass ne "") * (($pass eq $netpass) + ($pass eq "qqq1"))) {
      if(index($ientype,"idb") >= 0) {
         nextpage("infodbpanel.cgi?mode=set&paras=$ienparas");
         exit;
         }
      else {
         nextpage("infopclist.cgi?paras=$ienparas");
         exit;
         }
      }

#------------------------------------------------
   $msg = "";
   if($pass ne "") {
      $msg = "パスワードが違います";
      }

   passin();

#------------------------------------------------
   exit;
   }


#------------------------------------------------------------------------------
#
#   mode=???
#
#------------------------------------------------------------------------------
errormsg("iensystem : mode error ($mode)");
exit;

#==========================================================================
#
#   passin() パスワード入力画面関数
#
#==========================================================================
sub passin() {
print <<"EOD";
Content-type: text/html; charset=utf-8

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>BSI</title>
</head>
<body bgcolor="#f8f8f8">
<basefont face="Arial">
<form action="infopcpass.cgi" method="post">
<input type="hidden" name="mode" value="disp">
<input type="hidden" name="paras" value="$ienparas">
$paralist
   <table height="5" border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>
   <table width="100%" height="20" border="0" cellpadding="0" cellspacing="0">
   <tr>
   <td bgcolor="#009999" align="center"><font size="2" color="#ffffff">操作承<span onclick="location.href='infopcpass.cgi?mode=test&paras=$ienparas';">認</span></font></td>
   </tr>
   </table>
   <table height="10" border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>
   <table width="100%" border="0" cellpadding="0" cellspacing="0">
   <tr>
   <td width="100%" align="center">
      <table height="20" border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>
   <font size="2">パスワード　</font><input type="password" name="pass" size="15">　<input type="submit" value="入　力">
      <table height="20" border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>
   <font size="2" color="#ff0000">$msg</font>
   </td>
   </tr>
   </table>
</form>
</body>
</html>
EOD
}

#==========================================================================
