OSDN Git Service

ユーザ環境管理マネジャー追加。
authornaoki hirata <naoki@magic3.org>
Tue, 19 Jul 2016 05:12:33 +0000 (14:12 +0900)
committernaoki hirata <naoki@magic3.org>
Tue, 19 Jul 2016 05:12:33 +0000 (14:12 +0900)
include/manager/envManager.php
include/manager/instanceManager.php
include/manager/userManager.php [new file with mode: 0644]

index d81c3cd..a13b481 100644 (file)
@@ -830,6 +830,15 @@ class EnvManager extends Core
                return $this->workDir;
        }
        /**
+        * 一般ユーザ用の作業用ディレクトリへのパスを取得
+        *
+        * @return string               作業ディレクトリ
+        */
+       public function getUserWorkDirPath()
+       {
+               return $this->workDir . DIRECTORY_SEPARATOR . 'users';
+       }
+       /**
         * セッション単位の一時ディレクトリを取得
         *
         * @param bool  $createDir      ディレクトリが存在しない場合、作成するかどうか
@@ -842,6 +851,18 @@ class EnvManager extends Core
                return $dir;
        }
        /**
+        * 一般ユーザ用のセッション単位の一時ディレクトリを取得
+        *
+        * @param bool  $createDir      ディレクトリが存在しない場合、作成するかどうか
+        * @return string               一時ディレクトリ
+        */
+       function getUserTempDirBySession($createDir = false)
+       {
+               $dir = $this->getUserWorkDirPath() . DIRECTORY_SEPARATOR . session_id();
+               if (!file_exists($dir) && $createDir) mkdir($dir, M3_SYSTEM_DIR_PERMISSION, true/*再帰的*/);
+               return $dir;
+       }
+       /**
         * 一時ディレクトリを取得
         *
         * 一時ディレクトリを作成してパスを取得
index fd865cf..2211138 100644 (file)
@@ -8,7 +8,7 @@
  *
  * @package    Magic3 Framework
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright  Copyright 2006-2014 Magic3 Project.
+ * @copyright  Copyright 2006-2016 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
  * @version    SVN: $Id$
  * @link       http://www.magic3.org
@@ -434,5 +434,20 @@ class InstanceManager extends Core
                }
                return $manager;
        }
+       /**
+        * ユーザマネージャー取得
+        *
+        * @return object                       取得したオブジェクト
+        */
+       static public function getUserManager()
+       {
+               static $manager;// マネージャーオブジェクト
+               
+               if (!isset($manager)){
+                       require_once(M3_SYSTEM_INCLUDE_PATH . '/manager/userManager.php');
+                       $manager                = new UserManager();
+               }
+               return $manager;
+       }
 }
 ?>
diff --git a/include/manager/userManager.php b/include/manager/userManager.php
new file mode 100644 (file)
index 0000000..7180038
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+/**
+ * ユーザマネージャー
+ *
+ * ユーザ単位で必要とする情報へのアクセスを管理
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is licensed under the terms of the GNU General Public License.
+ *
+ * @package    Magic3 Framework
+ * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
+ * @copyright  Copyright 2006-2016 Magic3 Project.
+ * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
+ * @version    SVN: $Id$
+ * @link       http://www.magic3.org
+ */
+require_once(M3_SYSTEM_INCLUDE_PATH . '/common/core.php');
+
+class UserManager extends Core
+{
+       private $db;                                            // DBオブジェクト
+       const WORK_DIR_EXPIRE_HOUR = 1;         // 作業ディレクトリ自動削除時間
+       
+       /**
+        * コンストラクタ
+        */
+       function __construct()
+       {
+               // 親クラスを呼び出す
+               parent::__construct();
+               
+               // システムDBオブジェクト取得
+               $this->db = $this->gInstance->getSytemDbObject();
+       }
+       /**
+        * セッション単位の作業用ディレクトリ作成
+        *
+        * @param bool  $createDir      ディレクトリが存在しない場合、作成するかどうか
+        * @return string                       作業ディレクトリパス
+        */
+       function getSessionWorkDir($createDir = false)
+       {
+               // ディレクトリを作成
+               $workDir = $this->gEnv->getUserTempDirBySession($createDir/*ディレクトリ作成*/);
+               
+               return $workDir;
+       }
+       /**
+        * セッション単位の作業用ディレクトリを削除
+        *
+        * @return bool                 true=削除を実行、false=削除対象なし
+        */
+       function removeSessionWorkDir()
+       {
+               // ディレクトリを取得
+               $workDir = $this->gEnv->getUserTempDirBySession();
+               
+               if (file_exists($workDir)){
+                       rmDirectory($workDir);
+                       return true;
+               } else {
+                       return false;
+               }
+       }
+       /**
+        * すべてのユーザ用の作業用ディレクトリに対して、一定期間以上経過したディレクトリを削除
+        *
+        * @return                      なし
+        */
+       function cleanupAllSessionWorkDir()
+       {
+               $expireTime = self::WORK_DIR_EXPIRE_HOUR * 60 * 60;                     // 作業ディレクトリ自動削除時間
+               
+               // 一般ユーザ用の作業ディレクトリを取得
+               $usersDir = $this->gEnv->getUserWorkDirPath();
+               
+               // サブディレクトリの更新日時をチェック
+               if (is_dir($usersDir)){
+                       $dir = dir($usersDir);
+                       while (($file = $dir->read()) !== false){
+                               $filePath = $usersDir . '/' . $file;
+                               // ディレクトリかどうかチェック
+                               if (strncmp($file, '.', 1) != 0 && $file != '..' && is_dir($filePath)){
+                                       if (time() - filemtime($filePath) >= $expireTime){
+                                               rmDirectory($filePath);
+                                       }
+                               }
+                       }
+                       $dir->close();
+               }
+       }
+}
+?>