diff --git a/.gitignore b/.gitignore index 3323b34..ece1ba6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .env .DS_Store +app/database.db diff --git a/app/modules/Database.php b/app/modules/Database.php index ffaf4eb..4f62d20 100755 --- a/app/modules/Database.php +++ b/app/modules/Database.php @@ -20,8 +20,12 @@ class Database PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]; + // Check to see if the database exists; if not, we have to build the tables + $new = !file_exists($path); + try { self::$c = new PDO("sqlite:$path", null, null, $opts); + if ($new) { self::build(); } } catch (PDOException $e) { throw $e; } @@ -50,10 +54,82 @@ class Database return $selectQuery; } - public function count(string $from, string $condition = ''): mixed + public static function count(string $from, string $condition = ''): mixed { $query = "SELECT COUNT(*) FROM $from"; if (!empty($condition)) { $query .= " $condition"; } return self::$c->query($query)->fetch(); } + + private static function build() + { + // Create the users table + self::$c->exec("CREATE TABLE users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT NOT NULL, + password TEXT NOT NULL, + email TEXT NOT NULL, + title TEXT NOT NULL DEFAULT 'Newbie', + gender INTEGER NOT NULL DEFAULT 0, + badges TEXT NOT NULL DEFAULT '', + blurb TEXT NOT NULL DEFAULT '', + status TEXT NOT NULL DEFAULT '', + bday DATE NOT NULL DEFAULT '0000-00-00', + posts INTEGER NOT NULL DEFAULT 0, + avatar TEXT NOT NULL DEFAULT '', + reputation INTEGER NOT NULL DEFAULT 0, + mlevel INTEGER NOT NULL DEFAULT 0, + joindate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + );"); + + // Create the articles table + self::$c->exec("CREATE TABLE articles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + articleName TEXT NOT NULL, + articleCover TEXT NOT NULL, + articleAuthor INTEGER NOT NULL DEFAULT 1, + articleContent TEXT NOT NULL, + articleDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + articleComments INTEGER NOT NULL DEFAULT 0, + articleDescription TEXT NOT NULL DEFAULT '' + );"); + + // Create the article comments table + self::$c->exec("CREATE TABLE articlecomments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + commentAuthor INTEGER NOT NULL, + commentContent TEXT NOT NULL, + commentDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + articleID INTEGER NOT NULL + );"); + + // Create the episode comments table + self::$c->exec("CREATE TABLE episodecomments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + commentAuthor INTEGER NOT NULL, + commentContent TEXT NOT NULL, + commentDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + showID INTEGER NOT NULL + );"); + + // Create the projects table + self::$c->exec("CREATE TABLE projects ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + type TEXT NOT NULL, + desc TEXT NOT NULL, + title TEXT NOT NULL, + cover TEXT NOT NULL, + lastUpdate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + );"); + + // Create the shows table + self::$c->exec("CREATE TABLE shows ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + thumbnail TEXT NOT NULL, + desc TEXT NOT NULL, + showid INTEGER NOT NULL, + lastUpdate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + );"); + } }