62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Class ActionScheduler_Versions
 | |
|  */
 | |
| class ActionScheduler_Versions {
 | |
| 	/**
 | |
| 	 * @var ActionScheduler_Versions
 | |
| 	 */
 | |
| 	private static $instance = NULL;
 | |
| 
 | |
| 	private $versions = array();
 | |
| 
 | |
| 	public function register( $version_string, $initialization_callback ) {
 | |
| 		if ( isset($this->versions[$version_string]) ) {
 | |
| 			return FALSE;
 | |
| 		}
 | |
| 		$this->versions[$version_string] = $initialization_callback;
 | |
| 		return TRUE;
 | |
| 	}
 | |
| 
 | |
| 	public function get_versions() {
 | |
| 		return $this->versions;
 | |
| 	}
 | |
| 
 | |
| 	public function latest_version() {
 | |
| 		$keys = array_keys($this->versions);
 | |
| 		if ( empty($keys) ) {
 | |
| 			return false;
 | |
| 		}
 | |
| 		uasort( $keys, 'version_compare' );
 | |
| 		return end($keys);
 | |
| 	}
 | |
| 
 | |
| 	public function latest_version_callback() {
 | |
| 		$latest = $this->latest_version();
 | |
| 		if ( empty($latest) || !isset($this->versions[$latest]) ) {
 | |
| 			return '__return_null';
 | |
| 		}
 | |
| 		return $this->versions[$latest];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @return ActionScheduler_Versions
 | |
| 	 * @codeCoverageIgnore
 | |
| 	 */
 | |
| 	public static function instance() {
 | |
| 		if ( empty(self::$instance) ) {
 | |
| 			self::$instance = new self();
 | |
| 		}
 | |
| 		return self::$instance;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @codeCoverageIgnore
 | |
| 	 */
 | |
| 	public static function initialize_latest_version() {
 | |
| 		$self = self::instance();
 | |
| 		call_user_func($self->latest_version_callback());
 | |
| 	}
 | |
| }
 | |
|  
 |