main
kry008 2023-08-18 16:00:24 +02:00
parent b0b4bc34d2
commit a6b8d3285f
54 changed files with 5087 additions and 132 deletions

133
.gitignore vendored
View File

@ -1,132 +1 @@
# ---> Node
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
config.php

View File

@ -1,3 +1,9 @@
# Attendance-list
## Install
1. Set up MySQL DB whit file db.sql
1. fill config.php.temp file
1. rename config.php.temp to config.php
## Licence
Attendance-list © 2023 by kry008 is licensed under Attribution-NonCommercial-NoDerivatives 4.0 International

113
_install.php 100644
View File

@ -0,0 +1,113 @@
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
require_once 'db.php';
$sql = "INSERT INTO `dzialy` (`id`, `skrot`, `nazwa`, `aktywne`) VALUES
(NULL, '".$_POST['departmentShort']."', '".$_POST['department']."', 1);";
$stmt = $pdo->prepare($sql);
$stmt->execute();
//wstaw pierwszego użytkownika
$sql = "INSERT INTO `users` (`id`, `login`, `haslo`, `imie`, `nazwisko`, `dzial`, `przelozony`, `aktywne`) VALUES
(NULL, '".$_POST['usernameUser']."', SHA1('".($_POST['passwordUser'])."'), '".$_POST['nameUser']."', '".$_POST['surnameUser']."', 1, 1, 1);";
$stmt = $pdo->prepare($sql);
$stmt->execute();
//usun plik index.php
unlink("index.html");
//zamien nazwę index.php.temp na index.php
rename("index.php.temp", "index.php");
//przejdź do index.php
header("Location: index.php");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Instalacja</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj</h1>
</header>
<main id="register">
<?php
if(@isset($_SESSION['error']))
{
echo '<p class="error">'.$_SESSION['error'].'</p>';
unset($_SESSION['error']);
}
?>
<table class="form">
<form method="post" action="_install.php">
<tr>
<td colspan="2">
Skrypt zakłada że baza danych jest uzupełniona plikiem db.sql i config.php jest uzupełniony
</td>
</tr>
<tr>
<td>
<label>Login pierwszego użytkownika</label>
</td>
<td>
<input type="text" name="usernameUser">
</td>
</tr>
<tr>
<td>
<label>Hasło pierwszego użytkownika</label>
</td>
<td>
<input type="password" name="passwordUser">
</td>
</tr>
<tr>
<td>
<label>Imie</label>
</td>
<td>
<input type="text" name="nameUser">
</td>
</tr>
<tr>
<td>
<label>Nazwisko</label>
</td>
<td>
<input type="text" name="surnameUser">
</td>
</tr>
<tr>
<td>
<label>Nazwa działu</label>
</td>
<td>
<input type="text" name="department">
</td>
</tr>
<tr>
<td>
<label>Skrót działu</label>
</td>
<td>
<input type="text" name="departmentShort" max="5">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="install" class="btn" value="Zainstaluj"/>
</td>
</tr>
</form>
</table>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

28
accept.php 100644
View File

@ -0,0 +1,28 @@
<?php
require_once 'db.php';
@session_start();
//sprawdź czy użytkownik jest przełożonym $_POST['user'], jeżeli tak to dal danej daty $_POST['mm'] (YYYY-MM) ustaw obecności $_POST['user'] na zaakceptowane na 1
//jeżeli nie to $_SESSION["innfoError"] = "Nie jesteś przełożonym tego użytkownika" i wróć do panel.php
$sql = "SELECT * FROM uzytkownicy WHERE id = :id AND przelozony = :przelozony";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST['user'], PDO::PARAM_INT);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user === false)
{
$_SESSION["innfoError"] = "Nie jesteś przełożonym tego użytkownika";
header("Location: panel.php");
exit();
}
else
{
$sql = "UPDATE obecnosc SET zaakceptowane = 1 WHERE kto = :kto AND data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_POST['user'], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['month'].'%', PDO::PARAM_STR);
$stmt->execute();
$_SESSION["innfoError"] = "Zaakceptowano dni";
header("Location: panel.php");
exit();
}

31
activate.php 100644
View File

@ -0,0 +1,31 @@
<?php
//activate.php?id=ID
require_once 'db.php';
@session_start();
if($_SERVER['REQUEST_METHOD'] === 'GET')
{
if(isset($_GET['id']))
{
$id = $_GET['id'];
$sql = "UPDATE uzytkownicy SET aktywne = 1 WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Aktywowano użytkownika";
header("Location: activateWorker.php");
exit();
}
else
{
$_SESSION['innfoError'] = "Nie podano id użytkownika";
header("Location: activateWorker.php");
exit();
}
}
else
{
$_SESSION['innfoError'] = "Nie podano id użytkownika";
header("Location: activateWorker.php");
exit();
}
?>

85
activateWorker.php 100644
View File

@ -0,0 +1,85 @@
<?php
require_once 'db.php';
@session_start();
//wypisz wszystki użytkowników którzy mają status aktywne 0 i przelozony = id zalogowanego użytkownika, jeżeli nie ma takich to $_SESSION["innfoError"] = "Brak pracowników do aktywacji" i wróć do panel.php
$sql = "SELECT * FROM uzytkownicy WHERE aktywne = 0 AND przelozony = :przelozony";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$uzytkownicy = $stmt->fetchAll(PDO::FETCH_ASSOC);
if($uzytkownicy === false)
{
$_SESSION["innfoError"] = "Brak pracowników do aktywacji";
header("Location: panel.php");
exit();
}
else
{
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<div id="info">
<?php
echo @$_SESSION["innfoError"];
$_SESSION["innfoError"] = "";
?>
</div>
<main id="uzytkownicy">
<table>
<tr>
<th>ID</th>
<th>IMIĘ</th>
<th>NAZWISKO</th>
<th>SKRÓT DZIAŁU</th>
<th>AKTYWOWAĆ?</th>
</tr>
<?php
$i = 0;
foreach($uzytkownicy as $user)
{
$i++;
echo '<tr>';
echo '<td>'.$user['id'].'</td>';
echo '<td>'.$user['imie'].'</td>';
echo '<td>'.$user['nazwisko'].'</td>';
$sql = "SELECT * FROM dzialy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $user['dzial'], PDO::PARAM_INT);
$stmt->execute();
$dzial = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<td>'.$dzial['skrot'].'</td>';
echo '<td><a href="activate.php?id='.$user['id'].'"><button>Aktywuj</button></a><br /><a href="delUser.php?id='.$user['id'].'"><button>Usuń</button></a></td>';
echo '</tr>';
}
if($i == 0)
{
$_SESSION["innfoError"] = "Brak pracowników do aktywacji";
header("Location: panel.php");
exit();
}
}
?>
</table>
</main>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

97
addAdmin.php 100644
View File

@ -0,0 +1,97 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
//pobierz wszystkie dane użytkowników, których nie ma w tabeli admini kolumna kto
$sql = "SELECT * FROM uzytkownicy WHERE id NOT IN (SELECT kto FROM admini) AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$uzytkownicy = $stmt->fetchAll(PDO::FETCH_ASSOC);
//print_r($uzytkownicy);
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['addAdmin']))
{
$user = $_POST['user'];
$sql = "INSERT INTO admini (kto) VALUES (:kto)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $user, PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Dodano admina";
header("Location: dictionaries.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="addAdmin.php" method="post">
<table class="form">
<tr>
<td colspan="2">
<h3>Dodaj admina</h3>
</td>
</tr>
<tr>
<td>
<label for="user">Wybierz użytkownika</label>
</td>
<td>
<select name="user" id="user">
<?php
foreach($uzytkownicy as $user)
{
?>
<option value="<?php echo $user['id']; ?>"><?php echo $user['imie']." ".$user['nazwisko']." (".$user['login'].")"; ?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="addAdmin" class="btn" value="Dodaj"/>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

109
addDay.php 100644
View File

@ -0,0 +1,109 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="addDay_form.php" method="post">
<table class="form">
<tr>
<td>
<label for="day">Wybierz dzień</label>
</td>
<td>
<input type="date" name="day" id="day" value="<?php echo date('Y-m-d'); ?>">
</td>
</tr>
<tr>
<td>
<label for="start">Rozpoczęcie pracy*</label>
</td>
<td>
<input type="time" name="start" id="start">
</td>
</tr>
<tr>
<td>
<label for="end">Zakończenie pracy*</label>
</td>
<td>
<input type="time" name="end" id="end">
</td>
</tr>
<tr>
<td>
<label for="status">Status</label>
</td>
<td>
<select name="status" id="status">
<?php
$sql = "SELECT * FROM statusy";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$statusy = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($statusy as $status)
{
echo "<option value='".$status['id']."'>".$status['skrot']." - ".$status['nazwa']."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<label for="zdalne">Praca zdalna (inna niż okazjonalna)</label>
<input type="checkbox" name="zdalne" id="zdalne" value="1">
</td>
</tr>
<tr>
<td colspan="2">
* - opcjonalne przy statusach oznaczających wolne
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Dodaj dzień">
</td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='panel.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

86
addDay_form.php 100644
View File

@ -0,0 +1,86 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
//sprawdź czy ten dzień jeszcze nie był dodany
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND data = :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['day'], PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
if($work !== false)
{
$_SESSION['innfoError'] = "Ten dzień już został dodany!";
header('Location: addDay.php');
exit();
}
//sprawdź czy podano godzinę rozpoczęcia i zakończenia pracy, jeżeli nie to ustaw NULL
if($_POST['start'] == "")
{
$start = NULL;
}
else
{
$start = $_POST['start'];
}
if($_POST['end'] == "")
{
$end = NULL;
}
else
{
$end = $_POST['end'];
}
//jeżeli status oznaczaWolne == 0 to sprawdź czy jest podana godzina rozpoczęcia i zakończenia pracy, zakończenie musi być większe od rozpoczęcia
$sql = "SELECT * FROM statusy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST['status'], PDO::PARAM_INT);
$stmt->execute();
$status = $stmt->fetch(PDO::FETCH_ASSOC);
if($status['oznaczaWolne'] == 0)
{
if($_POST['start'] == "" || $_POST['end'] == "")
{
$_SESSION['innfoError'] = "Musisz podać godzinę rozpoczęcia i zakończenia pracy!";
header('Location: addDay.php');
exit();
}
if($_POST['start'] >= $_POST['end'])
{
$_SESSION['innfoError'] = "Godzina zakończenia pracy musi być większa od godziny rozpoczęcia pracy!";
header('Location: addDay.php');
exit();
}
}
else
{
$end = NULL;
$start = NULL;
}
//jeżeli status oznaczaWolne == 1 to praca zdalna zawsze będzie 0
if($status['oznaczaWolne'] == 1)
{
$zdalne = 0;
}
else
{
$zdalne = $_POST['zdalne'];
}
//dodaj dzień do bazy
$sql = "INSERT INTO obecnosc VALUES (NULL, :kto, :data, :start, :end, :status, 0, :zdalne, 1)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['day'], PDO::PARAM_STR);
$stmt->bindValue(':start', $start, PDO::PARAM_STR);
$stmt->bindValue(':end', $end, PDO::PARAM_STR);
$stmt->bindValue(':status', $_POST['status'], PDO::PARAM_INT);
$stmt->bindValue(':zdalne', $zdalne, PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Dzień został dodany!";
header('Location: addDay.php');
exit();
?>

98
addDepartment.php 100644
View File

@ -0,0 +1,98 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
/*
CREATE TABLE IF NOT EXISTS `dzialy` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`skrot` varchar(25) NOT NULL,
`nazwa` text NOT NULL,
`aktywne` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `skrot` (`skrot`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
*/
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['addDepartment']))
{
$name = trim($_POST['name']);
$skrot = trim($_POST['skrot']);
$sql = "INSERT INTO dzialy (skrot, nazwa) VALUES (:skrot, :nazwa)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':skrot', $skrot, PDO::PARAM_STR);
$stmt->bindValue(':nazwa', $name, PDO::PARAM_STR);
$result = $stmt->execute();
if($result)
{
$_SESSION["innfoError"] = "Dodano dział";
header("Location: dictionaries.php");
exit();
}
else
{
$_SESSION["innfoError"] = "Błąd dodawania działu";
header("Location: dictionaries.php");
exit();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="addDepartment.php" method="post">
<table class="form">
<tr>
<td>Nazwa działu</td>
<td><input type="text" name="name" required></td>
</tr>
<tr>
<td>Skrót działu</td>
<td><input type="text" name="skrot" required></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="addDepartment" value="Dodaj"></td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

111
addFree.php 100644
View File

@ -0,0 +1,111 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['addFree']))
{
//sprawdź czy podany dzień nie jest już wpisany do bazy
/*
CREATE TABLE `dniwolne` (
`id` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`nazwaSwieta` text NOT NULL,
`aktywne` int(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
*/
$data = $_POST['data'];
//sprawdź czy data jest przyszła
$today = date("Y-m-d");
if($data < $today)
{
$_SESSION['innfoError'] = "Podana data jest z przeszłości";
header("Location: dictionaries.php");
exit();
}
$nazwaSwieta = $_POST['nazwaSwieta'];
$sql = "SELECT * FROM dniwolne WHERE data = :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $data, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
if($count > 0)
{
$_SESSION['innfoError'] = "Podany dzień jest już w bazie";
header("Location: dictionaries.php");
exit();
}
$sql = "INSERT INTO dniwolne (data, nazwaSwieta) VALUES (:data, :nazwaSwieta)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $data, PDO::PARAM_STR);
$stmt->bindValue(':nazwaSwieta', $nazwaSwieta, PDO::PARAM_STR);
$stmt->execute();
$_SESSION['innfoError'] = "Dodano dzień wolny";
header("Location: dictionaries.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="addFree.php" method="post">
<table class="form">
<tr>
<td>Data</td>
<td><input type="date" name="data" required min="<?php echo date("Y-m-d"); ?>"></td>
</tr>
<tr>
<td>Nazwa święta</td>
<td><input type="text" name="nazwaSwieta" required></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="addFree" value="Dodaj"></td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='dictionaries.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

91
addFreeDay.php 100644
View File

@ -0,0 +1,91 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="addFreeDay_form.php" method="post">
<table class="form">
<tr>
<td>
<label for="dateFirst">Wybierz pierwszy dzień</label>
</td>
<td>
<input type="date" name="dateFirst" id="dateFirst" value="<?php echo date('Y-m-d'); ?>">
</td>
</tr>
<tr>
<td>
<label for="dateLast">Wybierz ostatni dzień</label>
</td>
<td>
<input type="date" name="dateLast" id="dateLast" value="<?php echo date('Y-m-d'); ?>">
</td>
</tr>
<tr>
<td>
<label for="status">Status</label>
</td>
<td>
<select name="status" id="status">
<option value="0" disabled selected>Wybierz status</option>
<?php
$sql = "SELECT * FROM statusy WHERE oznaczaWolne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$statusy = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($statusy as $status)
{
echo "<option value='".$status['id']."'>".$status['skrot']." - ".$status['nazwa']."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Dodaj dzień">
</td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='panel.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

View File

@ -0,0 +1,95 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
//CREATE TABLE `dniwolne` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `data` DATE NOT NULL , `nazwaSwieta` TEXT NOT NULL , `aktywne` INT(1) NOT NULL DEFAULT '1' , PRIMARY KEY (`id`)) ENGINE = InnoDB;
//w post jest przekazany start i koniec dat, sprawdź czy w tym przedziale (włącznie) nie ma już wpisanej obecności
//jeżeli jest to wyświetl błąd $_SESSION['innfoError']
$start = $_POST['dateFirst'];
$end = $_POST['dateLast'];
//sprawdź czy data końcowa jest późniejsza niż data początkowa
if($end < $start)
{
$_SESSION['innfoError'] = "Data końcowa nie może być wcześniejsza niż data początkowa";
header('Location: addFreeDay.php');
exit();
}
//sprawdź czy id statusu ma oznaczaWolne = 1
$sql = "SELECT * FROM statusy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST['status'], PDO::PARAM_INT);
$stmt->execute();
$status = $stmt->fetch(PDO::FETCH_ASSOC);
if($status['oznaczaWolne'] != 1)
{
$_SESSION['innfoError'] = "Wybrany status nie oznacza wolnego";
header('Location: addFreeDay.php');
exit();
}
//wpisz do tablicy wszystkie daty, poniedziałek-piątek w danym przedziale
$dates = [];
$day = $start;
while($day <= $end)
{
//sprawdź czy sobota lub niedziela
if(date('N', strtotime($day)) < 6)
{
$dates[] = $day;
}
$day = date('Y-m-d', strtotime($day.' + 1 day'));
}
//sprawdź czy w danym przedziale nie ma już wpisanej obecności
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND data BETWEEN :start AND :end AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':start', $start, PDO::PARAM_STR);
$stmt->bindValue(':end', $end, PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetchAll(PDO::FETCH_ASSOC);
if($work !== false)
{
foreach($work as $day)
{
if(in_array($day['data'], $dates))
{
$_SESSION['innfoError'] = "W danym przedziale jest już wpisana obecność";
header('Location: addFreeDay.php');
exit();
}
}
}
//pobierz wszystkie wolne z tego przedziału z tabeli dniwolne
$sql = "SELECT * FROM dniwolne WHERE data BETWEEN :start AND :end AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':start', $start, PDO::PARAM_STR);
$stmt->bindValue(':end', $end, PDO::PARAM_STR);
$stmt->execute();
$wolne = $stmt->fetchAll(PDO::FETCH_ASSOC);
//sprawdź czy w danym przedziale nie ma już wpisanych dni wolnych, jeżeli tak to usuń je z tablicy $dates
if($wolne !== false)
{
foreach($wolne as $day)
{
if(in_array($day['data'], $dates))
{
$key = array_search($day['data'], $dates);
unset($dates[$key]);
}
}
}
//jeżeli nie ma wpisanej obecności w danym przedziale to dodaj wpisy
foreach($dates as $day)
{
$sql = "INSERT INTO obecnosc VALUES (NULL, :kto, :data, NULL, NULL, :status, 0, 0, 1)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $day, PDO::PARAM_STR);
$stmt->bindValue(':status', $_POST['status'], PDO::PARAM_INT);
$stmt->execute();
}
$_SESSION['innfoError'] = "Wolne zostało dodane";
header('Location: addFreeDay.php');
exit();
?>

74
allWorkers.php 100644
View File

@ -0,0 +1,74 @@
<?php
require_once 'db.php';
@session_start();
//pobierz listę danych pracowników których przełożonym jest zalogowany użytkownik
$podlega = array();
$sql = "SELECT id, imie, nazwisko FROM uzytkownicy WHERE przelozony = :przelozony AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$podlega = $stmt->fetchAll(PDO::FETCH_ASSOC);
//print_r($podlega);
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="allWorkersMonth.php" method="post">
<table class="form">
<tr>
<td>
<label for="user">Wybierz pracownika:</label>
</td>
<td>
<select name="user" id="user">
<?php
foreach($podlega as $user)
{
echo '<option value="'.$user['id'].'">'.$user['imie'].' '.$user['nazwisko'].'</option>';
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="show" value="Pokaż">
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

View File

@ -0,0 +1,71 @@
<?php
require_once 'db.php';
@session_start();
//sprawdź czy użytkownik jest przełożonym tego pracownik $_POST["user"]
$sql = "SELECT * FROM uzytkownicy WHERE id = :id AND przelozony = :przelozony";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST["user"], PDO::PARAM_INT);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user === false)
{
$_SESSION["innfoError"] = "Nie jesteś przełożonym tego pracownika";
header("Location: panel.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="waitingForAcceptsShow.php" method="post">
<table class="form">
<tr>
<td>
<label for="mm">Pokaż miesiąc:</label>
</td>
<td>
<input type="month" name="mm" id="mm" value="<?php echo date('Y-m'); ?>">
</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="user" value="<?php echo $_POST['user']; ?>">
<input type="submit" name="show" value="Pokaż">
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

8
checkLogin.php 100644
View File

@ -0,0 +1,8 @@
<?php
@session_start();
require_once 'db.php';
if($_SESSION['user_login_mark'] != 1)
{
header("Location: index.php");
exit();
}

6
config.php.temp 100644
View File

@ -0,0 +1,6 @@
<?php
$host = "localhost";
$db = "YOURDBNAME";
$dbUser = "root";
$dbPassword = "";
?>

7
db.php 100644
View File

@ -0,0 +1,7 @@
<?php
require_once('config.php');
$pdo = new PDO('mysql:host='.$host.';dbname='.$db.';charset=utf8',$dbUser,$dbPassword);
if(!$pdo) {
die('Could not connect');
}
?>

118
db.sql 100644
View File

@ -0,0 +1,118 @@
CREATE TABLE IF NOT EXISTS `dniwolne` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`data` date NOT NULL,
`nazwaSwieta` text NOT NULL,
`aktywne` int(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
CREATE TABLE IF NOT EXISTS `dzialy` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`skrot` varchar(25) NOT NULL,
`nazwa` text NOT NULL,
`aktywne` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `skrot` (`skrot`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
CREATE TABLE IF NOT EXISTS `logi` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`log` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
CREATE TABLE IF NOT EXISTS `obecnosc` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`kto` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`czasZaczecia` time DEFAULT NULL,
`czasKonca` time DEFAULT NULL,
`status` int(10) UNSIGNED NOT NULL,
`zaakceptowane` tinyint(4) NOT NULL DEFAULT 0,
`zdalne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
KEY `kto` (`kto`),
KEY `status` (`status`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
CREATE TABLE IF NOT EXISTS `statusy` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`skrot` varchar(10) NOT NULL,
`nazwa` text NOT NULL,
`oznaczaWolne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(4) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `skrot` (`skrot`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
CREATE TABLE IF NOT EXISTS `uzytkownicy` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`login` text NOT NULL,
`haslo` text NOT NULL,
`imie` text NOT NULL,
`nazwisko` text NOT NULL,
`dzial` int(10) UNSIGNED NOT NULL,
`przelozony` int(10) UNSIGNED DEFAULT NULL,
`aktywne` int(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
KEY `dzial` (`dzial`),
KEY `przelozony` (`przelozony`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
ALTER TABLE
`obecnosc`
ADD
CONSTRAINT `obecnosc_ibfk_1` FOREIGN KEY (`kto`) REFERENCES `uzytkownicy` (`id`),
ADD
CONSTRAINT `obecnosc_ibfk_2` FOREIGN KEY (`status`) REFERENCES `statusy` (`id`);
ALTER TABLE
`uzytkownicy`
ADD
CONSTRAINT `uzytkownicy_ibfk_1` FOREIGN KEY (`dzial`) REFERENCES `dzialy` (`id`),
ADD
CONSTRAINT `uzytkownicy_ibfk_2` FOREIGN KEY (`przelozony`) REFERENCES `uzytkownicy` (`id`);
INSERT INTO
`dniwolne` (`id`, `data`, `nazwaSwieta`, `aktywne`)
VALUES
(
1,
'2023-08-15',
'Wniebowzięcie Najświętszej Maryi Panny',
1
);
INSERT INTO
`statusy` (
`id`,
`skrot`,
`nazwa`,
`oznaczaWolne`,
`aktywne`
)
VALUES
(1, 'OB', 'OBECNY/A', 0, 1),
(2, 'UW', 'URLOP WYPOCZYNKOWY', 1, 1),
(3, 'UO', 'URLOP OKOLICZNOŚCIOWY', 1, 1),
(4, 'UR', 'URLOP REHABILITACYJNY', 1, 1),
(5, 'OP', 'OPIEKA NAD DZIECKIEM', 1, 1),
(6, 'D', 'DELEGACJA', 1, 1),
(7, 'L4', 'ZWOLNIENIE LEKARSKIE - CHOROBA', 1, 1),
(8, 'UB', 'URLOP BEZPŁATNY', 1, 1),
(9, '', 'URLOP NA ŻĄDANIE', 1, 1),
(10, '', 'WOLNE ZA ŚWIĘTO', 1, 1),
(11, 'OPZ', 'Okazjonalna PZ', 0, 1);
CREATE TABLE `admini` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`kto` INT UNSIGNED NOT NULL,
`odKiedy` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE = InnoDB;
INSERT INTO
`admini` (`id`, `kto`, `odKiedy`)
VALUES
(NULL, '1', CURRENT_TIMESTAMP)

93
delAdmin.php 100644
View File

@ -0,0 +1,93 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
//pobierz wszystki użytkwoników którzy zanjdują się w tabeli admini po za obecnie zalogowanym
$sql = "SELECT * FROM uzytkownicy WHERE id IN (SELECT kto FROM admini) AND id != :id AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$uzytkownicy = $stmt->fetchAll(PDO::FETCH_ASSOC);
//print_r($uzytkownicy);
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['delAdmin']))
{
$user = $_POST['user'];
$sql = "DELETE FROM admini WHERE kto = :kto";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $user, PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Usunięto admina";
header("Location: dictionaries.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="delAdmin.php" method="post">
<table class="form">
<tr>
<td>
<label for="user">Wybierz użytkownika</label>
</td>
<td>
<select name="user" id="user">
<?php
foreach($uzytkownicy as $user)
{
?>
<option value="<?php echo $user['id']; ?>"><?php echo $user['imie']." ".$user['nazwisko']." (".$user['login'].")"; ?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="delAdmin" value="Usuń admina">
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

109
delDepartment.php 100644
View File

@ -0,0 +1,109 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
/*
CREATE TABLE IF NOT EXISTS `dzialy` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`skrot` varchar(25) NOT NULL,
`nazwa` text NOT NULL,
`aktywne` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `skrot` (`skrot`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
*/
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
//chodzi o zaaktualizowanie aktywne na 0
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['delDepartment']))
{
$id = $_POST['id'];
$sql = "UPDATE dzialy SET aktywne = 0 WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$result = $stmt->execute();
if($result)
{
$_SESSION["innfoError"] = "Usunięto dział";
header("Location: dictionaries.php");
exit();
}
else
{
$_SESSION["innfoError"] = "Błąd usuwania działu";
header("Location: dictionaries.php");
exit();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="delDepartment.php" method="post">
<table class="form">
<tr>
<td>Wybierz dział</td>
<td>
<select name="id">
<?php
$sql = "SELECT * FROM dzialy WHERE aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo "<option value='".$row['id']."'>".$row['nazwa']."(".$row['skrot'].")</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="delDepartment" value="Usuń dział"></td>
</tr>
<!-- anuluj -->
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='dictionaries.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

22
delUser.php 100644
View File

@ -0,0 +1,22 @@
<?php
//delUser.php?id=ID
//zamień aktywne na 2
require_once 'db.php';
@session_start();
if($_SERVER['REQUEST_METHOD'] === 'GET')
{
$id = $_GET['id'];
$sql = "UPDATE uzytkownicy SET aktywne = 2 WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$_SESSION["innfoError"] = "Użytkownik został usunięty";
header("Location: activateWorker.php");
exit();
}
else
{
$_SESSION["innfoError"] = "Niepoprawne dane";
header("Location: activateWorker.php");
exit();
}

101
dictionaries.php 100644
View File

@ -0,0 +1,101 @@
<?php
require_once 'db.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
$sql = "SELECT * FROM uzytkownicy WHERE id NOT IN (SELECT kto FROM admini) AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$uzytkownicy = $stmt->fetchAll(PDO::FETCH_ASSOC);
//print_r($uzytkownicy);
$countuzytkownicy = $stmt->rowCount();
//policz adminów
$sql = "SELECT * FROM admini";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$admins = $stmt->fetchAll(PDO::FETCH_ASSOC);
$countAdmins = $stmt->rowCount();
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<div id="info">
<?php
echo @$_SESSION["innfoError"];
$_SESSION["innfoError"] = "";
?>
</div>
<main id="start">
<a href="panel.php">
<h3>Wróć</h3>
</a>
<a><h3>Nie usuwasz danych, tylko je dezaktywujesz (nie będzie możliwości ich wyboru)</h3></a>
<?php
if($countuzytkownicy > 0)
{
?>
<a href="addAdmin.php">
<h3>Dodanie admina</h3>
</a>
<?php
}
?>
<?php
if($countAdmins > 1)
{
?>
<a href="delAdmin.php">
<h3>Usunięcie admina</h3>
</a>
<?php
}
?>
<a href="addDepartment.php">
<h3>Dodanie działu</h3>
</a>
<a href="delDepartment.php">
<h3>Usunięcie działu</h3>
</a>
<a href="addFree.php">
<h3>Dodanie wolnego</h3>
</a>
<a href="statAdd.php">
<h3>Dodaj status</h3>
</a>
<a href="statDel.php">
<h3>Usuń status</h3>
</a>
<a href="printWorkerForm.php">
<h3>Wydrukuj listy pracownika</h3>
</a>
<a href="passReset.php">
<h3>Resetuj hasło użytkownika</h3>
</a>
</main>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

63
editDaySelect.php 100644
View File

@ -0,0 +1,63 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="editDaySelectForm.php" method="post">
<table class="form">
<tr>
<td>
<label for="date">Wybierz dzień</label>
</td>
<td>
<input type="date" name="date" id="date" value="<?php echo date('Y-m-d'); ?>">
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<input type="submit" value="Wybierz">
</td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='panel.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

View File

@ -0,0 +1,149 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
//sprawdź czy dane zostały przesłane w post, $_POST['date'] a także czy to jest data
if(!(strtotime($_POST["date"])!== false))
{
$_SESSION['innfoError'] = "Nioeprawidłowa data";
header("Location: editDaySelect.php");
exit();
}
//pobierz dane o tym dniu z bazy, połącz z tabelą statusy
$sql = "SELECT * FROM obecnosc, statusy WHERE obecnosc.kto = :kto AND obecnosc.data = :data AND obecnosc.status = statusy.id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['date'], PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
//sprawdź czy jest wpis w bazie dla danego dnia
if($work === false)
{
$_SESSION['innfoError'] = "Brak danych o tym dniu";
header("Location: editDaySelect.php");
exit();
}
//sprawdź czy sobota lub niedziela
if(date('N', strtotime($_POST['date'])) > 5)
{
$_SESSION['innfoError'] = "Nie można edytować weekendu";
header("Location: editDaySelect.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="editDaySelectFormEdit.php" method="post">
<table class="form">
<tr>
<td>
<label>Wybrany dzień</label>
</td>
<td>
<input type="date"value="<?php echo $_POST['date']; ?>" disabled>
<input type="hidden" name="date" value="<?php echo $_POST['date']; ?>">
</td>
</tr>
<tr>
<td>
<label for="start">Rozpoczęcie pracy*</label>
</td>
<td>
<input type="time" name="start" id="start" value="<?php echo $work['czasZaczecia']; ?>">
</td>
</tr>
<tr>
<td>
<label for="end">Zakończenie pracy*</label>
</td>
<td>
<input type="time" name="end" id="end" value="<?php echo $work['czasKonca']; ?>">
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<hr />
<label for="clearTime">Zaznacz tutaj aby wyczyścić czas pracy, <br />jeżeli status oznacza wolne zostanie automatycznie czas usunięty</label><br />
<input type="checkbox" name="clearTime" id="clearTime">
<hr />
</td>
</tr>
<tr>
<td>
<label for="status">Status</label>
</td>
<td>
<select name="status" id="status">
<?php
$sql = "SELECT * FROM statusy";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$statusy = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($statusy as $status)
{
if($status['id'] == $work['status'])
{
echo "<option value='".$status['id']."' selected>".$status['skrot']." - ".$status['nazwa']."</option>";
}
else
{
echo "<option value='".$status['id']."'>".$status['skrot']." - ".$status['nazwa']."</option>";
}
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<label for="zdalne">Praca zdalna (inna niż okazjonalna)</label>
<input type="checkbox" name="zdalne" id="zdalne" <?php if($work['zdalne'] == 1) echo "checked"; ?>>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<input type="submit" value="Edytuj">
</td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='panel.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

View File

@ -0,0 +1,97 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
//print_r($_POST);
//sprawdź czy dane zostały przesłane w post, data (DD-MM-RRRR), start (HH:MM), end (HH:MM), status (id statusu), zdalne (checkbox), clearTime (checkbox)
//zweryfikuj poprawność wszystkich danych, a także czy dany dzień jest w bazie
if(!(strtotime($_POST["date"])!== false))
{
$_SESSION['innfoError'] = "Nioeprawidłowa data1";
header("Location: editDaySelect.php");
exit();
}
if(!(strtotime($_POST["start"])!== false))
{
$_SESSION['innfoError'] = "Nioeprawidłowa godzina rozpoczęcia";
header("Location: editDaySelect.php");
exit();
}
if(!(strtotime($_POST["end"])!== false))
{
$_SESSION['innfoError'] = "Nioeprawidłowa godzina zakończenia";
header("Location: editDaySelect.php");
exit();
}
//clearTime może być tylko true lub false
$clearTime = false;
if(isset($_POST['clearTime']))
{
$clearTime = true;
}
$zdalne = false;
if(isset($_POST['zdalne']))
{
$zdalne = true;
}
//sprawdź czy jest wpis w bazie dla danego dnia
$sql = "SELECT * FROM obecnosc, statusy WHERE obecnosc.kto = :kto AND obecnosc.data = :data AND obecnosc.status = statusy.id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['date'], PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
//sprawdź czy jest wpis w bazie dla danego dnia
if($work === false)
{
$_SESSION['innfoError'] = "Brak danych o tym dniu";
header("Location: editDaySelect.php");
exit();
}
//jeżeli statusy oznaczaWolne ustaw clearTime na true
$sql = "SELECT * FROM statusy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST['status'], PDO::PARAM_INT);
$stmt->execute();
$status = $stmt->fetch(PDO::FETCH_ASSOC);
if($status['oznaczaWolne'] == 1)
{
$clearTime = true;
}
//jeżeli $status['oznaczaWolne'] == 0 to musi być ustawiony czas rozpoczęcia i zakończenia
if($status['oznaczaWolne'] == 0 && $clearTime == true)
{
$_SESSION['innfoError'] = "Nie można ustawić czasu rozpoczęcia i zakończenia na NULL";
header("Location: editDaySelect.php");
exit();
}
//sprawdź czy już jest zaakceptowane, takich nie można edytować
if($work['zaakceptowane'] == 1)
{
$_SESSION['innfoError'] = "Nie można edytować już zaakceptowanego dnia";
header("Location: editDaySelect.php");
exit();
}
//update
$sql = "UPDATE obecnosc SET czasZaczecia = :czasZaczecia, czasKonca = :czasKonca, status = :status, zdalne = :zdalne WHERE kto = :kto AND data = :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['date'], PDO::PARAM_STR);
$stmt->bindValue(':czasZaczecia', $_POST['start'], PDO::PARAM_STR);
$stmt->bindValue(':czasKonca', $_POST['end'], PDO::PARAM_STR);
$stmt->bindValue(':status', $_POST['status'], PDO::PARAM_INT);
$stmt->bindValue(':zdalne', $zdalne, PDO::PARAM_INT);
$stmt->execute();
//jeżeli clearTime jest true to ustaw czas rozpoczęcia i zakończenia na NULL
if($clearTime)
{
$sql = "UPDATE obecnosc SET czasZaczecia = NULL, czasKonca = NULL WHERE kto = :kto AND data = :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['date'], PDO::PARAM_STR);
$stmt->execute();
}
$_SESSION['innfoError'] = "Dane zostały zaktualizowane";
header("Location: editDaySelect.php");
exit();
?>

63
editPass.php 100644
View File

@ -0,0 +1,63 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
//sprawdź czy to jest metodą post
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
//sprawdź czy hasła są takie same
if($_POST['newPass'] != $_POST['newPass2'])
{
$_SESSION['innfoError'] = "Nowe hasła nie są takie same";
header("Location: pass.php");
exit();
}
//sprawdź czy hasło jest dłuższe niż 8 znaków
if(strlen($_POST['newPass']) < 8)
{
$_SESSION['innfoError'] = "Nowe hasło jest za krótkie";
header("Location: pass.php");
exit();
}
//sprawdź czy hasło jest różne od starego
if($_POST['newPass'] == $_POST['oldPass'])
{
$_SESSION['innfoError'] = "Nowe hasło musi być różne od starego";
header("Location: pass.php");
exit();
}
//sprawdź czy stare hasło jest poprawne
$sql = "SELECT * FROM uzytkownicy WHERE id = :id AND haslo = SHA1(:haslo)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':haslo', $_POST['oldPass'], PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user === false)
{
$_SESSION['innfoError'] = "Stare hasło jest niepoprawne";
header("Location: pass.php");
exit();
}
else
{
//zmień hasło
$sql = "UPDATE uzytkownicy SET haslo = :haslo WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':haslo', sha1($_POST['newPass']), PDO::PARAM_STR);
$stmt->bindValue(':id', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Hasło zostało zmienione";
header("Location: pass.php");
exit();
}
}
else
{
$_SESSION['innfoError'] = "Niepoprawne wywołanie strony";
header("Location: pass.php");
exit();
}
?>

12
footer.php 100644
View File

@ -0,0 +1,12 @@
<div id="puste"></div>
<?php
//You are not allowed to change this code. Exception is license given privately
?>
<div id="stopka">
Made by <a href="https://kry008.xyz">Kry008</a> &copy; <?php
if(date("Y") != "2023")
{
echo "2023 - ";
}
echo date("Y"); ?>
</div>

1
index.html 100644
View File

@ -0,0 +1 @@
<a href="_install.php"><button>START</button></a>

72
index.php.temp 100644
View File

@ -0,0 +1,72 @@
<?php
require_once 'db.php';
//require_once 'checkLogin.php';
session_start();
//jeżeli istnieje plik _install.php, usuń go
if(file_exists('_install.php'))
{
unlink('_install.php');
}
//login form
?>
<!DOCTYPE html>
<html>
<head>
<title>Rejestracja</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj</h1>
</header>
<main id="register">
<?php
if(@isset($_SESSION['error']))
{
echo '<p class="error">'.$_SESSION['error'].'</p>';
unset($_SESSION['error']);
}
?>
<table class="form">
<form method="post" action="login.php">
<tr>
<td>
<label>Login</label>
</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>
<label>Hasło</label>
</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="login" class="btn" value="Login"/>
</td>
</tr>
</form>
<tr>
<td colspan="2">
<a href="register.php"><button>Rejestracja</button></a>
</td>
</tr>
</table>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

106
login.php 100644
View File

@ -0,0 +1,106 @@
<?php
require_once 'db.php';
session_start();
/*
CREATE TABLE `uzytkownicy` (
`id` int(10) UNSIGNED NOT NULL,
`login` text NOT NULL,
`haslo` text NOT NULL,
`imie` text NOT NULL,
`nazwisko` text NOT NULL,
`dzial` int(10) UNSIGNED NOT NULL,
`przelozony` int(10) UNSIGNED DEFAULT NULL,
`akrywne` int(11) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `dzialy` (
`id` int(10) UNSIGNED NOT NULL,
`skrot` varchar(25) NOT NULL,
`nazwa` text NOT NULL,
`aktywne` int(11) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
*/
//validate login
if(isset($_POST['login']))
{
$login = $_POST['username'];
$password = $_POST['password'];
if(empty($login))
{
$_SESSION['error'] = "Username is required";
header("Location: index.php");
exit();
}
else if(empty($password))
{
$_SESSION['error'] = "Password is required";
header("Location: index.php");
exit();
}
else
{
$sql = "SELECT uzytkownicy.id AS id, login, imie, nazwisko, uzytkownicy.dzial AS dzial, `przelozony`, dzialy.nazwa AS nazwa, dzialy.skrot AS skrot FROM uzytkownicy, dzialy WHERE uzytkownicy.login = :login AND dzialy.id = uzytkownicy.dzial AND uzytkownicy.aktywne = 1 AND uzytkownicy.haslo = sha1(:password)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':login', $login, PDO::PARAM_STR);
$stmt->bindValue(':password', $password, PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user === false)
{
$_SESSION['error'] = "Zły login lub hasło lub użytkownik nie zaakceptowany przez przełożonego";
header("Location: index.php");
exit();
}
else
{
$_SESSION['user_id'] = $user['id'];
$_SESSION['user_login'] = $user['login'];
$_SESSION['user_imie'] = $user['imie'];
$_SESSION['user_nazwisko'] = $user['nazwisko'];
$_SESSION['user_dzial'] = $user['dzial'];
$_SESSION['user_przelozony'] = $user['przelozony'];
$sql = "SELECT * FROM uzytkownicy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_SESSION['user_przelozony'], PDO::PARAM_INT);
$stmt->execute();
$przelozony = $stmt->fetch(PDO::FETCH_ASSOC);
if($przelozony !== false)
{
$_SESSION['user_przelozony_imie'] = $przelozony['imie'];
$_SESSION['user_przelozony_nazwisko'] = $przelozony['nazwisko'];
}
else
{
$_SESSION['user_przelozony_imie'] = "Brak";
$_SESSION['user_przelozony_nazwisko'] = "Przełożonego";
}
$_SESSION['user_dzial_nazwa'] = $user['nazwa'];
$_SESSION['user_dzial_skrot'] = $user['skrot'];
$_SESSION['user_login_mark'] = 1;
/*
CREATE TABLE `admini` (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `kto` INT UNSIGNED NOT NULL , `odKiedy` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`id`)) ENGINE = InnoDB;
*/
$sql = "SELECT * FROM admini WHERE kto = :kto";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$admin = $stmt->fetch(PDO::FETCH_ASSOC);
if($admin !== false)
{
$_SESSION['user_admin'] = 1;
}
else
{
$_SESSION['user_admin'] = 0;
}
header("Location: panel.php");
}
}
}

9
logout.php 100644
View File

@ -0,0 +1,9 @@
<?php
//usuń wszystkie zmienne
session_unset();
//usuń sesję
session_destroy();
//przekieruj na stronę logowania
header('Location: index.php');
exit();
?>

28
nav.php 100644
View File

@ -0,0 +1,28 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
?>
<ol>
<?php
if($_SESSION['user_admin'] == 1)
{
?>
<li><a href="panel.php">Start</a></li>
<?php
}
else
{
?>
<li><a href="panel.php">🏠</a></li>
<?php
}
?>
<li><a href="showMonth.php">Pokaż miesiąc</a></li>
<li>Twój przełożony - <?php echo $_SESSION['user_przelozony_imie']." ".$_SESSION['user_przelozony_nazwisko']; ?></li>
<li><a href="pass.php">Zmień hasło</a></li>
<li><a href="logout.php">Wyloguj</a></li>
</ol>

201
panel.php 100644
View File

@ -0,0 +1,201 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
//print_r($_SESSION);
/*
CREATE TABLE `obecnosc` (
`id` int(10) UNSIGNED NOT NULL,
`kto` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`czasZaczecia` time DEFAULT NULL,
`czasKonca` time DEFAULT NULL,
`status` int(10) UNSIGNED NOT NULL,
`zaakceptowane` tinyint(4) NOT NULL DEFAULT 0,
`zdalne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
*/
$workStarted = 0;
$workEnded = 0;
//sprawdzenie czy dzisiaj już rozpoczęto pracę, czy dziś już zakończono pracę, ustaw odpowiednio zmienne
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND data = :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', date('Y-m-d'), PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
if($work === false)
{
$workStarted = 0;
$workEnded = 0;
}
else
{
if($work['czasZaczecia'] != NULL)
{
$workStarted = 1;
}
if($work['czasKonca'] != NULL)
{
$workEnded = 1;
}
$sql = "SELECT * FROM statusy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $work['status'], PDO::PARAM_INT);
$stmt->execute();
$status = $stmt->fetch(PDO::FETCH_ASSOC);
if($status['oznaczaWolne'] == 1)
{
$workStarted = 1;
$workEnded = 1;
}
}
//sprawdź czy jakiś pracownik czeka na aktywację i jest tego użytkownik przełożonym, ustaw zmienną $uzytkownicyWaiting na ilość
$sql = "SELECT * FROM uzytkownicy WHERE aktywne = 0 AND przelozony = :przelozony";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$uzytkownicyWaiting = $stmt->rowCount();
//pobierz listę id pracowników których przełożonym jest zalogowany użytkownik
$podlega = array();
$sql = "SELECT id FROM uzytkownicy WHERE przelozony = :przelozony AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$podlega = $stmt->fetchAll(PDO::FETCH_ASSOC);
$podlegaIlosc = $stmt->rowCount();
//print_r($podlega);
//sprawdź czy któryś z tych pracowników ma nie zaaakceptowane dni, jeżeli tak to ustaw zmienną $daysWaiting na ilość
$daysWaiting = 0;
foreach($podlega as $podlega)
{
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND zaakceptowane = 0 AND aktywne = 1 AND data < :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $podlega['id'], PDO::PARAM_INT);
$stmt->bindValue(':data', date('Y-m-d'), PDO::PARAM_STR);
$stmt->execute();
$daysWaiting += $stmt->rowCount();
}
//print_r($daysWaiting);
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<div id="info">
<?php
echo @$_SESSION["innfoError"];
$_SESSION["innfoError"] = "";
?>
</div>
<main id="start">
<?php
if($workStarted == 0)
{
?>
<a href="workStart.php">
<h3>Rozpocznij dzisiejszą pracę</h3>
</a>
<?php
}
?>
<?php
if($workStarted == 1 && $workEnded == 0)
{
?>
<a href="workEnd.php">
<h3>Zakończ dzisiejszą pracę</h3>
</a>
<?php
}
$y = date('Y');
$m = date('m');
//pokaż miesiąc wcześniej
if($m == 1)
{
$m = 12;
$y--;
}
else
{
$m--;
}
?>
<a href='showMonthForm.php?month=<?php echo $y."-".$m; ?>'>
<h3>Raport za poprzedni miesiąc</h3>
</a>
<a href="showMonth.php">
<h3>Raport miesięczny</h3>
</a>
<a href="addDay.php">
<h3>Dodaj inny dzień</h3>
</a>
<a href="addFreeDay.php">
<h3>Dodaj wolne (wszystkie formy)</h3>
</a>
<a href="editDaySelect.php">
<h3>Edytuj dzień</h3>
</a>
<?php
if($uzytkownicyWaiting > 0)
{
?>
<a href="activateWorker.php">
<h3>Aktywuj konta pracowników - <?php echo $uzytkownicyWaiting; ?></h3>
</a>
<?php
}
?>
<?php
if($podlegaIlosc > 0)
{
?>
<a href="allWorkers.php">
<h3>Drukuj listy pracowników</h3>
</a>
<?php
}
?>
<?php
if($daysWaiting > 0)
{
?>
<a href="waitingForAcceptsUser_form.php">
<h3>Oczekująca ilość dni na akceptację - <?php echo $daysWaiting; ?></h3>
</a>
<?php
}
?>
<?php
if($_SESSION['user_admin'] == 1)
{
?>
<a href="dictionaries.php">
<h3>Edytuj słowniki/ustawienia</h3>
</a>
<?php
}
?>
</main>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

73
pass.php 100644
View File

@ -0,0 +1,73 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="editPass.php" method="post">
<input type="hidden" name="username" value="<?php echo $_SESSION['user_login']; ?>">
<table class="form">
<tr>
<td>
<label for="oldPass">Stare hasło:</label>
</td>
<td>
<input type="password" name="oldPass" id="oldPass">
</td>
</tr>
<tr>
<td>
<label for="newPass">Nowe hasło:</label>
</td>
<td>
<input type="password" name="newPass" id="newPass">
</td>
</tr>
<tr>
<td>
<label for="newPass2">Powtórz nowe hasło:</label>
</td>
<td>
<input type="password" name="newPass2" id="newPass2">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="change" value="Zmień hasło">
</td>
</tr>
</table>
</form>
</main>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

79
passReset.php 100644
View File

@ -0,0 +1,79 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
$sql = "SELECT * FROM uzytkownicy WHERE aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$uzytkownicy = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="passReset_form.php" method="post">
<table class="form">
<tr>
<td>
<label for="user">Wybierz użytkownika</label>
</td>
<td>
<select name="user" id="user">
<?php
foreach($uzytkownicy as $user)
{
?>
<option value="<?php echo $user['id']; ?>"><?php echo $user['imie']." ".$user['nazwisko']." (".$user['login'].")"; ?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="passReset" value="Resetuj hasło">
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

94
passReset_form.php 100644
View File

@ -0,0 +1,94 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
$temp = "abcdedfghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789.!@#$%^&*()-?";
//stwórz 10 znakowe hasło
$haslo = substr(str_shuffle($temp), 0, 11);
//echo $haslo;
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['user']) && !empty($_POST['user']))
{
//UPDATE uzytkownicy SET haslo = SHA1(:haslo) WHERE id = :id"
$user = $_POST['user'];
$sql = "UPDATE uzytkownicy SET haslo = SHA1(:haslo) WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':haslo', $haslo, PDO::PARAM_STR);
$stmt->bindValue(':id', $user, PDO::PARAM_INT);
$stmt->execute();
//$_SESSION["innfoError"] = "Hasło użytkownika zostało zresetowane";
}
else
{
$_SESSION["innfoError"] = "Błąd przetwarzania danych";
header("Location: passReset.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<table class="form">
<tr>
<td colspan="2">
<h3>Hasło użytkownika zostało zresetowane</h3>
</td>
</tr>
<tr>
<td>
Nowe hasło:
</td>
<td>
<?php
echo $haslo;
?>
</td>
<tr>
<td colspan="2">
<a href="passReset.php">
<h3 style="text-align: center;">Wróć</h3>
</a>
</td>
</tr>
</table>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

177
print.php 100644
View File

@ -0,0 +1,177 @@
<?php
//print_r($_POST);
$kto = $_POST['user'];
$miesiac = $_POST['month']; //YYYY-MM
require_once 'db.php';
@session_start();
//pobierz dane o pracowniku
$sql = "SELECT * FROM uzytkownicy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $kto, PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
//pobierz dni z tabeli obecnosc dla pracownika
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $kto, PDO::PARAM_INT);
$stmt->bindValue(':data', $miesiac.'%', PDO::PARAM_STR);
$stmt->execute();
$days = $stmt->fetchAll(PDO::FETCH_ASSOC);
//pobierz dni wolne z dniwolne
$sql = "SELECT * FROM dniwolne WHERE data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $miesiac.'%', PDO::PARAM_STR);
$stmt->execute();
$dniWolne = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dniWolneArray = [];
foreach($dniWolne as $dzienWolny)
{
$dniWolneArray[] = $dzienWolny['data'];
}
$sql = "SELECT skrot FROM dzialy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $user['dzial'], PDO::PARAM_INT);
$stmt->execute();
$dzial = $stmt->fetch(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo $_POST['month']; ?> - ewidencja czasu - <?php echo $user['imie'].' '.$user['nazwisko']; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body onLoad="window.print()">
<main id="print">
<h2 style="font-size: xx-large;">
<?php
$mArray = ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec","Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"];
$month = $_POST['month'];
$month = explode('-', $month);
echo $mArray[$month[1]-1]." ".$month[0];
?>
</h2>
<div>
Imię i nazwisko: <b><?php echo $user['imie'].' '.$user['nazwisko']; ?></b><br>
Dział: <b><?php echo $dzial['skrot']; ?></b><br>
<?php
//sprawdź ilość dni pracy zdalnej w danym miesiącu
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND data LIKE :data AND zdalne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $kto, PDO::PARAM_INT);
$stmt->bindValue(':data', $miesiac.'%', PDO::PARAM_STR);
$stmt->execute();
$zdalnie = $stmt->rowCount();
?>
Ilość dni pracy zdalnej: <b><?php echo $zdalnie; ?></b>
<?php
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND zaakceptowane = 0 AND aktywne = 1 AND data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $kto, PDO::PARAM_INT);
$stmt->bindValue(':data', $miesiac.'%', PDO::PARAM_STR);
$stmt->execute();
$niezaakceptowane = $stmt->fetch(PDO::FETCH_ASSOC);
if($niezaakceptowane['COUNT(*)'] > 0)
{
?>
<br />
<span class="bigError"> niezaakceptowane dni pracy</span>
<?php
}
?>
</div>
<table class="month" style="margin: 0 0;">
<tr>
<th>Dzień</th>
<th>Czas pracy</th>
</tr>
<?php
//sprawdź ilość dni w miesiącu, następnie wykonaj pętlę tyle razy ile jest dni w miesiącu
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month[1], $month[0]);
for($i = 1; $i <= $daysInMonth; $i++)
{
//sprawdź czy jest wpis w bazie dla danego dnia
$sql = "SELECT * FROM obecnosc, statusy WHERE obecnosc.kto = :kto AND obecnosc.data = :data AND obecnosc.aktywne = 1 AND obecnosc.status = statusy.id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $kto, PDO::PARAM_INT);
$stmt->bindValue(':data', $month[0].'-'.$month[1].'-'.$i, PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
//sprawdź czy to sobota czy niedziela lub czy to dzień wolny
if(date('N', strtotime($month[0]."-".$month[1]."-".$i)) > 5 || in_array($month[0]."-".$month[1]."-".$i, $dniWolneArray))
{
echo "<tr class='weekend'>";
}
else
{
echo "<tr>";
}
if($work === false)
{
//nie ma wpisu w bazie
echo "<td>".$i."</td>";
echo "<td></td>";
}
else
{
//jest wpis w bazie
echo "<td>".$i."</td>";
if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
{
echo "<td>".$work['czasZaczecia']." - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
{
echo "<td>".$work['czasZaczecia']." - ";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
{
echo "<td> - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else
{
echo "<td>".$work['skrot']."";
//
}
if($work['zdalne'] == 1)
{
echo " - PZ";
}
else
{
echo "</td>";
}
}
echo "</tr>";
}
?>
</table>
</main>
<?php
require_once 'footer.php';
?>
</body>
<script>
//przejdź do panel.php po 5 sekundach
setTimeout(function(){ window.location.href = "panel.php"; }, 5000);
</script>
</html>

217
printWorker.php 100644
View File

@ -0,0 +1,217 @@
<?php
//Array ( [id] => 1 [month] => 2023-08 [printWorker] => Pokaż )
//notAccepted - checkbox
/*
CREATE TABLE `obecnosc` (
`id` int(10) UNSIGNED NOT NULL,
`kto` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`czasZaczecia` time DEFAULT NULL,
`czasKonca` time DEFAULT NULL,
`status` int(10) UNSIGNED NOT NULL,
`zaakceptowane` tinyint(4) NOT NULL DEFAULT 0,
`zdalne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `uzytkownicy` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`login` text NOT NULL,
`haslo` text NOT NULL,
`imie` text NOT NULL,
`nazwisko` text NOT NULL,
`dzial` int(10) UNSIGNED NOT NULL,
`przelozony` int(10) UNSIGNED DEFAULT NULL,
`aktywne` int(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
KEY `dzial` (`dzial`),
KEY `przelozony` (`przelozony`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
*/
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1 && $_POST["printWorker"] != "Pokaż")
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
//sprawdź czy istnieje
$sql = "SELECT * FROM uzytkownicy WHERE aktywne IN (1, 0) AND id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST['id'], PDO::PARAM_INT);
$stmt->execute();
$count = $stmt->rowCount();
if($count == 0)
{
$_SESSION['innfoError'] = "Nie ma takiego pracownika";
header("Location: printWorkerForm.php");
exit();
}
$user = $stmt->fetch(PDO::FETCH_ASSOC);
$year = substr($_POST['month'], 0, 4);
$month = substr($_POST['month'], 5, 2);
//pobierz skrót działu
$sql = "SELECT skrot FROM dzialy WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $user['dzial'], PDO::PARAM_INT);
$stmt->execute();
$dzial = $stmt->fetch(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo $month." - ".$year; ?> - ewidencja czasu - <?php echo $user['imie']." ".$user['nazwisko']; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body onLoad="window.print()">
<main id="print">
<h2 style="font-size: xx-large;">
<?php
$mArray = ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec","Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"];
echo $mArray[$month-1]." ".$year;
?>
</h2>
<div>
Imię i nazwisko: <b><?php echo $user['imie']." ".$user['nazwisko']; ?> </b><br>
Dział: <b><?php echo $dzial['skrot']; ?></b><br>
<?php
//sprawdź ilość dni pracy zdalnej w danym miesiącu
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND data LIKE :data AND zdalne = 1 AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $user['id'], PDO::PARAM_INT);
//dodaj zero wiodące do miesiąca
$m = $month;
if($m < 10 && strlen($m) < 2)
{
$m = "0".$m;
}
$stmt->bindValue(':data', $year."-".$m."%", PDO::PARAM_STR);
$stmt->execute();
$zdalne = $stmt->fetch(PDO::FETCH_ASSOC);
echo "Ilość dni pracy zdalnej: <b>".$zdalne['COUNT(*)']."</b>";
$notAccepted = 0;
if(isset($_POST['notAccepted']))
{
$notAccepted = 1;
}
if($notAccepted == 1)
{
//sprawdź czy są dni niezaakceptowane
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND zaakceptowane = 0 AND aktywne = 1 AND data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $year."-".$m."%", PDO::PARAM_STR);
$stmt->bindValue(':kto', $user['id'], PDO::PARAM_INT);
$stmt->execute();
$niezaakceptowane = $stmt->fetch(PDO::FETCH_ASSOC);
if($niezaakceptowane['COUNT(*)'] > 0)
{
?>
<br />
<span class="bigError"> niezaakceptowane dni pracy</span>
<?php
}
}
?>
</div>
<table class="month" style="margin: 0 0;">
<tr>
<th>Dzień</th>
<th>Czas pracy</th>
</tr>
<?php
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$sql = "SELECT * FROM dniwolne WHERE data LIKE :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $year."-".$m."%", PDO::PARAM_STR);
$stmt->execute();
$dniWolne = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dniWolneArray = [];
foreach($dniWolne as $dzienWolny)
{
$dniWolneArray[] = $dzienWolny['data'];
}
for($i = 1; $i <= $daysInMonth; $i++)
{
//sprawdź czy jest wpis w bazie dla danego dnia
$sql = "SELECT * FROM obecnosc, statusy WHERE obecnosc.kto = :kto AND obecnosc.data = :data AND obecnosc.aktywne = 1 AND obecnosc.status = statusy.id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $year."-".$m."-".$i, PDO::PARAM_STR);
$stmt->bindValue(':kto', $user['id'], PDO::PARAM_INT);
$stmt->execute();
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
if(date('N', strtotime($month[0]."-".$month[1]."-".$i)) > 5 || in_array($year."-".$m."-".$i, $dniWolneArray))
{
echo "<tr class=\"weekend\">";
}
else
{
echo "<tr>";
}
if($work === false)
{
//nie ma wpisu w bazie
echo "<td>".$i."</td>";
echo "<td></td>";
}
else
{
//jest wpis w bazie
echo "<td>".$i."</td>";
if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
{
echo "<td>".$work['czasZaczecia']." - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
{
echo "<td>".$work['czasZaczecia']." - ";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
{
echo "<td> - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else
{
echo "<td>".$work['skrot']."";
//
}
if($work['zdalne'] == 1)
{
echo " - PZ";
}
else
{
echo "</td>";
}
}
echo "</tr>";
}
?>
</table>
</main>
<?php
require_once 'footer.php';
?>
</body>
<script>
//Przejdź do strony printWorkerForm.php po 2 s
setTimeout(function(){
window.location.href = 'printWorkerForm.php';
}, 2000);
</script>
</html>

View File

@ -0,0 +1,97 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
//pobierz wszystkich pracowników, najpierw wyświetl aktywnych, potem nieaktywnych
$sql = "SELECT * FROM uzytkownicy WHERE aktywne IN (1, 0) ORDER BY aktywne DESC, nazwisko ASC";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$uzytkownicyArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="printWorker.php" method="post">
<table class="form">
<tr>
<td>Wybierz pracownika</td>
<td>
<select name="id">
<option disabled selected>Wybierz pracownika</option>
<?php
foreach($uzytkownicyArray as $user)
{
$aktywny = "nieaktywny";
if($user['aktywne'] == 1)
{
$aktywny = "aktywny";
}
echo "<option value='".$user['id']."'>".$user['nazwisko']." ".$user['imie']." - (".$aktywny.")</option>";
}
?>
</select>
</td>
</tr>
<!-- wybór miesiąca -->
<tr>
<td>Wybierz miesiąc</td>
<td>
<input type="month" name="month" value="<?php echo date('Y-m'); ?>">
</td>
</tr>
<tr>
<td colspan="2">
Pokaż czy niezaakceptowane dni?: <input type="checkbox" name="notAccepted" value="1">
</td>
<tr>
<td colspan="2"><input type="submit" name="printWorker" value="Pokaż"></td>
</tr>
<!-- anuluj -->
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='dictionaries.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

230
register.php 100644
View File

@ -0,0 +1,230 @@
<?php
require_once 'db.php';
@session_start();
/*
CREATE TABLE `uzytkownicy` (
`id` int(10) UNSIGNED NOT NULL,
`login` text NOT NULL,
`haslo` text NOT NULL,
`imie` text NOT NULL,
`nazwisko` text NOT NULL,
`dzial` int(10) UNSIGNED NOT NULL,
`przelozony` int(10) UNSIGNED DEFAULT NULL,
`aktywne` int(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `dzialy` (
`id` int(10) UNSIGNED NOT NULL,
`skrot` varchar(25) NOT NULL,
`nazwa` text NOT NULL,
`aktywne` int(11) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
*/
//Przełożony to id innego użytkownika, domyślnie aktywne = 0 do momentu aż przełożony zaakceptuje lub odrzuci (wówczas aktywne 2)
//Dział to id działu
//pozwól wybrać z list rozwijanych dział i przełożonych
//jeżeli POST
if($_SERVER['REQUEST_METHOD'] === 'POST')
{
//sprawdź czy wszystkie pola są wypełnione, hasło min 8 znaków, hasło = hasło2, login nie jest zajęty
$login = $_POST['login'];
$pass1 = $_POST['password'];
$pass2 = $_POST['password2'];
$imie = $_POST['imie'];
$nazwisko = $_POST['nazwisko'];
$dzial = $_POST['dzial'];
$przelozony = $_POST['przelozony'];
if($pass1 !== $pass2)
{
$_SESSION['error'] = "Hasła nie są takie same";
header("Location: register.php");
exit();
}
if(strlen($pass1) < 8)
{
$_SESSION['error'] = "Hasło musi mieć minimum 8 znaków";
header("Location: register.php");
exit();
}
if(empty($login))
{
$_SESSION['error'] = "Login jest wymagany";
header("Location: register.php");
exit();
}
if(empty($imie))
{
$_SESSION['error'] = "Imię jest wymagane";
header("Location: register.php");
exit();
}
if(empty($nazwisko))
{
$_SESSION['error'] = "Nazwisko jest wymagane";
header("Location: register.php");
exit();
}
if(empty($dzial))
{
$_SESSION['error'] = "Dział jest wymagany";
header("Location: register.php");
exit();
}
if(empty($przelozony))
{
$_SESSION['error'] = "Przełożony jest wymagany";
header("Location: register.php");
exit();
}
//sprawdź czy login jest zajęty
$sql = "SELECT * FROM uzytkownicy WHERE login = :login";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':login', $login, PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user !== false)
{
$_SESSION['error'] = "Login jest zajęty";
header("Location: register.php");
exit();
}
//dodaj użytkownika
$sql = "INSERT INTO uzytkownicy (login, haslo, imie, nazwisko, dzial, przelozony, aktywne) VALUES (:login, sha1(:haslo), :imie, :nazwisko, :dzial, :przelozony, 0)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':login', $login, PDO::PARAM_STR);
$stmt->bindValue(':haslo', $pass1, PDO::PARAM_STR);
$stmt->bindValue(':imie', $imie, PDO::PARAM_STR);
$stmt->bindValue(':nazwisko', $nazwisko, PDO::PARAM_STR);
$stmt->bindValue(':dzial', $dzial, PDO::PARAM_INT);
$stmt->bindValue(':przelozony', $przelozony, PDO::PARAM_INT);
$stmt->execute();
$_SESSION['error'] = "Użytkownik dodany";
header("Location: index.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Rejestracja</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj</h1>
</header>
<main id="register">
<?php
if(@isset($_SESSION['error']))
{
echo '<p class="error">'.$_SESSION['error'].'</p>';
unset($_SESSION['error']);
}
?>
<form action="register.php" method="post">
<table class="form">
<tr>
<td>
<label for="login">Login</label>
</td>
<td>
<input type="text" name="login" id="login" required>
</td>
</tr>
<tr>
<td>
<label for="password">Hasło</label>
</td>
<td>
<input type="password" name="password" id="password" required>
</td>
</tr>
<tr>
<td>
<label for="password">Powtórz hasło</label>
</td>
<td>
<input type="password" name="password2" id="password2" required>
</td>
</tr>
<tr>
<td>
<label for="imie">Imię</label>
</td>
<td>
<input type="text" name="imie" id="imie" required>
</td>
</tr>
<tr>
<td>
<label for="nazwisko">Nazwisko</label>
</td>
<td>
<input type="text" name="nazwisko" id="nazwisko" required>
</td>
</tr>
<tr>
<td>
<label for="dzial">Dział</label>
</td>
<td>
<select name="dzial" id="dzial">
<?php
$sql = "SELECT * FROM dzialy WHERE aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
while($dzial = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo "<option value=\"".$dzial['id']."\">".$dzial['nazwa']."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td>
<label for="przelozony">Przełożony</label>
</td>
<td>
<select name="przelozony" id="przelozony">
<?php
$sql = "SELECT * FROM uzytkownicy, dzialy WHERE uzytkownicy.aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
while($przelozony = $stmt->fetch(PDO::FETCH_ASSOC))
{
//dopisz skrót działu
echo "<option value=\"".$przelozony['id']."\">".$przelozony['imie']." ".$przelozony['nazwisko']." (".$przelozony['nazwa'].")</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Zarejestruj">
</td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='index.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

54
showMonth.php 100644
View File

@ -0,0 +1,54 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<form action="showMonthForm.php" method="get">
<table class="form">
<tr>
<td>
<label for="month">Pokaż miesiąc</label>
</td>
<td>
<input type="month" name="month" id="month" value="<?php echo date('Y-m'); ?>" max="<?php echo date('Y-m'); ?>">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Pokaż miesiąc">
</td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='panel.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

233
showMonthForm.php 100644
View File

@ -0,0 +1,233 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
/*
CREATE TABLE `obecnosc` (
`id` int(10) UNSIGNED NOT NULL,
`kto` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`czasZaczecia` time DEFAULT NULL,
`czasKonca` time DEFAULT NULL,
`status` int(10) UNSIGNED NOT NULL,
`zaakceptowane` tinyint(4) NOT NULL DEFAULT 0,
`zdalne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `statusy` (
`id` int(10) UNSIGNED NOT NULL,
`skrot` varchar(10) NOT NULL,
`nazwa` text NOT NULL,
`oznaczaWolne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(4) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `dniwolne` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `data` DATE NOT NULL , `nazwaSwieta` TEXT NOT NULL , `aktywne` INT(1) NOT NULL DEFAULT '1' , PRIMARY KEY (`id`)) ENGINE = InnoDB;
*/
// Lp | Numer Dnia | Czas rozpoczęcia - Czas zakończenia | Status (z tabeli statusy XX - Nazwa) | Zdalne | Zaakceptowane
//nagłówek nad tabelą MIESIĄC - ROK
//poniżej ilość dni pracy zdalnej w danym miesiącu
//pokaż w tabeli dany miesiąc, jeżeli na dany dzień nie ma wpisu zostaw puste pole godzina i czas pracy
// dane podawane przez $_GET['month'] = 2023-08
//dla soboty i niedzieli dodaj klasę weekend
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="monthShow">
<div id="doPodzialu">
<h2>
<?php
if(isset($_GET['month']))
{
$mArray = ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec","Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"];
$month = $_GET['month'];
$month = explode('-', $month);
echo $mArray[$month[1]-1]." ".$month[0];
}
?>
</h2>
<div class="addInfo">
Imię i nazwisko: <b><?php echo $_SESSION['user_imie']." ".$_SESSION['user_nazwisko']; ?> </b><br>
Dział: <b><?php echo $_SESSION['user_dzial_nazwa']; ?></b><br>
<?php
//sprawdź ilość dni pracy zdalnej w danym miesiącu
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND data LIKE :data AND zdalne = 1 AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
//dodaj zero wiodące do miesiąca
$m = $month[1];
if($m < 10 && strlen($m) < 2)
{
$m = "0".$m;
}
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->execute();
$zdalne = $stmt->fetch(PDO::FETCH_ASSOC);
echo "Ilość dni pracy zdalnej: <b>".$zdalne['COUNT(*)']."</b>";
//sprawdź czy są dni niezaakceptowane
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND zaakceptowane = 0 AND aktywne = 1 AND data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$niezaakceptowane = $stmt->fetch(PDO::FETCH_ASSOC);
if($niezaakceptowane['COUNT(*)'] > 0)
{
?>
<br />
<span class="bigError">Masz niezaakceptowane dni pracy</span>
<?php
}
?>
</div>
<table class="month">
<tr>
<th>Dzień</th>
<th>Czas pracy</th>
</tr>
<?php
//sprawdź ilość dni w miesiącu, następnie wykonaj pętlę tyle razy ile jest dni w miesiącu
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month[1], $month[0]);
//pobierz dni wolne na dany miesiąc (o ile są)
$sql = "SELECT * FROM dniwolne WHERE data LIKE :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->execute();
$dniWolne = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dniWolneArray = [];
foreach($dniWolne as $dzienWolny)
{
$dniWolneArray[] = $dzienWolny['data'];
}
for($i = 1; $i <= $daysInMonth; $i++)
{
//sprawdź czy jest wpis w bazie dla danego dnia
$sql = "SELECT * FROM obecnosc, statusy WHERE obecnosc.kto = :kto AND obecnosc.data = :data AND obecnosc.aktywne = 1 AND obecnosc.status = statusy.id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $month[0]."-".$month[1]."-".$i, PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
//sprawdź czy sobota lub niedziela
if(date('N', strtotime($month[0]."-".$month[1]."-".$i)) > 5 || in_array($month[0]."-".$month[1]."-".$i, $dniWolneArray))
{
echo "<tr class='weekend'>";
}
else
{
echo "<tr>";
}
if($work === false)
{
//nie ma wpisu w bazie
echo "<td>".$i."</td>";
echo "<td></td>";
}
else
{
//jest wpis w bazie
echo "<td>".$i;
//jeżeli niezaakceptowane ❌
if($work['zaakceptowane'] == 0)
{
echo "";
}
else
{
echo " ✔️";
}
echo "</td>";
if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
{
echo "<td>".$work['czasZaczecia']." - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
{
echo "<td>".$work['czasZaczecia']." - ";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
{
echo "<td> - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else
{
echo "<td>".$work['skrot']."";
//
}
if($work['zdalne'] == 1)
{
echo " - PZ";
}
else
{
echo "</td>";
}
}
echo "</tr>";
}
?>
</table>
</div>
<div id="legenda">
<a href="showMonthFormPrint.php?month=<?php echo $_GET['month']; ?>" target="_blank">
<button>Wydrukuj</button>
</a>
<a href="showMonth.php">
<button>Wróć</button>
</a>
<?php
//Wypisz legendę z tabeli statusy
$sql = "SELECT * FROM statusy WHERE aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$statusy = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<h2>Legenda</h2>";
echo "<table>";
foreach($statusy as $status)
{
echo "<tr>";
echo "<td>".$status['skrot']."</td>";
echo "<td>".$status['nazwa']."</td>";
echo "</tr>";
}
echo "</table>";
?>
</div>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

View File

@ -0,0 +1,186 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
/*
CREATE TABLE `obecnosc` (
`id` int(10) UNSIGNED NOT NULL,
`kto` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`czasZaczecia` time DEFAULT NULL,
`czasKonca` time DEFAULT NULL,
`status` int(10) UNSIGNED NOT NULL,
`zaakceptowane` tinyint(4) NOT NULL DEFAULT 0,
`zdalne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `statusy` (
`id` int(10) UNSIGNED NOT NULL,
`skrot` varchar(10) NOT NULL,
`nazwa` text NOT NULL,
`oznaczaWolne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(4) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
*/
// Lp | Numer Dnia | Czas rozpoczęcia - Czas zakończenia | Status (z tabeli statusy XX - Nazwa) | Zdalne | Zaakceptowane
//nagłówek nad tabelą MIESIĄC - ROK
//poniżej ilość dni pracy zdalnej w danym miesiącu
//pokaż w tabeli dany miesiąc, jeżeli na dany dzień nie ma wpisu zostaw puste pole godzina i czas pracy
// dane podawane przez $_GET['month'] = 2023-08
//dla soboty i niedzieli dodaj klasę weekend
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo $_GET['month']; ?> - ewidencja czasu - <?php echo $_SESSION['user_imie']." ".$_SESSION['user_nazwisko']; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body onLoad="window.print()">
<main id="print">
<h2 style="font-size: xx-large;">
<?php
if(isset($_GET['month']))
{
$mArray = ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec","Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"];
$month = $_GET['month'];
$month = explode('-', $month);
echo $mArray[$month[1]-1]." ".$month[0];
}
?>
</h2>
<div>
Imię i nazwisko: <b><?php echo $_SESSION['user_imie']." ".$_SESSION['user_nazwisko']; ?> </b><br>
Dział: <b><?php echo $_SESSION['user_dzial_nazwa']; ?></b><br>
<?php
//sprawdź ilość dni pracy zdalnej w danym miesiącu
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND data LIKE :data AND zdalne = 1 AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
//dodaj zero wiodące do miesiąca
$m = $month[1];
if($m < 10 && strlen($m) < 2)
{
$m = "0".$m;
}
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->execute();
$zdalne = $stmt->fetch(PDO::FETCH_ASSOC);
echo "Ilość dni pracy zdalnej: <b>".$zdalne['COUNT(*)']."</b>";
//sprawdź czy są dni niezaakceptowane
$sql = "SELECT COUNT(*) FROM obecnosc WHERE kto = :kto AND zaakceptowane = 0 AND aktywne = 1 AND data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$niezaakceptowane = $stmt->fetch(PDO::FETCH_ASSOC);
if($niezaakceptowane['COUNT(*)'] > 0)
{
?>
<br />
<span class="bigError">Masz niezaakceptowane dni pracy</span>
<?php
}
?>
</div>
<table class="month" style="margin: 0 0;">
<tr>
<th>Dzień</th>
<th>Czas pracy</th>
</tr>
<?php
//sprawdź ilość dni w miesiącu, następnie wykonaj pętlę tyle razy ile jest dni w miesiącu
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month[1], $month[0]);
for($i = 1; $i <= $daysInMonth; $i++)
{
//pobierz dni wolne na dany miesiąc (o ile są)
$sql = "SELECT * FROM dniwolne WHERE data LIKE :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $month[0]."-".$m."%", PDO::PARAM_STR);
$stmt->execute();
$dniWolne = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dniWolneArray = [];
foreach($dniWolne as $dzienWolny)
{
$dniWolneArray[] = $dzienWolny['data'];
}
//sprawdź czy jest wpis w bazie dla danego dnia
$sql = "SELECT * FROM obecnosc, statusy WHERE obecnosc.kto = :kto AND obecnosc.data = :data AND obecnosc.aktywne = 1 AND obecnosc.status = statusy.id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', $month[0]."-".$month[1]."-".$i, PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
//sprawdź czy sobota lub niedziela
if(date('N', strtotime($month[0]."-".$month[1]."-".$i)) > 5 || in_array($month[0]."-".$month[1]."-".$i, $dniWolneArray))
{
echo "<tr class='weekend'>";
}
else
{
echo "<tr>";
}
if($work === false)
{
//nie ma wpisu w bazie
echo "<td>".$i."</td>";
echo "<td></td>";
}
else
{
//jest wpis w bazie
echo "<td>".$i."</td>";
if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
{
echo "<td>".$work['czasZaczecia']." - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
{
echo "<td>".$work['czasZaczecia']." - ";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
{
echo "<td> - ".$work['czasKonca']."";
if($work['skrot'] != "OB")
{
echo " - ".$work['skrot']."";
}
}
else
{
echo "<td>".$work['skrot']."";
//
}
if($work['zdalne'] == 1)
{
echo " - PZ";
}
else
{
echo "</td>";
}
}
echo "</tr>";
}
?>
</table>
</main>
<?php
require_once 'footer.php';
?>
</body>
<script>
//zamknij kartę po 5 sekundach
setTimeout(function(){ window.close(); }, 5000);
</script>
</html>

111
statAdd.php 100644
View File

@ -0,0 +1,111 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST["statAdd"]))
{
//sprawdź czy podany skrot i nazwa nie jest już wpisany do bazy
$skrot = $_POST['skrot'];
$nazwa = $_POST['nazwa'];
$sql = "SELECT * FROM statusy WHERE skrot = :skrot OR nazwa = :nazwa";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':skrot', $skrot, PDO::PARAM_STR);
$stmt->bindValue(':nazwa', $nazwa, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
if($count > 0)
{
$_SESSION['innfoError'] = "Podany skrot lub nazwa jest już w bazie";
header("Location: statAdd.php");
exit();
}
$oznaczaWolne = 0;
if(isset($_POST['oznaczaWolne']))
{
$oznaczaWolne = 1;
}
$aktywne = 0;
if(isset($_POST['aktywne']))
{
$aktywne = 1;
}
$sql = "INSERT INTO statusy (skrot, nazwa, oznaczaWolne, aktywne) VALUES (:skrot, :nazwa, :oznaczaWolne, :aktywne)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':skrot', $skrot, PDO::PARAM_STR);
$stmt->bindValue(':nazwa', $nazwa, PDO::PARAM_STR);
$stmt->bindValue(':oznaczaWolne', $oznaczaWolne, PDO::PARAM_INT);
$stmt->bindValue(':aktywne', 1, PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Dodano status";
header("Location: dictionaries.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="statAdd.php" method="post">
<table class="form">
<tr>
<td>Skrot</td>
<td><input type="text" name="skrot" required></td>
</tr>
<tr>
<td>Nazwa</td>
<td><input type="text" name="nazwa" required></td>
</tr>
<tr>
<td>Oznacza wolne</td>
<td><input type="checkbox" name="oznaczaWolne"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="statAdd" value="Dodaj"></td>
</tr>
<!-- anuluj -->
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='dictionaries.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

110
statDel.php 100644
View File

@ -0,0 +1,110 @@
<?php
/*
CREATE TABLE IF NOT EXISTS `statusy` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`skrot` varchar(10) NOT NULL,
`nazwa` text NOT NULL,
`oznaczaWolne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(4) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
UNIQUE KEY `skrot` (`skrot`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
*/
//nie wyświetlaj statusu o id 1 (zabezpieczony przed usunięciem)
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
if($_SESSION['user_admin'] != 1)
{
//redirect to panel.php
$_SESSION["innfoError"] = "Brak uprawnień do tej strony";
header("Location: panel.php");
exit();
}
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST["statDel"]))
{
//sprawdź czy nie jest to status 1
$id = $_POST['id'];
if($id == 1)
{
$_SESSION['innfoError'] = "Nie można usunąć tego statusu";
header("Location: dictionaries.php");
exit();
}
$sql = "UPDATE statusy SET aktywne = 0 WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Usunięto status";
header("Location: dictionaries.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="statDel.php" method="post">
<table class="form">
<tr>
<td>Wybierz status</td>
<td>
<select name="id">
<?php
$sql = "SELECT * FROM statusy WHERE aktywne = 1 AND id != 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo "<option value=\"".$row['id']."\">".$row['skrot']." - ".$row['nazwa']."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="statDel" value="Usuń status">
</td>
</tr>
<!-- anuluj -->
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='dictionaries.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

414
style.css 100644
View File

@ -0,0 +1,414 @@
* {
margin: 0;
padding: 0;
font-size: 1.18rem;
text-decoration: none;
font-family: 'Ubuntu', sans-serif;
}
body {
-webkit-print-color-adjust: exact !important;
print-color-adjust: exact !important;
}
::selection {
background-color: rgb(135, 250, 160);
color: white;
text-decoration: underline;
}
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background-color: rgb(255, 255, 255);
}
::-webkit-scrollbar-thumb {
background-color: rgb(135, 250, 160);
}
body {
padding: 15px;
font-size: 1.3rem;
}
a {
color: black;
transition: 0.2s;
}
a:hover {
color: rgb(135, 250, 160);
}
nav {
width: 97%;
margin: 0 auto;
padding: 4px;
border-bottom: 1px solid rgb(222, 222, 222);
font-weight: bold;
}
nav ol {
list-style: none;
display: flex;
flex-direction: row;
justify-content: space-around;
}
nav ol li {
min-width: 85px;
padding: 2px;
margin: 3px;
border-radius: 5px;
text-align: center;
}
header {
width: 97%;
margin: 0 auto;
padding: 4px;
}
header h1 {
text-align: center;
font-size: 3rem;
}
#info {
width: 97%;
margin: 0 auto;
padding: 5px;
}
main#start {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
width: 97%;
margin: 0 auto;
background-color: rgba(252, 252, 252, 0.5);
padding: 5px;
border: 1px solid rgb(222, 222, 222);
border-radius: 5px;
}
main#start a {
width: 23%;
min-width: 250px;
height: 150px;
margin: 5px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-decoration: none;
transition: .2s;
padding: 10px 5px;
border-radius: 5px;
border: 1px solid black;
font-weight: bolder;
}
main#start a:hover {
background-color: rgb(135, 250, 160);
color: white;
border: 1px solid white;
}
main#start a h3 {
width: 100%;
text-align: center;
font-size: larger;
}
main#work {
width: 97%;
margin: 0 auto;
padding: 5px;
}
main#work table.form {
min-width: 450px;
margin: 0 auto;
padding: 5px;
border: 1px solid rgb(222, 222, 222);
border-radius: 5px;
}
main#work table.form tr {
margin: 0 auto;
padding: 5px;
}
main#work table.form tr td {
margin: 0 auto;
padding: 5px;
}
main#work table.form tr td input[type="submit"] {
width: 100%;
margin: 0 auto;
padding: 5px;
border-radius: 5px;
border: 1px solid black;
background-color: white;
font-weight: bolder;
transition: .2s;
}
main#work table.form tr td input[type="submit"]:hover {
background-color: rgb(135, 250, 160);
color: white;
border: 1px solid white;
}
#monthShow {
text-align: center;
}
#monthShow table.month {
margin: 0 auto;
border-collapse: collapse;
width: 100%;
max-width: 20cm;
}
#monthShow table.month td,
#monthShow table.month th {
padding: 4px;
border: 1px solid black;
text-align: center;
vertical-align: middle;
}
#monthShow table.month .weekend {
background-color: rgba(72, 110, 192, 1);
}
#monthShow table.month th {
background-color: rgb(123, 211, 94)
}
#monthShow #doPodzialu {
width: 74%;
float: left;
}
#monthShow #legenda {
width: 24%;
float: right;
}
#monthShow #legenda table {
margin: 5px auto;
border-collapse: collapse;
}
#monthShow #legenda table td {
padding: 4px;
border: 1px solid black;
text-align: center;
vertical-align: middle;
}
#monthShow #legenda button {
width: 80%;
}
.cancel {
width: 100%;
}
#monthShow #legenda button,
.cancel {
margin: 5px auto;
padding: 5px;
border-radius: 5px;
border: 1px solid black;
background-color: white;
font-weight: bolder;
transition: .2s;
}
#monthShow #legenda button:hover,
.cancel:hover {
background-color: rgb(135, 250, 160);
color: white;
border: 1px solid white;
}
#print table.month {
margin: 0 auto;
border-collapse: collapse;
}
#print table.month td,
#print table.month th {
padding: 0 4px;
font-size: 16px;
border: 1px solid black;
text-align: center;
vertical-align: middle;
}
#print table.month .weekend {
background-color: rgba(72, 110, 192, 1);
}
#print table.month th {
background-color: rgb(123, 211, 94)
}
#puste {
clear: both;
height: 50px;
}
#stopka {
height: 50px;
position: fixed;
bottom: 0;
width: 100%;
text-align: center;
background-color: rgba(252, 252, 252, 1);
}
#stopka a {
text-decoration: underline;
}
main#register {
width: 97%;
margin: 0 auto;
padding: 5px;
}
main#register table.form {
min-width: 450px;
margin: 0 auto;
padding: 5px;
border: 1px solid rgb(222, 222, 222);
border-radius: 5px;
}
main#register table.form tr {
margin: 0 auto;
padding: 5px;
}
main#register table.form tr td {
margin: 0 auto;
padding: 5px;
}
main#register table.form tr td input,
main#register table.form tr td select {
width: 99%;
}
main#register table.form tr td input[type="submit"],
main#register table.form tr td button {
width: 100%;
margin: 0 auto;
padding: 5px;
border-radius: 5px;
border: 1px solid black;
background-color: white;
font-weight: bolder;
transition: .2s;
}
main#register table.form tr td input[type="submit"]:hover,
main#register table.form tr td button:hover {
background-color: rgb(135, 250, 160);
color: white;
border: 1px solid white;
}
main#uzytkownicy {
width: 97%;
margin: 0 auto;
padding: 5px;
}
main#uzytkownicy table {
min-width: 550px;
margin: 0 auto;
padding: 5px;
border: 1px solid rgb(222, 222, 222);
border-radius: 5px;
border-collapse: collapse;
}
main#uzytkownicy table tr {
margin: 0 auto;
padding: 5px;
border: 1px solid black;
}
main#uzytkownicy table tr td,
main#uzytkownicy table tr th {
margin: 0 auto;
padding: 5px;
text-align: center;
}
main#uzytkownicy table tr td:hover,
main#uzytkownicy table tr:hover,
main#uzytkownicy table tr th:hover {
background-color: rgba(155, 155, 155, 0.187);
}
main#uzytkownicy table tr td button {
width: 100%;
margin: 0 auto;
padding: 2px;
border-radius: 5px;
border: 1px solid black;
background-color: white;
font-weight: bolder;
transition: .2s;
}
main#uzytkownicy table tr td button:hover {
background-color: rgb(135, 250, 160);
color: white;
border: 1px solid white;
}
/* Detect is printing? */
@media print {
#puste {
clear: both;
height: .5cm;
}
#stopka,
#stopka a {
font-size: 7px;
color: #fffffe;
}
#stopka {
height: .5cm;
background-color: white;
}
table.month {
width: 10cm;
}
}
.bigError
{
color: red;
font-size: 2rem;
font-weight: bold;
}

View File

@ -0,0 +1,90 @@
<?php
require_once 'db.php';
@session_start();
//sprawdź czy użytkownik jest przełożonym tego pracownik $_POST["user"]
$sql = "SELECT * FROM uzytkownicy WHERE id = :id AND przelozony = :przelozony";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST["user"], PDO::PARAM_INT);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user === false)
{
$_SESSION["innfoError"] = "Nie jesteś przełożonym tego pracownika";
header("Location: panel.php");
exit();
}
else
{
//sprawdź jakie miesiące mają niezaakceptowane dni, wpisz do zmiennej $months w formacie YYYY-MM (z zerem wiodącym)
$months = array();
$sql = "SELECT DISTINCT DATE_FORMAT(data, '%Y-%m') AS miesiac FROM obecnosc WHERE kto = :kto AND zaakceptowane = 0 AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_POST["user"], PDO::PARAM_INT);
$stmt->execute();
$months = $stmt->fetchAll(PDO::FETCH_ASSOC);
//print_r($months);
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="waitingForAcceptsShow.php" method="post">
<table class="form">
<tr>
<td>
<label for="mm">Pokaż miesiąc:</label>
</td>
<td>
<select name="mm" id="mm">
<?php
foreach($months as $month)
{
echo '<option value="'.$month['miesiac'].'">'.$month['miesiac'].'</option>';
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="user" value="<?php echo $_POST['user']; ?>">
<input type="submit" name="show" value="Pokaż">
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

View File

@ -0,0 +1,221 @@
<?php
require_once 'db.php';
@session_start();
//sprawdź czy zalogowany użytkownik jest przełożonym $_POST["user"]
$sql = "SELECT * FROM uzytkownicy WHERE id = :id AND przelozony = :przelozony";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST["user"], PDO::PARAM_INT);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
if($stmt->rowCount() === 0)
{
$_SESSION["innfoError"] = "Nie jesteś przełożonym tego użytkownika";
header("Location: panel.php");
exit();
}
else
{
//pobierz dane z tabeli uzytkownicy, dzialy
$sql = "SELECT uzytkownicy.id AS id, login, imie, nazwisko, uzytkownicy.dzial AS dzial, `przelozony`, dzialy.nazwa AS nazwa, dzialy.skrot AS skrot FROM uzytkownicy, dzialy WHERE uzytkownicy.id = :id AND dzialy.id = uzytkownicy.dzial AND uzytkownicy.aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $_POST["user"], PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
//print_r($user);
//pobierz wszystkie obecności z danego miesiąca
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND aktywne = 1 AND data LIKE :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_POST["user"], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['mm'].'%', PDO::PARAM_STR);
$stmt->execute();
$obecnosci = $stmt->fetchAll(PDO::FETCH_ASSOC);
//print_r($obecnosci);
//$_POST['mm'] = YYYY-MM
//pobierz ilość dni w miesiącu
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, explode('-', $_POST['mm'])[1], explode('-', $_POST['mm'])[0]);
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="monthShow">
<div id="doPodzialu">
<h2>
<?php
if(isset($_GET['month']))
{
$mArray = ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec","Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"];
$month = $_GET['month'];
$month = explode('-', $month);
echo $mArray[$month[1]-1]." ".$month[0];
}
?>
</h2>
<div class="addInfo">
<?php
echo @$_SESSION["innfoError"];
$_SESSION["innfoError"] = "";
?>
</div>
Imię i nazwisko: <b><?php echo $user['imie']." ".$user['nazwisko']; ?></b><br>
Dział: <b><?php echo $user['nazwa']; ?></b><br>
<?php
//sprawdź ilość dni pracy zdalnej w danym miesiącu
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND aktywne = 1 AND data LIKE :data AND zdalne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_POST["user"], PDO::PARAM_INT);
$stmt->bindValue(':data', $_POST['mm'].'%', PDO::PARAM_STR);
$stmt->execute();
$zdalnie = $stmt->rowCount();
echo "Ilość dni pracy zdalnej: <b>".$zdalnie."</b>";
?>
<table class="month">
<tr>
<th>Dzień</th>
<th>Czas pracy</th>
</tr>
<?php
$sql = "SELECT * FROM dniwolne WHERE data LIKE :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':data', $_POST['mm'].'%', PDO::PARAM_STR);
$stmt->execute();
$dniWolne = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dniWolneArray = [];
foreach($dniWolne as $dzienWolny)
{
$dniWolneArray[] = $dzienWolny['data'];
}
for($i = 1; $i <= $daysInMonth; $i++)
{
//sprawdź czy jest wpis w bazie dla danego dnia
$day = $_POST['mm']."-".($i < 10 ? "0".$i : $i);
$sql = "SELECT * FROM obecnosc, statusy WHERE obecnosc.kto = :kto AND obecnosc.data = :data AND obecnosc.aktywne = 1 AND obecnosc.status = statusy.id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_POST["user"], PDO::PARAM_INT);
$stmt->bindValue(':data', $day, PDO::PARAM_STR);
$stmt->execute();
$obecnosc = $stmt->fetch(PDO::FETCH_ASSOC);
//sprawdź czy sobota lub niedziela
$dayOfWeek = date('w', strtotime($day));
if($dayOfWeek == 0 || $dayOfWeek == 6)
{
echo '<tr class="weekend">';
}
else if(in_array($day, $dniWolneArray))
{
echo '<tr class="weekend">';
}
else
{
echo '<tr>';
}
//brak wpisu w bazie
if($obecnosc === false)
{
echo '<td>'.$i.'</td>';
echo '<td></td>';
}
else
{
//jest wpis w bazie
echo "<td>".$i;
//jeżeli niezaakceptowane ❌
if($obecnosc['zaakceptowane'] == 0)
{
echo "";
}
//jeżeli zaakceptowane ✔️
else if($obecnosc['zaakceptowane'] == 1)
{
echo " ✔️";
}
echo "</td>";
if($obecnosc['czasZaczecia'] != NULL && $obecnosc['czasKonca'] != NULL)
{
echo "<td>".$obecnosc['czasZaczecia']." - ".$obecnosc['czasKonca']."";
if($obecnosc['skrot'] != "OB")
{
echo " - ".$obecnosc['skrot']."";
}
}
else if($obecnosc['czasZaczecia'] != NULL && $obecnosc['czasKonca'] == NULL)
{
echo "<td>".$obecnosc['czasZaczecia']." - ";
if($obecnosc['skrot'] != "OB")
{
echo " - ".$obecnosc['skrot']."";
}
}
else if($obecnosc['czasZaczecia'] == NULL && $obecnosc['czasKonca'] != NULL)
{
echo "<td> - ".$obecnosc['czasKonca']."";
if($obecnosc['skrot'] != "OB")
{
echo " - ".$obecnosc['skrot']."";
}
}
else
{
echo "<td>".$obecnosc['skrot']."";
//
}
if($obecnosc['zdalne'] == 1)
{
echo " - PZ";
}
else
{
echo "</td>";
}
}
echo "</tr>";
}
?>
</table>
</div>
<div id="legenda">
<div style="height: 20px;"></div>
<h3>Opcje</h3>
<form action="accept.php" method="post">
<input type="hidden" name="user" value="<?php echo $_POST['user']; ?>">
<input type="hidden" name="month" value="<?php echo $_POST['mm']; ?>">
<button type="submit" name="akceptuj">Akceptuj</button>
</form>
<form action="print.php" method="post">
<input type="hidden" name="user" value="<?php echo $_POST['user']; ?>">
<input type="hidden" name="month" value="<?php echo $_POST['mm']; ?>">
<button type="submit" name="drukuj">Drukuj</button>
</form>
</div>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>
<?php
}
//print_r($_POST);

View File

@ -0,0 +1,89 @@
<?php
require_once 'db.php';
@session_start();
//pobierz listę danych pracowników których przełożonym jest zalogowany użytkownik
$podlega = array();
$sql = "SELECT id, imie, nazwisko FROM uzytkownicy WHERE przelozony = :przelozony AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->execute();
$podlega = $stmt->fetchAll(PDO::FETCH_ASSOC);
//print_r($podlega);
//sprawdź czy któryś z tych pracowników ma nie zaaakceptowane dni
$uzytkownicyWithDaysWaiting = array();
foreach($podlega as $podlega)
{
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND zaakceptowane = 0 AND aktywne = 1 AND data < :data";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $podlega['id'], PDO::PARAM_INT);
$stmt->bindValue(':data', date('Y-m-d'), PDO::PARAM_STR);
$stmt->execute();
$daysWaiting = $stmt->rowCount();
if($daysWaiting > 0)
{
$uzytkownicyWithDaysWaiting[] = $podlega;
}
}
//print_r($uzytkownicyWithDaysWaiting);
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<div class="error">
<?php
if(isset($_SESSION['innfoError']))
{
echo $_SESSION['innfoError'];
unset($_SESSION['innfoError']);
}
?>
</div>
<form action="waitingForAcceptsMonth_form.php" method="post">
<table class="form">
<tr>
<td>
<label for="user">Wybierz pracownika:</label>
</td>
<td>
<select name="user" id="user">
<?php
foreach($uzytkownicyWithDaysWaiting as $user)
{
echo '<option value="'.$user['id'].'">'.$user['imie'].' '.$user['nazwisko'].'</option>';
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="show" value="Pokaż">
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

55
workEnd.php 100644
View File

@ -0,0 +1,55 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
//print_r($_SESSION);
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<form action="workEnd_form.php" method="post">
<table class="form">
<tr>
<td>
<label for="end">Zakończenie pracy</label>
</td>
<td>
<input type="time" name="end" id="end" value="<?php echo date('H:00'); ?>" max="<?php echo date('TH:i'); ?>">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Zakończ pracę">
</td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='panel.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

75
workEnd_form.php 100644
View File

@ -0,0 +1,75 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
/*
CREATE TABLE `obecnosc` (
`id` int(10) UNSIGNED NOT NULL,
`kto` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`czasZaczecia` time DEFAULT NULL,
`czasKonca` time DEFAULT NULL,
`status` int(10) UNSIGNED NOT NULL,
`zaakceptowane` tinyint(4) NOT NULL DEFAULT 0,
`zdalne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
*/
//dane za pomocą post przekazywane $_POST['end']
//sprawdź czy dziś już zaczął pracę, sprawdź czy już dziś nie zakończył pracę, sprawdź czy zakończenie pracy jest później niż rozpoczęcie
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND data = :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', date('Y-m-d'), PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
if($work === false)
{
$_SESSION['innfoError'] = "Dziś nie rozpoczęto pracy";
header("Location: panel.php");
exit();
}
else
{
if($work['czasZaczecia'] == NULL)
{
$_SESSION['innfoError'] = "Dziś nie rozpoczęto pracy";
header("Location: panel.php");
exit();
}
else
{
if($work['czasKonca'] != NULL)
{
$_SESSION['innfoError'] = "Dziś już zakończono pracę";
header("Location: panel.php");
exit();
}
else
{
if($_POST['end'] < $work['czasZaczecia'])
{
$_SESSION['innfoError'] = "Zakończenie pracy nie może być wcześniej niż rozpoczęcie";
header("Location: panel.php");
exit();
}
else
{
//zakończ pracę
$sql = "UPDATE obecnosc SET czasKonca = :czasKonca WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':czasKonca', $_POST['end'], PDO::PARAM_STR);
$stmt->bindValue(':id', $work['id'], PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Zakończono pracę";
header("Location: panel.php");
exit();
}
}
}
}

61
workStart.php 100644
View File

@ -0,0 +1,61 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
//print_r($_SESSION);
?>
<!DOCTYPE html>
<html>
<head>
<title>Panel <?php echo $_SESSION["user_login"]; ?></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="panel">
<div id="panel">
<header>
<h1>Witaj <?php echo $_SESSION["user_imie"]; ?></h1>
</header>
<nav>
<?php
require_once 'nav.php';
?>
</nav>
<main id="work">
<form action="workStart_form.php" method="post">
<table class="form">
<tr>
<td>
<label for="start">Rozpoczęcie pracy</label>
</td>
<td>
<input type="time" name="start" id="start" value="<?php echo date('H:00'); ?>" max="<?php echo date('TH:i'); ?>">
</td>
</tr>
<tr>
<td colspan="2">
<label for="remote">Praca zdalna</label>
<input type="checkbox" name="remote" id="remote" value="0">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Rozpocznij pracę">
</td>
</tr>
<tr>
<td colspan="2">
<button class="cancel" type="button" onclick="window.location.href='panel.php'">Anuluj</button>
</td>
</tr>
</table>
</form>
</main>
</div>
</div>
<?php
require_once 'footer.php';
?>
</body>
</html>

60
workStart_form.php 100644
View File

@ -0,0 +1,60 @@
<?php
require_once 'db.php';
require_once 'checkLogin.php';
@session_start();
/*
CREATE TABLE `obecnosc` (
`id` int(10) UNSIGNED NOT NULL,
`kto` int(10) UNSIGNED NOT NULL,
`data` date NOT NULL,
`czasZaczecia` time DEFAULT NULL,
`czasKonca` time DEFAULT NULL,
`status` int(10) UNSIGNED NOT NULL,
`zaakceptowane` tinyint(4) NOT NULL DEFAULT 0,
`zdalne` tinyint(1) NOT NULL DEFAULT 0,
`aktywne` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
*/
//dane za pomocą post przekazywane $_POST['start']
//sprawdź czy już nie jest już obecność rozpoczęta
$sql = "SELECT * FROM obecnosc WHERE kto = :kto AND data = :data AND aktywne = 1";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', date('Y-m-d'), PDO::PARAM_STR);
$stmt->execute();
$work = $stmt->fetch(PDO::FETCH_ASSOC);
//<input type="checkbox" name="remote" id="remote" value="0">
$remoteWork = 0;
if(isset($_POST['remote']))
{
$remoteWork = 1;
}
if($work === false)
{
//rozpocznij pracę
$sql = "INSERT INTO obecnosc (kto, data, czasZaczecia, status, zdalne, aktywne) VALUES (:kto, :data, :czasZaczecia, :status, :zdalne, 1)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':kto', $_SESSION['user_id'], PDO::PARAM_INT);
$stmt->bindValue(':data', date('Y-m-d'), PDO::PARAM_STR);
$stmt->bindValue(':czasZaczecia', $_POST['start'], PDO::PARAM_STR);
$stmt->bindValue(':status', 1, PDO::PARAM_INT);
$stmt->bindValue(':zdalne', $remoteWork, PDO::PARAM_INT);
$stmt->execute();
$_SESSION['innfoError'] = "Rozpoczęto pracę";
header("Location: panel.php");
exit();
}
else
{
$_SESSION['innfoError'] = "Dziś już rozpoczęto pracę";
header("Location: panel.php");
exit();
}