Compare commits
26 Commits
v1.7.0-bet
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| bef9de2c71 | |||
| 8a9d7bee75 | |||
| b963ab9ca1 | |||
| a71d401864 | |||
| 18b91cc4a5 | |||
| bc76739320 | |||
| df620a4897 | |||
| e1d9e01fdb | |||
| feb4be6621 | |||
| 5a88d0780a | |||
| ecf9db4a13 | |||
| e4283df099 | |||
| 6e5e63adc5 | |||
| d8123ef332 | |||
| c26b54c08b | |||
| 81a3967b0e | |||
| 14bae6c9ef | |||
| 43bc416554 | |||
| b81164279f | |||
| 345d22958f | |||
| 20805c11db | |||
| 957d52dd21 | |||
| f8c8725622 | |||
| f8fba4275d | |||
| 5912bc29ac | |||
| 36944c71bf |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
|||||||
config.php
|
config.php
|
||||||
|
.vscode
|
||||||
|
sftp.json
|
||||||
@@ -1,113 +1,250 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require('config.php');
|
require('config.php');
|
||||||
|
|
||||||
require('vendor/autoload.php');
|
require('vendor/autoload.php');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
|
<title>Aufgabenmonitor</title>
|
||||||
<title>Aufgabenmonitor</title>
|
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
<!-- Bootstrap -->
|
||||||
<link rel="stylesheet" href="vendor/twbs/bootstrap/dist/css/bootstrap.min.css" >
|
<link rel="stylesheet" href="vendor/twbs/bootstrap/dist/css/bootstrap.min.css">
|
||||||
<script src="scripts/jquery-3.5.1.min.js"></script>
|
<link href="css/sticky-footer.css" rel="stylesheet">
|
||||||
<link href="css/sticky-footer.css" rel="stylesheet">
|
|
||||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
|
||||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
|
||||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<style>
|
||||||
$(document).ready(function(){
|
body { background-color: #000; }
|
||||||
refreshAufgabenTable();
|
.tableFixHead { overflow:auto; }
|
||||||
|
.tableFixHead thead th {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 1;
|
||||||
|
background-color: #212529; /* .table-dark head */
|
||||||
|
}
|
||||||
|
.table-dark td, .table-dark th { vertical-align: middle; }
|
||||||
|
</style>
|
||||||
|
|
||||||
});
|
<script src="scripts/jquery-3.5.1.min.js"></script>
|
||||||
|
</head>
|
||||||
function refreshAufgabenTable(){
|
<body>
|
||||||
$('#AufgabenTableHolder').load('sources/getAufgabenTable.php', function(){
|
|
||||||
setTimeout(refreshAufgabenTable, 30000);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// function refreshCheckInTable(){
|
|
||||||
// $('#getCheckInTableHolder').load('sources/getCheckInTable.php', function(){
|
|
||||||
// setTimeout(refreshCheckInTable, 5000);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body style="background-color: black;">
|
|
||||||
|
|
||||||
<div class="container-fluid">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg">
|
|
||||||
<h2 class="text-light">Aufgaben</h2>
|
|
||||||
<table class="table table-dark">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">#</th>
|
|
||||||
<th scope="col">Bearbeiter</th>
|
|
||||||
<th scope="col">Aufgabe</th>
|
|
||||||
<th scope="col">Zieldatum</th>
|
|
||||||
<th scope="col">Priorität</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="AufgabenTableHolder">
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
|
<div class="container-fluid py-3">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<h2 class="text-light mb-3">Aufgaben</h2>
|
||||||
|
|
||||||
|
<!-- SCROLL CONTAINER -->
|
||||||
|
<div id="aufgaben-scroll" class="tableFixHead">
|
||||||
|
<table id="aufgaben-table" class="table table-dark table-striped table-hover mb-0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" style="width:6%">#</th>
|
||||||
|
<th scope="col" style="width:24%">Bearbeiter</th>
|
||||||
|
<th scope="col" style="width:40%">Aufgabe</th>
|
||||||
|
<th scope="col" style="width:15%">Ziel</th>
|
||||||
|
<th scope="col" style="width:15%">Prio</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="AufgabenTableHolder">
|
||||||
|
<!-- wird via AJAX gefüllt -->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- /SCROLL CONTAINER -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Bootstrap JS -->
|
||||||
|
<script src="vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
|
|
||||||
|
<!-- === Scroll/Reload Script (wie bei CheckIn/CheckOut) === -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* ===========================
|
||||||
|
Feature-Toggle aus PHP
|
||||||
|
=========================== */
|
||||||
|
const SCROLL_FLAGS = {
|
||||||
|
aufgaben: <?php echo (defined('EnableScrollingAufgaben') && EnableScrollingAufgaben) ? 'true' : 'false'; ?>
|
||||||
|
};
|
||||||
|
|
||||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
function isEnabled() { return !!SCROLL_FLAGS.aufgaben; }
|
||||||
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
|
|
||||||
<!-- Include all compiled plugins (below), or include individual files as needed -->
|
/* ===========================
|
||||||
<script src="vendor/twbs/bootstrap/dist/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
|
Höhe der Scroll-Container
|
||||||
</body>
|
- Voller Viewport ab Oberkante
|
||||||
|
=========================== */
|
||||||
|
function sizeScrollContainers() {
|
||||||
|
const node = document.querySelector('#aufgaben-scroll');
|
||||||
|
if (!node) return;
|
||||||
|
const rect = node.getBoundingClientRect();
|
||||||
|
const bottomMargin = 16;
|
||||||
|
const minH = 120;
|
||||||
|
const available = window.innerHeight - rect.top - bottomMargin;
|
||||||
|
node.style.maxHeight = Math.max(minH, available) + 'px';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Scroll-/Interaktionsstatus
|
||||||
|
=========================== */
|
||||||
|
const scrollState = new WeakMap(); // { userActive:boolean, autoTimer:number|null, loopHeight:number }
|
||||||
|
|
||||||
|
function ensureState(el) {
|
||||||
|
if (!scrollState.get(el)) scrollState.set(el, { userActive: false, autoTimer: null, loopHeight: 0 });
|
||||||
|
return scrollState.get(el);
|
||||||
|
}
|
||||||
|
|
||||||
|
function attachScrollGuards($scroller) {
|
||||||
|
const el = $scroller.get(0);
|
||||||
|
if (!el || el.__guardsBound) return;
|
||||||
|
if (!isEnabled()) return;
|
||||||
|
const state = ensureState(el);
|
||||||
|
|
||||||
|
const markActive = () => {
|
||||||
|
state.userActive = true;
|
||||||
|
clearTimeout(state._quietT);
|
||||||
|
state._quietT = setTimeout(() => { state.userActive = false; }, 800);
|
||||||
|
stopAutoScroll($scroller);
|
||||||
|
};
|
||||||
|
|
||||||
|
$scroller.on('wheel touchstart touchmove keydown mousedown mouseenter', markActive);
|
||||||
|
$scroller.on('mouseleave', () => setTimeout(() => maybeStartAutoScroll($scroller), 600));
|
||||||
|
el.__guardsBound = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Nahtloser Loop (Clone)
|
||||||
|
=========================== */
|
||||||
|
function buildSeamlessLoop($table, $scroller) {
|
||||||
|
$table.find('tbody.__loopClone').remove();
|
||||||
|
|
||||||
|
const scEl = $scroller.get(0);
|
||||||
|
const st = ensureState(scEl);
|
||||||
|
st.loopHeight = 0;
|
||||||
|
|
||||||
|
if (!isEnabled()) return;
|
||||||
|
|
||||||
|
const $main = $table.find('tbody').first();
|
||||||
|
if ($main.length === 0 || $main.children().length === 0) return;
|
||||||
|
|
||||||
|
const needScroll = $main.get(0).offsetHeight > scEl.clientHeight + 1;
|
||||||
|
if (!needScroll) return;
|
||||||
|
|
||||||
|
const $clone = $main.clone(false, false).addClass('__loopClone').attr('aria-hidden', 'true');
|
||||||
|
$table.append($clone);
|
||||||
|
st.loopHeight = $main.get(0).offsetHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Auto-Scroll
|
||||||
|
=========================== */
|
||||||
|
function startAutoScroll($scroller, speedPx = 1, stepMs = 40) {
|
||||||
|
const el = $scroller.get(0);
|
||||||
|
if (!isEnabled()) return;
|
||||||
|
|
||||||
|
const st = ensureState(el);
|
||||||
|
if (st.autoTimer) return;
|
||||||
|
if (st.loopHeight <= 0) return;
|
||||||
|
|
||||||
|
const tick = () => {
|
||||||
|
if (st.userActive) { stopAutoScroll($scroller); return; }
|
||||||
|
el.scrollTop += speedPx;
|
||||||
|
if (el.scrollTop >= st.loopHeight) el.scrollTop -= st.loopHeight;
|
||||||
|
};
|
||||||
|
|
||||||
|
st.autoTimer = setInterval(tick, stepMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
function stopAutoScroll($scroller) {
|
||||||
|
const el = $scroller.get(0);
|
||||||
|
const st = ensureState(el);
|
||||||
|
if (st.autoTimer) {
|
||||||
|
clearInterval(st.autoTimer);
|
||||||
|
st.autoTimer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function maybeStartAutoScroll($scroller) {
|
||||||
|
const el = $scroller.get(0);
|
||||||
|
if (!isEnabled()) { stopAutoScroll($scroller); return; }
|
||||||
|
const st = ensureState(el);
|
||||||
|
if (st.userActive) return;
|
||||||
|
if (st.loopHeight > 0) startAutoScroll($scroller, 1, 80);
|
||||||
|
else stopAutoScroll($scroller);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Smart AJAX Reload
|
||||||
|
=========================== */
|
||||||
|
function smartLoad($scroller, $table, $target, url, intervalMs) {
|
||||||
|
const scEl = $scroller.get(0);
|
||||||
|
const st = ensureState(scEl);
|
||||||
|
|
||||||
|
const oldLoop = st.loopHeight > 0 ? st.loopHeight : Math.max(1, scEl.scrollHeight - scEl.clientHeight);
|
||||||
|
const posInLoop = st.loopHeight > 0 ? (scEl.scrollTop % oldLoop) : scEl.scrollTop;
|
||||||
|
const posRatio = Math.min(1, posInLoop / oldLoop);
|
||||||
|
|
||||||
|
$target.load(url, function () {
|
||||||
|
buildSeamlessLoop($table, $scroller);
|
||||||
|
|
||||||
|
if (st.loopHeight > 0 && isEnabled()) {
|
||||||
|
const newPos = Math.floor(posRatio * st.loopHeight);
|
||||||
|
if (Math.abs(scEl.scrollTop - newPos) > 1) {
|
||||||
|
requestAnimationFrame(() => { scEl.scrollTop = newPos; });
|
||||||
|
}
|
||||||
|
stopAutoScroll($scroller);
|
||||||
|
startAutoScroll($scroller, 1, 80);
|
||||||
|
} else {
|
||||||
|
if (scEl.scrollTop !== 0) requestAnimationFrame(() => { scEl.scrollTop = 0; });
|
||||||
|
stopAutoScroll($scroller);
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(() => smartLoad($scroller, $table, $target, url, intervalMs), intervalMs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Initialisierung
|
||||||
|
=========================== */
|
||||||
|
$(document).ready(function () {
|
||||||
|
sizeScrollContainers();
|
||||||
|
$(window).on('resize', function () {
|
||||||
|
sizeScrollContainers();
|
||||||
|
const $scroller = $('#aufgaben-scroll');
|
||||||
|
const $table = $('#aufgaben-table');
|
||||||
|
buildSeamlessLoop($table, $scroller);
|
||||||
|
maybeStartAutoScroll($scroller);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Guards nur aktivieren, wenn Scrolling erlaubt
|
||||||
|
if (isEnabled()) attachScrollGuards($('#aufgaben-scroll'));
|
||||||
|
|
||||||
|
// Erstladen
|
||||||
|
(function init() {
|
||||||
|
const $scroller = $('#aufgaben-scroll');
|
||||||
|
const $table = $('#aufgaben-table');
|
||||||
|
const $target = $('#AufgabenTableHolder');
|
||||||
|
const url = 'sources/getAufgabenTable.php';
|
||||||
|
const interval = 60000;
|
||||||
|
|
||||||
|
$target.load(url, function () {
|
||||||
|
buildSeamlessLoop($table, $scroller);
|
||||||
|
maybeStartAutoScroll($scroller);
|
||||||
|
setTimeout(() => smartLoad($scroller, $table, $target, url, interval), interval);
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
// (Optional – hier nicht benötigt, aber gelassen falls du später etwas anzeigst)
|
||||||
function getTimeFromSeconds(string $timestring) {
|
function getTimeFromSeconds(string $timestring) {
|
||||||
|
$hours = floor($timestring / 3600);
|
||||||
$hours = floor($timestring / 3600);
|
$mins = floor($timestring / 60 % 60);
|
||||||
$mins = floor($timestring / 60 % 60);
|
$timeFormat = sprintf('%02d:%02d', $hours, $mins);
|
||||||
$secs = floor($timestring % 60);
|
return $timeFormat;
|
||||||
|
|
||||||
$timeFormat = sprintf('%02d:%02d', $hours, $mins);
|
|
||||||
|
|
||||||
return $timeFormat;
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
@@ -12,7 +12,7 @@ public function requestEpiApi(string $requestString){
|
|||||||
$requestUrl = Epirent_Connectionprotocol."://".Epirent_Server.":".Epirent_Port.$requestString;
|
$requestUrl = Epirent_Connectionprotocol."://".Epirent_Server.":".Epirent_Port.$requestString;
|
||||||
$response = $client->request('GET', $requestUrl,[
|
$response = $client->request('GET', $requestUrl,[
|
||||||
'headers' =>[
|
'headers' =>[
|
||||||
'X-EPI-NO-SESSION' => 'True',
|
'X-EPI-NO-SESSION' => 'true',
|
||||||
'X-EPI-ACC-TOK' => Epirent_Token
|
'X-EPI-ACC-TOK' => Epirent_Token
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -21,17 +21,97 @@ $Epi = new Epirent();
|
|||||||
<script src="scripts/jquery-3.5.1.min.js"></script>
|
<script src="scripts/jquery-3.5.1.min.js"></script>
|
||||||
<link href="css/sticky-footer.css" rel="stylesheet">
|
<link href="css/sticky-footer.css" rel="stylesheet">
|
||||||
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
||||||
|
<style>
|
||||||
|
@media (min-width: 1800px) {
|
||||||
|
.row {
|
||||||
|
flex-wrap: nowrap; /* verhindert Umbruch */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Checkout + Checkin: je 45% */
|
||||||
|
.row > .col-sm:nth-child(1),
|
||||||
|
.row > .col-sm:nth-child(2) {
|
||||||
|
flex: 0 0 35%;
|
||||||
|
max-width: 35%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Aufgaben: 10% */
|
||||||
|
.row > .col-sm:nth-child(3) {
|
||||||
|
flex: 0 0 30%;
|
||||||
|
max-width: 30%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.table td, .table th {
|
||||||
|
padding: .25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
// === Höhe der Scroll-Container bis Viewport-Ende anpassen ===
|
// === PHP-Flags in JS bringen ===
|
||||||
|
const SCROLL_FLAGS = {
|
||||||
|
checkout: <?php echo (defined('EnableScrollingCheckOut') && EnableScrollingCheckOut) ? 'true' : 'false'; ?>,
|
||||||
|
checkin: <?php echo (defined('EnableScrollingCheckIn') && EnableScrollingCheckIn) ? 'true' : 'false'; ?>,
|
||||||
|
aufgaben: <?php echo (defined('EnableScrollingAufgaben') && EnableScrollingAufgaben) ? 'true' : 'false'; ?>
|
||||||
|
};
|
||||||
|
|
||||||
|
// Mapping: DOM-ID -> Flag-Key
|
||||||
|
const SCROLLER_KEYS = new Map([
|
||||||
|
['checkout-scroll', 'checkout'],
|
||||||
|
['checkin-scroll', 'checkin'],
|
||||||
|
['aufgaben-scroll', 'aufgaben']
|
||||||
|
]);
|
||||||
|
const TABLE_KEYS = new Map([
|
||||||
|
['checkout-table', 'checkout'],
|
||||||
|
['checkin-table', 'checkin'],
|
||||||
|
['aufgaben-table', 'aufgaben']
|
||||||
|
]);
|
||||||
|
|
||||||
|
function keyForEl(el, map) {
|
||||||
|
if (!el || !el.id) return null;
|
||||||
|
return map.get(el.id) || null;
|
||||||
|
}
|
||||||
|
function isEnabledByEl(el) {
|
||||||
|
const k = keyForEl(el, SCROLLER_KEYS);
|
||||||
|
return !!(k && SCROLL_FLAGS[k]);
|
||||||
|
}
|
||||||
|
function isEnabledByKey(key) {
|
||||||
|
return !!SCROLL_FLAGS[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
// === Höhe der Scroll-Container: nebeneinander = volle Höhe; gestapelt = Drittel ===
|
||||||
function sizeScrollContainers() {
|
function sizeScrollContainers() {
|
||||||
$('.tableFixHead').each(function () {
|
const nodes = [
|
||||||
const rect = this.getBoundingClientRect();
|
document.querySelector('#checkout-scroll'),
|
||||||
const bottomMargin = 16;
|
document.querySelector('#checkin-scroll'),
|
||||||
const available = window.innerHeight - rect.top - bottomMargin;
|
document.querySelector('#aufgaben-scroll')
|
||||||
this.style.maxHeight = (available > 120 ? available : 120) + 'px';
|
].filter(Boolean);
|
||||||
|
|
||||||
|
if (nodes.length === 0) return;
|
||||||
|
|
||||||
|
// Ermitteln, ob alles in einer Zeile (nebeneinander) oder gestapelt
|
||||||
|
const tops = nodes.map(n => n.getBoundingClientRect().top);
|
||||||
|
const ROW_TOL = 8; // px
|
||||||
|
const uniqueRows = [];
|
||||||
|
tops.forEach(t => {
|
||||||
|
const exists = uniqueRows.some(rt => Math.abs(rt - t) <= ROW_TOL);
|
||||||
|
if (!exists) uniqueRows.push(t);
|
||||||
|
});
|
||||||
|
const isOneRow = uniqueRows.length === 1;
|
||||||
|
|
||||||
|
const bottomMargin = 16;
|
||||||
|
const minH = 120;
|
||||||
|
|
||||||
|
nodes.forEach(node => {
|
||||||
|
// Wenn Scrolling für diesen Bereich deaktiviert ist, Höhe trotzdem setzen (wie gefordert)
|
||||||
|
const rect = node.getBoundingClientRect();
|
||||||
|
if (isOneRow) {
|
||||||
|
const available = window.innerHeight - rect.top - bottomMargin;
|
||||||
|
node.style.maxHeight = Math.max(minH, available) + 'px';
|
||||||
|
} else {
|
||||||
|
const third = Math.floor(window.innerHeight / 3) - bottomMargin;
|
||||||
|
node.style.maxHeight = Math.max(minH, third) + 'px';
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,6 +126,7 @@ $Epi = new Epirent();
|
|||||||
function attachScrollGuards($scroller) {
|
function attachScrollGuards($scroller) {
|
||||||
const el = $scroller.get(0);
|
const el = $scroller.get(0);
|
||||||
if (!el || el.__guardsBound) return;
|
if (!el || el.__guardsBound) return;
|
||||||
|
if (!isEnabledByEl(el)) return; // nur wenn Feature aktiv
|
||||||
const state = ensureState(el);
|
const state = ensureState(el);
|
||||||
|
|
||||||
const markActive = () => {
|
const markActive = () => {
|
||||||
@@ -60,45 +141,40 @@ $Epi = new Epirent();
|
|||||||
el.__guardsBound = true;
|
el.__guardsBound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// === Loop aufbauen: nahtloses Doppel nur bei Bedarf ===
|
// === Loop aufbauen: nahtloses Doppel nur bei Bedarf & nur wenn aktiv ===
|
||||||
// Klont den ersten <tbody> als __loopClone ans Tabellenende, wenn Inhalt > Sichtbereich.
|
|
||||||
function buildSeamlessLoop($table, $scroller) {
|
function buildSeamlessLoop($table, $scroller) {
|
||||||
$table.find('tbody.__loopClone').remove();
|
$table.find('tbody.__loopClone').remove();
|
||||||
|
|
||||||
const $main = $table.find('tbody').first();
|
|
||||||
const scEl = $scroller.get(0);
|
const scEl = $scroller.get(0);
|
||||||
|
const enabled = isEnabledByEl(scEl);
|
||||||
const st = ensureState(scEl);
|
const st = ensureState(scEl);
|
||||||
|
st.loopHeight = 0;
|
||||||
|
|
||||||
if ($main.length === 0 || $main.children().length === 0) {
|
if (!enabled) return; // deaktiviert -> keine Loops
|
||||||
st.loopHeight = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const mainH = $main.get(0).offsetHeight;
|
const $main = $table.find('tbody').first();
|
||||||
const needScroll = mainH > scEl.clientHeight + 1;
|
if ($main.length === 0 || $main.children().length === 0) return;
|
||||||
|
|
||||||
if (!needScroll) {
|
const needScroll = $main.get(0).offsetHeight > scEl.clientHeight + 1;
|
||||||
st.loopHeight = 0;
|
if (!needScroll) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const $clone = $main.clone(false, false).addClass('__loopClone').attr('aria-hidden', 'true');
|
const $clone = $main.clone(false, false).addClass('__loopClone').attr('aria-hidden', 'true');
|
||||||
$table.append($clone);
|
$table.append($clone);
|
||||||
st.loopHeight = mainH; // Höhe des Original-Inhalts als Loop-Länge
|
st.loopHeight = $main.get(0).offsetHeight; // Höhe des Original-Inhalts als Loop-Länge
|
||||||
}
|
}
|
||||||
|
|
||||||
// === Auto-Scroll (nahtlos) ===
|
// === Auto-Scroll (nahtlos) ===
|
||||||
function startAutoScroll($scroller, speedPx = 1, stepMs = 40) {
|
function startAutoScroll($scroller, speedPx = 1, stepMs = 40) {
|
||||||
const el = $scroller.get(0);
|
const el = $scroller.get(0);
|
||||||
const st = ensureState(el);
|
if (!isEnabledByEl(el)) return;
|
||||||
|
|
||||||
|
const st = ensureState(el);
|
||||||
if (st.autoTimer) return; // schon aktiv
|
if (st.autoTimer) return; // schon aktiv
|
||||||
if (st.loopHeight <= 0) return; // kein Overflow => nicht scrollen
|
if (st.loopHeight <= 0) return; // kein Overflow => nicht scrollen
|
||||||
|
|
||||||
const tick = () => {
|
const tick = () => {
|
||||||
if (st.userActive) { stopAutoScroll($scroller); return; }
|
if (st.userActive) { stopAutoScroll($scroller); return; }
|
||||||
el.scrollTop += speedPx;
|
el.scrollTop += speedPx;
|
||||||
// Nahtlos: sobald wir das Ende des Original-Blocks überschreiten, ziehen wir loopHeight ab
|
|
||||||
if (el.scrollTop >= st.loopHeight) {
|
if (el.scrollTop >= st.loopHeight) {
|
||||||
el.scrollTop -= st.loopHeight;
|
el.scrollTop -= st.loopHeight;
|
||||||
}
|
}
|
||||||
@@ -118,6 +194,7 @@ $Epi = new Epirent();
|
|||||||
|
|
||||||
function maybeStartAutoScroll($scroller) {
|
function maybeStartAutoScroll($scroller) {
|
||||||
const el = $scroller.get(0);
|
const el = $scroller.get(0);
|
||||||
|
if (!isEnabledByEl(el)) { stopAutoScroll($scroller); return; }
|
||||||
const st = ensureState(el);
|
const st = ensureState(el);
|
||||||
if (st.userActive) return;
|
if (st.userActive) return;
|
||||||
if (st.loopHeight > 0) startAutoScroll($scroller, 1, 80);
|
if (st.loopHeight > 0) startAutoScroll($scroller, 1, 80);
|
||||||
@@ -125,33 +202,33 @@ $Epi = new Epirent();
|
|||||||
}
|
}
|
||||||
|
|
||||||
// === AJAX-Reload: relative Position innerhalb der Loop erhalten ===
|
// === AJAX-Reload: relative Position innerhalb der Loop erhalten ===
|
||||||
// Wir merken die Position modulo loopHeight; nach dem Reload setzen wir proportional um.
|
|
||||||
function smartLoad($scroller, $table, $target, url, intervalMs) {
|
function smartLoad($scroller, $table, $target, url, intervalMs) {
|
||||||
const scEl = $scroller.get(0);
|
const scEl = $scroller.get(0);
|
||||||
const st = ensureState(scEl);
|
const st = ensureState(scEl);
|
||||||
|
const enabled = isEnabledByEl(scEl);
|
||||||
|
|
||||||
const oldLoop = st.loopHeight > 0 ? st.loopHeight : Math.max(1, scEl.scrollHeight - scEl.clientHeight);
|
const oldLoop = st.loopHeight > 0 ? st.loopHeight : Math.max(1, scEl.scrollHeight - scEl.clientHeight);
|
||||||
const posInLoop = st.loopHeight > 0 ? (scEl.scrollTop % oldLoop) : scEl.scrollTop;
|
const posInLoop = st.loopHeight > 0 ? (scEl.scrollTop % oldLoop) : scEl.scrollTop;
|
||||||
const posRatio = Math.min(1, posInLoop / oldLoop);
|
const posRatio = Math.min(1, posInLoop / oldLoop);
|
||||||
|
|
||||||
$target.load(url, function () {
|
$target.load(url, function () {
|
||||||
// Loop neu bewerten/aufbauen
|
if (enabled) {
|
||||||
buildSeamlessLoop($table, $scroller);
|
buildSeamlessLoop($table, $scroller);
|
||||||
|
if (st.loopHeight > 0) {
|
||||||
if (st.loopHeight > 0) {
|
const newPos = Math.floor(posRatio * st.loopHeight);
|
||||||
// Neue relative Position setzen (proportional)
|
if (Math.abs(scEl.scrollTop - newPos) > 1) {
|
||||||
const newPos = Math.floor(posRatio * st.loopHeight);
|
requestAnimationFrame(() => { scEl.scrollTop = newPos; });
|
||||||
if (Math.abs(scEl.scrollTop - newPos) > 1) {
|
}
|
||||||
// rAF für flüssiges Setzen außerhalb des load()-Layouts
|
stopAutoScroll($scroller);
|
||||||
requestAnimationFrame(() => { scEl.scrollTop = newPos; });
|
startAutoScroll($scroller, 1, 80);
|
||||||
|
} else {
|
||||||
|
if (scEl.scrollTop !== 0) requestAnimationFrame(() => { scEl.scrollTop = 0; });
|
||||||
|
stopAutoScroll($scroller);
|
||||||
}
|
}
|
||||||
// Auto-Scroll (wieder) starten
|
|
||||||
stopAutoScroll($scroller);
|
|
||||||
startAutoScroll($scroller, 1, 80);
|
|
||||||
} else {
|
} else {
|
||||||
// kein Overflow -> ganz oben und Auto-Scroll aus
|
$table.find('tbody.__loopClone').remove();
|
||||||
if (scEl.scrollTop !== 0) requestAnimationFrame(() => { scEl.scrollTop = 0; });
|
|
||||||
stopAutoScroll($scroller);
|
stopAutoScroll($scroller);
|
||||||
|
if (scEl.scrollTop !== 0) requestAnimationFrame(() => { scEl.scrollTop = 0; });
|
||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(() => smartLoad($scroller, $table, $target, url, intervalMs), intervalMs);
|
setTimeout(() => smartLoad($scroller, $table, $target, url, intervalMs), intervalMs);
|
||||||
@@ -161,9 +238,9 @@ $Epi = new Epirent();
|
|||||||
// === Initialisierung ===
|
// === Initialisierung ===
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
sizeScrollContainers();
|
sizeScrollContainers();
|
||||||
|
|
||||||
$(window).on('resize', function () {
|
$(window).on('resize', function () {
|
||||||
sizeScrollContainers();
|
sizeScrollContainers();
|
||||||
// Nach Layoutwechsel neu entscheiden
|
|
||||||
['#checkout', '#checkin', '#aufgaben'].forEach(prefix => {
|
['#checkout', '#checkin', '#aufgaben'].forEach(prefix => {
|
||||||
const $scroller = $(`${prefix}-scroll`);
|
const $scroller = $(`${prefix}-scroll`);
|
||||||
const $table = $(`${prefix}-table`);
|
const $table = $(`${prefix}-table`);
|
||||||
@@ -172,32 +249,39 @@ $Epi = new Epirent();
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Guards pro Scroller
|
// Guards nur für aktivierte Scroller
|
||||||
attachScrollGuards($('#checkout-scroll'));
|
[['#checkout-scroll','checkout'], ['#checkin-scroll','checkin'], ['#aufgaben-scroll','aufgaben']].forEach(([sel,key]) => {
|
||||||
attachScrollGuards($('#checkin-scroll'));
|
if (isEnabledByKey(key)) attachScrollGuards($(sel));
|
||||||
attachScrollGuards($('#aufgaben-scroll'));
|
});
|
||||||
|
|
||||||
// Erstladen je Tabelle: laden -> Loop bauen -> ggf. Auto-Scroll -> zyklisch refreshen
|
// Erstladen je Tabelle
|
||||||
function initOne(scrollerSel, tableSel, tbodySel, url, ms) {
|
function initOne(scrollerSel, tableSel, tbodySel, url, ms, key) {
|
||||||
const $scroller = $(scrollerSel);
|
const $scroller = $(scrollerSel);
|
||||||
const $table = $(tableSel);
|
const $table = $(tableSel);
|
||||||
const $target = $(tbodySel);
|
const $target = $(tbodySel);
|
||||||
|
const enabled = isEnabledByKey(key);
|
||||||
|
|
||||||
$target.load(url, function () {
|
$target.load(url, function () {
|
||||||
buildSeamlessLoop($table, $scroller);
|
if (enabled) {
|
||||||
maybeStartAutoScroll($scroller);
|
buildSeamlessLoop($table, $scroller);
|
||||||
|
maybeStartAutoScroll($scroller);
|
||||||
|
} else {
|
||||||
|
$table.find('tbody.__loopClone').remove();
|
||||||
|
stopAutoScroll($scroller);
|
||||||
|
}
|
||||||
setTimeout(() => smartLoad($scroller, $table, $target, url, ms), ms);
|
setTimeout(() => smartLoad($scroller, $table, $target, url, ms), ms);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
initOne('#checkout-scroll', '#checkout-table', '#getCheckOutTableHolder', 'sources/getCheckOutTable.php', 5000);
|
initOne('#checkout-scroll', '#checkout-table', '#getCheckOutTableHolder', 'sources/getCheckOutTable.php', 10000, 'checkout');
|
||||||
initOne('#checkin-scroll', '#checkin-table', '#getCheckInTableHolder', 'sources/getCheckInTable.php', 5000);
|
initOne('#checkin-scroll', '#checkin-table', '#getCheckInTableHolder', 'sources/getCheckInTable.php', 10000, 'checkin');
|
||||||
initOne('#aufgaben-scroll', '#aufgaben-table', '#AufgabenTableHolder', 'sources/getAufgabenTable.php', 30000);
|
initOne('#aufgaben-scroll', '#aufgaben-table', '#AufgabenTableHolder', 'sources/getAufgabenTable.php', 60000, 'aufgaben');
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* Scroll-Wrapper je Tabelle */
|
/* Scroll-Wrapper je Tabelle */
|
||||||
.tableFixHead {
|
.tableFixHead {
|
||||||
@@ -230,7 +314,7 @@ $Epi = new Epirent();
|
|||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm">
|
<div class="col-sm" style="padding: 5px !important;">
|
||||||
<h2 class="text-light">Check-Out</h2>
|
<h2 class="text-light">Check-Out</h2>
|
||||||
<div class="tableFixHead" id="checkout-scroll">
|
<div class="tableFixHead" id="checkout-scroll">
|
||||||
<table class="table table-dark mb-0" id="checkout-table">
|
<table class="table table-dark mb-0" id="checkout-table">
|
||||||
@@ -240,13 +324,13 @@ $Epi = new Epirent();
|
|||||||
<th scope="col">Kunde</th>
|
<th scope="col">Kunde</th>
|
||||||
<th scope="col">Event</th>
|
<th scope="col">Event</th>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout){
|
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout || ShowDispoEndOnCheckin){
|
||||||
echo '<th scope="col">';
|
echo '<th scope="col">';
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ShowCheckoutTimeOnCheckout){
|
if(ShowCheckoutTimeOnCheckout){
|
||||||
echo "Dispo-Start";
|
echo "Checkout-Start";
|
||||||
}
|
}
|
||||||
if(ShowVorbereitungTimeOnCheckout){
|
if(ShowVorbereitungTimeOnCheckout){
|
||||||
if(ShowCheckoutTimeOnCheckout){echo "<br>";}
|
if(ShowCheckoutTimeOnCheckout){echo "<br>";}
|
||||||
@@ -260,7 +344,11 @@ $Epi = new Epirent();
|
|||||||
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout){echo "<br>";}
|
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout){echo "<br>";}
|
||||||
echo "Liefern";
|
echo "Liefern";
|
||||||
}
|
}
|
||||||
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout){
|
if(ShowDispoStartOnCheckout){
|
||||||
|
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout){echo "<br>";}
|
||||||
|
echo "Auftrag Start";
|
||||||
|
}
|
||||||
|
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout || ShowDispoStartOnCheckout){
|
||||||
echo '</th>';
|
echo '</th>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,7 +366,7 @@ $Epi = new Epirent();
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm">
|
<div class="col-sm" style="padding: 5px !important;">
|
||||||
<h2 class="text-light">Check-In</h2>
|
<h2 class="text-light">Check-In</h2>
|
||||||
<div class="tableFixHead" id="checkin-scroll">
|
<div class="tableFixHead" id="checkin-scroll">
|
||||||
<table class="table table-dark mb-0" id="checkin-table">
|
<table class="table table-dark mb-0" id="checkin-table">
|
||||||
@@ -292,7 +380,7 @@ $Epi = new Epirent();
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(ShowCheckInTimeOnCheckin){
|
if(ShowCheckInTimeOnCheckin){
|
||||||
echo "Dispo-Ende";
|
echo "CheckIn";
|
||||||
}
|
}
|
||||||
if(ShowNachbereitungTimeOnCheckin){
|
if(ShowNachbereitungTimeOnCheckin){
|
||||||
if(ShowCheckInTimeOnCheckin){echo "<br>";}
|
if(ShowCheckInTimeOnCheckin){echo "<br>";}
|
||||||
@@ -306,7 +394,11 @@ $Epi = new Epirent();
|
|||||||
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin){echo "<br>";}
|
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin){echo "<br>";}
|
||||||
echo "Rückliefern";
|
echo "Rückliefern";
|
||||||
}
|
}
|
||||||
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin){
|
if(ShowDispoEndOnCheckin){
|
||||||
|
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin | ShowReDeliveryTimeOnCheckin){echo "<br>";}
|
||||||
|
echo "Auftrag Ende";
|
||||||
|
}
|
||||||
|
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin || ShowDispoEndOnCheckin){
|
||||||
echo '</th>';
|
echo '</th>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,7 +419,7 @@ $Epi = new Epirent();
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm">
|
<div class="col-sm" style="padding: 5px !important;">
|
||||||
<h2 class="text-light">Aufgaben</h2>
|
<h2 class="text-light">Aufgaben</h2>
|
||||||
<div class="tableFixHead" id="aufgaben-scroll">
|
<div class="tableFixHead" id="aufgaben-scroll">
|
||||||
<table class="table table-dark mb-0" id="aufgaben-table">
|
<table class="table table-dark mb-0" id="aufgaben-table">
|
||||||
@@ -336,8 +428,8 @@ $Epi = new Epirent();
|
|||||||
<th scope="col">#</th>
|
<th scope="col">#</th>
|
||||||
<th scope="col">Bearbeiter</th>
|
<th scope="col">Bearbeiter</th>
|
||||||
<th scope="col">Aufgabe</th>
|
<th scope="col">Aufgabe</th>
|
||||||
<th scope="col">Zieldatum</th>
|
<th scope="col">Ziel</th>
|
||||||
<th scope="col">Priorität</th>
|
<th scope="col">Prio</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="AufgabenTableHolder"></tbody>
|
<tbody id="AufgabenTableHolder"></tbody>
|
||||||
|
|||||||
389
Packmonitor.php
389
Packmonitor.php
@@ -21,175 +21,228 @@ $Epi = new Epirent();
|
|||||||
<link href="css/sticky-footer.css" rel="stylesheet">
|
<link href="css/sticky-footer.css" rel="stylesheet">
|
||||||
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
// === Höhe der Scroll-Container bis Viewport-Ende anpassen ===
|
/* ===========================
|
||||||
function sizeScrollContainers() {
|
Feature-Toggles aus PHP
|
||||||
$('.tableFixHead').each(function () {
|
=========================== */
|
||||||
const rect = this.getBoundingClientRect();
|
const SCROLL_FLAGS = {
|
||||||
const bottomMargin = 16;
|
checkout: <?php echo (defined('EnableScrollingCheckOut') && EnableScrollingCheckOut) ? 'true' : 'false'; ?>,
|
||||||
const available = window.innerHeight - rect.top - bottomMargin;
|
checkin: <?php echo (defined('EnableScrollingCheckIn') && EnableScrollingCheckIn) ? 'true' : 'false'; ?>
|
||||||
this.style.maxHeight = (available > 120 ? available : 120) + 'px';
|
};
|
||||||
});
|
|
||||||
|
const SCROLLER_KEYS = new Map([
|
||||||
|
['checkout-scroll', 'checkout'],
|
||||||
|
['checkin-scroll', 'checkin']
|
||||||
|
]);
|
||||||
|
|
||||||
|
function keyForEl(el) { return el && el.id ? SCROLLER_KEYS.get(el.id) : null; }
|
||||||
|
function isEnabledByEl(el) { const k = keyForEl(el); return !!(k && SCROLL_FLAGS[k]); }
|
||||||
|
function isEnabledByKey(key) { return !!SCROLL_FLAGS[key]; }
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Höhe der Scroll-Container
|
||||||
|
- 2 nebeneinander: volle Höhe bis Viewport-Ende
|
||||||
|
- gestapelt: je 1/2 Fensterhöhe
|
||||||
|
=========================== */
|
||||||
|
function sizeScrollContainers() {
|
||||||
|
const nodes = [
|
||||||
|
document.querySelector('#checkout-scroll'),
|
||||||
|
document.querySelector('#checkin-scroll')
|
||||||
|
].filter(Boolean);
|
||||||
|
|
||||||
|
if (!nodes.length) return;
|
||||||
|
|
||||||
|
const tops = nodes.map(n => n.getBoundingClientRect().top);
|
||||||
|
const ROW_TOL = 8;
|
||||||
|
const firstTop = tops[0];
|
||||||
|
const isOneRow = tops.every(t => Math.abs(t - firstTop) <= ROW_TOL);
|
||||||
|
|
||||||
|
const bottomMargin = 16;
|
||||||
|
const minH = 120;
|
||||||
|
|
||||||
|
nodes.forEach(node => {
|
||||||
|
const rect = node.getBoundingClientRect();
|
||||||
|
if (isOneRow) {
|
||||||
|
const available = window.innerHeight - rect.top - bottomMargin;
|
||||||
|
node.style.maxHeight = Math.max(minH, available) + 'px';
|
||||||
|
} else {
|
||||||
|
const half = Math.floor(window.innerHeight / 2) - bottomMargin;
|
||||||
|
node.style.maxHeight = Math.max(minH, half) + 'px';
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// === Scroll-/Interaktionsstatus je Scroller ===
|
/* ===========================
|
||||||
const scrollState = new WeakMap(); // { userActive:boolean, autoTimer:number|null, loopHeight:number }
|
Scroll-/Interaktionsstatus
|
||||||
|
=========================== */
|
||||||
|
const scrollState = new WeakMap(); // { userActive:boolean, autoTimer:number|null, loopHeight:number }
|
||||||
|
|
||||||
function ensureState(el) {
|
function ensureState(el) {
|
||||||
if (!scrollState.get(el)) scrollState.set(el, { userActive: false, autoTimer: null, loopHeight: 0 });
|
if (!scrollState.get(el)) scrollState.set(el, { userActive: false, autoTimer: null, loopHeight: 0 });
|
||||||
return scrollState.get(el);
|
return scrollState.get(el);
|
||||||
}
|
}
|
||||||
|
|
||||||
function attachScrollGuards($scroller) {
|
function attachScrollGuards($scroller) {
|
||||||
const el = $scroller.get(0);
|
const el = $scroller.get(0);
|
||||||
if (!el || el.__guardsBound) return;
|
if (!el || el.__guardsBound) return;
|
||||||
const state = ensureState(el);
|
if (!isEnabledByEl(el)) return;
|
||||||
|
const state = ensureState(el);
|
||||||
|
|
||||||
const markActive = () => {
|
const markActive = () => {
|
||||||
state.userActive = true;
|
state.userActive = true;
|
||||||
clearTimeout(state._quietT);
|
clearTimeout(state._quietT);
|
||||||
state._quietT = setTimeout(() => { state.userActive = false; }, 800);
|
state._quietT = setTimeout(() => { state.userActive = false; }, 800);
|
||||||
|
stopAutoScroll($scroller);
|
||||||
|
};
|
||||||
|
|
||||||
|
$scroller.on('wheel touchstart touchmove keydown mousedown mouseenter', markActive);
|
||||||
|
$scroller.on('mouseleave', () => setTimeout(() => maybeStartAutoScroll($scroller), 600));
|
||||||
|
el.__guardsBound = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Nahtloser Loop (Clone)
|
||||||
|
=========================== */
|
||||||
|
function buildSeamlessLoop($table, $scroller) {
|
||||||
|
$table.find('tbody.__loopClone').remove();
|
||||||
|
|
||||||
|
const scEl = $scroller.get(0);
|
||||||
|
const enabled = isEnabledByEl(scEl);
|
||||||
|
const st = ensureState(scEl);
|
||||||
|
st.loopHeight = 0;
|
||||||
|
|
||||||
|
if (!enabled) return;
|
||||||
|
|
||||||
|
const $main = $table.find('tbody').first();
|
||||||
|
if ($main.length === 0 || $main.children().length === 0) return;
|
||||||
|
|
||||||
|
const needScroll = $main.get(0).offsetHeight > scEl.clientHeight + 1;
|
||||||
|
if (!needScroll) return;
|
||||||
|
|
||||||
|
const $clone = $main.clone(false, false).addClass('__loopClone').attr('aria-hidden', 'true');
|
||||||
|
$table.append($clone);
|
||||||
|
st.loopHeight = $main.get(0).offsetHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Auto-Scroll
|
||||||
|
=========================== */
|
||||||
|
function startAutoScroll($scroller, speedPx = 1, stepMs = 40) {
|
||||||
|
const el = $scroller.get(0);
|
||||||
|
if (!isEnabledByEl(el)) return;
|
||||||
|
|
||||||
|
const st = ensureState(el);
|
||||||
|
if (st.autoTimer) return;
|
||||||
|
if (st.loopHeight <= 0) return;
|
||||||
|
|
||||||
|
const tick = () => {
|
||||||
|
if (st.userActive) { stopAutoScroll($scroller); return; }
|
||||||
|
el.scrollTop += speedPx;
|
||||||
|
if (el.scrollTop >= st.loopHeight) el.scrollTop -= st.loopHeight;
|
||||||
|
};
|
||||||
|
|
||||||
|
st.autoTimer = setInterval(tick, stepMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
function stopAutoScroll($scroller) {
|
||||||
|
const el = $scroller.get(0);
|
||||||
|
const st = ensureState(el);
|
||||||
|
if (st.autoTimer) {
|
||||||
|
clearInterval(st.autoTimer);
|
||||||
|
st.autoTimer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function maybeStartAutoScroll($scroller) {
|
||||||
|
const el = $scroller.get(0);
|
||||||
|
if (!isEnabledByEl(el)) { stopAutoScroll($scroller); return; }
|
||||||
|
const st = ensureState(el);
|
||||||
|
if (st.userActive) return;
|
||||||
|
if (st.loopHeight > 0) startAutoScroll($scroller, 1, 40);
|
||||||
|
else stopAutoScroll($scroller);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================
|
||||||
|
Smart AJAX Reload
|
||||||
|
=========================== */
|
||||||
|
function smartLoad($scroller, $table, $target, url, intervalMs) {
|
||||||
|
const scEl = $scroller.get(0);
|
||||||
|
const st = ensureState(scEl);
|
||||||
|
const enabled = isEnabledByEl(scEl);
|
||||||
|
|
||||||
|
const oldLoop = st.loopHeight > 0 ? st.loopHeight : Math.max(1, scEl.scrollHeight - scEl.clientHeight);
|
||||||
|
const posInLoop = st.loopHeight > 0 ? (scEl.scrollTop % oldLoop) : scEl.scrollTop;
|
||||||
|
const posRatio = Math.min(1, posInLoop / oldLoop);
|
||||||
|
|
||||||
|
$target.load(url, function () {
|
||||||
|
if (enabled) {
|
||||||
|
buildSeamlessLoop($table, $scroller);
|
||||||
|
if (st.loopHeight > 0) {
|
||||||
|
const newPos = Math.floor(posRatio * st.loopHeight);
|
||||||
|
if (Math.abs(scEl.scrollTop - newPos) > 1) {
|
||||||
|
requestAnimationFrame(() => { scEl.scrollTop = newPos; });
|
||||||
|
}
|
||||||
stopAutoScroll($scroller);
|
stopAutoScroll($scroller);
|
||||||
};
|
startAutoScroll($scroller, 1, 40);
|
||||||
|
} else {
|
||||||
$scroller.on('wheel touchstart touchmove keydown mousedown mouseenter', markActive);
|
if (scEl.scrollTop !== 0) requestAnimationFrame(() => { scEl.scrollTop = 0; });
|
||||||
$scroller.on('mouseleave', () => setTimeout(() => maybeStartAutoScroll($scroller), 600));
|
stopAutoScroll($scroller);
|
||||||
el.__guardsBound = true;
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// === Loop aufbauen: nahtloses Doppel nur bei Bedarf ===
|
|
||||||
// Klont den ersten <tbody> als __loopClone ans Tabellenende, wenn Inhalt > Sichtbereich.
|
|
||||||
function buildSeamlessLoop($table, $scroller) {
|
|
||||||
$table.find('tbody.__loopClone').remove();
|
$table.find('tbody.__loopClone').remove();
|
||||||
|
stopAutoScroll($scroller);
|
||||||
const $main = $table.find('tbody').first();
|
if (scEl.scrollTop !== 0) requestAnimationFrame(() => { scEl.scrollTop = 0; });
|
||||||
const scEl = $scroller.get(0);
|
|
||||||
const st = ensureState(scEl);
|
|
||||||
|
|
||||||
if ($main.length === 0 || $main.children().length === 0) {
|
|
||||||
st.loopHeight = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const mainH = $main.get(0).offsetHeight;
|
|
||||||
const needScroll = mainH > scEl.clientHeight + 1;
|
|
||||||
|
|
||||||
if (!needScroll) {
|
|
||||||
st.loopHeight = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const $clone = $main.clone(false, false).addClass('__loopClone').attr('aria-hidden', 'true');
|
|
||||||
$table.append($clone);
|
|
||||||
st.loopHeight = mainH; // Höhe des Original-Inhalts als Loop-Länge
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// === Auto-Scroll (nahtlos) ===
|
setTimeout(() => smartLoad($scroller, $table, $target, url, intervalMs), intervalMs);
|
||||||
function startAutoScroll($scroller, speedPx = 1, stepMs = 40) {
|
});
|
||||||
const el = $scroller.get(0);
|
}
|
||||||
const st = ensureState(el);
|
|
||||||
|
|
||||||
if (st.autoTimer) return; // schon aktiv
|
/* ===========================
|
||||||
if (st.loopHeight <= 0) return; // kein Overflow => nicht scrollen
|
Initialisierung
|
||||||
|
=========================== */
|
||||||
|
$(document).ready(function () {
|
||||||
|
sizeScrollContainers();
|
||||||
|
|
||||||
const tick = () => {
|
$(window).on('resize', function () {
|
||||||
if (st.userActive) { stopAutoScroll($scroller); return; }
|
sizeScrollContainers();
|
||||||
el.scrollTop += speedPx;
|
['#checkout', '#checkin'].forEach(prefix => {
|
||||||
// Nahtlos: sobald wir das Ende des Original-Blocks überschreiten, ziehen wir loopHeight ab
|
const $scroller = $(`${prefix}-scroll`);
|
||||||
if (el.scrollTop >= st.loopHeight) {
|
const $table = $(`${prefix}-table`);
|
||||||
el.scrollTop -= st.loopHeight;
|
buildSeamlessLoop($table, $scroller);
|
||||||
}
|
maybeStartAutoScroll($scroller);
|
||||||
};
|
|
||||||
|
|
||||||
st.autoTimer = setInterval(tick, stepMs);
|
|
||||||
}
|
|
||||||
|
|
||||||
function stopAutoScroll($scroller) {
|
|
||||||
const el = $scroller.get(0);
|
|
||||||
const st = ensureState(el);
|
|
||||||
if (st.autoTimer) {
|
|
||||||
clearInterval(st.autoTimer);
|
|
||||||
st.autoTimer = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function maybeStartAutoScroll($scroller) {
|
|
||||||
const el = $scroller.get(0);
|
|
||||||
const st = ensureState(el);
|
|
||||||
if (st.userActive) return;
|
|
||||||
if (st.loopHeight > 0) startAutoScroll($scroller, 1, 40);
|
|
||||||
else stopAutoScroll($scroller);
|
|
||||||
}
|
|
||||||
|
|
||||||
// === AJAX-Reload: relative Position innerhalb der Loop erhalten ===
|
|
||||||
// Wir merken die Position modulo loopHeight; nach dem Reload setzen wir proportional um.
|
|
||||||
function smartLoad($scroller, $table, $target, url, intervalMs) {
|
|
||||||
const scEl = $scroller.get(0);
|
|
||||||
const st = ensureState(scEl);
|
|
||||||
|
|
||||||
const oldLoop = st.loopHeight > 0 ? st.loopHeight : Math.max(1, scEl.scrollHeight - scEl.clientHeight);
|
|
||||||
const posInLoop = st.loopHeight > 0 ? (scEl.scrollTop % oldLoop) : scEl.scrollTop;
|
|
||||||
const posRatio = Math.min(1, posInLoop / oldLoop);
|
|
||||||
|
|
||||||
$target.load(url, function () {
|
|
||||||
// Loop neu bewerten/aufbauen
|
|
||||||
buildSeamlessLoop($table, $scroller);
|
|
||||||
|
|
||||||
if (st.loopHeight > 0) {
|
|
||||||
// Neue relative Position setzen (proportional)
|
|
||||||
const newPos = Math.floor(posRatio * st.loopHeight);
|
|
||||||
if (Math.abs(scEl.scrollTop - newPos) > 1) {
|
|
||||||
// rAF für flüssiges Setzen außerhalb des load()-Layouts
|
|
||||||
requestAnimationFrame(() => { scEl.scrollTop = newPos; });
|
|
||||||
}
|
|
||||||
// Auto-Scroll (wieder) starten
|
|
||||||
stopAutoScroll($scroller);
|
|
||||||
startAutoScroll($scroller, 1, 40);
|
|
||||||
} else {
|
|
||||||
// kein Overflow -> ganz oben und Auto-Scroll aus
|
|
||||||
if (scEl.scrollTop !== 0) requestAnimationFrame(() => { scEl.scrollTop = 0; });
|
|
||||||
stopAutoScroll($scroller);
|
|
||||||
}
|
|
||||||
|
|
||||||
setTimeout(() => smartLoad($scroller, $table, $target, url, intervalMs), intervalMs);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// === Initialisierung ===
|
|
||||||
$(document).ready(function () {
|
|
||||||
sizeScrollContainers();
|
|
||||||
$(window).on('resize', function () {
|
|
||||||
sizeScrollContainers();
|
|
||||||
// Nach Layoutwechsel neu entscheiden (nur 2 Tabellen)
|
|
||||||
['#checkout', '#checkin'].forEach(prefix => {
|
|
||||||
const $scroller = $(`${prefix}-scroll`);
|
|
||||||
const $table = $(`${prefix}-table`);
|
|
||||||
buildSeamlessLoop($table, $scroller);
|
|
||||||
maybeStartAutoScroll($scroller);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Guards pro Scroller (nur 2)
|
|
||||||
attachScrollGuards($('#checkout-scroll'));
|
|
||||||
attachScrollGuards($('#checkin-scroll'));
|
|
||||||
|
|
||||||
// Erstladen je Tabelle: laden -> Loop bauen -> ggf. Auto-Scroll -> zyklisch refreshen
|
|
||||||
function initOne(scrollerSel, tableSel, tbodySel, url, ms) {
|
|
||||||
const $scroller = $(scrollerSel);
|
|
||||||
const $table = $(tableSel);
|
|
||||||
const $target = $(tbodySel);
|
|
||||||
|
|
||||||
$target.load(url, function () {
|
|
||||||
buildSeamlessLoop($table, $scroller);
|
|
||||||
maybeStartAutoScroll($scroller);
|
|
||||||
setTimeout(() => smartLoad($scroller, $table, $target, url, ms), ms);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
initOne('#checkout-scroll', '#checkout-table', '#getCheckOutTableHolder', 'sources/getCheckOutTable.php', 5000);
|
|
||||||
initOne('#checkin-scroll', '#checkin-table', '#getCheckInTableHolder', 'sources/getCheckInTable.php', 5000);
|
|
||||||
});
|
});
|
||||||
</script>
|
});
|
||||||
|
|
||||||
|
// Guards nur für aktivierte Scroller
|
||||||
|
[['#checkout-scroll','checkout'], ['#checkin-scroll','checkin']].forEach(([sel,key]) => {
|
||||||
|
if (isEnabledByKey(key)) attachScrollGuards($(sel));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Erstladen je Tabelle
|
||||||
|
function initOne(scrollerSel, tableSel, tbodySel, url, ms, key) {
|
||||||
|
const $scroller = $(scrollerSel);
|
||||||
|
const $table = $(tableSel);
|
||||||
|
const $target = $(tbodySel);
|
||||||
|
const enabled = isEnabledByKey(key);
|
||||||
|
|
||||||
|
$target.load(url, function () {
|
||||||
|
if (enabled) {
|
||||||
|
buildSeamlessLoop($table, $scroller);
|
||||||
|
maybeStartAutoScroll($scroller);
|
||||||
|
} else {
|
||||||
|
$table.find('tbody.__loopClone').remove();
|
||||||
|
stopAutoScroll($scroller);
|
||||||
|
}
|
||||||
|
setTimeout(() => smartLoad($scroller, $table, $target, url, ms), ms);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
initOne('#checkout-scroll', '#checkout-table', '#getCheckOutTableHolder', 'sources/getCheckOutTable.php', 10000, 'checkout');
|
||||||
|
initOne('#checkin-scroll', '#checkin-table', '#getCheckInTableHolder', 'sources/getCheckInTable.php', 10000, 'checkin');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* Scroll-Wrapper je Tabelle */
|
/* Scroll-Wrapper je Tabelle */
|
||||||
@@ -226,7 +279,7 @@ $Epi = new Epirent();
|
|||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<!-- Check-Out -->
|
<!-- Check-Out -->
|
||||||
<div class="col-sm">
|
<div class="col-xl">
|
||||||
<h2 class="text-light">Check-Out</h2>
|
<h2 class="text-light">Check-Out</h2>
|
||||||
<div class="tableFixHead" id="checkout-scroll">
|
<div class="tableFixHead" id="checkout-scroll">
|
||||||
<table class="table table-dark mb-0" id="checkout-table">
|
<table class="table table-dark mb-0" id="checkout-table">
|
||||||
@@ -236,12 +289,12 @@ $Epi = new Epirent();
|
|||||||
<th scope="col">Kunde</th>
|
<th scope="col">Kunde</th>
|
||||||
<th scope="col">Event</th>
|
<th scope="col">Event</th>
|
||||||
<?php
|
<?php
|
||||||
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout){
|
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout || ShowDispoEndOnCheckin){
|
||||||
echo '<th scope="col">';
|
echo '<th scope="col">';
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ShowCheckoutTimeOnCheckout){
|
if(ShowCheckoutTimeOnCheckout){
|
||||||
echo "Dispo-Start";
|
echo "Checkout-Start";
|
||||||
}
|
}
|
||||||
if(ShowVorbereitungTimeOnCheckout){
|
if(ShowVorbereitungTimeOnCheckout){
|
||||||
if(ShowCheckoutTimeOnCheckout){echo "<br>";}
|
if(ShowCheckoutTimeOnCheckout){echo "<br>";}
|
||||||
@@ -255,7 +308,11 @@ $Epi = new Epirent();
|
|||||||
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout){echo "<br>";}
|
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout){echo "<br>";}
|
||||||
echo "Liefern";
|
echo "Liefern";
|
||||||
}
|
}
|
||||||
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout){
|
if(ShowDispoStartOnCheckout){
|
||||||
|
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout){echo "<br>";}
|
||||||
|
echo "Auftrag Start";
|
||||||
|
}
|
||||||
|
if(ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout||ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout || ShowDispoStartOnCheckout){
|
||||||
echo '</th>';
|
echo '</th>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,7 +331,7 @@ $Epi = new Epirent();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Check-In -->
|
<!-- Check-In -->
|
||||||
<div class="col-sm">
|
<div class="col-xl">
|
||||||
<h2 class="text-light">Check-In</h2>
|
<h2 class="text-light">Check-In</h2>
|
||||||
<div class="tableFixHead" id="checkin-scroll">
|
<div class="tableFixHead" id="checkin-scroll">
|
||||||
<table class="table table-dark mb-0" id="checkin-table">
|
<table class="table table-dark mb-0" id="checkin-table">
|
||||||
@@ -289,7 +346,7 @@ $Epi = new Epirent();
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(ShowCheckInTimeOnCheckin){
|
if(ShowCheckInTimeOnCheckin){
|
||||||
echo "Dispo-Ende";
|
echo "CheckIn";
|
||||||
}
|
}
|
||||||
if(ShowNachbereitungTimeOnCheckin){
|
if(ShowNachbereitungTimeOnCheckin){
|
||||||
if(ShowCheckInTimeOnCheckin){echo "<br>";}
|
if(ShowCheckInTimeOnCheckin){echo "<br>";}
|
||||||
@@ -303,7 +360,11 @@ $Epi = new Epirent();
|
|||||||
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin){echo "<br>";}
|
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin){echo "<br>";}
|
||||||
echo "Rückliefern";
|
echo "Rückliefern";
|
||||||
}
|
}
|
||||||
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin){
|
if(ShowDispoEndOnCheckin){
|
||||||
|
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin | ShowReDeliveryTimeOnCheckin){echo "<br>";}
|
||||||
|
echo "Auftrag Ende";
|
||||||
|
}
|
||||||
|
if(ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin||ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin || ShowDispoEndOnCheckin){
|
||||||
echo '</th>';
|
echo '</th>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
20
README.MD
20
README.MD
@@ -1,6 +1,6 @@
|
|||||||
# EPIWebview
|
# EPIWebview
|
||||||
|
|
||||||
- **aktuellste stable Version:** 1.5.0
|
- **aktuellste stable Version:** 1.9.0
|
||||||
- **Lizenz:** Creative Commons Attribution-NonCommercial-ShareAlike 4.0 (CC BY-NC-SA 4.0). Einsehbar unter: (LICENSE.MD)
|
- **Lizenz:** Creative Commons Attribution-NonCommercial-ShareAlike 4.0 (CC BY-NC-SA 4.0). Einsehbar unter: (LICENSE.MD)
|
||||||
- **Kompatibilität:** Erweiterung für **Epirent** und **CrewBrain**
|
- **Kompatibilität:** Erweiterung für **Epirent** und **CrewBrain**
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ Die Anwendung ist speziell für den Einsatz in Lagerprozessen entwickelt.
|
|||||||
|
|
||||||
- **Check-In / Check-Out Übersicht**: Lagermonitor
|
- **Check-In / Check-Out Übersicht**: Lagermonitor
|
||||||
- **Integration mit Epirent API**: Vollständig kompatibel mit bestehenden Epirent-Systemen.
|
- **Integration mit Epirent API**: Vollständig kompatibel mit bestehenden Epirent-Systemen.
|
||||||
- **Integration mit Crewbrain**: Anzeige einer Aufgabenliste aus CrewBrain
|
- **Integration mit Crewbrain**: Anzeige einer Aufgabenliste aus CrewBraingit
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -25,7 +25,8 @@ Die Anwendung ist speziell für den Einsatz in Lagerprozessen entwickelt.
|
|||||||
|
|
||||||
## Systemanforderungen
|
## Systemanforderungen
|
||||||
|
|
||||||
- **Server:** PHP ≥ 8.1, Apache oder Nginx
|
- **Server:** PHP ≥ 8.2, Apache oder Nginx
|
||||||
|
- Achtung !!: Für die Return of Invest Funktion oder den Warengruppencheck / Imagechecks sollten in der php.ini die max_execution_time und die maximale Dateigröße deutlich nach oben korrigiert werden. Die ROI Funktion kann gut und gerne 20 Minuten laden!
|
||||||
- **Client:** Aktueller Browser (Chrome, Edge, Firefox, Safari)
|
- **Client:** Aktueller Browser (Chrome, Edge, Firefox, Safari)
|
||||||
- **Datenquelle:** Bestehende Epirent-Installation mit aktivierter API sowie optional CrewBrain
|
- **Datenquelle:** Bestehende Epirent-Installation mit aktivierter API sowie optional CrewBrain
|
||||||
|
|
||||||
@@ -36,6 +37,19 @@ Die Anwendung ist speziell für den Einsatz in Lagerprozessen entwickelt.
|
|||||||
1. Repository klonen oder Dateien ins Webverzeichnis kopieren:
|
1. Repository klonen oder Dateien ins Webverzeichnis kopieren:
|
||||||
```bash
|
```bash
|
||||||
git clone http://srvgitea01.vtm.zone:3000/epi/EpiWebview
|
git clone http://srvgitea01.vtm.zone:3000/epi/EpiWebview
|
||||||
|
2. Config-Seite unter /dist/editconfig.php aufrufen, notwendige Einstellungen vornehmen -> Speichern. Wichtig! Verzeichnis muss für Webserver beschreibbar sein!
|
||||||
|
3. Alternativ: example.config.php nach config.php kopieren! (example.config.php darf nicht gelöscht werden!)
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Update
|
||||||
|
|
||||||
|
1. Repository klonen oder Dateien ins Webverzeichnis kopieren, dabei alte Dateien löschen (bis auf config.php):
|
||||||
|
```bash
|
||||||
|
git clone http://srvgitea01.vtm.zone:3000/epi/EpiWebview
|
||||||
|
2. Einmalig die Config-Seite aufrufen und speichern drücken. Dadurch werden geupdatete Config-Felder übernommen
|
||||||
|
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
Verschoben in Releases (Git)
|
Verschoben in Releases (Git)
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"guzzlehttp/guzzle": "^7.0",
|
"guzzlehttp/guzzle": "^7.0",
|
||||||
"twbs/bootstrap": "^4.5",
|
"twbs/bootstrap": "^4.5",
|
||||||
"chillerlan/php-qrcode": "^5.0"
|
"chillerlan/php-qrcode": "^5.0",
|
||||||
|
"phpoffice/phpspreadsheet": "^5.1",
|
||||||
|
"tecnickcom/tc-lib-pdf": "^8.1",
|
||||||
|
"tecnickcom/tcpdf": "^6.10"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1419
composer.lock
generated
1419
composer.lock
generated
File diff suppressed because it is too large
Load Diff
1324
dist/ROI.php
vendored
Normal file
1324
dist/ROI.php
vendored
Normal file
File diff suppressed because it is too large
Load Diff
413
dist/editconfig.php
vendored
Normal file
413
dist/editconfig.php
vendored
Normal file
@@ -0,0 +1,413 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config-Editor für EPI Webview
|
||||||
|
* - Liest ../config.php (falls vorhanden) und ../example.config.php
|
||||||
|
* - Zeigt editierbare Felder für alle Keys aus example.config.php
|
||||||
|
* - Zeigt veraltete (nur in config.php existierende) Keys rot & disabled
|
||||||
|
* - Speichert Werte zurück nach ../config.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
// ---- Dateipfade anpassen falls nötig ----
|
||||||
|
$CONFIG_FILE = realpath(__DIR__ . '/../config.php') ?: (__DIR__ . '/../config.php');
|
||||||
|
$EXAMPLE_FILE = realpath(__DIR__ . '/../example.config.php') ?: (__DIR__ . '/../example.config.php');
|
||||||
|
|
||||||
|
// ---- Hilfsfunktionen: Parsing ----
|
||||||
|
function parse_define_file(string $file): array {
|
||||||
|
if (!is_file($file)) return ['defines' => [], 'order' => [], 'ui' => []];
|
||||||
|
|
||||||
|
$lines = file($file, FILE_IGNORE_NEW_LINES);
|
||||||
|
$defines = [];
|
||||||
|
$order = [];
|
||||||
|
$ui = [];
|
||||||
|
|
||||||
|
// BOM entfernen, falls vorhanden
|
||||||
|
if (isset($lines[0])) {
|
||||||
|
$lines[0] = preg_replace('/^\xEF\xBB\xBF/', '', $lines[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Regex
|
||||||
|
$reDefine = '/^\s*define\(\s*([\'"])([^\'"]+)\1\s*,\s*(.+?)\s*\)\s*;\s*(?:(?:\/\/|#)\s*(.*))?$/u';
|
||||||
|
$reSection = '/^\s*\/\/\s*@section\s*:\s*(.+)\s*$/iu';
|
||||||
|
$reHR = '/^\s*\/\/\s*@hr\s*$/iu';
|
||||||
|
$reNote = '/^\s*\/\/\s*@note\s*:\s*(.+)\s*$/iu';
|
||||||
|
|
||||||
|
foreach ($lines as $ln) {
|
||||||
|
// Meta-Kommentare zuerst prüfen (UI-Struktur)
|
||||||
|
if (preg_match($reSection, $ln, $m)) {
|
||||||
|
$ui[] = ['kind' => 'section', 'title' => trim($m[1])];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (preg_match($reHR, $ln)) {
|
||||||
|
$ui[] = ['kind' => 'hr'];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (preg_match($reNote, $ln, $m)) {
|
||||||
|
$ui[] = ['kind' => 'note', 'text' => trim($m[1])];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// define(…) Zeilen
|
||||||
|
if (!preg_match($reDefine, $ln, $m)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = $m[2];
|
||||||
|
$rawValueExpr = trim($m[3]);
|
||||||
|
$inlineC = isset($m[4]) ? trim($m[4]) : '';
|
||||||
|
|
||||||
|
// Typ bestimmen
|
||||||
|
$type = 'string';
|
||||||
|
$valForForm = '';
|
||||||
|
$raw = rtrim($rawValueExpr, ',');
|
||||||
|
|
||||||
|
if (preg_match('/^(true|false)$/i', $raw)) {
|
||||||
|
$type = 'bool';
|
||||||
|
$valForForm = (strtolower($raw) === 'true');
|
||||||
|
} elseif (preg_match('/^[+-]?\d+$/', $raw)) {
|
||||||
|
$type = 'int';
|
||||||
|
$valForForm = (int)$raw;
|
||||||
|
} elseif (preg_match('/^([\'"])(.*)\1$/s', $raw, $mm)) {
|
||||||
|
$type = 'string';
|
||||||
|
$valForForm = stripcslashes($mm[2]);
|
||||||
|
} else {
|
||||||
|
$type = 'string';
|
||||||
|
$valForForm = $raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
$defines[$name] = [
|
||||||
|
'name' => $name,
|
||||||
|
'type' => $type,
|
||||||
|
'value' => $valForForm,
|
||||||
|
'raw' => $rawValueExpr,
|
||||||
|
'comment' => $inlineC,
|
||||||
|
'line' => $ln,
|
||||||
|
];
|
||||||
|
$order[] = $name;
|
||||||
|
// Wichtig: define auch in die UI-Reihenfolge aufnehmen
|
||||||
|
$ui[] = ['kind' => 'define', 'name' => $name];
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['defines' => $defines, 'order' => $order, 'ui' => $ui];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function php_export_define_value(string $type, $value): string {
|
||||||
|
// Baut den rechten Teil von define('X', <HIER>);
|
||||||
|
if ($type === 'bool') {
|
||||||
|
return $value ? 'true' : 'false';
|
||||||
|
}
|
||||||
|
if ($type === 'int') {
|
||||||
|
return (string)intval($value);
|
||||||
|
}
|
||||||
|
// String:
|
||||||
|
// einfache Quotes nehmen und escapen
|
||||||
|
$escaped = str_replace("'", "\\'", (string)$value);
|
||||||
|
return "'" . $escaped . "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
function h(?string $s): string { return htmlspecialchars((string)$s ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }
|
||||||
|
|
||||||
|
// ---- Dateien parsen ----
|
||||||
|
$example = parse_define_file($EXAMPLE_FILE);
|
||||||
|
$current = parse_define_file($CONFIG_FILE);
|
||||||
|
|
||||||
|
// Keys klassifizieren
|
||||||
|
$exampleKeys = array_keys($example['defines']);
|
||||||
|
$currentKeys = array_keys($current['defines']);
|
||||||
|
|
||||||
|
$deprecatedKeys = array_values(array_diff($currentKeys, $exampleKeys)); // nur in config.php
|
||||||
|
$newKeys = array_values(array_diff($exampleKeys, $currentKeys)); // nur in example (neu)
|
||||||
|
$sharedKeys = array_values(array_intersect($exampleKeys, $currentKeys));
|
||||||
|
|
||||||
|
// Beim Rendern: Reihenfolge aus example beibehalten
|
||||||
|
$renderKeys = $example['order'];
|
||||||
|
|
||||||
|
// ---- POST: Speichern ----
|
||||||
|
$message = '';
|
||||||
|
$err = '';
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['__save_config']) && isset($_POST['cfg']) && is_array($_POST['cfg'])) {
|
||||||
|
|
||||||
|
$incoming = $_POST['cfg']; // ['NAME' => valueString/checkbox etc.]
|
||||||
|
|
||||||
|
// Build neuer config.php Inhalt:
|
||||||
|
$out = [];
|
||||||
|
$out[] = "<?php";
|
||||||
|
$out[] = "// Diese Datei wurde durch den Epi Webview Config-Editor erzeugt/aktualisiert.";
|
||||||
|
$out[] = "// Bearbeite Werte bevorzugt über die Weboberfläche.";
|
||||||
|
$out[] = "";
|
||||||
|
|
||||||
|
// --- Inhalt in der Reihenfolge & Struktur der example.config.php ---
|
||||||
|
foreach ($example['ui'] as $item) {
|
||||||
|
if ($item['kind'] === 'section') {
|
||||||
|
$out[] = "// @section: " . $item['title'];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($item['kind'] === 'hr') {
|
||||||
|
$out[] = "// @hr";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($item['kind'] === 'note') {
|
||||||
|
$out[] = "// @note: " . $item['text'];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($item['kind'] !== 'define') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$label = $item['name'];
|
||||||
|
$ex = $example['defines'][$label] ?? null;
|
||||||
|
if (!$ex) continue;
|
||||||
|
|
||||||
|
$type = $ex['type']; // Typ an example orientieren
|
||||||
|
$tooltip = $ex['comment'] ?? '';
|
||||||
|
|
||||||
|
// Wert aus POST übernehmen (Checkbox-Fix: existiert das Feld?)
|
||||||
|
if ($type === 'bool') {
|
||||||
|
$bool = array_key_exists($label, $incoming);
|
||||||
|
$valueForDefine = php_export_define_value('bool', $bool);
|
||||||
|
} elseif ($type === 'int') {
|
||||||
|
$raw = $incoming[$label] ?? '';
|
||||||
|
$valueForDefine = php_export_define_value('int', $raw);
|
||||||
|
} else {
|
||||||
|
$raw = $incoming[$label] ?? '';
|
||||||
|
$valueForDefine = php_export_define_value('string', $raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
$line = "define('{$label}', {$valueForDefine});";
|
||||||
|
if (!empty($tooltip)) {
|
||||||
|
$line .= " // " . $tooltip; // Kommentare als Tooltip auch in config.php mitführen
|
||||||
|
}
|
||||||
|
$out[] = $line;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated Block (nur in aktueller config.php vorhanden, nicht in example)
|
||||||
|
if (!empty($deprecatedKeys)) {
|
||||||
|
$out[] = "";
|
||||||
|
$out[] = "// --- Veraltete/entfernte Parameter (nur Referenz, werden nicht mehr genutzt) ---";
|
||||||
|
foreach ($deprecatedKeys as $key) {
|
||||||
|
$c = $current['defines'][$key];
|
||||||
|
$valueForDefine = php_export_define_value($c['type'], $c['value']);
|
||||||
|
$line = "// define('{$c['name']}', {$valueForDefine});";
|
||||||
|
if (!empty($c['comment'])) {
|
||||||
|
$line .= " // " . $c['comment'];
|
||||||
|
}
|
||||||
|
$out[] = $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$out[] = "?>";
|
||||||
|
$content = implode("\n", $out) . "\n";
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (false === file_put_contents($CONFIG_FILE, $content)) {
|
||||||
|
$err = "Konnte config.php nicht schreiben: " . h($CONFIG_FILE);
|
||||||
|
} else {
|
||||||
|
$message = "Konfiguration gespeichert.";
|
||||||
|
// Nach dem Speichern neu parsen, damit UI aktuell ist
|
||||||
|
$current = parse_define_file($CONFIG_FILE);
|
||||||
|
$currentKeys = array_keys($current['defines']);
|
||||||
|
$deprecatedKeys = array_values(array_diff($currentKeys, $exampleKeys));
|
||||||
|
$sharedKeys = array_values(array_intersect($exampleKeys, $currentKeys));
|
||||||
|
}
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
$err = "Fehler beim Schreiben: " . h($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ---- Werte für Formular vorbereiten ----
|
||||||
|
// Für jeden example-Key: Formularwert = aus aktueller config (falls vorhanden), sonst example default
|
||||||
|
function valueForForm(array $example, array $current, string $key) {
|
||||||
|
$ex = $example['defines'][$key] ?? null;
|
||||||
|
$cu = $current['defines'][$key] ?? null;
|
||||||
|
$type = $ex ? $ex['type'] : ($cu ? $cu['type'] : 'string');
|
||||||
|
$comment = $ex && $ex['comment'] !== '' ? $ex['comment'] : ($cu['comment'] ?? '');
|
||||||
|
|
||||||
|
if ($cu) {
|
||||||
|
$val = $cu['value'];
|
||||||
|
} else {
|
||||||
|
$val = $ex['value'];
|
||||||
|
}
|
||||||
|
return [$type, $val, $comment];
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||||
|
<meta name="description" content="Konfiguration bearbeiten" />
|
||||||
|
<meta name="author" content="" />
|
||||||
|
<title>Konfiguration – Epi Webview</title>
|
||||||
|
|
||||||
|
<link href="css/styles.css" rel="stylesheet" />
|
||||||
|
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet" crossorigin="anonymous" />
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
|
||||||
|
<script src="js/jquery-3.5.1.min.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.deprecated { color: #c62828; }
|
||||||
|
.cfg-help { margin-left: .35rem; cursor: help; }
|
||||||
|
.form-group { margin-bottom: .75rem; }
|
||||||
|
.small-muted { font-size:.85rem; color:#6c757d; }
|
||||||
|
.checkbox-inline { display:flex; align-items:center; gap:.5rem; }
|
||||||
|
.cfg-label { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(function(){
|
||||||
|
// Tooltips (Bootstrap 4)
|
||||||
|
$('[data-toggle="tooltip"]').tooltip();
|
||||||
|
|
||||||
|
// Side UI nachladen wie in deinem Template
|
||||||
|
loadSidenav();
|
||||||
|
loadFooter();
|
||||||
|
});
|
||||||
|
function loadSidenav(){
|
||||||
|
$('#layoutSidenav_nav').load('../sources/getSidenav.php');
|
||||||
|
}
|
||||||
|
function loadFooter(){
|
||||||
|
$('#footerholder').load('../sources/getFooter.php');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body class="sb-nav-fixed">
|
||||||
|
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
|
||||||
|
<a class="navbar-brand" href="index.php">Epi Webview</a>
|
||||||
|
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle" type="button"><i class="fas fa-bars"></i></button>
|
||||||
|
<ul class="navbar-nav ml-auto ml-md-0"></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div id="layoutSidenav">
|
||||||
|
<div id="layoutSidenav_nav"></div>
|
||||||
|
<div id="layoutSidenav_content">
|
||||||
|
<main>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<h1 class="mt-4">Konfiguration</h1>
|
||||||
|
<ol class="breadcrumb mb-4">
|
||||||
|
<li class="breadcrumb-item active">Dashboard / Konfiguration</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<?php if ($message): ?>
|
||||||
|
<div class="alert alert-success"><?= h($message) ?></div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($err): ?>
|
||||||
|
<div class="alert alert-danger"><?= h($err) ?></div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<div class="card mb-4">
|
||||||
|
<div class="card-header">
|
||||||
|
<i class="fas fa-sliders-h mr-1"></i>
|
||||||
|
Einstellungen
|
||||||
|
<span class="small-muted">( <code><?=h(basename($CONFIG_FILE))?></code> Source: <code><?=h(basename($EXAMPLE_FILE))?></code>)</span>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<form method="post">
|
||||||
|
<input type="hidden" name="__save_config" value="1" />
|
||||||
|
|
||||||
|
<?php foreach ($example['ui'] as $item): ?>
|
||||||
|
<?php
|
||||||
|
if ($item['kind'] === 'section') {
|
||||||
|
echo '<h5 class="mt-3">'.h($item['title']).'</h5>';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($item['kind'] === 'hr') {
|
||||||
|
echo '<hr />';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($item['kind'] === 'note') {
|
||||||
|
echo '<p class="small-muted">'.h($item['text']).'</p>';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($item['kind'] !== 'define') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$key = $item['name'];
|
||||||
|
// Nur Keys rendern, die in example vorkommen
|
||||||
|
if (!isset($example['defines'][$key])) continue;
|
||||||
|
|
||||||
|
[$type, $val, $tooltip] = valueForForm($example, $current, $key);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="cfg-label" for="cfg_<?=h($key)?>">
|
||||||
|
<?= h($key) ?>
|
||||||
|
<?php if ($tooltip): ?>
|
||||||
|
<i class="far fa-question-circle cfg-help"
|
||||||
|
data-toggle="tooltip" data-placement="right"
|
||||||
|
title="<?=h($tooltip)?>"></i>
|
||||||
|
<?php endif; ?>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<?php if ($type === 'bool'): ?>
|
||||||
|
<div class="checkbox-inline">
|
||||||
|
<input type="checkbox"
|
||||||
|
id="cfg_<?=h($key)?>"
|
||||||
|
name="cfg[<?=h($key)?>]"
|
||||||
|
value="1" <?= $val ? 'checked' : '' ?> />
|
||||||
|
<span><?= $val ? 'Aktiviert' : 'Deaktiviert' ?></span>
|
||||||
|
</div>
|
||||||
|
<?php elseif ($type === 'int'): ?>
|
||||||
|
<input type="number" step="1" class="form-control"
|
||||||
|
id="cfg_<?=h($key)?>"
|
||||||
|
name="cfg[<?=h($key)?>]"
|
||||||
|
value="<?=h((string)$val)?>" />
|
||||||
|
<?php else: ?>
|
||||||
|
<input type="text" class="form-control"
|
||||||
|
id="cfg_<?=h($key)?>"
|
||||||
|
name="cfg[<?=h($key)?>]"
|
||||||
|
value="<?=h((string)$val)?>" />
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
<?php if (!empty($deprecatedKeys)): ?>
|
||||||
|
<hr />
|
||||||
|
<h5 class="deprecated">Veraltete Parameter (nur in <code><?=h(basename($CONFIG_FILE))?></code>, nicht mehr in <code><?=h(basename($EXAMPLE_FILE))?></code>)</h5>
|
||||||
|
<?php foreach ($deprecatedKeys as $key): ?>
|
||||||
|
<?php $c = $current['defines'][$key]; ?>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="cfg-label deprecated" for="dep_<?=h($key)?>">
|
||||||
|
<?= h($key) ?>
|
||||||
|
<?php if (!empty($c['comment'])): ?>
|
||||||
|
<i class="far fa-question-circle cfg-help" data-toggle="tooltip" data-placement="right" title="<?=h($c['comment'])?>"></i>
|
||||||
|
<?php endif; ?>
|
||||||
|
</label>
|
||||||
|
<input type="text" class="form-control is-invalid" id="dep_<?=h($key)?>" value="<?=
|
||||||
|
h($c['type']==='bool' ? ($c['value']?'true':'false') : (string)$c['value'])
|
||||||
|
?>" disabled />
|
||||||
|
<div class="invalid-feedback">Dieser Parameter ist in der aktuellen Version nicht mehr vorgesehen.</div>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<div class="mt-4">
|
||||||
|
<button type="submit" class="btn btn-primary"><i class="fas fa-save mr-1"></i> Speichern</button>
|
||||||
|
<span class="small-muted ml-2">Speichert nach <code><?=h($CONFIG_FILE)?></code></span>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<div id="footerholder"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
|
||||||
|
<script src="js/scripts.js"></script>
|
||||||
|
<script>
|
||||||
|
// Sidebar Toggle (falls benötigt)
|
||||||
|
$('#sidebarToggle').on('click', function(){ $('body').toggleClass('sb-sidenav-toggled'); });
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
128
dist/groupofgoodscheck.php
vendored
Normal file
128
dist/groupofgoodscheck.php
vendored
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require('../config.php');
|
||||||
|
require('../EpiApi.php');
|
||||||
|
require_once __DIR__ . '/../vendor/autoload.php';
|
||||||
|
date_default_timezone_set('Europe/Berlin');
|
||||||
|
|
||||||
|
$Epi = new Epirent();
|
||||||
|
$productList = json_decode($Epi->requestEpiApi('/v1/product/all?ia=true&ir=true&cl=' . Epirent_Mandant))->payload;
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||||
|
<title>Imagecheck - EpiWebview</title>
|
||||||
|
|
||||||
|
<!-- Styles -->
|
||||||
|
<link href="css/styles.css" rel="stylesheet" />
|
||||||
|
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
<!-- JS -->
|
||||||
|
<script src="js/jquery-3.5.1.min.js"></script>
|
||||||
|
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
|
||||||
|
<script src="https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.opacity-50 {
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card .h2,
|
||||||
|
.card .display-4 {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kpi-updated {
|
||||||
|
font-size: .82rem;
|
||||||
|
opacity: .85;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#layoutSidenav_nav').load('../sources/getSidenav.php');
|
||||||
|
$('#footerholder').load('../sources/getFooter.php');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="sb-nav-fixed">
|
||||||
|
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
|
||||||
|
<a class="navbar-brand" href="index.php">Epi Webview</a>
|
||||||
|
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle"><i class="fas fa-bars"></i></button>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div id="layoutSidenav">
|
||||||
|
<div id="layoutSidenav_nav"></div>
|
||||||
|
<div id="layoutSidenav_content">
|
||||||
|
<main>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<h1 class="mt-4">Warengruppenprüfung</h1>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card mb-4">
|
||||||
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
|
<div><i class="fas fa-table mr-1"></i> Zeigt welche Artikel keine Warengruppe haben</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table id="dataTable" class="table table-bordered" width="100%" cellspacing="0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th>PN</th>
|
||||||
|
<th>Name</th>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach ($productList as $product) {
|
||||||
|
|
||||||
|
if( count($product->group_of_goods) == 0 || $product->group_of_goods ==null){
|
||||||
|
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->primary_key) . "</td>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->product_no) . "</td>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->name) . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<div id="footerholder"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Bootstrap Bundle -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#dataTable').DataTable({
|
||||||
|
"pageLength": 25,
|
||||||
|
"language": {
|
||||||
|
"url": "//cdn.datatables.net/plug-ins/1.10.20/i18n/German.json"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
128
dist/imagecheck.php
vendored
Normal file
128
dist/imagecheck.php
vendored
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require('../config.php');
|
||||||
|
require('../EpiApi.php');
|
||||||
|
require_once __DIR__ . '/../vendor/autoload.php';
|
||||||
|
date_default_timezone_set('Europe/Berlin');
|
||||||
|
|
||||||
|
$Epi = new Epirent();
|
||||||
|
$productList = json_decode($Epi->requestEpiApi('/v1/product/all?ia=true&ir=true&cl=' . Epirent_Mandant))->payload;
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||||
|
<title>Imagecheck - EpiWebview</title>
|
||||||
|
|
||||||
|
<!-- Styles -->
|
||||||
|
<link href="css/styles.css" rel="stylesheet" />
|
||||||
|
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
<!-- JS -->
|
||||||
|
<script src="js/jquery-3.5.1.min.js"></script>
|
||||||
|
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
|
||||||
|
<script src="https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.opacity-50 {
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card .h2,
|
||||||
|
.card .display-4 {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kpi-updated {
|
||||||
|
font-size: .82rem;
|
||||||
|
opacity: .85;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#layoutSidenav_nav').load('../sources/getSidenav.php');
|
||||||
|
$('#footerholder').load('../sources/getFooter.php');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="sb-nav-fixed">
|
||||||
|
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
|
||||||
|
<a class="navbar-brand" href="index.php">Epi Webview</a>
|
||||||
|
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle"><i class="fas fa-bars"></i></button>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div id="layoutSidenav">
|
||||||
|
<div id="layoutSidenav_nav"></div>
|
||||||
|
<div id="layoutSidenav_content">
|
||||||
|
<main>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<h1 class="mt-4">Imagecheck</h1>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card mb-4">
|
||||||
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
|
<div><i class="fas fa-table mr-1"></i> Zeigt welche Artikel keine Bilder haben</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table id="dataTable" class="table table-bordered" width="100%" cellspacing="0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th>PN</th>
|
||||||
|
<th>Name</th>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach ($productList as $product) {
|
||||||
|
$hasImages=(json_decode($Epi->requestEpiApi('/v1/product/image/'.$product->primary_key.'?cl=' . Epirent_Mandant))->payload_length);
|
||||||
|
if( $hasImages == 0 || $hasImages ==null){
|
||||||
|
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->primary_key) . "</td>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->product_no) . "</td>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->name) . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<div id="footerholder"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Bootstrap Bundle -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#dataTable').DataTable({
|
||||||
|
"pageLength": 25,
|
||||||
|
"language": {
|
||||||
|
"url": "//cdn.datatables.net/plug-ins/1.10.20/i18n/German.json"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
200
dist/index.php
vendored
200
dist/index.php
vendored
@@ -1,148 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
// index.php – Dashboard Startseite (lädt Teil-HTMLs wie die Auftragsliste, ohne Auto-Refresh)
|
||||||
|
require('../config.php');
|
||||||
|
require('../EpiApi.php');
|
||||||
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||||
<meta name="description" content="" />
|
<title>Dashboard - EpiWebview</title>
|
||||||
<meta name="author" content="" />
|
|
||||||
<title>Dashboard - EpiWebview</title>
|
|
||||||
<link href="css/styles.css" rel="stylesheet" />
|
|
||||||
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet" crossorigin="anonymous" />
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/js/all.min.js" crossorigin="anonymous"></script>
|
|
||||||
<script src="js/jquery-3.5.1.min.js"></script>
|
|
||||||
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
|
||||||
|
|
||||||
<link href="/src/fa/css/fontawesome.css" rel="stylesheet" />
|
<!-- Styles -->
|
||||||
<link href="/src/fa/css/brands.css" rel="stylesheet" />
|
<link href="css/styles.css" rel="stylesheet" />
|
||||||
<link href="/src/fa/css/solid.css" rel="stylesheet" />
|
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet" crossorigin="anonymous" />
|
||||||
<link href="/src/fa/css/sharp-thin.css" rel="stylesheet" />
|
|
||||||
<link href="/src/fa/css/sharp-duotone-thin.css" rel="stylesheet" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
|
|
||||||
|
<!-- JS (nur 1x jQuery laden) -->
|
||||||
|
<script src="js/jquery-3.5.1.min.js"></script>
|
||||||
|
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
$(document).ready(function(){
|
<style>
|
||||||
refreshOrderTable();
|
.opacity-50 { opacity: .5; }
|
||||||
loadSidenav();
|
.card .h2, .card .display-4 { font-weight: 700; }
|
||||||
loadFooter();
|
.kpi-updated { font-size: .82rem; opacity: .85; }
|
||||||
});
|
</style>
|
||||||
function refreshOrderTable(){
|
|
||||||
$('#OrderTableHolder').load('../sources/getOrders.php', function(){
|
<script>
|
||||||
setTimeout(refreshOrderTable, 5000);
|
// Einmalige Loads – analog zur Auftragsliste
|
||||||
});
|
$(function () {
|
||||||
}
|
loadSidenav();
|
||||||
function loadSidenav(){
|
loadFooter();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
function loadSidenav() {
|
||||||
$('#layoutSidenav_nav').load('../sources/getSidenav.php');
|
$('#layoutSidenav_nav').load('../sources/getSidenav.php');
|
||||||
}
|
}
|
||||||
function loadFooter(){
|
|
||||||
|
function loadFooter() {
|
||||||
$('#footerholder').load('../sources/getFooter.php');
|
$('#footerholder').load('../sources/getFooter.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="sb-nav-fixed">
|
||||||
|
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
|
||||||
|
<a class="navbar-brand" href="index.php">Epi Webview</a>
|
||||||
|
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle"><i class="fas fa-bars"></i></button>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div id="layoutSidenav">
|
||||||
|
<div id="layoutSidenav_nav"></div>
|
||||||
|
<div id="layoutSidenav_content">
|
||||||
|
<main>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<h1 class="mt-4">Dashboard</h1>
|
||||||
|
<ol class="breadcrumb mb-4">
|
||||||
|
<li class="breadcrumb-item active">Dashboard</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body class="sb-nav-fixed">
|
|
||||||
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
|
|
||||||
<a class="navbar-brand" href="index.php">Epi Webview</a>
|
|
||||||
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle" href="#"><i class="fas fa-bars"></i></button>
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
<div id="layoutSidenav">
|
|
||||||
<div id="layoutSidenav_nav">
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<div id="layoutSidenav_content">
|
|
||||||
<main>
|
|
||||||
<div class="container-fluid">
|
|
||||||
<h1 class="mt-4">Dashboard</h1>
|
|
||||||
<ol class="breadcrumb mb-4">
|
|
||||||
<li class="breadcrumb-item active">Dashboard</li>
|
|
||||||
</ol>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xl-3 col-md-6">
|
|
||||||
<div class="card bg-primary text-white mb-4">
|
|
||||||
<div class="card-body">Primary Card</div>
|
|
||||||
<div class="card-footer d-flex align-items-center justify-content-between">
|
|
||||||
<a class="small text-white stretched-link" href="#">View Details</a>
|
|
||||||
<div class="small text-white"><i class="fas fa-angle-right"></i></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xl-3 col-md-6">
|
|
||||||
<div class="card bg-warning text-white mb-4">
|
|
||||||
<div class="card-body">Warning Card</div>
|
|
||||||
<div class="card-footer d-flex align-items-center justify-content-between">
|
|
||||||
<a class="small text-white stretched-link" href="#">View Details</a>
|
|
||||||
<div class="small text-white"><i class="fas fa-angle-right"></i></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xl-3 col-md-6">
|
|
||||||
<div class="card bg-success text-white mb-4">
|
|
||||||
<div class="card-body">Success Card</div>
|
|
||||||
<div class="card-footer d-flex align-items-center justify-content-between">
|
|
||||||
<a class="small text-white stretched-link" href="#">View Details</a>
|
|
||||||
<div class="small text-white"><i class="fas fa-angle-right"></i></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xl-3 col-md-6">
|
|
||||||
<div class="card bg-danger text-white mb-4">
|
|
||||||
<div class="card-body">Danger Card</div>
|
|
||||||
<div class="card-footer d-flex align-items-center justify-content-between">
|
|
||||||
<a class="small text-white stretched-link" href="#">View Details</a>
|
|
||||||
<div class="small text-white"><i class="fas fa-angle-right"></i></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xl-6">
|
|
||||||
<div class="card mb-4">
|
|
||||||
<div class="card-header">
|
|
||||||
<i class="fas fa-chart-area mr-1"></i>
|
|
||||||
Area Chart Example
|
|
||||||
</div>
|
|
||||||
<div class="card-body"><canvas id="myAreaChart" width="100%" height="40"></canvas></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xl-6">
|
|
||||||
<div class="card mb-4">
|
|
||||||
<div class="card-header">
|
|
||||||
<i class="fas fa-chart-bar mr-1"></i>
|
|
||||||
Bar Chart Example
|
|
||||||
</div>
|
|
||||||
<div class="card-body"><canvas id="myBarChart" width="100%" height="40"></canvas></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card mb-4">
|
|
||||||
<div class="card-header">
|
|
||||||
<i class="fas fa-table mr-1"></i>
|
|
||||||
Aufträge
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive" id="OrderTableHolder">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</main>
|
||||||
</div>
|
<div id="footerholder"></div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</div>
|
||||||
<div id="footerholder"></div>
|
|
||||||
</div>
|
<!-- Bootstrap Bundle (Popper inkl.) -->
|
||||||
</div>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
|
||||||
<script src="js/jquery-3.5.1.min.js"></script>
|
</body>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
|
|
||||||
<script src="js/scripts.js"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js" crossorigin="anonymous"></script>
|
|
||||||
<script src="assets/demo/chart-area-demo.js"></script>
|
|
||||||
<script src="assets/demo/chart-bar-demo.js"></script>
|
|
||||||
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js" crossorigin="anonymous"></script>
|
|
||||||
<script src="https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js" crossorigin="anonymous"></script>
|
|
||||||
<script src="assets/demo/datatables-demo.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
378
dist/insurance.php
vendored
Normal file
378
dist/insurance.php
vendored
Normal file
@@ -0,0 +1,378 @@
|
|||||||
|
<?php
|
||||||
|
// insurance.php – Versicherungsgeräte (liegt in /dist)
|
||||||
|
require('../config.php');
|
||||||
|
require('../EpiApi.php');
|
||||||
|
require_once __DIR__ . '/../vendor/autoload.php'; // PhpSpreadsheet Autoload
|
||||||
|
date_default_timezone_set('Europe/Berlin');
|
||||||
|
|
||||||
|
$Epi = new Epirent();
|
||||||
|
|
||||||
|
function formatEuro(float $amount): string {
|
||||||
|
$formatted = number_format(abs($amount), 2, ',', '.') . ' €';
|
||||||
|
return $amount < 0 ? '-' . $formatted : $formatted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =========================
|
||||||
|
Excel-Export: Konfiguration
|
||||||
|
========================= */
|
||||||
|
$EXCEL_CUSTOM_HEADER = [
|
||||||
|
['EpiWebview – Versicherungsgeräte'],
|
||||||
|
['Exportdatum: ' . date('d.m.Y H:i') . ' | Mandant: ' . (defined('Epirent_Mandant') ? Epirent_Mandant : '')]
|
||||||
|
];
|
||||||
|
$EXCEL_COLS = ['#','Name','Warengruppe(n)','Versicherung netto','Seriennummer','Anschaffung','Kaufpreis','Besitzer'];
|
||||||
|
|
||||||
|
/* =========================
|
||||||
|
1) Daten einmalig holen & Zeilen bauen
|
||||||
|
========================= */
|
||||||
|
$result = $Epi->requestEpiApi('/v1/product/all?ia=true&ir=true&cl=' . Epirent_Mandant);
|
||||||
|
$productList = json_decode($result)->payload;
|
||||||
|
|
||||||
|
$filteredProductArray = [];
|
||||||
|
foreach ($productList as $product) {
|
||||||
|
if ($product->is_stock_control && $product->is_stock_single_entry && !$product->is_virtual) {
|
||||||
|
if (!empty($product->stock_data[0]->stock_rent) && $product->stock_data[0]->stock_rent > 0) {
|
||||||
|
$filteredProductArray[] = $product;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$rows = [];
|
||||||
|
foreach ($filteredProductArray as $filteredProduct) {
|
||||||
|
$detailRes = $Epi->requestEpiApi('/v1/product/' . $filteredProduct->primary_key . '?cl=' . Epirent_Mandant);
|
||||||
|
$insuredProduct = json_decode($detailRes)->payload[0] ?? null;
|
||||||
|
|
||||||
|
if (!$insuredProduct || empty($insuredProduct->pricing) || !isset($insuredProduct->pricing->insurance_net)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ((float)$insuredProduct->pricing->insurance_net == 0.0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Materials
|
||||||
|
$MaterialList = "";
|
||||||
|
if (!empty($insuredProduct->materials)) {
|
||||||
|
foreach ($insuredProduct->materials as $material) {
|
||||||
|
if ($MaterialList !== "") $MaterialList .= ", ";
|
||||||
|
if (!empty($material->is_free_material) && $material->is_free_material) {
|
||||||
|
$MaterialList .= $material->name;
|
||||||
|
} else {
|
||||||
|
$materialResult = $Epi->requestEpiApi('/v1/product/' . $material->mat_product_pk . '?cl=' . Epirent_Mandant);
|
||||||
|
$materialProductObject = json_decode($materialResult)->payload[0] ?? null;
|
||||||
|
$MaterialList .= $materialProductObject ? $materialProductObject->name : '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warengruppen
|
||||||
|
$groupOfGoodsList = "";
|
||||||
|
if (!empty($insuredProduct->group_of_goods)) {
|
||||||
|
foreach ($insuredProduct->group_of_goods as $groupOfGoods) {
|
||||||
|
if ($groupOfGoodsList !== "") $groupOfGoodsList .= ", ";
|
||||||
|
$groupOfGoodsList .= str_replace(";", "->", $groupOfGoods->sequence_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Geräte (Stocks) nur einmal je Produkt
|
||||||
|
$stockRes = $Epi->requestEpiApi('/v1/stock/filter?ppk=' . $insuredProduct->primary_key . '&cl=' . Epirent_Mandant);
|
||||||
|
$deviceStockObjectArray = json_decode($stockRes)->payload ?? [];
|
||||||
|
|
||||||
|
//Sortiere alle Geräte aus die "Nicht Versichert" im Status stehen haben
|
||||||
|
foreach ($deviceStockObjectArray as $device) {
|
||||||
|
if($device->condition=="Nicht Versichert"){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//Sortiere jetzt die Geräte aus, die Nicht aussortiert wurden
|
||||||
|
if(!$device->is_sorted_out){
|
||||||
|
$rows[] = [
|
||||||
|
'pk' => $insuredProduct->product_no,
|
||||||
|
'name' => $insuredProduct->name,
|
||||||
|
'materials' => $MaterialList,
|
||||||
|
'groups' => $groupOfGoodsList,
|
||||||
|
'insurance_net' => (float)$insuredProduct->pricing->insurance_net,
|
||||||
|
'serial_no' => (string)($device->serial_no ?? ''),
|
||||||
|
'date_purchase' => (string)($device->date_purchase ?? ''),
|
||||||
|
'purchase_price'=> (float)($device->purchase_price ?? 0.0),
|
||||||
|
'owner' => (string)($device->owner ?? ''),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =========================
|
||||||
|
2) XLSX sofort erzeugen (ohne setCellValueByColumnAndRow)
|
||||||
|
========================= */
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Alignment;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Cell\DataType;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Shared\Date as ExcelDate;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
||||||
|
|
||||||
|
$exportDir = __DIR__ . '/exports';
|
||||||
|
if (!is_dir($exportDir)) {
|
||||||
|
@mkdir($exportDir, 0775, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$timestamp = date('Ymd_His');
|
||||||
|
$excelFileName = "Versicherungsgeraete_{$timestamp}.xlsx";
|
||||||
|
$excelFilePath = $exportDir . '/' . $excelFileName;
|
||||||
|
$excelDownloadUrl = 'exports/' . $excelFileName;
|
||||||
|
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$sheet->setTitle('Versicherungsgeräte');
|
||||||
|
|
||||||
|
// kleine Helfer zum Adressieren per Spaltenbuchstaben
|
||||||
|
$cell = function(int $colIndex, int $rowIndex): string {
|
||||||
|
return Coordinate::stringFromColumnIndex($colIndex) . $rowIndex;
|
||||||
|
};
|
||||||
|
|
||||||
|
$colCount = count($EXCEL_COLS);
|
||||||
|
$lastCol = Coordinate::stringFromColumnIndex($colCount);
|
||||||
|
|
||||||
|
// Spaltenindex-Konstanten für Summen
|
||||||
|
$INSURANCE_COL = 4; // "Versicherung netto"
|
||||||
|
$PURCHASE_COL = 7; // "Kaufpreis"
|
||||||
|
|
||||||
|
// Custom Header
|
||||||
|
$rowIdx = 1;
|
||||||
|
foreach ($EXCEL_CUSTOM_HEADER as $hdrLine) {
|
||||||
|
$text = implode(' ', $hdrLine);
|
||||||
|
$sheet->setCellValue($cell(1, $rowIdx), $text);
|
||||||
|
$sheet->mergeCells($cell(1, $rowIdx) . ':' . $cell($colCount, $rowIdx));
|
||||||
|
$sheet->getStyle($cell(1, $rowIdx) . ':' . $cell($colCount, $rowIdx))
|
||||||
|
->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
|
||||||
|
$sheet->getStyle($cell(1, $rowIdx) . ':' . $cell($colCount, $rowIdx))
|
||||||
|
->getFont()->setBold(true)->setSize($rowIdx === 1 ? 14 : 11);
|
||||||
|
$rowIdx++;
|
||||||
|
}
|
||||||
|
$rowIdx++;
|
||||||
|
|
||||||
|
// Tabellen-Header
|
||||||
|
foreach ($EXCEL_COLS as $i => $label) {
|
||||||
|
$addr = $cell($i+1, $rowIdx);
|
||||||
|
$sheet->setCellValue($addr, $label);
|
||||||
|
$sheet->getStyle($addr)->getFont()->setBold(true);
|
||||||
|
$sheet->getStyle($addr)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
|
||||||
|
$sheet->getColumnDimension(Coordinate::stringFromColumnIndex($i+1))->setAutoSize(true);
|
||||||
|
}
|
||||||
|
$headerRow = $rowIdx;
|
||||||
|
$rowIdx++;
|
||||||
|
|
||||||
|
// Daten
|
||||||
|
$dataStartRow = $rowIdx;
|
||||||
|
foreach ($rows as $r) {
|
||||||
|
$c = 1;
|
||||||
|
|
||||||
|
// #
|
||||||
|
$sheet->setCellValue($cell($c++, $rowIdx), $r['pk']);
|
||||||
|
|
||||||
|
// Name (+ Materials)
|
||||||
|
$nameOut = $r['name'] . ($r['materials'] ? " | {$r['materials']}" : "");
|
||||||
|
$sheet->setCellValue($cell($c++, $rowIdx), $nameOut);
|
||||||
|
|
||||||
|
// Warengruppen
|
||||||
|
$sheet->setCellValue($cell($c++, $rowIdx), $r['groups']);
|
||||||
|
|
||||||
|
// Versicherung netto (numerisch, EU-Format)
|
||||||
|
$sheet->setCellValueExplicit($cell($c, $rowIdx), (float)$r['insurance_net'], DataType::TYPE_NUMERIC);
|
||||||
|
$sheet->getStyle($cell($c, $rowIdx))->getNumberFormat()->setFormatCode('#,##0.00 [$€-de-DE]');
|
||||||
|
$c++;
|
||||||
|
|
||||||
|
// Seriennummer
|
||||||
|
$sheet->setCellValue($cell($c++, $rowIdx), $r['serial_no']);
|
||||||
|
|
||||||
|
// Anschaffung (Datum)
|
||||||
|
$excelDate = '';
|
||||||
|
if (!empty($r['date_purchase'])) {
|
||||||
|
$ts = strtotime($r['date_purchase']);
|
||||||
|
if ($ts !== false) {
|
||||||
|
$excelDate = ExcelDate::PHPToExcel($ts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($excelDate !== '') {
|
||||||
|
$sheet->setCellValue($cell($c, $rowIdx), $excelDate);
|
||||||
|
$sheet->getStyle($cell($c, $rowIdx))->getNumberFormat()->setFormatCode('dd.mm.yyyy');
|
||||||
|
} else {
|
||||||
|
$sheet->setCellValue($cell($c, $rowIdx), '');
|
||||||
|
}
|
||||||
|
$c++;
|
||||||
|
|
||||||
|
// Kaufpreis (numerisch, EU-Format)
|
||||||
|
$sheet->setCellValueExplicit($cell($c, $rowIdx), abs((float)$r['purchase_price']), DataType::TYPE_NUMERIC);
|
||||||
|
$sheet->getStyle($cell($c, $rowIdx))->getNumberFormat()->setFormatCode('#,##0.00 [$€-de-DE]');
|
||||||
|
$c++;
|
||||||
|
|
||||||
|
// Besitzer
|
||||||
|
$sheet->setCellValue($cell($c++, $rowIdx), $r['owner']);
|
||||||
|
|
||||||
|
$rowIdx++;
|
||||||
|
}
|
||||||
|
$dataEndRow = $rowIdx - 1;
|
||||||
|
|
||||||
|
/* === Summenzeile mit grauer Hinterlegung === */
|
||||||
|
$totalRow = $rowIdx + 1;
|
||||||
|
|
||||||
|
// Label in Spalte A
|
||||||
|
$sheet->setCellValue($cell(1, $totalRow), 'Gesamtsummen:');
|
||||||
|
$sheet->getStyle($cell(1, $totalRow))->getFont()->setBold(true);
|
||||||
|
|
||||||
|
// SUM-Formel Versicherung netto (Spalte 4)
|
||||||
|
$insColLetter = Coordinate::stringFromColumnIndex($INSURANCE_COL);
|
||||||
|
$sheet->setCellValue(
|
||||||
|
$cell($INSURANCE_COL, $totalRow),
|
||||||
|
"=SUM({$insColLetter}{$dataStartRow}:{$insColLetter}{$dataEndRow})"
|
||||||
|
);
|
||||||
|
$sheet->getStyle($cell($INSURANCE_COL, $totalRow))
|
||||||
|
->getNumberFormat()->setFormatCode('#,##0.00 [$€-de-DE]');
|
||||||
|
$sheet->getStyle($cell($INSURANCE_COL, $totalRow))->getFont()->setBold(true);
|
||||||
|
|
||||||
|
// SUM-Formel Kaufpreis (Spalte 7)
|
||||||
|
$purColLetter = Coordinate::stringFromColumnIndex($PURCHASE_COL);
|
||||||
|
$sheet->setCellValue(
|
||||||
|
$cell($PURCHASE_COL, $totalRow),
|
||||||
|
"=SUM({$purColLetter}{$dataStartRow}:{$purColLetter}{$dataEndRow})"
|
||||||
|
);
|
||||||
|
$sheet->getStyle($cell($PURCHASE_COL, $totalRow))
|
||||||
|
->getNumberFormat()->setFormatCode('#,##0.00 [$€-de-DE]');
|
||||||
|
$sheet->getStyle($cell($PURCHASE_COL, $totalRow))->getFont()->setBold(true);
|
||||||
|
|
||||||
|
// graue Hinterlegung über die ganze Summenzeile
|
||||||
|
$sheet->getStyle($cell(1, $totalRow) . ':' . $cell($colCount, $totalRow))
|
||||||
|
->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FFEFEFEF');
|
||||||
|
|
||||||
|
// Filter + Freeze
|
||||||
|
$sheet->setAutoFilter("A{$headerRow}:{$lastCol}{$headerRow}");
|
||||||
|
$sheet->freezePane("A" . ($headerRow + 1));
|
||||||
|
|
||||||
|
// Datei speichern
|
||||||
|
$writer = new Xlsx($spreadsheet);
|
||||||
|
$writer->save($excelFilePath);
|
||||||
|
|
||||||
|
/* =========================
|
||||||
|
3) HTML-Ausgabe (Tabelle aus $rows) + Download-Link
|
||||||
|
========================= */
|
||||||
|
|
||||||
|
// Summen für HTML
|
||||||
|
$totalInsurance = array_sum(array_column($rows, 'insurance_net'));
|
||||||
|
$totalPurchase = array_sum(array_map(fn($r) => abs($r['purchase_price']), $rows));
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||||
|
<title>Dashboard - EpiWebview</title>
|
||||||
|
|
||||||
|
<!-- Styles -->
|
||||||
|
<link href="css/styles.css" rel="stylesheet" />
|
||||||
|
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
<!-- JS -->
|
||||||
|
<script src="js/jquery-3.5.1.min.js"></script>
|
||||||
|
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.opacity-50 { opacity: .5; }
|
||||||
|
.card .h2, .card .display-4 { font-weight: 700; }
|
||||||
|
.kpi-updated { font-size: .82rem; opacity: .85; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#layoutSidenav_nav').load('../sources/getSidenav.php');
|
||||||
|
$('#footerholder').load('../sources/getFooter.php');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="sb-nav-fixed">
|
||||||
|
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
|
||||||
|
<a class="navbar-brand" href="index.php">Epi Webview</a>
|
||||||
|
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle"><i class="fas fa-bars"></i></button>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div id="layoutSidenav">
|
||||||
|
<div id="layoutSidenav_nav"></div>
|
||||||
|
<div id="layoutSidenav_content">
|
||||||
|
<main>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<h1 class="mt-4">Versicherung</h1>
|
||||||
|
<ol class="breadcrumb mb-4">
|
||||||
|
<li class="breadcrumb-item active">Versicherung</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<div class="card mb-4">
|
||||||
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
|
<div><i class="fas fa-table mr-1"></i> Versicherungsgeräte</div>
|
||||||
|
<a class="btn btn-sm btn-success" href="<?php echo htmlspecialchars($excelDownloadUrl); ?>">
|
||||||
|
<i class="fas fa-file-excel"></i> Export nach Excel
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<th scope="col">#</th>
|
||||||
|
<th scope="col">Name</th>
|
||||||
|
<th scope="col">Warengruppe(n)</th>
|
||||||
|
<th scope="col">Versicherung netto</th>
|
||||||
|
<th scope="col">Seriennummer</th>
|
||||||
|
<th scope="col">Anschaffung</th>
|
||||||
|
<th scope="col">Kaufpreis</th>
|
||||||
|
<th scope="col">Besitzer</th>
|
||||||
|
</tr>
|
||||||
|
<?php foreach ($rows as $r): ?>
|
||||||
|
<tr>
|
||||||
|
<th><?php echo htmlspecialchars((string) $r['pk']); ?></th>
|
||||||
|
<th>
|
||||||
|
<?php
|
||||||
|
echo htmlspecialchars($r['name']);
|
||||||
|
if (!empty($r['materials'])) {
|
||||||
|
echo "<br><small>" . htmlspecialchars($r['materials']) . "</small>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</th>
|
||||||
|
<th><?php echo htmlspecialchars($r['groups']); ?></th>
|
||||||
|
<th><?php echo formatEuro((float)$r['insurance_net']); ?></th>
|
||||||
|
<th><?php echo htmlspecialchars($r['serial_no']); ?></th>
|
||||||
|
<th>
|
||||||
|
<?php
|
||||||
|
$purchaseDateOut = '';
|
||||||
|
if (!empty($r['date_purchase'])) {
|
||||||
|
try { $purchaseDateOut = date_format(new \DateTime($r['date_purchase']), 'd.m.Y'); } catch (\Throwable $e) {}
|
||||||
|
}
|
||||||
|
echo htmlspecialchars($purchaseDateOut);
|
||||||
|
?>
|
||||||
|
</th>
|
||||||
|
<th><?php echo formatEuro(abs((float)$r['purchase_price'])); ?></th>
|
||||||
|
<th><?php echo htmlspecialchars($r['owner']); ?></th>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
<!-- Summenzeile in HTML -->
|
||||||
|
<tr style="font-weight:bold; background:#f8f9fa;">
|
||||||
|
<td colspan="3" class="text-right">Gesamtsummen:</td>
|
||||||
|
<td><?php echo formatEuro($totalInsurance); ?></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td><?php echo formatEuro($totalPurchase); ?></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<div id="footerholder"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Bootstrap Bundle -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
155
dist/labelprint.php
vendored
Normal file
155
dist/labelprint.php
vendored
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require('../config.php');
|
||||||
|
require('../EpiApi.php');
|
||||||
|
require_once __DIR__ . '/../vendor/autoload.php';
|
||||||
|
date_default_timezone_set('Europe/Berlin');
|
||||||
|
|
||||||
|
$Epi = new Epirent();
|
||||||
|
$productList = json_decode($Epi->requestEpiApi('/v1/product/all?ia=true&ir=true&cl=' . Epirent_Mandant))->payload;
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||||||
|
<title>Labelprint - EpiWebview</title>
|
||||||
|
|
||||||
|
<!-- Styles -->
|
||||||
|
<link href="css/styles.css" rel="stylesheet" />
|
||||||
|
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
<!-- JS -->
|
||||||
|
<script src="js/jquery-3.5.1.min.js"></script>
|
||||||
|
<script src="https://kit.fontawesome.com/93d71de8bc.js" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
|
||||||
|
<script src="https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.opacity-50 {
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card .h2,
|
||||||
|
.card .display-4 {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kpi-updated {
|
||||||
|
font-size: .82rem;
|
||||||
|
opacity: .85;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#layoutSidenav_nav').load('../sources/getSidenav.php');
|
||||||
|
$('#footerholder').load('../sources/getFooter.php');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="sb-nav-fixed">
|
||||||
|
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
|
||||||
|
<a class="navbar-brand" href="index.php">Epi Webview</a>
|
||||||
|
<button class="btn btn-link btn-sm order-1 order-lg-0" id="sidebarToggle"><i class="fas fa-bars"></i></button>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div id="layoutSidenav">
|
||||||
|
<div id="layoutSidenav_nav"></div>
|
||||||
|
<div id="layoutSidenav_content">
|
||||||
|
<main>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<h1 class="mt-4">Labelprint</h1>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card mb-4">
|
||||||
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
|
<div><i class="fas fa-table mr-1"></i> Labelprint</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table id="dataTable" class="table table-bordered" width="100%" cellspacing="0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th>PN</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Aktionen</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach ($productList as $product) {
|
||||||
|
if (!$product->is_rent & $product->is_sale){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->primary_key) . "</td>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->product_no) . "</td>";
|
||||||
|
echo "<td>" . htmlspecialchars($product->name) . "</td>";
|
||||||
|
echo "
|
||||||
|
<td>
|
||||||
|
<a class='btn btn-sm btn-outline-primary'
|
||||||
|
target='_blank'
|
||||||
|
href='../sources/getProductLabel.php?id=" . urlencode($product->primary_key) . "'>
|
||||||
|
Export
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<input type='number'
|
||||||
|
id='nrInput_" . htmlspecialchars($product->primary_key) . "'
|
||||||
|
min='1' max='9999'
|
||||||
|
style='width:70px; margin-left:6px; text-align:center;'
|
||||||
|
placeholder='#'>
|
||||||
|
|
||||||
|
<a class='btn btn-sm btn-outline-secondary'
|
||||||
|
target='_blank'
|
||||||
|
id='exportWithIdBtn_" . htmlspecialchars($product->primary_key) . "'
|
||||||
|
href='#'
|
||||||
|
onclick=\"
|
||||||
|
var nr = document.getElementById('nrInput_" . htmlspecialchars($product->primary_key) . "').value;
|
||||||
|
if(nr) {
|
||||||
|
this.href = '../sources/getProductLabel.php?id=" . urlencode($product->primary_key) . "&nr=' + encodeURIComponent(nr);
|
||||||
|
} else {
|
||||||
|
alert('Bitte eine Nummer zwischen 1 und 9999 eingeben.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
\">
|
||||||
|
Export mit ID
|
||||||
|
</a>
|
||||||
|
</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<div id="footerholder"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Bootstrap Bundle -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#dataTable').DataTable({
|
||||||
|
"pageLength": 25,
|
||||||
|
"language": {
|
||||||
|
"url": "//cdn.datatables.net/plug-ins/1.10.20/i18n/German.json"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -1,58 +1,64 @@
|
|||||||
<?php
|
<?php
|
||||||
//EPIRENT CONNECTION EINSTELLUNGEN//
|
// @section: Epirent – Verbindung
|
||||||
define('Epirent_Server', 'xxx');
|
define('Epirent_Server', 'xxx');
|
||||||
define('Epirent_Connectionprotocol', 'http');
|
define('Epirent_Connectionprotocol', 'http');
|
||||||
define('Epirent_Port', '8080');
|
define('Epirent_Port', '8080');
|
||||||
define('Epirent_Token', 'xxx');
|
define('Epirent_Token', 'xxx');
|
||||||
define('Epirent_Mandant', '0'); //NORMALERWEISE 0
|
define('Epirent_Mandant', '0'); //NORMALERWEISE 0
|
||||||
|
// @hr
|
||||||
//CREWBRAIN CONNECTION EINSTELLUNGEN-NUR AUSFÜLLEN WENN GEWÜNSCHT//
|
// @section: Crewbrain Verbindung
|
||||||
|
// @note: Nur ausfüllen wenn gewünscht
|
||||||
define('CrewBrain_Username', 'xxx');
|
define('CrewBrain_Username', 'xxx');
|
||||||
define('CrewBrain_password', 'xxx');
|
define('CrewBrain_password', 'xxx');
|
||||||
define('CrewBrain_Server', 'xxx.crewbrain.com');
|
define('CrewBrain_Server', 'xxx.crewbrain.com');
|
||||||
define('CrewBrain_Connectionprotocol', 'https');
|
define('CrewBrain_Connectionprotocol', 'https');
|
||||||
define('CrewBrain_TaskListID', 6);
|
define('CrewBrain_TaskListID', 6);
|
||||||
|
|
||||||
//CREWBRAIN SPEZIFISCHE EINSTELLUNGEN (AUFGABENLISTE)//
|
|
||||||
define('Enable_QR_Code_CrewBrainAufgaben', true);
|
define('Enable_QR_Code_CrewBrainAufgaben', true);
|
||||||
|
// @hr
|
||||||
//EPIRENT SPEZIFISCHE EINSTELLUNGEN (CHECK IN & CHECK OUT)
|
// @section: Epirent-Spezifische Einstellungen
|
||||||
define('Enable_QR_Code_CheckOut', false); //Zeigt statt der Packscheinnummer einen Scanbaren QR Code für den CheckOut an
|
define('Enable_QR_Code_CheckOut', false); //Zeigt statt der Packscheinnummer einen Scanbaren QR Code für den CheckOut an
|
||||||
define('Enable_QR_Code_CheckIn', false); //Zeigt statt der Packscheinnummer einen Scanbaren QR Code für den CheckIn an
|
define('Enable_QR_Code_CheckIn', false); //Zeigt statt der Packscheinnummer einen Scanbaren QR Code für den CheckIn an
|
||||||
define('Vorbereitungs_Zeitvariable', 'Packen'); //Name des zu verwendenden Zeitabschnitts, der Zusätzlich zur DispoZeit beim Check Out Angezeigt werden soll
|
define('Vorbereitungs_Zeitvariable', 'Packen'); //Name des zu verwendenden Zeitabschnitts, der Zusätzlich zur DispoZeit beim Check Out Angezeigt werden soll
|
||||||
define('Nachbereitung_Zeitvariable', 'Rückpacken'); //Name des zu verwendenden Zeitabschnitts, der Zusätzlich zur DispoZeit beim Check In Angezeigt werden soll
|
define('Nachbereitung_Zeitvariable', 'Rückpacken'); //Name des zu verwendenden Zeitabschnitts aus dem Auftrag, der die Nachbereitung angibt
|
||||||
define('Rückpacken_Zeitvariable', 'Rückpacken');
|
define('Rückpacken_Zeitvariable', 'Rückpacken'); //Name des zu verwendenden Zeitabschnitts aus dem Auftrag, der das Rückpacken angibt.
|
||||||
|
define('UseDeliveredForCheckOutCompleted', true); //Nutzt statt dem erfolgreichen abschließen eines Packscheins durch ausbuchen das erfolgreiche Liefern (Geliefert != 00.00.00)
|
||||||
/** -------------------- Row-Marking: Konfig Zusände --------------------
|
define('EnableScrollingCheckOut', true); //Aktiviert das automatische Scrollen der CheckOut Liste
|
||||||
* 1 = $packingjob->date_start (Dispo Start)
|
define('EnableScrollingCheckIn', true); //Aktiviert das automatische Scrollen der CheckIn Liste
|
||||||
* 2 = $VorbereitungsTimeDetail->date_start (Vorbereitung Start)
|
define('EnableScrollingAufgaben', true); //Aktiviert das automatische Scrollen der Aufgabenliste
|
||||||
* 3 = $PackingNoteDetail->date_packing (Packen Zeit)
|
// @note: -------------------- CheckOutRowMarkSource: Konfig Zusände --------------------
|
||||||
* 4 = $PackingNoteDetail->date_delivery (Delivery Zeit)
|
// @note: 1 = $packingjob->date_start (Packjob Start)
|
||||||
*/
|
// @note: 2 = $VorbereitungsTimeDetail->date_start (Vorbereitung Start)
|
||||||
|
// @note: 3 = $PackingNoteDetail->date_packing (Packen Zeit)
|
||||||
|
// @note: 4 = $PackingNoteDetail->date_delivery (Delivery Zeit)
|
||||||
|
// @note: 5 = $order->date_start (Dispo Start Zeit)
|
||||||
define('CheckOutRowMarkSource', 4);
|
define('CheckOutRowMarkSource', 4);
|
||||||
|
|
||||||
/** -------------------- Row-Marking: Konfig Zusände --------------------
|
// @note: -------------------- CheckInRowMarkSource: Konfig Zusände --------------------
|
||||||
* 1 = $packingjob->date_end (Dispo Ende)
|
// @note: 1 = $packingjob->date_end (Packjob Ende)
|
||||||
* 2 = $NachbereitungssTimeDetail->date_start (Nachbereitung Start)
|
// @note: 2 = $NachbereitungssTimeDetail->date_start (Nachbereitung Start)
|
||||||
* 3 = $RePackagingTimeDetail->date_start (Rückpacken Zeit AUS AUFTRAG)
|
// @note: 3 = $RePackagingTimeDetail->date_start (Rückpacken Zeit AUS AUFTRAG)
|
||||||
* 4 = $PackingNoteDetail->date_redelivery (ReDelivery Zeit)
|
// @note: 4 = $PackingNoteDetail->date_redelivery (ReDelivery Zeit)
|
||||||
*/
|
// @note: 5 = $order->date_end (Dispo End Zeit)
|
||||||
define('CheckInRowMarkSource', 4);
|
define('CheckInRowMarkSource', 4);
|
||||||
|
|
||||||
define('CheckIn_UseDispoEndForRowMarking', false); //else: Use Same Variable as "Rueckpacken Zeitvariable" | Konfiguration, welche Zeit für die Zeilenmarkierung beim Check In Verwendet werden soll
|
define('CheckIn_UseDispoEndForRowMarking', false); //else: Use Same Variable as "Rueckpacken Zeitvariable" | Konfiguration, welche Zeit für die Zeilenmarkierung beim Check In Verwendet werden soll
|
||||||
|
|
||||||
define('ShowCheckoutTimeOnCheckout', true);
|
define('ShowCheckoutTimeOnCheckout', true); //Zeigt die Checkout Zeit im Checkout
|
||||||
define('ShowVorbereitungTimeOnCheckout', true);
|
define('ShowVorbereitungTimeOnCheckout', true); //Zeigt die Vorbereitungs Zeitvariable im Checkout
|
||||||
define('ShowPackagingTimeOnCheckout', true);
|
define('ShowPackagingTimeOnCheckout', true); //Zeigt die Packenzeit im Checkout
|
||||||
define('ShowDeliveryTimeOnCheckout', true);
|
define('ShowDeliveryTimeOnCheckout', true); //Zeigt die Lieferzeit im Checkout
|
||||||
define('ShowTimesOnCheckout', true);
|
define('ShowDispoStartOnCheckout', true); //Zeigt die DispoStart im Checkout
|
||||||
|
define('ShowTimesOnCheckout', true); //Aktiviert das anzeigen der Uhrzeit im Checkout
|
||||||
|
|
||||||
define('ShowCheckInTimeOnCheckin', true);
|
// @hr
|
||||||
define('ShowNachbereitungTimeOnCheckin', true);
|
define('ShowCheckInTimeOnCheckin', true); //Zeigt die CheckIn Zeit im CheckIn
|
||||||
define('ShowRePackagingTimeOnCheckin', true);
|
define('ShowNachbereitungTimeOnCheckin', true); //Zeigt die Nachbereitungs Zeitvariable im CheckIn
|
||||||
define('ShowReDeliveryTimeOnCheckin', true);
|
define('ShowRePackagingTimeOnCheckin', true); //Zeigt die Rückpackzeit im Checkin <br><b>Achtung: Zeit nur Im Auftrag festlegbar</b>
|
||||||
define('ShowTimesOnCheckin', true);
|
define('ShowReDeliveryTimeOnCheckin', true); //Zeigt die geplante Rücklieferung im Checkin
|
||||||
|
define('ShowDispoEndOnCheckin', true); //Zeigt die DispoEnd Zeit im CheckIn
|
||||||
|
define('ShowTimesOnCheckin', true); //Aktiviert das anzeigen der Uhrzeit im CheckIn
|
||||||
|
|
||||||
|
// @section: Epirent-Spezifische Einstellungen - Shipping
|
||||||
define('ShowShippingIcons', true); //Zeigt Lieferung / Rücklieferungs Icons an
|
define('ShowShippingIcons', true); //Zeigt Lieferung / Rücklieferungs Icons an
|
||||||
define('KurierContainsText', 'Kurier'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als KURIER erkannt wird.
|
define('KurierContainsText', 'Kurier'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als KURIER erkannt wird.
|
||||||
define('SpeditionContainsText', 'Spedition'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als SPEDITION erkannt wird.
|
define('SpeditionContainsText', 'Spedition'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als SPEDITION erkannt wird.
|
||||||
@@ -60,17 +66,27 @@ define('DHLContainsText', 'DHL'); //Text, der in der Versandart enthalten sein m
|
|||||||
define('LKWContainsText', 'LKW'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als eigener LKW erkannt wird.
|
define('LKWContainsText', 'LKW'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als eigener LKW erkannt wird.
|
||||||
define('TransporterContainsText', 'Sprinter'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als eigener Transporter erkannt wird.
|
define('TransporterContainsText', 'Sprinter'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als eigener Transporter erkannt wird.
|
||||||
define('PKWContainsText', 'PKW'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als eigener PKW erkannt wird.
|
define('PKWContainsText', 'PKW'); //Text, der in der Versandart enthalten sein muss (enthält), damit diese als eigener PKW erkannt wird.
|
||||||
|
// @hr
|
||||||
|
// @note: Informationen zu den Icons: Die Icons basieren auf FontAwesome und bestehen aus drei Teilen: Sammlung (fa-solid), Icon (fa-truck) und Größe (fa-lg). Weitere Informationen bitte der FA-Doku entnehmen
|
||||||
|
define('KurierIcon', 'fa-solid fa-hand-holding-dollar fa-lg');
|
||||||
|
define('SpeditionIcon', 'fa-solid fa-truck fa-lg');
|
||||||
|
define('DHLIcon', 'fa-brands fa-dhl fa-2xl');
|
||||||
|
define('LKWIcon', 'fa-solid fa-truck fa-lg');
|
||||||
|
define('TransporterIcon', 'fa-solid fa-van-shuttle fa-lg');
|
||||||
|
define('PKWIcon', 'fa-solid fa-car fa-lg');
|
||||||
|
define('SelbstabholerIcon', 'fa-solid fa-person-walking fa-lg');
|
||||||
|
|
||||||
define('UseShippingStatus', true); //Nutzt den Packscheinstatus als Shipping Status. Hierdurch können die Icons unter verschiedenen Vorraussetzungen Grün werden, wenn der Versand organisiert wurde
|
define('UseShippingStatus', true); //Nutzt den Packscheinstatus als Shipping Status. Hierdurch können die Icons unter verschiedenen Vorraussetzungen Grün werden, wenn der Versand organisiert wurde
|
||||||
define('ShippingOutOrganizedStatus', 'Hinversand OK'); //Packschein Status (EpirentDropdown) der Gematcht werden muss, dass der Hinversand Organisiert / Bestellt wurde
|
define('ShippingOutOrganizedStatus', 'Hinversand OK'); //Packschein Status (EpirentDropdown) der Gematcht werden muss, dass der Hinversand Organisiert / Bestellt wurde
|
||||||
define('ShippingInOrganizedStatus', 'Rückversand OK'); //Packschein Status (EpirentDropdown) der Gematcht werden muss, dass der Rückversand Organisiert / Bestellt wurde
|
define('ShippingInOrganizedStatus', 'Rückversand OK'); //Packschein Status (EpirentDropdown) der Gematcht werden muss, dass der Rückversand Organisiert / Bestellt wurde
|
||||||
define('ShippingOrganizedStatus', 'Versand OK'); //Packschein Status (EpirentDropdown) der Gematcht werden muss, dass der komplette Versand Organisiert / Bestellt wurde
|
define('ShippingOrganizedStatus', 'Versand OK'); //Packschein Status (EpirentDropdown) der Gematcht werden muss, dass der komplette Versand Organisiert / Bestellt wurde
|
||||||
|
|
||||||
define('UseDeliveredForCheckOutCompleted', true); //Nutzt statt dem erfolgreichen abschließen eines Packscheins durch ausbuchen das erfolgreiche Liefern (Geliefert != 00.00.00)
|
// @section: Epirent-Spezifische Einstellungen - Anzeigesortierung
|
||||||
|
|
||||||
define('CheckOut_FutureDays', -1); // Konfiguration, wie viele Tage in der Zukunft der CheckOut angezeigt werden soll. '-1' zeigt alle an. Abhängig von der Variablen CheckOut_UseDispoStartForRowMarking
|
define('CheckOut_FutureDays', -1); // Konfiguration, wie viele Tage in der Zukunft der CheckOut angezeigt werden soll. '-1' zeigt alle an. Abhängig von der Variablen CheckOut_UseDispoStartForRowMarking
|
||||||
define('CheckIn_FutureDays', -1); // Konfiguration, wie viele Tage in der Zukunft der CheckIn angezeigt werden soll. '-1' zeigt alle an. Abhängig von der Variablen CheckIn_UseDispoEndForRowMarking
|
define('CheckIn_FutureDays', -1); // Konfiguration, wie viele Tage in der Zukunft der CheckIn angezeigt werden soll. '-1' zeigt alle an. Abhängig von der Variablen CheckIn_UseDispoEndForRowMarking
|
||||||
define('SortCheckOut', 2); // Konfiguration, welcher Datensatz für die Sortierung Verwendet werden soll. Möglichkeiten '1': Packscheinnummer / '2': Dispostart
|
define('SortCheckOut', 2); // Konfiguration, welcher Datensatz für die Sortierung Verwendet werden soll. Möglichkeiten '1': Packscheinnummer / '2': Dispostart
|
||||||
define('SortCheckIn', 2); // Konfiguration, welcher Datensatz für die Sortierung Verwendet werden soll. Möglichkeiten '1': Packscheinnummer / '2': Dispoende
|
define('SortCheckIn', 2); // Konfiguration, welcher Datensatz für die Sortierung Verwendet werden soll. Möglichkeiten '1': Packscheinnummer / '2': Dispoende
|
||||||
|
// @section: Epirent-Spezifische Einstellungen - Labeldruck
|
||||||
|
define('Labelprint_Logopath', '/../src/assets/img/logo.png'); //Pfad zum Logo für den Etikettendruck
|
||||||
|
define('Labelprint_Addresstext', '<b>VT-Media</b><br/>Augsburger Straße 22<br/>87672 Roßhaupten<br/>info@vt-media.de<br/>vt-media.de<br/>08367/4619-990'); //Text der im Adressfeld der Etiketten angezeigt wird. max 6 Zeilen Empfohlen. Umbruch mit <br>. Fett mit <b>Text</b>
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -3,22 +3,35 @@
|
|||||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
||||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||||
<group>
|
<group>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getCheckOutCards.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/dist/index.html</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/.git/config</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/.git/config</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/PackAufgabenMonitor.php</file>
|
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getSidenav.php</file>
|
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/dist/index.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/dist/index.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getOrderDetails.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getOrderDetails.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/config.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/dist/css/styles.css</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/EpiApi.php</file>
|
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getOrders.php</file>
|
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/Aufgabenmonitor.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/Aufgabenmonitor.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/dist/layout-sidenav-light.html</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/dist/editconfig.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/composer.json</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/composer.json</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getCheckInTable.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getCheckInTable.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/CrewbrainApi.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/CrewbrainApi.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/example.config.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/composer.lock</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/composer.lock</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/info.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/info.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/Packmonitor.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/Packmonitor.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/index.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/index.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/.gitignore</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/PackAufgabenMonitor.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getSidenav.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/README.MD</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/config.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/EpiApi.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getOrders.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getCheckInCards.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/dist/orders.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/dist/insurance.php</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/LICENSE.MD</file>
|
||||||
|
<file>file:/C:/xampp/htdocs/EpiWebview/vendor/autoload.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getAufgabenTable.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getAufgabenTable.php</file>
|
||||||
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getCheckOutTable.php</file>
|
<file>file:/C:/xampp/htdocs/EpiWebview/sources/getCheckOutTable.php</file>
|
||||||
</group>
|
</group>
|
||||||
|
|||||||
198
sources/getCheckInCards.php
Normal file
198
sources/getCheckInCards.php
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
<?php
|
||||||
|
// ../sources/getCheckInCards.php
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
require('../config.php');
|
||||||
|
require('../EpiApi.php');
|
||||||
|
|
||||||
|
$Epi = new Epirent();
|
||||||
|
|
||||||
|
use chillerlan\QRCode\{ QRCode, QROptions };
|
||||||
|
require('../vendor/autoload.php');
|
||||||
|
|
||||||
|
const APP_TZ = 'Europe/Berlin';
|
||||||
|
|
||||||
|
/** ---------- Helpers (wie in deiner Check-In-Datei) ---------- */
|
||||||
|
function dt(?string $s): ?DateTimeImmutable {
|
||||||
|
if (!$s) return null;
|
||||||
|
try { return new DateTimeImmutable($s, new DateTimeZone(APP_TZ)); }
|
||||||
|
catch (Throwable $e) { return null; }
|
||||||
|
}
|
||||||
|
function dayStart(DateTimeImmutable $d): DateTimeImmutable {
|
||||||
|
return $d->setTime(0, 0, 0);
|
||||||
|
}
|
||||||
|
function rowClassForDate(?DateTimeImmutable $markDate, ?DateTimeImmutable $today): string {
|
||||||
|
if (!$markDate || !$today) return '';
|
||||||
|
if ($markDate == $today) return 'text-dark bg-warning';
|
||||||
|
if ($markDate < $today) return 'bg-danger';
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Row-Marking Quelle (Check-In) – identisch zu deiner Tabelle:
|
||||||
|
* 1 = $packingjob->date_end
|
||||||
|
* 2 = $NachbereitungsTimeDetail->date_start
|
||||||
|
* 3 = $RePackagingTimeDetail->date_start
|
||||||
|
* 4 = $PackingNoteDetail->date_redelivery
|
||||||
|
* Fallback: $packingjob->date_end
|
||||||
|
*/
|
||||||
|
function resolveRowMarkDateCheckIn(
|
||||||
|
$packingjob,
|
||||||
|
$NachbereitungsTimeDetail,
|
||||||
|
$RePackagingTimeDetail,
|
||||||
|
$PackingNoteDetail,
|
||||||
|
int $source
|
||||||
|
): ?DateTimeImmutable {
|
||||||
|
$candidate = null;
|
||||||
|
switch ($source) {
|
||||||
|
case 1: $candidate = dt($packingjob->date_end ?? null); break;
|
||||||
|
case 2: $candidate = dt($NachbereitungsTimeDetail->date_start ?? null); break;
|
||||||
|
case 3: $candidate = dt($RePackagingTimeDetail->date_start ?? null); break;
|
||||||
|
case 4: $candidate = dt($PackingNoteDetail->date_redelivery ?? null); break;
|
||||||
|
case 5: $candidate = dt($DispoTimeDetail->date_end ?? null); break;
|
||||||
|
default: $candidate = null; break;
|
||||||
|
}
|
||||||
|
if (!$candidate) {
|
||||||
|
$candidate = dt($packingjob->date_end ?? null);
|
||||||
|
}
|
||||||
|
return $candidate ? dayStart($candidate) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ---------- Daten holen (wie in deiner Check-In-Datei) ---------- */
|
||||||
|
// Offene Packingnotes für Check-IN-Seite: isco=False
|
||||||
|
$result = $Epi->requestEpiApi('/v1/packingnote/open?isco=False&cl=' . Epirent_Mandant);
|
||||||
|
$data_output = json_decode($result)->payload ?? [];
|
||||||
|
|
||||||
|
/** ---------- Zähler ---------- */
|
||||||
|
$today = dayStart(new DateTimeImmutable('today', new DateTimeZone(APP_TZ)));
|
||||||
|
|
||||||
|
$limit = null;
|
||||||
|
if (CheckIn_FutureDays != -1) {
|
||||||
|
$limit = $today->modify('+' . (int)CheckIn_FutureDays . ' day');
|
||||||
|
}
|
||||||
|
|
||||||
|
$cntOverdue = 0;
|
||||||
|
$cntToday = 0;
|
||||||
|
$cntFuture = 0;
|
||||||
|
|
||||||
|
/** ---------- Zählen mit exakt deiner Logik ---------- */
|
||||||
|
foreach ($data_output as $packingjob) {
|
||||||
|
if ($packingjob->is_archived == true) continue;
|
||||||
|
|
||||||
|
// OrderDetails (für Nachbereitung / Rückpacken)
|
||||||
|
$orderRes = $Epi->requestEpiApi('/v1/order/' . $packingjob->order_pk . '?cl=' . Epirent_Mandant);
|
||||||
|
$orderdetail_output = json_decode($orderRes)->payload[0] ?? null;
|
||||||
|
|
||||||
|
// PackingNote Details (für Redelivery)
|
||||||
|
$pnRes = $Epi->requestEpiApi('/v1/packingnote/' . $packingjob->primary_key . '?cl=' . Epirent_Mandant);
|
||||||
|
$PackingNoteDetail = json_decode($pnRes)->payload[0] ?? null;
|
||||||
|
|
||||||
|
// Zeit-Slots aus dem Schedule
|
||||||
|
$NachbereitungsTimeDetail = null;
|
||||||
|
$RePackagingTimeDetail = null;
|
||||||
|
$DispoTimeDetail = null;
|
||||||
|
if ($orderdetail_output && !empty($orderdetail_output->order_schedule)) {
|
||||||
|
foreach ($orderdetail_output->order_schedule as $scheduledetail) {
|
||||||
|
if ($scheduledetail->name == Nachbereitung_Zeitvariable) {
|
||||||
|
$NachbereitungsTimeDetail = $scheduledetail;
|
||||||
|
}
|
||||||
|
if ($scheduledetail->name == Rückpacken_Zeitvariable) {
|
||||||
|
$RePackagingTimeDetail = $scheduledetail;
|
||||||
|
}
|
||||||
|
if ($scheduledetail->name == "Dispo") {
|
||||||
|
$DispoTimeDetail = $scheduledetail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Row-Mark Source (mit Override-Flag)
|
||||||
|
$source = CheckIn_UseDispoEndForRowMarking ? 1 : (int)CheckInRowMarkSource;
|
||||||
|
|
||||||
|
$markDate = resolveRowMarkDateCheckIn(
|
||||||
|
$packingjob,
|
||||||
|
$NachbereitungsTimeDetail,
|
||||||
|
$RePackagingTimeDetail,
|
||||||
|
$PackingNoteDetail,
|
||||||
|
$source
|
||||||
|
);
|
||||||
|
if (!$markDate) continue;
|
||||||
|
|
||||||
|
// Fenster berücksichtigen (gleich wie in deiner Tabelle)
|
||||||
|
if (CheckIn_FutureDays != -1 && $limit && $markDate > $limit) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zählen
|
||||||
|
if ($markDate < $today) {
|
||||||
|
$cntOverdue++;
|
||||||
|
} elseif ($markDate == $today) {
|
||||||
|
$cntToday++;
|
||||||
|
} else {
|
||||||
|
$cntFuture++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$ts = (new DateTimeImmutable('now', new DateTimeZone(APP_TZ)))->format('H:i:s');
|
||||||
|
?>
|
||||||
|
<h3 class="mb-3">
|
||||||
|
<span class="badge badge-secondary d-block w-100 py-2 text-center">CheckIn</span>
|
||||||
|
</h3>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-4 col-md-6">
|
||||||
|
<div class="card bg-danger text-white mb-4">
|
||||||
|
<div class="card-body d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<div class="small">Überfällige CheckIns</div>
|
||||||
|
<div class="h2 mb-0"><?= (int)$cntOverdue ?></div>
|
||||||
|
</div>
|
||||||
|
<i class="fa-solid fa-triangle-exclamation fa-2x" style="opacity:.6"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer d-flex justify-content-between">
|
||||||
|
<span class="small text-white-50">Stand <?= htmlspecialchars($ts) ?></span>
|
||||||
|
<span class="small">bis <?= htmlspecialchars($today->format('d.m.Y')) ?></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xl-4 col-md-6">
|
||||||
|
<div class="card bg-warning text-dark mb-4">
|
||||||
|
<div class="card-body d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<div class="small">Heutige CheckIns</div>
|
||||||
|
<div class="h2 mb-0"><?= (int)$cntToday ?></div>
|
||||||
|
</div>
|
||||||
|
<i class="fa-solid fa-boxes-packing fa-2x" style="opacity:.6"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer d-flex justify-content-between">
|
||||||
|
<span class="small text-muted">Stand <?= htmlspecialchars($ts) ?></span>
|
||||||
|
<span class="small"><?= htmlspecialchars($today->format('d.m.Y')) ?></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xl-4 col-md-6">
|
||||||
|
<div class="card bg-success text-white mb-4">
|
||||||
|
<div class="card-body d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<div class="small">
|
||||||
|
Zukünftige CheckIns
|
||||||
|
<?php if (CheckIn_FutureDays != -1 && $limit): ?>
|
||||||
|
(≤ <?= htmlspecialchars($limit->format('d.m.Y')) ?>)
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<div class="h2 mb-0"><?= (int)$cntFuture ?></div>
|
||||||
|
</div>
|
||||||
|
<i class="fa-solid fa-forward-step fa-2x" style="opacity:.6"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer d-flex justify-content-between">
|
||||||
|
<span class="small text-white-50">Stand <?= htmlspecialchars($ts) ?></span>
|
||||||
|
<span class="small">
|
||||||
|
<?php if (CheckIn_FutureDays == -1): ?>
|
||||||
|
unbegrenzt
|
||||||
|
<?php else: ?>
|
||||||
|
bis <?= htmlspecialchars($limit->format('d.m.Y')) ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -59,6 +59,7 @@ function resolveRowMarkDateCheckIn(
|
|||||||
$NachbereitungsTimeDetail,
|
$NachbereitungsTimeDetail,
|
||||||
$RePackagingTimeDetail,
|
$RePackagingTimeDetail,
|
||||||
$PackingNoteDetail,
|
$PackingNoteDetail,
|
||||||
|
$DispoTimeDetail,
|
||||||
int $source
|
int $source
|
||||||
): ?DateTimeImmutable {
|
): ?DateTimeImmutable {
|
||||||
$candidate = null;
|
$candidate = null;
|
||||||
@@ -67,6 +68,8 @@ function resolveRowMarkDateCheckIn(
|
|||||||
case 2: $candidate = dt($NachbereitungsTimeDetail->date_start ?? null); break;
|
case 2: $candidate = dt($NachbereitungsTimeDetail->date_start ?? null); break;
|
||||||
case 3: $candidate = dt($RePackagingTimeDetail->date_start ?? null); break;
|
case 3: $candidate = dt($RePackagingTimeDetail->date_start ?? null); break;
|
||||||
case 4: $candidate = dt($PackingNoteDetail->date_redelivery ?? null); break;
|
case 4: $candidate = dt($PackingNoteDetail->date_redelivery ?? null); break;
|
||||||
|
case 5: $candidate = dt($DispoTimeDetail->date_end ?? null); break;
|
||||||
|
|
||||||
default: $candidate = null; break;
|
default: $candidate = null; break;
|
||||||
}
|
}
|
||||||
if (!$candidate) {
|
if (!$candidate) {
|
||||||
@@ -121,7 +124,7 @@ foreach ($data_output as $packingjob) {
|
|||||||
// Zeit-Slots aus dem Schedule
|
// Zeit-Slots aus dem Schedule
|
||||||
$NachbereitungsTimeDetail = null;
|
$NachbereitungsTimeDetail = null;
|
||||||
$RePackagingTimeDetail = null;
|
$RePackagingTimeDetail = null;
|
||||||
|
$DispoTimeDetail = null;
|
||||||
foreach ($orderdetail_output->order_schedule as $scheduledetail) {
|
foreach ($orderdetail_output->order_schedule as $scheduledetail) {
|
||||||
if ($scheduledetail->name == Nachbereitung_Zeitvariable) {
|
if ($scheduledetail->name == Nachbereitung_Zeitvariable) {
|
||||||
$NachbereitungsTimeDetail = $scheduledetail;
|
$NachbereitungsTimeDetail = $scheduledetail;
|
||||||
@@ -129,6 +132,9 @@ foreach ($data_output as $packingjob) {
|
|||||||
if ($scheduledetail->name == Rückpacken_Zeitvariable) {
|
if ($scheduledetail->name == Rückpacken_Zeitvariable) {
|
||||||
$RePackagingTimeDetail = $scheduledetail;
|
$RePackagingTimeDetail = $scheduledetail;
|
||||||
}
|
}
|
||||||
|
if ($scheduledetail->name == "Dispo") {
|
||||||
|
$DispoTimeDetail = $scheduledetail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Row-Marking bestimmen (konfigurierbar, analog Checkout) ---
|
// --- Row-Marking bestimmen (konfigurierbar, analog Checkout) ---
|
||||||
@@ -146,6 +152,7 @@ foreach ($data_output as $packingjob) {
|
|||||||
$NachbereitungsTimeDetail,
|
$NachbereitungsTimeDetail,
|
||||||
$RePackagingTimeDetail,
|
$RePackagingTimeDetail,
|
||||||
$PackingNoteDetail,
|
$PackingNoteDetail,
|
||||||
|
$DispoTimeDetail,
|
||||||
$source
|
$source
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -163,7 +170,7 @@ foreach ($data_output as $packingjob) {
|
|||||||
echo "<td>" . $packingjob->event . "</td>";
|
echo "<td>" . $packingjob->event . "</td>";
|
||||||
|
|
||||||
// Zeitspalte öffnen, wenn mindestens eine Anzeige aktiv ist
|
// Zeitspalte öffnen, wenn mindestens eine Anzeige aktiv ist
|
||||||
if (ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin || ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin) {
|
if (ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin || ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin || ShowDispoEndOnCheckin) {
|
||||||
echo "<td>";
|
echo "<td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +197,13 @@ foreach ($data_output as $packingjob) {
|
|||||||
echoMarkedTimeLine($PackingNoteDetail->date_redelivery, (int)$PackingNoteDetail->time_redelivery, $today, ShowTimesOnCheckin);
|
echoMarkedTimeLine($PackingNoteDetail->date_redelivery, (int)$PackingNoteDetail->time_redelivery, $today, ShowTimesOnCheckin);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin || ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin) {
|
// Dispo Ende
|
||||||
|
if (ShowDispoEndOnCheckin && $DispoTimeDetail && $DispoTimeDetail->date_end != null) {
|
||||||
|
if (ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin || ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin) echo "<br>";
|
||||||
|
echoMarkedTimeLine($DispoTimeDetail->date_end, (int)$DispoTimeDetail->time_end, $today, ShowTimesOnCheckin);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ShowCheckInTimeOnCheckin || ShowNachbereitungTimeOnCheckin || ShowRePackagingTimeOnCheckin || ShowReDeliveryTimeOnCheckin || ShowDispoEndOnCheckin) {
|
||||||
echo "</td>";
|
echo "</td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,25 +231,25 @@ foreach ($data_output as $packingjob) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($PackingNoteDetail->is_self_redeliver) {
|
if ($PackingNoteDetail->is_self_redeliver) {
|
||||||
echo '<i class="fa-solid fa-person-walking fa-lg"></i>';
|
echo '<i class="'.SelbstabholerIcon.'"></i>';
|
||||||
} else {
|
} else {
|
||||||
if (preg_match('/' . KurierContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
if (preg_match('/' . KurierContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
||||||
echo '<i class="fa-solid fa-hand-holding-dollar fa-lg"></i>';
|
echo '<i class="'.KurierIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . SpeditionContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
if (preg_match('/' . SpeditionContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
||||||
echo '<i class="fa-solid fa-truck fa-lg"></i>';
|
echo '<i class="'.SpeditionIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . DHLContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
if (preg_match('/' . DHLContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
||||||
echo '<i class="fa-brands fa-dhl fa-2xl"></i>';
|
echo '<i class="'.DHLIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . LKWContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
if (preg_match('/' . LKWContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
||||||
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="fa-solid fa-truck fa-lg"></i>';
|
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="'.LKWIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . TransporterContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
if (preg_match('/' . TransporterContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
||||||
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="fa-solid fa-van-shuttle fa-lg"></i>';
|
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="'.TransporterIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . PKWContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
if (preg_match('/' . PKWContainsText . '/i', $PackingNoteDetail->shipping_in)) {
|
||||||
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="fa-solid fa-car fa-lg"></i>';
|
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="'.PKWIcon.'"></i>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "</td>";
|
echo "</td>";
|
||||||
@@ -250,10 +263,21 @@ foreach ($data_output as $packingjob) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTimeFromSeconds(string $timestring) {
|
function getTimeFromSeconds($seconds): string {
|
||||||
$hours = floor($timestring / 3600);
|
if ($seconds === null || $seconds === '') {
|
||||||
$mins = floor($timestring / 60 % 60);
|
return '';
|
||||||
$secs = floor($timestring % 60);
|
}
|
||||||
$timeFormat = sprintf('%02d:%02d', $hours, $mins);
|
|
||||||
return $timeFormat;
|
// robust normalisieren: String/Float -> Float -> gerundet -> Int
|
||||||
|
$seconds = (int) round((float) $seconds);
|
||||||
|
|
||||||
|
if ($seconds < 0) {
|
||||||
|
$seconds = 0; // oder: return ''; je nach gewünschtem Verhalten
|
||||||
|
}
|
||||||
|
|
||||||
|
// reine Integer-Arithmetik, keine impliziten float->int Casts
|
||||||
|
$hours = intdiv($seconds, 3600);
|
||||||
|
$mins = intdiv($seconds % 3600, 60);
|
||||||
|
|
||||||
|
return sprintf('%02d:%02d', $hours, $mins);
|
||||||
}
|
}
|
||||||
|
|||||||
189
sources/getCheckOutCards.php
Normal file
189
sources/getCheckOutCards.php
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
<?php
|
||||||
|
// sources/getCheckoutTable.php – zählt statt Tabellenausgabe drei KPIs als Karten
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
require('../config.php');
|
||||||
|
require('../EpiApi.php');
|
||||||
|
|
||||||
|
$Epi = new Epirent();
|
||||||
|
|
||||||
|
const APP_TZ = 'Europe/Berlin';
|
||||||
|
|
||||||
|
/** ---- Helpers (aus deiner bisherigen Datei) ---- */
|
||||||
|
function dt(?string $s): ?DateTimeImmutable {
|
||||||
|
if (!$s) return null;
|
||||||
|
try { return new DateTimeImmutable($s, new DateTimeZone(APP_TZ)); }
|
||||||
|
catch (Throwable $e) { return null; }
|
||||||
|
}
|
||||||
|
function dayStart(DateTimeImmutable $d): DateTimeImmutable {
|
||||||
|
return $d->setTime(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Quelle für das Markierungsdatum (identisch zu deiner Liste):
|
||||||
|
* 1 = $packingjob->date_start
|
||||||
|
* 2 = $VorbereitungsTimeDetail->date_start
|
||||||
|
* 3 = $PackingNoteDetail->date_packing
|
||||||
|
* 4 = $PackingNoteDetail->date_delivery
|
||||||
|
* Fallback: $packingjob->date_start
|
||||||
|
*/
|
||||||
|
function resolveRowMarkDate($packingjob, $VorbereitungsTimeDetail, $PackingNoteDetail, int $source): ?DateTimeImmutable {
|
||||||
|
$candidate = null;
|
||||||
|
switch ($source) {
|
||||||
|
case 1: $candidate = dt($packingjob->date_start ?? null); break;
|
||||||
|
case 2: $candidate = dt($VorbereitungsTimeDetail->date_start ?? null); break;
|
||||||
|
case 3: $candidate = dt($PackingNoteDetail->date_packing ?? null); break;
|
||||||
|
case 4: $candidate = dt($PackingNoteDetail->date_delivery ?? null); break;
|
||||||
|
default:$candidate = null; break;
|
||||||
|
}
|
||||||
|
if (!$candidate) $candidate = dt($packingjob->date_start ?? null);
|
||||||
|
return $candidate ? dayStart($candidate) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ---- Daten laden wie bisher (Checkout-Quelle) ---- */
|
||||||
|
if (UseDeliveredForCheckOutCompleted) {
|
||||||
|
// isco=False -> Checkout-Ansicht offen
|
||||||
|
$result = $Epi->requestEpiApi('/v1/packingnote/open?isco=False&cl=' . Epirent_Mandant);
|
||||||
|
} else {
|
||||||
|
// isci=False -> Alternative Logik (wie in deiner Datei)
|
||||||
|
$result = $Epi->requestEpiApi('/v1/packingnote/open?isci=False&cl=' . Epirent_Mandant);
|
||||||
|
}
|
||||||
|
$data_output = json_decode($result)->payload ?? [];
|
||||||
|
|
||||||
|
/** ---- Zähler vorbereiten ---- */
|
||||||
|
$today = dayStart(new DateTimeImmutable('today', new DateTimeZone(APP_TZ)));
|
||||||
|
$limit = null; // optionales Fenster wie in deiner Liste
|
||||||
|
if (CheckOut_FutureDays != -1) {
|
||||||
|
$limit = $today->modify('+' . (int)CheckOut_FutureDays . ' day');
|
||||||
|
}
|
||||||
|
|
||||||
|
$cntOverdue = 0;
|
||||||
|
$cntToday = 0;
|
||||||
|
$cntFuture = 0;
|
||||||
|
|
||||||
|
/** ---- Iteration identisch zur bisherigen Logik ---- */
|
||||||
|
foreach ($data_output as $packingjob) {
|
||||||
|
|
||||||
|
// Details nur holen, wenn nötig & wie gehabt
|
||||||
|
$PackingNoteDetail = null;
|
||||||
|
if ($packingjob->is_archived != true && UseDeliveredForCheckOutCompleted) {
|
||||||
|
$PackingNoteDetailResult = $Epi->requestEpiApi('/v1/packingnote/' . $packingjob->primary_key . '?cl=' . Epirent_Mandant);
|
||||||
|
$PackingNoteDetail = json_decode($PackingNoteDetailResult)->payload[0] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aufnahmebedingung exakt wie bei dir:
|
||||||
|
if (
|
||||||
|
$packingjob->is_archived != true
|
||||||
|
&& (
|
||||||
|
!UseDeliveredForCheckOutCompleted
|
||||||
|
|| ($PackingNoteDetail && ($PackingNoteDetail->date_delivered !== "0000-00-00" || (int)$PackingNoteDetail->time_delivered !== 0))
|
||||||
|
)
|
||||||
|
&& ($PackingNoteDetail && (int)$PackingNoteDetail->is_all_out !== 0)
|
||||||
|
) {
|
||||||
|
// OrderDetails (für Vorbereitungszeit)
|
||||||
|
$result = $Epi->requestEpiApi('/v1/order/' . $packingjob->order_pk . '?cl=' . Epirent_Mandant);
|
||||||
|
$orderdetail_output = (json_decode($result)->payload[0] ?? null);
|
||||||
|
|
||||||
|
// PackingNoteDetail nachladen, falls oben noch nicht geholt
|
||||||
|
if (!UseDeliveredForCheckOutCompleted) {
|
||||||
|
$PackingNoteDetailResult = $Epi->requestEpiApi('/v1/packingnote/' . $packingjob->primary_key . '?cl=' . Epirent_Mandant);
|
||||||
|
$PackingNoteDetail = json_decode($PackingNoteDetailResult)->payload[0] ?? null;
|
||||||
|
if (!$PackingNoteDetail) continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vorbereitungs-Zeitdetail ermitteln
|
||||||
|
$VorbereitungsTimeDetail = null;
|
||||||
|
if ($orderdetail_output && !empty($orderdetail_output->order_schedule)) {
|
||||||
|
foreach ($orderdetail_output->order_schedule as $scheduledetail) {
|
||||||
|
if ($scheduledetail->name == Vorbereitungs_Zeitvariable) {
|
||||||
|
$VorbereitungsTimeDetail = $scheduledetail;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Markierungsdatum wie in der Tabelle
|
||||||
|
$markDate = resolveRowMarkDate($packingjob, $VorbereitungsTimeDetail, $PackingNoteDetail, (int)CheckOutRowMarkSource);
|
||||||
|
if (!$markDate) continue;
|
||||||
|
|
||||||
|
// Optionales Zukunftsfenster berücksichtigen (wie bisher)
|
||||||
|
if (CheckOut_FutureDays != -1 && $limit && $markDate > $limit) {
|
||||||
|
// außerhalb des Fensters ignorieren
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zählen
|
||||||
|
if ($markDate < $today) {
|
||||||
|
$cntOverdue++;
|
||||||
|
} elseif ($markDate == $today) {
|
||||||
|
$cntToday++;
|
||||||
|
} else { // $markDate > $today
|
||||||
|
$cntFuture++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zeitstempel für die Karten
|
||||||
|
$ts = (new DateTimeImmutable('now', new DateTimeZone(APP_TZ)))->format('H:i:s');
|
||||||
|
|
||||||
|
/** ---- Ausgabe: 3 Bootstrap-Karten ---- */
|
||||||
|
?>
|
||||||
|
<h3 class="mb-3">
|
||||||
|
<span class="badge badge-secondary d-block w-100 py-2 text-center">Checkout</span>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-xl-4 col-md-6">
|
||||||
|
<div class="card bg-danger text-white mb-4">
|
||||||
|
<div class="card-body d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<div class="small">Überfällige CheckOuts</div>
|
||||||
|
<div class="h2 mb-0"><?= (int)$cntOverdue ?></div>
|
||||||
|
</div>
|
||||||
|
<i class="fa-solid fa-triangle-exclamation fa-2x" style="opacity:.6"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer d-flex justify-content-between">
|
||||||
|
<span class="small text-white-50">Stand <?= htmlspecialchars($ts) ?></span>
|
||||||
|
<span class="small">bis <?= htmlspecialchars($today->format('d.m.Y')) ?></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xl-4 col-md-6">
|
||||||
|
<div class="card bg-warning text-dark mb-4">
|
||||||
|
<div class="card-body d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<div class="small">Heutige CheckOuts</div>
|
||||||
|
<div class="h2 mb-0"><?= (int)$cntToday ?></div>
|
||||||
|
</div>
|
||||||
|
<i class="fa-solid fa-dolly fa-2x" style="opacity:.6"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer d-flex justify-content-between">
|
||||||
|
<span class="small text-muted">Stand <?= htmlspecialchars($ts) ?></span>
|
||||||
|
<span class="small"><?= htmlspecialchars($today->format('d.m.Y')) ?></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xl-4 col-md-6">
|
||||||
|
<div class="card bg-success text-white mb-4">
|
||||||
|
<div class="card-body d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<div class="small">Zukünftige CheckOuts<?= (CheckOut_FutureDays != -1 ? ' (≤ '.$limit->format('d.m.Y').')' : '') ?></div>
|
||||||
|
<div class="h2 mb-0"><?= (int)$cntFuture ?></div>
|
||||||
|
</div>
|
||||||
|
<i class="fa-solid fa-forward-step fa-2x" style="opacity:.6"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer d-flex justify-content-between">
|
||||||
|
<span class="small text-white-50">Stand <?= htmlspecialchars($ts) ?></span>
|
||||||
|
<span class="small">
|
||||||
|
<?php if (CheckOut_FutureDays == -1): ?>
|
||||||
|
unbegrenzt
|
||||||
|
<?php else: ?>
|
||||||
|
bis <?= htmlspecialchars($limit->format('d.m.Y')) ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -39,7 +39,7 @@ function dayStart(DateTimeImmutable $d): DateTimeImmutable {
|
|||||||
return $d->setTime(0, 0, 0);
|
return $d->setTime(0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function resolveRowMarkDate($packingjob, $VorbereitungsTimeDetail, $PackingNoteDetail, int $source): ?DateTimeImmutable {
|
function resolveRowMarkDate($packingjob, $VorbereitungsTimeDetail, $PackingNoteDetail, $DispoTimeDetail, int $source): ?DateTimeImmutable {
|
||||||
$candidate = null;
|
$candidate = null;
|
||||||
switch ($source) {
|
switch ($source) {
|
||||||
case 1: $candidate = dt($packingjob->date_start ?? null);
|
case 1: $candidate = dt($packingjob->date_start ?? null);
|
||||||
@@ -50,6 +50,8 @@ function resolveRowMarkDate($packingjob, $VorbereitungsTimeDetail, $PackingNoteD
|
|||||||
break;
|
break;
|
||||||
case 4: $candidate = dt($PackingNoteDetail->date_delivery ?? null);
|
case 4: $candidate = dt($PackingNoteDetail->date_delivery ?? null);
|
||||||
break;
|
break;
|
||||||
|
case 5: $candidate = dt($DispoTimeDetail->date_start ?? null);
|
||||||
|
break;
|
||||||
default: $candidate = null;
|
default: $candidate = null;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -70,7 +72,8 @@ function rowClassForDate(?DateTimeImmutable $markDate, ?DateTimeImmutable $today
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (UseDeliveredForCheckOutCompleted) {
|
if (UseDeliveredForCheckOutCompleted) {
|
||||||
$result = $Epi->requestEpiApi('/v1/packingnote/open?isco=False&cl=' . Epirent_Mandant);
|
$result = $Epi->requestEpiApi('/v1/packingnote/open?isci=true&cl=' . Epirent_Mandant);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$result = $Epi->requestEpiApi('/v1/packingnote/open?isci=False&cl=' . Epirent_Mandant);
|
$result = $Epi->requestEpiApi('/v1/packingnote/open?isci=False&cl=' . Epirent_Mandant);
|
||||||
}
|
}
|
||||||
@@ -107,15 +110,17 @@ foreach ($data_output as $packingjob) {
|
|||||||
if ($packingjob->is_archived != true && UseDeliveredForCheckOutCompleted) {
|
if ($packingjob->is_archived != true && UseDeliveredForCheckOutCompleted) {
|
||||||
$PackingNoteDetailResult = $Epi->requestEpiApi('/v1/packingnote/' . $packingjob->primary_key . '?cl=' . Epirent_Mandant);
|
$PackingNoteDetailResult = $Epi->requestEpiApi('/v1/packingnote/' . $packingjob->primary_key . '?cl=' . Epirent_Mandant);
|
||||||
$PackingNoteDetail = json_decode($PackingNoteDetailResult)->payload[0];
|
$PackingNoteDetail = json_decode($PackingNoteDetailResult)->payload[0];
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
$packingjob->is_archived != true
|
($packingjob->is_archived ?? false) != true
|
||||||
&& (
|
&& (
|
||||||
!UseDeliveredForCheckOutCompleted
|
((int)($PackingNoteDetail->is_all_out ?? 0)) !== 0
|
||||||
|| ($PackingNoteDetail->date_delivered !== "0000-00-00" || (int)$PackingNoteDetail->time_delivered !== 0)
|
|| (($PackingNoteDetail->date_delivered ?? "0000-00-00") === "0000-00-00"
|
||||||
|
|| (int)($PackingNoteDetail->time_delivered ?? 0) === 0)
|
||||||
)
|
)
|
||||||
&& (int)$PackingNoteDetail->is_all_out !== 0
|
|
||||||
) {
|
) {
|
||||||
//get OrderDetails
|
//get OrderDetails
|
||||||
$result = $Epi->requestEpiApi('/v1/order/' . $packingjob->order_pk . '?cl=' . Epirent_Mandant);
|
$result = $Epi->requestEpiApi('/v1/order/' . $packingjob->order_pk . '?cl=' . Epirent_Mandant);
|
||||||
@@ -128,11 +133,15 @@ foreach ($data_output as $packingjob) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$VorbereitungsTimeDetail = null;
|
$VorbereitungsTimeDetail = null;
|
||||||
|
$DispoTimeDetail = null;
|
||||||
|
|
||||||
foreach ($orderdetail_output->order_schedule as $scheduledetail) {
|
foreach ($orderdetail_output->order_schedule as $scheduledetail) {
|
||||||
if ($scheduledetail->name == Vorbereitungs_Zeitvariable) {
|
if ($scheduledetail->name == Vorbereitungs_Zeitvariable) {
|
||||||
$VorbereitungsTimeDetail = $scheduledetail;
|
$VorbereitungsTimeDetail = $scheduledetail;
|
||||||
}
|
}
|
||||||
|
if($scheduledetail->name == "Dispo"){
|
||||||
|
$DispoTimeDetail = $scheduledetail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Row-Marking Datum bestimmen (konfigurierbar) ---
|
// --- Row-Marking Datum bestimmen (konfigurierbar) ---
|
||||||
@@ -143,7 +152,7 @@ foreach ($data_output as $packingjob) {
|
|||||||
$limit = $todayFilter->modify('+' . (int) CheckOut_FutureDays . ' day');
|
$limit = $todayFilter->modify('+' . (int) CheckOut_FutureDays . ' day');
|
||||||
}
|
}
|
||||||
|
|
||||||
$markDate = resolveRowMarkDate($packingjob, $VorbereitungsTimeDetail, $PackingNoteDetail, (int) CheckOutRowMarkSource);
|
$markDate = resolveRowMarkDate($packingjob, $VorbereitungsTimeDetail, $PackingNoteDetail, $DispoTimeDetail, (int) CheckOutRowMarkSource);
|
||||||
|
|
||||||
if (CheckOut_FutureDays == -1 || ($markDate && $markDate <= $limit)) {
|
if (CheckOut_FutureDays == -1 || ($markDate && $markDate <= $limit)) {
|
||||||
$trClass = rowClassForDate($markDate, $today);
|
$trClass = rowClassForDate($markDate, $today);
|
||||||
@@ -162,7 +171,7 @@ foreach ($data_output as $packingjob) {
|
|||||||
echo "<td>" . $packingjob->contact->name . "</td>";
|
echo "<td>" . $packingjob->contact->name . "</td>";
|
||||||
echo "<td>" . $packingjob->event . "</td>";
|
echo "<td>" . $packingjob->event . "</td>";
|
||||||
|
|
||||||
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout || ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout) { echo "<td>";}
|
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout || ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout || ShowDispoStartOnCheckout) { echo "<td>";}
|
||||||
|
|
||||||
|
|
||||||
if (ShowCheckoutTimeOnCheckout && $packingjob->date_start != null) {
|
if (ShowCheckoutTimeOnCheckout && $packingjob->date_start != null) {
|
||||||
@@ -172,13 +181,30 @@ foreach ($data_output as $packingjob) {
|
|||||||
if (ShowCheckoutTimeOnCheckout) {
|
if (ShowCheckoutTimeOnCheckout) {
|
||||||
echo "<br>";
|
echo "<br>";
|
||||||
}
|
}
|
||||||
echoMarkedTimeLine($VorbereitungsTimeDetail->date_start, (int) $VorbereitungsTimeDetail->time_start, $today, ShowTimesOnCheckout);
|
|
||||||
|
if($packingjob->is_all_out != 0){
|
||||||
|
echoMarkedTimeLine($VorbereitungsTimeDetail->date_start, (int) $VorbereitungsTimeDetail->time_start, $today, ShowTimesOnCheckout);
|
||||||
|
}else{
|
||||||
|
echo "<span class='bg-success text-light'>";
|
||||||
|
echo date_format(new \DateTime($VorbereitungsTimeDetail->date_start), 'd.m.Y');
|
||||||
|
if($VorbereitungsTimeDetail->time_start){echo " ".getTimeFromSeconds((string) $VorbereitungsTimeDetail->time_start);}
|
||||||
|
echo "</span>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if (ShowPackagingTimeOnCheckout && $PackingNoteDetail && $PackingNoteDetail->date_packing != null) {
|
if (ShowPackagingTimeOnCheckout && $PackingNoteDetail && $PackingNoteDetail->date_packing != null) {
|
||||||
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout) {
|
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout) {
|
||||||
echo "<br>";
|
echo "<br>";
|
||||||
}
|
}
|
||||||
|
if($packingjob->is_all_out != 0){
|
||||||
echoMarkedTimeLine($PackingNoteDetail->date_packing, (int) $PackingNoteDetail->time_packing, $today, ShowTimesOnCheckout);
|
echoMarkedTimeLine($PackingNoteDetail->date_packing, (int) $PackingNoteDetail->time_packing, $today, ShowTimesOnCheckout);
|
||||||
|
}else{
|
||||||
|
echo "<span class='bg-success text-light'>";
|
||||||
|
echo date_format(new \DateTime($PackingNoteDetail->date_packing), 'd.m.Y');
|
||||||
|
if($PackingNoteDetail->time_packing){echo " ".getTimeFromSeconds((string) $PackingNoteDetail->time_packing);}
|
||||||
|
echo "</span>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ShowDeliveryTimeOnCheckout && $PackingNoteDetail && $PackingNoteDetail->date_delivery != null) {
|
if (ShowDeliveryTimeOnCheckout && $PackingNoteDetail && $PackingNoteDetail->date_delivery != null) {
|
||||||
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout || ShowPackagingTimeOnCheckout) {
|
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout || ShowPackagingTimeOnCheckout) {
|
||||||
@@ -186,9 +212,14 @@ foreach ($data_output as $packingjob) {
|
|||||||
}
|
}
|
||||||
echoMarkedTimeLine($PackingNoteDetail->date_delivery, (int) $PackingNoteDetail->time_delivery, $today, ShowTimesOnCheckout);
|
echoMarkedTimeLine($PackingNoteDetail->date_delivery, (int) $PackingNoteDetail->time_delivery, $today, ShowTimesOnCheckout);
|
||||||
}
|
}
|
||||||
|
if (ShowDispoStartOnCheckout && $DispoTimeDetail->date_start && $DispoTimeDetail->time_start != null) {
|
||||||
|
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout || ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout) {
|
||||||
|
echo "<br>";
|
||||||
|
}
|
||||||
|
echoMarkedTimeLine($DispoTimeDetail->date_start, (int) $DispoTimeDetail->time_start, $today, ShowTimesOnCheckout);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout || ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout || ShowDispoStartOnCheckout) {
|
||||||
if (ShowCheckoutTimeOnCheckout || ShowVorbereitungTimeOnCheckout || ShowPackagingTimeOnCheckout || ShowDeliveryTimeOnCheckout) {
|
|
||||||
echo "</td>";
|
echo "</td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,25 +247,25 @@ foreach ($data_output as $packingjob) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($PackingNoteDetail->is_self_pickup) {
|
if ($PackingNoteDetail->is_self_pickup) {
|
||||||
echo '<i class="fa-solid fa-person-walking fa-lg"></i>';
|
echo '<i class="'.SelbstabholerIcon.'"></i>';
|
||||||
} else {
|
} else {
|
||||||
if (preg_match('/' . KurierContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
if (preg_match('/' . KurierContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
||||||
echo '<i class="fa-solid fa-hand-holding-dollar fa-lg"></i>';
|
echo '<i class="'.KurierIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . SpeditionContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
if (preg_match('/' . SpeditionContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
||||||
echo '<i class="fa-solid fa-truck fa-lg"></i>';
|
echo '<i class="'.SpeditionIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . DHLContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
if (preg_match('/' . DHLContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
||||||
echo '<i class="fa-brands fa-dhl fa-2xl"></i>';
|
echo '<i class="'.DHLIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . LKWContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
if (preg_match('/' . LKWContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
||||||
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="fa-solid fa-truck fa-lg"></i>';
|
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="'.LKWIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . TransporterContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
if (preg_match('/' . TransporterContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
||||||
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="fa-solid fa-van-shuttle fa-lg"></i>';
|
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="'.TransporterIcon.'"></i>';
|
||||||
}
|
}
|
||||||
if (preg_match('/' . PKWContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
if (preg_match('/' . PKWContainsText . '/i', $PackingNoteDetail->shipping_out)) {
|
||||||
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="fa-solid fa-car fa-lg"></i>';
|
echo '<i class="fa-solid fa-industry fa-lg"></i><i class="'.PKWIcon.'"></i>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "</td>";
|
echo "</td>";
|
||||||
@@ -264,15 +295,35 @@ function echoMarkedTimeLine(?string $dateStr, ?int $timeSeconds, DateTimeImmutab
|
|||||||
echo $cls ? "</span>" : "";
|
echo $cls ? "</span>" : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
function getTimeFromSeconds(string $timestring) {
|
function getTimeFromSeconds(string $timestring) {
|
||||||
|
|
||||||
$hours = floor($timestring / 3600);
|
$hours = floor($timestring / 3600);
|
||||||
$mins = floor($timestring / 60 % 60);
|
$mins = floor(round($timestring / 60 % 60));
|
||||||
$secs = floor($timestring % 60);
|
$secs = floor(round($timestring % 60));
|
||||||
|
|
||||||
$timeFormat = sprintf('%02d:%02d', $hours, $mins);
|
$timeFormat = sprintf('%02d:%02d', $hours, $mins);
|
||||||
|
|
||||||
return $timeFormat;
|
return $timeFormat;
|
||||||
|
}*/
|
||||||
|
function getTimeFromSeconds($seconds): string {
|
||||||
|
if ($seconds === null || $seconds === '') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// robust normalisieren: String/Float -> Float -> gerundet -> Int
|
||||||
|
$seconds = (int) round((float) $seconds);
|
||||||
|
|
||||||
|
if ($seconds < 0) {
|
||||||
|
$seconds = 0; // oder: return ''; je nach gewünschtem Verhalten
|
||||||
|
}
|
||||||
|
|
||||||
|
// reine Integer-Arithmetik, keine impliziten float->int Casts
|
||||||
|
$hours = intdiv($seconds, 3600);
|
||||||
|
$mins = intdiv($seconds % 3600, 60);
|
||||||
|
|
||||||
|
return sprintf('%02d:%02d', $hours, $mins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
877
sources/getProductLabel.php
Normal file
877
sources/getProductLabel.php
Normal file
@@ -0,0 +1,877 @@
|
|||||||
|
<?php
|
||||||
|
error_reporting(E_ALL & ~E_DEPRECATED);
|
||||||
|
|
||||||
|
require('../config.php');
|
||||||
|
require('../EpiApi.php');
|
||||||
|
require_once __DIR__ . '/../vendor/autoload.php';
|
||||||
|
require_once __DIR__ . '/../vendor/tecnickcom/tcpdf/tcpdf.php';
|
||||||
|
date_default_timezone_set('Europe/Berlin');
|
||||||
|
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
||||||
|
$deviceNumber = (!empty($_GET['nr'])) ? '--' . trim($_GET['nr']) : '';
|
||||||
|
|
||||||
|
$Epi = new Epirent();
|
||||||
|
$product =json_decode($Epi->requestEpiApi('/v1/product/'.$id.'?cl=' . Epirent_Mandant))->payload[0];
|
||||||
|
$productImage =json_decode($Epi->requestEpiApi('/v1/product/image/'.$id.'?cl=' . Epirent_Mandant))->payload[0]->image_data;
|
||||||
|
|
||||||
|
|
||||||
|
function s(?string $v): string { return trim((string)$v); }
|
||||||
|
function fnum(?float $v, int $dec = 2): string {
|
||||||
|
if ($v === null) return '';
|
||||||
|
$n = number_format((float)$v, $dec, ',', '.');
|
||||||
|
return rtrim(rtrim($n, '0'), ',');
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set Variables
|
||||||
|
$productName = $product->name;
|
||||||
|
$productNumber = $product->product_no;
|
||||||
|
|
||||||
|
$bruttoWeightSum = $product->tech_data->weight_gro;
|
||||||
|
|
||||||
|
$bundle = buildBundleForProduct($Epi, $product);
|
||||||
|
|
||||||
|
/** Test-Daten
|
||||||
|
*/
|
||||||
|
$dimsBHT =$product->tech_data->width_gro." x ".$product->tech_data->depth_gro." x ".$product->tech_data->height_gro;
|
||||||
|
$volume = ((float)$product->tech_data->height_gro * (float)$product->tech_data->width_gro * (float)$product->tech_data->depth_gro)* 0.000001;
|
||||||
|
$storageLoc = $product->product_data->storage_location_nearby;
|
||||||
|
|
||||||
|
/** Layout */
|
||||||
|
$PAGE_SIZE = 'A4';
|
||||||
|
$MARGIN_LEFT = 8;
|
||||||
|
$MARGIN_TOP = 8;
|
||||||
|
$MARGIN_RIGHT = 8;
|
||||||
|
$MARGIN_BOTTOM = 10;
|
||||||
|
|
||||||
|
$CELL_PAD = 1.6;
|
||||||
|
$LINE_GRAY = '#efefef';
|
||||||
|
|
||||||
|
$LEVEL_MIN = 1; $LEVEL_MAX = 5;
|
||||||
|
$INDENT_PX_PER_LEVEL = 10;
|
||||||
|
$BASE_FONT_PX = 10;
|
||||||
|
$FONT_STEP_PX = 1.5;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** TCPDF */
|
||||||
|
$pdf = new TCPDF('P', 'mm', $PAGE_SIZE, true, 'UTF-8', false);
|
||||||
|
|
||||||
|
// 1) Pfade sauber
|
||||||
|
$fontDir = realpath(__DIR__ . '/../src/assets/font') . '/';
|
||||||
|
$tcpdfFontsDir = defined('K_PATH_FONTS') ? K_PATH_FONTS : (dirname((new \ReflectionClass('TCPDF'))->getFileName()) . '/fonts/');
|
||||||
|
|
||||||
|
// 2) Rechte (einmalig sicherstellen)
|
||||||
|
// -> hast du schon gefixt
|
||||||
|
|
||||||
|
// 3) TTFs registrieren und Rückgabewerte merken
|
||||||
|
$fontReg = file_exists($fontDir.'Hurme3/HurmeGeometricSans3-Regular.ttf')
|
||||||
|
? TCPDF_FONTS::addTTFfont($fontDir.'Hurme3/HurmeGeometricSans3-Regular.ttf', 'TrueTypeUnicode', '', 96)
|
||||||
|
: false;
|
||||||
|
$fontBold = file_exists($fontDir.'Hurme1/HurmeGeometricSans1-Bold.ttf')
|
||||||
|
? TCPDF_FONTS::addTTFfont($fontDir.'Hurme1/HurmeGeometricSans1-Bold.ttf', 'TrueTypeUnicode', '', 96)
|
||||||
|
: false;
|
||||||
|
$fontItal = file_exists($fontDir.'Hurme3/HurmeGeometricSans3-Italic.ttf')
|
||||||
|
? TCPDF_FONTS::addTTFfont($fontDir.'Hurme3/HurmeGeometricSans3-Italic.ttf', 'TrueTypeUnicode', '', 96)
|
||||||
|
: false;
|
||||||
|
$fontBI = file_exists($fontDir.'Hurme1/HurmeGeometricSans1-BoldItalic.ttf')
|
||||||
|
? TCPDF_FONTS::addTTFfont($fontDir.'Hurme1/HurmeGeometricSans1-BoldItalic.ttf', 'TrueTypeUnicode', '', 96)
|
||||||
|
: false;
|
||||||
|
|
||||||
|
// 4) Fallback setzen
|
||||||
|
$baseFont = $fontReg ?: 'dejavusans';
|
||||||
|
|
||||||
|
// 5) Header/Footer und Defaults
|
||||||
|
$pdf->setHeaderFont([$baseFont, '', 10]);
|
||||||
|
$pdf->setFooterFont([$baseFont, '', 9]);
|
||||||
|
$pdf->SetDefaultMonospacedFont('courier');
|
||||||
|
|
||||||
|
// 6) *** AB JETZT KEIN dejavusans MEHR SETZEN! ***
|
||||||
|
$pdf->SetFont($baseFont, '', 10.5);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$pdf->SetCreator('VT-Media EpiWebview');
|
||||||
|
$pdf->SetAuthor('VT-Media');
|
||||||
|
$pdf->SetTitle('Kistenetikett '.$productName);
|
||||||
|
$pdf->SetSubject('Kistenetikett');
|
||||||
|
|
||||||
|
$pdf->setPrintHeader(false);
|
||||||
|
$pdf->setPrintFooter(false);
|
||||||
|
$pdf->SetMargins($MARGIN_LEFT, $MARGIN_TOP, $MARGIN_RIGHT);
|
||||||
|
$pdf->SetAutoPageBreak(true, $MARGIN_BOTTOM);
|
||||||
|
$pdf->setImageScale(1.0);
|
||||||
|
$pdf->setFontSubsetting(true);
|
||||||
|
$pdf->setCellPadding($CELL_PAD);
|
||||||
|
|
||||||
|
$pdf->AddPage();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// --- LOGO in fester Box mit Rahmen, zentriert & verzerrungsfrei ---
|
||||||
|
$logoPath = __DIR__ . Labelprint_Logopath;
|
||||||
|
|
||||||
|
$startX = $pdf->GetX();
|
||||||
|
$startY = $pdf->GetY();
|
||||||
|
|
||||||
|
// feste Rahmen-Größe (in mm)
|
||||||
|
$frameW = 38.0; // Gesamtbreite des Rahmens
|
||||||
|
$frameH = 20; // Gesamthöhe des Rahmens
|
||||||
|
$frameOffsetX = 1.4; // Abstand vom linken Margin (wie vorher genutzt)
|
||||||
|
$frameOffsetY = 1.5; // Abstand von oben (wie vorher genutzt)
|
||||||
|
|
||||||
|
// Rahmen-Position
|
||||||
|
$frameX = $startX + $frameOffsetX;
|
||||||
|
$frameY = $startY + $frameOffsetY;
|
||||||
|
|
||||||
|
// Rahmen zeichnen
|
||||||
|
$pdf->SetLineWidth(0.3);
|
||||||
|
$pdf->Rect($frameX, $frameY, $frameW, $frameH, 'D');
|
||||||
|
|
||||||
|
// Logo innerhalb des Rahmens mit Innenabstand
|
||||||
|
$innerPad = 1.2; // mm Luft im Rahmen
|
||||||
|
$maxW = $frameW - 2 * $innerPad;
|
||||||
|
$maxH = $frameH - 2 * $innerPad;
|
||||||
|
|
||||||
|
if (is_file($logoPath)) {
|
||||||
|
// Seitenverhältnis ermitteln
|
||||||
|
$imgWpx = $imgHpx = 0;
|
||||||
|
if (@list($imgWpx, $imgHpx) = @getimagesize($logoPath)) {
|
||||||
|
$ratio = ($imgHpx > 0) ? ($imgWpx / $imgHpx) : 1.0;
|
||||||
|
|
||||||
|
// proportional in den Rahmen einpassen
|
||||||
|
if ($maxW / $maxH > $ratio) {
|
||||||
|
$drawH = $maxH;
|
||||||
|
$drawW = $maxH * $ratio;
|
||||||
|
} else {
|
||||||
|
$drawW = $maxW;
|
||||||
|
$drawH = $maxW / $ratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
// zentrieren
|
||||||
|
$imgX = $frameX + ($frameW - $drawW) / 2;
|
||||||
|
$imgY = $frameY + ($frameH - $drawH) / 2;
|
||||||
|
|
||||||
|
// ausgeben
|
||||||
|
$pdf->Image($logoPath, $imgX, $imgY, $drawW, $drawH, '', '', '', false, 300);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$afterLogoX = $frameX + $frameW - 1.4; // gleicher Abstand wie zuvor, jetzt basierend auf Rahmenbreite
|
||||||
|
$afterLogoBottomY = $frameY + $frameH; // falls du unten bündig etwas brauchst
|
||||||
|
$pdf->SetXY($afterLogoX, $startY); // Cursor rechts neben dem Logo positionieren
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$addrHtml = '
|
||||||
|
<div style="line-height:1.25; font-size:6px; margin:0; padding:0;">'.Labelprint_Addresstext.'</div>';
|
||||||
|
// Feste Box rechts neben dem Logo (direkt bündig)
|
||||||
|
$addrBoxW = 30.0; // feste Breite (mm)
|
||||||
|
$addrBoxH = 20.0; // feste Höhe (mm)
|
||||||
|
$addrPad = 0.5; // Innenabstand Inhalt → Rahmen (mm)
|
||||||
|
|
||||||
|
// bündig rechts neben dem Logo-Rahmen starten
|
||||||
|
$addrX = $frameX + $frameW; // kein zusätzlicher Abstand
|
||||||
|
$addrY = $startY+1.5; // gleiche Oberkante wie Logo
|
||||||
|
|
||||||
|
// 1) festen Rahmen zeichnen
|
||||||
|
$pdf->SetLineWidth(0.3);
|
||||||
|
$pdf->Rect($addrX, $addrY, $addrBoxW, $addrBoxH, 'D');
|
||||||
|
|
||||||
|
// 2) HTML-Inhalt in die Box schreiben, mit Clipping (Überhang wird abgeschnitten)
|
||||||
|
$pdf->StartTransform();
|
||||||
|
$pdf->Rect($addrX, $addrY, $addrBoxW, $addrBoxH, 'CNZ'); // Clip auf Box setzen
|
||||||
|
|
||||||
|
$pdf->writeHTMLCell(
|
||||||
|
$addrBoxW - 2*$addrPad, // feste Breite des Inhalts
|
||||||
|
$addrBoxH - 2*$addrPad, // feste Höhe des Inhalts
|
||||||
|
$addrX + $addrPad, // x mit Innenabstand
|
||||||
|
$addrY + $addrPad, // y mit Innenabstand
|
||||||
|
$addrHtml, // dein HTML
|
||||||
|
0, // kein Border (Rahmen haben wir schon)
|
||||||
|
0, // ln
|
||||||
|
false, // fill
|
||||||
|
true, // reseth
|
||||||
|
'L', // align
|
||||||
|
true // autopadding
|
||||||
|
);
|
||||||
|
|
||||||
|
$pdf->StopTransform();
|
||||||
|
|
||||||
|
// Cursor steht bereits auf: $pdf->SetXY($addrX + $addrBoxW, $addrY);
|
||||||
|
|
||||||
|
// 1) HTML OHNE border (sonst Doppelrahmen)
|
||||||
|
$productionHtml = '
|
||||||
|
<div style="line-height:1.3; font-size:8px; margin:0; padding:0;">
|
||||||
|
<b>Produktion</b><br/><br><br><br>
|
||||||
|
</div>';
|
||||||
|
|
||||||
|
// 2) Feste Box rechts neben der Adress-Box
|
||||||
|
$prodX = $addrX + $addrBoxW; // bündig rechts neben Adresse
|
||||||
|
$prodY = $addrY; // gleiche Oberkante
|
||||||
|
// Breite: restliche Seitenbreite bis zum rechten Rand
|
||||||
|
$prodW = $pdf->getPageWidth() - $MARGIN_RIGHT - $prodX+2;
|
||||||
|
// Höhe: fix (anpassen nach Wunsch)
|
||||||
|
$prodH = 20.0; // mm
|
||||||
|
$prodPad = 0; // Innenabstand
|
||||||
|
|
||||||
|
// 3) EIN sichtbarer Rahmen zeichnen
|
||||||
|
$pdf->SetLineWidth(0.3);
|
||||||
|
$pdf->Rect($prodX, $prodY, $prodW, $prodH, 'D');
|
||||||
|
|
||||||
|
// 4) Inhalt in die Box schreiben und clippen (Überhang abgeschnitten)
|
||||||
|
$pdf->StartTransform();
|
||||||
|
$pdf->Rect($prodX, $prodY, $prodW, $prodH, 'CNZ'); // Clip auf Box setzen
|
||||||
|
|
||||||
|
$pdf->writeHTMLCell(
|
||||||
|
$prodW - 2*$prodPad, // feste Breite des Inhalts
|
||||||
|
$prodH - 2*$prodPad, // feste Höhe des Inhalts
|
||||||
|
$prodX + $prodPad, // x mit Innenabstand
|
||||||
|
$prodY + $prodPad, // y mit Innenabstand
|
||||||
|
$productionHtml, // Inhalt (ohne border!)
|
||||||
|
0, // kein Border (Rahmen haben wir schon)
|
||||||
|
0, // ln
|
||||||
|
false, // fill
|
||||||
|
true, // reseth
|
||||||
|
'L', // align
|
||||||
|
true // autopadding
|
||||||
|
);
|
||||||
|
|
||||||
|
$pdf->StopTransform();
|
||||||
|
|
||||||
|
// 5) (Optional) Cursor direkt rechts neben der Box positionieren
|
||||||
|
$pdf->SetXY($prodX + $prodW, $prodY);
|
||||||
|
|
||||||
|
// === Name-Box: feste Größe, Text bricht, kein Doppelrahmen ===
|
||||||
|
|
||||||
|
// Breite: gesamte Restbreite bis zum rechten Rand (unter Adresse + Produktion)
|
||||||
|
$nameX = $frameX; // beginnt rechts neben dem Logo/Adressbereich
|
||||||
|
$nameW = $pdf->getPageWidth() - $MARGIN_RIGHT - $nameX-65.2;
|
||||||
|
|
||||||
|
// Höhe & Padding der Box (anpassen nach Wunsch)
|
||||||
|
$nameBoxH = 18.2; // mm - feste Höhe
|
||||||
|
$namePad = 1.5; // mm - Innenabstand
|
||||||
|
|
||||||
|
// Y: direkt unter die höhere der beiden Boxen (Adresse vs. Produktion)
|
||||||
|
$yAfterRow = max($addrY + $addrBoxH, $prodY + $prodH) + 0.0; // +2 mm Abstand
|
||||||
|
$nameY = $yAfterRow;
|
||||||
|
|
||||||
|
// Inhalt OHNE border (sonst Doppelrahmen)
|
||||||
|
$nameHtml = '
|
||||||
|
<div style="font-size:15px; font-weight:700; line-height:1.3; margin:0; padding:0;">' . htmlspecialchars($productName) . '
|
||||||
|
</div>';
|
||||||
|
|
||||||
|
// 1) Sichtbaren Rahmen zeichnen (feste Größe)
|
||||||
|
$pdf->SetLineWidth(0.3);
|
||||||
|
$pdf->Rect($nameX, $nameY, $nameW, $nameBoxH, 'D');
|
||||||
|
|
||||||
|
// 2) Inhalt in die Box schreiben und clippen
|
||||||
|
$pdf->StartTransform();
|
||||||
|
$pdf->Rect($nameX, $nameY, $nameW, $nameBoxH, 'CNZ'); // Clip auf Box setzen
|
||||||
|
|
||||||
|
$pdf->writeHTMLCell(
|
||||||
|
$nameW - 2*$namePad, // feste Breite für den Text
|
||||||
|
$nameBoxH - 2*$namePad, // feste Höhe für den Text
|
||||||
|
$nameX + $namePad, // x mit Innenabstand
|
||||||
|
$nameY + $namePad, // y mit Innenabstand
|
||||||
|
$nameHtml,
|
||||||
|
0, // kein HTML-Border
|
||||||
|
0, // ln
|
||||||
|
false, // fill
|
||||||
|
true, // reseth
|
||||||
|
'L', // align
|
||||||
|
true // autopadding
|
||||||
|
);
|
||||||
|
|
||||||
|
$pdf->StopTransform();
|
||||||
|
|
||||||
|
// Optional: Cursor unter die Box setzen (falls du danach im Fluss weitermachen willst)
|
||||||
|
$pdf->SetXY($nameX, $nameY + $nameBoxH);
|
||||||
|
|
||||||
|
// 1) Box-Geometrie (immer gleich groß)
|
||||||
|
$pnBoxW = 67.0; // mm – Gesamtbreite der Box
|
||||||
|
$pnBoxH = 18.2; // mm – Gesamthöhe der Box
|
||||||
|
$pnBoxPad = 2.0; // mm – Innenabstand innerhalb der Box
|
||||||
|
|
||||||
|
// Position der Box (aktuell am rechten Rand oben; passe frei an)
|
||||||
|
$pnBoxX = $pdf->getPageWidth() - $MARGIN_RIGHT - $pnBoxW+1.8; // bündig am rechten Rand
|
||||||
|
$pnBoxY = $startY+21.5; // gleiche Oberkante wie Kopf
|
||||||
|
|
||||||
|
// 2) Sichtbaren Rahmen zeichnen (einmalig)
|
||||||
|
$pdf->SetLineWidth(0.3);
|
||||||
|
$pdf->Rect($pnBoxX, $pnBoxY, $pnBoxW, $pnBoxH, 'D');
|
||||||
|
|
||||||
|
// 3) Clipping aktivieren, damit Inhalt in der Box bleibt
|
||||||
|
$pdf->StartTransform();
|
||||||
|
$pdf->Rect($pnBoxX, $pnBoxY, $pnBoxW, $pnBoxH, 'CNZ'); // Clip auf die Box
|
||||||
|
|
||||||
|
// 4) Produktnummer: frei verschiebbar innerhalb der Box
|
||||||
|
$pnCombined = trim($productNumber . $deviceNumber);
|
||||||
|
$pnText = htmlspecialchars($pnCombined !== '' ? $pnCombined : 'N/A');
|
||||||
|
|
||||||
|
// Offsets innerhalb der Box – hier stellst du die Position ein
|
||||||
|
$pnTextOffsetX = 2.0; // mm von linker Innenkante
|
||||||
|
$pnTextOffsetY = 1; // mm von oberer Innenkante
|
||||||
|
$pnTextW = $pnBoxW - 2*$pnBoxPad; // nutzbare Breite
|
||||||
|
$pnTextH = 8.0; // feste Höhe für den PN-Textbereich (mm)
|
||||||
|
|
||||||
|
$pnHtml = '
|
||||||
|
<div style="font-size:20px; line-height:1.25; margin:0; padding:0;">
|
||||||
|
'.$pnText.'
|
||||||
|
</div>';
|
||||||
|
|
||||||
|
// PN-Text rendern (ohne HTML-Border!)
|
||||||
|
$pdf->writeHTMLCell(
|
||||||
|
$pnTextW, // Breite Textbereich
|
||||||
|
$pnTextH, // Höhe Textbereich
|
||||||
|
$pnBoxX + $pnBoxPad + $pnTextOffsetX, // X in der Box
|
||||||
|
$pnBoxY + $pnBoxPad + $pnTextOffsetY, // Y in der Box
|
||||||
|
$pnHtml,
|
||||||
|
0, 0, false, true, 'L', true
|
||||||
|
);
|
||||||
|
|
||||||
|
// 5) QR-Code: frei verschiebbar innerhalb der Box, verzerrungsfrei per size
|
||||||
|
$qrData = trim((string)($productNumber . $deviceNumber));
|
||||||
|
if ($qrData === '') {
|
||||||
|
$qrData = 'N/A';
|
||||||
|
}
|
||||||
|
|
||||||
|
$qrSize = 16.0; // mm – Kantenlänge des QR
|
||||||
|
$qrOffsetX = $pnBoxW - $pnBoxPad - $qrSize - 2.0; // mm von linker Innenkante
|
||||||
|
$qrOffsetY = $pnBoxH - $pnBoxPad - $qrSize +0.6; // mm von oberer Innenkante
|
||||||
|
|
||||||
|
$qrX = $pnBoxX + $qrOffsetX;
|
||||||
|
$qrY = $pnBoxY + $qrOffsetY;
|
||||||
|
|
||||||
|
$qrStyle = [
|
||||||
|
'border' => 0,
|
||||||
|
'vpadding' => 0,
|
||||||
|
'hpadding' => 0,
|
||||||
|
'fgcolor' => [0,0,0],
|
||||||
|
'bgcolor' => false,
|
||||||
|
];
|
||||||
|
|
||||||
|
// QR rendern (Warnings/Deprecated für diesen Block stumm schalten)
|
||||||
|
$_old_reporting = error_reporting();
|
||||||
|
error_reporting($_old_reporting & ~(E_WARNING | E_DEPRECATED | E_NOTICE));
|
||||||
|
$pdf->write2DBarcode($qrData, 'QRCODE,H', $qrX, $qrY, $qrSize, $qrSize, $qrStyle, 'N');
|
||||||
|
error_reporting($_old_reporting);
|
||||||
|
|
||||||
|
// 6) Clipping beenden
|
||||||
|
$pdf->StopTransform();
|
||||||
|
|
||||||
|
// 7) Optional: Cursor unter die PN-Box setzen, falls du im Fluss weiter willst
|
||||||
|
$pdf->SetXY($pnBoxX, $pnBoxY + $pnBoxH);
|
||||||
|
|
||||||
|
/** Bundle */
|
||||||
|
|
||||||
|
$bundleHeader = '<div style=" background-color: black; color: white; font-size:10px; font-weight:700;line-height:1.4; margin:4px 0 3px 0;"> Bundleinhalt</div>';
|
||||||
|
$pdf->writeHTMLCell(70, 50, 7.65, 46, $bundleHeader, 0, 0, 0, true, 'L', true);
|
||||||
|
$bundleHeaderFillable = '<div style="border: 1px solid black; line-heigt:0.6"></div>';
|
||||||
|
//$pdf->writeHTMLCell(130.8, 39.8, 74.5, 46, $bundleHeaderFillable, 0, 0, 0, false, 'L', true);
|
||||||
|
drawFixedBox($pdf, 76.0, 47.7, 127.8, 4.65);
|
||||||
|
|
||||||
|
|
||||||
|
$bundleRows = '';
|
||||||
|
|
||||||
|
$BASE_FONT_PX = 10.0; // Level 1
|
||||||
|
$FONT_STEP_PX = 1.5; // je Ebene kleiner
|
||||||
|
$MIN_FONT_PX = 6.0;
|
||||||
|
$LINE_HEIGHT_BASE = 1.15; // Basis Zeilenhöhe
|
||||||
|
$LINE_HEIGHT_STEP = 0.05; // je Ebene etwas kompakter
|
||||||
|
$ROW_PAD_V_MM = 0.5; // vertikales Padding je Zeile
|
||||||
|
$ROW_PAD_H_MM = 0.8; // horizontales Padding
|
||||||
|
$WEIGHT_PAD_RIGHT_MM = 1.6; // mehr Abstand zum rechten Rand
|
||||||
|
$INDENT_MM_PER_LVL = 2.8; // Einrückung je Ebene in mm (stabil!)
|
||||||
|
|
||||||
|
foreach ($bundle as $item) {
|
||||||
|
$qty = (int)($item['qty'] ?? 1);
|
||||||
|
$text = htmlspecialchars($item['text'] ?? '');
|
||||||
|
$lvl = max($LEVEL_MIN, min($LEVEL_MAX, (int)($item['level'] ?? 1)));
|
||||||
|
$wkg = isset($item['weight_kg']) ? (float)$item['weight_kg'] : null;
|
||||||
|
|
||||||
|
$textFontPx = max($MIN_FONT_PX, $BASE_FONT_PX - ($lvl - 1) * $FONT_STEP_PX);
|
||||||
|
$weightFontPx = max($MIN_FONT_PX, $BASE_FONT_PX - ($lvl - 1) * $FONT_STEP_PX);
|
||||||
|
$lineHeight = max(1.0, $LINE_HEIGHT_BASE - ($lvl - 1) * $LINE_HEIGHT_STEP);
|
||||||
|
|
||||||
|
// Einrückung robust über mm – aber nur Tabelle nutzen, wenn > 0 mm
|
||||||
|
$indentMm = max(0, ($lvl - 1) * $INDENT_MM_PER_LVL);
|
||||||
|
|
||||||
|
// Name-Spalte: ohne Spacer-Tabelle bei Level 1 (indent=0), sonst mit
|
||||||
|
if ($indentMm > 0) {
|
||||||
|
$nameCellHtml = '
|
||||||
|
<table cellspacing="0" cellpadding="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<td style="width:'.$indentMm.'mm; padding:0; margin:0;"></td>
|
||||||
|
<td style="font-size:'.$textFontPx.'px; line-height:'.$lineHeight.'; padding:0; margin:0;">'.$text.'</td>
|
||||||
|
</tr>
|
||||||
|
</table>';
|
||||||
|
} else {
|
||||||
|
// Level 1: direkt rendern
|
||||||
|
$nameCellHtml = '<span style="font-size:'.$textFontPx.'px; line-height:'.$lineHeight.';">'.$text.'</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$bundleRows .= '
|
||||||
|
<tr>
|
||||||
|
<!-- Anzahl -->
|
||||||
|
<td style="
|
||||||
|
width:12%;
|
||||||
|
text-align:right;
|
||||||
|
vertical-align:middle;
|
||||||
|
font-size:'.$textFontPx.'px;
|
||||||
|
line-height:'.$lineHeight.';
|
||||||
|
padding:'.$ROW_PAD_V_MM.'mm '.$ROW_PAD_H_MM.'mm '.$ROW_PAD_V_MM.'mm '.$ROW_PAD_H_MM.'mm;">
|
||||||
|
'.$qty.'
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Name mit Einrückung -->
|
||||||
|
<td style="
|
||||||
|
width:68%;
|
||||||
|
vertical-align:middle;
|
||||||
|
padding:'.$ROW_PAD_V_MM.'mm '.$ROW_PAD_H_MM.'mm;">
|
||||||
|
'.$nameCellHtml.'
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Gewicht rechts mit extra Innenabstand -->
|
||||||
|
<td style="
|
||||||
|
width:20%;
|
||||||
|
text-align:right;
|
||||||
|
vertical-align:middle;
|
||||||
|
font-size:'.$weightFontPx.'px;
|
||||||
|
line-height:'.$lineHeight.';
|
||||||
|
padding:'.$ROW_PAD_V_MM.'mm '.$WEIGHT_PAD_RIGHT_MM.'mm '.$ROW_PAD_V_MM.'mm '.$ROW_PAD_H_MM.'mm;">
|
||||||
|
'.($wkg !== null ? fnum($wkg).' kg' : '').'
|
||||||
|
</td>
|
||||||
|
</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$bundleHtml = '
|
||||||
|
<table cellspacing="0" cellpadding="0" style="border:1px solid #000; border-collapse:collapse;" width="100%">
|
||||||
|
<tbody>'.$bundleRows.'</tbody>
|
||||||
|
</table>';
|
||||||
|
|
||||||
|
$pdf->writeHTMLCell(
|
||||||
|
$pdf->getPageWidth() - 12.4,
|
||||||
|
0,
|
||||||
|
7.8,
|
||||||
|
50.8,
|
||||||
|
$bundleHtml,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
'L',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** ---------- Meta-Block dynamisch unterhalb der Bundle-Tabelle ---------- */
|
||||||
|
|
||||||
|
// Höhe der zuletzt gerenderten Bundle-Tabelle holen
|
||||||
|
$bundleH = $pdf->getLastH();
|
||||||
|
|
||||||
|
// Y-Position direkt nach der Bundle-Tabelle (mit 3 mm Abstand)
|
||||||
|
$metaY = 47.6 + $bundleH; // 50 = dein bisheriges Y der Bundle-Tabelle
|
||||||
|
$metaX = $MARGIN_LEFT;
|
||||||
|
$metaW = $pdf->getPageWidth() - $MARGIN_LEFT - $MARGIN_RIGHT;
|
||||||
|
|
||||||
|
// Falls Meta-Block zu nah am Seitenende wäre → neue Seite
|
||||||
|
$usableBottom = $pdf->getPageHeight() - $MARGIN_BOTTOM;
|
||||||
|
if ($metaY > $usableBottom - 40) { // 40 mm Puffer für Meta
|
||||||
|
$pdf->AddPage();
|
||||||
|
$metaY = $MARGIN_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Inhalt wie gehabt ---
|
||||||
|
$leftMeta = '
|
||||||
|
<table cellspacing="0" cellpadding="'.$CELL_PAD.'" width="100%">
|
||||||
|
<tbody>
|
||||||
|
|
||||||
|
<!-- Maße -->
|
||||||
|
<tr>
|
||||||
|
<!-- Zusammengefasste linke Zelle: hat Rahmen, innen KEIN Rahmen -->
|
||||||
|
<td width="58%" border="1" style="padding-left:20px;">
|
||||||
|
<table cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<td width="64%">Maße <small>L x B x H</small></td>
|
||||||
|
<td width="36%">in cm</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<!-- rechte Zelle mit Wert -->
|
||||||
|
<td width="42%" border="1"><b> '.htmlspecialchars($dimsBHT).'</b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Gewicht -->
|
||||||
|
<tr>
|
||||||
|
<td width="58%" border="1" style="padding-left:20px;">
|
||||||
|
<table cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<td width="64%">Gewicht</td>
|
||||||
|
<td width="36%">in Kg</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="42%" border="1"><b> '.fnum($bruttoWeightSum).' Kg</b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Volumen -->
|
||||||
|
<tr>
|
||||||
|
<td width="58%" border="1" style="padding-left:20px;">
|
||||||
|
<table cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<td width="64%">Volumen</td>
|
||||||
|
<td width="36%">in m³</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="42%" border="1"><b> '.fnum($volume, 2).' m³</b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Lagerplatz mit innerer Tabelle (optisch perfekt ausgerichtet) -->
|
||||||
|
<tr>
|
||||||
|
<td width="30%" border="1" style="padding-left:20px;">
|
||||||
|
<table cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<td width="100%">Lagerplatz</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="70%" border="1"><b> '.htmlspecialchars($storageLoc).'</b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>';
|
||||||
|
|
||||||
|
// ---- Koordinaten der Meta-Zeile bestimmen (nimm deine Werte) ----
|
||||||
|
// Falls du sie schon berechnet hast, nutze deine $metaX, $metaY, $metaW.
|
||||||
|
// Beispiel, wie du sie meist setzt:
|
||||||
|
$metaX = $MARGIN_LEFT;
|
||||||
|
$metaW = $pdf->getPageWidth() - $MARGIN_LEFT - $MARGIN_RIGHT;
|
||||||
|
// $metaY hast du zuvor als Ziel-Y für den Meta-Block berechnet:
|
||||||
|
/// $metaY = ... (z.B. 50 + $bundleH + 3);
|
||||||
|
|
||||||
|
// ---- Spaltenbreiten wie in deinem metaWrap: 62% | 2% | 36% ----
|
||||||
|
$leftW = $metaW * 0.62;
|
||||||
|
$gapW = $metaW * 0.02;
|
||||||
|
$rightW = $metaW * 0.36;
|
||||||
|
|
||||||
|
// Obere linke Ecke der rechten Spalte:
|
||||||
|
$rightX = $metaX + $leftW + $gapW;
|
||||||
|
$rightY = $metaY;
|
||||||
|
|
||||||
|
// ---- Fester Rahmen in der rechten Spalte ----
|
||||||
|
$frameOuterPad = 1.0; // mm: Abstand vom Spaltenrand
|
||||||
|
$frameW = $rightW - 2*$frameOuterPad+8; // Rahmenbreite
|
||||||
|
$frameH = 24.38; // mm: feste Rahmenhöhe, nach Wunsch
|
||||||
|
$frameX = $rightX + $frameOuterPad-5.2;
|
||||||
|
$frameY = $rightY + $frameOuterPad+0.5;
|
||||||
|
|
||||||
|
$pdf->SetLineWidth(0.3);
|
||||||
|
$pdf->Rect($frameX, $frameY, $frameW, $frameH, 'D'); // der feste Rahmen
|
||||||
|
|
||||||
|
// ---- Base64-Bild zentriert & verzerrungsfrei in den Rahmen ----
|
||||||
|
$tmpImg = tempnam(sys_get_temp_dir(), 'epi_') . '.png';
|
||||||
|
file_put_contents($tmpImg, base64_decode($productImage));
|
||||||
|
|
||||||
|
list($imgWpx, $imgHpx) = getimagesize($tmpImg);
|
||||||
|
$imgRatio = ($imgHpx > 0) ? ($imgWpx / $imgHpx) : 1.0;
|
||||||
|
|
||||||
|
$innerPad = 2.0; // mm: Innenabstand im Rahmen
|
||||||
|
$maxW = $frameW - 2*$innerPad;
|
||||||
|
$maxH = $frameH - 2*$innerPad;
|
||||||
|
|
||||||
|
// proportional einpassen
|
||||||
|
if ($maxW / $maxH > $imgRatio) {
|
||||||
|
$drawH = $maxH;
|
||||||
|
$drawW = $maxH * $imgRatio;
|
||||||
|
} else {
|
||||||
|
$drawW = $maxW;
|
||||||
|
$drawH = $maxW / $imgRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
// zentrieren
|
||||||
|
$imgX = $frameX + ($frameW - $drawW) / 2;
|
||||||
|
$imgY = $frameY + ($frameH - $drawH) / 2;
|
||||||
|
|
||||||
|
$pdf->Image($tmpImg, $imgX, $imgY, $drawW, $drawH, '', '', '', false, 300);
|
||||||
|
@unlink($tmpImg);
|
||||||
|
|
||||||
|
$metaWrap = '
|
||||||
|
<table cellspacing="0" cellpadding="0" border="0" width="100%" style="margin-top:2px;">
|
||||||
|
<tr>
|
||||||
|
<td width="62%">'.$leftMeta.'</td>
|
||||||
|
<td width="2%"></td>
|
||||||
|
<td width="36%">'.$rightMeta.'</td>
|
||||||
|
</tr>
|
||||||
|
</table>';
|
||||||
|
|
||||||
|
// Meta-Block exakt an berechneter Position ausgeben
|
||||||
|
$pdf->writeHTMLCell($metaW, 0, $metaX, $metaY, $metaWrap, 0, 0, 0, true, 'L', true);
|
||||||
|
/** Output */
|
||||||
|
// Falls trotz allem vorher etwas ausgegeben wurde (Warnings), Buffer leeren:
|
||||||
|
if (ob_get_length()) { ob_end_clean(); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Äußerer Rahmen, Größenberechnung
|
||||||
|
|
||||||
|
// 1) Höhe der META-Zelle (zuletzt geschrieben) holen:
|
||||||
|
$metaH = $pdf->getLastH();
|
||||||
|
|
||||||
|
// 2) Y der Bundle-Tabelle kennst du (50.8 in deinem Code) + deren Höhe:
|
||||||
|
$bundleY = 50.8; // dein fixer Y für die Bundle-Tabelle
|
||||||
|
// $bundleH hast du bereits oben: $bundleH = $pdf->getLastH();
|
||||||
|
|
||||||
|
// 3) Bottom-Kanten aller Boxen berechnen:
|
||||||
|
$bottoms = [
|
||||||
|
$frameY + $frameH, // Logo-Box
|
||||||
|
$addrY + $addrBoxH, // Adress-Box
|
||||||
|
$prodY + $prodH, // Produktion-Box
|
||||||
|
$nameY + $nameBoxH, // Name-Box
|
||||||
|
$pnBoxY + $pnBoxH, // PN/QR-Box
|
||||||
|
$bundleY + $bundleH, // Bundle-Tabelle
|
||||||
|
$metaY + $metaH, // Meta-Block (linke Tabelle + rechter Bildrahmen)
|
||||||
|
];
|
||||||
|
|
||||||
|
// 4) Start-Y des Contentbereichs: oben an deinem Kopf beginnen
|
||||||
|
$outerY = min($frameY, $addrY, $prodY, $nameY, $pnBoxY, 46.0 /*Bundle-Header-Y*/, $metaY);
|
||||||
|
|
||||||
|
// 5) Untere Kante ist die größte Bottom-Kante:
|
||||||
|
$outerBottom = max($bottoms);
|
||||||
|
|
||||||
|
// 6) Außenrahmen-Geometrie:
|
||||||
|
$outerX = $MARGIN_LEFT+1.2;
|
||||||
|
$outerW = $pdf->getPageWidth() - $MARGIN_LEFT - $MARGIN_RIGHT+1;
|
||||||
|
$outerH = max(2, $outerBottom - $outerY)-1.2; // Mindeshöhe absichern
|
||||||
|
|
||||||
|
// 7) Dicke Linie zeichnen (z.B. 1.2 mm)
|
||||||
|
drawFixedBox($pdf, $outerX, $outerY, $outerW, $outerH, 1, '', 0, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$filename = 'Kistenetikett_'.preg_replace('/\s+/', '_', trim($productName)).'_'.$productNumber.$deviceNumber.'_'.date('Ymd_His').'.pdf';
|
||||||
|
$pdf->Output($filename, 'I');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Zeichnet eine flexible, leere oder beschriftete Box mit TCPDF.
|
||||||
|
*
|
||||||
|
* @param TCPDF $pdf Referenz auf dein TCPDF-Objekt
|
||||||
|
* @param float $x Linke obere Ecke (mm)
|
||||||
|
* @param float $y Obere Position (mm)
|
||||||
|
* @param float $w Breite (mm)
|
||||||
|
* @param float $h Höhe (mm)
|
||||||
|
* @param float $border Linienstärke in mm (z. B. 0.3)
|
||||||
|
* @param string $text (Optional) Inhalt oder Beschriftung
|
||||||
|
* @param float $pad Innenabstand in mm
|
||||||
|
* @param bool $fill true = grau hinterlegt, false = leer
|
||||||
|
* @param string|null $style (Optional) Linienstil – 'solid', 'dashed', 'dotted'
|
||||||
|
*/
|
||||||
|
function drawFixedBox(
|
||||||
|
TCPDF $pdf,
|
||||||
|
float $x,
|
||||||
|
float $y,
|
||||||
|
float $w,
|
||||||
|
float $h,
|
||||||
|
float $border = 0.3,
|
||||||
|
string $text = '',
|
||||||
|
float $pad = 1.5,
|
||||||
|
bool $fill = false,
|
||||||
|
?string $style = 'solid'
|
||||||
|
): void {
|
||||||
|
// Farbe für Füllung (hellgrau, wenn aktiviert)
|
||||||
|
$fillColor = [240, 240, 240];
|
||||||
|
|
||||||
|
// Linienstil (falls angegeben)
|
||||||
|
switch ($style) {
|
||||||
|
case 'dashed':
|
||||||
|
$pdf->SetLineStyle(['width' => $border, 'dash' => '3,2']);
|
||||||
|
break;
|
||||||
|
case 'dotted':
|
||||||
|
$pdf->SetLineStyle(['width' => $border, 'dash' => '1,2']);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$pdf->SetLineWidth($border);
|
||||||
|
$pdf->SetLineStyle(['width' => $border]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1) Rahmen (und ggf. Füllung)
|
||||||
|
if ($fill) {
|
||||||
|
$pdf->SetFillColorArray($fillColor);
|
||||||
|
$pdf->Rect($x, $y, $w, $h, 'DF'); // Draw + Fill
|
||||||
|
} else {
|
||||||
|
$pdf->Rect($x, $y, $w, $h, 'D'); // nur Rahmen
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2) Optionaler Textinhalt – sauber eingepasst
|
||||||
|
if (trim($text) !== '') {
|
||||||
|
$pdf->StartTransform();
|
||||||
|
$pdf->Rect($x, $y, $w, $h, 'CNZ'); // Clip auf Box setzen
|
||||||
|
|
||||||
|
$pdf->writeHTMLCell(
|
||||||
|
$w - 2*$pad, $h - 2*$pad,
|
||||||
|
$x + $pad, $y + $pad,
|
||||||
|
'<div style="font-size:9px; line-height:1.2;">'.htmlspecialchars($text).'</div>',
|
||||||
|
0, 0, false, true, 'L', true
|
||||||
|
);
|
||||||
|
|
||||||
|
$pdf->StopTransform();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Linienstil zurücksetzen
|
||||||
|
$pdf->SetLineStyle(['width' => 0.3, 'dash' => 0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Produkt-Details mit Cache holen (vermeidet doppelte API-Calls).
|
||||||
|
*
|
||||||
|
* @param Epirent $Epi
|
||||||
|
* @param int|string $productPk
|
||||||
|
* @param array $cache Referenz-Array für Produkt-Cache
|
||||||
|
* @return object|null
|
||||||
|
*/
|
||||||
|
function fetchProductDetailCached($Epi, $productPk, array &$cache) {
|
||||||
|
$key = (string)$productPk;
|
||||||
|
if (isset($cache[$key])) {
|
||||||
|
return $cache[$key];
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$res = $Epi->requestEpiApi('/v1/product/' . $key . '?cl=' . Epirent_Mandant);
|
||||||
|
$payload = json_decode($res, false);
|
||||||
|
$prod = $payload->payload[0] ?? null;
|
||||||
|
if ($prod) {
|
||||||
|
$cache[$key] = $prod;
|
||||||
|
return $prod;
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
// optional: loggen
|
||||||
|
}
|
||||||
|
$cache[$key] = null;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Rekursive Hilfsfunktion: fügt Materialien (und deren Submaterialien) zu $bundle hinzu
|
||||||
|
* und summiert alle Bruttogewichte in $bruttoWeightSum.
|
||||||
|
*
|
||||||
|
* @param Epirent $Epi
|
||||||
|
* @param array $materials Materialliste (vom Produkt)
|
||||||
|
* @param int $level aktuelle Ebene (1..MAX_BUNDLE_LEVEL)
|
||||||
|
* @param array &$bundle Ergebnisliste (wird befüllt)
|
||||||
|
* @param array &$cache Produkt-Cache
|
||||||
|
* @param array &$seenStack Schutz gegen Zyklen (Stack von Produkt-Keys)
|
||||||
|
* @param float $qtyMultiplier Multiplikator für Mengen aus übergeordneten Ebenen
|
||||||
|
* @param float &$bruttoWeightSum Summiert alle weight_gro-Werte × Menge
|
||||||
|
*/
|
||||||
|
function addMaterialsRecursive($Epi, array $materials, int $level, array &$bundle, array &$cache, array &$seenStack, float $qtyMultiplier = 1.0): void
|
||||||
|
{
|
||||||
|
global $bruttoWeightSum;
|
||||||
|
|
||||||
|
$MAX_BUNDLE_LEVEL = 5;
|
||||||
|
if ($level > $MAX_BUNDLE_LEVEL || empty($materials)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($materials as $mat) {
|
||||||
|
$isFree = !empty($mat->is_free_material);
|
||||||
|
$amount = isset($mat->amount) ? (float)$mat->amount : 1.0;
|
||||||
|
$effQty = $amount * $qtyMultiplier;
|
||||||
|
|
||||||
|
// 🟢 1. FREIES MATERIAL → nur Name + Menge, kein weiterer Drilldown
|
||||||
|
if ($isFree) {
|
||||||
|
$name = isset($mat->name) ? (string)$mat->name : '(Unbenanntes freies Material)';
|
||||||
|
$bundle[] = [
|
||||||
|
'qty' => $effQty,
|
||||||
|
'text' => $name,
|
||||||
|
'level' => $level,
|
||||||
|
'weight_kg' => null,
|
||||||
|
];
|
||||||
|
continue; // ⬅️ ganz wichtig: hier abbrechen
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🟡 2. "Normales" Produkt-Material
|
||||||
|
$childPk = $mat->mat_product_pk ?? null;
|
||||||
|
if (!$childPk) {
|
||||||
|
$bundle[] = [
|
||||||
|
'qty' => $effQty,
|
||||||
|
'text' => '(Unbekanntes Material)',
|
||||||
|
'level' => $level,
|
||||||
|
'weight_kg' => null,
|
||||||
|
];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zyklen-Schutz
|
||||||
|
$childKey = (string)$childPk;
|
||||||
|
if (in_array($childKey, $seenStack, true)) {
|
||||||
|
$bundle[] = [
|
||||||
|
'qty' => $effQty,
|
||||||
|
'text' => '[Zyklus erkannt bei Produkt ' . $childKey . ']',
|
||||||
|
'level' => $level,
|
||||||
|
'weight_kg' => null,
|
||||||
|
];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Produktdetail abrufen (Cache-basiert)
|
||||||
|
$child = fetchProductDetailCached($Epi, $childPk, $cache);
|
||||||
|
|
||||||
|
// Basisinfos
|
||||||
|
$childName = $child->name ?? ('Produkt ' . $childKey);
|
||||||
|
$childWeightNet = $child->tech_data->weight_net ?? null;
|
||||||
|
$childWeightGross = $child->tech_data->weight_gro ?? null;
|
||||||
|
$childNumber = $child->product_no ?? null;
|
||||||
|
|
||||||
|
// 🧮 Bruttogewicht zur globalen Summe addieren
|
||||||
|
if (!empty($childWeightGross)) {
|
||||||
|
$bruttoWeightSum += $effQty * (float)$childWeightGross;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 📦 Anzeige: Artikelnummer in Klammern voranstellen
|
||||||
|
$displayName = $childNumber ? '(' . $childNumber . ') ' . $childName : $childName;
|
||||||
|
|
||||||
|
$bundle[] = [
|
||||||
|
'qty' => $effQty,
|
||||||
|
'text' => (string)$displayName,
|
||||||
|
'level' => $level,
|
||||||
|
'weight_kg' => $childWeightNet ? (float)$childWeightNet : null,
|
||||||
|
];
|
||||||
|
|
||||||
|
// 🔁 Rekursion für Sub-Materialien
|
||||||
|
if ($child && !empty($child->materials) && $level < $MAX_BUNDLE_LEVEL) {
|
||||||
|
$seenStack[] = $childKey;
|
||||||
|
addMaterialsRecursive($Epi, (array)$child->materials, $level + 1, $bundle, $cache, $seenStack, $effQty);
|
||||||
|
array_pop($seenStack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Einstieg: Baut das Bundle eines Produkts bis Tiefe MAX_BUNDLE_LEVEL
|
||||||
|
* und liefert zusätzlich die Bruttogewichtsumme zurück.
|
||||||
|
*
|
||||||
|
* @param Epirent $Epi
|
||||||
|
* @param object $product
|
||||||
|
* @param float &$bruttoWeightSum Rückgabe der aufsummierten weight_gro
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function buildBundleForProduct($Epi, $product, float &$bruttoWeightSum = 0.0): array
|
||||||
|
{
|
||||||
|
$bundle = [];
|
||||||
|
$cache = [];
|
||||||
|
$seen = [];
|
||||||
|
$materials = isset($product->materials) ? (array)$product->materials : [];
|
||||||
|
|
||||||
|
addMaterialsRecursive($Epi, $materials, 1, $bundle, $cache, $seen, 1.0, $bruttoWeightSum);
|
||||||
|
return $bundle;
|
||||||
|
}
|
||||||
@@ -8,9 +8,29 @@
|
|||||||
Dashboard
|
Dashboard
|
||||||
</a>
|
</a>
|
||||||
<a class="nav-link" href=orders.php>
|
<a class="nav-link" href=orders.php>
|
||||||
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
|
<div class="sb-nav-link-icon"><i class="fas fa-money-bill-wave"></i></div>
|
||||||
Aufträge
|
Aufträge
|
||||||
</a>
|
</a>
|
||||||
|
<a class="nav-link" href=insurance.php>
|
||||||
|
<div class="sb-nav-link-icon"><i class="fas fa-car-burst"></i></div>
|
||||||
|
Versicherung
|
||||||
|
</a>
|
||||||
|
<a class="nav-link" href=labelprint.php>
|
||||||
|
<div class="sb-nav-link-icon"><i class="fas fa-tags"></i></div>
|
||||||
|
Labelprint
|
||||||
|
</a>
|
||||||
|
<a class="nav-link" href=imagecheck.php>
|
||||||
|
<div class="sb-nav-link-icon"><i class="fas fa-image"></i></div>
|
||||||
|
Imagecheck
|
||||||
|
</a>
|
||||||
|
<a class="nav-link" href=groupofgoodscheck.php>
|
||||||
|
<div class="sb-nav-link-icon"><i class="fas fa-layer-group"></i></div>
|
||||||
|
Warengruppencheck
|
||||||
|
</a>
|
||||||
|
<a class="nav-link" href=ROI.php>
|
||||||
|
<div class="sb-nav-link-icon"><i class="fas fa-comment-dollar"></i></div>
|
||||||
|
Return-Of-Invest
|
||||||
|
</a>
|
||||||
|
|
||||||
<div class="sb-sidenav-menu-heading">Addons</div>
|
<div class="sb-sidenav-menu-heading">Addons</div>
|
||||||
<a class="nav-link" target="_blank" href="../Packmonitor.php">
|
<a class="nav-link" target="_blank" href="../Packmonitor.php">
|
||||||
@@ -25,6 +45,13 @@
|
|||||||
<div class="sb-nav-link-icon"><i class="fas fa-list"></i></div>
|
<div class="sb-nav-link-icon"><i class="fas fa-list"></i></div>
|
||||||
Pack- & Aufgabenmonitor
|
Pack- & Aufgabenmonitor
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="sb-sidenav-menu-heading">Config</div>
|
||||||
|
<a class="nav-link" href=editconfig.php>
|
||||||
|
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
|
||||||
|
Config
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sb-sidenav-footer">
|
<div class="sb-sidenav-footer">
|
||||||
|
|||||||
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Black.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Black.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-BlackOblique.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-BlackOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Bold.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Bold.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-BoldOblique.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-BoldOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Hairline.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Hairline.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-HairlineOblique.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-HairlineOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Light.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Light.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-LightOblique.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-LightOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Regular.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Regular.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-RegularOblique.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-RegularOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-SemiBold.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-SemiBold.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-SemiBoldOblique.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-SemiBoldOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Thin.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-Thin.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-ThinOblique.ttf
Normal file
BIN
src/assets/font/Hurme1/HurmeGeometricSans1-ThinOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Black.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Black.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-BlackOblique.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-BlackOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Bold.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Bold.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-BoldOblique.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-BoldOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Hairline.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Hairline.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-HairlineOblique.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-HairlineOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Light.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Light.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-LightOblique.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-LightOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Regular.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Regular.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-RegularOblique.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-RegularOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-SemiBold.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-SemiBold.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-SemiBoldOblique.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-SemiBoldOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Thin.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-Thin.ttf
Normal file
Binary file not shown.
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-ThinOblique.ttf
Normal file
BIN
src/assets/font/Hurme3/HurmeGeometricSans3-ThinOblique.ttf
Normal file
Binary file not shown.
BIN
src/assets/img/logo.png
Normal file
BIN
src/assets/img/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
18
vendor/autoload.php
vendored
18
vendor/autoload.php
vendored
@@ -2,6 +2,24 @@
|
|||||||
|
|
||||||
// autoload.php @generated by Composer
|
// autoload.php @generated by Composer
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID < 50600) {
|
||||||
|
if (!headers_sent()) {
|
||||||
|
header('HTTP/1.1 500 Internal Server Error');
|
||||||
|
}
|
||||||
|
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
|
||||||
|
if (!ini_get('display_errors')) {
|
||||||
|
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||||
|
fwrite(STDERR, $err);
|
||||||
|
} elseif (!headers_sent()) {
|
||||||
|
echo $err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trigger_error(
|
||||||
|
$err,
|
||||||
|
E_USER_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
require_once __DIR__ . '/composer/autoload_real.php';
|
require_once __DIR__ . '/composer/autoload_real.php';
|
||||||
|
|
||||||
return ComposerAutoloaderInitab00f29709bdbfe3a1abd7d2d66d569c::getLoader();
|
return ComposerAutoloaderInitab00f29709bdbfe3a1abd7d2d66d569c::getLoader();
|
||||||
|
|||||||
851
vendor/chillerlan/php-qrcode/.idea/codeStyles/Project.xml
generated
vendored
851
vendor/chillerlan/php-qrcode/.idea/codeStyles/Project.xml
generated
vendored
@@ -1,851 +0,0 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
|
||||||
<code_scheme name="Project" version="173">
|
|
||||||
<option name="AUTODETECT_INDENTS" value="false" />
|
|
||||||
<option name="OTHER_INDENT_OPTIONS">
|
|
||||||
<value>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="RIGHT_MARGIN" value="130" />
|
|
||||||
<CssCodeStyleSettings>
|
|
||||||
<option name="HEX_COLOR_LOWER_CASE" value="true" />
|
|
||||||
<option name="HEX_COLOR_SHORT_FORMAT" value="true" />
|
|
||||||
<option name="KEEP_SINGLE_LINE_BLOCKS" value="true" />
|
|
||||||
<option name="SPACE_BEFORE_OPENING_BRACE" value="false" />
|
|
||||||
</CssCodeStyleSettings>
|
|
||||||
<DB2CodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</DB2CodeStyleSettings>
|
|
||||||
<DerbyCodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</DerbyCodeStyleSettings>
|
|
||||||
<H2CodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</H2CodeStyleSettings>
|
|
||||||
<HSQLCodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</HSQLCodeStyleSettings>
|
|
||||||
<HTMLCodeStyleSettings>
|
|
||||||
<option name="HTML_ATTRIBUTE_WRAP" value="0" />
|
|
||||||
<option name="HTML_TEXT_WRAP" value="0" />
|
|
||||||
<option name="HTML_ENFORCE_QUOTES" value="true" />
|
|
||||||
</HTMLCodeStyleSettings>
|
|
||||||
<JSCodeStyleSettings version="0">
|
|
||||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
|
||||||
<option name="ALIGN_OBJECT_PROPERTIES" value="2" />
|
|
||||||
<option name="ALIGN_VAR_STATEMENTS" value="1" />
|
|
||||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_CLASS_LBRACE" value="false" />
|
|
||||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
|
||||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
|
||||||
<option name="ENFORCE_TRAILING_COMMA" value="WhenMultiline" />
|
|
||||||
<option name="IMPORTS_WRAP" value="1" />
|
|
||||||
<option name="SPACE_BEFORE_ASYNC_ARROW_LPAREN" value="false" />
|
|
||||||
</JSCodeStyleSettings>
|
|
||||||
<MSSQLCodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</MSSQLCodeStyleSettings>
|
|
||||||
<MySQLCodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</MySQLCodeStyleSettings>
|
|
||||||
<OracleCodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</OracleCodeStyleSettings>
|
|
||||||
<PHPCodeStyleSettings>
|
|
||||||
<option name="ALIGN_KEY_VALUE_PAIRS" value="true" />
|
|
||||||
<option name="ALIGN_PHPDOC_PARAM_NAMES" value="true" />
|
|
||||||
<option name="ALIGN_PHPDOC_COMMENTS" value="true" />
|
|
||||||
<option name="ALIGN_ASSIGNMENTS" value="true" />
|
|
||||||
<option name="CONCAT_SPACES" value="false" />
|
|
||||||
<option name="COMMA_AFTER_LAST_ARRAY_ELEMENT" value="true" />
|
|
||||||
<option name="PHPDOC_BLANK_LINE_BEFORE_TAGS" value="true" />
|
|
||||||
<option name="PHPDOC_BLANK_LINES_AROUND_PARAMETERS" value="true" />
|
|
||||||
<option name="PHPDOC_WRAP_LONG_LINES" value="true" />
|
|
||||||
<option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
|
|
||||||
<option name="LOWER_CASE_NULL_CONST" value="true" />
|
|
||||||
<option name="ELSE_IF_STYLE" value="COMBINE" />
|
|
||||||
<option name="FIELDS_DEFAULT_VISIBILITY" value="protected" />
|
|
||||||
<option name="BLANK_LINES_BEFORE_RETURN_STATEMENT" value="1" />
|
|
||||||
<option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" />
|
|
||||||
<option name="ALIGN_CLASS_CONSTANTS" value="true" />
|
|
||||||
<option name="KEEP_BLANK_LINES_AFTER_LBRACE" value="1" />
|
|
||||||
<option name="SPACE_BEFORE_CLOSURE_LEFT_PARENTHESIS" value="false" />
|
|
||||||
<option name="FORCE_SHORT_DECLARATION_ARRAY_STYLE" value="true" />
|
|
||||||
<option name="SPACE_AROUND_ASSIGNMENT_IN_DECLARE" value="true" />
|
|
||||||
<option name="SPACE_AFTER_COLON_IN_RETURN_TYPE" value="false" />
|
|
||||||
<option name="PHPDOC_USE_FQCN" value="true" />
|
|
||||||
<option name="MULTILINE_CHAINED_CALLS_SEMICOLON_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="PREFER_TEMPLATE_INDENTS" value="true" />
|
|
||||||
</PHPCodeStyleSettings>
|
|
||||||
<PostgresCodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</PostgresCodeStyleSettings>
|
|
||||||
<SQLiteCodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</SQLiteCodeStyleSettings>
|
|
||||||
<SqlCodeStyleSettings version="6">
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="SELECT_ALIGN_AS" value="false" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_INDENT_THEN_ELSE" value="true" />
|
|
||||||
<option name="IMP_IF_THEN_INDENT_END" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
<option name="ALIGN_AS_IN_SELECT_STATEMENT" value="false" />
|
|
||||||
<option name="NEW_LINE_BEFORE_THEN" value="false" />
|
|
||||||
<option name="INDENT_SELECT_INTO_CLAUSE" value="true" />
|
|
||||||
</SqlCodeStyleSettings>
|
|
||||||
<SybaseCodeStyleSettings version="6">
|
|
||||||
<option name="USE_GENERAL_STYLE" value="false" />
|
|
||||||
<option name="TYPE_CASE" value="3" />
|
|
||||||
<option name="CUSTOM_TYPE_CASE" value="3" />
|
|
||||||
<option name="ALIAS_CASE" value="4" />
|
|
||||||
<option name="BUILT_IN_CASE" value="0" />
|
|
||||||
<option name="QUERY_TRUE_INDENT" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_ELEMENTS" value="false" />
|
|
||||||
<option name="QUERY_ALIGN_LINE_COMMENTS" value="false" />
|
|
||||||
<option name="INSERT_EL_COMMA" value="2" />
|
|
||||||
<option name="SET_EL_WRAP" value="0" />
|
|
||||||
<option name="SET_EL_COMMA" value="0" />
|
|
||||||
<option name="WITH_EL_WRAP" value="0" />
|
|
||||||
<option name="WITH_EL_COMMA" value="0" />
|
|
||||||
<option name="SELECT_EL_WRAP" value="3" />
|
|
||||||
<option name="SELECT_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_EL_WRAP" value="2" />
|
|
||||||
<option name="FROM_EL_COMMA" value="2" />
|
|
||||||
<option name="FROM_PLACE_ON" value="10" />
|
|
||||||
<option name="WHERE_EL_WRAP" value="3" />
|
|
||||||
<option name="WHERE_EL_BOUND" value="2" />
|
|
||||||
<option name="ORDER_EL_COMMA" value="2" />
|
|
||||||
<option name="TABLE_OPENING" value="1" />
|
|
||||||
<option name="TABLE_CONTENT" value="2" />
|
|
||||||
<option name="TABLE_CLOSING" value="3" />
|
|
||||||
<option name="TABLE_ALTER_INSTRUCTION_ALIGN" value="false" />
|
|
||||||
<option name="POST_OPT_WRAP_1" value="true" />
|
|
||||||
<option name="POST_OPT_ALIGN" value="false" />
|
|
||||||
<option name="ROUTINE_ARG_COMMA" value="2" />
|
|
||||||
<option name="ROUTINE_ARG_ALIGN_TYPES" value="true" />
|
|
||||||
<option name="IMP_DECLARE_EL_WRAP" value="1" />
|
|
||||||
<option name="IMP_IF_THEN_WRAP_THEN" value="true" />
|
|
||||||
<option name="CORTEGE_SPACE_BEFORE_L_PAREN" value="false" />
|
|
||||||
<option name="EXPR_CASE_WHEN_WRAP" value="false" />
|
|
||||||
<option name="EXPR_CASE_THEN_WRAP" value="true" />
|
|
||||||
<option name="PRIMARY_KEY_NAME_TEMPLATE" value="{table}_{columns}_pk" />
|
|
||||||
</SybaseCodeStyleSettings>
|
|
||||||
<XML>
|
|
||||||
<option name="XML_ATTRIBUTE_WRAP" value="0" />
|
|
||||||
<option name="XML_TEXT_WRAP" value="0" />
|
|
||||||
<option name="XML_KEEP_WHITE_SPACES_INSIDE_CDATA" value="true" />
|
|
||||||
</XML>
|
|
||||||
<codeStyleSettings language="DB2">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="Derby">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="H2">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="HSQLDB">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="HTML">
|
|
||||||
<option name="SOFT_MARGINS" value="130" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="JSON">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="4" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="JavaScript">
|
|
||||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
|
||||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
|
|
||||||
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_METHOD_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_IF_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_ELSE_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_WHILE_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_FOR_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_DO_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_SWITCH_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_TRY_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_CATCH_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_FINALLY_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_ELSE_KEYWORD" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_WHILE_KEYWORD" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_CATCH_KEYWORD" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_FINALLY_KEYWORD" value="false" />
|
|
||||||
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
|
||||||
<option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="PLACE_ASSIGNMENT_SIGN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="IF_BRACE_FORCE" value="3" />
|
|
||||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
|
||||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
|
||||||
<option name="FOR_BRACE_FORCE" value="3" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="Markdown">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="MySQL">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="Oracle">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="PHP">
|
|
||||||
<option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
|
|
||||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
|
||||||
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
|
|
||||||
<option name="BLANK_LINES_AFTER_PACKAGE" value="1" />
|
|
||||||
<option name="BLANK_LINES_BEFORE_IMPORTS" value="0" />
|
|
||||||
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
|
|
||||||
<option name="BLANK_LINES_BEFORE_CLASS_END" value="1" />
|
|
||||||
<option name="CLASS_BRACE_STYLE" value="1" />
|
|
||||||
<option name="METHOD_BRACE_STYLE" value="1" />
|
|
||||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="SPECIAL_ELSE_IF_TREATMENT" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
|
|
||||||
<option name="ALIGN_GROUP_FIELD_DECLARATIONS" value="true" />
|
|
||||||
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_CLASS_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_METHOD_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_IF_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_ELSE_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_WHILE_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_FOR_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_DO_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_SWITCH_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_TRY_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_CATCH_LBRACE" value="false" />
|
|
||||||
<option name="SPACE_BEFORE_FINALLY_LBRACE" value="false" />
|
|
||||||
<option name="CALL_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="CALL_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="PARENTHESES_EXPRESSION_LPAREN_WRAP" value="true" />
|
|
||||||
<option name="PARENTHESES_EXPRESSION_RPAREN_WRAP" value="true" />
|
|
||||||
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="FOR_STATEMENT_RPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
|
||||||
<option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="PLACE_ASSIGNMENT_SIGN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="IF_BRACE_FORCE" value="3" />
|
|
||||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
|
||||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
|
||||||
<option name="FOR_BRACE_FORCE" value="3" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
<arrangement>
|
|
||||||
<rules>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<CONST />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PUBLIC />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PROTECTED />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PRIVATE />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PUBLIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PROTECTED />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PRIVATE />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<CONSTRUCTOR />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PUBLIC />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PROTECTED />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PRIVATE />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PUBLIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PROTECTED />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PRIVATE />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<TRAIT />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<INTERFACE />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<CLASS />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
</rules>
|
|
||||||
</arrangement>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="PostgreSQL">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="SQL">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="SQLite">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="Sybase">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="TSQL">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="XML">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
|
||||||
<option name="SMART_TABS" value="true" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
</code_scheme>
|
|
||||||
</component>
|
|
||||||
5
vendor/chillerlan/php-qrcode/.idea/codeStyles/codeStyleConfig.xml
generated
vendored
5
vendor/chillerlan/php-qrcode/.idea/codeStyles/codeStyleConfig.xml
generated
vendored
@@ -1,5 +0,0 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
|
||||||
<state>
|
|
||||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
|
||||||
</state>
|
|
||||||
</component>
|
|
||||||
27
vendor/chillerlan/php-qrcode/.idea/inspectionProfiles/Project_Default.xml
generated
vendored
27
vendor/chillerlan/php-qrcode/.idea/inspectionProfiles/Project_Default.xml
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
<component name="InspectionProjectProfileManager">
|
|
||||||
<profile version="1.0">
|
|
||||||
<option name="myName" value="Project Default" />
|
|
||||||
<inspection_tool class="JSAccessibilityCheck" enabled="true" level="WARNING" enabled_by_default="true" editorAttributes="WARNING_ATTRIBUTES" />
|
|
||||||
<inspection_tool class="MessDetectorValidationInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpAssignmentInConditionInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpCSValidationInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpComposerExtensionStubsInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpDivisionByZeroInspection" enabled="true" level="WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpInternalEntityUsedInspection" enabled="true" level="INFO" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpMethodOrClassCallIsNotCaseSensitiveInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpMissingDocCommentInspection" enabled="true" level="INFO" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpMissingParentCallMagicInspection" enabled="false" level="WARNING" enabled_by_default="false">
|
|
||||||
<option name="ENABLE_FOR_SLEEP" value="false" />
|
|
||||||
<option name="ENABLE_FOR_WAKEUP" value="false" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="PhpMultipleClassesDeclarationsInOneFile" enabled="true" level="WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpStatementHasEmptyBodyInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpUsageOfSilenceOperatorInspection" enabled="true" level="STFU!" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="PhpVoidFunctionResultUsedInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
|
|
||||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
|
||||||
<option name="processCode" value="true" />
|
|
||||||
<option name="processLiterals" value="true" />
|
|
||||||
<option name="processComments" value="true" />
|
|
||||||
</inspection_tool>
|
|
||||||
</profile>
|
|
||||||
</component>
|
|
||||||
41
vendor/chillerlan/php-qrcode/README.md
vendored
41
vendor/chillerlan/php-qrcode/README.md
vendored
@@ -13,24 +13,24 @@ It also features a QR Code reader based on a [PHP port](https://github.com/khana
|
|||||||
[![Packagist downloads][downloads-badge]][downloads]
|
[![Packagist downloads][downloads-badge]][downloads]
|
||||||
[![Documentation][readthedocs-badge]][readthedocs]
|
[![Documentation][readthedocs-badge]][readthedocs]
|
||||||
|
|
||||||
[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-qrcode?logo=php&color=8892BF
|
[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-qrcode?logo=php&color=8892BF&logoColor=fff
|
||||||
[php]: https://www.php.net/supported-versions.php
|
[php]: https://www.php.net/supported-versions.php
|
||||||
[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg?logo=packagist
|
[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg?logo=packagist&logoColor=fff
|
||||||
[packagist]: https://packagist.org/packages/chillerlan/php-qrcode
|
[packagist]: https://packagist.org/packages/chillerlan/php-qrcode
|
||||||
[gh-action-badge]: https://img.shields.io/github/actions/workflow/status/chillerlan/php-qrcode/ci.yml?branch=v5.0.x&logo=github
|
[gh-action-badge]: https://img.shields.io/github/actions/workflow/status/chillerlan/php-qrcode/ci.yml?branch=v5.0.x&logo=github&logoColor=fff
|
||||||
[gh-action]: https://github.com/chillerlan/php-qrcode/actions/workflows/ci.yml?query=branch%3Amain
|
[gh-action]: https://github.com/chillerlan/php-qrcode/actions/workflows/ci.yml?query=branch%3Amain
|
||||||
[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-qrcode/v5.0.x?logo=codecov
|
[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-qrcode/v5.0.x?logo=codecov&logoColor=fff
|
||||||
[coverage]: https://app.codecov.io/gh/chillerlan/php-qrcode/tree/v5.0.x
|
[coverage]: https://app.codecov.io/gh/chillerlan/php-qrcode/tree/v5.0.x
|
||||||
[codacy-badge]: https://img.shields.io/codacy/grade/edccfc4fe5a34b74b1c53ee03f097b8d/v5.0.x?logo=codacy
|
[codacy-badge]: https://img.shields.io/codacy/grade/edccfc4fe5a34b74b1c53ee03f097b8d/v5.0.x?logo=codacy&logoColor=fff
|
||||||
[codacy]: https://app.codacy.com/gh/chillerlan/php-qrcode/dashboard?branch=v5.0.x
|
[codacy]: https://app.codacy.com/gh/chillerlan/php-qrcode/dashboard?branch=v5.0.x
|
||||||
[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode?logo=packagist
|
[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode?logo=packagist&logoColor=fff
|
||||||
[downloads]: https://packagist.org/packages/chillerlan/php-qrcode/stats
|
[downloads]: https://packagist.org/packages/chillerlan/php-qrcode/stats
|
||||||
[readthedocs-badge]: https://img.shields.io/readthedocs/php-qrcode/v5.0.x?logo=readthedocs
|
[readthedocs-badge]: https://img.shields.io/readthedocs/php-qrcode/v5.0.x?logo=readthedocs&logoColor=fff
|
||||||
[readthedocs]: https://php-qrcode.readthedocs.io/en/v5.0.x/
|
[readthedocs]: https://php-qrcode.readthedocs.io/en/v5.0.x/
|
||||||
|
|
||||||
## Overview
|
# Overview
|
||||||
|
|
||||||
### Features
|
## Features
|
||||||
|
|
||||||
- Creation of [Model 2 QR Codes](https://www.qrcode.com/en/codes/model12.html), [Version 1 to 40](https://www.qrcode.com/en/about/version.html)
|
- Creation of [Model 2 QR Codes](https://www.qrcode.com/en/codes/model12.html), [Version 1 to 40](https://www.qrcode.com/en/about/version.html)
|
||||||
- [ECC Levels](https://www.qrcode.com/en/about/error_correction.html) L/M/Q/H supported
|
- [ECC Levels](https://www.qrcode.com/en/about/error_correction.html) L/M/Q/H supported
|
||||||
@@ -52,7 +52,7 @@ It also features a QR Code reader based on a [PHP port](https://github.com/khana
|
|||||||
- QR Code reader (via GD and ImageMagick)
|
- QR Code reader (via GD and ImageMagick)
|
||||||
|
|
||||||
|
|
||||||
### Requirements
|
## Requirements
|
||||||
|
|
||||||
- PHP 7.4+
|
- PHP 7.4+
|
||||||
- [`ext-mbstring`](https://www.php.net/manual/book.mbstring.php)
|
- [`ext-mbstring`](https://www.php.net/manual/book.mbstring.php)
|
||||||
@@ -65,16 +65,21 @@ It also features a QR Code reader based on a [PHP port](https://github.com/khana
|
|||||||
For the QRCode reader, either `ext-gd` or `ext-imagick` is required!
|
For the QRCode reader, either `ext-gd` or `ext-imagick` is required!
|
||||||
|
|
||||||
|
|
||||||
## Documentation
|
# Documentation
|
||||||
|
|
||||||
- The user manual is at https://php-qrcode.readthedocs.io/ ([sources](https://github.com/chillerlan/php-qrcode/tree/v5.0.x/docs))
|
- The user manual is at https://php-qrcode.readthedocs.io/ ([sources](https://github.com/chillerlan/php-qrcode/tree/v5.0.x/docs))
|
||||||
- An API documentation created with [phpDocumentor](https://www.phpdoc.org/) can be found at https://chillerlan.github.io/php-qrcode/
|
- An API documentation created with [phpDocumentor](https://www.phpdoc.org/) can be found at https://chillerlan.github.io/php-qrcode/
|
||||||
- The documentation for the `QROptions` container can be found here: [chillerlan/php-settings-container](https://github.com/chillerlan/php-settings-container#readme)
|
- The documentation for the `QROptions` container can be found here: [chillerlan/php-settings-container](https://github.com/chillerlan/php-settings-container#readme)
|
||||||
|
|
||||||
|
**Important: Please use the examples from the branch that matches your installed php-qrcode version (
|
||||||
|
[v4.x](https://github.com/chillerlan/php-qrcode/tree/v4.3.x/examples),
|
||||||
|
[v5.x](https://github.com/chillerlan/php-qrcode/tree/v5.0.x/examples),
|
||||||
|
[dev-main](https://github.com/chillerlan/php-qrcode/tree/main/examples)
|
||||||
|
)!**
|
||||||
|
|
||||||
## Installation with [composer](https://getcomposer.org)
|
## Installation with [composer](https://getcomposer.org)
|
||||||
|
|
||||||
See [the installation guide](https://php-qrcode.readthedocs.io/en/v5.0.x/Usage-Installation.html) for more info!
|
See [the installation guide](https://php-qrcode.readthedocs.io/en/v5.0.x/Usage/Installation.html) for more info!
|
||||||
|
|
||||||
|
|
||||||
### Terminal
|
### Terminal
|
||||||
@@ -117,7 +122,7 @@ Also, have a look [in the examples folder](https://github.com/chillerlan/php-qrc
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
### Reading QR Codes
|
## Reading QR Codes
|
||||||
|
|
||||||
Using the built-in QR Code reader is pretty straight-forward:
|
Using the built-in QR Code reader is pretty straight-forward:
|
||||||
|
|
||||||
@@ -139,30 +144,30 @@ catch(Throwable $e){
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Shameless advertising
|
# Shameless advertising
|
||||||
|
|
||||||
Hi, please check out some of my other projects that are way cooler than qrcodes!
|
Hi, please check out some of my other projects that are way cooler than qrcodes!
|
||||||
|
|
||||||
- [js-qrcode](https://github.com/chillerlan/js-qrcode) - a javascript port of this library
|
- [js-qrcode](https://github.com/chillerlan/js-qrcode) - a javascript port of this library
|
||||||
- [php-authenticator](https://github.com/chillerlan/php-authenticator) - a Google Authenticator implementation (see [authenticator example](https://github.com/chillerlan/php-qrcode/blob/v5.0.x/examples/authenticator.php))
|
- [php-authenticator](https://github.com/chillerlan/php-authenticator) - a Google Authenticator implementation (see [authenticator example](https://github.com/chillerlan/php-qrcode/blob/v5.0.x/examples/authenticator.php))
|
||||||
- [php-httpinterface](https://github.com/chillerlan/php-httpinterface) - a PSR-7/15/17/18 implemetation
|
- [php-httpinterface](https://github.com/chillerlan/php-httpinterface) - a PSR-7/15/17/18 implemetation
|
||||||
- [php-oauth-core](https://github.com/chillerlan/php-oauth-core) - an OAuth 1/2 client library along with a bunch of [providers](https://github.com/chillerlan/php-oauth-providers)
|
- [php-oauth](https://github.com/chillerlan/php-oauth) - an OAuth 1/2 client library, fully PSR-7/PSR-17/PSR-18 compatible
|
||||||
- [php-database](https://github.com/chillerlan/php-database) - a database client & querybuilder for MySQL, Postgres, SQLite, MSSQL, Firebird
|
- [php-database](https://github.com/chillerlan/php-database) - a database client & querybuilder for MySQL, Postgres, SQLite, MSSQL, Firebird
|
||||||
- [php-tootbot](https://github.com/php-tootbot/tootbot-template) - a Mastodon bot library (see [@dwil](https://github.com/php-tootbot/dwil))
|
- [php-tootbot](https://github.com/php-tootbot/tootbot-template) - a Mastodon bot library (see [@dwil](https://github.com/php-tootbot/dwil))
|
||||||
|
|
||||||
|
|
||||||
## Disclaimer!
|
# Disclaimer!
|
||||||
|
|
||||||
I don't take responsibility for molten CPUs, misled applications, failed log-ins etc.. Use at your own risk!
|
I don't take responsibility for molten CPUs, misled applications, failed log-ins etc.. Use at your own risk!
|
||||||
|
|
||||||
|
|
||||||
### License notice
|
## License notice
|
||||||
|
|
||||||
- Parts of this code are [ported to PHP](https://github.com/codemasher/php-qrcode-decoder) from the [ZXing project](https://github.com/zxing/zxing) and licensed under the [Apache License, Version 2.0](./NOTICE).
|
- Parts of this code are [ported to PHP](https://github.com/codemasher/php-qrcode-decoder) from the [ZXing project](https://github.com/zxing/zxing) and licensed under the [Apache License, Version 2.0](./NOTICE).
|
||||||
- [The documentation](https://github.com/chillerlan/php-qrcode/tree/v5.0.x/docs) is licensed under the [Creative Commons Attribution 4.0 International (CC BY 4.0) License](https://creativecommons.org/licenses/by/4.0/).
|
- [The documentation](https://github.com/chillerlan/php-qrcode/tree/v5.0.x/docs) is licensed under the [Creative Commons Attribution 4.0 International (CC BY 4.0) License](https://creativecommons.org/licenses/by/4.0/).
|
||||||
|
|
||||||
|
|
||||||
### Trademark Notice
|
## Trademark Notice
|
||||||
|
|
||||||
The word "QR Code" is a registered trademark of *DENSO WAVE INCORPORATED*<br>
|
The word "QR Code" is a registered trademark of *DENSO WAVE INCORPORATED*<br>
|
||||||
https://www.qrcode.com/en/faq.html#patentH2Title
|
https://www.qrcode.com/en/faq.html#patentH2Title
|
||||||
|
|||||||
35
vendor/chillerlan/php-qrcode/composer.json
vendored
35
vendor/chillerlan/php-qrcode/composer.json
vendored
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"$schema": "https://getcomposer.org/schema.json",
|
||||||
"name": "chillerlan/php-qrcode",
|
"name": "chillerlan/php-qrcode",
|
||||||
"description": "A QR code generator and reader with a user friendly API. PHP 7.4+",
|
"description": "A QR Code generator and reader with a user-friendly API. PHP 7.4+",
|
||||||
"homepage": "https://github.com/chillerlan/php-qrcode",
|
"homepage": "https://github.com/chillerlan/php-qrcode",
|
||||||
"license": [
|
"license": [
|
||||||
"MIT", "Apache-2.0"
|
"MIT", "Apache-2.0"
|
||||||
@@ -32,6 +33,12 @@
|
|||||||
"homepage":"https://github.com/chillerlan/php-qrcode/graphs/contributors"
|
"homepage":"https://github.com/chillerlan/php-qrcode/graphs/contributors"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "Ko-Fi",
|
||||||
|
"url": "https://ko-fi.com/codemasher"
|
||||||
|
}
|
||||||
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"docs": "https://php-qrcode.readthedocs.io",
|
"docs": "https://php-qrcode.readthedocs.io",
|
||||||
"issues": "https://github.com/chillerlan/php-qrcode/issues",
|
"issues": "https://github.com/chillerlan/php-qrcode/issues",
|
||||||
@@ -42,15 +49,18 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": "^7.4 || ^8.0",
|
"php": "^7.4 || ^8.0",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"chillerlan/php-settings-container": "^2.1.4 || ^3.1"
|
"chillerlan/php-settings-container": "^2.1.6 || ^3.2.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"chillerlan/php-authenticator": "^4.1 || ^5.1",
|
"ext-fileinfo": "*",
|
||||||
"phan/phan": "^5.4",
|
"chillerlan/php-authenticator": "^4.3.1 || ^5.2.1",
|
||||||
|
"phan/phan": "^5.5.1",
|
||||||
|
"phpcompatibility/php-compatibility": "10.x-dev",
|
||||||
"phpunit/phpunit": "^9.6",
|
"phpunit/phpunit": "^9.6",
|
||||||
"phpmd/phpmd": "^2.15",
|
"phpmd/phpmd": "^2.15",
|
||||||
"setasign/fpdf": "^1.8.2",
|
"setasign/fpdf": "^1.8.2",
|
||||||
"squizlabs/php_codesniffer": "^3.8"
|
"slevomat/coding-standard": "^8.23.0",
|
||||||
|
"squizlabs/php_codesniffer": "^4.0.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
|
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
|
||||||
@@ -59,21 +69,26 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"chillerlan\\QRCode\\": "src/"
|
"chillerlan\\QRCode\\": "src"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"chillerlan\\QRCodeTest\\": "tests/"
|
"chillerlan\\QRCodeTest\\": "tests"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"phpunit": "@php vendor/bin/phpunit",
|
"phan": "@php vendor/bin/phan",
|
||||||
"phan": "@php vendor/bin/phan"
|
"phpcs": "@php vendor/bin/phpcs",
|
||||||
|
"phpmd": "@php vendor/bin/phpmd src text ./phpmd.xml.dist",
|
||||||
|
"phpunit": "@php vendor/bin/phpunit"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"lock": false,
|
"lock": false,
|
||||||
"sort-packages": true,
|
"sort-packages": true,
|
||||||
"platform-check": true
|
"platform-check": true,
|
||||||
|
"allow-plugins": {
|
||||||
|
"dealerdirect/phpcodesniffer-composer-installer": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class GDLuminanceSource extends LuminanceSourceAbstract{
|
|||||||
*
|
*
|
||||||
* @throws \chillerlan\QRCode\Decoder\QRCodeDecoderException
|
* @throws \chillerlan\QRCode\Decoder\QRCodeDecoderException
|
||||||
*/
|
*/
|
||||||
public function __construct($gdImage, SettingsContainerInterface $options = null){
|
public function __construct($gdImage, ?SettingsContainerInterface $options = null){
|
||||||
|
|
||||||
/** @noinspection PhpFullyQualifiedNameUsageInspection */
|
/** @noinspection PhpFullyQualifiedNameUsageInspection */
|
||||||
if(
|
if(
|
||||||
@@ -85,12 +85,12 @@ class GDLuminanceSource extends LuminanceSourceAbstract{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public static function fromFile(string $path, SettingsContainerInterface $options = null):self{
|
public static function fromFile(string $path, ?SettingsContainerInterface $options = null):self{
|
||||||
return new self(imagecreatefromstring(file_get_contents(self::checkFile($path))), $options);
|
return new self(imagecreatefromstring(file_get_contents(self::checkFile($path))), $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public static function fromBlob(string $blob, SettingsContainerInterface $options = null):self{
|
public static function fromBlob(string $blob, ?SettingsContainerInterface $options = null):self{
|
||||||
return new self(imagecreatefromstring($blob), $options);
|
return new self(imagecreatefromstring($blob), $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ final class GenericGFPoly{
|
|||||||
* @throws \chillerlan\QRCode\QRCodeException if argument is null or empty, or if leading coefficient is 0 and this
|
* @throws \chillerlan\QRCode\QRCodeException if argument is null or empty, or if leading coefficient is 0 and this
|
||||||
* is not a constant polynomial (that is, it is not the monomial "0")
|
* is not a constant polynomial (that is, it is not the monomial "0")
|
||||||
*/
|
*/
|
||||||
public function __construct(array $coefficients, int $degree = null){
|
public function __construct(array $coefficients, ?int $degree = null){
|
||||||
$degree ??= 0;
|
$degree ??= 0;
|
||||||
|
|
||||||
if(empty($coefficients)){
|
if(empty($coefficients)){
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class IMagickLuminanceSource extends LuminanceSourceAbstract{
|
|||||||
/**
|
/**
|
||||||
* IMagickLuminanceSource constructor.
|
* IMagickLuminanceSource constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct(Imagick $imagick, SettingsContainerInterface $options = null){
|
public function __construct(Imagick $imagick, ?SettingsContainerInterface $options = null){
|
||||||
parent::__construct($imagick->getImageWidth(), $imagick->getImageHeight(), $options);
|
parent::__construct($imagick->getImageWidth(), $imagick->getImageHeight(), $options);
|
||||||
|
|
||||||
$this->imagick = $imagick;
|
$this->imagick = $imagick;
|
||||||
@@ -63,12 +63,12 @@ class IMagickLuminanceSource extends LuminanceSourceAbstract{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public static function fromFile(string $path, SettingsContainerInterface $options = null):self{
|
public static function fromFile(string $path, ?SettingsContainerInterface $options = null):self{
|
||||||
return new self(new Imagick(self::checkFile($path)), $options);
|
return new self(new Imagick(self::checkFile($path)), $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @inheritDoc */
|
/** @inheritDoc */
|
||||||
public static function fromBlob(string $blob, SettingsContainerInterface $options = null):self{
|
public static function fromBlob(string $blob, ?SettingsContainerInterface $options = null):self{
|
||||||
$im = new Imagick;
|
$im = new Imagick;
|
||||||
$im->readImageBlob($blob);
|
$im->readImageBlob($blob);
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ abstract class LuminanceSourceAbstract implements LuminanceSourceInterface{
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function __construct(int $width, int $height, SettingsContainerInterface $options = null){
|
public function __construct(int $width, int $height, ?SettingsContainerInterface $options = null){
|
||||||
$this->width = $width;
|
$this->width = $width;
|
||||||
$this->height = $height;
|
$this->height = $height;
|
||||||
$this->options = ($options ?? new QROptions);
|
$this->options = ($options ?? new QROptions);
|
||||||
@@ -57,7 +57,10 @@ abstract class LuminanceSourceAbstract implements LuminanceSourceInterface{
|
|||||||
return $this->height;
|
return $this->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @inheritDoc */
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
* @throws \chillerlan\QRCode\Decoder\QRCodeDecoderException
|
||||||
|
*/
|
||||||
public function getRow(int $y):array{
|
public function getRow(int $y):array{
|
||||||
|
|
||||||
if($y < 0 || $y >= $this->getHeight()){
|
if($y < 0 || $y >= $this->getHeight()){
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ final class MaskPattern{
|
|||||||
*/
|
*/
|
||||||
public function __construct(int $maskPattern){
|
public function __construct(int $maskPattern){
|
||||||
|
|
||||||
if((0b111 & $maskPattern) !== $maskPattern){
|
if(($maskPattern & 0b111) !== $maskPattern){
|
||||||
throw new QRCodeException('invalid mask pattern');
|
throw new QRCodeException('invalid mask pattern');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
namespace chillerlan\QRCode\Data;
|
namespace chillerlan\QRCode\Data;
|
||||||
|
|
||||||
use chillerlan\QRCode\Common\{BitBuffer, Mode};
|
use chillerlan\QRCode\Common\{BitBuffer, Mode};
|
||||||
use function array_flip, ceil, intdiv, str_split;
|
use function ceil, intdiv, preg_match, strpos;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :
|
* Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :
|
||||||
@@ -24,16 +24,9 @@ final class AlphaNum extends QRDataModeAbstract{
|
|||||||
/**
|
/**
|
||||||
* ISO/IEC 18004:2000 Table 5
|
* ISO/IEC 18004:2000 Table 5
|
||||||
*
|
*
|
||||||
* @var int[]
|
* @var string
|
||||||
*/
|
*/
|
||||||
private const CHAR_TO_ORD = [
|
private const CHAR_MAP = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';
|
||||||
'0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7,
|
|
||||||
'8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15,
|
|
||||||
'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23,
|
|
||||||
'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31,
|
|
||||||
'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39,
|
|
||||||
'+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
@@ -51,18 +44,7 @@ final class AlphaNum extends QRDataModeAbstract{
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public static function validateString(string $string):bool{
|
public static function validateString(string $string):bool{
|
||||||
|
return (bool)preg_match('/^[A-Z\d %$*+\-.:\/]+$/', $string);
|
||||||
if($string === ''){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach(str_split($string) as $chr){
|
|
||||||
if(!isset(self::CHAR_TO_ORD[$chr])){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -78,12 +60,15 @@ final class AlphaNum extends QRDataModeAbstract{
|
|||||||
|
|
||||||
// encode 2 characters in 11 bits
|
// encode 2 characters in 11 bits
|
||||||
for($i = 0; ($i + 1) < $len; $i += 2){
|
for($i = 0; ($i + 1) < $len; $i += 2){
|
||||||
$bitBuffer->put((self::CHAR_TO_ORD[$this->data[$i]] * 45 + self::CHAR_TO_ORD[$this->data[($i + 1)]]), 11);
|
$bitBuffer->put(
|
||||||
|
($this->ord($this->data[$i]) * 45 + $this->ord($this->data[($i + 1)])),
|
||||||
|
11,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// encode a remaining character in 6 bits
|
// encode a remaining character in 6 bits
|
||||||
if($i < $len){
|
if($i < $len){
|
||||||
$bitBuffer->put(self::CHAR_TO_ORD[$this->data[$i]], 6);
|
$bitBuffer->put($this->ord($this->data[$i]), 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
@@ -95,19 +80,7 @@ final class AlphaNum extends QRDataModeAbstract{
|
|||||||
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
*/
|
*/
|
||||||
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
|
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
|
||||||
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
|
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
|
||||||
$charmap = array_flip(self::CHAR_TO_ORD);
|
|
||||||
|
|
||||||
// @todo
|
|
||||||
$toAlphaNumericChar = function(int $ord) use ($charmap):string{
|
|
||||||
|
|
||||||
if(isset($charmap[$ord])){
|
|
||||||
return $charmap[$ord];
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new QRCodeDataException('invalid character value: '.$ord);
|
|
||||||
};
|
|
||||||
|
|
||||||
$result = '';
|
$result = '';
|
||||||
// Read two characters at a time
|
// Read two characters at a time
|
||||||
while($length > 1){
|
while($length > 1){
|
||||||
@@ -116,9 +89,9 @@ final class AlphaNum extends QRDataModeAbstract{
|
|||||||
throw new QRCodeDataException('not enough bits available'); // @codeCoverageIgnore
|
throw new QRCodeDataException('not enough bits available'); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
$nextTwoCharsBits = $bitBuffer->read(11);
|
$nextTwoCharsBits = $bitBuffer->read(11);
|
||||||
$result .= $toAlphaNumericChar(intdiv($nextTwoCharsBits, 45));
|
$result .= self::chr(intdiv($nextTwoCharsBits, 45));
|
||||||
$result .= $toAlphaNumericChar($nextTwoCharsBits % 45);
|
$result .= self::chr($nextTwoCharsBits % 45);
|
||||||
$length -= 2;
|
$length -= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,10 +101,36 @@ final class AlphaNum extends QRDataModeAbstract{
|
|||||||
throw new QRCodeDataException('not enough bits available'); // @codeCoverageIgnore
|
throw new QRCodeDataException('not enough bits available'); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
$result .= $toAlphaNumericChar($bitBuffer->read(6));
|
$result .= self::chr($bitBuffer->read(6));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
|
*/
|
||||||
|
private function ord(string $chr):int{
|
||||||
|
/** @phan-suppress-next-line PhanParamSuspiciousOrder */
|
||||||
|
$ord = strpos(self::CHAR_MAP, $chr);
|
||||||
|
|
||||||
|
if($ord === false){
|
||||||
|
throw new QRCodeDataException('invalid character'); // @codeCoverageIgnore
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ord;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
|
*/
|
||||||
|
private static function chr(int $ord):string{
|
||||||
|
|
||||||
|
if($ord < 0 || $ord > 44){
|
||||||
|
throw new QRCodeDataException('invalid character code'); // @codeCoverageIgnore
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::CHAR_MAP[$ord];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
28
vendor/chillerlan/php-qrcode/src/Data/ECI.php
vendored
28
vendor/chillerlan/php-qrcode/src/Data/ECI.php
vendored
@@ -34,6 +34,7 @@ final class ECI extends QRDataModeAbstract{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
* @noinspection PhpMissingParentConstructorInspection
|
* @noinspection PhpMissingParentConstructorInspection
|
||||||
*/
|
*/
|
||||||
public function __construct(int $encoding){
|
public function __construct(int $encoding){
|
||||||
@@ -107,7 +108,7 @@ final class ECI extends QRDataModeAbstract{
|
|||||||
$id = ((($firstByte & 0b00011111) << 16) | $bitBuffer->read(16));
|
$id = ((($firstByte & 0b00011111) << 16) | $bitBuffer->read(16));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
throw new QRCodeDataException(sprintf('error decoding ECI value first byte: %08b', $firstByte)); // @codeCoverageIgnore
|
throw new QRCodeDataException(sprintf('error decoding ECI value first byte: %08b', $firstByte));// @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ECICharset($id);
|
return new ECICharset($id);
|
||||||
@@ -128,17 +129,12 @@ final class ECI extends QRDataModeAbstract{
|
|||||||
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
|
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
|
||||||
$eciCharset = self::parseValue($bitBuffer);
|
$eciCharset = self::parseValue($bitBuffer);
|
||||||
$nextMode = $bitBuffer->read(4);
|
$nextMode = $bitBuffer->read(4);
|
||||||
|
$data = self::decodeModeSegment($nextMode, $bitBuffer, $versionNumber);
|
||||||
if($nextMode !== Mode::BYTE){
|
$encoding = $eciCharset->getName();
|
||||||
throw new QRCodeDataException(sprintf('ECI designator followed by invalid mode: "%04b"', $nextMode));
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = Byte::decodeSegment($bitBuffer, $versionNumber);
|
|
||||||
$encoding = $eciCharset->getName();
|
|
||||||
|
|
||||||
if($encoding === null){
|
if($encoding === null){
|
||||||
// The spec isn't clear on this mode; see
|
// The spec isn't clear on this mode; see
|
||||||
// section 6.4.5: t does not say which encoding to assuming
|
// section 6.4.5: it does not say which encoding to assuming
|
||||||
// upon decoding. I have seen ISO-8859-1 used as well as
|
// upon decoding. I have seen ISO-8859-1 used as well as
|
||||||
// Shift_JIS -- without anything like an ECI designator to
|
// Shift_JIS -- without anything like an ECI designator to
|
||||||
// give a hint.
|
// give a hint.
|
||||||
@@ -152,4 +148,18 @@ final class ECI extends QRDataModeAbstract{
|
|||||||
return mb_convert_encoding($data, mb_internal_encoding(), $encoding);
|
return mb_convert_encoding($data, mb_internal_encoding(), $encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
|
*/
|
||||||
|
private static function decodeModeSegment(int $mode, BitBuffer $bitBuffer, int $versionNumber):string{
|
||||||
|
|
||||||
|
switch(true){
|
||||||
|
case $mode === Mode::NUMBER: return Number::decodeSegment($bitBuffer, $versionNumber);
|
||||||
|
case $mode === Mode::ALPHANUM: return AlphaNum::decodeSegment($bitBuffer, $versionNumber);
|
||||||
|
case $mode === Mode::BYTE: return Byte::decodeSegment($bitBuffer, $versionNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new QRCodeDataException(sprintf('ECI designator followed by invalid mode: "%04b"', $mode));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
12
vendor/chillerlan/php-qrcode/src/Data/Hanzi.php
vendored
12
vendor/chillerlan/php-qrcode/src/Data/Hanzi.php
vendored
@@ -13,7 +13,7 @@ namespace chillerlan\QRCode\Data;
|
|||||||
use chillerlan\QRCode\Common\{BitBuffer, Mode};
|
use chillerlan\QRCode\Common\{BitBuffer, Mode};
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use function chr, implode, intdiv, is_string, mb_convert_encoding, mb_detect_encoding,
|
use function chr, implode, intdiv, is_string, mb_convert_encoding, mb_detect_encoding,
|
||||||
mb_detect_order, mb_internal_encoding, mb_strlen, ord, sprintf, strlen;
|
mb_internal_encoding, mb_strlen, ord, sprintf, strlen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hanzi (simplified Chinese) mode, GBT18284-2000: 13-bit double-byte characters from the GB2312/GB18030 character set
|
* Hanzi (simplified Chinese) mode, GBT18284-2000: 13-bit double-byte characters from the GB2312/GB18030 character set
|
||||||
@@ -64,11 +64,15 @@ final class Hanzi extends QRDataModeAbstract{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
*/
|
*/
|
||||||
public static function convertEncoding(string $string):string{
|
public static function convertEncoding(string $string):string{
|
||||||
mb_detect_order([mb_internal_encoding(), 'UTF-8', 'GB2312', 'GB18030', 'CP936', 'EUC-CN', 'HZ']);
|
|
||||||
|
|
||||||
$detected = mb_detect_encoding($string, null, true);
|
$detected = mb_detect_encoding(
|
||||||
|
$string,
|
||||||
|
[mb_internal_encoding(), 'UTF-8', 'GB2312', 'GB18030', 'CP936', 'EUC-CN', 'HZ'],
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
if($detected === false){
|
if($detected === false){
|
||||||
throw new QRCodeDataException('mb_detect_encoding error');
|
throw new QRCodeDataException('mb_detect_encoding error');
|
||||||
@@ -199,7 +203,7 @@ final class Hanzi extends QRDataModeAbstract{
|
|||||||
$length--;
|
$length--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mb_convert_encoding(implode($buffer), mb_internal_encoding(), self::ENCODING);
|
return mb_convert_encoding(implode('', $buffer), mb_internal_encoding(), self::ENCODING);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace chillerlan\QRCode\Data;
|
|||||||
use chillerlan\QRCode\Common\{BitBuffer, Mode};
|
use chillerlan\QRCode\Common\{BitBuffer, Mode};
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use function chr, implode, intdiv, is_string, mb_convert_encoding, mb_detect_encoding,
|
use function chr, implode, intdiv, is_string, mb_convert_encoding, mb_detect_encoding,
|
||||||
mb_detect_order, mb_internal_encoding, mb_strlen, ord, sprintf, strlen;
|
mb_internal_encoding, mb_strlen, ord, sprintf, strlen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Kanji mode: 13-bit double-byte characters from the Shift-JIS character set
|
* Kanji mode: 13-bit double-byte characters from the Shift-JIS character set
|
||||||
@@ -57,11 +57,10 @@ final class Kanji extends QRDataModeAbstract{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
*/
|
*/
|
||||||
public static function convertEncoding(string $string):string{
|
public static function convertEncoding(string $string):string{
|
||||||
mb_detect_order([mb_internal_encoding(), 'UTF-8', 'SJIS', 'SJIS-2004']);
|
$detected = mb_detect_encoding($string, [mb_internal_encoding(), 'UTF-8', 'SJIS', 'SJIS-2004'], true);
|
||||||
|
|
||||||
$detected = mb_detect_encoding($string, null, true);
|
|
||||||
|
|
||||||
if($detected === false){
|
if($detected === false){
|
||||||
throw new QRCodeDataException('mb_detect_encoding error');
|
throw new QRCodeDataException('mb_detect_encoding error');
|
||||||
@@ -185,7 +184,7 @@ final class Kanji extends QRDataModeAbstract{
|
|||||||
$length--;
|
$length--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mb_convert_encoding(implode($buffer), mb_internal_encoding(), self::ENCODING);
|
return mb_convert_encoding(implode('', $buffer), mb_internal_encoding(), self::ENCODING);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
60
vendor/chillerlan/php-qrcode/src/Data/Number.php
vendored
60
vendor/chillerlan/php-qrcode/src/Data/Number.php
vendored
@@ -11,7 +11,7 @@
|
|||||||
namespace chillerlan\QRCode\Data;
|
namespace chillerlan\QRCode\Data;
|
||||||
|
|
||||||
use chillerlan\QRCode\Common\{BitBuffer, Mode};
|
use chillerlan\QRCode\Common\{BitBuffer, Mode};
|
||||||
use function array_flip, ceil, intdiv, str_split, substr, unpack;
|
use function ceil, intdiv, substr, unpack;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Numeric mode: decimal digits 0 to 9
|
* Numeric mode: decimal digits 0 to 9
|
||||||
@@ -21,13 +21,6 @@ use function array_flip, ceil, intdiv, str_split, substr, unpack;
|
|||||||
*/
|
*/
|
||||||
final class Number extends QRDataModeAbstract{
|
final class Number extends QRDataModeAbstract{
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int[]
|
|
||||||
*/
|
|
||||||
private const NUMBER_TO_ORD = [
|
|
||||||
'0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
@@ -44,18 +37,7 @@ final class Number extends QRDataModeAbstract{
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public static function validateString(string $string):bool{
|
public static function validateString(string $string):bool{
|
||||||
|
return (bool)preg_match('/^\d+$/', $string);
|
||||||
if($string === ''){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach(str_split($string) as $chr){
|
|
||||||
if(!isset(self::NUMBER_TO_ORD[$chr])){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -95,12 +77,20 @@ final class Number extends QRDataModeAbstract{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* get the code for the given numeric string
|
* get the code for the given numeric string
|
||||||
|
*
|
||||||
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
*/
|
*/
|
||||||
private function parseInt(string $string):int{
|
private function parseInt(string $string):int{
|
||||||
$num = 0;
|
$num = 0;
|
||||||
|
|
||||||
foreach(unpack('C*', $string) as $chr){
|
$ords = unpack('C*', $string);
|
||||||
$num = ($num * 10 + $chr - 48);
|
|
||||||
|
if($ords === false){
|
||||||
|
throw new QRCodeDataException('unpack() error');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($ords as $ord){
|
||||||
|
$num = ($num * 10 + $ord - 48);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $num;
|
return $num;
|
||||||
@@ -112,19 +102,7 @@ final class Number extends QRDataModeAbstract{
|
|||||||
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
*/
|
*/
|
||||||
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
|
public static function decodeSegment(BitBuffer $bitBuffer, int $versionNumber):string{
|
||||||
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
|
$length = $bitBuffer->read(self::getLengthBits($versionNumber));
|
||||||
$charmap = array_flip(self::NUMBER_TO_ORD);
|
|
||||||
|
|
||||||
// @todo
|
|
||||||
$toNumericChar = function(int $ord) use ($charmap):string{
|
|
||||||
|
|
||||||
if(isset($charmap[$ord])){
|
|
||||||
return $charmap[$ord];
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new QRCodeDataException('invalid character value: '.$ord);
|
|
||||||
};
|
|
||||||
|
|
||||||
$result = '';
|
$result = '';
|
||||||
// Read three digits at a time
|
// Read three digits at a time
|
||||||
while($length >= 3){
|
while($length >= 3){
|
||||||
@@ -139,9 +117,9 @@ final class Number extends QRDataModeAbstract{
|
|||||||
throw new QRCodeDataException('error decoding numeric value');
|
throw new QRCodeDataException('error decoding numeric value');
|
||||||
}
|
}
|
||||||
|
|
||||||
$result .= $toNumericChar(intdiv($threeDigitsBits, 100));
|
$result .= intdiv($threeDigitsBits, 100);
|
||||||
$result .= $toNumericChar(intdiv($threeDigitsBits, 10) % 10);
|
$result .= (intdiv($threeDigitsBits, 10) % 10);
|
||||||
$result .= $toNumericChar($threeDigitsBits % 10);
|
$result .= ($threeDigitsBits % 10);
|
||||||
|
|
||||||
$length -= 3;
|
$length -= 3;
|
||||||
}
|
}
|
||||||
@@ -158,8 +136,8 @@ final class Number extends QRDataModeAbstract{
|
|||||||
throw new QRCodeDataException('error decoding numeric value');
|
throw new QRCodeDataException('error decoding numeric value');
|
||||||
}
|
}
|
||||||
|
|
||||||
$result .= $toNumericChar(intdiv($twoDigitsBits, 10));
|
$result .= intdiv($twoDigitsBits, 10);
|
||||||
$result .= $toNumericChar($twoDigitsBits % 10);
|
$result .= ($twoDigitsBits % 10);
|
||||||
}
|
}
|
||||||
elseif($length === 1){
|
elseif($length === 1){
|
||||||
// One digit left over to read
|
// One digit left over to read
|
||||||
@@ -173,7 +151,7 @@ final class Number extends QRDataModeAbstract{
|
|||||||
throw new QRCodeDataException('error decoding numeric value');
|
throw new QRCodeDataException('error decoding numeric value');
|
||||||
}
|
}
|
||||||
|
|
||||||
$result .= $toNumericChar($digitBits);
|
$result .= $digitBits;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ final class QRData{
|
|||||||
|
|
||||||
// guess the version number within the given range
|
// guess the version number within the given range
|
||||||
for($version = $this->options->versionMin; $version <= $this->options->versionMax; $version++){
|
for($version = $this->options->versionMin; $version <= $this->options->versionMax; $version++){
|
||||||
if($total <= $this->maxBitsForEcc[$version]){
|
if($total <= ($this->maxBitsForEcc[$version] - 4)){
|
||||||
return new Version($version);
|
return new Version($version);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -207,7 +207,7 @@ final class QRData{
|
|||||||
/**
|
/**
|
||||||
* creates a BitBuffer and writes the string data to it
|
* creates a BitBuffer and writes the string data to it
|
||||||
*
|
*
|
||||||
* @throws \chillerlan\QRCode\QRCodeException on data overflow
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException on data overflow
|
||||||
*/
|
*/
|
||||||
private function writeBitBuffer():void{
|
private function writeBitBuffer():void{
|
||||||
$MAX_BITS = $this->eccLevel->getMaxBitsForVersion($this->version);
|
$MAX_BITS = $this->eccLevel->getMaxBitsForVersion($this->version);
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ class QRMatrix{
|
|||||||
*
|
*
|
||||||
* @return int[][]|bool[][]
|
* @return int[][]|bool[][]
|
||||||
*/
|
*/
|
||||||
public function getMatrix(bool $boolean = null):array{
|
public function getMatrix(?bool $boolean = null):array{
|
||||||
|
|
||||||
if($boolean !== true){
|
if($boolean !== true){
|
||||||
return $this->matrix;
|
return $this->matrix;
|
||||||
@@ -195,7 +195,7 @@ class QRMatrix{
|
|||||||
* @see \chillerlan\QRCode\Data\QRMatrix::getMatrix()
|
* @see \chillerlan\QRCode\Data\QRMatrix::getMatrix()
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
public function matrix(bool $boolean = null):array{
|
public function matrix(?bool $boolean = null):array{
|
||||||
return $this->getMatrix($boolean);
|
return $this->getMatrix($boolean);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,7 +387,7 @@ class QRMatrix{
|
|||||||
* 7 # 3
|
* 7 # 3
|
||||||
* 6 5 4
|
* 6 5 4
|
||||||
*/
|
*/
|
||||||
public function checkNeighbours(int $x, int $y, int $M_TYPE = null):int{
|
public function checkNeighbours(int $x, int $y, ?int $M_TYPE = null):int{
|
||||||
$bits = 0;
|
$bits = 0;
|
||||||
|
|
||||||
foreach($this::neighbours as $bit => [$ix, $iy]){
|
foreach($this::neighbours as $bit => [$ix, $iy]){
|
||||||
@@ -463,6 +463,7 @@ class QRMatrix{
|
|||||||
|
|
||||||
for($c = 0; $c < 3; $c++){
|
for($c = 0; $c < 3; $c++){
|
||||||
for($i = 0; $i < 8; $i++){
|
for($i = 0; $i < 8; $i++){
|
||||||
|
// phpcs:ignore
|
||||||
$this->set( $h[$c][0] , ($h[$c][1] + $i), false, $this::M_SEPARATOR);
|
$this->set( $h[$c][0] , ($h[$c][1] + $i), false, $this::M_SEPARATOR);
|
||||||
$this->set(($v[$c][0] - $i), $v[$c][1] , false, $this::M_SEPARATOR);
|
$this->set(($v[$c][0] - $i), $v[$c][1] , false, $this::M_SEPARATOR);
|
||||||
}
|
}
|
||||||
@@ -552,7 +553,7 @@ class QRMatrix{
|
|||||||
*
|
*
|
||||||
* ISO/IEC 18004:2000 Section 8.9
|
* ISO/IEC 18004:2000 Section 8.9
|
||||||
*/
|
*/
|
||||||
public function setFormatInfo(MaskPattern $maskPattern = null):self{
|
public function setFormatInfo(?MaskPattern $maskPattern = null):self{
|
||||||
$this->maskPattern = $maskPattern;
|
$this->maskPattern = $maskPattern;
|
||||||
$bits = 0; // sets all format fields to false (test mode)
|
$bits = 0; // sets all format fields to false (test mode)
|
||||||
|
|
||||||
@@ -678,7 +679,7 @@ class QRMatrix{
|
|||||||
*
|
*
|
||||||
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
*/
|
*/
|
||||||
public function setLogoSpace(int $width, int $height = null, int $startX = null, int $startY = null):self{
|
public function setLogoSpace(int $width, ?int $height = null, ?int $startX = null, ?int $startY = null):self{
|
||||||
$height ??= $width;
|
$height ??= $width;
|
||||||
|
|
||||||
// if width and height happen to be negative or 0 (default value), just return - nothing to do
|
// if width and height happen to be negative or 0 (default value), just return - nothing to do
|
||||||
|
|||||||
@@ -415,7 +415,7 @@ final class BitMatrix extends QRMatrix{
|
|||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
*/
|
*/
|
||||||
public function setQuietZone(int $quietZoneSize = null):self{
|
public function setQuietZone(?int $quietZoneSize = null):self{
|
||||||
throw new QRCodeDataException('not supported');
|
throw new QRCodeDataException('not supported');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -423,7 +423,7 @@ final class BitMatrix extends QRMatrix{
|
|||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
* @throws \chillerlan\QRCode\Data\QRCodeDataException
|
||||||
*/
|
*/
|
||||||
public function setLogoSpace(int $width, int $height = null, int $startX = null, int $startY = null):self{
|
public function setLogoSpace(int $width, ?int $height = null, ?int $startX = null, ?int $startY = null):self{
|
||||||
throw new QRCodeDataException('not supported');
|
throw new QRCodeDataException('not supported');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ final class Decoder{
|
|||||||
private ?EccLevel $eccLevel = null;
|
private ?EccLevel $eccLevel = null;
|
||||||
private ?MaskPattern $maskPattern = null;
|
private ?MaskPattern $maskPattern = null;
|
||||||
private BitBuffer $bitBuffer;
|
private BitBuffer $bitBuffer;
|
||||||
|
private Detector $detector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decodes a QR Code represented as a BitMatrix.
|
* Decodes a QR Code represented as a BitMatrix.
|
||||||
@@ -37,7 +38,8 @@ final class Decoder{
|
|||||||
* @throws \Throwable|\chillerlan\QRCode\Decoder\QRCodeDecoderException
|
* @throws \Throwable|\chillerlan\QRCode\Decoder\QRCodeDecoderException
|
||||||
*/
|
*/
|
||||||
public function decode(LuminanceSourceInterface $source):DecoderResult{
|
public function decode(LuminanceSourceInterface $source):DecoderResult{
|
||||||
$matrix = (new Detector($source))->detect();
|
$this->detector = new Detector($source);
|
||||||
|
$matrix = $this->detector->detect();
|
||||||
|
|
||||||
try{
|
try{
|
||||||
// clone the BitMatrix to avoid errors in case we run into mirroring
|
// clone the BitMatrix to avoid errors in case we run into mirroring
|
||||||
@@ -148,6 +150,7 @@ final class Decoder{
|
|||||||
'data' => $result,
|
'data' => $result,
|
||||||
'version' => $this->version,
|
'version' => $this->version,
|
||||||
'eccLevel' => $this->eccLevel,
|
'eccLevel' => $this->eccLevel,
|
||||||
|
'finderPatterns' => $this->detector->getFinderPatterns(),
|
||||||
'maskPattern' => $this->maskPattern,
|
'maskPattern' => $this->maskPattern,
|
||||||
'structuredAppendParity' => $parityData,
|
'structuredAppendParity' => $parityData,
|
||||||
'structuredAppendSequence' => $symbolSequence,
|
'structuredAppendSequence' => $symbolSequence,
|
||||||
|
|||||||
@@ -20,13 +20,14 @@ use function property_exists;
|
|||||||
* applies to 2D barcode formats. For now, it contains the raw bytes obtained
|
* applies to 2D barcode formats. For now, it contains the raw bytes obtained
|
||||||
* as well as a String interpretation of those bytes, if applicable.
|
* as well as a String interpretation of those bytes, if applicable.
|
||||||
*
|
*
|
||||||
* @property \chillerlan\QRCode\Common\BitBuffer $rawBytes
|
* @property \chillerlan\QRCode\Common\BitBuffer $rawBytes
|
||||||
* @property string $data
|
* @property string $data
|
||||||
* @property \chillerlan\QRCode\Common\Version $version
|
* @property \chillerlan\QRCode\Common\Version $version
|
||||||
* @property \chillerlan\QRCode\Common\EccLevel $eccLevel
|
* @property \chillerlan\QRCode\Common\EccLevel $eccLevel
|
||||||
* @property \chillerlan\QRCode\Common\MaskPattern $maskPattern
|
* @property \chillerlan\QRCode\Common\MaskPattern $maskPattern
|
||||||
* @property int $structuredAppendParity
|
* @property int $structuredAppendParity
|
||||||
* @property int $structuredAppendSequence
|
* @property int $structuredAppendSequence
|
||||||
|
* @property \chillerlan\QRCode\Detector\FinderPattern[] $finderPatterns
|
||||||
*/
|
*/
|
||||||
final class DecoderResult{
|
final class DecoderResult{
|
||||||
|
|
||||||
@@ -37,11 +38,13 @@ final class DecoderResult{
|
|||||||
private string $data = '';
|
private string $data = '';
|
||||||
private int $structuredAppendParity = -1;
|
private int $structuredAppendParity = -1;
|
||||||
private int $structuredAppendSequence = -1;
|
private int $structuredAppendSequence = -1;
|
||||||
|
/** @var \chillerlan\QRCode\Detector\FinderPattern[] */
|
||||||
|
private array $finderPatterns = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DecoderResult constructor.
|
* DecoderResult constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct(iterable $properties = null){
|
public function __construct(?iterable $properties = null){
|
||||||
|
|
||||||
if(!empty($properties)){
|
if(!empty($properties)){
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ final class ReedSolomonDecoder{
|
|||||||
while($longerBlocksStartAt >= 0){
|
while($longerBlocksStartAt >= 0){
|
||||||
$numCodewords = count($result[$longerBlocksStartAt][1]);
|
$numCodewords = count($result[$longerBlocksStartAt][1]);
|
||||||
|
|
||||||
if($numCodewords == $shorterBlocksTotalCodewords){
|
if($numCodewords === $shorterBlocksTotalCodewords){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ final class AlignmentPatternFinder{
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($i == $maxI || $stateCount[1] > $maxCount){
|
if($i === $maxI || $stateCount[1] > $maxCount){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,6 +269,7 @@ final class AlignmentPatternFinder{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// phpcs:ignore
|
||||||
if((5 * abs(($stateCount[0] + $stateCount[1] + $stateCount[2]) - $originalStateCountTotal)) >= (2 * $originalStateCountTotal)){
|
if((5 * abs(($stateCount[0] + $stateCount[1] + $stateCount[2]) - $originalStateCountTotal)) >= (2 * $originalStateCountTotal)){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ use const NAN;
|
|||||||
final class Detector{
|
final class Detector{
|
||||||
|
|
||||||
private BitMatrix $matrix;
|
private BitMatrix $matrix;
|
||||||
|
/** @var \chillerlan\QRCode\Detector\FinderPattern[] */
|
||||||
|
private array $finderPatterns = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detector constructor.
|
* Detector constructor.
|
||||||
@@ -33,11 +35,20 @@ final class Detector{
|
|||||||
$this->matrix = (new Binarizer($source))->getBlackMatrix();
|
$this->matrix = (new Binarizer($source))->getBlackMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \chillerlan\QRCode\Detector\FinderPattern[]
|
||||||
|
*/
|
||||||
|
public function getFinderPatterns():array{
|
||||||
|
return $this->finderPatterns;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detects a QR Code in an image.
|
* Detects a QR Code in an image.
|
||||||
*/
|
*/
|
||||||
public function detect():BitMatrix{
|
public function detect():BitMatrix{
|
||||||
[$bottomLeft, $topLeft, $topRight] = (new FinderPatternFinder($this->matrix))->find();
|
$this->finderPatterns = (new FinderPatternFinder($this->matrix))->find();
|
||||||
|
|
||||||
|
[$bottomLeft, $topLeft, $topRight] = $this->finderPatterns;
|
||||||
|
|
||||||
$moduleSize = $this->calculateModuleSize($topLeft, $topRight, $bottomLeft);
|
$moduleSize = $this->calculateModuleSize($topLeft, $topRight, $bottomLeft);
|
||||||
$dimension = $this->computeDimension($topLeft, $topRight, $bottomLeft, $moduleSize);
|
$dimension = $this->computeDimension($topLeft, $topRight, $bottomLeft, $moduleSize);
|
||||||
@@ -305,11 +316,11 @@ final class Detector{
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private function createTransform(
|
private function createTransform(
|
||||||
FinderPattern $nw,
|
FinderPattern $nw,
|
||||||
FinderPattern $ne,
|
FinderPattern $ne,
|
||||||
FinderPattern $sw,
|
FinderPattern $sw,
|
||||||
int $size,
|
int $size,
|
||||||
AlignmentPattern $ap = null
|
?AlignmentPattern $ap = null
|
||||||
):PerspectiveTransform{
|
):PerspectiveTransform{
|
||||||
$dimMinusThree = ($size - 3.5);
|
$dimMinusThree = ($size - 3.5);
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ final class FinderPattern extends ResultPoint{
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function __construct(float $posX, float $posY, float $estimatedModuleSize, int $count = null){
|
public function __construct(float $posX, float $posY, float $estimatedModuleSize, ?int $count = null){
|
||||||
parent::__construct($posX, $posY, $estimatedModuleSize);
|
parent::__construct($posX, $posY, $estimatedModuleSize);
|
||||||
|
|
||||||
$this->count = ($count ?? 1);
|
$this->count = ($count ?? 1);
|
||||||
|
|||||||
@@ -290,11 +290,13 @@ final class FinderPatternFinder{
|
|||||||
|
|
||||||
// Now also count down, right from center
|
// Now also count down, right from center
|
||||||
$i = 1;
|
$i = 1;
|
||||||
|
// phpcs:ignore
|
||||||
while(($centerI + $i) < $dimension && ($centerJ + $i) < $dimension && $this->matrix->check(($centerJ + $i), ($centerI + $i))){
|
while(($centerI + $i) < $dimension && ($centerJ + $i) < $dimension && $this->matrix->check(($centerJ + $i), ($centerI + $i))){
|
||||||
$stateCount[2]++;
|
$stateCount[2]++;
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// phpcs:ignore
|
||||||
while(($centerI + $i) < $dimension && ($centerJ + $i) < $dimension && !$this->matrix->check(($centerJ + $i), ($centerI + $i))){
|
while(($centerI + $i) < $dimension && ($centerJ + $i) < $dimension && !$this->matrix->check(($centerJ + $i), ($centerI + $i))){
|
||||||
$stateCount[3]++;
|
$stateCount[3]++;
|
||||||
$i++;
|
$i++;
|
||||||
@@ -304,6 +306,7 @@ final class FinderPatternFinder{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// phpcs:ignore
|
||||||
while(($centerI + $i) < $dimension && ($centerJ + $i) < $dimension && $this->matrix->check(($centerJ + $i), ($centerI + $i))){
|
while(($centerI + $i) < $dimension && ($centerJ + $i) < $dimension && $this->matrix->check(($centerJ + $i), ($centerI + $i))){
|
||||||
$stateCount[4]++;
|
$stateCount[4]++;
|
||||||
$i++;
|
$i++;
|
||||||
|
|||||||
@@ -152,15 +152,15 @@ final class GridSampler{
|
|||||||
|
|
||||||
// no need to try/catch as QRMatrix::set() will silently discard out of bounds values
|
// no need to try/catch as QRMatrix::set() will silently discard out of bounds values
|
||||||
# try{
|
# try{
|
||||||
for($x = 0; $x < $max; $x += 2){
|
for($x = 0; $x < $max; $x += 2){
|
||||||
// Black(-ish) pixel
|
// Black(-ish) pixel
|
||||||
$bits->set(
|
$bits->set(
|
||||||
intdiv($x, 2),
|
intdiv($x, 2),
|
||||||
$y,
|
$y,
|
||||||
$matrix->check((int)$this->points[$x], (int)$this->points[($x + 1)]),
|
$matrix->check((int)$this->points[$x], (int)$this->points[($x + 1)]),
|
||||||
QRMatrix::M_DATA
|
QRMatrix::M_DATA
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
# }
|
# }
|
||||||
# catch(\Throwable $aioobe){//ArrayIndexOutOfBoundsException
|
# catch(\Throwable $aioobe){//ArrayIndexOutOfBoundsException
|
||||||
// This feels wrong, but, sometimes if the finder patterns are misidentified, the resulting
|
// This feels wrong, but, sometimes if the finder patterns are misidentified, the resulting
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ final class PerspectiveTransform{
|
|||||||
/**
|
/**
|
||||||
* @return array[] [$xValues, $yValues]
|
* @return array[] [$xValues, $yValues]
|
||||||
*/
|
*/
|
||||||
public function transformPoints(array $xValues, array $yValues = null):array{
|
public function transformPoints(array $xValues, ?array $yValues = null):array{
|
||||||
$max = count($xValues);
|
$max = count($xValues);
|
||||||
|
|
||||||
if($yValues !== null){ // unused
|
if($yValues !== null){ // unused
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class QREps extends QROutputAbstract{
|
|||||||
// CMYK
|
// CMYK
|
||||||
? '%f %f %f %f C'
|
? '%f %f %f %f C'
|
||||||
// RGB
|
// RGB
|
||||||
:'%f %f %f R';
|
: '%f %f %f R';
|
||||||
|
|
||||||
return sprintf($format, ...$values);
|
return sprintf($format, ...$values);
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ class QREps extends QROutputAbstract{
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null):string{
|
public function dump(?string $file = null):string{
|
||||||
[$width, $height] = $this->getOutputDimensions();
|
[$width, $height] = $this->getOutputDimensions();
|
||||||
|
|
||||||
$eps = [
|
$eps = [
|
||||||
|
|||||||
@@ -110,7 +110,10 @@ class QRFpdf extends QROutputAbstract{
|
|||||||
* Initializes an FPDF instance
|
* Initializes an FPDF instance
|
||||||
*/
|
*/
|
||||||
protected function initFPDF():FPDF{
|
protected function initFPDF():FPDF{
|
||||||
return new FPDF('P', $this->options->fpdfMeasureUnit, $this->getOutputDimensions());
|
$fpdf = new FPDF('P', $this->options->fpdfMeasureUnit, $this->getOutputDimensions());
|
||||||
|
$fpdf->AddPage();
|
||||||
|
|
||||||
|
return $fpdf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -118,9 +121,8 @@ class QRFpdf extends QROutputAbstract{
|
|||||||
*
|
*
|
||||||
* @return string|\FPDF
|
* @return string|\FPDF
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null){
|
public function dump(?string $file = null, ?FPDF $fpdf = null){
|
||||||
$this->fpdf = $this->initFPDF();
|
$this->fpdf = ($fpdf ?? $this->initFPDF());
|
||||||
$this->fpdf->AddPage();
|
|
||||||
|
|
||||||
if($this::moduleValueIsValid($this->options->bgColor)){
|
if($this::moduleValueIsValid($this->options->bgColor)){
|
||||||
$bgColor = $this->prepareModuleValue($this->options->bgColor);
|
$bgColor = $this->prepareModuleValue($this->options->bgColor);
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ class QRGdImage extends QROutputAbstract{
|
|||||||
* @phan-suppress PhanUndeclaredTypeReturnType, PhanTypeMismatchReturn
|
* @phan-suppress PhanUndeclaredTypeReturnType, PhanTypeMismatchReturn
|
||||||
* @throws \ErrorException
|
* @throws \ErrorException
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null){
|
public function dump(?string $file = null){
|
||||||
|
|
||||||
set_error_handler(function(int $errno, string $errstr):bool{
|
set_error_handler(function(int $errno, string $errstr):bool{
|
||||||
throw new ErrorException($errstr, $errno);
|
throw new ErrorException($errstr, $errno);
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ class QRImagick extends QROutputAbstract{
|
|||||||
*
|
*
|
||||||
* @return string|\Imagick
|
* @return string|\Imagick
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null){
|
public function dump(?string $file = null){
|
||||||
$this->setBgColor();
|
$this->setBgColor();
|
||||||
|
|
||||||
$this->imagick = $this->createImage();
|
$this->imagick = $this->createImage();
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ abstract class QRMarkup extends QROutputAbstract{
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null):string{
|
public function dump(?string $file = null):string{
|
||||||
$data = $this->createMarkup($file !== null);
|
$data = $this->createMarkup($file !== null);
|
||||||
|
|
||||||
$this->saveToFile($data, $file);
|
$this->saveToFile($data, $file);
|
||||||
|
|||||||
@@ -146,18 +146,18 @@ abstract class QROutputAbstract implements QROutputInterface{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares the value for the given input ()
|
* Prepares the value for the given input (return value depends on the output class)
|
||||||
*
|
*
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*
|
*
|
||||||
* @return mixed|null return value depends on the output class
|
* @return mixed|null
|
||||||
*/
|
*/
|
||||||
abstract protected function prepareModuleValue($value);
|
abstract protected function prepareModuleValue($value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a default value for either dark or light modules
|
* Returns a default value for either dark or light modules (return value depends on the output class)
|
||||||
*
|
*
|
||||||
* @return mixed|null return value depends on the output class
|
* @return mixed|null
|
||||||
*/
|
*/
|
||||||
abstract protected function getDefaultModuleValue(bool $isDark);
|
abstract protected function getDefaultModuleValue(bool $isDark);
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ abstract class QROutputAbstract implements QROutputInterface{
|
|||||||
/**
|
/**
|
||||||
* Returns a base64 data URI for the given string and mime type
|
* Returns a base64 data URI for the given string and mime type
|
||||||
*/
|
*/
|
||||||
protected function toBase64DataURI(string $data, string $mime = null):string{
|
protected function toBase64DataURI(string $data, ?string $mime = null):string{
|
||||||
return sprintf('data:%s;base64,%s', ($mime ?? $this::MIME_TYPE), base64_encode($data));
|
return sprintf('data:%s;base64,%s', ($mime ?? $this::MIME_TYPE), base64_encode($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ abstract class QROutputAbstract implements QROutputInterface{
|
|||||||
*
|
*
|
||||||
* @throws \chillerlan\QRCode\Output\QRCodeOutputException
|
* @throws \chillerlan\QRCode\Output\QRCodeOutputException
|
||||||
*/
|
*/
|
||||||
protected function saveToFile(string $data, string $file = null):void{
|
protected function saveToFile(string $data, ?string $file = null):void{
|
||||||
|
|
||||||
if($file === null){
|
if($file === null){
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -221,6 +221,6 @@ interface QROutputInterface{
|
|||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null);
|
public function dump(?string $file = null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class QRString extends QROutputAbstract{
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null):string{
|
public function dump(?string $file = null):string{
|
||||||
|
|
||||||
switch($this->options->outputType){
|
switch($this->options->outputType){
|
||||||
case QROutputInterface::STRING_TEXT:
|
case QROutputInterface::STRING_TEXT:
|
||||||
@@ -101,7 +101,7 @@ class QRString extends QROutputAbstract{
|
|||||||
*
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
public static function ansi8(string $str, int $color, bool $background = null):string{
|
public static function ansi8(string $str, int $color, ?bool $background = null):string{
|
||||||
$color = max(0, min($color, 255));
|
$color = max(0, min($color, 255));
|
||||||
$background = ($background === true) ? 48 : 38;
|
$background = ($background === true) ? 48 : 38;
|
||||||
|
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ class QRStringJSON extends QROutputAbstract{
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
* @throws \JsonException
|
* @throws \JsonException
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null):string{
|
public function dump(?string $file = null):string{
|
||||||
$matrix = $this->matrix->getMatrix($this->options->jsonAsBooleans);
|
$matrix = $this->matrix->getMatrix($this->options->jsonAsBooleans);
|
||||||
$data = json_encode($matrix, $this->options->jsonFlags);;
|
$data = json_encode($matrix, $this->options->jsonFlags);
|
||||||
|
|
||||||
$this->saveToFile($data, $file);
|
$this->saveToFile($data, $file);
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class QRStringText extends QROutputAbstract{
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
public function dump(string $file = null):string{
|
public function dump(?string $file = null):string{
|
||||||
$lines = [];
|
$lines = [];
|
||||||
$linestart = $this->options->textLineStart;
|
$linestart = $this->options->textLineStart;
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ class QRStringText extends QROutputAbstract{
|
|||||||
*
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
public static function ansi8(string $str, int $color, bool $background = null):string{
|
public static function ansi8(string $str, int $color, ?bool $background = null):string{
|
||||||
$color = max(0, min($color, 255));
|
$color = max(0, min($color, 255));
|
||||||
$background = ($background === true) ? 48 : 38;
|
$background = ($background === true) ? 48 : 38;
|
||||||
|
|
||||||
|
|||||||
17
vendor/chillerlan/php-qrcode/src/QRCode.php
vendored
17
vendor/chillerlan/php-qrcode/src/QRCode.php
vendored
@@ -182,7 +182,7 @@ class QRCode{
|
|||||||
*
|
*
|
||||||
* PHP8: accept iterable
|
* PHP8: accept iterable
|
||||||
*/
|
*/
|
||||||
public function __construct(SettingsContainerInterface $options = null){
|
public function __construct(?SettingsContainerInterface $options = null){
|
||||||
$this->setOptions(($options ?? new QROptions));
|
$this->setOptions(($options ?? new QROptions));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,9 +202,14 @@ class QRCode{
|
|||||||
/**
|
/**
|
||||||
* Renders a QR Code for the given $data and QROptions, saves $file optionally
|
* Renders a QR Code for the given $data and QROptions, saves $file optionally
|
||||||
*
|
*
|
||||||
|
* Note: it is possible to add several data segments before calling this method with a valid $data string
|
||||||
|
* which will result in a mixed-mode QR Code with the given parameter as last element.
|
||||||
|
*
|
||||||
|
* @see https://github.com/chillerlan/php-qrcode/issues/246
|
||||||
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function render(string $data = null, string $file = null){
|
public function render(?string $data = null, ?string $file = null){
|
||||||
|
|
||||||
if($data !== null){
|
if($data !== null){
|
||||||
/** @var \chillerlan\QRCode\Data\QRDataModeInterface $dataInterface */
|
/** @var \chillerlan\QRCode\Data\QRDataModeInterface $dataInterface */
|
||||||
@@ -226,7 +231,7 @@ class QRCode{
|
|||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function renderMatrix(QRMatrix $matrix, string $file = null){
|
public function renderMatrix(QRMatrix $matrix, ?string $file = null){
|
||||||
return $this->initOutputInterface($matrix)->dump($file ?? $this->options->cachefile);
|
return $this->initOutputInterface($matrix)->dump($file ?? $this->options->cachefile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,7 +303,7 @@ class QRCode{
|
|||||||
throw new QRCodeOutputException('invalid output module');
|
throw new QRCodeOutputException('invalid output module');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!in_array(QROutputInterface::class, class_implements($outputInterface))){
|
if(!in_array(QROutputInterface::class, class_implements($outputInterface), true)){
|
||||||
throw new QRCodeOutputException('output module does not implement QROutputInterface');
|
throw new QRCodeOutputException('output module does not implement QROutputInterface');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,8 +462,6 @@ class QRCode{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads a QR Code from a given file
|
* Reads a QR Code from a given file
|
||||||
*
|
|
||||||
* @noinspection PhpUndefinedMethodInspection
|
|
||||||
*/
|
*/
|
||||||
public function readFromFile(string $path):DecoderResult{
|
public function readFromFile(string $path):DecoderResult{
|
||||||
return $this->readFromSource($this->luminanceSourceFQN::fromFile($path, $this->options));
|
return $this->readFromSource($this->luminanceSourceFQN::fromFile($path, $this->options));
|
||||||
@@ -466,8 +469,6 @@ class QRCode{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads a QR Code from the given data blob
|
* Reads a QR Code from the given data blob
|
||||||
*
|
|
||||||
* @noinspection PhpUndefinedMethodInspection
|
|
||||||
*/
|
*/
|
||||||
public function readFromBlob(string $blob):DecoderResult{
|
public function readFromBlob(string $blob):DecoderResult{
|
||||||
return $this->readFromSource($this->luminanceSourceFQN::fromBlob($blob, $this->options));
|
return $this->readFromSource($this->luminanceSourceFQN::fromBlob($blob, $this->options));
|
||||||
|
|||||||
@@ -19,23 +19,23 @@ A container class for settings objects - decouple configuration logic from your
|
|||||||
[license]: https://github.com/chillerlan/php-settings-container/blob/main/LICENSE
|
[license]: https://github.com/chillerlan/php-settings-container/blob/main/LICENSE
|
||||||
[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-settings-container.svg?logo=codecov
|
[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-settings-container.svg?logo=codecov
|
||||||
[coverage]: https://codecov.io/github/chillerlan/php-settings-container
|
[coverage]: https://codecov.io/github/chillerlan/php-settings-container
|
||||||
[codacy-badge]: https://img.shields.io/codacy/grade/bd2467799e2943d2853ce3ebad5af490/v2.x-php7.4?logo=codacy
|
[codacy-badge]: https://img.shields.io/codacy/grade/bd2467799e2943d2853ce3ebad5af490/main?logo=codacy
|
||||||
[codacy]: https://app.codacy.com/gh/chillerlan/php-settings-container/dashboard?branch=v2.x-php7.4
|
[codacy]: https://www.codacy.com/gh/chillerlan/php-settings-container/dashboard?branch=main
|
||||||
[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-settings-container.svg?logo=packagist
|
[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-settings-container.svg?logo=packagist
|
||||||
[downloads]: https://packagist.org/packages/chillerlan/php-settings-container/stats
|
[downloads]: https://packagist.org/packages/chillerlan/php-settings-container/stats
|
||||||
[gh-action-badge]: https://github.com/chillerlan/php-settings-container/workflows/CI/badge.svg
|
[gh-action-badge]: https://img.shields.io/github/actions/workflow/status/chillerlan/php-settings-container/ci.yml?branch=main&logo=github
|
||||||
[gh-action]: https://github.com/chillerlan/php-settings-container/actions?query=workflow%3A%22CI%22
|
[gh-action]: https://github.com/chillerlan/php-settings-container/actions/workflows/ci.yml?query=branch%3Amain
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
**requires [composer](https://getcomposer.org)**
|
**requires [composer](https://getcomposer.org)**
|
||||||
|
|
||||||
*composer.json* (note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^2.1` - see [releases](https://github.com/chillerlan/php-settings-container/releases) for valid versions)
|
*composer.json* (note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^3.0` - see [releases](https://github.com/chillerlan/php-settings-container/releases) for valid versions)
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.4 || ^8.0",
|
"php": "^8.1",
|
||||||
"chillerlan/php-settings-container": "dev-main"
|
"chillerlan/php-settings-container": "dev-main"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,18 +45,14 @@ Profit!
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
The `SettingsContainerInterface` (wrapped in`SettingsContainerAbstract` ) provides plug-in functionality for immutable object properties and adds some fancy, like loading/saving JSON, arrays etc.
|
The `SettingsContainerInterface` (wrapped in`SettingsContainerAbstract`) provides plug-in functionality for immutable object properties and adds some fancy, like loading/saving JSON, arrays etc.
|
||||||
It takes an `iterable` as the only constructor argument and calls a method with the trait's name on invocation (`MyTrait::MyTrait()`) for each used trait.
|
It takes an `iterable` as the only constructor argument and calls a method with the trait's name on invocation (`MyTrait::MyTrait()`) for each used trait.
|
||||||
|
|
||||||
|
A PHPStan ruleset to exclude errors generated by accessing magic properties on `SettingsContainerInterface` can be found in `rules-magic-access.neon`.
|
||||||
|
|
||||||
|
|
||||||
### Simple usage
|
### Simple usage
|
||||||
```php
|
```php
|
||||||
class MyContainer extends SettingsContainerAbstract{
|
|
||||||
protected $foo;
|
|
||||||
protected $bar;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
Typed properties in PHP 7.4+:
|
|
||||||
```php
|
|
||||||
class MyContainer extends SettingsContainerAbstract{
|
class MyContainer extends SettingsContainerAbstract{
|
||||||
protected string $foo;
|
protected string $foo;
|
||||||
protected string $bar;
|
protected string $bar;
|
||||||
@@ -64,7 +60,7 @@ class MyContainer extends SettingsContainerAbstract{
|
|||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// use it just like a \stdClass
|
// use it just like a \stdClass (except the properties are fixed)
|
||||||
$container = new MyContainer;
|
$container = new MyContainer;
|
||||||
$container->foo = 'what';
|
$container->foo = 'what';
|
||||||
$container->bar = 'foo';
|
$container->bar = 'foo';
|
||||||
@@ -90,25 +86,36 @@ var_dump($container->nope); // -> null
|
|||||||
|
|
||||||
### Advanced usage
|
### Advanced usage
|
||||||
```php
|
```php
|
||||||
|
// from library 1
|
||||||
trait SomeOptions{
|
trait SomeOptions{
|
||||||
protected $foo;
|
protected string $foo;
|
||||||
protected $what;
|
protected string $what;
|
||||||
|
|
||||||
// this method will be called in SettingsContainerAbstract::construct()
|
// this method will be called in SettingsContainerAbstract::construct()
|
||||||
// after the properties have been set
|
// after the properties have been set
|
||||||
protected function SomeOptions(){
|
protected function SomeOptions():void{
|
||||||
// just some constructor stuff...
|
// just some constructor stuff...
|
||||||
$this->foo = strtoupper($this->foo);
|
$this->foo = strtoupper($this->foo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* special prefixed magic setters & getters
|
||||||
|
*/
|
||||||
|
|
||||||
// this method will be called from __set() when property $what is set
|
// this method will be called from __set() when property $what is set
|
||||||
protected function set_what(string $value){
|
protected function set_what(string $value):void{
|
||||||
$this->what = md5($value);
|
$this->what = md5($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this method is called on __get() for the property $what
|
||||||
|
protected function get_what():string{
|
||||||
|
return 'hash: '.$this->what;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// from library 2
|
||||||
trait MoreOptions{
|
trait MoreOptions{
|
||||||
protected $bar = 'whatever'; // provide default values
|
protected string $bar = 'whatever'; // provide default values
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -129,27 +136,31 @@ var_dump($container->foo); // -> WHATEVER (constructor ran strtoupper on the val
|
|||||||
var_dump($container->bar); // -> nothing
|
var_dump($container->bar); // -> nothing
|
||||||
|
|
||||||
$container->what = 'some value';
|
$container->what = 'some value';
|
||||||
var_dump($container->what); // -> md5 hash of "some value"
|
var_dump($container->what); // -> hash: 5946210c9e93ae37891dfe96c3e39614 (custom getter added "hash: ")
|
||||||
```
|
```
|
||||||
|
|
||||||
### API
|
### API
|
||||||
|
|
||||||
#### [`SettingsContainerAbstract`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerAbstract.php)
|
#### [`SettingsContainerAbstract`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerAbstract.php)
|
||||||
|
|
||||||
method | return | info
|
| method | return | info |
|
||||||
-------- | ---- | -----------
|
|--------------------------------------------|------------------------------|---------------------------------------------------------------------------------------------------------------------|
|
||||||
`__construct(iterable $properties = null)` | - | calls `construct()` internally after the properties have been set
|
| `__construct(iterable $properties = null)` | - | calls `construct()` internally after the properties have been set |
|
||||||
(protected) `construct()` | void | calls a method with trait name as replacement constructor for each used trait
|
| (protected) `construct()` | void | calls a method with trait name as replacement constructor for each used trait |
|
||||||
`__get(string $property)` | mixed | calls `$this->{'get_'.$property}()` if such a method exists
|
| `__get(string $property)` | mixed | calls `$this->{'get_'.$property}()` if such a method exists |
|
||||||
`__set(string $property, $value)` | void | calls `$this->{'set_'.$property}($value)` if such a method exists
|
| `__set(string $property, $value)` | void | calls `$this->{'set_'.$property}($value)` if such a method exists |
|
||||||
`__isset(string $property)` | bool |
|
| `__isset(string $property)` | bool | |
|
||||||
`__unset(string $property)` | void |
|
| `__unset(string $property)` | void | |
|
||||||
`__toString()` | string | a JSON string
|
| `__toString()` | string | a JSON string |
|
||||||
`toArray()` | array |
|
| `toArray()` | array | |
|
||||||
`fromIterable(iterable $properties)` | `SettingsContainerInterface` |
|
| `fromIterable(iterable $properties)` | `SettingsContainerInterface` | |
|
||||||
`toJSON(int $jsonOptions = null)` | string | accepts [JSON options constants](http://php.net/manual/json.constants.php)
|
| `toJSON(int $jsonOptions = null)` | string | accepts [JSON options constants](http://php.net/manual/json.constants.php) |
|
||||||
`fromJSON(string $json)` | `SettingsContainerInterface` |
|
| `fromJSON(string $json)` | `SettingsContainerInterface` | |
|
||||||
`jsonSerialize()` | mixed | implements the [`JsonSerializable`](https://www.php.net/manual/en/jsonserializable.jsonserialize.php) interface
|
| `jsonSerialize()` | mixed | implements the [`JsonSerializable`](https://www.php.net/manual/en/jsonserializable.jsonserialize.php) interface |
|
||||||
|
| `serialize()` | string | implements the [`Serializable`](https://www.php.net/manual/en/serializable.serialize.php) interface |
|
||||||
|
| `unserialize(string $data)` | void | implements the [`Serializable`](https://www.php.net/manual/en/serializable.unserialize.php) interface |
|
||||||
|
| `__serialize()` | array | implements the [`Serializable`](https://www.php.net/manual/en/language.oop5.magic.php#object.serialize) interface |
|
||||||
|
| `__unserialize(array $data)` | void | implements the [`Serializable`](https://www.php.net/manual/en/language.oop5.magic.php#object.unserialize) interface |
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
This might be either an utterly genius or completely stupid idea - you decide. However, i like it and it works.
|
This might be either an utterly genius or completely stupid idea - you decide. However, i like it and it works.
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "chillerlan/php-settings-container",
|
"name": "chillerlan/php-settings-container",
|
||||||
"description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
|
"description": "A container class for immutable settings objects. Not a DI container.",
|
||||||
"homepage": "https://github.com/chillerlan/php-settings-container",
|
"homepage": "https://github.com/chillerlan/php-settings-container",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"php7", "helper", "container", "settings", "configuration"
|
"helper", "container", "settings", "configuration"
|
||||||
],
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
@@ -20,28 +20,29 @@
|
|||||||
"source": "https://github.com/chillerlan/php-settings-container"
|
"source": "https://github.com/chillerlan/php-settings-container"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.4 || ^8.0",
|
"php": "^8.1",
|
||||||
"ext-json": "*"
|
"ext-json": "*"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phan/phan": "^5.4",
|
"phpmd/phpmd": "^2.15",
|
||||||
"phpmd/phpmd": "^2.13",
|
"phpstan/phpstan": "^1.11",
|
||||||
"phpunit/phpunit": "^9.6",
|
"phpstan/phpstan-deprecation-rules": "^1.2",
|
||||||
"phpcsstandards/php_codesniffer": "^3.8"
|
"phpunit/phpunit": "^10.5",
|
||||||
|
"squizlabs/php_codesniffer": "^3.10"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"chillerlan\\Settings\\": "src/"
|
"chillerlan\\Settings\\": "src"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"chillerlan\\SettingsTest\\": "tests/"
|
"chillerlan\\SettingsTest\\": "tests"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"phpunit": "@php vendor/bin/phpunit",
|
"phpunit": "@php vendor/bin/phpunit",
|
||||||
"phan": "@php vendor/bin/phan"
|
"phpstan": "@php vendor/bin/phpstan"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"lock": false,
|
"lock": false,
|
||||||
|
|||||||
4
vendor/chillerlan/php-settings-container/rules-magic-access.neon
vendored
Normal file
4
vendor/chillerlan/php-settings-container/rules-magic-access.neon
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
parameters:
|
||||||
|
ignoreErrors:
|
||||||
|
# yes, these are magic
|
||||||
|
- message: "#^Access to an undefined property chillerlan\\\\Settings\\\\SettingsContainerInterface\\:\\:\\$[\\w]+\\.$#"
|
||||||
@@ -7,20 +7,23 @@
|
|||||||
* @copyright 2018 Smiley
|
* @copyright 2018 Smiley
|
||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace chillerlan\Settings;
|
namespace chillerlan\Settings;
|
||||||
|
|
||||||
use ReflectionClass, ReflectionProperty;
|
use InvalidArgumentException, JsonException, ReflectionClass, ReflectionProperty;
|
||||||
|
use function array_keys, get_object_vars, is_object, json_decode, json_encode,
|
||||||
use function get_object_vars, json_decode, json_encode, method_exists, property_exists;
|
json_last_error_msg, method_exists, property_exists, serialize, unserialize;
|
||||||
use const JSON_THROW_ON_ERROR;
|
use const JSON_THROW_ON_ERROR;
|
||||||
|
|
||||||
abstract class SettingsContainerAbstract implements SettingsContainerInterface{
|
abstract class SettingsContainerAbstract implements SettingsContainerInterface{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SettingsContainerAbstract constructor.
|
* SettingsContainerAbstract constructor.
|
||||||
|
*
|
||||||
|
* @phpstan-param array<string, mixed> $properties
|
||||||
*/
|
*/
|
||||||
public function __construct(iterable $properties = null){
|
public function __construct(iterable|null $properties = null){
|
||||||
|
|
||||||
if(!empty($properties)){
|
if(!empty($properties)){
|
||||||
$this->fromIterable($properties);
|
$this->fromIterable($properties);
|
||||||
@@ -49,7 +52,7 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
|
|||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function __get(string $property){
|
public function __get(string $property):mixed{
|
||||||
|
|
||||||
if(!property_exists($this, $property) || $this->isPrivate($property)){
|
if(!property_exists($this, $property) || $this->isPrivate($property)){
|
||||||
return null;
|
return null;
|
||||||
@@ -67,7 +70,7 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
|
|||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function __set(string $property, $value):void{
|
public function __set(string $property, mixed $value):void{
|
||||||
|
|
||||||
if(!property_exists($this, $property) || $this->isPrivate($property)){
|
if(!property_exists($this, $property) || $this->isPrivate($property)){
|
||||||
return;
|
return;
|
||||||
@@ -120,13 +123,19 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
|
|||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function toArray():array{
|
public function toArray():array{
|
||||||
return get_object_vars($this);
|
$properties = [];
|
||||||
|
|
||||||
|
foreach(array_keys(get_object_vars($this)) as $key){
|
||||||
|
$properties[$key] = $this->__get($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function fromIterable(iterable $properties):SettingsContainerInterface{
|
public function fromIterable(iterable $properties):static{
|
||||||
|
|
||||||
foreach($properties as $key => $value){
|
foreach($properties as $key => $value){
|
||||||
$this->__set($key, $value);
|
$this->__set($key, $value);
|
||||||
@@ -138,14 +147,21 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
|
|||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function toJSON(int $jsonOptions = null):string{
|
public function toJSON(int|null $jsonOptions = null):string{
|
||||||
return json_encode($this, ($jsonOptions ?? 0));
|
$json = json_encode($this, ($jsonOptions ?? 0));
|
||||||
|
|
||||||
|
if($json === false){
|
||||||
|
throw new JsonException(json_last_error_msg());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $json;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function fromJSON(string $json):SettingsContainerInterface{
|
public function fromJSON(string $json):static{
|
||||||
|
/** @phpstan-var array<string, mixed> $data */
|
||||||
$data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
|
$data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
return $this->fromIterable($data);
|
return $this->fromIterable($data);
|
||||||
@@ -153,11 +169,84 @@ abstract class SettingsContainerAbstract implements SettingsContainerInterface{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
* @phan-suppress PhanUndeclaredClassAttribute
|
* @return array<string, mixed>
|
||||||
*/
|
*/
|
||||||
#[\ReturnTypeWillChange]
|
|
||||||
public function jsonSerialize():array{
|
public function jsonSerialize():array{
|
||||||
return $this->toArray();
|
return $this->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a serialized string representation of the object in its current state (except static/readonly properties)
|
||||||
|
*
|
||||||
|
* @inheritdoc
|
||||||
|
* @see \chillerlan\Settings\SettingsContainerInterface::toArray()
|
||||||
|
*/
|
||||||
|
public function serialize():string{
|
||||||
|
return serialize($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restores the data (except static/readonly properties) from the given serialized object to the current instance
|
||||||
|
*
|
||||||
|
* @inheritdoc
|
||||||
|
* @see \chillerlan\Settings\SettingsContainerInterface::fromIterable()
|
||||||
|
*/
|
||||||
|
public function unserialize(string $data):void{
|
||||||
|
$obj = unserialize($data);
|
||||||
|
|
||||||
|
if($obj === false || !is_object($obj)){
|
||||||
|
throw new InvalidArgumentException('The given serialized string is invalid');
|
||||||
|
}
|
||||||
|
|
||||||
|
$reflection = new ReflectionClass($obj);
|
||||||
|
|
||||||
|
if(!$reflection->isInstance($this)){
|
||||||
|
throw new InvalidArgumentException('The unserialized object does not match the class of this container');
|
||||||
|
}
|
||||||
|
|
||||||
|
$properties = $reflection->getProperties(~(ReflectionProperty::IS_STATIC | ReflectionProperty::IS_READONLY));
|
||||||
|
|
||||||
|
foreach($properties as $reflectionProperty){
|
||||||
|
$this->{$reflectionProperty->name} = $reflectionProperty->getValue($obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a serialized string representation of the object in its current state (except static/readonly properties)
|
||||||
|
*
|
||||||
|
* @inheritdoc
|
||||||
|
* @see \chillerlan\Settings\SettingsContainerInterface::toArray()
|
||||||
|
*/
|
||||||
|
public function __serialize():array{
|
||||||
|
|
||||||
|
$properties = (new ReflectionClass($this))
|
||||||
|
->getProperties(~(ReflectionProperty::IS_STATIC | ReflectionProperty::IS_READONLY))
|
||||||
|
;
|
||||||
|
|
||||||
|
$data = [];
|
||||||
|
|
||||||
|
foreach($properties as $reflectionProperty){
|
||||||
|
$data[$reflectionProperty->name] = $reflectionProperty->getValue($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restores the data from the given array to the current instance
|
||||||
|
*
|
||||||
|
* @inheritdoc
|
||||||
|
* @see \chillerlan\Settings\SettingsContainerInterface::fromIterable()
|
||||||
|
*
|
||||||
|
* @param array<string, mixed> $data
|
||||||
|
*/
|
||||||
|
public function __unserialize(array $data):void{
|
||||||
|
|
||||||
|
foreach($data as $key => $value){
|
||||||
|
$this->{$key} = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,30 +7,28 @@
|
|||||||
* @copyright 2018 Smiley
|
* @copyright 2018 Smiley
|
||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace chillerlan\Settings;
|
namespace chillerlan\Settings;
|
||||||
|
|
||||||
use JsonSerializable;
|
use JsonSerializable, Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* a generic container with magic getter and setter
|
* a generic container with magic getter and setter
|
||||||
*/
|
*/
|
||||||
interface SettingsContainerInterface extends JsonSerializable{
|
interface SettingsContainerInterface extends JsonSerializable, Serializable{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the value of $property
|
* Retrieve the value of $property
|
||||||
*
|
*
|
||||||
* @return mixed|null
|
* @return mixed|null
|
||||||
*/
|
*/
|
||||||
public function __get(string $property);
|
public function __get(string $property):mixed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set $property to $value while avoiding private and non-existing properties
|
* Set $property to $value while avoiding private and non-existing properties
|
||||||
*
|
|
||||||
* @param string $property
|
|
||||||
* @param mixed $value
|
|
||||||
*/
|
*/
|
||||||
public function __set(string $property, $value):void;
|
public function __set(string $property, mixed $value):void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if $property is set (aka. not null), excluding private properties
|
* Checks if $property is set (aka. not null), excluding private properties
|
||||||
@@ -43,32 +41,46 @@ interface SettingsContainerInterface extends JsonSerializable{
|
|||||||
public function __unset(string $property):void;
|
public function __unset(string $property):void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see SettingsContainerInterface::toJSON()
|
* @see \chillerlan\Settings\SettingsContainerInterface::toJSON()
|
||||||
*/
|
*/
|
||||||
public function __toString():string;
|
public function __toString():string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array representation of the settings object
|
* Returns an array representation of the settings object
|
||||||
|
*
|
||||||
|
* The values will be run through the magic __get(), which may also call custom getters.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
*/
|
*/
|
||||||
public function toArray():array;
|
public function toArray():array;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets properties from a given iterable
|
* Sets properties from a given iterable
|
||||||
|
*
|
||||||
|
* The values will be run through the magic __set(), which may also call custom setters.
|
||||||
|
*
|
||||||
|
* @phpstan-param array<string, mixed> $properties
|
||||||
*/
|
*/
|
||||||
public function fromIterable(iterable $properties):SettingsContainerInterface;
|
public function fromIterable(iterable $properties):static;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a JSON representation of the settings object
|
* Returns a JSON representation of the settings object
|
||||||
|
*
|
||||||
* @see \json_encode()
|
* @see \json_encode()
|
||||||
|
* @see \chillerlan\Settings\SettingsContainerInterface::toArray()
|
||||||
|
*
|
||||||
|
* @throws \JsonException
|
||||||
*/
|
*/
|
||||||
public function toJSON(int $jsonOptions = null):string;
|
public function toJSON(int|null $jsonOptions = null):string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets properties from a given JSON string
|
* Sets properties from a given JSON string
|
||||||
*
|
*
|
||||||
|
* @see \chillerlan\Settings\SettingsContainerInterface::fromIterable()
|
||||||
|
*
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
* @throws \JsonException
|
* @throws \JsonException
|
||||||
*/
|
*/
|
||||||
public function fromJSON(string $json):SettingsContainerInterface;
|
public function fromJSON(string $json):static;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
198
vendor/composer/ClassLoader.php
vendored
198
vendor/composer/ClassLoader.php
vendored
@@ -42,21 +42,76 @@ namespace Composer\Autoload;
|
|||||||
*/
|
*/
|
||||||
class ClassLoader
|
class ClassLoader
|
||||||
{
|
{
|
||||||
|
/** @var \Closure(string):void */
|
||||||
|
private static $includeFile;
|
||||||
|
|
||||||
|
/** @var string|null */
|
||||||
|
private $vendorDir;
|
||||||
|
|
||||||
// PSR-4
|
// PSR-4
|
||||||
|
/**
|
||||||
|
* @var array<string, array<string, int>>
|
||||||
|
*/
|
||||||
private $prefixLengthsPsr4 = array();
|
private $prefixLengthsPsr4 = array();
|
||||||
|
/**
|
||||||
|
* @var array<string, list<string>>
|
||||||
|
*/
|
||||||
private $prefixDirsPsr4 = array();
|
private $prefixDirsPsr4 = array();
|
||||||
|
/**
|
||||||
|
* @var list<string>
|
||||||
|
*/
|
||||||
private $fallbackDirsPsr4 = array();
|
private $fallbackDirsPsr4 = array();
|
||||||
|
|
||||||
// PSR-0
|
// PSR-0
|
||||||
|
/**
|
||||||
|
* List of PSR-0 prefixes
|
||||||
|
*
|
||||||
|
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
|
||||||
|
*
|
||||||
|
* @var array<string, array<string, list<string>>>
|
||||||
|
*/
|
||||||
private $prefixesPsr0 = array();
|
private $prefixesPsr0 = array();
|
||||||
|
/**
|
||||||
|
* @var list<string>
|
||||||
|
*/
|
||||||
private $fallbackDirsPsr0 = array();
|
private $fallbackDirsPsr0 = array();
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
private $useIncludePath = false;
|
private $useIncludePath = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string, string>
|
||||||
|
*/
|
||||||
private $classMap = array();
|
private $classMap = array();
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
private $classMapAuthoritative = false;
|
private $classMapAuthoritative = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string, bool>
|
||||||
|
*/
|
||||||
private $missingClasses = array();
|
private $missingClasses = array();
|
||||||
|
|
||||||
|
/** @var string|null */
|
||||||
private $apcuPrefix;
|
private $apcuPrefix;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string, self>
|
||||||
|
*/
|
||||||
|
private static $registeredLoaders = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string|null $vendorDir
|
||||||
|
*/
|
||||||
|
public function __construct($vendorDir = null)
|
||||||
|
{
|
||||||
|
$this->vendorDir = $vendorDir;
|
||||||
|
self::initializeIncludeClosure();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array<string, list<string>>
|
||||||
|
*/
|
||||||
public function getPrefixes()
|
public function getPrefixes()
|
||||||
{
|
{
|
||||||
if (!empty($this->prefixesPsr0)) {
|
if (!empty($this->prefixesPsr0)) {
|
||||||
@@ -66,28 +121,42 @@ class ClassLoader
|
|||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array<string, list<string>>
|
||||||
|
*/
|
||||||
public function getPrefixesPsr4()
|
public function getPrefixesPsr4()
|
||||||
{
|
{
|
||||||
return $this->prefixDirsPsr4;
|
return $this->prefixDirsPsr4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return list<string>
|
||||||
|
*/
|
||||||
public function getFallbackDirs()
|
public function getFallbackDirs()
|
||||||
{
|
{
|
||||||
return $this->fallbackDirsPsr0;
|
return $this->fallbackDirsPsr0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return list<string>
|
||||||
|
*/
|
||||||
public function getFallbackDirsPsr4()
|
public function getFallbackDirsPsr4()
|
||||||
{
|
{
|
||||||
return $this->fallbackDirsPsr4;
|
return $this->fallbackDirsPsr4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array<string, string> Array of classname => path
|
||||||
|
*/
|
||||||
public function getClassMap()
|
public function getClassMap()
|
||||||
{
|
{
|
||||||
return $this->classMap;
|
return $this->classMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $classMap Class to filename map
|
* @param array<string, string> $classMap Class to filename map
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function addClassMap(array $classMap)
|
public function addClassMap(array $classMap)
|
||||||
{
|
{
|
||||||
@@ -102,22 +171,25 @@ class ClassLoader
|
|||||||
* Registers a set of PSR-0 directories for a given prefix, either
|
* Registers a set of PSR-0 directories for a given prefix, either
|
||||||
* appending or prepending to the ones previously set for this prefix.
|
* appending or prepending to the ones previously set for this prefix.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix
|
* @param string $prefix The prefix
|
||||||
* @param array|string $paths The PSR-0 root directories
|
* @param list<string>|string $paths The PSR-0 root directories
|
||||||
* @param bool $prepend Whether to prepend the directories
|
* @param bool $prepend Whether to prepend the directories
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function add($prefix, $paths, $prepend = false)
|
public function add($prefix, $paths, $prepend = false)
|
||||||
{
|
{
|
||||||
|
$paths = (array) $paths;
|
||||||
if (!$prefix) {
|
if (!$prefix) {
|
||||||
if ($prepend) {
|
if ($prepend) {
|
||||||
$this->fallbackDirsPsr0 = array_merge(
|
$this->fallbackDirsPsr0 = array_merge(
|
||||||
(array) $paths,
|
$paths,
|
||||||
$this->fallbackDirsPsr0
|
$this->fallbackDirsPsr0
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->fallbackDirsPsr0 = array_merge(
|
$this->fallbackDirsPsr0 = array_merge(
|
||||||
$this->fallbackDirsPsr0,
|
$this->fallbackDirsPsr0,
|
||||||
(array) $paths
|
$paths
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,19 +198,19 @@ class ClassLoader
|
|||||||
|
|
||||||
$first = $prefix[0];
|
$first = $prefix[0];
|
||||||
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
||||||
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
$this->prefixesPsr0[$first][$prefix] = $paths;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($prepend) {
|
if ($prepend) {
|
||||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||||
(array) $paths,
|
$paths,
|
||||||
$this->prefixesPsr0[$first][$prefix]
|
$this->prefixesPsr0[$first][$prefix]
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||||
$this->prefixesPsr0[$first][$prefix],
|
$this->prefixesPsr0[$first][$prefix],
|
||||||
(array) $paths
|
$paths
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,25 +219,28 @@ class ClassLoader
|
|||||||
* Registers a set of PSR-4 directories for a given namespace, either
|
* Registers a set of PSR-4 directories for a given namespace, either
|
||||||
* appending or prepending to the ones previously set for this namespace.
|
* appending or prepending to the ones previously set for this namespace.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
* @param array|string $paths The PSR-4 base directories
|
* @param list<string>|string $paths The PSR-4 base directories
|
||||||
* @param bool $prepend Whether to prepend the directories
|
* @param bool $prepend Whether to prepend the directories
|
||||||
*
|
*
|
||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function addPsr4($prefix, $paths, $prepend = false)
|
public function addPsr4($prefix, $paths, $prepend = false)
|
||||||
{
|
{
|
||||||
|
$paths = (array) $paths;
|
||||||
if (!$prefix) {
|
if (!$prefix) {
|
||||||
// Register directories for the root namespace.
|
// Register directories for the root namespace.
|
||||||
if ($prepend) {
|
if ($prepend) {
|
||||||
$this->fallbackDirsPsr4 = array_merge(
|
$this->fallbackDirsPsr4 = array_merge(
|
||||||
(array) $paths,
|
$paths,
|
||||||
$this->fallbackDirsPsr4
|
$this->fallbackDirsPsr4
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->fallbackDirsPsr4 = array_merge(
|
$this->fallbackDirsPsr4 = array_merge(
|
||||||
$this->fallbackDirsPsr4,
|
$this->fallbackDirsPsr4,
|
||||||
(array) $paths
|
$paths
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
||||||
@@ -175,18 +250,18 @@ class ClassLoader
|
|||||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||||
}
|
}
|
||||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
$this->prefixDirsPsr4[$prefix] = $paths;
|
||||||
} elseif ($prepend) {
|
} elseif ($prepend) {
|
||||||
// Prepend directories for an already registered namespace.
|
// Prepend directories for an already registered namespace.
|
||||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||||
(array) $paths,
|
$paths,
|
||||||
$this->prefixDirsPsr4[$prefix]
|
$this->prefixDirsPsr4[$prefix]
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// Append directories for an already registered namespace.
|
// Append directories for an already registered namespace.
|
||||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||||
$this->prefixDirsPsr4[$prefix],
|
$this->prefixDirsPsr4[$prefix],
|
||||||
(array) $paths
|
$paths
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -195,8 +270,10 @@ class ClassLoader
|
|||||||
* Registers a set of PSR-0 directories for a given prefix,
|
* Registers a set of PSR-0 directories for a given prefix,
|
||||||
* replacing any others previously set for this prefix.
|
* replacing any others previously set for this prefix.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix
|
* @param string $prefix The prefix
|
||||||
* @param array|string $paths The PSR-0 base directories
|
* @param list<string>|string $paths The PSR-0 base directories
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function set($prefix, $paths)
|
public function set($prefix, $paths)
|
||||||
{
|
{
|
||||||
@@ -211,10 +288,12 @@ class ClassLoader
|
|||||||
* Registers a set of PSR-4 directories for a given namespace,
|
* Registers a set of PSR-4 directories for a given namespace,
|
||||||
* replacing any others previously set for this namespace.
|
* replacing any others previously set for this namespace.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
* @param array|string $paths The PSR-4 base directories
|
* @param list<string>|string $paths The PSR-4 base directories
|
||||||
*
|
*
|
||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setPsr4($prefix, $paths)
|
public function setPsr4($prefix, $paths)
|
||||||
{
|
{
|
||||||
@@ -234,6 +313,8 @@ class ClassLoader
|
|||||||
* Turns on searching the include path for class files.
|
* Turns on searching the include path for class files.
|
||||||
*
|
*
|
||||||
* @param bool $useIncludePath
|
* @param bool $useIncludePath
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setUseIncludePath($useIncludePath)
|
public function setUseIncludePath($useIncludePath)
|
||||||
{
|
{
|
||||||
@@ -256,6 +337,8 @@ class ClassLoader
|
|||||||
* that have not been registered with the class map.
|
* that have not been registered with the class map.
|
||||||
*
|
*
|
||||||
* @param bool $classMapAuthoritative
|
* @param bool $classMapAuthoritative
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||||
{
|
{
|
||||||
@@ -276,6 +359,8 @@ class ClassLoader
|
|||||||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||||
*
|
*
|
||||||
* @param string|null $apcuPrefix
|
* @param string|null $apcuPrefix
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setApcuPrefix($apcuPrefix)
|
public function setApcuPrefix($apcuPrefix)
|
||||||
{
|
{
|
||||||
@@ -296,33 +381,55 @@ class ClassLoader
|
|||||||
* Registers this instance as an autoloader.
|
* Registers this instance as an autoloader.
|
||||||
*
|
*
|
||||||
* @param bool $prepend Whether to prepend the autoloader or not
|
* @param bool $prepend Whether to prepend the autoloader or not
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function register($prepend = false)
|
public function register($prepend = false)
|
||||||
{
|
{
|
||||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||||
|
|
||||||
|
if (null === $this->vendorDir) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($prepend) {
|
||||||
|
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
||||||
|
} else {
|
||||||
|
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||||
|
self::$registeredLoaders[$this->vendorDir] = $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregisters this instance as an autoloader.
|
* Unregisters this instance as an autoloader.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function unregister()
|
public function unregister()
|
||||||
{
|
{
|
||||||
spl_autoload_unregister(array($this, 'loadClass'));
|
spl_autoload_unregister(array($this, 'loadClass'));
|
||||||
|
|
||||||
|
if (null !== $this->vendorDir) {
|
||||||
|
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the given class or interface.
|
* Loads the given class or interface.
|
||||||
*
|
*
|
||||||
* @param string $class The name of the class
|
* @param string $class The name of the class
|
||||||
* @return bool|null True if loaded, null otherwise
|
* @return true|null True if loaded, null otherwise
|
||||||
*/
|
*/
|
||||||
public function loadClass($class)
|
public function loadClass($class)
|
||||||
{
|
{
|
||||||
if ($file = $this->findFile($class)) {
|
if ($file = $this->findFile($class)) {
|
||||||
includeFile($file);
|
$includeFile = self::$includeFile;
|
||||||
|
$includeFile($file);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -367,6 +474,21 @@ class ClassLoader
|
|||||||
return $file;
|
return $file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the currently registered loaders keyed by their corresponding vendor directories.
|
||||||
|
*
|
||||||
|
* @return array<string, self>
|
||||||
|
*/
|
||||||
|
public static function getRegisteredLoaders()
|
||||||
|
{
|
||||||
|
return self::$registeredLoaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $class
|
||||||
|
* @param string $ext
|
||||||
|
* @return string|false
|
||||||
|
*/
|
||||||
private function findFileWithExtension($class, $ext)
|
private function findFileWithExtension($class, $ext)
|
||||||
{
|
{
|
||||||
// PSR-4 lookup
|
// PSR-4 lookup
|
||||||
@@ -432,14 +554,26 @@ class ClassLoader
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scope isolated include.
|
* @return void
|
||||||
*
|
*/
|
||||||
* Prevents access to $this/self from included files.
|
private static function initializeIncludeClosure()
|
||||||
*/
|
{
|
||||||
function includeFile($file)
|
if (self::$includeFile !== null) {
|
||||||
{
|
return;
|
||||||
include $file;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope isolated include.
|
||||||
|
*
|
||||||
|
* Prevents access to $this/self from included files.
|
||||||
|
*
|
||||||
|
* @param string $file
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
self::$includeFile = \Closure::bind(static function($file) {
|
||||||
|
include $file;
|
||||||
|
}, null, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
671
vendor/composer/InstalledVersions.php
vendored
671
vendor/composer/InstalledVersions.php
vendored
@@ -1,346 +1,359 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Composer.
|
||||||
|
*
|
||||||
|
* (c) Nils Adermann <naderman@naderman.de>
|
||||||
|
* Jordi Boggiano <j.boggiano@seld.be>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
namespace Composer;
|
namespace Composer;
|
||||||
|
|
||||||
|
use Composer\Autoload\ClassLoader;
|
||||||
use Composer\Semver\VersionParser;
|
use Composer\Semver\VersionParser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is copied in every Composer installed project and available to all
|
||||||
|
*
|
||||||
|
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
||||||
|
*
|
||||||
|
* To require its presence, you can require `composer-runtime-api ^2.0`
|
||||||
|
*
|
||||||
|
* @final
|
||||||
|
*/
|
||||||
class InstalledVersions
|
class InstalledVersions
|
||||||
{
|
{
|
||||||
private static $installed = array (
|
/**
|
||||||
'root' =>
|
* @var mixed[]|null
|
||||||
array (
|
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||||
'pretty_version' => '1.0.0+no-version-set',
|
*/
|
||||||
'version' => '1.0.0.0',
|
private static $installed;
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => NULL,
|
|
||||||
'name' => '__root__',
|
|
||||||
),
|
|
||||||
'versions' =>
|
|
||||||
array (
|
|
||||||
'__root__' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '1.0.0+no-version-set',
|
|
||||||
'version' => '1.0.0.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => NULL,
|
|
||||||
),
|
|
||||||
'chillerlan/php-qrcode' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '5.0.1',
|
|
||||||
'version' => '5.0.1.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => 'e81ed39ca3c94357aa021c7525fa9ffb451018d1',
|
|
||||||
),
|
|
||||||
'chillerlan/php-settings-container' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '2.1.5',
|
|
||||||
'version' => '2.1.5.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => 'f705310389264c3578fdd9ffb15aa2cd6d91772e',
|
|
||||||
),
|
|
||||||
'guzzlehttp/guzzle' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '7.8.1',
|
|
||||||
'version' => '7.8.1.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => '41042bc7ab002487b876a0683fc8dce04ddce104',
|
|
||||||
),
|
|
||||||
'guzzlehttp/promises' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '2.0.2',
|
|
||||||
'version' => '2.0.2.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => 'bbff78d96034045e58e13dedd6ad91b5d1253223',
|
|
||||||
),
|
|
||||||
'guzzlehttp/psr7' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '2.6.2',
|
|
||||||
'version' => '2.6.2.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => '45b30f99ac27b5ca93cb4831afe16285f57b8221',
|
|
||||||
),
|
|
||||||
'psr/http-client' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '1.0.3',
|
|
||||||
'version' => '1.0.3.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90',
|
|
||||||
),
|
|
||||||
'psr/http-client-implementation' =>
|
|
||||||
array (
|
|
||||||
'provided' =>
|
|
||||||
array (
|
|
||||||
0 => '1.0',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'psr/http-factory' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '1.0.2',
|
|
||||||
'version' => '1.0.2.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
|
|
||||||
),
|
|
||||||
'psr/http-factory-implementation' =>
|
|
||||||
array (
|
|
||||||
'provided' =>
|
|
||||||
array (
|
|
||||||
0 => '1.0',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'psr/http-message' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '2.0',
|
|
||||||
'version' => '2.0.0.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
|
|
||||||
),
|
|
||||||
'psr/http-message-implementation' =>
|
|
||||||
array (
|
|
||||||
'provided' =>
|
|
||||||
array (
|
|
||||||
0 => '1.0',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'ralouphie/getallheaders' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => '3.0.3',
|
|
||||||
'version' => '3.0.3.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => '120b605dfeb996808c31b6477290a714d356e822',
|
|
||||||
),
|
|
||||||
'symfony/deprecation-contracts' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => 'v2.5.2',
|
|
||||||
'version' => '2.5.2.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66',
|
|
||||||
),
|
|
||||||
'twbs/bootstrap' =>
|
|
||||||
array (
|
|
||||||
'pretty_version' => 'v4.6.2',
|
|
||||||
'version' => '4.6.2.0',
|
|
||||||
'aliases' =>
|
|
||||||
array (
|
|
||||||
),
|
|
||||||
'reference' => 'e5643aaa89eb67327a5b4abe7db976f0ea276b70',
|
|
||||||
),
|
|
||||||
'twitter/bootstrap' =>
|
|
||||||
array (
|
|
||||||
'replaced' =>
|
|
||||||
array (
|
|
||||||
0 => 'v4.6.2',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool|null
|
||||||
|
*/
|
||||||
|
private static $canGetVendors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||||
|
*/
|
||||||
|
private static $installedByVendor = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all package names which are present, either by being installed, replaced or provided
|
||||||
|
*
|
||||||
|
* @return string[]
|
||||||
|
* @psalm-return list<string>
|
||||||
|
*/
|
||||||
|
public static function getInstalledPackages()
|
||||||
|
{
|
||||||
|
$packages = array();
|
||||||
|
foreach (self::getInstalled() as $installed) {
|
||||||
|
$packages[] = array_keys($installed['versions']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (1 === \count($packages)) {
|
||||||
|
return $packages[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all package names with a specific type e.g. 'library'
|
||||||
|
*
|
||||||
|
* @param string $type
|
||||||
|
* @return string[]
|
||||||
|
* @psalm-return list<string>
|
||||||
|
*/
|
||||||
|
public static function getInstalledPackagesByType($type)
|
||||||
|
{
|
||||||
|
$packagesByType = array();
|
||||||
|
|
||||||
public static function getInstalledPackages()
|
foreach (self::getInstalled() as $installed) {
|
||||||
{
|
foreach ($installed['versions'] as $name => $package) {
|
||||||
return array_keys(self::$installed['versions']);
|
if (isset($package['type']) && $package['type'] === $type) {
|
||||||
}
|
$packagesByType[] = $name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $packagesByType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the given package is installed
|
||||||
public static function isInstalled($packageName)
|
*
|
||||||
{
|
* This also returns true if the package name is provided or replaced by another package
|
||||||
return isset(self::$installed['versions'][$packageName]);
|
*
|
||||||
}
|
* @param string $packageName
|
||||||
|
* @param bool $includeDevRequirements
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isInstalled($packageName, $includeDevRequirements = true)
|
||||||
|
{
|
||||||
|
foreach (self::getInstalled() as $installed) {
|
||||||
|
if (isset($installed['versions'][$packageName])) {
|
||||||
|
return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
/**
|
||||||
{
|
* Checks whether the given package satisfies a version constraint
|
||||||
$constraint = $parser->parseConstraints($constraint);
|
*
|
||||||
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
|
||||||
|
*
|
||||||
return $provided->matches($constraint);
|
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
|
||||||
}
|
*
|
||||||
|
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
|
||||||
|
* @param string $packageName
|
||||||
|
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
||||||
|
{
|
||||||
|
$constraint = $parser->parseConstraints((string) $constraint);
|
||||||
|
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
||||||
|
|
||||||
public static function getVersionRanges($packageName)
|
return $provided->matches($constraint);
|
||||||
{
|
}
|
||||||
if (!isset(self::$installed['versions'][$packageName])) {
|
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
/**
|
||||||
}
|
* Returns a version constraint representing all the range(s) which are installed for a given package
|
||||||
|
*
|
||||||
$ranges = array();
|
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
|
||||||
if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
* whether a given version of a package is installed, and not just whether it exists
|
||||||
$ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
|
*
|
||||||
}
|
* @param string $packageName
|
||||||
if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
|
* @return string Version constraint usable with composer/semver
|
||||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
|
*/
|
||||||
}
|
public static function getVersionRanges($packageName)
|
||||||
if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
|
{
|
||||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
|
foreach (self::getInstalled() as $installed) {
|
||||||
}
|
if (!isset($installed['versions'][$packageName])) {
|
||||||
if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
|
continue;
|
||||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
|
}
|
||||||
}
|
|
||||||
|
$ranges = array();
|
||||||
return implode(' || ', $ranges);
|
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
||||||
}
|
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
||||||
|
}
|
||||||
|
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
||||||
|
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
||||||
|
}
|
||||||
|
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
||||||
public static function getVersion($packageName)
|
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
||||||
{
|
}
|
||||||
if (!isset(self::$installed['versions'][$packageName])) {
|
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset(self::$installed['versions'][$packageName]['version'])) {
|
return implode(' || ', $ranges);
|
||||||
return null;
|
}
|
||||||
}
|
|
||||||
|
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||||
return self::$installed['versions'][$packageName]['version'];
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* @param string $packageName
|
||||||
|
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
||||||
|
*/
|
||||||
|
public static function getVersion($packageName)
|
||||||
public static function getPrettyVersion($packageName)
|
{
|
||||||
{
|
foreach (self::getInstalled() as $installed) {
|
||||||
if (!isset(self::$installed['versions'][$packageName])) {
|
if (!isset($installed['versions'][$packageName])) {
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
if (!isset($installed['versions'][$packageName]['version'])) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$installed['versions'][$packageName]['pretty_version'];
|
return $installed['versions'][$packageName]['version'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
public static function getReference($packageName)
|
* @param string $packageName
|
||||||
{
|
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
||||||
if (!isset(self::$installed['versions'][$packageName])) {
|
*/
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
public static function getPrettyVersion($packageName)
|
||||||
}
|
{
|
||||||
|
foreach (self::getInstalled() as $installed) {
|
||||||
if (!isset(self::$installed['versions'][$packageName]['reference'])) {
|
if (!isset($installed['versions'][$packageName])) {
|
||||||
return null;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$installed['versions'][$packageName]['reference'];
|
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
||||||
}
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $installed['versions'][$packageName]['pretty_version'];
|
||||||
|
}
|
||||||
|
|
||||||
public static function getRootPackage()
|
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||||
{
|
}
|
||||||
return self::$installed['root'];
|
|
||||||
}
|
/**
|
||||||
|
* @param string $packageName
|
||||||
|
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
|
||||||
|
*/
|
||||||
|
public static function getReference($packageName)
|
||||||
|
{
|
||||||
|
foreach (self::getInstalled() as $installed) {
|
||||||
|
if (!isset($installed['versions'][$packageName])) {
|
||||||
public static function getRawData()
|
continue;
|
||||||
{
|
}
|
||||||
return self::$installed;
|
|
||||||
}
|
if (!isset($installed['versions'][$packageName]['reference'])) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $installed['versions'][$packageName]['reference'];
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $packageName
|
||||||
|
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
|
||||||
|
*/
|
||||||
|
public static function getInstallPath($packageName)
|
||||||
|
{
|
||||||
|
foreach (self::getInstalled() as $installed) {
|
||||||
|
if (!isset($installed['versions'][$packageName])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
public static function reload($data)
|
|
||||||
{
|
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
||||||
self::$installed = $data;
|
}
|
||||||
}
|
|
||||||
|
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
|
||||||
|
*/
|
||||||
|
public static function getRootPackage()
|
||||||
|
{
|
||||||
|
$installed = self::getInstalled();
|
||||||
|
|
||||||
|
return $installed[0]['root'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the raw installed.php data for custom implementations
|
||||||
|
*
|
||||||
|
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
||||||
|
* @return array[]
|
||||||
|
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
|
||||||
|
*/
|
||||||
|
public static function getRawData()
|
||||||
|
{
|
||||||
|
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
||||||
|
|
||||||
|
if (null === self::$installed) {
|
||||||
|
// only require the installed.php file if this file is loaded from its dumped location,
|
||||||
|
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||||
|
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||||
|
self::$installed = include __DIR__ . '/installed.php';
|
||||||
|
} else {
|
||||||
|
self::$installed = array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$installed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
||||||
|
*
|
||||||
|
* @return array[]
|
||||||
|
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||||
|
*/
|
||||||
|
public static function getAllRawData()
|
||||||
|
{
|
||||||
|
return self::getInstalled();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lets you reload the static array from another file
|
||||||
|
*
|
||||||
|
* This is only useful for complex integrations in which a project needs to use
|
||||||
|
* this class but then also needs to execute another project's autoloader in process,
|
||||||
|
* and wants to ensure both projects have access to their version of installed.php.
|
||||||
|
*
|
||||||
|
* A typical case would be PHPUnit, where it would need to make sure it reads all
|
||||||
|
* the data it needs from this class, then call reload() with
|
||||||
|
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
|
||||||
|
* the project in which it runs can then also use this class safely, without
|
||||||
|
* interference between PHPUnit's dependencies and the project's dependencies.
|
||||||
|
*
|
||||||
|
* @param array[] $data A vendor/composer/installed.php data set
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
|
||||||
|
*/
|
||||||
|
public static function reload($data)
|
||||||
|
{
|
||||||
|
self::$installed = $data;
|
||||||
|
self::$installedByVendor = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array[]
|
||||||
|
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||||
|
*/
|
||||||
|
private static function getInstalled()
|
||||||
|
{
|
||||||
|
if (null === self::$canGetVendors) {
|
||||||
|
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
||||||
|
}
|
||||||
|
|
||||||
|
$installed = array();
|
||||||
|
|
||||||
|
if (self::$canGetVendors) {
|
||||||
|
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||||
|
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||||
|
$installed[] = self::$installedByVendor[$vendorDir];
|
||||||
|
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||||
|
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||||
|
$required = require $vendorDir.'/composer/installed.php';
|
||||||
|
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
||||||
|
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||||
|
self::$installed = $installed[count($installed) - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null === self::$installed) {
|
||||||
|
// only require the installed.php file if this file is loaded from its dumped location,
|
||||||
|
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||||
|
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||||
|
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||||
|
$required = require __DIR__ . '/installed.php';
|
||||||
|
self::$installed = $required;
|
||||||
|
} else {
|
||||||
|
self::$installed = array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self::$installed !== array()) {
|
||||||
|
$installed[] = self::$installed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $installed;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
941
vendor/composer/autoload_classmap.php
vendored
941
vendor/composer/autoload_classmap.php
vendored
@@ -2,9 +2,948 @@
|
|||||||
|
|
||||||
// autoload_classmap.php @generated by Composer
|
// autoload_classmap.php @generated by Composer
|
||||||
|
|
||||||
$vendorDir = dirname(dirname(__FILE__));
|
$vendorDir = dirname(__DIR__);
|
||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
'Com\\Tecnick\\Barcode\\Barcode' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Barcode.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Exception' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Model' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Model.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Convert' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Convert.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\Codabar' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/Codabar.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeNineThree' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeNineThree.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeOneOne' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeOneOne.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeOneTwoEight' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeOneTwoEight.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeOneTwoEight\\CodeOneTwoEightA' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeOneTwoEight/CodeOneTwoEightA.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeOneTwoEight\\CodeOneTwoEightB' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeOneTwoEight/CodeOneTwoEightB.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeOneTwoEight\\CodeOneTwoEightC' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeOneTwoEight/CodeOneTwoEightC.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeOneTwoEight\\Process' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeOneTwoEight/Process.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeThreeNine' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeThreeNine.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeThreeNineCheck' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeThreeNineCheck.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeThreeNineExt' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeThreeNineExt.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\CodeThreeNineExtCheck' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/CodeThreeNineExtCheck.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\EanEight' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/EanEight.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\EanFive' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/EanFive.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\EanOneThree' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/EanOneThree.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\EanTwo' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/EanTwo.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\Imb' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/Imb.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\ImbPre' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/ImbPre.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\InterleavedTwoOfFive' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/InterleavedTwoOfFive.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\InterleavedTwoOfFiveCheck' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/InterleavedTwoOfFiveCheck.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\KlantIndex' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/KlantIndex.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\Msi' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/Msi.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\MsiCheck' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/MsiCheck.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\Pharma' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/Pharma.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\PharmaTwoTracks' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/PharmaTwoTracks.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\Planet' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/Planet.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\Postnet' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/Postnet.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\Raw' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/Raw.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\RoyalMailFourCc' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/RoyalMailFourCc.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\StandardTwoOfFive' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/StandardTwoOfFive.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\StandardTwoOfFiveCheck' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/StandardTwoOfFiveCheck.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\UpcA' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/UpcA.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Linear\\UpcE' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Linear/UpcE.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Raw' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Raw.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Aztec' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Aztec.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Aztec\\Bitstream' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Aztec/Bitstream.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Aztec\\Codeword' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Aztec/Codeword.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Aztec\\Data' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Aztec/Data.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Aztec\\Encode' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Aztec/Encode.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Aztec\\ErrorCorrection' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Aztec/ErrorCorrection.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Aztec\\Layers' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Aztec/Layers.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Datamatrix' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Datamatrix.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Datamatrix\\Data' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Datamatrix/Data.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Datamatrix\\Encode' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Datamatrix/Encode.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Datamatrix\\EncodeTxt' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Datamatrix/EncodeTxt.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Datamatrix\\ErrorCorrection' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Datamatrix/ErrorCorrection.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Datamatrix\\Modes' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Datamatrix/Modes.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Datamatrix\\Placement' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Datamatrix/Placement.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Datamatrix\\Steps' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Datamatrix/Steps.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\PdfFourOneSeven' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/PdfFourOneSeven.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\PdfFourOneSeven\\Compaction' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/PdfFourOneSeven/Compaction.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\PdfFourOneSeven\\Data' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/PdfFourOneSeven/Data.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\PdfFourOneSeven\\Sequence' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/PdfFourOneSeven/Sequence.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\ByteStream' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/ByteStream.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\Data' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/Data.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\Encode' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/Encode.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\Encoder' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/Encoder.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\EncodingMode' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/EncodingMode.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\Estimate' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/Estimate.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\Init' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/Init.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\InputItem' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/InputItem.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\Mask' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/Mask.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\MaskNum' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/MaskNum.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\Spec' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/Spec.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\SpecRs' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/SpecRs.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\QrCode\\Split' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/QrCode/Split.php',
|
||||||
|
'Com\\Tecnick\\Barcode\\Type\\Square\\Raw' => $vendorDir . '/tecnickcom/tc-lib-barcode/src/Type/Square/Raw.php',
|
||||||
|
'Com\\Tecnick\\Color\\Css' => $vendorDir . '/tecnickcom/tc-lib-color/src/Css.php',
|
||||||
|
'Com\\Tecnick\\Color\\Exception' => $vendorDir . '/tecnickcom/tc-lib-color/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\Color\\Model' => $vendorDir . '/tecnickcom/tc-lib-color/src/Model.php',
|
||||||
|
'Com\\Tecnick\\Color\\Model\\Cmyk' => $vendorDir . '/tecnickcom/tc-lib-color/src/Model/Cmyk.php',
|
||||||
|
'Com\\Tecnick\\Color\\Model\\Gray' => $vendorDir . '/tecnickcom/tc-lib-color/src/Model/Gray.php',
|
||||||
|
'Com\\Tecnick\\Color\\Model\\Hsl' => $vendorDir . '/tecnickcom/tc-lib-color/src/Model/Hsl.php',
|
||||||
|
'Com\\Tecnick\\Color\\Model\\Rgb' => $vendorDir . '/tecnickcom/tc-lib-color/src/Model/Rgb.php',
|
||||||
|
'Com\\Tecnick\\Color\\Model\\Template' => $vendorDir . '/tecnickcom/tc-lib-color/src/Model/Template.php',
|
||||||
|
'Com\\Tecnick\\Color\\Pdf' => $vendorDir . '/tecnickcom/tc-lib-color/src/Pdf.php',
|
||||||
|
'Com\\Tecnick\\Color\\Spot' => $vendorDir . '/tecnickcom/tc-lib-color/src/Spot.php',
|
||||||
|
'Com\\Tecnick\\Color\\Web' => $vendorDir . '/tecnickcom/tc-lib-color/src/Web.php',
|
||||||
|
'Com\\Tecnick\\File\\Byte' => $vendorDir . '/tecnickcom/tc-lib-file/src/Byte.php',
|
||||||
|
'Com\\Tecnick\\File\\Cache' => $vendorDir . '/tecnickcom/tc-lib-file/src/Cache.php',
|
||||||
|
'Com\\Tecnick\\File\\Dir' => $vendorDir . '/tecnickcom/tc-lib-file/src/Dir.php',
|
||||||
|
'Com\\Tecnick\\File\\Exception' => $vendorDir . '/tecnickcom/tc-lib-file/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\File\\File' => $vendorDir . '/tecnickcom/tc-lib-file/src/File.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Base' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/Base.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\CSS' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/CSS.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Cell' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/Cell.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\ClassObjects' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/ClassObjects.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Compute' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Compute.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Data' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Data.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Encrypt' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Encrypt.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Exception' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Output' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Output.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\AES' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/AES.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\AESSixteen' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/AESSixteen.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\AESThirtytwo' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/AESThirtytwo.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\AESnopad' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/AESnopad.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\MDFiveSixteen' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/MDFiveSixteen.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\RCFour' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/RCFour.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\RCFourFive' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/RCFourFive.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\RCFourSixteen' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/RCFourSixteen.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Encrypt\\Type\\Seed' => $vendorDir . '/tecnickcom/tc-lib-pdf-encrypt/src/Type/Seed.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Exception' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Buffer' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Buffer.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Core' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Core.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Exception' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Font' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Font.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Import' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Import.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Import\\Core' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Import/Core.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Import\\TrueType' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Import/TrueType.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Import\\TypeOne' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Import/TypeOne.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Load' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Load.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\OutFont' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/OutFont.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\OutUtil' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/OutUtil.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Output' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Output.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Stack' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Stack.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\Subset' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/Subset.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Font\\UniToCid' => $vendorDir . '/tecnickcom/tc-lib-pdf-font/src/UniToCid.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Graph\\Base' => $vendorDir . '/tecnickcom/tc-lib-pdf-graph/src/Base.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Graph\\Draw' => $vendorDir . '/tecnickcom/tc-lib-pdf-graph/src/Draw.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Graph\\Exception' => $vendorDir . '/tecnickcom/tc-lib-pdf-graph/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Graph\\Gradient' => $vendorDir . '/tecnickcom/tc-lib-pdf-graph/src/Gradient.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Graph\\Raw' => $vendorDir . '/tecnickcom/tc-lib-pdf-graph/src/Raw.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Graph\\Style' => $vendorDir . '/tecnickcom/tc-lib-pdf-graph/src/Style.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Graph\\Transform' => $vendorDir . '/tecnickcom/tc-lib-pdf-graph/src/Transform.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\HTML' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/HTML.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Image\\Exception' => $vendorDir . '/tecnickcom/tc-lib-pdf-image/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Image\\Import' => $vendorDir . '/tecnickcom/tc-lib-pdf-image/src/Import.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Image\\Import\\ImageImportInterface' => $vendorDir . '/tecnickcom/tc-lib-pdf-image/src/Import/ImageImportInterface.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Image\\Import\\Jpeg' => $vendorDir . '/tecnickcom/tc-lib-pdf-image/src/Import/Jpeg.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Image\\Import\\Png' => $vendorDir . '/tecnickcom/tc-lib-pdf-image/src/Import/Png.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Image\\Output' => $vendorDir . '/tecnickcom/tc-lib-pdf-image/src/Output.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\JavaScript' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/JavaScript.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\MetaInfo' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/MetaInfo.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Output' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/Output.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Page\\Box' => $vendorDir . '/tecnickcom/tc-lib-pdf-page/src/Box.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Page\\Exception' => $vendorDir . '/tecnickcom/tc-lib-pdf-page/src/Exception.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Page\\Format' => $vendorDir . '/tecnickcom/tc-lib-pdf-page/src/Format.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Page\\Mode' => $vendorDir . '/tecnickcom/tc-lib-pdf-page/src/Mode.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Page\\Page' => $vendorDir . '/tecnickcom/tc-lib-pdf-page/src/Page.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Page\\Region' => $vendorDir . '/tecnickcom/tc-lib-pdf-page/src/Region.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Page\\Settings' => $vendorDir . '/tecnickcom/tc-lib-pdf-page/src/Settings.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\SVG' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/SVG.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Tcpdf' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/Tcpdf.php',
|
||||||
|
'Com\\Tecnick\\Pdf\\Text' => $vendorDir . '/tecnickcom/tc-lib-pdf/src/Text.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\Shaping' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/Shaping.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\Shaping\\Arabic' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/Shaping/Arabic.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\StepBase' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/StepBase.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\StepI' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/StepI.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\StepL' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/StepL.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\StepN' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/StepN.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\StepP' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/StepP.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\StepW' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/StepW.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\StepX' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/StepX.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Bidi\\StepXten' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Bidi/StepXten.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Convert' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Convert.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Convert\\Encoding' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Convert/Encoding.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Arabic' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Arabic.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Bracket' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Bracket.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Constant' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Constant.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Encoding' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Encoding.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Identity' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Identity.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Latin' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Latin.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Mirror' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Mirror.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Pattern' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Pattern.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Data\\Type' => $vendorDir . '/tecnickcom/tc-lib-unicode-data/src/Type.php',
|
||||||
|
'Com\\Tecnick\\Unicode\\Exception' => $vendorDir . '/tecnickcom/tc-lib-unicode/src/Exception.php',
|
||||||
|
'Complex\\Complex' => $vendorDir . '/markbaker/complex/classes/src/Complex.php',
|
||||||
|
'Complex\\Exception' => $vendorDir . '/markbaker/complex/classes/src/Exception.php',
|
||||||
|
'Complex\\Functions' => $vendorDir . '/markbaker/complex/classes/src/Functions.php',
|
||||||
|
'Complex\\Operations' => $vendorDir . '/markbaker/complex/classes/src/Operations.php',
|
||||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||||
|
'Composer\\Pcre\\MatchAllResult' => $vendorDir . '/composer/pcre/src/MatchAllResult.php',
|
||||||
|
'Composer\\Pcre\\MatchAllStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchAllStrictGroupsResult.php',
|
||||||
|
'Composer\\Pcre\\MatchAllWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchAllWithOffsetsResult.php',
|
||||||
|
'Composer\\Pcre\\MatchResult' => $vendorDir . '/composer/pcre/src/MatchResult.php',
|
||||||
|
'Composer\\Pcre\\MatchStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchStrictGroupsResult.php',
|
||||||
|
'Composer\\Pcre\\MatchWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchWithOffsetsResult.php',
|
||||||
|
'Composer\\Pcre\\PHPStan\\InvalidRegexPatternRule' => $vendorDir . '/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php',
|
||||||
|
'Composer\\Pcre\\PHPStan\\PregMatchFlags' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchFlags.php',
|
||||||
|
'Composer\\Pcre\\PHPStan\\PregMatchParameterOutTypeExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php',
|
||||||
|
'Composer\\Pcre\\PHPStan\\PregMatchTypeSpecifyingExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php',
|
||||||
|
'Composer\\Pcre\\PHPStan\\PregReplaceCallbackClosureTypeExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php',
|
||||||
|
'Composer\\Pcre\\PHPStan\\UnsafeStrictGroupsCallRule' => $vendorDir . '/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php',
|
||||||
|
'Composer\\Pcre\\PcreException' => $vendorDir . '/composer/pcre/src/PcreException.php',
|
||||||
|
'Composer\\Pcre\\Preg' => $vendorDir . '/composer/pcre/src/Preg.php',
|
||||||
|
'Composer\\Pcre\\Regex' => $vendorDir . '/composer/pcre/src/Regex.php',
|
||||||
|
'Composer\\Pcre\\ReplaceResult' => $vendorDir . '/composer/pcre/src/ReplaceResult.php',
|
||||||
|
'Composer\\Pcre\\UnexpectedNullMatchException' => $vendorDir . '/composer/pcre/src/UnexpectedNullMatchException.php',
|
||||||
|
'Datamatrix' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/datamatrix.php',
|
||||||
|
'GuzzleHttp\\BodySummarizer' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizer.php',
|
||||||
|
'GuzzleHttp\\BodySummarizerInterface' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php',
|
||||||
|
'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
|
||||||
|
'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
|
||||||
|
'GuzzleHttp\\ClientTrait' => $vendorDir . '/guzzlehttp/guzzle/src/ClientTrait.php',
|
||||||
|
'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
|
||||||
|
'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
|
||||||
|
'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
|
||||||
|
'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
|
||||||
|
'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
|
||||||
|
'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
|
||||||
|
'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
|
||||||
|
'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
|
||||||
|
'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
|
||||||
|
'GuzzleHttp\\Exception\\InvalidArgumentException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php',
|
||||||
|
'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
|
||||||
|
'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
|
||||||
|
'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
|
||||||
|
'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
|
||||||
|
'GuzzleHttp\\HandlerStack' => $vendorDir . '/guzzlehttp/guzzle/src/HandlerStack.php',
|
||||||
|
'GuzzleHttp\\Handler\\CurlFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
|
||||||
|
'GuzzleHttp\\Handler\\CurlFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
|
||||||
|
'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
|
||||||
|
'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
|
||||||
|
'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
|
||||||
|
'GuzzleHttp\\Handler\\HeaderProcessor' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php',
|
||||||
|
'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
|
||||||
|
'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
|
||||||
|
'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
|
||||||
|
'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php',
|
||||||
|
'GuzzleHttp\\MessageFormatterInterface' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatterInterface.php',
|
||||||
|
'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php',
|
||||||
|
'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php',
|
||||||
|
'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
|
||||||
|
'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php',
|
||||||
|
'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php',
|
||||||
|
'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php',
|
||||||
|
'GuzzleHttp\\Promise\\Create' => $vendorDir . '/guzzlehttp/promises/src/Create.php',
|
||||||
|
'GuzzleHttp\\Promise\\Each' => $vendorDir . '/guzzlehttp/promises/src/Each.php',
|
||||||
|
'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php',
|
||||||
|
'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php',
|
||||||
|
'GuzzleHttp\\Promise\\Is' => $vendorDir . '/guzzlehttp/promises/src/Is.php',
|
||||||
|
'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php',
|
||||||
|
'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php',
|
||||||
|
'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php',
|
||||||
|
'GuzzleHttp\\Promise\\RejectedPromise' => $vendorDir . '/guzzlehttp/promises/src/RejectedPromise.php',
|
||||||
|
'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php',
|
||||||
|
'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php',
|
||||||
|
'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php',
|
||||||
|
'GuzzleHttp\\Promise\\Utils' => $vendorDir . '/guzzlehttp/promises/src/Utils.php',
|
||||||
|
'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Exception\\MalformedUriException' => $vendorDir . '/guzzlehttp/psr7/src/Exception/MalformedUriException.php',
|
||||||
|
'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Header' => $vendorDir . '/guzzlehttp/psr7/src/Header.php',
|
||||||
|
'GuzzleHttp\\Psr7\\HttpFactory' => $vendorDir . '/guzzlehttp/psr7/src/HttpFactory.php',
|
||||||
|
'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Message' => $vendorDir . '/guzzlehttp/psr7/src/Message.php',
|
||||||
|
'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php',
|
||||||
|
'GuzzleHttp\\Psr7\\MimeType' => $vendorDir . '/guzzlehttp/psr7/src/MimeType.php',
|
||||||
|
'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Query' => $vendorDir . '/guzzlehttp/psr7/src/Query.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Rfc7230' => $vendorDir . '/guzzlehttp/psr7/src/Rfc7230.php',
|
||||||
|
'GuzzleHttp\\Psr7\\ServerRequest' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequest.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Stream' => $vendorDir . '/guzzlehttp/psr7/src/Stream.php',
|
||||||
|
'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
|
||||||
|
'GuzzleHttp\\Psr7\\StreamWrapper' => $vendorDir . '/guzzlehttp/psr7/src/StreamWrapper.php',
|
||||||
|
'GuzzleHttp\\Psr7\\UploadedFile' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFile.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php',
|
||||||
|
'GuzzleHttp\\Psr7\\UriComparator' => $vendorDir . '/guzzlehttp/psr7/src/UriComparator.php',
|
||||||
|
'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php',
|
||||||
|
'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php',
|
||||||
|
'GuzzleHttp\\Psr7\\Utils' => $vendorDir . '/guzzlehttp/psr7/src/Utils.php',
|
||||||
|
'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
|
||||||
|
'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php',
|
||||||
|
'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
|
||||||
|
'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php',
|
||||||
|
'GuzzleHttp\\Utils' => $vendorDir . '/guzzlehttp/guzzle/src/Utils.php',
|
||||||
|
'Matrix\\Builder' => $vendorDir . '/markbaker/matrix/classes/src/Builder.php',
|
||||||
|
'Matrix\\Decomposition\\Decomposition' => $vendorDir . '/markbaker/matrix/classes/src/Decomposition/Decomposition.php',
|
||||||
|
'Matrix\\Decomposition\\LU' => $vendorDir . '/markbaker/matrix/classes/src/Decomposition/LU.php',
|
||||||
|
'Matrix\\Decomposition\\QR' => $vendorDir . '/markbaker/matrix/classes/src/Decomposition/QR.php',
|
||||||
|
'Matrix\\Div0Exception' => $vendorDir . '/markbaker/matrix/classes/src/Div0Exception.php',
|
||||||
|
'Matrix\\Exception' => $vendorDir . '/markbaker/matrix/classes/src/Exception.php',
|
||||||
|
'Matrix\\Functions' => $vendorDir . '/markbaker/matrix/classes/src/Functions.php',
|
||||||
|
'Matrix\\Matrix' => $vendorDir . '/markbaker/matrix/classes/src/Matrix.php',
|
||||||
|
'Matrix\\Operations' => $vendorDir . '/markbaker/matrix/classes/src/Operations.php',
|
||||||
|
'Matrix\\Operators\\Addition' => $vendorDir . '/markbaker/matrix/classes/src/Operators/Addition.php',
|
||||||
|
'Matrix\\Operators\\DirectSum' => $vendorDir . '/markbaker/matrix/classes/src/Operators/DirectSum.php',
|
||||||
|
'Matrix\\Operators\\Division' => $vendorDir . '/markbaker/matrix/classes/src/Operators/Division.php',
|
||||||
|
'Matrix\\Operators\\Multiplication' => $vendorDir . '/markbaker/matrix/classes/src/Operators/Multiplication.php',
|
||||||
|
'Matrix\\Operators\\Operator' => $vendorDir . '/markbaker/matrix/classes/src/Operators/Operator.php',
|
||||||
|
'Matrix\\Operators\\Subtraction' => $vendorDir . '/markbaker/matrix/classes/src/Operators/Subtraction.php',
|
||||||
|
'PDF417' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/pdf417.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\ArrayEnabled' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ArrayEnabled.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\BinaryComparison' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/BinaryComparison.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Calculation' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\CalculationBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/CalculationBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\CalculationLocale' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/CalculationLocale.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Category' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Category.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DAverage' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DAverage.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DCount' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DCount.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DCountA' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DCountA.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DGet' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DGet.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DMax' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DMax.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DMin' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DMin.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DProduct' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DProduct.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DStDev' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DStDev.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DStDevP' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DStDevP.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DSum' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DSum.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DVar' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DVar.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DVarP' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DVarP.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Database\\DatabaseAbstract' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DatabaseAbstract.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Constants' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Constants.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Current' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Current.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Date' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Date.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\DateParts' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateParts.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\DateValue' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateValue.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Days' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Days.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Days360' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Days360.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Difference' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Difference.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Helpers' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Helpers.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Month' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Month.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\NetworkDays' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/NetworkDays.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Time' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Time.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\TimeParts' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeParts.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\TimeValue' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeValue.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\Week' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Week.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\WorkDay' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/WorkDay.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\DateTimeExcel\\YearFrac' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/YearFrac.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engine\\ArrayArgumentHelper' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentHelper.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engine\\ArrayArgumentProcessor' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentProcessor.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engine\\BranchPruner' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/BranchPruner.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engine\\CyclicReferenceStack' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/CyclicReferenceStack.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engine\\FormattedNumber' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/FormattedNumber.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engine\\Logger' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Logger.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engine\\Operands\\Operand' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/Operand.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engine\\Operands\\StructuredReference' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/StructuredReference.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\BesselI' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselI.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\BesselJ' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselJ.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\BesselK' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselK.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\BesselY' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselY.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\BitWise' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BitWise.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\Compare' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Compare.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\Complex' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Complex.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ComplexFunctions' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ComplexFunctions.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ComplexOperations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ComplexOperations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\Constants' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Constants.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ConvertBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ConvertBinary' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertBinary.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ConvertDecimal' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertDecimal.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ConvertHex' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertHex.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ConvertOctal' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertOctal.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ConvertUOM' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertUOM.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\EngineeringValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/EngineeringValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\Erf' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Erf.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Engineering\\ErfC' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ErfC.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Exception' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Exception.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\ExceptionHandler' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ExceptionHandler.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Amortization' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Amortization.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\CashFlowValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/CashFlowValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\Constant\\Periodic' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\Constant\\Periodic\\Cumulative' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Cumulative.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\Constant\\Periodic\\Interest' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Interest.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\Constant\\Periodic\\InterestAndPrincipal' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/InterestAndPrincipal.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\Constant\\Periodic\\Payments' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Payments.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\Single' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Single.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\Variable\\NonPeriodic' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Variable/NonPeriodic.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\CashFlow\\Variable\\Periodic' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Variable/Periodic.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Constants' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Constants.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Coupons' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Coupons.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Depreciation' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Depreciation.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Dollar' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Dollar.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\FinancialValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/FinancialValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Helpers' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Helpers.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\InterestRate' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/InterestRate.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Securities\\AccruedInterest' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/AccruedInterest.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Securities\\Price' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Securities\\Rates' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Rates.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Securities\\SecurityValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/SecurityValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\Securities\\Yields' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Yields.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Financial\\TreasuryBill' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/TreasuryBill.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\FormulaParser' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FormulaParser.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\FormulaToken' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FormulaToken.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\FunctionArray' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FunctionArray.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Functions' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Functions.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Information\\ErrorValue' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/ErrorValue.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Information\\ExcelError' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/ExcelError.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Information\\Value' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/Value.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Internal\\ExcelArrayPseudoFunctions' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/ExcelArrayPseudoFunctions.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Internal\\MakeMatrix' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/MakeMatrix.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Internal\\WildcardMatch' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/WildcardMatch.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Logical\\Boolean' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Boolean.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Logical\\Conditional' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Conditional.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Logical\\Operations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Operations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Address' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Address.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\ChooseRowsEtc' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/ChooseRowsEtc.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\ExcelMatch' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/ExcelMatch.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Filter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Filter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Formula' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Formula.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\HLookup' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/HLookup.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Helpers' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Helpers.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Hstack' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Hstack.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Hyperlink' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Hyperlink.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Indirect' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Indirect.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Lookup' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Lookup.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\LookupBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/LookupBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\LookupRefValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/LookupRefValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Matrix' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Matrix.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Offset' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Offset.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\RowColumnInformation' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/RowColumnInformation.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Selection' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Selection.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Sort' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Sort.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\TorowTocol' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/TorowTocol.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Unique' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Unique.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\VLookup' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/VLookup.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\LookupRef\\Vstack' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Vstack.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Absolute' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Absolute.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Angle' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Angle.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Arabic' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Arabic.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Base' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Base.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Ceiling' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Ceiling.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Combinations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Combinations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Exp' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Exp.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Factorial' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Factorial.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Floor' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Floor.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Gcd' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Gcd.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Helpers' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Helpers.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\IntClass' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/IntClass.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Lcm' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Lcm.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Logarithms' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Logarithms.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\MatrixFunctions' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/MatrixFunctions.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Operations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Operations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Random' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Random.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Roman' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Roman.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Round' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Round.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\SeriesSum' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/SeriesSum.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Sign' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sign.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Sqrt' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sqrt.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Subtotal' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Subtotal.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Sum' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sum.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\SumSquares' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/SumSquares.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Trig\\Cosecant' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cosecant.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Trig\\Cosine' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cosine.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Trig\\Cotangent' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cotangent.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Trig\\Secant' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Secant.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Trig\\Sine' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Sine.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Trig\\Tangent' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Tangent.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\MathTrig\\Trunc' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trunc.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\AggregateBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/AggregateBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Averages' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Averages.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Averages\\Mean' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Averages/Mean.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Conditional' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Conditional.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Confidence' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Confidence.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Counts' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Counts.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Deviations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Deviations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\Beta' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Beta.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\Binomial' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Binomial.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\ChiSquared' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/ChiSquared.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\DistributionValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/DistributionValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\Exponential' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Exponential.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\F' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/F.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\Fisher' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Fisher.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\Gamma' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Gamma.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\GammaBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/GammaBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\HyperGeometric' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/HyperGeometric.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\LogNormal' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/LogNormal.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\NewtonRaphson' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/NewtonRaphson.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\Normal' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Normal.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\Poisson' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Poisson.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\StandardNormal' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/StandardNormal.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\StudentT' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/StudentT.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Distributions\\Weibull' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Weibull.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\MaxMinBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/MaxMinBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Maximum' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Maximum.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Minimum' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Minimum.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Percentiles' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Percentiles.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Permutations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Permutations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Size' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Size.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\StandardDeviations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/StandardDeviations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Standardize' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Standardize.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\StatisticalValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/StatisticalValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Trends' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Trends.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\VarianceBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/VarianceBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Statistical\\Variances' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Variances.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\CaseConvert' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/CaseConvert.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\CharacterConvert' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/CharacterConvert.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\Concatenate' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Concatenate.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\Extract' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Extract.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\Format' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Format.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\Helpers' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Helpers.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\Replace' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Replace.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\Search' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Search.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\Text' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Text.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\TextData\\Trim' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Trim.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Token\\Stack' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token/Stack.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Calculation\\Web\\Service' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Web/Service.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\CellReferenceHelper' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/CellReferenceHelper.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\AddressHelper' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AddressHelper.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\AddressRange' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AddressRange.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\AdvancedValueBinder' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AdvancedValueBinder.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\Cell' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Cell.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\CellAddress' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/CellAddress.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\CellRange' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/CellRange.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\ColumnRange' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/ColumnRange.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\Coordinate' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\DataType' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataType.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\DataValidation' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataValidation.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\DataValidator' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataValidator.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\DefaultValueBinder' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DefaultValueBinder.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\Hyperlink' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Hyperlink.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\IValueBinder' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/IValueBinder.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\IgnoredErrors' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/IgnoredErrors.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\RowRange' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/RowRange.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Cell\\StringValueBinder' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/StringValueBinder.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Axis' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Axis.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\AxisText' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/AxisText.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Chart' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Chart.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\ChartColor' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/ChartColor.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\DataSeries' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeries.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\DataSeriesValues' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeriesValues.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Exception' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Exception.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\GridLines' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/GridLines.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Layout' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Layout.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Legend' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Legend.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\PlotArea' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/PlotArea.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Properties' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Properties.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Renderer\\IRenderer' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/IRenderer.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Renderer\\JpGraph' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/JpGraph.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Renderer\\JpGraphRendererBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/JpGraphRendererBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Renderer\\MtJpGraphRenderer' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/MtJpGraphRenderer.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\Title' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Title.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Chart\\TrendLine' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/TrendLine.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Collection\\Cells' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Collection\\CellsFactory' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/CellsFactory.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Collection\\Memory\\SimpleCache1' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Memory/SimpleCache1.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Collection\\Memory\\SimpleCache3' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Memory/SimpleCache3.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Comment' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Comment.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\DefinedName' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/DefinedName.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Document\\Properties' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Document\\Security' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Exception' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Exception.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\HashTable' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Helper\\Dimension' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Dimension.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Helper\\Downloader' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Downloader.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Helper\\Handler' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Handler.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Helper\\Html' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Html.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Helper\\Sample' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Sample.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Helper\\Size' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Size.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Helper\\TextGrid' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/TextGrid.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\IComparable' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IComparable.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\IOFactory' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\NamedFormula' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/NamedFormula.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\NamedRange' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/NamedRange.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\BaseReader' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/BaseReader.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Csv' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Csv\\Delimiter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv/Delimiter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\DefaultReadFilter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/DefaultReadFilter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Exception' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Exception.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Gnumeric' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Gnumeric\\PageSetup' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/PageSetup.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Gnumeric\\Properties' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/Properties.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Gnumeric\\Styles' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/Styles.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Html' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Html.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\IReadFilter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReadFilter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\IReader' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReader.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Ods' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Ods\\AutoFilter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/AutoFilter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Ods\\BaseLoader' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/BaseLoader.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Ods\\DefinedNames' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/DefinedNames.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Ods\\FormulaTranslator' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/FormulaTranslator.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Ods\\PageSettings' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/PageSettings.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Ods\\Properties' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/Properties.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Security\\XmlScanner' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Security/XmlScanner.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Slk' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Slk.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\XlsBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/XlsBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Biff5' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Biff5.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Biff8' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Biff8.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Color' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Color\\BIFF5' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BIFF5.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Color\\BIFF8' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BIFF8.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Color\\BuiltIn' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BuiltIn.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\ConditionalFormatting' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ConditionalFormatting.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\DataValidationHelper' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/DataValidationHelper.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\ErrorCode' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ErrorCode.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Escher' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Escher.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\ListFunctions' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ListFunctions.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\LoadSpreadsheet' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/LoadSpreadsheet.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\MD5' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/MD5.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Mappings' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Mappings.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\RC4' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/RC4.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Style\\Border' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/Border.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Style\\CellAlignment' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellAlignment.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Style\\CellFont' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellFont.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xls\\Style\\FillPattern' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/FillPattern.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\AutoFilter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/AutoFilter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\BaseParserClass' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/BaseParserClass.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\Chart' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Chart.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\ColumnAndRowAttributes' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ColumnAndRowAttributes.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\ConditionalStyles' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\DataValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/DataValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\Hyperlinks' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Hyperlinks.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\Namespaces' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Namespaces.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\PageSetup' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/PageSetup.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\Properties' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Properties.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\SharedFormula' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SharedFormula.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\SheetViewOptions' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SheetViewOptions.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\SheetViews' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SheetViews.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\Styles' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Styles.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\TableReader' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/TableReader.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\Theme' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Theme.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xlsx\\WorkbookView' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/WorkbookView.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\DataValidations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/DataValidations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\PageSettings' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/PageSettings.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\Properties' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Properties.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\Style' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\Style\\Alignment' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Alignment.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\Style\\Border' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Border.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\Style\\Fill' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Fill.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\Style\\Font' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Font.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\Style\\NumberFormat' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/NumberFormat.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Reader\\Xml\\Style\\StyleBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/StyleBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\ReferenceHelper' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ReferenceHelper.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\RichText\\ITextElement' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/ITextElement.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\RichText\\RichText' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/RichText.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\RichText\\Run' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/Run.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\RichText\\TextElement' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/TextElement.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Settings' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Settings.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\CodePage' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/CodePage.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Date' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Date.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Drawing' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Drawing.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Escher' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Escher\\DgContainer' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Escher\\DgContainer\\SpgrContainer' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer/SpgrContainer.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Escher\\DgContainer\\SpgrContainer\\SpContainer' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Escher\\DggContainer' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Escher\\DggContainer\\BstoreContainer' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Escher\\DggContainer\\BstoreContainer\\BSE' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Escher\\DggContainer\\BstoreContainer\\BSE\\Blip' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\File' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Font' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Font.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\IntOrFloat' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/IntOrFloat.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\OLE' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\OLERead' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLERead.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\OLE\\ChainedBlockStream' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/ChainedBlockStream.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\OLE\\PPS' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\OLE\\PPS\\File' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS/File.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\OLE\\PPS\\Root' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS/Root.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\PasswordHasher' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/PasswordHasher.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\StringHelper' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/StringHelper.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\TimeZone' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/TimeZone.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Trend\\BestFit' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/BestFit.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Trend\\ExponentialBestFit' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/ExponentialBestFit.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Trend\\LinearBestFit' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/LinearBestFit.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Trend\\LogarithmicBestFit' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/LogarithmicBestFit.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Trend\\PolynomialBestFit' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PolynomialBestFit.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Trend\\PowerBestFit' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PowerBestFit.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Trend\\Trend' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/Trend.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\XMLWriter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/XMLWriter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Shared\\Xls' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Xls.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Spreadsheet' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Alignment' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Alignment.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Border' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Border.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Borders' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Borders.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Color' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Color.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Conditional' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Conditional.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\CellMatcher' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/CellMatcher.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\CellStyleAssessor' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/CellStyleAssessor.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\ConditionalColorScale' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalColorScale.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\ConditionalDataBar' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBar.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\ConditionalDataBarExtension' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBarExtension.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\ConditionalFormatValueObject' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormatValueObject.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\ConditionalFormattingRuleExtension' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormattingRuleExtension.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\ConditionalIconSet' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalIconSet.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\IconSetValues' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/IconSetValues.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\StyleMerger' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/StyleMerger.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\Blanks' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Blanks.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\CellValue' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/CellValue.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\DateValue' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/DateValue.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\Duplicates' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Duplicates.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\Errors' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Errors.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\Expression' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Expression.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\TextValue' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/TextValue.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\WizardAbstract' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardAbstract.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\ConditionalFormatting\\Wizard\\WizardInterface' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardInterface.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Fill' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Fill.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Font' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Font.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\BaseFormatter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/BaseFormatter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\DateFormatter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/DateFormatter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Formatter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\FractionFormatter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/FractionFormatter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\NumberFormatter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/NumberFormatter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\PercentageFormatter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/PercentageFormatter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Accounting' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Accounting.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Currency' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Currency.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\CurrencyBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\CurrencyNegative' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyNegative.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Date' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Date.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\DateTime' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/DateTime.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\DateTimeWizard' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/DateTimeWizard.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Duration' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Duration.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Locale' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Locale.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Number' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Number.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\NumberBase' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/NumberBase.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Percentage' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Percentage.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Scientific' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Scientific.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Time' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Time.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat\\Wizard\\Wizard' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Wizard.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Protection' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Protection.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\RgbTint' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/RgbTint.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Style' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Style.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Style\\Supervisor' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Supervisor.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Theme' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Theme.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\AutoFilter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\AutoFilter\\Column' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\AutoFilter\\Column\\Rule' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter/Column/Rule.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\AutoFit' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFit.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\BaseDrawing' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\CellIterator' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/CellIterator.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Column' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Column.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\ColumnCellIterator' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnCellIterator.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\ColumnDimension' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnDimension.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\ColumnIterator' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnIterator.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Dimension' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Dimension.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Drawing' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Drawing.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Drawing\\Shadow' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Drawing/Shadow.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\HeaderFooter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/HeaderFooter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\HeaderFooterDrawing' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/HeaderFooterDrawing.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Iterator' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Iterator.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\MemoryDrawing' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/MemoryDrawing.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\PageBreak' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageBreak.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\PageMargins' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageMargins.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\PageSetup' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageSetup.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Pane' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Pane.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\ProtectedRange' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ProtectedRange.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Protection' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Protection.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Row' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Row.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\RowCellIterator' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\RowDimension' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowDimension.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\RowIterator' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowIterator.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\SheetView' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/SheetView.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Table' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Table\\Column' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/Column.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Table\\TableDxfsStyle' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/TableDxfsStyle.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Table\\TableStyle' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/TableStyle.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Validations' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Validations.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Worksheet\\Worksheet' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\BaseWriter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Csv' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Csv.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Exception' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Exception.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Html' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Html.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\IWriter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/IWriter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\AutoFilters' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/AutoFilters.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Cell\\Comment' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Cell/Comment.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Cell\\Style' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Cell/Style.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Content' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Content.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Formula' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Formula.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Meta' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Meta.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\MetaInf' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/MetaInf.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Mimetype' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Mimetype.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\NamedExpressions' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/NamedExpressions.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Settings' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Settings.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Styles' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Styles.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\Thumbnails' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Thumbnails.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Ods\\WriterPart' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/WriterPart.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Pdf' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Pdf\\Dompdf' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Dompdf.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Pdf\\Mpdf' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Mpdf.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Pdf\\Tcpdf' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Tcpdf.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Pdf\\TcpdfNoDie' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/TcpdfNoDie.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\BIFFwriter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/BIFFwriter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\CellDataValidation' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/CellDataValidation.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\ConditionalHelper' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/ConditionalHelper.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\ErrorCode' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/ErrorCode.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Escher' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Escher.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Font' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Font.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Parser' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Parser.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Style\\CellAlignment' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellAlignment.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Style\\CellBorder' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellBorder.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Style\\CellFill' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellFill.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Workbook' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Workbook.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Worksheet' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xls\\Xf' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Xf.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\AutoFilter' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/AutoFilter.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Chart' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Chart.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Comments' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Comments.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\ContentTypes' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\DefinedNames' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/DefinedNames.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\DocProps' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/DocProps.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Drawing' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Drawing.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\FunctionPrefix' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/FunctionPrefix.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Metadata' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Metadata.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Rels' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Rels.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\RelsRibbon' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/RelsRibbon.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\RelsVBA' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/RelsVBA.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\StringTable' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/StringTable.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Style' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Style.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Table' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Table.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Theme' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Theme.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Workbook' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\Worksheet' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx\\WriterPart' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/WriterPart.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\ZipStream0' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream0.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\ZipStream2' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream2.php',
|
||||||
|
'PhpOffice\\PhpSpreadsheet\\Writer\\ZipStream3' => $vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/ZipStream3.php',
|
||||||
|
'Psr\\Http\\Client\\ClientExceptionInterface' => $vendorDir . '/psr/http-client/src/ClientExceptionInterface.php',
|
||||||
|
'Psr\\Http\\Client\\ClientInterface' => $vendorDir . '/psr/http-client/src/ClientInterface.php',
|
||||||
|
'Psr\\Http\\Client\\NetworkExceptionInterface' => $vendorDir . '/psr/http-client/src/NetworkExceptionInterface.php',
|
||||||
|
'Psr\\Http\\Client\\RequestExceptionInterface' => $vendorDir . '/psr/http-client/src/RequestExceptionInterface.php',
|
||||||
|
'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
|
||||||
|
'Psr\\Http\\Message\\RequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/RequestFactoryInterface.php',
|
||||||
|
'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
|
||||||
|
'Psr\\Http\\Message\\ResponseFactoryInterface' => $vendorDir . '/psr/http-factory/src/ResponseFactoryInterface.php',
|
||||||
|
'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
|
||||||
|
'Psr\\Http\\Message\\ServerRequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/ServerRequestFactoryInterface.php',
|
||||||
|
'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
|
||||||
|
'Psr\\Http\\Message\\StreamFactoryInterface' => $vendorDir . '/psr/http-factory/src/StreamFactoryInterface.php',
|
||||||
|
'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
|
||||||
|
'Psr\\Http\\Message\\UploadedFileFactoryInterface' => $vendorDir . '/psr/http-factory/src/UploadedFileFactoryInterface.php',
|
||||||
|
'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
|
||||||
|
'Psr\\Http\\Message\\UriFactoryInterface' => $vendorDir . '/psr/http-factory/src/UriFactoryInterface.php',
|
||||||
|
'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
|
||||||
|
'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php',
|
||||||
|
'Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php',
|
||||||
|
'Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php',
|
||||||
|
'QRcode' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/qrcode.php',
|
||||||
|
'TCPDF' => $vendorDir . '/tecnickcom/tcpdf/tcpdf.php',
|
||||||
|
'TCPDF2DBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php',
|
||||||
|
'TCPDFBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_1d.php',
|
||||||
|
'TCPDF_COLORS' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_colors.php',
|
||||||
|
'TCPDF_FILTERS' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_filters.php',
|
||||||
|
'TCPDF_FONTS' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_fonts.php',
|
||||||
|
'TCPDF_FONT_DATA' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_font_data.php',
|
||||||
|
'TCPDF_IMAGES' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_images.php',
|
||||||
|
'TCPDF_STATIC' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_static.php',
|
||||||
|
'ZipStream\\CentralDirectoryFileHeader' => $vendorDir . '/maennchen/zipstream-php/src/CentralDirectoryFileHeader.php',
|
||||||
|
'ZipStream\\CompressionMethod' => $vendorDir . '/maennchen/zipstream-php/src/CompressionMethod.php',
|
||||||
|
'ZipStream\\DataDescriptor' => $vendorDir . '/maennchen/zipstream-php/src/DataDescriptor.php',
|
||||||
|
'ZipStream\\EndOfCentralDirectory' => $vendorDir . '/maennchen/zipstream-php/src/EndOfCentralDirectory.php',
|
||||||
|
'ZipStream\\Exception' => $vendorDir . '/maennchen/zipstream-php/src/Exception.php',
|
||||||
|
'ZipStream\\Exception\\DosTimeOverflowException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/DosTimeOverflowException.php',
|
||||||
|
'ZipStream\\Exception\\FileNotFoundException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/FileNotFoundException.php',
|
||||||
|
'ZipStream\\Exception\\FileNotReadableException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/FileNotReadableException.php',
|
||||||
|
'ZipStream\\Exception\\FileSizeIncorrectException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/FileSizeIncorrectException.php',
|
||||||
|
'ZipStream\\Exception\\OverflowException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/OverflowException.php',
|
||||||
|
'ZipStream\\Exception\\ResourceActionException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/ResourceActionException.php',
|
||||||
|
'ZipStream\\Exception\\SimulationFileUnknownException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/SimulationFileUnknownException.php',
|
||||||
|
'ZipStream\\Exception\\StreamNotReadableException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/StreamNotReadableException.php',
|
||||||
|
'ZipStream\\Exception\\StreamNotSeekableException' => $vendorDir . '/maennchen/zipstream-php/src/Exception/StreamNotSeekableException.php',
|
||||||
|
'ZipStream\\File' => $vendorDir . '/maennchen/zipstream-php/src/File.php',
|
||||||
|
'ZipStream\\GeneralPurposeBitFlag' => $vendorDir . '/maennchen/zipstream-php/src/GeneralPurposeBitFlag.php',
|
||||||
|
'ZipStream\\LocalFileHeader' => $vendorDir . '/maennchen/zipstream-php/src/LocalFileHeader.php',
|
||||||
|
'ZipStream\\OperationMode' => $vendorDir . '/maennchen/zipstream-php/src/OperationMode.php',
|
||||||
|
'ZipStream\\PackField' => $vendorDir . '/maennchen/zipstream-php/src/PackField.php',
|
||||||
|
'ZipStream\\Time' => $vendorDir . '/maennchen/zipstream-php/src/Time.php',
|
||||||
|
'ZipStream\\Version' => $vendorDir . '/maennchen/zipstream-php/src/Version.php',
|
||||||
|
'ZipStream\\Zip64\\DataDescriptor' => $vendorDir . '/maennchen/zipstream-php/src/Zip64/DataDescriptor.php',
|
||||||
|
'ZipStream\\Zip64\\EndOfCentralDirectory' => $vendorDir . '/maennchen/zipstream-php/src/Zip64/EndOfCentralDirectory.php',
|
||||||
|
'ZipStream\\Zip64\\EndOfCentralDirectoryLocator' => $vendorDir . '/maennchen/zipstream-php/src/Zip64/EndOfCentralDirectoryLocator.php',
|
||||||
|
'ZipStream\\Zip64\\ExtendedInformationExtraField' => $vendorDir . '/maennchen/zipstream-php/src/Zip64/ExtendedInformationExtraField.php',
|
||||||
|
'ZipStream\\ZipStream' => $vendorDir . '/maennchen/zipstream-php/src/ZipStream.php',
|
||||||
|
'ZipStream\\Zs\\ExtendedInformationExtraField' => $vendorDir . '/maennchen/zipstream-php/src/Zs/ExtendedInformationExtraField.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\BitBuffer' => $vendorDir . '/chillerlan/php-qrcode/src/Common/BitBuffer.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\ECICharset' => $vendorDir . '/chillerlan/php-qrcode/src/Common/ECICharset.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\EccLevel' => $vendorDir . '/chillerlan/php-qrcode/src/Common/EccLevel.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\GDLuminanceSource' => $vendorDir . '/chillerlan/php-qrcode/src/Common/GDLuminanceSource.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\GF256' => $vendorDir . '/chillerlan/php-qrcode/src/Common/GF256.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\GenericGFPoly' => $vendorDir . '/chillerlan/php-qrcode/src/Common/GenericGFPoly.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\IMagickLuminanceSource' => $vendorDir . '/chillerlan/php-qrcode/src/Common/IMagickLuminanceSource.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\LuminanceSourceAbstract' => $vendorDir . '/chillerlan/php-qrcode/src/Common/LuminanceSourceAbstract.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\LuminanceSourceInterface' => $vendorDir . '/chillerlan/php-qrcode/src/Common/LuminanceSourceInterface.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\MaskPattern' => $vendorDir . '/chillerlan/php-qrcode/src/Common/MaskPattern.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\Mode' => $vendorDir . '/chillerlan/php-qrcode/src/Common/Mode.php',
|
||||||
|
'chillerlan\\QRCode\\Common\\Version' => $vendorDir . '/chillerlan/php-qrcode/src/Common/Version.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\AlphaNum' => $vendorDir . '/chillerlan/php-qrcode/src/Data/AlphaNum.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\Byte' => $vendorDir . '/chillerlan/php-qrcode/src/Data/Byte.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\ECI' => $vendorDir . '/chillerlan/php-qrcode/src/Data/ECI.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\Hanzi' => $vendorDir . '/chillerlan/php-qrcode/src/Data/Hanzi.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\Kanji' => $vendorDir . '/chillerlan/php-qrcode/src/Data/Kanji.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\Number' => $vendorDir . '/chillerlan/php-qrcode/src/Data/Number.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\QRCodeDataException' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRCodeDataException.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\QRData' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRData.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\QRDataModeAbstract' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRDataModeAbstract.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\QRDataModeInterface' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRDataModeInterface.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\QRMatrix' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRMatrix.php',
|
||||||
|
'chillerlan\\QRCode\\Data\\ReedSolomonEncoder' => $vendorDir . '/chillerlan/php-qrcode/src/Data/ReedSolomonEncoder.php',
|
||||||
|
'chillerlan\\QRCode\\Decoder\\Binarizer' => $vendorDir . '/chillerlan/php-qrcode/src/Decoder/Binarizer.php',
|
||||||
|
'chillerlan\\QRCode\\Decoder\\BitMatrix' => $vendorDir . '/chillerlan/php-qrcode/src/Decoder/BitMatrix.php',
|
||||||
|
'chillerlan\\QRCode\\Decoder\\Decoder' => $vendorDir . '/chillerlan/php-qrcode/src/Decoder/Decoder.php',
|
||||||
|
'chillerlan\\QRCode\\Decoder\\DecoderResult' => $vendorDir . '/chillerlan/php-qrcode/src/Decoder/DecoderResult.php',
|
||||||
|
'chillerlan\\QRCode\\Decoder\\QRCodeDecoderException' => $vendorDir . '/chillerlan/php-qrcode/src/Decoder/QRCodeDecoderException.php',
|
||||||
|
'chillerlan\\QRCode\\Decoder\\ReedSolomonDecoder' => $vendorDir . '/chillerlan/php-qrcode/src/Decoder/ReedSolomonDecoder.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\AlignmentPattern' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/AlignmentPattern.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\AlignmentPatternFinder' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/AlignmentPatternFinder.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\Detector' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/Detector.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\FinderPattern' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/FinderPattern.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\FinderPatternFinder' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/FinderPatternFinder.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\GridSampler' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/GridSampler.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\PerspectiveTransform' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/PerspectiveTransform.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\QRCodeDetectorException' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/QRCodeDetectorException.php',
|
||||||
|
'chillerlan\\QRCode\\Detector\\ResultPoint' => $vendorDir . '/chillerlan/php-qrcode/src/Detector/ResultPoint.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRCodeOutputException' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QREps' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QREps.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRFpdf' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRFpdf.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRGdImage' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRGdImage.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRGdImageBMP' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRGdImageBMP.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRGdImageGIF' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRGdImageGIF.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRGdImageJPEG' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRGdImageJPEG.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRGdImagePNG' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRGdImagePNG.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRGdImageWEBP' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRGdImageWEBP.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRImage' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRImage.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRImagick' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRImagick.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRMarkup' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRMarkup.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRMarkupHTML' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRMarkupHTML.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRMarkupSVG' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRMarkupSVG.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QROutputAbstract' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QROutputAbstract.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QROutputInterface' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QROutputInterface.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRString' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRString.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRStringJSON' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRStringJSON.php',
|
||||||
|
'chillerlan\\QRCode\\Output\\QRStringText' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRStringText.php',
|
||||||
|
'chillerlan\\QRCode\\QRCode' => $vendorDir . '/chillerlan/php-qrcode/src/QRCode.php',
|
||||||
|
'chillerlan\\QRCode\\QRCodeException' => $vendorDir . '/chillerlan/php-qrcode/src/QRCodeException.php',
|
||||||
|
'chillerlan\\QRCode\\QROptions' => $vendorDir . '/chillerlan/php-qrcode/src/QROptions.php',
|
||||||
|
'chillerlan\\QRCode\\QROptionsTrait' => $vendorDir . '/chillerlan/php-qrcode/src/QROptionsTrait.php',
|
||||||
|
'chillerlan\\Settings\\SettingsContainerAbstract' => $vendorDir . '/chillerlan/php-settings-container/src/SettingsContainerAbstract.php',
|
||||||
|
'chillerlan\\Settings\\SettingsContainerInterface' => $vendorDir . '/chillerlan/php-settings-container/src/SettingsContainerInterface.php',
|
||||||
);
|
);
|
||||||
|
|||||||
2
vendor/composer/autoload_files.php
vendored
2
vendor/composer/autoload_files.php
vendored
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
// autoload_files.php @generated by Composer
|
// autoload_files.php @generated by Composer
|
||||||
|
|
||||||
$vendorDir = dirname(dirname(__FILE__));
|
$vendorDir = dirname(__DIR__);
|
||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user