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