Source for file LC_Page_Admin_Contents_FileManager.php

Documentation is available at LC_Page_Admin_Contents_FileManager.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once(CLASS_PATH "pages/LC_Page.php");
  26. require_once(CLASS_EX_PATH "helper_extends/SC_Helper_FileManager_Ex.php");
  27.  
  28. /**
  29.  * ファイル管理 のページクラス.
  30.  *
  31.  * @package Page
  32.  * @author LOCKON CO.,LTD.
  33.  * @version $Id$
  34.  */
  35.  
  36.     // }}}
  37.     // {{{ functions
  38.  
  39.     /**
  40.      * Page を初期化する.
  41.      *
  42.      * @return void 
  43.      */
  44.     function init({
  45.         parent::init();
  46.         $this->tpl_mainpage = 'contents/file_manager.tpl';
  47.         $this->tpl_mainno = 'contents';
  48.         $this->tpl_subnavi 'contents/subnavi.tpl';
  49.         $this->tpl_subno "file";
  50.         $this->tpl_subtitle 'ファイル管理';
  51.  
  52.     }
  53.  
  54.     /**
  55.      * Page のプロセス.
  56.      *
  57.      * @return void 
  58.      */
  59.     function process({
  60.         //---- 認証可否の判定
  61.         $objSess new SC_Session();
  62.         SC_Utils_Ex::sfIsSuccess($objSess);
  63.  
  64.         // ルートディレクトリ
  65.         $top_dir USER_PATH;
  66.  
  67.         $objView new SC_AdminView();
  68.         $objQuery new SC_Query();
  69.         $objFileManager new SC_Helper_FileManager_Ex();
  70.  
  71.         if (!isset($_POST['mode'])) $_POST['mode'"";
  72.         
  73.         // 現在の階層を取得
  74.         if($_POST['mode'!= ""{
  75.             $now_dir $_POST['now_file'];
  76.         else {
  77.             // 初期表示はルートディレクトリ(user_data/)を表示
  78.             $now_dir $top_dir;
  79.         }
  80.  
  81.         // ファイル管理クラス
  82.         $objUpFile new SC_UploadFile($now_dir$now_dir);
  83.         // ファイル情報の初期化
  84.         $this->lfInitFile($objUpFile);
  85.  
  86.         switch($_POST['mode']{
  87.  
  88.             // ファイル表示
  89.         case 'view':
  90.             // エラーチェック
  91.             $arrErr $this->lfErrorCheck();
  92.  
  93.             if(!is_array($arrErr)) {
  94.                 // 選択されたファイルがディレクトリなら移動
  95.                 if(is_dir($_POST['select_file'])) {
  96.                     ///$now_dir = $_POST['select_file'];
  97.                     // ツリー遷移用のjavascriptを埋め込む
  98.                     $arrErr['select_file'"※ ディレクトリを表示することは出来ません。<br/>";
  99.  
  100.                 else {
  101.                     // javascriptで別窓表示(テンプレート側に渡す)
  102.                     // FIXME XSS対策すること
  103.                     $file_url ereg_replace(USER_PATH""$_POST['select_file']);
  104.                     $this->tpl_onload = "win02('./file_view.php?file="$file_url ."', 'user_data', '600', '400');";
  105.                 }
  106.             }
  107.             break;
  108.             // ファイルダウンロード
  109.         case 'download':
  110.  
  111.             // エラーチェック
  112.             $arrErr $this->lfErrorCheck();
  113.             if(!is_array($arrErr)) {
  114.                 if(is_dir($_POST['select_file'])) {
  115.                     // ディレクトリの場合はjavascriptエラー
  116.                     $arrErr['select_file'"※ ディレクトリをダウンロードすることは出来ません。<br/>";
  117.                 else {
  118.                     // ファイルダウンロード
  119.                     $objFileManager->sfDownloadFile($_POST['select_file']);
  120.                     exit;
  121.                 }
  122.             }
  123.             break;
  124.             // ファイル削除
  125.         case 'delete':
  126.             // エラーチェック
  127.             $arrErr $this->lfErrorCheck();
  128.             if(!is_array($arrErr)) {
  129.                 $objFileManager->sfDeleteDir($_POST['select_file']);
  130.             }
  131.             break;
  132.             // ファイル作成
  133.         case 'create':
  134.             // エラーチェック
  135.             $arrErr $this->lfCreateErrorCheck();
  136.             if(!is_array($arrErr)) {
  137.                 $create_dir ereg_replace("/$"""$now_dir);
  138.                 // ファイル作成
  139.                 if(!$objFileManager->sfCreateFile($create_dir."/".$_POST['create_file']0755)) {
  140.                     // 作成エラー
  141.                     $arrErr['create_file'"※ ".$_POST['create_file']."の作成に失敗しました。<br/>";
  142.                 else {
  143.                     $this->tpl_onload .= "alert('フォルダを作成しました。');";
  144.                 }
  145.             }
  146.             break;
  147.             // ファイルアップロード
  148.         case 'upload':
  149.             // 画像保存処理
  150.             $ret $objUpFile->makeTempFile('upload_file'false);
  151.             if($ret != ""{
  152.                 $arrErr['upload_file'$ret;
  153.             else {
  154.                 $this->tpl_onload .= "alert('ファイルをアップロードしました。');";
  155.             }
  156.             break;
  157.             // フォルダ移動
  158.         case 'move':
  159.             $now_dir $this->lfCheckSelectDir($_POST['tree_select_file']);
  160.             break;
  161.             // 初期表示
  162.         default :
  163.             break;
  164.         }
  165.         // トップディレクトリか調査
  166.         $is_top_dir false;
  167.         // 末尾の/をとる
  168.         $top_dir_check ereg_replace("/$"""$top_dir);
  169.         $now_dir_check ereg_replace("/$"""$now_dir);
  170.         if($top_dir_check == $now_dir_check$is_top_dir true;
  171.  
  172.         // 現在の階層より一つ上の階層を取得
  173.         $parent_dir $this->lfGetParentDir($now_dir);
  174.  
  175.         // 現在のディレクトリ配下のファイル一覧を取得
  176.         $this->arrFileList $objFileManager->sfGetFileList($now_dir);
  177.         $this->tpl_is_top_dir $is_top_dir;
  178.         $this->tpl_parent_dir $parent_dir;
  179.         $this->tpl_now_dir $now_dir;
  180.         $this->tpl_now_file basename($now_dir);
  181.         $this->arrErr = isset($arrErr$arrErr "";
  182.         $this->arrParam $_POST;
  183.  
  184.         // ツリーを表示する divタグid, ツリー配列変数名, 現在ディレクトリ, 選択ツリーhidden名, ツリー状態hidden名, mode hidden名
  185.         $treeView "fnTreeView('tree', arrTree, '$now_dir', 'tree_select_file', 'tree_status', 'move');";
  186.         if (!empty($this->tpl_onload)) {
  187.             $this->tpl_onload .= $treeView;
  188.         else {
  189.             $this->tpl_onload = $treeView;
  190.         }
  191.  
  192.         // ツリー配列作成用 javascript
  193.         if (!isset($_POST['tree_status'])) $_POST['tree_status'"";
  194.         $arrTree $objFileManager->sfGetFileTree($top_dir$_POST['tree_status']);
  195.         $this->tpl_javascript .= "arrTree = new Array();\n";
  196.         foreach($arrTree as $arrVal{
  197.             $this->tpl_javascript .= "arrTree[".$arrVal['count']."] = new Array(".$arrVal['count'].", '".$arrVal['type']."', '".$arrVal['path']."', ".$arrVal['rank'].",";
  198.             if ($arrVal['open']{
  199.                 $this->tpl_javascript .= "true);\n";
  200.             else {
  201.                 $this->tpl_javascript .= "false);\n";
  202.             }
  203.         }
  204.  
  205.         // 画面の表示
  206.         $objView->assignobj($this);
  207.         $objView->display(MAIN_FRAME);
  208.     }
  209.  
  210.     /**
  211.      * デストラクタ.
  212.      *
  213.      * @return void 
  214.      */
  215.     function destroy({
  216.         parent::destroy();
  217.     }
  218.  
  219.     /*
  220.      * 関数名:lfErrorCheck()
  221.      * 説明 :エラーチェック
  222.      */
  223.     function lfErrorCheck({
  224.         $objErr new SC_CheckError($_POST);
  225.         $objErr->doFunc(array("ファイル""select_file")array("SELECT_CHECK"));
  226.  
  227.         return $objErr->arrErr;
  228.     }
  229.  
  230.     /*
  231.      * 関数名:lfCreateErrorCheck()
  232.      * 説明 :ファイル作成処理エラーチェック
  233.      */
  234.     function lfCreateErrorCheck({
  235.         $objErr new SC_CheckError($_POST);
  236.         $objErr->doFunc(array("作成ファイル名""create_file")array("EXIST_CHECK""FILE_NAME_CHECK_BY_NOUPLOAD"));
  237.  
  238.         return $objErr->arrErr;
  239.     }
  240.  
  241.     /*
  242.      * 関数名:lfInitFile()
  243.      * 説明 :ファイル情報の初期化
  244.      */
  245.     function lfInitFile(&$objUpFile{
  246.         $objUpFile->addFile("ファイル"'upload_file'array()FILE_SIZEtrue00false);
  247.     }
  248.  
  249.     /*
  250.      * 関数名:lfCheckSelectDir()
  251.      * 引数1:ディレクトリ
  252.      * 説明:選択ディレクトリがUSER_PATH以下かチェック
  253.      */
  254.     function lfCheckSelectDir($dir{
  255.         $top_dir USER_PATH;
  256.         // USER_PATH以下の場合
  257.             if (preg_match("@^\Q"$top_dir"\E@"$dir0{
  258.             // 相対パスがある場合、USER_PATHを返す.
  259.             if (preg_match("@\Q..\E@"$dir0{
  260.                 return $top_dir;
  261.             // 相対パスがない場合、そのままディレクトリパスを返す.
  262.             else {
  263.                 return $dir;
  264.             }
  265.         // USER_PATH以下でない場合、USER_PATHを返す.
  266.         else {
  267.             return $top_dir;
  268.         }
  269.     }
  270.  
  271.     /*
  272.      * 関数名:lfGetParentDir()
  273.      * 引数1 :ディレクトリ
  274.      * 説明 :親ディレクトリ取得
  275.      */
  276.     function lfGetParentDir($dir{
  277.         $dir ereg_replace("/$"""$dir);
  278.         $arrDir split('/'$dir);
  279.         array_pop($arrDir);
  280.         $parent_dir "";
  281.         foreach($arrDir as $val{
  282.             $parent_dir .= "$val/";
  283.         }
  284.         $parent_dir ereg_replace("/$"""$parent_dir);
  285.  
  286.         return $parent_dir;
  287.     }
  288. }
  289. ?>

Documentation generated on Tue, 28 Apr 2009 18:10:56 +0900 by phpDocumentor 1.4.2