183 Zeilen
		
	
	
	
		
			4,1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			183 Zeilen
		
	
	
	
		
			4,1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * This file is part of MySQLDumper released under the GNU/GPL 2 license
 | |
|  * http://www.mysqldumper.net
 | |
|  *
 | |
|  * @package         MySQLDumper
 | |
|  * @subpackage      File
 | |
|  * @version         SVN: $rev: 1207 $
 | |
|  * @author          $Author$
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Task Manager Class (Singleton)
 | |
|  *
 | |
|  * Class handles task lists
 | |
|  *
 | |
|  * @package         MySQLDumper
 | |
|  * @subpackage      TaskManager
 | |
|  */
 | |
| class Msd_TaskManager
 | |
| {
 | |
|     /**
 | |
|      * Define task types.
 | |
|      * The integer value defines the ordering in wich tasks are executed.
 | |
|      * @var int
 | |
|      */
 | |
|     const GET_CREATE_TABLE              = 100;
 | |
|     const BACKUP_TABLE_DATA             = 200;
 | |
|     const GET_ALTER_TABLE_ADD_KEYS      = 300;
 | |
| 
 | |
|     /**
 | |
|      * Instance
 | |
|      *
 | |
|      * @var Msd_TaskManager
 | |
|      */
 | |
|     private static $_instance = NULL;
 | |
| 
 | |
|     /**
 | |
|      * Task Namespace
 | |
|      * @var Zend_Session_Namespace
 | |
|      */
 | |
|     private $_session;
 | |
| 
 | |
|     private $_tasks = array();
 | |
| 
 | |
|     /**
 | |
|      * Constructor
 | |
|      *
 | |
|      * Get task list from session or init an empty list.
 | |
|      *
 | |
|      * @param string  $taskType The name of the task type
 | |
|      * @param boolean $clear    Whether to clear all tasks
 | |
|      *
 | |
|      * @return Msd_TaskManager
 | |
|      */
 | |
|     private function __construct($taskType, $clear = false)
 | |
|     {
 | |
|         $this->_session = new Zend_Session_Namespace($taskType, true);
 | |
|         if (isset($this->_session->tasks)) {
 | |
|             $this->_tasks = $this->_session->tasks;
 | |
|         }
 | |
|         if ($clear === true) {
 | |
|             $this->clearTasks();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns the task manager instance
 | |
|      *
 | |
|      * @param string  $taskType The name of the task type
 | |
|      * @param boolean $clear    Whether to clear all tasks
 | |
|      *
 | |
|      * @return Msd_TaskManager
 | |
|      */
 | |
|     public static function getInstance($taskType = 'backupTasks', $clear = false)
 | |
|     {
 | |
|         if (null == self::$_instance) {
 | |
|             self::$_instance = new self($taskType, $clear);
 | |
|         }
 | |
|         return self::$_instance;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a task
 | |
|      *
 | |
|      * @param string $type    Type of tasks
 | |
|      * @param array  $options Option array
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function addTask($type, $options = array())
 | |
|     {
 | |
|         $tasks = $this->_tasks;
 | |
|         if (empty($tasks[$type])) {
 | |
|             $tasks[$type] = array();
 | |
|         }
 | |
|         $tasks[$type][] = $options;
 | |
|         $this->_tasks = $tasks;
 | |
|         $this->_saveTasksToSession();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get tasks of given type
 | |
|      *
 | |
|      * Returns false if type is not present in task list.
 | |
|      *
 | |
|      * @param string $type
 | |
|      *
 | |
|      * @return array|false
 | |
|      */
 | |
|     public function getTasks($type = '')
 | |
|     {
 | |
|         if ($type > '') {
 | |
|             if (!isset($this->_tasks[$type])) {
 | |
|                 return false;
 | |
|             }
 | |
|             return $this->_tasks[$type];
 | |
|         }
 | |
|         return $this->_tasks;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Reset tasks array
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function clearTasks()
 | |
|     {
 | |
|         $this->_tasks = array();
 | |
|         $this->_saveTasksToSession();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Remove the first task of the given type
 | |
|      *
 | |
|      * @param string $type
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function removeActualTask($type)
 | |
|     {
 | |
|         $tasks = $this->getTasks($type);
 | |
|         print_r($tasks);
 | |
|         if ($tasks === false) {
 | |
|             return;
 | |
|         }
 | |
|         if (empty($tasks)) {
 | |
|             // no task of that type left - remove type
 | |
|             unset($this->_tasks[$type]);
 | |
|         }
 | |
|         unset($tasks[0]);
 | |
|         //rebuild index
 | |
|         sort($tasks);
 | |
|         $this->_tasks[$type] = $tasks;
 | |
|         $this->_saveTasksToSession();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Return the first task of given type or false if there is none.
 | |
|      *
 | |
|      * @param $type The type of the task to get.
 | |
|      *
 | |
|      * @return array|false
 | |
|      */
 | |
|     public function getActualTask($type)
 | |
|     {
 | |
|         $tasks = $this->getTasks($type);
 | |
|         if (isset($tasks[0])) {
 | |
|             return $tasks[0];
 | |
|         };
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Save task list to session
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     private function _saveTasksToSession()
 | |
|     {
 | |
|         $this->_session->tasks = $this->_tasks;
 | |
|     }
 | |
| }
 |