Skip to content

Commit

Permalink
Added new features like settings for account management
Browse files Browse the repository at this point in the history
  • Loading branch information
Jumanjigobez committed Jun 2, 2024
1 parent a61333f commit bc8474e
Show file tree
Hide file tree
Showing 13 changed files with 338 additions and 73 deletions.
17 changes: 17 additions & 0 deletions PHP/account/deleteAccount.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

include "../config.php";

$user_id = $_GET['user_id'];

$query = $conn->prepare("DELETE FROM users WHERE user_id = (?)");
$query->bind_param("s", $user_id);
$query->execute();

if ($query){
echo 1;
} else {
echo 0;
}

?>
29 changes: 29 additions & 0 deletions PHP/account/getAccount.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

include "../config.php";

$user_id = $_GET['user_id'];

$query = $conn->prepare("SELECT * FROM users WHERE user_id = (?)");
$query->bind_param("s", $user_id);
$query->execute();

$result = $query->get_result();

$accountData = array();

while ($row = $result->fetch_assoc()) {
$accountItem = array(
'user_id' => $row['user_id'],
'username' => $row['username'],
'email' => $row['email']

);
$accountData[] = $accountItem;
}

// Convert the data to JSON and send it as the response
header('Content-Type: application/json');
echo json_encode($accountData);

?>
113 changes: 113 additions & 0 deletions PHP/account/updateAccount.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<?php

include "../config.php";

$new_username = $_POST['new_username'];
$new_email = $_POST['new_email'];
$new_psk = $_POST['new_psk'];

$user_id = $_GET['user_id'];

if (!empty($new_username) || !empty($new_email)) {
// Check if the new username or email is not already taken
$username_exists = false;
$email_exists = false;


if (!empty($new_username)) {
$query = $conn->prepare("SELECT * FROM users WHERE username = ?");
$query->bind_param("s", $new_username);
$query->execute();
$result_username = $query->get_result();
$num_username = $result_username->num_rows;
$username_exists = ($num_username > 0);
}

if (!empty($new_email)) {
$query = $conn->prepare("SELECT * FROM users WHERE email = ?");
$query->bind_param("s", $new_email);
$query->execute();
$result_email = $query->get_result();
$num_email = $result_email->num_rows;
$email_exists = ($num_email > 0);
}

if ($username_exists && $email_exists) {
if (!empty($new_psk)) {
$hash_psk = password_hash($new_psk, PASSWORD_DEFAULT);

$query = $conn->prepare("UPDATE users SET username = ?, email = ?, psk = ? WHERE user_id = ?");
$query->bind_param("ssss", $new_username, $new_email, $hash_psk, $user_id);

if ($query->execute()) {
echo 1; // Success
} else {
echo 0; // Failure
}
} else {
echo 2;//for username or email exist
}




} else if ($username_exists) {
if (!$email_exists) {
$query = $conn->prepare("UPDATE users SET email = ? WHERE user_id = ?");
$query->bind_param("ss", $new_email, $user_id);


}

if (!empty($new_psk)) {
$hash_psk = password_hash($new_psk, PASSWORD_DEFAULT);

$query = $conn->prepare("UPDATE users SET username = ?, email = ?, psk = ? WHERE user_id = ?");
$query->bind_param("ssss", $new_username, $new_email, $hash_psk, $user_id);
}

if ($query->execute()) {
echo 1; // Success
} else {
echo 0; // Failure
}

} else if ($email_exists) {
if (!$username_exists) {
$query = $conn->prepare("UPDATE users SET username = ? WHERE user_id = ?");
$query->bind_param("ss", $new_username, $user_id);


}

if (!empty($new_psk)) {
$hash_psk = password_hash($new_psk, PASSWORD_DEFAULT);

$query = $conn->prepare("UPDATE users SET username = ?, email = ?, psk = ? WHERE user_id = ?");
$query->bind_param("ssss", $new_username, $new_email, $hash_psk, $user_id);
}

if ($query->execute()) {
echo 1; // Success
} else {
echo 0; // Failure
}
} else {
if (!empty($new_psk)) {
$hash_psk = password_hash($new_psk, PASSWORD_DEFAULT);

$query = $conn->prepare("UPDATE users SET username = ?, email = ?, psk = ? WHERE user_id = ?");
$query->bind_param("ssss", $new_username, $new_email, $hash_psk, $user_id);
} else {
$query = $conn->prepare("UPDATE users SET username = ?, email = ? WHERE user_id = ?");
$query->bind_param("sss", $new_username, $new_email, $user_id);
}

if ($query->execute()) {
echo 1; // Success
} else {
echo 0; // Failure
}
}
}
?>
23 changes: 22 additions & 1 deletion PHP/signup.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,22 @@
$psk = $_POST['password'];
$terms_check = $_POST['terms_check'];

function generateUserID() {
$datePart = date("Ymd");
$randomPart = generateRandomString(8);
return "user_".$randomPart . $datePart;
}

function generateRandomString($length) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charLength - 1)];
}
return $randomString;
}

if(!empty($username) && !empty($psk) && !empty($email) && $terms_check){
$query = $conn->prepare("SELECT * FROM `users` WHERE username = (?) OR email = (?)");
$query->bind_param("ss", $username, $email);
Expand All @@ -19,7 +35,7 @@
if($num == 1){
echo "Account Exists";
}else{
$user_id = 'user_'.random_int(10, 1000);
$user_id = generateUserID();
$user_type = "normal";
$status = "offline";
$terms_check = "Agreed";
Expand All @@ -42,5 +58,10 @@









?>
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "homesys",
"version": "1.1.0",
"version": "1.1.1",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.17.0",
Expand Down
Binary file added public/images/avatar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 3 additions & 2 deletions src/components/header.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ const Header = () => {
dispatch(menuOpen(true));
}
};
const handleLogout = () => {
const handleLogout = (e) => {
e.target.disabled = true;
const user = JSON.parse(localStorage.getItem("sessions")).user_id;
// console.log(user);
//Update the status of the user to offline
Expand Down Expand Up @@ -93,7 +94,7 @@ const Header = () => {
: "HomeSys"
: "HomeSys"}
</h2>
<button className="btn" onClick={handleLogout}>
<button className="btn" onClick={(e) => handleLogout(e)}>
Log Out
</button>
</div>
Expand Down
6 changes: 4 additions & 2 deletions src/components/login.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -234,8 +234,10 @@ const Login = () => {
</div>

<div className="forgot_part">
<p>Forgot Password ? </p>
<p onClick={handleNewAccount}>New Account ? </p>
<button className="normal_btn">Forgot Password ? </button>
<button className="normal_btn" onClick={handleNewAccount}>
New Account ?{" "}
</button>
</div>
<ToastContainer />
</div>
Expand Down
113 changes: 63 additions & 50 deletions src/components/sidebar.jsx
Original file line number Diff line number Diff line change
@@ -1,67 +1,80 @@
import React from "react";
import { NavLink } from "react-router-dom";
import { NavLink, useNavigate } from "react-router-dom";

import { useSelector } from "react-redux";

const Sidebar = () => {
const navigate = useNavigate();
const menuOpened = useSelector((state) => state.MenuReducer);

const handleGoToSettings = () => {
navigate("/settings");
};
return (
<div className={menuOpened ? "sidebar" : "sidebar closed"}>
<div className="logo_part">
<img src="../images/logo.png" alt="H" />
</div>

<div className="menu_part">
<ul>
<li>
<NavLink to="/home" activeClassName="active">
<i className="fa-solid fa-house"></i> <span>Home</span>
</NavLink>
</li>
<li>
<NavLink to="/todo" activeClassName="active">
<i class="fa-solid fa-list-check"></i> <span>ToDo List</span>
</NavLink>
</li>
<li>
<NavLink to="/goal" activeClassName="active">
<i class="fa-solid fa-bullseye"></i> <span>Goals</span>
</NavLink>
</li>
<li>
<NavLink to="/timetables" activeClassName="active">
<i class="fa-solid fa-clock"></i> <span>Timetables</span>
</NavLink>
</li>
<li>
<NavLink to="/projects" activeClassName="active">
<i class="fa-solid fa-diagram-project"></i> <span>Projects</span>
</NavLink>
</li>
<li>
<NavLink to="/contacts" activeClassName="active">
<i class="fa-solid fa-address-book"></i> <span>Contacts</span>
</NavLink>
</li>
<li>
<NavLink to="/appointments" activeClassName="active">
<i class="fa-solid fa-building-user"></i>{" "}
<span>Appointments</span>
</NavLink>
</li>
<li>
<NavLink to="/payments" activeClassName="active">
<i class="fa-solid fa-hand-holding-dollar"></i>{" "}
<span>Payments</span>
</NavLink>
</li>
<li>
<NavLink to="/events" activeClassName="active">
<i class="fa-solid fa-calendar-xmark"></i> <span>Events</span>
</NavLink>
</li>
</ul>
<nav>
<ul>
<li>
<NavLink to="/home" activeClassName="active">
<i className="fa-solid fa-house"></i> <span>Home</span>
</NavLink>
</li>
<li>
<NavLink to="/todo" activeClassName="active">
<i class="fa-solid fa-list-check"></i> <span>ToDo List</span>
</NavLink>
</li>
<li>
<NavLink to="/goal" activeClassName="active">
<i class="fa-solid fa-bullseye"></i> <span>Goals</span>
</NavLink>
</li>
<li>
<NavLink to="/timetables" activeClassName="active">
<i class="fa-solid fa-clock"></i> <span>Timetables</span>
</NavLink>
</li>
<li>
<NavLink to="/projects" activeClassName="active">
<i class="fa-solid fa-diagram-project"></i>{" "}
<span>Projects</span>
</NavLink>
</li>
<li>
<NavLink to="/contacts" activeClassName="active">
<i class="fa-solid fa-address-book"></i> <span>Contacts</span>
</NavLink>
</li>
<li>
<NavLink to="/appointments" activeClassName="active">
<i class="fa-solid fa-building-user"></i>{" "}
<span>Appointments</span>
</NavLink>
</li>
<li>
<NavLink to="/payments" activeClassName="active">
<i class="fa-solid fa-hand-holding-dollar"></i>{" "}
<span>Payments</span>
</NavLink>
</li>
<li>
<NavLink to="/events" activeClassName="active">
<i class="fa-solid fa-calendar-xmark"></i> <span>Events</span>
</NavLink>
</li>
</ul>
</nav>
</div>

<div className="settings_part">
<button className="btn btn3" onClick={handleGoToSettings}>
<i class="fa-solid fa-gear"></i> <span>Settings</span>
</button>
</div>
</div>
);
Expand Down
Loading

0 comments on commit bc8474e

Please sign in to comment.