Robert Marshall пре 9 година
родитељ
комит
506d65a35f
6 измењених фајлова са 52 додато и 20 уклоњено
  1. 18 7
      Controller/Member.php
  2. 9 4
      Controller/Weight.php
  3. 6 2
      Model/DBObject.php
  4. 8 2
      Model/UserSetting.php
  5. 1 1
      Model/WeightReading.php
  6. 10 4
      View/Member/manage.view

+ 18 - 7
Controller/Member.php

@@ -86,10 +86,16 @@ class Member extends Controller {
 		}
 
 		$user=Session::GetLoggedInUser();
-		$settings=array(
-			"height"=>$heightSetting=$userSettingsRepo->GetSetting($user, "height")->Value
+		$settingsToLoad=array(
+			"height",
+			"weight_graph_duration"
 		);
 		
+		$settings=array();
+		foreach ($settingsToLoad as $key){
+			$settings[$key]=$userSettingsRepo->GetSetting($user, $key)->Value;
+		}
+		
 		$user=Session::GetLoggedInUser();
 		return new View("Member/manage.view", array("user"=>$user, "errors"=>$errors, "settings"=>$settings));
 	}
@@ -121,7 +127,13 @@ class Member extends Controller {
 		return $this->Manage($errors);
 	}
 
-	public function SaveSettings($submit_form, $user_setting_height, IUserSettingsRepository $userSettingsRepo) {
+	private function SaveSetting(IUserSettingsRepository $userSettingsRepo, User $user, $key, $value){
+		$setting=$userSettingsRepo->GetSetting($user, $key);
+		$setting->Value=$value;
+		$setting->Save();
+	}
+	
+	public function SaveSettings($submit_form, $height, $weight_graph_duration, IUserSettingsRepository $userSettingsRepo) {
 		if (!isset($submit_form) || !Session::IsUserLoggedIn()) {
 			header("location:/member/");
 			return;
@@ -129,10 +141,9 @@ class Member extends Controller {
 
 		$user=Session::GetLoggedInUser();
 		$errors=array();
-
-		$heightSetting=$userSettingsRepo->GetSetting($user, "height");
-		$heightSetting->Value=(int)$user_setting_height;
-		$heightSetting->Save();
+		
+		$this->SaveSetting($userSettingsRepo, $user, "height", (int)$height);
+		$this->SaveSetting($userSettingsRepo, $user, "weight_graph_duration", (int)$weight_graph_duration);
 
 		if (count($errors)==0){
 			header("location:/member/");

+ 9 - 4
Controller/Weight.php

@@ -2,12 +2,17 @@
 ApplicationSettings::RegisterDefaultSetting("weight", "graph_history_duration", "1M");
 
 class Weight extends Controller {	
-	public function Index(IWeightReadingRepository $weightReadingRepo) {
-		$userId=Session::GetLoggedInUser()->UserId;
+	public function Index(IWeightReadingRepository $weightReadingRepo, IUserSettingsRepository $userSettingRepo) {
+		$user=Session::GetLoggedInUser();
+		$graphDuration=ApplicationSettings::GetSetting("weight", "graph_history_duration");
+		$userDurationSetting=$userSettingRepo->GetSetting($user, "weight_graph_duration")->Value;
+		if ($userDurationSetting!=null)
+			$graphDuration=$userDurationSetting.'M';
+		
 		$dateTo=new DateTime();
 		$dateFrom=clone $dateTo;
-		$dateFrom->sub(new DateInterval("P".ApplicationSettings::GetSetting("weight", "graph_history_duration")));
-		return new View("Weight/index.view",array("readings"=>$weightReadingRepo->GetReadingsInDateRange($userId,$dateFrom,$dateTo)));
+		$dateFrom->sub(new DateInterval("P".$graphDuration));
+		return new View("Weight/index.view",array("readings"=>$weightReadingRepo->GetReadingsInDateRange($user->UserId,$dateFrom,$dateTo)));
 	}
 	
 	public function Add($weight, $fat, IUserSettingsRepository $userSettingsRepo){

+ 6 - 2
Model/DBObject.php

@@ -65,7 +65,7 @@ class DBObject implements ISavableObject {
 	}
 
 	public function __set($name, $value) {
-		if (array_key_exists($name, $this->_fields)&&$this->_fields[$name]!=$value) {
+		if (array_key_exists($name, $this->_fields)&&$this->_fields[$name]!==$value) {
 			$this->_changedFields[$name]=$name;
 			$this->_fields[$name]=$value;
 		}
@@ -108,11 +108,15 @@ class DBObject implements ISavableObject {
 			$this->_ids=0;
 		}
 	}
+	
+	protected function HasChangedFields() {
+		return count($this->_changedFields)>0;
+	}
 
 	public function Save() {
 		$PDO=BaseRepository::GetPDO();
 
-		if (count($this->_changedFields)==0)
+		if (!$this->HasChangedFields())
 			return;
 
 		$fields=array();

+ 8 - 2
Model/UserSetting.php

@@ -6,9 +6,12 @@ class UserSetting extends DBObject {
 			$this->UserId=$user->UserId;
 		if (!$this->Key)
 			$this->Key=$key;
+		
+		$this->Value=$this->GetValue();
+		unset($this->_changedFields['Value']);
 	}
 
-	public function GetValue(){
+	private function GetValue(){
 		switch ($this->Type){
 			case DataTypes::Integer:
 				return (int)$this->Value;
@@ -25,7 +28,10 @@ class UserSetting extends DBObject {
 		return null;
 	}
 	
-	public function Save() {		
+	public function Save() {	
+		if (!$this->HasChangedFields())
+			return;
+		
 		switch (gettype($this->Value)){
 			case "integer":
 				$this->Type=DataTypes::Integer;

+ 1 - 1
Model/WeightReading.php

@@ -24,7 +24,7 @@ class WeightReading extends DBObject {
 	public function Save(User $user=null) {
 		if ($user==null)
 			throw new Exception("Please specify user");
-		$height=$this->_userSettingsRepo->GetSetting($user, "height")->GetValue();
+		$height=$this->_userSettingsRepo->GetSetting($user, "height")->Value;
 		$height*=0.01;//convert from cm to metres;
 		$this->Bmi=self::CalculateBMI($this->Weight, $height);
 		$this->UserId=$user->UserId;

+ 10 - 4
View/Member/manage.view

@@ -16,19 +16,25 @@
 		)
 	),
 	"Save",
-	"savepassword"
+	"/member/savepassword"
 );?>
 <h3>Weight tracker</h3>
 <?=Utils::TableMaker(
 	array(
 		array(
 			"display"=>"Height (cm)",
-			"type"=>"nubmer",
-			"name"=>"user_setting_height",
+			"type"=>"number",
+			"name"=>"height",
 			"value"=>$settings['height']
+		),
+		array(
+			"display"=>"Graph time period (months)",
+			"type"=>"number",
+			"name"=>"weight_graph_duration",
+			"value"=>$settings['weight_graph_duration']
 		)
 	),
 	"Save",
-	"savesettings"
+	"/member/savesettings"
 );?>
 }@