Summary Files Commits Branches @commit @diff @stats
path: root / src
diff options
context:
space:
mode:
Commitfb2645d444729d656a209ef586a13fb569429280 (patch)
Author
 Kamen Mladenov <kamen.d.mladenov@protonmail.com>
2021-04-03 18:27:33 +0300
Committer
 GitHub <noreply@github.com>
2021-04-03 18:27:33 +0300
Files91daafcdb8af6cd41551bbf442f4be77dee575a4 /src
devrix-job-board-1.0.tar
devrix-job-board-1.0.tar.gz
devrix-job-board-1.0.zip
Parent67bc860ea4b3db5033a42038ab86d0df955c9295 (diff)
Parent3b0cbc90e3046a8bb979c2b9a17fae5a94bb2707 (diff)
Merge pull request #3 from Syndamia/dev v1.0
Exam version finished
diff --git a/src/controllers/BaseController.php b/src/controllers/BaseController.php
index 2c2a647..412cf25 100644
--- a/src/controllers/BaseController.php
+++ b/src/controllers/BaseController.php
@@ -1,14 +1,18 @@
<?php
class BaseController {
+ /**
+ * Calls the get, post, put or delete static methods, depending on the server request method ($_SERVER['REQUEST_METHOD'])
+ * **By default** all requests that are not POST, PUT or DELETE execute the GET request method
+ */
public static function invoke() {
- switch ($_SERVER["REQUEST_METHOD"]) {
- case "POST":
+ switch ($_SERVER['REQUEST_METHOD']) {
+ case 'POST':
static::post();
break;
- case "PUT":
+ case 'PUT':
static::put();
break;
- case "DELETE":
+ case 'DELETE':
static::delete();
break;
default:
@@ -18,19 +22,18 @@ class BaseController {
}
protected static function get() {
- echo "GET method not implemented!";
+ echo 'GET method not implemented!';
}
protected static function post() {
-
- echo "POST method not implemented!";
+ echo 'POST method not implemented!';
}
protected static function put() {
- echo "PUT method not implemented!";
+ echo 'PUT method not implemented!';
}
protected static function delete() {
- echo "DELETE method not implemented!";
+ echo 'DELETE method not implemented!';
}
}
diff --git a/src/controllers/CreateOfferController.php b/src/controllers/CreateOfferController.php
index a223463..bb6015b 100644
--- a/src/controllers/CreateOfferController.php
+++ b/src/controllers/CreateOfferController.php
@@ -7,7 +7,7 @@ class CreateOfferController extends BaseController {
public static function get() {
self::$companies = Company::getAllFromDB();
- include 'views/create-offer.php';
+ include('views/create-offer.php');
}
public static function post() {
@@ -15,7 +15,7 @@ class CreateOfferController extends BaseController {
JobOffer::insertIntoDB($newJobOffer);
// Redirect to landing page
- header("Location: /", TRUE, 301);
+ header('Location: /', TRUE, 301);
exit();
}
}
diff --git a/src/controllers/DashboardController.php b/src/controllers/DashboardController.php
index 548f60b..59c1090 100644
--- a/src/controllers/DashboardController.php
+++ b/src/controllers/DashboardController.php
@@ -12,18 +12,21 @@ class DashboardController extends BaseController {
foreach(Company::getAllFromDB() as $company) {
self::$companies[$company->id] = $company->name;
}
- include "views/dashboard.php";
+ include('views/dashboard.php');
}
public static function post() {
+ // Forms can only send POST or GET requests.
+ // EditOfferController doesn't have it's own URI, so we can't send a request.
+ // We also can't just invoke it, because that means manually changing the server's request method.
switch($_POST['_method']) {
- case "get":
+ case 'get':
EditOfferController::get();
break;
- case "put":
+ case 'put':
EditOfferController::put();
break;
- case "delete":
+ case 'delete':
EditOfferController::delete();
break;
}
diff --git a/src/controllers/DashboardLoginController.php b/src/controllers/DashboardLoginController.php
index fe2009b..c6ac070 100644
--- a/src/controllers/DashboardLoginController.php
+++ b/src/controllers/DashboardLoginController.php
@@ -6,20 +6,23 @@ class DashboardLoginController extends BaseController {
private static $message;
public static function get() {
- include "views/dashboard-login.php";
+ include('views/dashboard-login.php');
}
public static function post() {
+ // The dashboard(controller) doesn't have it's own URI (and all requests are sent in this controller), so
+ // we can't send a request directly to dashboard.
+ // This does compromise security, but for now it will have to do.
if (isset($_POST['_method'])) {
DashboardController::invoke();
}
- else if ($_POST['username'] == "admin" && $_POST['password'] == "admin") {
+ else if ($_POST['username'] == 'admin' && $_POST['password'] == 'admin') {
// Load normal dashboard
DashboardController::get();
}
else {
- self::$message = "Bad credentials!";
- include "views/dashboard-login.php";
+ self::$message = 'Bad credentials!';
+ include('views/dashboard-login.php');
}
}
}
diff --git a/src/controllers/EditOfferController.php b/src/controllers/EditOfferController.php
index ae49c5b..dc9a753 100644
--- a/src/controllers/EditOfferController.php
+++ b/src/controllers/EditOfferController.php
@@ -11,7 +11,7 @@ class EditOfferController extends BaseController {
public static function get() {
self::$job = JobOffer::getFromDBById($_POST['jobId']);
self::$companies = Company::getAllFromDB();
- include "views/edit-offer.php";
+ include('views/edit-offer.php');
}
public static function put() {
diff --git a/src/controllers/LandingController.php b/src/controllers/LandingController.php
index ffa8644..9e81751 100644
--- a/src/controllers/LandingController.php
+++ b/src/controllers/LandingController.php
@@ -1,7 +1,7 @@
<?php
-include_once("models/JobOffer.php");
+include_once('models/JobOffer.php');
include_once('models/Company.php');
-include_once("controllers/BaseController.php");
+include_once('controllers/BaseController.php');
class LandingController extends BaseController {
private static $companies = array();
@@ -11,6 +11,6 @@ class LandingController extends BaseController {
foreach(Company::getAllFromDB() as $company) {
self::$companies[$company->id] = $company->name;
}
- include "views/landing.php";
+ include('views/landing.php');
}
}
diff --git a/src/index.php b/src/index.php
index 8b45dea..be262cd 100644
--- a/src/index.php
+++ b/src/index.php
@@ -30,9 +30,9 @@
</nav>
<?php
- include_once("controllers/LandingController.php");
- include_once("controllers/CreateOfferController.php");
- include_once("controllers/DashboardLoginController.php");
+ include_once('controllers/LandingController.php');
+ include_once('controllers/CreateOfferController.php');
+ include_once('controllers/DashboardLoginController.php');
/* The landing page practically acts as our page router.
* All request get redirected to here (look at the devrix-job-board.conf)
@@ -42,16 +42,16 @@
$request = $_SERVER['REQUEST_URI'];
switch ($request) {
- case "":
- case "/":
+ case '':
+ case '/':
LandingController::invoke();
break;
- case "/CreateOffer":
- case "/CreateOffer/":
+ case '/CreateOffer':
+ case '/CreateOffer/':
CreateOfferController::invoke();
break;
- case "/Dashboard":
- case "/Dashboard/":
+ case '/Dashboard':
+ case '/Dashboard/':
DashboardLoginController::invoke();
break;
default:
diff --git a/src/models/Company.php b/src/models/Company.php
index 1dfb05e..58b1734 100644
--- a/src/models/Company.php
+++ b/src/models/Company.php
@@ -1,5 +1,5 @@
<?php
-include_once("models/DBModel.php");
+include_once('models/DBModel.php');
class Company extends DBModel {
public string $name;
@@ -12,13 +12,20 @@ class Company extends DBModel {
* Everything from here is static functionality
*/
- public const TABLE_NAME = "companies";
+ public const TABLE_NAME = 'companies';
static function __constructStatic() {
$columns = array(
- "name " . DB::STRING_TYPE,
+ 'name ' . DB::STRING_TYPE,
);
self::$DB->createTable(self::TABLE_NAME, $columns);
+
+ // Since there is no real way to add companies, this serves as the only official way.
+ if (sizeof(self::getAllFromDB()) == 0) {
+ self::insertIntoDB(new Company("MegaCorp"));
+ self::insertIntoDB(new Company("Cool INC."));
+ self::insertIntoDB(new Company("Company Awesome Ltd."));
+ }
}
/* Create */
diff --git a/src/models/DB.php b/src/models/DB.php
index 8174831..f424334 100644
--- a/src/models/DB.php
+++ b/src/models/DB.php
@@ -3,37 +3,39 @@
* The model that has the database functionality. DO NOT instantiate this class! If you need an instance, extend the DBModel class!
*/
class DB {
- private static $servername = "localhost";
- private static $username = "root";
- private static $password = "password";
- private static $dbname = "devrix_job_board";
+ private static $servername = 'localhost';
+ private static $username = 'root';
+ private static $password = 'password';
+ private static $dbname = 'devrix_job_board';
- public const STRING_TYPE = "VARCHAR(100)";
- public const FLOAT_TYPE = "DOUBLE(16,4)";
- public const INTEGER_TYPE = "INT";
+ public const STRING_TYPE = 'VARCHAR(100)';
+ public const FLOAT_TYPE = 'DOUBLE(16,4)';
+ public const INTEGER_TYPE = 'INT';
private PDO $connection;
function __construct() {
// Try to connect
try {
- $this->connection = new PDO("mysql:host=" . self::$servername, self::$username, self::$password);
+ $this->connection = new PDO('mysql:host=' . self::$servername, self::$username, self::$password);
$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
- echo "[DB Exception]: " . $e->getMessage();
+ echo '[DB Exception]: ' . $e->getMessage();
}
// Make sure the actual db exists
- $createDBQuery = "CREATE DATABASE IF NOT EXISTS " . self::$dbname . ";";
+ $createDBQuery = 'CREATE DATABASE IF NOT EXISTS ' . self::$dbname . ';';
$this->connection->exec($createDBQuery);
// Connect to the actual database
- $this->connection->exec("USE " . self::$dbname);
+ $this->connection->exec('USE ' . self::$dbname);
}
/**
+ * Generates a foreign key string from the given parameters.
+ *
* @return string
*/
static function genFK(string $currentColumn, string $foreignTable, string $foreignColumn) {
@@ -59,24 +61,26 @@ class DB {
$query = "CREATE TABLE IF NOT EXISTS {$tableName}(
id INT NOT NULL AUTO_INCREMENT, ";
+ // Create column parts of query string
foreach ($columns as $column) {
$query .= "{$column}, ";
}
- $query .= "PRIMARY KEY (id), ";
+ // Create key(s) parts of query string
+ $query .= 'PRIMARY KEY (id), ';
foreach ($foreignKeys as $fk) {
$query .= "{$fk}, ";
}
- $query = rtrim($query, ", ");
- $query .= ");";
+ $query = rtrim($query, ', ');
+ $query .= ');';
try {
$this->connection->exec($query);
}
catch (PDOException $e) {
- echo "[DB Exception]: " . $e->getMessage();
+ echo '[DB Exception]: ' . $e->getMessage();
}
}
@@ -91,23 +95,23 @@ class DB {
function insertValue(string $tableName, ...$values) {
$query = "INSERT INTO {$tableName} VALUES(NULL, ";
+ // Create the values part of the query string
foreach($values as $value) {
- if (gettype($value) == "string") {
+ // In queries, strings must be surrounded in single quotes
+ if (gettype($value) == 'string')
$query .= "'{$value}', ";
- }
- else {
+ else
$query .= "{$value}, ";
- }
}
- $query = rtrim($query, ", ");
+ $query = rtrim($query, ', ');
- $query .= ");";
+ $query .= ');';
try {
$this->connection->exec($query);
}
catch (PDOException $e) {
- echo "[DB Exception]: " . $e->getMessage();
+ echo '[DB Exception]: ' . $e->getMessage();
}
}
@@ -117,7 +121,7 @@ class DB {
* Returns the next value that has the given id.
*/
function getById(string $tableName, int $id) {
- $sth = $this->connection->prepare("SELECT * FROM `{$tableName}` WHERE id = {$id}");
+ $sth = $this->connection->prepare("SELECT * FROM {$tableName} WHERE id = {$id}");
$sth->execute();
return $sth->fetch(PDO::FETCH_OBJ);
@@ -127,7 +131,7 @@ class DB {
* Returns all values inside a table.
*/
function getAllValues(string $tableName) {
- $sth = $this->connection->prepare("SELECT * FROM `{$tableName}`");
+ $sth = $this->connection->prepare("SELECT * FROM {$tableName}");
$sth->execute();
return $sth->fetchAll(PDO::FETCH_OBJ);
@@ -145,10 +149,19 @@ class DB {
function updateById(string $tableName, int $id, ...$values) {
$query = "UPDATE {$tableName} SET ";
+ // Create the name = value part of query string
for ($i = 0; $i < sizeof($values); $i += 2) {
- $query .= "{$values[$i]} = " . (gettype($values[$i+1]) == "string" ? "'{$values[$i+1]}'" : $values[$i+1]) . ", ";
+ $query .= "{$values[$i]} = ";
+
+ // In queries, strings must be surrounded in single quotes
+ if (gettype($values[$i+1]) == 'string')
+ $query .= "'{$values[$i+1]}'";
+ else
+ $query .= $values[$i+1];
+
+ $query .= ', ';
}
- $query = rtrim($query, ", ");
+ $query = rtrim($query, ', ');
$query .= " WHERE id = {$id};";
@@ -156,7 +169,7 @@ class DB {
$this->connection->exec($query);
}
catch (PDOException $e) {
- echo "[DB Exception]: " . $e->getMessage();
+ echo '[DB Exception]: ' . $e->getMessage();
}
}
@@ -170,7 +183,7 @@ class DB {
$this->connection->exec("DELETE FROM {$tableName} WHERE id = {$id}");
}
catch (PDOException $e) {
- echo "[DB Exception]: " . $e->getMessage();
+ echo '[DB Exception]: ' . $e->getMessage();
}
}
}
diff --git a/src/models/DBModel.php b/src/models/DBModel.php
index 4e10c18..a9f931c 100644
--- a/src/models/DBModel.php
+++ b/src/models/DBModel.php
@@ -1,5 +1,5 @@
<?php
-include_once("DB.php");
+include_once('DB.php');
/**
* A class, mainly for holding the static DB class intance. You can also get your model id from here.
diff --git a/src/models/JobOffer.php b/src/models/JobOffer.php
index b86ff86..4fd7acc 100644
--- a/src/models/JobOffer.php
+++ b/src/models/JobOffer.php
@@ -1,6 +1,6 @@
<?php
-include_once("models/DBModel.php");
-include_once("models/Company.php");
+include_once('models/DBModel.php');
+include_once('models/Company.php');
/**
* Model that contains the required JobOffer properties. It also contains the request methods to the job_offers table.
@@ -22,17 +22,17 @@ class JobOffer extends DBModel {
* Everything from here is static functionality
*/
- public const TABLE_NAME = "job_offers";
+ public const TABLE_NAME = 'job_offers';
static function __constructStatic() {
$columns = array(
- "title " . DB::STRING_TYPE,
- "description " . DB::STRING_TYPE,
- "companyId " . DB::INTEGER_TYPE, // Requires a foreign key
- "salary " . DB::FLOAT_TYPE,
+ 'title ' . DB::STRING_TYPE,
+ 'description ' . DB::STRING_TYPE,
+ 'companyId ' . DB::INTEGER_TYPE, // Requires a foreign key
+ 'salary ' . DB::FLOAT_TYPE,
);
$foreignKeys = array(
- DB::genFK("companyId", Company::TABLE_NAME, "id")
+ DB::genFK('companyId', Company::TABLE_NAME, 'id')
);
self::$DB->createTable(self::TABLE_NAME, $columns, $foreignKeys);
}
@@ -77,7 +77,7 @@ class JobOffer extends DBModel {
* @param JobOffer $jb
*/
static function updateFromDB($jb) {
- self::$DB->updateById(self::TABLE_NAME, $jb->id, "title", $jb->title, "description", $jb->description, "companyId", $jb->companyId, "salary", $jb->salary);
+ self::$DB->updateById(self::TABLE_NAME, $jb->id, 'title', $jb->title, 'description', $jb->description, 'companyId', $jb->companyId, 'salary', $jb->salary);
}
/* Delete */
diff --git a/src/views/edit-offer.php b/src/views/edit-offer.php
index 992b08e..b1961d6 100644
--- a/src/views/edit-offer.php
+++ b/src/views/edit-offer.php
@@ -13,7 +13,7 @@
<?php
foreach(self::$companies as $company) {
echo "<option value=\"{$company->id}\"";
- echo (self::$job->companyId == $company->id ? "selected" : "") . ">{$company->name}</option>";
+ echo (self::$job->companyId == $company->id ? 'selected' : '') . ">{$company->name}</option>";
}
?>
</select>
diff --git a/src/views/landing.php b/src/views/landing.php
index 514e5a7..97b53f7 100644
--- a/src/views/landing.php
+++ b/src/views/landing.php
@@ -12,11 +12,6 @@
'. $job->description . '
</div>
</div>
- <div class="job-logo">
- <div class="job-logo-box">
- <img src="https://i.imgur.com/ZbILm3F.png" alt="">
- </div>
- </div>
</li>';
}
?>