forked from Viper-7/Snippets
/
basicmvc.php
115 lines (88 loc) · 2.39 KB
/
basicmvc.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
class Config {
public static $dbhost;
public static $dbuser;
public static $dbpass;
public static $dbname;
}
class DB {
private $db;
// Singleton Methods
private static $instance;
private function __construct() { } // Don't allow new DB() from outside
public static function getInstance() {
if(!isset(self::$instance)) {
$class = __CLASS__;
self::$instance = new $class();
}
return self::$instance;
}
// End Singleton Methods
public function connect() {
if(!isset($this->db)) {
$dsn = 'mysql:dbname=' . Config::$dbname . ';host=' . Config::$dbhost;
try {
$this->db = new PDO($dsn, Config::$dbuser, Config::$dbpass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
}
public function query($sql, $args=NULL) {
$this->connect();
$stmt = $this->db->prepare($sql);
if(!empty($args)) {
$stmt->execute($args);
} else {
$stmt->execute();
}
$results = $stmt->fetchAll();
return $results;
}
}
class User {
public $ID, $Name, $Email, $Access;
const ACCESS_READ=1;
const ACCESS_WRITE=2;
const ACCESS_ADMIN=4;
public function isAdmin() {
$admin = $this->Access & User::ACCESS_ADMIN == User::ACCESS_ADMIN;
return $admin;
}
}
class UserFactory {
// Singleton Methods
private static $instance;
private function __construct() { } // Dont allow new UserFactory() from outside
public static function getInstance() {
if(!isset(self::$instance)) {
$class = __CLASS__;
self::$instance = new $class();
}
return self::$instance;
}
// End Singleton Methods
public function getUserByID($id) {
$db = DB::getInstance();
$result = $db->query("SELECT ID, Name, Email, Access FROM User WHERE ID = ?", array($id));
if(empty($result) || count($result) != 1) return FALSE; // Idiot Check - We should only have 1 user for that ID
$user = new User();
$result = $result[0];
foreach($result as $key => $value) {
$user->$key = $value;
}
return $user;
}
}
Config::$dbuser = 'db';
Config::$dbpass = 'db';
Config::$dbhost = 'localhost';
Config::$dbname = 'test';
// now pretend this is in a controller
$userfactory = UserFactory::getInstance();
$user = $userfactory->getUserByID(1);
if($user->isAdmin()) {
echo "Woot! you're an admin!";
} else {
echo "You're a pleb";
}