<?php
	require_once("initPDO.php");
	require_once("createUserTable.php");

	class User
	{
		protected $props;

		public function __get($prop) {
			return $this->props[$prop];
		}

		public function __set($prop, $val) {
			$this->props[$prop] = $val;
		}

		public static function executeRequest($req) {
			global $pdo;
			$request = $pdo->prepare($req);
			if (!$request) {
				myDump(debug_backtrace());
				die('Error while doing request ' . $sqlRequest);
			}

			$request->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, get_called_class());
			$request->execute();

			return $request->fetchAll();
		}

		public static function getAllUsers() {
			return static::executeRequest('select * from `users`');
		}

		// instance-side method to render a User object to HTML
		public function toHtml() {
			// print_r($this);
			echo "<tr>"
				. "<td>". $this->id . "</td>"
				. "<td>". $this->name . "</td>"
				. "<td>" . $this->email . "</td></tr>";
		}

		// class-side method to render an array of users as an HTML table
		public static function showUsersAsTable($users) {
			echo '<table><thead>
					<tr><th>Id</th><th>Nom</th><th>Email</th></tr></thead><tbody>';
			foreach($users as $u) {
				print_r($u);
				$u->toHtml();
			}
			echo '</tbody></table>';
		}

		public static function showAllUsersAsTable() {
			static::showUsersAsTable(static::getAllUsers());
		}
	}
?>

<!doctype html>
 <html lang="fr">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
	<style>
	table {
		border-top: 1px solid black;
		border-bottom: 1px solid black;
	}

	td {
		text-align: center;
		padding-left: 2em;
		padding-right: 2em;
	}
	</style>

</head>
<body>

<h1>Users</h1>
<?php
	User::showAllUsersAsTable();
?>

</body>
</html>
