Robert Marshall 10 سال پیش
والد
کامیت
40db740d9d

+ 27 - 13
Controller/Member.php

@@ -1,19 +1,22 @@
 <?php
 class Member {
 	public function Index($params) {
-		return $this->Login($params);
+		if (Session::IsUserLoggedIn())
+			return $this->Manage($params);
+		else
+			return $this->Login($params);
 	}
 	
 	public function Login($params){
-		$user=Session::GetLoggedInUser();
-		if ($user->UserId!=null){
+		if (Session::IsUserLoggedIn()){
 			header("location:/member/manage");
 			return;
 		}
+		
 		if (!isset($params['email']))
 			$params['email']="";
 		
-		$error=false;
+		$errors=array();
 		
 		if (isset($params['submit_form']) && $params['email']!=""){
 			$user=new User($params['email']);
@@ -23,13 +26,12 @@ class Member {
 				return;
 			}
 			
-			$error=true;
+			$errors[]="Unable to log in. Please check your login details and try again.";
 		}
 		
 		return new View("Member/login.view",array(
-			"error"=>$error,
-			"loginEmail"=>$params['email'],
-			"hideRegister"=>isset($params['submit_form']) && $params['email']!=""
+			"errors"=>$errors,
+			"loginEmail"=>$params['email']
 		));
 	}
 	
@@ -58,8 +60,7 @@ class Member {
 		if (count($errors)>0)
 			return new View("Member/login.view",array(
 				"errors"=>$errors,
-				"registerEmail"=>$params['email'],
-				"hideLogin"=>true
+				"registerEmail"=>$params['email']
 			));
 		
 		$user=new User();
@@ -74,11 +75,24 @@ class Member {
 	}
 	
 	public function Manage($params){
-		$user=Session::GetLoggedInUser();
-		if ($user->UserId==null){
+		if (!Session::IsUserLoggedIn()){
 			header("location:/member/");
 			return;
 		}
-		return new View("Member/manage.view");
+		
+		$user=Session::GetLoggedInUser();
+		$errors=array();
+		
+		if (isset($params['submit_form']) && $params['new_password']!=""){
+			if ($params['new_password']==$params['confirm_password']){
+				$user->UserPassword=$params['new_password'];
+				$user->Save();
+				header("location:/member/manage");
+				return;
+			} else
+				$errors[]="Passwords did not match";
+		}
+		
+		return new View("Member/manage.view",array("user"=>$user,"errors"=>$errors));
 	}
 }

+ 9 - 3
Controller/Navigation/MemberNav.php

@@ -4,9 +4,15 @@ class MemberNav implements INavigationController{
 	
 	public function __construct() {
 		$this->_uri=new URI("Members","/member","/images/member.svg");
-		$this->_items=array(
-			new URI("Login/Register","login")
-		);
+		if (!Session::IsUserLoggedIn())
+			$this->_items=array(
+				new URI("Login/Register","login")
+			);
+		else
+			$this->_items=array(
+				new URI("Manage","manage"),
+				new URI("Logout","logout")
+			);
 	}
 	
 	public function GetItems() {

+ 1 - 1
DB Scripts/create_sessions.sql

@@ -2,6 +2,6 @@ CREATE TABLE `sessions` (
   `session_pkey` INT NOT NULL AUTO_INCREMENT,
   `session_id` VARCHAR(32) NOT NULL,
   `user_id` INT NULL DEFAULT 0,
-  `session_expiry` DATETIME NULL,
+  `session_expiry` INT NULL,
   PRIMARY KEY (`session_pkey`),
   UNIQUE INDEX `session_id_UNIQUE` (`session_id` ASC));

+ 1 - 1
DB Scripts/create_users.sql

@@ -2,7 +2,7 @@ CREATE TABLE `users` (
   `user_id` INT NOT NULL AUTO_INCREMENT,
   `user_email` VARCHAR(320) NULL,
   `user_password` VARCHAR(255) NULL,
-  `user_created` DATETIME NULL,
+  `user_created` INT NULL,
   `user_deleted` BIT NULL,
   PRIMARY KEY (`user_id`),
   UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC));

+ 10 - 5
Model/Session.php

@@ -1,13 +1,11 @@
 <?php
 ApplicationSettings::RegisterDefaultSetting("session", "expiry_window", "604800"); //a week
 
-class Session extends DBObjectAutoCreate {	
-	private $_expiry;
+class Session extends DBObjectAutoCreate {
 	private static $_instance,$_user;
 	
 	public function __construct($id=0) {
 		parent::__construct("sessions", "session_id", $id);
-		$this->_expiry=strtotime($this->SessionExpiry);
 	}
 	
 	public function Save() {
@@ -16,13 +14,13 @@ class Session extends DBObjectAutoCreate {
 		
 		$expiryWindow=(int)ApplicationSettings::GetSetting("session", "expiry_window");
 		$this->SessionExpiry=time()+$expiryWindow;
-		setcookie("session_id",$this->SessionId,$expiryWindow);
+		setcookie("session_id",$this->SessionId,$this->SessionExpiry,'/');
 		
 		parent::Save();
 	}
 
 	public function HasExpired(){
-		return $this->_expiry<time();
+		return $this->SessionExpiry<time();
 	}
 
 	private static function Instantiate(){
@@ -49,6 +47,12 @@ class Session extends DBObjectAutoCreate {
 		
 		self::$_instance=null;
 	}
+	
+	public static function IsUserLoggedIn() {
+		self::Instantiate();
+		$user=self::GetLoggedInUser();
+		return $user->UserId!=null;
+	}
 
 	public static function GetLoggedInUser() {
 		self::Instantiate();
@@ -62,6 +66,7 @@ class Session extends DBObjectAutoCreate {
 	}
 	
 	public static function SetLoggedInUser($user) {
+		self::Instantiate();
 		self::$_instance->UserId=$user->UserId;
 		self::$_instance->Save();
 	}

+ 0 - 6
View/Gallery/manage.view

@@ -166,12 +166,6 @@
 </div>
 <div id="tabs-content" style="margin-top:55px"> 
 	<div id="images">
-		<?php if (isset($errors) && count($errors)>0) {
-			echo '<div class="errors">The following errors occured with the image submission:<ul>';
-			foreach ($errors as $error)
-				echo '<li>',$error,'</li>';
-			echo '</ul>Please rectify them and try again.</div>';
-		} ?>
 		<h3>New Image</h3>
 		<form action="/gallery/upload/" method="post" enctype="multipart/form-data">
 			<table>

+ 3 - 1
View/Member/index.view

@@ -1 +1,3 @@
-@Title{Member Area}@
+@Title{Member Area}@
+@Body{
+}@

+ 41 - 60
View/Member/login.view

@@ -34,64 +34,45 @@
 		$loginEmail="";
 	if (!isset($registerEmail))
 		$registerEmail="";
-	if (!isset($hideLogin))
-		$hideLogin=false;
-	if (!isset($hideRegister))
-		$hideRegister=false;
-
-	if (!$hideLogin){?>
-		<div class="form">
-			<?php if (isset($error) && $error===true){?>
-				<div class="error">
-					Unable to log in. Please check your login details and try again.
-				</div>
-			<?php } ?>
-			<h2>Log In</h2>
-			<?= Utils::TableMaker(
-				array(
-					array(
-						"display"=>"Email",
-						"name"=>"email",
-						"type"=>"email",
-						"value"=>$loginEmail
-					),
-					array(
-						"display"=>"Password",
-						"name"=>"password",
-						"type"=>"password"
-					)
-				),
-				"Log In"
-			); ?>
-		</div>
-	<?php }
-	
-	if (!$hideRegister){ ?>
-		<div class="form">
-			<?php if (isset($errors)){
-				echo '<div class="error">The following errors were encountered:<ul>';
-				foreach ($errors as $e)
-					echo '<li>',$e,'</li>';
-				echo '</ul></div>';
-			}?>
-			<h2>Register</h2>
-			<?= Utils::TableMaker(
-				array(
-					array(
-						"display"=>"Email",
-						"name"=>"email",
-						"type"=>"email",
-						"value"=>$registerEmail
-					),
-					array(
-						"display"=>"Password",
-						"name"=>"password",
-						"type"=>"password"
-					)
-				),
-				"Register",
-				"/member/register"
-			); ?>
-		</div>
-<?php } ?>
+?>
+<div class="form">
+	<h2>Log In</h2>
+	<?= Utils::TableMaker(
+		array(
+			array(
+				"display"=>"Email",
+				"name"=>"email",
+				"type"=>"email",
+				"value"=>$loginEmail
+			),
+			array(
+				"display"=>"Password",
+				"name"=>"password",
+				"type"=>"password"
+			)
+		),
+		'<img src="/images/member.svg" alt="Log In" title="Log In" />',
+		"/member/login"
+	); ?>
+</div>
+<div class="form">
+	<h2>Register</h2>
+	<?= Utils::TableMaker(
+		array(
+			array(
+				"display"=>"Email",
+				"name"=>"email",
+				"type"=>"email",
+				"value"=>$registerEmail
+			),
+			array(
+				"display"=>"Password",
+				"name"=>"password",
+				"type"=>"password"
+			)
+		),
+		'<img src="/images/register.svg" alt="Register" title="Register" />',
+		"/member/register"
+	); ?>
+</div>
 }@

+ 13 - 1
View/Member/manage.view

@@ -1,4 +1,16 @@
 @Title{Member Area}@
 @Body{
-<?php var_dump(Session::GetLoggedInUser()); ?>
+<p>You are currently logged in as: <?=$user->UserEmail?></p>
+<?=Utils::TableMaker(array(
+	array(
+		"display"=>"New password",
+		"type"=>"password",
+		"name"=>"new_password"
+	),
+	array(
+		"display"=>"Confirm password",
+		"type"=>"password",
+		"name"=>"confirm_password"
+	)
+));?>
 }@

+ 2 - 2
base/Utils.php

@@ -3,7 +3,7 @@ class Utils{
 	const METRES_TO_FEET=3.2808399;
 	const KILOMETRES_TO_MILES=0.621371192;
 	
-	public static function TableMaker($data,$buttonText="Submit",$action="",$method="post") {
+	public static function TableMaker($data,$buttonContent="Submit",$action="",$method="post") {
 		ob_start();
 		echo '<form action="',$action,'" method="',$method,'"><table>';
 		foreach ($data as $datum){
@@ -42,7 +42,7 @@ class Utils{
 			echo '<tr><td><label for="',$datum['name'],'">',$datum['display'],': </label></td>',
 				'<td>',$html,'</td></tr>';
 		}
-		echo '<tr><td></td><td><input name="submit_form" type="submit" value="',$buttonText,'" /></td></tr>',
+		echo '<tr><td></td><td><button name="submit_form" type="submit">',$buttonContent,'</button></td></tr>',
 			'</table></form>';
 		return ob_get_clean();
 	}

+ 9 - 1
template.php

@@ -96,7 +96,15 @@ function FormatURI(URI $uri, $base=""){
 					</tr>
 				</table>
 			</div>
-			<div id="content">{@Body}</div>
+			<div id="content">
+				<?php if (isset($errors) && count($errors)>0){
+					echo '<div class="errors">The following errors were encountered:<ul>';
+					foreach ($errors as $e)
+						echo '<li>',$e,'</li>';
+					echo '</ul>Please rectify them and try again.</div>';
+				} ?>
+				{@Body}
+			</div>
 			<div id="footer">{@Footer}</div>
 		</div>
 		<?php if (!isset($_COOKIE['cookiePopupConfirmed']) || $_COOKIE['cookiePopupConfirmed']!=true) { ?>