diff --git a/.gitignore b/.gitignore
index ceaea36..4e9b47a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
\ No newline at end of file
diff --git a/README.md b/README.md
index 58d6c89..7e3e11e 100644
--- a/README.md
+++ b/README.md
@@ -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
\ No newline at end of file
diff --git a/_install.php b/_install.php
new file mode 100644
index 0000000..2772789
--- /dev/null
+++ b/_install.php
@@ -0,0 +1,113 @@
+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");
+}
+?>
+
+
+
+
+ Instalacja
+
+
+
+
+
+
+
+
+ '.$_SESSION['error'].'';
+ unset($_SESSION['error']);
+ }
+ ?>
+
+
+
+
+
+
+
diff --git a/accept.php b/accept.php
new file mode 100644
index 0000000..a2def21
--- /dev/null
+++ b/accept.php
@@ -0,0 +1,28 @@
+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();
+}
\ No newline at end of file
diff --git a/activate.php b/activate.php
new file mode 100644
index 0000000..eccb2ba
--- /dev/null
+++ b/activate.php
@@ -0,0 +1,31 @@
+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();
+}
+?>
\ No newline at end of file
diff --git a/activateWorker.php b/activateWorker.php
new file mode 100644
index 0000000..798e956
--- /dev/null
+++ b/activateWorker.php
@@ -0,0 +1,85 @@
+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
+{
+ ?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
+
+
+
+
+
+ ID |
+ IMIĘ |
+ NAZWISKO |
+ SKRÓT DZIAŁU |
+ AKTYWOWAĆ? |
+
+
+ ';
+ echo ''.$user['id'].' | ';
+ echo ''.$user['imie'].' | ';
+ echo ''.$user['nazwisko'].' | ';
+ $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 ''.$dzial['skrot'].' | ';
+ echo '
| ';
+ echo '';
+ }
+ if($i == 0)
+ {
+ $_SESSION["innfoError"] = "Brak pracowników do aktywacji";
+ header("Location: panel.php");
+ exit();
+ }
+}
+?>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addAdmin.php b/addAdmin.php
new file mode 100644
index 0000000..c8d0f24
--- /dev/null
+++ b/addAdmin.php
@@ -0,0 +1,97 @@
+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();
+}
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addDay.php b/addDay.php
new file mode 100644
index 0000000..b8a4aa7
--- /dev/null
+++ b/addDay.php
@@ -0,0 +1,109 @@
+
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addDay_form.php b/addDay_form.php
new file mode 100644
index 0000000..04283a6
--- /dev/null
+++ b/addDay_form.php
@@ -0,0 +1,86 @@
+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();
+
+
+?>
\ No newline at end of file
diff --git a/addDepartment.php b/addDepartment.php
new file mode 100644
index 0000000..92b5370
--- /dev/null
+++ b/addDepartment.php
@@ -0,0 +1,98 @@
+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();
+ }
+}
+
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addFree.php b/addFree.php
new file mode 100644
index 0000000..b120050
--- /dev/null
+++ b/addFree.php
@@ -0,0 +1,111 @@
+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();
+}
+?>
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addFreeDay.php b/addFreeDay.php
new file mode 100644
index 0000000..e56c813
--- /dev/null
+++ b/addFreeDay.php
@@ -0,0 +1,91 @@
+
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addFreeDay_form.php b/addFreeDay_form.php
new file mode 100644
index 0000000..d8645b3
--- /dev/null
+++ b/addFreeDay_form.php
@@ -0,0 +1,95 @@
+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();
+?>
\ No newline at end of file
diff --git a/allWorkers.php b/allWorkers.php
new file mode 100644
index 0000000..84f52a3
--- /dev/null
+++ b/allWorkers.php
@@ -0,0 +1,74 @@
+prepare($sql);
+$stmt->bindValue(':przelozony', $_SESSION['user_id'], PDO::PARAM_INT);
+$stmt->execute();
+$podlega = $stmt->fetchAll(PDO::FETCH_ASSOC);
+//print_r($podlega);
+
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/allWorkersMonth.php b/allWorkersMonth.php
new file mode 100644
index 0000000..4217d41
--- /dev/null
+++ b/allWorkersMonth.php
@@ -0,0 +1,71 @@
+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();
+}
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/checkLogin.php b/checkLogin.php
new file mode 100644
index 0000000..012657e
--- /dev/null
+++ b/checkLogin.php
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/db.php b/db.php
new file mode 100644
index 0000000..0ec1b06
--- /dev/null
+++ b/db.php
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/db.sql b/db.sql
new file mode 100644
index 0000000..68ec025
--- /dev/null
+++ b/db.sql
@@ -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, 'UŻ', 'URLOP NA ŻĄDANIE', 1, 1),
+ (10, 'WŚ', '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)
\ No newline at end of file
diff --git a/delAdmin.php b/delAdmin.php
new file mode 100644
index 0000000..b70bcaa
--- /dev/null
+++ b/delAdmin.php
@@ -0,0 +1,93 @@
+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();
+}
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/delDepartment.php b/delDepartment.php
new file mode 100644
index 0000000..d78ba1c
--- /dev/null
+++ b/delDepartment.php
@@ -0,0 +1,109 @@
+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();
+ }
+}
+?>
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/delUser.php b/delUser.php
new file mode 100644
index 0000000..c6c4291
--- /dev/null
+++ b/delUser.php
@@ -0,0 +1,22 @@
+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();
+}
\ No newline at end of file
diff --git a/dictionaries.php b/dictionaries.php
new file mode 100644
index 0000000..6dc75db
--- /dev/null
+++ b/dictionaries.php
@@ -0,0 +1,101 @@
+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();
+
+?>
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/editDaySelect.php b/editDaySelect.php
new file mode 100644
index 0000000..c955637
--- /dev/null
+++ b/editDaySelect.php
@@ -0,0 +1,63 @@
+
+
+
+
+
+ Panel
+
+
+
+
+
+
+
diff --git a/editDaySelectForm.php b/editDaySelectForm.php
new file mode 100644
index 0000000..7894c9e
--- /dev/null
+++ b/editDaySelectForm.php
@@ -0,0 +1,149 @@
+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();
+}
+
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
diff --git a/editDaySelectFormEdit.php b/editDaySelectFormEdit.php
new file mode 100644
index 0000000..64a404b
--- /dev/null
+++ b/editDaySelectFormEdit.php
@@ -0,0 +1,97 @@
+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();
+?>
diff --git a/editPass.php b/editPass.php
new file mode 100644
index 0000000..3ed3b4f
--- /dev/null
+++ b/editPass.php
@@ -0,0 +1,63 @@
+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();
+}
+?>
diff --git a/footer.php b/footer.php
new file mode 100644
index 0000000..65a1173
--- /dev/null
+++ b/footer.php
@@ -0,0 +1,12 @@
+
+
+
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..556116b
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/index.php.temp b/index.php.temp
new file mode 100644
index 0000000..33f2a98
--- /dev/null
+++ b/index.php.temp
@@ -0,0 +1,72 @@
+
+
+
+
+
+ Rejestracja
+
+
+
+
+
+
+
+
+ '.$_SESSION['error'].'';
+ unset($_SESSION['error']);
+ }
+ ?>
+
+
+
+
+
+
+
diff --git a/login.php b/login.php
new file mode 100644
index 0000000..b766368
--- /dev/null
+++ b/login.php
@@ -0,0 +1,106 @@
+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");
+ }
+ }
+}
\ No newline at end of file
diff --git a/logout.php b/logout.php
new file mode 100644
index 0000000..b9560e0
--- /dev/null
+++ b/logout.php
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/nav.php b/nav.php
new file mode 100644
index 0000000..25c200e
--- /dev/null
+++ b/nav.php
@@ -0,0 +1,28 @@
+
+
+
+
+ - Start
+
+ - 🏠
+
+ - Pokaż miesiąc
+ - Twój przełożony -
+ - Zmień hasło
+ - Wyloguj
+
\ No newline at end of file
diff --git a/panel.php b/panel.php
new file mode 100644
index 0000000..4a56d56
--- /dev/null
+++ b/panel.php
@@ -0,0 +1,201 @@
+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);
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pass.php b/pass.php
new file mode 100644
index 0000000..9e8db3a
--- /dev/null
+++ b/pass.php
@@ -0,0 +1,73 @@
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/passReset.php b/passReset.php
new file mode 100644
index 0000000..1102209
--- /dev/null
+++ b/passReset.php
@@ -0,0 +1,79 @@
+prepare($sql);
+$stmt->execute();
+$uzytkownicy = $stmt->fetchAll(PDO::FETCH_ASSOC);
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/passReset_form.php b/passReset_form.php
new file mode 100644
index 0000000..7b43be9
--- /dev/null
+++ b/passReset_form.php
@@ -0,0 +1,94 @@
+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();
+}
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/print.php b/print.php
new file mode 100644
index 0000000..65ec807
--- /dev/null
+++ b/print.php
@@ -0,0 +1,177 @@
+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);
+
+?>
+
+
+
+
+
+ - ewidencja czasu -
+
+
+
+
+
+
+
+
+
+
+ Imię i nazwisko:
+ Dział:
+ 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:
+ 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)
+ {
+ ?>
+
+ Są niezaakceptowane dni pracy
+
+
+
+
+ Dzień |
+ Czas pracy |
+
+ 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 "";
+ }
+ else
+ {
+ echo "
";
+ }
+ if($work === false)
+ {
+ //nie ma wpisu w bazie
+ echo "".$i." | ";
+ echo " | ";
+ }
+ else
+ {
+ //jest wpis w bazie
+ echo "".$i." | ";
+ if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
+ {
+ echo "".$work['czasZaczecia']." - ".$work['czasKonca']."";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
+ {
+ echo " | ".$work['czasZaczecia']." - ";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
+ {
+ echo " | - ".$work['czasKonca']."";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else
+ {
+ echo " | ".$work['skrot']."";
+ //
+ }
+ if($work['zdalne'] == 1)
+ {
+ echo " - PZ";
+ }
+ else
+ {
+ echo " | ";
+ }
+ }
+ echo "
";
+ }
+ ?>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/printWorker.php b/printWorker.php
new file mode 100644
index 0000000..da19161
--- /dev/null
+++ b/printWorker.php
@@ -0,0 +1,217 @@
+ 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);
+?>
+
+
+
+ - ewidencja czasu -
+
+
+
+
+
+
+
+
+ Imię i nazwisko:
+ Dział:
+ 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: ".$zdalne['COUNT(*)']."";
+ $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)
+ {
+ ?>
+
+ Są niezaakceptowane dni pracy
+
+
+
+
+ Dzień |
+ Czas pracy |
+
+ 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 "";
+ }
+ else
+ {
+ echo "
";
+ }
+ if($work === false)
+ {
+ //nie ma wpisu w bazie
+ echo "".$i." | ";
+ echo " | ";
+ }
+ else
+ {
+ //jest wpis w bazie
+ echo "".$i." | ";
+ if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
+ {
+ echo "".$work['czasZaczecia']." - ".$work['czasKonca']."";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
+ {
+ echo " | ".$work['czasZaczecia']." - ";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
+ {
+ echo " | - ".$work['czasKonca']."";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else
+ {
+ echo " | ".$work['skrot']."";
+ //
+ }
+ if($work['zdalne'] == 1)
+ {
+ echo " - PZ";
+ }
+ else
+ {
+ echo " | ";
+ }
+ }
+ echo "
";
+ }
+ ?>
+
+
+
+
+
+
+
diff --git a/printWorkerForm.php b/printWorkerForm.php
new file mode 100644
index 0000000..2cd02b7
--- /dev/null
+++ b/printWorkerForm.php
@@ -0,0 +1,97 @@
+prepare($sql);
+$stmt->execute();
+
+$uzytkownicyArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
+?>
+
+
+
+ Panel
+
+
+
+
+
+
+
diff --git a/register.php b/register.php
new file mode 100644
index 0000000..0bea2fb
--- /dev/null
+++ b/register.php
@@ -0,0 +1,230 @@
+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();
+}
+?>
+
+
+
+
+ Rejestracja
+
+
+
+
+
+
+
+ '.$_SESSION['error'].'';
+ unset($_SESSION['error']);
+ }
+ ?>
+
+
+
+
+
+
+
+
diff --git a/showMonth.php b/showMonth.php
new file mode 100644
index 0000000..47b5529
--- /dev/null
+++ b/showMonth.php
@@ -0,0 +1,54 @@
+
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/showMonthForm.php b/showMonthForm.php
new file mode 100644
index 0000000..2cb7b53
--- /dev/null
+++ b/showMonthForm.php
@@ -0,0 +1,233 @@
+
+
+
+
+ Panel
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Imię i nazwisko:
+ Dział:
+ 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: ".$zdalne['COUNT(*)']."";
+ //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)
+ {
+ ?>
+
+ Masz niezaakceptowane dni pracy
+
+
+
+
+ Dzień |
+ Czas pracy |
+
+ 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 "";
+ }
+ else
+ {
+ echo "
";
+ }
+ if($work === false)
+ {
+ //nie ma wpisu w bazie
+ echo "".$i." | ";
+ echo " | ";
+ }
+ else
+ {
+ //jest wpis w bazie
+ echo "".$i;
+ //jeżeli niezaakceptowane ❌
+ if($work['zaakceptowane'] == 0)
+ {
+ echo " ❌";
+ }
+ else
+ {
+ echo " ✔️";
+ }
+ echo " | ";
+ if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
+ {
+ echo "".$work['czasZaczecia']." - ".$work['czasKonca']."";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
+ {
+ echo " | ".$work['czasZaczecia']." - ";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
+ {
+ echo " | - ".$work['czasKonca']."";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else
+ {
+ echo " | ".$work['skrot']."";
+ //
+ }
+ if($work['zdalne'] == 1)
+ {
+ echo " - PZ";
+ }
+ else
+ {
+ echo " | ";
+ }
+ }
+ echo "
";
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+ prepare($sql);
+ $stmt->execute();
+ $statusy = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ echo "
Legenda
";
+ echo "
";
+ foreach($statusy as $status)
+ {
+ echo "";
+ echo "".$status['skrot']." | ";
+ echo "".$status['nazwa']." | ";
+ echo "
";
+ }
+ echo "
";
+
+ ?>
+
+
+
+
+
+
+
diff --git a/showMonthFormPrint.php b/showMonthFormPrint.php
new file mode 100644
index 0000000..3f57625
--- /dev/null
+++ b/showMonthFormPrint.php
@@ -0,0 +1,186 @@
+
+
+
+
+ - ewidencja czasu -
+
+
+
+
+
+
+
+
+
+ Imię i nazwisko:
+ Dział:
+ 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: ".$zdalne['COUNT(*)']."";
+ //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)
+ {
+ ?>
+
+ Masz niezaakceptowane dni pracy
+
+
+
+
+ Dzień |
+ Czas pracy |
+
+ 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 "";
+ }
+ else
+ {
+ echo "
";
+ }
+ if($work === false)
+ {
+ //nie ma wpisu w bazie
+ echo "".$i." | ";
+ echo " | ";
+ }
+ else
+ {
+ //jest wpis w bazie
+ echo "".$i." | ";
+ if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL)
+ {
+ echo "".$work['czasZaczecia']." - ".$work['czasKonca']."";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else if($work['czasZaczecia'] != NULL && $work['czasKonca'] == NULL)
+ {
+ echo " | ".$work['czasZaczecia']." - ";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else if($work['czasZaczecia'] == NULL && $work['czasKonca'] != NULL)
+ {
+ echo " | - ".$work['czasKonca']."";
+ if($work['skrot'] != "OB")
+ {
+ echo " - ".$work['skrot']."";
+ }
+ }
+ else
+ {
+ echo " | ".$work['skrot']."";
+ //
+ }
+ if($work['zdalne'] == 1)
+ {
+ echo " - PZ";
+ }
+ else
+ {
+ echo " | ";
+ }
+ }
+ echo "
";
+ }
+ ?>
+
+
+
+
+
+
diff --git a/statAdd.php b/statAdd.php
new file mode 100644
index 0000000..311dd16
--- /dev/null
+++ b/statAdd.php
@@ -0,0 +1,111 @@
+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();
+}
+?>
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/statDel.php b/statDel.php
new file mode 100644
index 0000000..d34a369
--- /dev/null
+++ b/statDel.php
@@ -0,0 +1,110 @@
+prepare($sql);
+ $stmt->bindValue(':id', $id, PDO::PARAM_INT);
+ $stmt->execute();
+ $_SESSION['innfoError'] = "Usunięto status";
+ header("Location: dictionaries.php");
+ exit();
+}
+?>
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..f6193bd
--- /dev/null
+++ b/style.css
@@ -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;
+}
\ No newline at end of file
diff --git a/waitingForAcceptsMonth_form.php b/waitingForAcceptsMonth_form.php
new file mode 100644
index 0000000..9a27ace
--- /dev/null
+++ b/waitingForAcceptsMonth_form.php
@@ -0,0 +1,90 @@
+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);
+
+}
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/waitingForAcceptsShow.php b/waitingForAcceptsShow.php
new file mode 100644
index 0000000..eaa576a
--- /dev/null
+++ b/waitingForAcceptsShow.php
@@ -0,0 +1,221 @@
+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]);
+
+ ?>
+
+
+
+ Panel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Imię i nazwisko:
+ Dział:
+ 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:
".$zdalnie."";
+ ?>
+
+
+ Dzień |
+ Czas pracy |
+
+ 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 '';
+ }
+ else if(in_array($day, $dniWolneArray))
+ {
+ echo '
';
+ }
+ else
+ {
+ echo '
';
+ }
+ //brak wpisu w bazie
+ if($obecnosc === false)
+ {
+ echo ''.$i.' | ';
+ echo ' | ';
+ }
+ else
+ {
+ //jest wpis w bazie
+ echo "".$i;
+ //jeżeli niezaakceptowane ❌
+ if($obecnosc['zaakceptowane'] == 0)
+ {
+ echo " ❌";
+ }
+ //jeżeli zaakceptowane ✔️
+ else if($obecnosc['zaakceptowane'] == 1)
+ {
+ echo " ✔️";
+ }
+ echo " | ";
+ if($obecnosc['czasZaczecia'] != NULL && $obecnosc['czasKonca'] != NULL)
+ {
+ echo "".$obecnosc['czasZaczecia']." - ".$obecnosc['czasKonca']."";
+ if($obecnosc['skrot'] != "OB")
+ {
+ echo " - ".$obecnosc['skrot']."";
+ }
+ }
+ else if($obecnosc['czasZaczecia'] != NULL && $obecnosc['czasKonca'] == NULL)
+ {
+ echo " | ".$obecnosc['czasZaczecia']." - ";
+ if($obecnosc['skrot'] != "OB")
+ {
+ echo " - ".$obecnosc['skrot']."";
+ }
+ }
+ else if($obecnosc['czasZaczecia'] == NULL && $obecnosc['czasKonca'] != NULL)
+ {
+ echo " | - ".$obecnosc['czasKonca']."";
+ if($obecnosc['skrot'] != "OB")
+ {
+ echo " - ".$obecnosc['skrot']."";
+ }
+ }
+ else
+ {
+ echo " | ".$obecnosc['skrot']."";
+ //
+ }
+ if($obecnosc['zdalne'] == 1)
+ {
+ echo " - PZ";
+ }
+ else
+ {
+ echo " | ";
+ }
+ }
+ echo "
";
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+
+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);
+?>
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/workEnd.php b/workEnd.php
new file mode 100644
index 0000000..2e5bd4a
--- /dev/null
+++ b/workEnd.php
@@ -0,0 +1,55 @@
+
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/workEnd_form.php b/workEnd_form.php
new file mode 100644
index 0000000..abcaa3d
--- /dev/null
+++ b/workEnd_form.php
@@ -0,0 +1,75 @@
+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();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/workStart.php b/workStart.php
new file mode 100644
index 0000000..1925653
--- /dev/null
+++ b/workStart.php
@@ -0,0 +1,61 @@
+
+
+
+
+
+ Panel
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/workStart_form.php b/workStart_form.php
new file mode 100644
index 0000000..f0c8ea6
--- /dev/null
+++ b/workStart_form.php
@@ -0,0 +1,60 @@
+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);
+//
+$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();
+
+}
\ No newline at end of file