. */ require('../conf.php'); if (isset($_GET['create_tables'])) { try { $_pdo->query("CREATE TABLE IF NOT EXISTS `".Constants::db_prefix."assignment` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `offerId` smallint(5) unsigned NOT NULL, `title` tinytext NOT NULL, `description` text NOT NULL, `hours` float NOT NULL, `price_per_hour` float NOT NULL, `VAT_percentage` float NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `offerId - title` (`offerId`,`title`(255)), KEY `offerId` (`offerId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1"); $_pdo->query("CREATE TABLE IF NOT EXISTS `".Constants::db_prefix."client` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `name` tinytext NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`(255)) ) ENGINE=InnoDB DEFAULT CHARSET=latin1"); $_pdo->query("CREATE TABLE IF NOT EXISTS `".Constants::db_prefix."contact` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `clientId` smallint(5) unsigned NOT NULL, `name` tinytext NOT NULL, `email` varchar(680) NOT NULL, `address` tinytext NOT NULL, `address_2` tinytext, `postal_code` varchar(7) NOT NULL, `city` tinytext NOT NULL, `country` tinytext NOT NULL, `language` varchar(3) NOT NULL DEFAULT 'en', PRIMARY KEY (`id`), UNIQUE KEY `clientId-name` (`clientId`,`name`(255)), KEY `clientId` (`clientId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1"); $_pdo->query("CREATE TABLE IF NOT EXISTS `".Constants::db_prefix."discount` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `offerId` smallint(5) unsigned NOT NULL, `title` tinytext NOT NULL, `description` text NOT NULL, `value` float unsigned NOT NULL, `VAT_percentage` float NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"); $_pdo->query("CREATE TABLE IF NOT EXISTS `".Constants::db_prefix."file` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `filename` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `filename` (`filename`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1"); $_pdo->query("CREATE TABLE IF NOT EXISTS `".Constants::db_prefix."offer` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `contactId` smallint(5) unsigned NOT NULL, `start_date` date NOT NULL, `end_date` date NOT NULL, `invoice_date` date NOT NULL, `accepted` tinyint(1) unsigned NOT NULL DEFAULT '0', `invoice_fileId` smallint(5) unsigned DEFAULT NULL, `payment_key` varchar(63) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `invoice_fileId` (`invoice_fileId`), KEY `contactId` (`contactId`), KEY `contactId_2` (`contactId`), KEY `invoice_fileId_2` (`invoice_fileId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1"); $_pdo->query("CREATE TABLE IF NOT EXISTS `payment` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `offerId` smallint(5) unsigned NOT NULL, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `braintree_id` varchar(36) DEFAULT NULL, `braintree_status` varchar(63) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"); $_pdo->query("CREATE TABLE IF NOT EXISTS `".Constants::db_prefix."user` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(24) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;"); $_pdo->query("ALTER TABLE `".Constants::db_prefix."assignment` ADD CONSTRAINT `assignment_ibfk_1` FOREIGN KEY (`offerId`) REFERENCES `".Constants::db_prefix."offer` (`id`)"); $_pdo->query("ALTER TABLE `".Constants::db_prefix."contact` ADD CONSTRAINT `contact_ibfk_1` FOREIGN KEY (`clientId`) REFERENCES `".Constants::db_prefix."client` (`id`)"); $_pdo->query("ALTER TABLE `".Constants::db_prefix."discount` ADD CONSTRAINT `discount_ibfk_1` FOREIGN KEY (`offerId`) REFERENCES `".Constants::db_prefix."offer` (`id`);"); $_pdo->query("ALTER TABLE `".Constants::db_prefix."offer` ADD CONSTRAINT `offer_ibfk_1` FOREIGN KEY (`invoice_fileId`) REFERENCES `".Constants::db_prefix."file` (`id`), ADD CONSTRAINT `offer_ibfk_2` FOREIGN KEY (`contactId`) REFERENCES `".Constants::db_prefix."contact` (`id`)"); $_pdo->query("CREATE UNIQUE INDEX `payment_uniq_1` ON `".Constants::db_prefix."payment` (`offerId`);"); $_pdo->query("ALTER TABLE `payment` ADD CONSTRAINT `payment_ibfk_1` FOREIGN KEY (`offerId`) REFERENCES `offer` (`id`);"); echo "Succeeded creating the database tables."; } catch (PDOException $e) { echo "Creating the database tables failed with a PDOException ({$e->getCode()}): {$e->getMessage()}
" . $e->getTraceAsString(); } } if (isset($_GET['create_folders'])) { if (!mkdir(Constants::files_folder)) { echo "Creating folder `" . Constants::files_folder . "` failed.
"; } if (!mkdir(Constants::files_folder . Constants::files_folder_trash)) { echo "Creating folder `" . Constants::files_folder_trash . "` failed.
"; } } if (isset($_GET['create_user'])) { $username = 'admin'; try { $password = user::generateRandomPassword(); $user = BusinessAdmin::createUser($_pdo, $username, $password); if ($user !== false) { echo "Created user '$username' ({$user->id}) with password '$password'."; } else { echo "Unknown error while creating the admin user."; } } catch (PDOException $e) { echo "Creating an admin user failed (does one exist already?)."; } } if (isset($_GET['password_cost'])) { $target = 1; $start = $end = 0; for ($cost = 10; $end - $start < $target; $cost++) { $start = microtime(true); user::hash('test', $cost); $end = microtime(true); } echo "Password cost suggestion: $cost.
You can set this in classes/constants.php."; } ?>

Available tools:

  1. Create database tables
  2. Create folders
  3. Create a user
  4. Finding a good password cost

When you're done, it would be the neatest to remove the /install folder (even though this whole control panel should not be accessible for the public).