From a6b8d3285f7fb92abd8b6a32ceb0db9c018541c9 Mon Sep 17 00:00:00 2001 From: kry008 Date: Fri, 18 Aug 2023 16:00:24 +0200 Subject: [PATCH] init --- .gitignore | 133 +--------- README.md | 6 + _install.php | 113 +++++++++ accept.php | 28 +++ activate.php | 31 +++ activateWorker.php | 85 +++++++ addAdmin.php | 97 ++++++++ addDay.php | 109 +++++++++ addDay_form.php | 86 +++++++ addDepartment.php | 98 ++++++++ addFree.php | 111 +++++++++ addFreeDay.php | 91 +++++++ addFreeDay_form.php | 95 ++++++++ allWorkers.php | 74 ++++++ allWorkersMonth.php | 71 ++++++ checkLogin.php | 8 + config.php.temp | 6 + db.php | 7 + db.sql | 118 +++++++++ delAdmin.php | 93 +++++++ delDepartment.php | 109 +++++++++ delUser.php | 22 ++ dictionaries.php | 101 ++++++++ editDaySelect.php | 63 +++++ editDaySelectForm.php | 149 ++++++++++++ editDaySelectFormEdit.php | 97 ++++++++ editPass.php | 63 +++++ footer.php | 12 + index.html | 1 + index.php.temp | 72 ++++++ login.php | 106 ++++++++ logout.php | 9 + nav.php | 28 +++ panel.php | 201 ++++++++++++++++ pass.php | 73 ++++++ passReset.php | 79 ++++++ passReset_form.php | 94 ++++++++ print.php | 177 ++++++++++++++ printWorker.php | 217 +++++++++++++++++ printWorkerForm.php | 97 ++++++++ register.php | 230 ++++++++++++++++++ showMonth.php | 54 +++++ showMonthForm.php | 233 ++++++++++++++++++ showMonthFormPrint.php | 186 ++++++++++++++ statAdd.php | 111 +++++++++ statDel.php | 110 +++++++++ style.css | 414 ++++++++++++++++++++++++++++++++ waitingForAcceptsMonth_form.php | 90 +++++++ waitingForAcceptsShow.php | 221 +++++++++++++++++ waitingForAcceptsUser_form.php | 89 +++++++ workEnd.php | 55 +++++ workEnd_form.php | 75 ++++++ workStart.php | 61 +++++ workStart_form.php | 60 +++++ 54 files changed, 5087 insertions(+), 132 deletions(-) create mode 100644 _install.php create mode 100644 accept.php create mode 100644 activate.php create mode 100644 activateWorker.php create mode 100644 addAdmin.php create mode 100644 addDay.php create mode 100644 addDay_form.php create mode 100644 addDepartment.php create mode 100644 addFree.php create mode 100644 addFreeDay.php create mode 100644 addFreeDay_form.php create mode 100644 allWorkers.php create mode 100644 allWorkersMonth.php create mode 100644 checkLogin.php create mode 100644 config.php.temp create mode 100644 db.php create mode 100644 db.sql create mode 100644 delAdmin.php create mode 100644 delDepartment.php create mode 100644 delUser.php create mode 100644 dictionaries.php create mode 100644 editDaySelect.php create mode 100644 editDaySelectForm.php create mode 100644 editDaySelectFormEdit.php create mode 100644 editPass.php create mode 100644 footer.php create mode 100644 index.html create mode 100644 index.php.temp create mode 100644 login.php create mode 100644 logout.php create mode 100644 nav.php create mode 100644 panel.php create mode 100644 pass.php create mode 100644 passReset.php create mode 100644 passReset_form.php create mode 100644 print.php create mode 100644 printWorker.php create mode 100644 printWorkerForm.php create mode 100644 register.php create mode 100644 showMonth.php create mode 100644 showMonthForm.php create mode 100644 showMonthFormPrint.php create mode 100644 statAdd.php create mode 100644 statDel.php create mode 100644 style.css create mode 100644 waitingForAcceptsMonth_form.php create mode 100644 waitingForAcceptsShow.php create mode 100644 waitingForAcceptsUser_form.php create mode 100644 workEnd.php create mode 100644 workEnd_form.php create mode 100644 workStart.php create mode 100644 workStart_form.php 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 + + + +
+
+
+

Witaj

+
+
+ + '.$_SESSION['error'].'

'; + unset($_SESSION['error']); + } + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skrypt zakłada że baza danych jest uzupełniona plikiem db.sql i config.php jest uzupełniony +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +
+
+
+
+ + + 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+

Witaj

+
+ +
+ +
+
+ + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + $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 ''; + echo ''; + echo ''; + } + if($i == 0) + { + $_SESSION["innfoError"] = "Brak pracowników do aktywacji"; + header("Location: panel.php"); + exit(); + } +} +?> +
IDIMIĘNAZWISKOSKRÓT DZIAŁUAKTYWOWAĆ?
'.$user['id'].''.$user['imie'].''.$user['nazwisko'].''.$dzial['skrot'].'
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + + + + +
+

Dodaj admina

+
+ + + +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + +
+ * - opcjonalne przy statusach oznaczających wolne +
+ +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + + + + + + +
Nazwa działu
Skrót działu
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + + + + + + + + +
Data">
Nazwa święta
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + +
+ + + +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + +
+ + + +
+ + +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + +
+ + + +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + + + + + +
Wybierz dział + +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+

Witaj

+
+ +
+ +
+
+ +

Wróć

+
+

Nie usuwasz danych, tylko je dezaktywujesz (nie będzie możliwości ich wyboru)

+ 0) + { + ?> + +

Dodanie admina

+
+ + 1) + { + ?> + +

Usunięcie admina

+
+ + +

Dodanie działu

+
+ +

Usunięcie działu

+
+ +

Dodanie wolnego

+
+ +

Dodaj status

+
+ +

Usuń status

+
+ +

Wydrukuj listy pracownika

+
+ +

Resetuj hasło użytkownika

+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + + + + +
+ + + +
+ +
+ +
+
+
+
+
+ + + 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + +
+ + + +
+
+
+ +
+
+ + + +
+ + > +
+ +
+ +
+
+
+
+
+ + + 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 @@ +
+ +
+ Made by Kry008 © +
\ 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 + + + +
+
+
+

Witaj

+
+
+ + '.$_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 @@ + + +
    + +
  1. Start
  2. + +
  3. 🏠
  4. + +
  5. Pokaż miesiąc
  6. +
  7. Twój przełożony -
  8. +
  9. Zmień hasło
  10. +
  11. Wyloguj
  12. +
\ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+

Witaj

+
+ +
+ +
+
+ + +

Rozpocznij dzisiejszą pracę

+
+ + + +

Zakończ dzisiejszą pracę

+
+ + +

Raport za poprzedni miesiąc

+
+ +

Raport miesięczny

+
+ +

Dodaj inny dzień

+
+ +

Dodaj wolne (wszystkie formy)

+
+ +

Edytuj dzień

+
+ 0) + { + ?> + +

Aktywuj konta pracowników -

+
+ + 0) + { + ?> + +

Drukuj listy pracowników

+
+ + 0) + { + ?> + +

Oczekująca ilość dni na akceptację -

+
+ + + +

Edytuj słowniki/ustawienia

+
+ +
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ +
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + +
+ + + +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+ + + + + + + + + + +
+

Hasło użytkownika zostało zresetowane

+
+ Nowe hasło: + + +
+ +

Wróć

+
+
+
+
+
+ + + \ 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); + +?> + + + + + + <?php echo $_POST['month']; ?> - ewidencja czasu - <?php echo $user['imie'].' '.$user['nazwisko']; ?> + + + + + +
+

+ +

+
+ 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 + +
+ + + + + + 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 ""; + echo ""; + } + else + { + //jest wpis w bazie + echo ""; + if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL) + { + echo ""; + } + } + echo ""; + } + ?> +
DzieńCzas pracy
".$i."".$i."".$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 "
+
+ + + + \ 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); +?> + + + + <?php echo $month." - ".$year; ?> - ewidencja czasu - <?php echo $user['imie']." ".$user['nazwisko']; ?> + + + +
+

+ +

+
+ 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 + +
+ + + + + + 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 ""; + echo ""; + } + else + { + //jest wpis w bazie + echo ""; + if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL) + { + echo ""; + } + } + echo ""; + } + ?> +
DzieńCzas pracy
".$i."".$i."".$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 "
+
+ + + + + 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + +
Wybierz pracownika + +
Wybierz miesiąc + +
+ Pokaż czy są niezaakceptowane dni?: +
+ +
+
+
+
+
+ + + 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 + + + +
+
+
+

Witaj

+
+
+ '.$_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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ + + + + + + + + + + +
+ + + +
+ +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+

+ +

+
+ 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 + +
+ + + + + + 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 ""; + echo ""; + } + else + { + //jest wpis w bazie + echo ""; + if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL) + { + echo ""; + } + } + echo ""; + } + ?> +
DzieńCzas pracy
".$i."".$i; + //jeżeli niezaakceptowane ❌ + if($work['zaakceptowane'] == 0) + { + echo " ❌"; + } + else + { + echo " ✔️"; + } + 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 "
+
+
+ + + + + + + prepare($sql); + $stmt->execute(); + $statusy = $stmt->fetchAll(PDO::FETCH_ASSOC); + echo "

Legenda

"; + echo ""; + foreach($statusy as $status) + { + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
".$status['skrot']."".$status['nazwa']."
"; + + ?> +
+
+
+
+ + + diff --git a/showMonthFormPrint.php b/showMonthFormPrint.php new file mode 100644 index 0000000..3f57625 --- /dev/null +++ b/showMonthFormPrint.php @@ -0,0 +1,186 @@ + + + + + <?php echo $_GET['month']; ?> - ewidencja czasu - <?php echo $_SESSION['user_imie']." ".$_SESSION['user_nazwisko']; ?> + + + + +
+

+ +

+
+ 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 + +
+ + + + + + 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 ""; + echo ""; + } + else + { + //jest wpis w bazie + echo ""; + if($work['czasZaczecia'] != NULL && $work['czasKonca'] != NULL) + { + echo ""; + } + } + echo ""; + } + ?> +
DzieńCzas pracy
".$i."".$i."".$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 "
+
+ + + + 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + +
Skrot
Nazwa
Oznacza wolne
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+ +
+ +
+
+ + + + + + + + + + + + +
Wybierz status + +
+ +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + +
+ + + +
+ + +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+

+ +

+
+ +
+ 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.""; + ?> + + + + + + 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 ''; + echo ''; + } + else + { + //jest wpis w bazie + echo ""; + if($obecnosc['czasZaczecia'] != NULL && $obecnosc['czasKonca'] != NULL) + { + echo ""; + } + } + echo ""; + } + ?> + +
DzieńCzas pracy
'.$i.'".$i; + //jeżeli niezaakceptowane ❌ + if($obecnosc['zaakceptowane'] == 0) + { + echo " ❌"; + } + //jeżeli zaakceptowane ✔️ + else if($obecnosc['zaakceptowane'] == 1) + { + echo " ✔️"; + } + 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 "
+
+
+
+

Opcje

+
+ + + +
+
+ + + +
+
+
+
+
+ + + +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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ +
+
+ + + + + + + + +
+ + + +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ + + + + + + + + + + +
+ + + +
+ +
+ +
+
+
+
+
+ + + \ 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 <?php echo $_SESSION["user_login"]; ?> + + + +
+
+
+

Witaj

+
+ +
+
+ + + + + + + + + + + + + + +
+ + + +
+ + +
+ +
+ +
+
+
+
+
+ + + \ 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