PageRenderTime 49ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/post_form_options.inc.php

http://github.com/unpush/p2-php
PHP | 337 lines | 240 code | 45 blank | 52 comment | 68 complexity | bf1cab9eaa0752c578d9d23337589845 MD5 | raw file
  1. <?php
  2. /**
  3. * rep2 - レス書き込みフォームの機能読み込み
  4. */
  5. $js = array();
  6. $fake_time = -10; // time を10分前に偽装
  7. $time = time() - 9*60*60;
  8. $time = $time + $fake_time * 60;
  9. $csrfid = P2Util::getCsrfId('post' . $host . $bbs . $key);
  10. $hd['FROM'] = '';
  11. $hd['mail'] = '';
  12. $hd['MESSAGE'] = '';
  13. $hd['subject'] = '';
  14. $hd['beres_checked'] = '';
  15. $hd['p2res_checked'] = '';
  16. $htm['beres'] = '';
  17. $htm['p2res'] = '';
  18. $htm['sage_cb'] = '';
  19. $htm['maru_post'] = '';
  20. $htm['block_submit'] = '';
  21. $htm['src_fix'] = '';
  22. $htm['options'] = '';
  23. $htm['options_k'] = '';
  24. $htm['subject'] = '';
  25. $htm['resform_ttitle'] = '';
  26. $htm['disable_js'] = <<<EOP
  27. <script type="text/javascript">
  28. //<![CDATA[
  29. // Thanks naoya <http://d.hatena.ne.jp/naoya/20050804/1123152230>
  30. function isNetFront() {
  31. var ua = navigator.userAgent;
  32. if (ua.indexOf("NetFront") != -1 || ua.indexOf("AVEFront/") != -1 || ua.indexOf("AVE-Front/") != -1) {
  33. return true;
  34. } else {
  35. return false;
  36. }
  37. }
  38. function disableSubmit(form) {
  39. // 2006/02/15 NetFrontとは相性が悪く固まるらしいので抜ける
  40. if (isNetFront()) {
  41. return;
  42. }
  43. var elements = form.elements;
  44. for (var i = 0; i < elements.length; i++) {
  45. if (elements[i].type == 'submit') {
  46. elements[i].disabled = true;
  47. }
  48. }
  49. }
  50. function setHiddenValue(button) {
  51. // 2006/02/15 NetFrontとは相性が悪く固まるらしいので抜ける
  52. if (isNetFront()) {
  53. return;
  54. }
  55. if (button.name) {
  56. var q = document.createElement('input');
  57. q.type = 'hidden';
  58. q.name = button.name;
  59. q.value = button.value;
  60. button.form.appendChild(q);
  61. }
  62. }
  63. //]]>
  64. </script>\n
  65. EOP;
  66. // {{{ key.idxから名前とメールを読込み
  67. if ($lines = FileCtl::file_read_lines($key_idx, FILE_IGNORE_NEW_LINES)) {
  68. $line = explode('<>', $lines[0]);
  69. $hd['FROM'] = htmlspecialchars($line[7], ENT_QUOTES);
  70. $hd['mail'] = htmlspecialchars($line[8], ENT_QUOTES);
  71. }
  72. // }}}
  73. // {{{ データベースから前回のPOST失敗データとberes/p2resの設定を読込み
  74. $post_backup_key = PostDataStore::getKeyForBackup($host, $bbs, $key, !empty($_REQUEST['newthread']));
  75. $post_config_key = PostDataStore::getKeyForConfig($host, $bbs);
  76. // 前回のPOST失敗データ
  77. if ($post_backup = PostDataStore::get($post_backup_key)) {
  78. $hd['FROM'] = htmlspecialchars($post_backup['FROM'], ENT_QUOTES, 'Shift_JIS');
  79. $hd['mail'] = htmlspecialchars($post_backup['mail'], ENT_QUOTES, 'Shift_JIS');
  80. $hd['MESSAGE'] = htmlspecialchars($post_backup['MESSAGE'], ENT_QUOTES, 'Shift_JIS');
  81. $hd['subject'] = htmlspecialchars($post_backup['subject'], ENT_QUOTES, 'Shift_JIS');
  82. }
  83. // beres/p2res
  84. if ($post_config = PostDataStore::get($post_config_key)) {
  85. if ($post_config['beres']) {
  86. $hd['beres_checked'] = ' checked';
  87. }
  88. if ($post_config['p2res']) {
  89. $hd['p2res_checked'] = ' checked';
  90. }
  91. }
  92. // }}}
  93. // {{{ 名前とメールの最終調整
  94. // 空白はユーザ設定値に変換
  95. if ($hd['FROM'] === '') {
  96. $hd['FROM'] = htmlspecialchars($_conf['my_FROM'], ENT_QUOTES, 'Shift_JIS');
  97. }
  98. if ($hd['mail'] === '') {
  99. $hd['mail'] = htmlspecialchars($_conf['my_mail'], ENT_QUOTES, 'Shift_JIS');
  100. }
  101. // P2NULLは空白に変換
  102. if ($hd['FROM'] === 'P2NULL') {
  103. $hd['FROM'] = '';
  104. }
  105. if ($hd['mail'] === 'P2NULL') {
  106. $hd['mail'] = '';
  107. }
  108. // }}}
  109. // {{{ textareaの属性
  110. // 参考 クラシック COLS='60' ROWS='8'
  111. $mobile = Net_UserAgent_Mobile::singleton();
  112. $wrap_at = ''; // wrap属性はW3C HTML 4.01仕様に存在しない
  113. $name_size_at = '';
  114. $mail_size_at = '';
  115. $msg_cols_at = '';
  116. // PC
  117. if (!$_conf['ktai']) {
  118. $name_size_at = ' size="19"';
  119. $mail_size_at = ' size="19"';
  120. $msg_cols_at = ' cols="' . $STYLE['post_msg_cols'] . '"';
  121. // willcom
  122. } elseif($mobile->isAirHPhone()) {
  123. $msg_cols_at = ' cols="' . $STYLE['post_msg_cols'] . '"';
  124. // 携帯
  125. } else {
  126. $STYLE['post_msg_rows'] = 5;
  127. $wrap_at = ' wrap="soft"';
  128. }
  129. // {{{ PC用 sage チェックボックス
  130. if (!$_conf['ktai']) {
  131. $on_check_sage = ' onchange="checkSage();"';
  132. $htm['sage_cb'] = <<<EOP
  133. <input id="sage" type="checkbox" onclick="mailSage()"><label for="sage">sage</label>
  134. EOP;
  135. } else {
  136. $on_check_sage = '';
  137. }
  138. // }}}
  139. // {{{ ●/Be/公式p2 書き込み チェックボックス
  140. // 2ch●書き込み
  141. if (P2Util::isHost2chs($host) and file_exists($_conf['sid2ch_php'])) {
  142. $htm['maru_post'] = '<span title="2ch●IDの使用"><input type="checkbox" id="maru" name="maru" value="1">'
  143. . '<label for="maru">●</label></span>';
  144. }
  145. // Be
  146. if (P2Util::isHost2chs($host) and $_conf['be_2ch_code'] && $_conf['be_2ch_mail']) {
  147. $htm['beres'] = '<input type="checkbox" id="beres" name="beres" value="1"'. $hd['beres_checked'] . '>'
  148. . '<label for="beres">Beで書き込む</label>';
  149. }
  150. // 公式p2
  151. if ((P2Util::isHost2chs($host) || P2Util::isHostMachiBbs($host)) &&
  152. $_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass'])
  153. {
  154. $htm['p2res'] = '<input type="checkbox" id="p2res" name="p2res" value="1"'. $hd['p2res_checked'] . '>'
  155. . '<label for="p2res">公式p2で書き込む</label>';
  156. }
  157. // }}}
  158. // {{{ 書き込みブロック用チェックボックス
  159. if (!$_conf['ktai']) {
  160. $htm['block_submit'] = <<<EOP
  161. <input type="checkbox" id="block_submit" onclick="switchBlockSubmit(this.checked)"><label for="block_submit">block</label>
  162. EOP;
  163. }
  164. // }}}
  165. // {{{ ソースコード補正用チェックボックス
  166. if (!$_conf['ktai']) {
  167. if ($_conf['editor_srcfix'] == 1 || ($_conf['editor_srcfix'] == 2 && preg_match('/pc\\d+\\.2ch\\.net/', $host))) {
  168. $htm['src_fix'] = <<<EOP
  169. <input type="checkbox" id="fix_source" name="fix_source" value="1"><label for="fix_source">src</label>
  170. EOP;
  171. }
  172. }
  173. // }}}
  174. // {{{ 書き込みプレビュー
  175. $htm['dpreview_onoff'] = '';
  176. $htm['dpreview_amona'] = '';
  177. $htm['dpreview'] = '';
  178. $htm['dpreview2'] = '';
  179. if (!$_conf['ktai'] && $_conf['expack.editor.dpreview']) {
  180. $_dpreview_noname = 'null';
  181. if (P2Util::isHost2chs($host)) {
  182. $_dpreview_st = new SettingTxt($host, $bbs);
  183. $_dpreview_st->setSettingArray();
  184. if (!empty($_dpreview_st->setting_array['BBS_NONAME_NAME'])) {
  185. $_dpreview_noname = $_dpreview_st->setting_array['BBS_NONAME_NAME'];
  186. $_dpreview_noname = '"' . StrCtl::toJavaScript($_dpreview_noname) . '"';
  187. }
  188. }
  189. $_dpreview_hide = 'false';
  190. if ($_conf['expack.editor.dpreview'] == 2) {
  191. if (P2Util::isBrowserSafariGroup() && basename($_SERVER['SCRIPT_NAME']) != 'post_form.php') {
  192. $_dpreview_hide = 'true';
  193. }
  194. $_dpreview_pos = 'dpreview2';
  195. } else {
  196. $_dpreview_pos = 'dpreview';
  197. }
  198. $htm[$_dpreview_pos] = <<<EOP
  199. <script type="text/javascript" src="js/strutil.js?{$_conf['p2_version_id']}"></script>
  200. <script type="text/javascript" src="js/dpreview.js?{$_conf['p2_version_id']}"></script>
  201. <script type="text/javascript">
  202. //<![CDATA[
  203. var dpreview_use = true;
  204. var dpreview_on = false;
  205. var dpreview_hide = {$_dpreview_hide};
  206. var noname_name = {$_dpreview_noname};
  207. //]]>
  208. </script>
  209. <fieldset id="dpreview" style="display:none;">
  210. <legend>preview</legend>
  211. <div>
  212. <span class="prvw_resnum">?</span>
  213. F<span class="prvw_name"><b id="dp_name"></b><span id="dp_trip"></span></span>
  214. F<span id="dp_mail" class="prvw_mail"></span>
  215. F<span class="prvw_dateid"><span id="dp_date"></span> ID:<span id="dp_id">???</span></span>
  216. </div>
  217. <div id="dp_msg" class="prvw_msg"></div>
  218. <!-- <div id="dp_empty" class="prvw_msg">(empty)</div> -->
  219. </fieldset>
  220. EOP;
  221. $htm['dpreview_onoff'] = <<<EOP
  222. <input type="checkbox" id="dp_onoff" onclick="DPShowHide(this.checked)"><label for="dp_onoff">preview</label>
  223. EOP;
  224. if ($_conf['expack.editor.dpreview_chkaa']) {
  225. $htm['dpreview_amona'] = <<<EOP
  226. <input type="checkbox" id="dp_mona" disabled><label for="dp_mona">mona</label>
  227. EOP;
  228. }
  229. }
  230. // }}}
  231. // {{{ ここにレス
  232. $htm['orig_msg'] = '';
  233. if ((basename($_SERVER['SCRIPT_NAME']) == 'post_form.php' || !empty($_GET['inyou'])) && !empty($_GET['resnum'])) {
  234. $q_resnum = $_GET['resnum'];
  235. $hd['MESSAGE'] = "&gt;&gt;" . $q_resnum . "\r\n";
  236. if (!empty($_GET['inyou'])) {
  237. $aThread = new ThreadRead;
  238. $aThread->setThreadPathInfo($host, $bbs, $key);
  239. $aThread->readDat($aThread->keydat);
  240. $q_resar = $aThread->explodeDatLine($aThread->datlines[$q_resnum-1]);
  241. $q_resar = array_map('trim', $q_resar);
  242. $q_resar[3] = strip_tags($q_resar[3], '<br>');
  243. if ($_GET['inyou'] == 1 || $_GET['inyou'] == 3) {
  244. $hd['MESSAGE'] .= '&gt; ';
  245. $hd['MESSAGE'] .= preg_replace('/\\s*<br>\\s*/',"\r\n&gt; ", $q_resar[3]);
  246. $hd['MESSAGE'] .= "\r\n";
  247. }
  248. if ($_GET['inyou'] == 2 || $_GET['inyou'] == 3) {
  249. if (!$_conf['ktai'] || $_conf['iphone']) {
  250. $htm['orig_msg'] = <<<EOM
  251. <fieldset id="original_msg">
  252. <legend>Original Message:</legend>
  253. <div>
  254. <span class="prvw_resnum">{$q_resnum}</span>
  255. F<b class="prvw_name">{$q_resar[0]}</b>
  256. F<span class="prvw_mail">{$q_resar[1]}</span>
  257. F<span class="prvw_dateid">{$q_resar[2]}</span>
  258. </div>
  259. <div id="orig_msg" class="prvw_msg">{$q_resar[3]}</div>
  260. </fieldset>
  261. EOM;
  262. } else {
  263. $htm['orig_msg'] = <<<EOM
  264. <div><i>Original Message:</i>
  265. [{$q_resnum}]: <b>{$q_resar[0]}</b>: {$q_resar[1]}: {$q_resar[2]}<br>
  266. {$q_resar[3]}</div>
  267. EOM;
  268. }
  269. }
  270. }
  271. }
  272. // }}}
  273. // {{{ 本文が空のときやsageてないときに送信しようとすると注意する
  274. $onsubmit_at = '';
  275. if (!$_conf['ktai']) {
  276. if (!preg_match('{NetFront|AVE-?Front/}', $_SERVER['HTTP_USER_AGENT'])) {
  277. $onsubmit_at = sprintf(' onsubmit="if (validateAll(%s,%s)) { switchBlockSubmit(true); return true; } else { return false }"',
  278. (($_conf['expack.editor.check_message']) ? 'true' : 'false'),
  279. (($_conf['expack.editor.check_sage']) ? 'true' : 'false'));
  280. }
  281. }
  282. // }}}
  283. /*
  284. * Local Variables:
  285. * mode: php
  286. * coding: cp932
  287. * tab-width: 4
  288. * c-basic-offset: 4
  289. * indent-tabs-mode: nil
  290. * End:
  291. */
  292. // vim: set syn=php fenc=cp932 ai et ts=4 sw=4 sts=4 fdm=marker: