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