lepisi-pengumuman/App/Models/ApiModel.php

204 lines
5.1 KiB
PHP

<?php
namespace App\Models;
use App\Config;
class ApiModel
{
protected static $conn = null;
protected static function connectDB()
{
try {
if (!self::$conn) {
$dsn = 'mysql:host='.Config::DB_HOST.';dbname='.Config::DB_DB;
self::$conn = new \PDO($dsn, Config::DB_UNAME, Config::DB_PWD);
self::$conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
}
return self::$conn;
} catch (PDOException $e) {
throw new \Exception($e->getMessage, 444);
}
}
public static function fetch($table, $conditions = [])
{
$sql = "SELECT * FROM {$table}";
if ($conditions) {
$sql .= " WHERE";
foreach ($conditions as $condition) {
$keys[] = $condition[0];
$operators[] = $condition[1];
$values[] = $condition[2];
}
$x = 0;
foreach ($keys as $key) {
$sql .= " $key $operators[$x] ?";
$x++;
if ($x < count($keys)) {
$sql .= " AND";
}
}
}
try {
$con = static::connectDB();
$query = $con->prepare($sql);
if (count($conditions)) {
$x = 1;
foreach ($values as $value) {
$query->bindValue($x, $value);
$x++;
}
}
$query->execute();
return $query->fetch(\PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo "Error: $e->getMessage()";
}
}
public static function showAll($table, $conditions = [])
{
$sql = "SELECT * FROM {$table}";
if ($conditions) {
$sql .= " WHERE";
foreach ($conditions as $condition) {
$keys[] = $condition[0];
$operators[] = $condition[1];
$values[] = $condition[2];
}
$x = 0;
foreach ($keys as $key) {
$sql .= " $key $operators[$x] ?";
$x++;
if ($x < count($keys)) {
$sql .= " AND";
}
}
}
try {
$con = static::connectDB();
$query = $con->prepare($sql);
if (count($conditions)) {
$x = 1;
foreach ($values as $value) {
$query->bindValue($x, $value);
$x++;
}
}
$query->execute();
return $query->fetchAll(\PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo "Error: $e->getMessage()";
}
}
public static function update($table, $args)
{
$sql = "UPDATE {$table} SET";
$id = $args['id'];
unset($args['id']);
$keys = array_keys($args);
$fields = [];
foreach ($keys as $key) {
$fields[] = $key . " = ?";
}
if (count($fields) > 1) {
$fields = implode(', ', $fields);
} else {
$fields = implode('', $fields);
}
try {
$con = static::connectDB();
$sql .= " {$fields} WHERE id = ?";
$query = $con->prepare($sql);
$x = 1;
foreach ($args as $value) {
$query->bindValue($x, $value);
$x++;
}
$query->bindValue($x, $id);
$query->execute();
return self::showAll($table, [
['id', '=', $id]
]);
} catch (PDOException $e) {
echo "Error: $e->getMessage()";
}
}
public static function entry($table, $args)
{
$sql = "INSERT INTO {$table}";
$fields = array_keys($args);
$fields = implode(", ", $fields);
$values = "";
for ($i=1; $i <= count($args); $i++) {
$values .= "?";
if ($i < count($args)) $values .= ", ";
}
$sql .= " ({$fields}) VALUES ({$values})";
try {
$con = static::connectDB();
$query = $con->prepare($sql);
$x = 1;
foreach ($args as $value) {
$query->bindValue($x, $value);
$x++;
}
$query->execute();
$last_entry = "SELECT LAST_INSERT_ID()";
$last_entry = $con->prepare($last_entry);
$last_entry->execute();
return $last_entry->fetch();
} catch (PDOException $e) {
echo "Error: $e->getMessage()";
}
}
public static function remove($table, $id)
{
$sql = "UPDATE {$table} SET `status` = 0 WHERE `id` = ?";
try {
$con = static::connectDB();
$query = $con->prepare($sql);
$query->bindValue(1, $id);
$query->execute();
return self::showAll($table, [
['id', '=', $id]
]);
} catch (PDOException $e) {
echo "Error: $e->getMessage()";
}
}
}