Naprawiona akcja klawiszy startu procesów

This commit is contained in:
Flatlogic Bot 2026-03-01 18:22:03 +00:00
parent e1d38e6487
commit 1ae32ef541
8 changed files with 540 additions and 115 deletions

View File

@ -53,7 +53,9 @@ class PDF extends tFPDF
function generateBadge($person) { function generateBadge($person) {
$this->AddPage(); $this->AddPage();
$this->Image('assets/pasted-20260112-081646-4e946aad.png', 0, 0, $this->GetPageWidth(), $this->GetPageHeight()); if(file_exists('assets/pasted-20260112-081646-4e946aad.png')) {
$this->Image('assets/pasted-20260112-081646-4e946aad.png', 0, 0, $this->GetPageWidth(), $this->GetPageHeight());
}
$this->SetY(20); $this->SetY(20);
$this->SetFont('DejaVu', 'B', 12); $this->SetFont('DejaVu', 'B', 12);
$this->Cell(0, 6, $person['first_name'] . ' ' . $person['last_name'], 0, 1, 'C'); $this->Cell(0, 6, $person['first_name'] . ' ' . $person['last_name'], 0, 1, 'C');

287
index.php
View File

@ -576,8 +576,124 @@ $status_colors = [
</div> </div>
</div> </div>
<!-- Instance Modal -->
<div class="modal fade" id="instanceModal" tabindex="-1" aria-labelledby="instanceModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="instanceModalLabel"><?= t('modal.process_details', 'Szczegóły procesu') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- Content will be loaded here via AJAX -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= t('modal.close', 'Zamknij') ?></button>
</div>
</div>
</div>
</div>
<!-- Bulk Modals -->
<!-- Bulk Status Update Modal -->
<div class="modal fade" id="bulkStatusModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><?= t('dashboard.bulk_status_update', 'Zbiorcza aktualizacja statusu') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form action="_bulk_update_status.php" method="post">
<input type="hidden" name="person_ids" id="bulkStatusPersonIds">
<div class="mb-3">
<label class="form-label"><?= t('form.process', 'Proces') ?></label>
<select name="process_id" class="form-select" required>
<?php foreach($processes as $process): ?>
<option value="<?= $process['id'] ?>"><?= htmlspecialchars($process['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-3">
<label class="form-label"><?= t('form.new_status', 'Nowy status') ?></label>
<select name="status" class="form-select" required>
<option value="none">None</option>
<option value="negative">Negative</option>
<option value="in_progress">In Progress</option>
<option value="positive">Positive</option>
</select>
</div>
<button type="submit" class="btn btn-primary"><?= t('dashboard.update_status', 'Zaktualizuj status') ?></button>
</form>
</div>
</div>
</div>
</div>
<!-- Bulk Add Event Modal -->
<div class="modal fade" id="bulkEventModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><?= t('dashboard.bulk_add_event', 'Zbiorcze dodawanie zdarzenia') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form action="_bulk_add_event.php" method="post">
<input type="hidden" name="person_ids" id="bulkEventPersonIds">
<div class="mb-3">
<label class="form-label"><?= t('form.process', 'Proces') ?></label>
<select name="process_id" class="form-select" required>
<?php foreach($processes as $process): ?>
<option value="<?= $process['id'] ?>"><?= htmlspecialchars($process['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-3">
<label class="form-label"><?= t('form.event_description', 'Opis zdarzenia') ?></label>
<textarea name="description" class="form-control" required></textarea>
</div>
<button type="submit" class="btn btn-primary"><?= t('dashboard.add_event', 'Dodaj zdarzenie') ?></button>
</form>
</div>
</div>
</div>
</div>
<!-- Bulk Initialize Instances Modal -->
<div class="modal fade" id="bulkInitModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><?= t('dashboard.bulk_init_instances', 'Zbiorcza inicjalizacja instancji') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form action="_bulk_init_instances.php" method="post">
<input type="hidden" name="person_ids" id="bulkInitPersonIds">
<div class="mb-3">
<label class="form-label"><?= t('form.process', 'Proces') ?></label> <select name="process_id" class="form-select" required>
<?php foreach($processes as $process): ?>
<option value="<?= $process['id'] ?>"><?= htmlspecialchars($process['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<p>This will initialize this process for all selected people if it is not already initialized.</p>
<button type="submit" class="btn btn-primary"><?= t('dashboard.initialize', 'Inicjalizuj') ?></button>
</form>
</div>
</div>
</div>
</div>
<script> <script>
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () {
const meetingModal = new bootstrap.Modal(document.getElementById('meetingAttendanceModal')); const meetingModal = new bootstrap.Modal(document.getElementById('meetingAttendanceModal'));
const meetingForm = document.getElementById('meetingAttendanceForm'); const meetingForm = document.getElementById('meetingAttendanceForm');
const meetingPersonName = document.getElementById('meetingPersonName'); const meetingPersonName = document.getElementById('meetingPersonName');
@ -801,31 +917,9 @@ document.addEventListener('DOMContentLoaded', function () {
}); });
}); });
});
</script>
<?php include '_footer.php'; ?>
<!-- Instance Modal -->
<div class="modal fade" id="instanceModal" tabindex="-1" aria-labelledby="instanceModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="instanceModalLabel"><?= t('modal.process_details', 'Szczegóły procesu') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- Content will be loaded here via AJAX -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?= t('modal.close', 'Zamknij') ?></button>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
var instanceModal = document.getElementById('instanceModal'); var instanceModal = document.getElementById('instanceModal');
instanceModal.addEventListener('show.bs.modal', function (event) { instanceModal.addEventListener('show.bs.modal', function (event) {
var button = event.relatedTarget; var button = event.relatedTarget;
@ -1088,97 +1182,62 @@ document.addEventListener('DOMContentLoaded', function () {
editGroupDiv.style.display = isMember ? 'block' : 'none'; editGroupDiv.style.display = isMember ? 'block' : 'none';
editMemberOnlyFields.style.display = isMember ? 'block' : 'none'; editMemberOnlyFields.style.display = isMember ? 'block' : 'none';
}); });
// --- Start Process Button Delegation ---
const instanceModalElement = document.getElementById('instanceModal');
if (instanceModalElement) {
instanceModalElement.addEventListener('click', function(event) {
const btn = event.target.closest('#startProcessBtn');
if (!btn) return;
event.preventDefault();
event.stopPropagation();
const personId = btn.dataset.personId;
const processId = btn.dataset.processId;
if (!personId || !processId) {
alert('Brak ID osoby lub procesu');
return;
}
const originalText = btn.innerHTML;
btn.disabled = true;
btn.innerHTML = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> Uruchamianie...';
const formData = new FormData();
formData.append('person_id', personId);
formData.append('process_id', processId);
fetch('_init_single_instance.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
const modalBody = instanceModalElement.querySelector('.modal-body');
modalBody.innerHTML = '<div class="text-center mt-4"><div class="spinner-border text-primary" role="status"></div><p class="mt-2">Ładowanie...</p></div>';
fetch(`_get_instance_details.php?person_id=${personId}&process_id=${processId}`)
.then(r => r.text())
.then(html => {
modalBody.innerHTML = html;
});
} else {
alert('Błąd: ' + (data.error || 'Nieznany błąd'));
btn.disabled = false;
btn.innerHTML = originalText;
}
})
.catch(err => {
console.error(err);
alert('Błąd sieci');
btn.disabled = false;
btn.innerHTML = originalText;
});
});
}
}); });
</script> </script>
<?php include '_footer.php'; ?>
<!-- Bulk Modals -->
<!-- Bulk Status Update Modal -->
<div class="modal fade" id="bulkStatusModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><?= t('dashboard.bulk_status_update', 'Zbiorcza aktualizacja statusu') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form action="_bulk_update_status.php" method="post">
<input type="hidden" name="person_ids" id="bulkStatusPersonIds">
<div class="mb-3">
<label class="form-label"><?= t('form.process', 'Proces') ?></label>
<select name="process_id" class="form-select" required>
<?php foreach($processes as $process): ?>
<option value="<?= $process['id'] ?>"><?= htmlspecialchars($process['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-3">
<label class="form-label"><?= t('form.new_status', 'Nowy status') ?></label>
<select name="status" class="form-select" required>
<option value="none">None</option>
<option value="negative">Negative</option>
<option value="in_progress">In Progress</option>
<option value="positive">Positive</option>
</select>
</div>
<button type="submit" class="btn btn-primary"><?= t('dashboard.update_status', 'Zaktualizuj status') ?></button>
</form>
</div>
</div>
</div>
</div>
<!-- Bulk Add Event Modal -->
<div class="modal fade" id="bulkEventModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><?= t('dashboard.bulk_add_event', 'Zbiorcze dodawanie zdarzenia') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form action="_bulk_add_event.php" method="post">
<input type="hidden" name="person_ids" id="bulkEventPersonIds">
<div class="mb-3">
<label class="form-label"><?= t('form.process', 'Proces') ?></label>
<select name="process_id" class="form-select" required>
<?php foreach($processes as $process): ?>
<option value="<?= $process['id'] ?>"><?= htmlspecialchars($process['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-3">
<label class="form-label"><?= t('form.event_description', 'Opis zdarzenia') ?></label>
<textarea name="description" class="form-control" required></textarea>
</div>
<button type="submit" class="btn btn-primary"><?= t('dashboard.add_event', 'Dodaj zdarzenie') ?></button>
</form>
</div>
</div>
</div>
</div>
<!-- Bulk Initialize Instances Modal -->
<div class="modal fade" id="bulkInitModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><?= t('dashboard.bulk_init_instances', 'Zbiorcza inicjalizacja instancji') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form action="_bulk_init_instances.php" method="post">
<input type="hidden" name="person_ids" id="bulkInitPersonIds">
<div class="mb-3">
<label class="form-label"><?= t('form.process', 'Proces') ?></label> <select name="process_id" class="form-select" required>
<?php foreach($processes as $process): ?>
<option value="<?= $process['id'] ?>"><?= htmlspecialchars($process['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<p>This will initialize this process for all selected people if it is not already initialized.</p>
<button type="submit" class="btn btn-primary"><?= t('dashboard.initialize', 'Inicjalizuj') ?></button>
</form>
</div>
</div>
</div>
</div>

Binary file not shown.

View File

@ -0,0 +1,163 @@
<?php
$rangeid=114;
$prevcid=126;
$prevwidth=838;
$interval=false;
$range=array (
32 =>
array (
0 => 348,
1 => 456,
2 => 521,
3 => 838,
4 => 696,
5 => 1002,
6 => 872,
7 => 306,
),
40 =>
array (
0 => 457,
1 => 457,
'interval' => true,
),
42 =>
array (
0 => 523,
1 => 838,
2 => 380,
3 => 415,
4 => 380,
5 => 365,
),
48 =>
array (
0 => 696,
1 => 696,
'interval' => true,
2 => 696,
3 => 696,
4 => 696,
5 => 696,
6 => 696,
7 => 696,
8 => 696,
9 => 696,
),
58 =>
array (
0 => 400,
1 => 400,
'interval' => true,
),
60 =>
array (
0 => 838,
1 => 838,
'interval' => true,
2 => 838,
),
63 =>
array (
0 => 580,
1 => 1000,
2 => 774,
3 => 762,
4 => 734,
5 => 830,
),
69 =>
array (
0 => 683,
1 => 683,
'interval' => true,
),
71 =>
array (
0 => 821,
1 => 837,
),
73 =>
array (
0 => 372,
1 => 372,
'interval' => true,
),
75 =>
array (
0 => 775,
1 => 637,
2 => 995,
3 => 837,
4 => 850,
5 => 733,
6 => 850,
7 => 770,
8 => 720,
9 => 682,
10 => 812,
11 => 774,
12 => 1103,
13 => 771,
14 => 724,
15 => 725,
16 => 457,
17 => 365,
18 => 457,
19 => 838,
),
95 =>
array (
0 => 500,
1 => 500,
'interval' => true,
),
97 =>
array (
0 => 675,
1 => 716,
2 => 593,
3 => 716,
4 => 678,
5 => 435,
6 => 716,
7 => 712,
),
105 =>
array (
0 => 343,
1 => 343,
'interval' => true,
),
107 =>
array (
0 => 665,
1 => 343,
2 => 1042,
3 => 712,
4 => 687,
),
112 =>
array (
0 => 716,
1 => 716,
'interval' => true,
),
114 =>
array (
0 => 493,
1 => 595,
2 => 478,
3 => 712,
4 => 652,
5 => 924,
6 => 645,
7 => 652,
8 => 582,
9 => 712,
10 => 365,
11 => 712,
12 => 838,
),
);
?>

View File

@ -0,0 +1,19 @@
<?php
$name='DejaVuSans-Bold';
$type='TTF';
$desc=array (
'Ascent' => 928.0,
'Descent' => -236.0,
'CapHeight' => 928.0,
'Flags' => 262148,
'FontBBox' => '[-1069 -415 1975 1174]',
'ItalicAngle' => 0.0,
'StemV' => 165.0,
'MissingWidth' => 600.0,
);
$up=-63;
$ut=44;
$ttffile='lib/tfpdf/font/unifont/DejaVuSans-Bold.ttf';
$originalsize=705684;
$fontkey='dejavuB';
?>

Binary file not shown.

View File

@ -0,0 +1,163 @@
<?php
$rangeid=122;
$prevcid=126;
$prevwidth=838;
$interval=false;
$range=array (
32 =>
array (
0 => 318,
1 => 401,
2 => 460,
3 => 838,
4 => 636,
5 => 950,
6 => 780,
7 => 275,
),
40 =>
array (
0 => 390,
1 => 390,
'interval' => true,
),
42 =>
array (
0 => 500,
1 => 838,
2 => 318,
3 => 361,
4 => 318,
5 => 337,
),
48 =>
array (
0 => 636,
1 => 636,
'interval' => true,
2 => 636,
3 => 636,
4 => 636,
5 => 636,
6 => 636,
7 => 636,
8 => 636,
9 => 636,
),
58 =>
array (
0 => 337,
1 => 337,
'interval' => true,
),
60 =>
array (
0 => 838,
1 => 838,
'interval' => true,
2 => 838,
),
63 =>
array (
0 => 531,
1 => 1000,
2 => 684,
3 => 686,
4 => 698,
5 => 770,
6 => 632,
7 => 575,
8 => 775,
9 => 752,
),
73 =>
array (
0 => 295,
1 => 295,
'interval' => true,
),
75 =>
array (
0 => 656,
1 => 557,
2 => 863,
3 => 748,
4 => 787,
5 => 603,
6 => 787,
7 => 695,
8 => 635,
9 => 611,
10 => 732,
11 => 684,
12 => 989,
13 => 685,
14 => 611,
15 => 685,
16 => 390,
17 => 337,
18 => 390,
19 => 838,
),
95 =>
array (
0 => 500,
1 => 500,
'interval' => true,
),
97 =>
array (
0 => 613,
1 => 635,
2 => 550,
3 => 635,
4 => 615,
5 => 352,
6 => 635,
7 => 634,
),
105 =>
array (
0 => 278,
1 => 278,
'interval' => true,
),
107 =>
array (
0 => 579,
1 => 278,
2 => 974,
3 => 634,
4 => 612,
),
112 =>
array (
0 => 635,
1 => 635,
'interval' => true,
),
114 =>
array (
0 => 411,
1 => 521,
2 => 392,
3 => 634,
4 => 592,
5 => 818,
),
120 =>
array (
0 => 592,
1 => 592,
'interval' => true,
),
122 =>
array (
0 => 525,
1 => 636,
2 => 337,
3 => 636,
4 => 838,
),
);
?>

View File

@ -0,0 +1,19 @@
<?php
$name='DejaVuSans';
$type='TTF';
$desc=array (
'Ascent' => 928.0,
'Descent' => -236.0,
'CapHeight' => 928.0,
'Flags' => 4,
'FontBBox' => '[-1021 -463 1793 1232]',
'ItalicAngle' => 0.0,
'StemV' => 87.0,
'MissingWidth' => 600.0,
);
$up=-63;
$ut=44;
$ttffile='lib/tfpdf/font/unifont/DejaVuSans.ttf';
$originalsize=757076;
$fontkey='dejavu';
?>