blob: 327c8d3d178ef277b1d7aa8c9a5567bb904e9431 [file] [log] [blame]
<?php
/*
* hores
* Copyright (c) 2023 Adrià Vilanova Martínez
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this program.
* If not, see http://www.gnu.org/licenses/.
*/
if (php_sapi_name() != "cli") {
exit();
}
// Classes autoload
spl_autoload_register(function($className) {
if ($className == "lbuchs\WebAuthn\Binary\ByteBuffer") include_once(__DIR__."/lib/WebAuthn/Binary/ByteBuffer.php");
else include_once(__DIR__."/inc/".$className.".php");
});
require_once("config.php");
$con = @mysqli_connect($conf["db"]["server"], $conf["db"]["user"], $conf["db"]["password"], $conf["db"]["database"]) or die("There was an error connecting to the database.");
mysqli_set_charset($con, "utf8mb4");
echo "Benvingut a l'instal·lador de l'aplicació 'Hores'.\n\n";
echo "Entra els detalls del primer usuari administrador de l'aplicació:\n";
echo "Nom d'usuari: ";
$username = mysqli_real_escape_string($con, trim(fgets(STDIN)));
echo "Contrasenya: ";
system('stty -echo');
$pw = mysqli_real_escape_string($con, password_hash(trim(fgets(STDIN)), PASSWORD_DEFAULT));
system('stty echo');
echo "\n";
echo "Nom complet: ";
$name = mysqli_real_escape_string($con, trim(fgets(STDIN)));
echo "DNI: ";
$dni = mysqli_real_escape_string($con, trim(fgets(STDIN)));
echo "Correu electrònic: ";
$email = mysqli_real_escape_string($con, trim(fgets(STDIN)));
echo "\nGenerant taules de la base de dades:\n";
$sql = [];
$sql["people"] = "CREATE TABLE people (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL UNIQUE,
type INT,
name VARCHAR(255) NOT NULL,
dni VARCHAR(10) NOT NULL,
email VARCHAR(255) NOT NULL,
category INT DEFAULT -1,
INDEX(category),
secondfactor INT DEFAULT 0
)";
$sql["companies"] = "CREATE TABLE companies (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(100) NOT NULL UNIQUE,
cif VARCHAR(100) NOT NULL
)";
$sql["workers"] = "CREATE TABLE workers (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
person INT NOT NULL,
INDEX(person),
company INT NOT NULL,
INDEX(company)
)";
$sql["workhistory"] = "CREATE TABLE workhistory (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
worker INT NOT NULL,
INDEX(worker),
day INT NOT NULL,
status INT NOT NULL
)";
$sql["categories"] = "CREATE TABLE categories (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(100) NOT NULL UNIQUE,
parent INT NOT NULL,
emails TEXT
)";
$sql["calendars"] = "CREATE TABLE calendars (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
category INT NOT NULL,
begins INT NOT NULL,
ends INT NOT NULL,
details TEXT NOT NULL
)";
$sql["scheduletemplates"] = "CREATE TABLE scheduletemplates (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(50) NOT NULL UNIQUE,
begins INT NOT NULL,
ends INT NOT NULL
)";
$sql["scheduletemplatesdays"] = "CREATE TABLE scheduletemplatesdays (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
template INT NOT NULL,
INDEX(template),
day INT NOT NULL,
typeday INT NOT NULL,
beginswork INT NOT NULL,
endswork INT NOT NULL,
beginsbreakfast INT,
endsbreakfast INT,
beginslunch INT,
endslunch INT
)";
$sql["schedules"] = "CREATE TABLE schedules (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
worker INT NOT NULL,
INDEX(worker),
begins INT NOT NULL,
ends INT NOT NULL,
active INT NOT NULL
)";
$sql["schedulesdays"] = "CREATE TABLE schedulesdays (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
schedule INT NOT NULL,
INDEX(schedule),
day INT NOT NULL,
typeday INT NOT NULL,
beginswork INT NOT NULL,
endswork INT NOT NULL,
beginsbreakfast INT,
endsbreakfast INT,
beginslunch INT,
endslunch INT
)";
$sql["typesincidents"] = "CREATE TABLE typesincidents (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(100) NOT NULL UNIQUE,
present INT NOT NULL,
paid INT NOT NULL,
workerfill INT NOT NULL DEFAULT 0,
notifies INT NOT NULL DEFAULT 0,
autovalidates INT NOT NULL DEFAULT 0,
hidden INT NOT NULL DEFAULT 0
)";
$sql["incidents"] = "CREATE TABLE incidents (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
worker INT,
INDEX(worker),
creator INT,
updatedby INT DEFAULT -1,
confirmedby INT DEFAULT -1,
type INT NOT NULL,
day INT NOT NULL,
INDEX(day),
begins INT NOT NULL,
ends INT NOT NULL,
details TEXT,
workerdetails TEXT DEFAULT NULL,
attachments TEXT,
verified INT DEFAULT 0,
invalidated INT DEFAULT 0,
INDEX(invalidated),
workervalidated INT DEFAULT 0,
INDEX(workervalidated),
workervalidation TEXT
)";
/*$sql["recurringincidents"] = "CREATE TABLE recurringincidents (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
worker INT,
creator INT,
type INT NOT NULL,
firstday INT NOT NULL,
lastday INT NOT NULL,
typedays TEXT,
begins INT NOT NULL,
ends INT NOT NULL,
details TEXT
)";*/ // NOTE: No longer needed
$sql["records"] = "CREATE TABLE records (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
worker INT NOT NULL,
INDEX(worker),
day INT NOT NULL,
INDEX(day),
created INT NOT NULL,
creator INT NOT NULL,
beginswork INT NOT NULL,
endswork INT NOT NULL,
beginsbreakfast INT NOT NULL,
endsbreakfast INT NOT NULL,
beginslunch INT NOT NULL,
endslunch INT NOT NULL,
invalidated INT DEFAULT 0,
INDEX(invalidated),
invalidatedby INT DEFAULT -1,
workervalidated INT DEFAULT 0,
INDEX(workervalidated),
workervalidation TEXT
)";
$sql["logs"] = "CREATE TABLE logs (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
realtime INT NOT NULL,
day INT NOT NULL,
logdetails TEXT,
executedby INT DEFAULT -1
)";
$sql["recovery"] = "CREATE TABLE recovery (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
user INT NOT NULL,
token VARCHAR(64) NOT NULL UNIQUE,
timecreated INT NOT NULL,
expires INT NOT NULL,
used INT DEFAULT 0
)";
$sql["help"] = "CREATE TABLE help (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
place INT NOT NULL UNIQUE,
url VARCHAR(256) NOT NULL
)";
$sql["totp"] = "CREATE TABLE totp (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
person INT NOT NULL UNIQUE,
secret VARCHAR(256) NOT NULL
)";
$sql["securitykeys"] = "CREATE TABLE securitykeys (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
person INT NOT NULL,
name VARCHAR(100),
credentialid VARBINARY(500),
credentialpublickey TEXT,
added INT NOT NULL,
lastused INT
)";
$sql["signinattempts"] = "CREATE TABLE signinattempts (
username VARCHAR(100) NOT NULL,
KEY username (username),
remoteip VARBINARY(16) NOT NULL,
KEY remoteip (remoteip),
remoteipblock VARBINARY(16) NOT NULL,
KEY remoteipblock (remoteipblock),
signinattempttime DATETIME NOT NULL,
KEY signinattempttime (signinattempttime)
)";
foreach ($sql as $table => $sentence) {
if (mysqli_query($con, $sentence)) {
echo "Taula ".$table." creada satisfactòriament.\n";
} else {
die("Hi ha hagut un error creant la taula ".$table.": ".mysqli_error($con)."\n");
}
}
echo "\n";
if (mysqli_query($con, "INSERT INTO people (username, password, type, name, dni, email) VALUES ('".$username."', '".$pw."', 0, '".$name."', '".$dni."', '".$email."')")) {
echo "Afegit el primer usuari satisfactòriament.\n\n";
echo "Instal·lació completada correctament.\n";
} else {
echo "Hi ha hagut un error afegint el primer usuari.\n";
}