mirror of
				https://github.com/grocy/grocy.git
				synced 2025-10-31 02:36:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| class ERequirementNotMet extends Exception { }
 | |
| 
 | |
| const REQUIRED_PHP_EXTENSIONS = array('fileinfo', 'pdo_sqlite', 'gd');
 | |
| const REQUIRED_SQLITE_VERSION = "3.8.3";
 | |
| 
 | |
| class PrerequisiteChecker
 | |
| {
 | |
|     public function checkRequirements()
 | |
|     {
 | |
|         self::checkForConfigFile();
 | |
|         self::checkForConfigDistFile();
 | |
|         self::checkForComposer();
 | |
|         self::checkForPhpExtensions();
 | |
|         self::checkForSqliteVersion();
 | |
|     }
 | |
|     
 | |
|     
 | |
|     private function checkForConfigFile()
 | |
|     {
 | |
|         if (!file_exists(GROCY_DATAPATH . '/config.php'))
 | |
|         {
 | |
|             throw new ERequirementNotMet('config.php in data directory (' . GROCY_DATAPATH . ') not found. Have you copied config-dist.php to the data directory and renamed it to config.php?');
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private function checkForConfigDistFile()
 | |
|     {
 | |
|         if (!file_exists(__DIR__ . '/../config-dist.php'))
 | |
|         {
 | |
|             throw new ERequirementNotMet('config-dist.php not found. Please do not remove this file.');
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private function checkForComposer()
 | |
|     {
 | |
|         if (!file_exists(__DIR__ . '/../vendor/autoload.php'))
 | |
|         {
 | |
|             throw new ERequirementNotMet('/vendor/autoload.php not found. Have you run Composer?');
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private function checkForPhpExtensions()
 | |
|     {
 | |
|         $loadedExtensions = get_loaded_extensions();
 | |
|         foreach (REQUIRED_PHP_EXTENSIONS as $extension)
 | |
|         {
 | |
|             if (!in_array($extension, $loadedExtensions))
 | |
|             {
 | |
|                 throw new ERequirementNotMet("PHP module '{$extension}' not installed, but required.");
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     private function checkForSqliteVersion()
 | |
|     {
 | |
|         $sqliteVersion = self::getSqlVersionAsString();
 | |
|         if (version_compare($sqliteVersion, REQUIRED_SQLITE_VERSION, '<'))
 | |
|         {
 | |
|             throw new ERequirementNotMet('SQLite ' . REQUIRED_SQLITE_VERSION . ' is required, however you are running ' . $sqliteVersion);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|    private function getSqlVersionAsString()
 | |
|    {
 | |
| 	$dbh = new PDO('sqlite::memory:');
 | |
| 	return $dbh->query('select sqlite_version()')->fetch()[0];
 | |
|    }
 | |
| 
 | |
| }
 |