Remove bootstrap.php. Load everything from src/
This commit is contained in:
		
							parent
							
								
									f9aa2c7cb7
								
							
						
					
					
						commit
						7a85c7f9dd
					
				| @ -3,8 +3,7 @@ | ||||
| 
 | ||||
| define('APP_ROOT', dirname(dirname(__FILE__))); | ||||
| 
 | ||||
| define('CLASSES_DIR', APP_ROOT . '/src/classes'); | ||||
| define('LIB_DIR', APP_ROOT . '/src/lib'); | ||||
| define('SRC_DIR', APP_ROOT . '/src'); | ||||
| define('STORAGE_DIR', APP_ROOT . '/storage'); | ||||
| define('TEMPLATES_DIR', APP_ROOT . '/templates'); | ||||
| 
 | ||||
| @ -12,15 +11,25 @@ define('TICKS_DIR', STORAGE_DIR . '/ticks'); | ||||
| define('DATA_DIR', STORAGE_DIR . '/db'); | ||||
| define('DB_FILE', DATA_DIR . '/tkr.sqlite'); | ||||
| 
 | ||||
| $include_dirs = [ | ||||
|     LIB_DIR, | ||||
|     CLASSES_DIR, | ||||
| ]; | ||||
| // Defining this in the index instead of lib/util.php
 | ||||
| // to avoid chicken-and-egg issues with including it
 | ||||
| function recursive_glob(string $pattern, string $directory): array { | ||||
|     $files = []; | ||||
|     $iterator = new RecursiveIteratorIterator( | ||||
|         new RecursiveDirectoryIterator($directory) | ||||
|     ); | ||||
| 
 | ||||
| foreach ($include_dirs as $include_dir){ | ||||
|     foreach (glob($include_dir . '/*.php') as $file) { | ||||
|         require_once $file; | ||||
|     foreach ($iterator as $file) { | ||||
|         if ($file->isFile() && fnmatch($pattern, $file->getFilename())) { | ||||
|             $files[] = $file->getPathname(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return $files; | ||||
| } | ||||
| 
 | ||||
| foreach (recursive_glob('*.php', SRC_DIR) as $file) { | ||||
|     require_once $file; | ||||
| } | ||||
| 
 | ||||
| confirm_setup(); | ||||
|  | ||||
| @ -1,10 +1,4 @@ | ||||
| <?php | ||||
| #require_once __DIR__ . '/../bootstrap.php';
 | ||||
| 
 | ||||
| #confirm_setup();
 | ||||
| 
 | ||||
| // Made this a class so it could be more obvious where config settings are coming from.
 | ||||
| // Felt too much like magic constants in other files before.
 | ||||
| class User { | ||||
|     // properties
 | ||||
|     public string $username; | ||||
| @ -1,87 +0,0 @@ | ||||
| <?php | ||||
| 
 | ||||
| #define('APP_ROOT', dirname(__FILE__));
 | ||||
| #define('CLASSES_DIR', APP_ROOT . '/classes');
 | ||||
| #define('LIB_DIR', APP_ROOT . '/lib');
 | ||||
| #define('TICKS_DIR', APP_ROOT . '/storage/ticks');
 | ||||
| #define('DATA_DIR', APP_ROOT . '/storage/db');
 | ||||
| #define('DB_FILE', DATA_DIR . '/tkr.sqlite');
 | ||||
| 
 | ||||
| function verify_data_dir(string $dir, bool $allow_create = false): void { | ||||
|     if (!is_dir($dir)) { | ||||
|         if ($allow_create) { | ||||
|             if (!mkdir($dir, 0770, true)) { | ||||
|                 http_response_code(500); | ||||
|                 echo "Failed to create required directory: $dir"; | ||||
|                 exit; | ||||
|             } | ||||
|         } else { | ||||
|             http_response_code(500); | ||||
|             echo "Required directory does not exist: $dir"; | ||||
|             exit; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (!is_writable($dir)) { | ||||
|         http_response_code(500); | ||||
|         echo "Directory is not writable: $dir"; | ||||
|         exit; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Verify that setup is complete (i.e. the databse is populated).
 | ||||
| // Redirect to setup.php if it isn't.
 | ||||
| function confirm_setup(): void { | ||||
|     $db = get_db(); | ||||
| 
 | ||||
|     // Ensure required tables exist
 | ||||
|     $db->exec("CREATE TABLE IF NOT EXISTS user (
 | ||||
|         id INTEGER PRIMARY KEY AUTOINCREMENT, | ||||
|         username TEXT NOT NULL, | ||||
|         display_name TEXT NOT NULL, | ||||
|         password_hash TEXT NOT NULL, | ||||
|         about TEXT NULL, | ||||
|         website TEXT NULL, | ||||
|         mood TEXT NULL | ||||
|     )");
 | ||||
| 
 | ||||
|     $db->exec("CREATE TABLE IF NOT EXISTS settings (
 | ||||
|         id INTEGER PRIMARY KEY, | ||||
|         site_title TEXT NOT NULL, | ||||
|         site_description TEXT NULL, | ||||
|         base_path TEXT NOT NULL, | ||||
|         items_per_page INTEGER NOT NULL | ||||
|     )");
 | ||||
| 
 | ||||
|     // See if there's any data in the tables
 | ||||
|     $user_count = (int) $db->query("SELECT COUNT(*) FROM user")->fetchColumn(); | ||||
|     $settings_count = (int) $db->query("SELECT COUNT(*) FROM settings")->fetchColumn(); | ||||
| 
 | ||||
|     // If either table has no records and we aren't on setup.php, redirect to setup.php
 | ||||
|     if ($user_count === 0 || $settings_count === 0){ | ||||
|         if (basename($_SERVER['PHP_SELF']) !== 'setup.php'){ | ||||
|             header('Location: setup.php'); | ||||
|             exit; | ||||
|         } | ||||
|     } else { | ||||
|         // If setup is complete and we are on setup.php, redirect to index.php.
 | ||||
|         if (basename($_SERVER['PHP_SELF']) === 'setup.php'){ | ||||
|             header('Location: index.php'); | ||||
|             exit; | ||||
|         } | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| function get_db(): PDO { | ||||
|     verify_data_dir(DATA_DIR, true); | ||||
| 
 | ||||
|     try { | ||||
|         $db = new PDO("sqlite:" . DB_FILE); | ||||
|         $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | ||||
|         $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); | ||||
|     } catch (PDOException $e) { | ||||
|         die("Database connection failed: " . $e->getMessage()); | ||||
|     } | ||||
|      | ||||
|     return $db; | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user