Compare commits
2 Commits
403099ebd6
...
930bd7de4b
Author | SHA1 | Date |
---|---|---|
schrom01 | 930bd7de4b | |
schrom01 | a945fca764 |
Binary file not shown.
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
$fileName = $_SERVER['DOCUMENT_ROOT'] . '/data/data.xlsx';
|
||||
function objectToArray($object, $fullJSON) {
|
||||
return [$object -> id,
|
||||
$object -> lastSave,
|
||||
$fullJSON,
|
||||
$object -> timeWatchM,
|
||||
$object -> timeWatchW,
|
||||
$object -> timeWatchD,
|
||||
$object -> countWatchM,
|
||||
$object -> countWatchW,
|
||||
$object -> countWatchD];
|
||||
}
|
||||
|
||||
function findRowIndex($id, $data) {
|
||||
$rowCounter = -1;
|
||||
foreach ($data as $row) {
|
||||
$rowCounter ++;
|
||||
if($row[0] == $id) {
|
||||
return $rowCounter;
|
||||
}
|
||||
}
|
||||
return $rowCounter + 1;
|
||||
}
|
||||
|
||||
$entityBody = '{"lastSave": 0, "timeWatchM": 23, "timeWatchW": 89, "timeWatchD": 34, "countWatchM": 65, "countWatchW": 56, "countWatchD": 9, "id":"test","watches":[{"actions":[]},{"actions":[]},{"actions":[]}]}';
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
|
||||
$entityBody = file_get_contents('php://input');
|
||||
}
|
||||
|
||||
$entityBodyObject = json_decode($entityBody);
|
||||
|
||||
|
||||
require $_SERVER['DOCUMENT_ROOT'] . '/spreadSheetReader/read_write_xlsx.php';
|
||||
if(property_exists($entityBodyObject, "id")) {
|
||||
$data = read_xls_file($fileName);
|
||||
$rowIndex = findRowIndex($entityBodyObject->id, $data);
|
||||
$data[$rowIndex] = objectToArray($entityBodyObject, $entityBody);
|
||||
write_xlsxFile($fileName, $data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
281
index.html
281
index.html
|
@ -1,142 +1,141 @@
|
|||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="stylesheet" href="css/custom.css">
|
||||
<link rel="stylesheet" href="css/bootstrap.css">
|
||||
<title>Genderwatch-protocol</title>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<section>
|
||||
<div class="container">
|
||||
<h1>Genderwatch-protocol</h1>
|
||||
<h2 style="margin-left: 10px;">Aktuelles Thema</h2>
|
||||
<table class="table-bordered">
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input class="form-control" type="text" id="topicInput" placeholder="Thema hier eingeben">
|
||||
</td>
|
||||
<td>
|
||||
<button class="" onclick="closeTopic()">
|
||||
Thema abschliessen
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
M
|
||||
</th>
|
||||
<th>
|
||||
W
|
||||
</th>
|
||||
<th>
|
||||
D
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td id="time-0">
|
||||
0
|
||||
</td>
|
||||
<td id="time-1">
|
||||
0
|
||||
</td>
|
||||
<td id="time-2">
|
||||
0
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="count-0">
|
||||
0
|
||||
</td>
|
||||
<td id="count-1">
|
||||
0
|
||||
</td>
|
||||
<td id="count-2">
|
||||
0
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<button class="" onclick="start(0)">Beginnt zu Reden</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="" onclick="start(1)">Beginnt zu Reden</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="" onclick="start(2)">Beginnt zu Reden</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<button class="" style="width: 98%;" onclick="stop()">Hört auf zu Reden, -> Stille</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<button class="" style="width: 98%;" onclick="resetButton()">Reset</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
|
||||
|
||||
<H2>Abgeschlossene Themen</H2>
|
||||
<button class="" onclick="buttonDeleteAllClosedTopics()">alle Löschen</button>
|
||||
<table class="table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="min-width: 100px;">
|
||||
Thema
|
||||
</th>
|
||||
<th style="min-width: 100px;">
|
||||
M
|
||||
</th>
|
||||
<th style="min-width: 100px;">
|
||||
W
|
||||
</th>
|
||||
<th style="min-width: 100px;">
|
||||
D
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="closedTopicsTable">
|
||||
|
||||
</tbody>
|
||||
|
||||
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<script src="js/functions.js"></script>
|
||||
<script>
|
||||
closedTopics = JSON.parse(localStorage.getItem("closedTopics"))
|
||||
if(!closedTopics) {
|
||||
closedTopics = []
|
||||
}
|
||||
|
||||
actualTopic = JSON.parse(localStorage.getItem("actualTopic"))
|
||||
if(!actualTopic) {
|
||||
actualTopic = {}
|
||||
reset()
|
||||
}
|
||||
document.getElementById("topicInput").value = actualTopic.name
|
||||
|
||||
document.getElementById("topicInput").addEventListener('keyup', saveActualTopicName);
|
||||
refreshClosedTopics()
|
||||
setInterval(() => {
|
||||
refreshWatch(0)
|
||||
refreshWatch(1)
|
||||
refreshWatch(2)
|
||||
}, 100);
|
||||
</script>
|
||||
</body>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="stylesheet" href="css/custom.css">
|
||||
<link rel="stylesheet" href="css/bootstrap.css">
|
||||
<title>Genderwatch-protocol</title>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<section>
|
||||
<div class="container">
|
||||
<h1>Genderwatch-protocol</h1>
|
||||
<h2 style="margin-left: 10px;">Aktuelles Thema</h2>
|
||||
<table class="table-bordered">
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input class="form-control" type="text" id="topicInput" placeholder="Thema hier eingeben">
|
||||
</td>
|
||||
<td>
|
||||
<button class="" onclick="closeTopic()">
|
||||
Thema abschliessen
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
M
|
||||
</th>
|
||||
<th>
|
||||
W
|
||||
</th>
|
||||
<th>
|
||||
D
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td id="time-0">
|
||||
0
|
||||
</td>
|
||||
<td id="time-1">
|
||||
0
|
||||
</td>
|
||||
<td id="time-2">
|
||||
0
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="count-0">
|
||||
0
|
||||
</td>
|
||||
<td id="count-1">
|
||||
0
|
||||
</td>
|
||||
<td id="count-2">
|
||||
0
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<button class="" onclick="start(0)">Beginnt zu Reden</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="" onclick="start(1)">Beginnt zu Reden</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="" onclick="start(2)">Beginnt zu Reden</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<button class="" style="width: 98%;" onclick="stop()">Hört auf zu Reden, -> Stille</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<button class="" style="width: 98%;" onclick="resetButton()">Reset</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
|
||||
|
||||
<H2>Abgeschlossene Themen</H2>
|
||||
<button class="" onclick="buttonDeleteAllClosedTopics()">alle Löschen</button>
|
||||
<table class="table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="min-width: 100px;">
|
||||
Thema
|
||||
</th>
|
||||
<th style="min-width: 100px;">
|
||||
M
|
||||
</th>
|
||||
<th style="min-width: 100px;">
|
||||
W
|
||||
</th>
|
||||
<th style="min-width: 100px;">
|
||||
D
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="closedTopicsTable">
|
||||
|
||||
</tbody>
|
||||
|
||||
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<script src="js/functions.js"></script>
|
||||
<script>
|
||||
closedTopics = JSON.parse(localStorage.getItem("closedTopics"))
|
||||
if(!closedTopics) {
|
||||
closedTopics = []
|
||||
}
|
||||
|
||||
actualTopic = JSON.parse(localStorage.getItem("actualTopic"))
|
||||
if(!actualTopic) {
|
||||
initializeNewTopic()
|
||||
}
|
||||
document.getElementById("topicInput").value = actualTopic.name
|
||||
|
||||
document.getElementById("topicInput").addEventListener('keyup', saveActualTopicName);
|
||||
refreshClosedTopics()
|
||||
setInterval(() => {
|
||||
refreshWatch(0)
|
||||
refreshWatch(1)
|
||||
refreshWatch(2)
|
||||
}, 100);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,6 +1,12 @@
|
|||
function initializeNewTopic() {
|
||||
actualTopic = {"name": "", "id": randomId()}
|
||||
reset()
|
||||
document.getElementById("topicInput").value = actualTopic.name
|
||||
}
|
||||
|
||||
function reset() {
|
||||
actualTopic.watches = [{"actions": []}, {"actions": []}, {"actions": []}]
|
||||
saveActualTopicToLocalStorage()
|
||||
saveActualTopic()
|
||||
}
|
||||
|
||||
function resetButton() {
|
||||
|
@ -12,7 +18,7 @@ function resetButton() {
|
|||
function buttonDeleteAllClosedTopics() {
|
||||
if(confirm("Sollen alle abgeschlossenen Themen gelöscht werden?")) {
|
||||
closedTopics = []
|
||||
saveClosedTopicsToLocalStorage()
|
||||
saveClosedTopics()
|
||||
refreshClosedTopics()
|
||||
}
|
||||
}
|
||||
|
@ -43,17 +49,14 @@ function closeTopic() {
|
|||
}
|
||||
actualTopic.name = name
|
||||
closedTopics.push(actualTopic)
|
||||
actualTopic = {"name": ""}
|
||||
reset()
|
||||
document.getElementById("topicInput").value = actualTopic.name
|
||||
saveActualTopicToLocalStorage()
|
||||
saveClosedTopicsToLocalStorage()
|
||||
saveClosedTopics()
|
||||
refreshClosedTopics()
|
||||
initializeNewTopic()
|
||||
}
|
||||
|
||||
function deleteTopic(topicIndex) {
|
||||
closedTopics = closedTopics.slice(0, topicIndex).concat(closedTopics.slice(topicIndex+1))
|
||||
saveClosedTopicsToLocalStorage()
|
||||
saveClosedTopics()
|
||||
refreshClosedTopics()
|
||||
}
|
||||
|
||||
|
@ -64,14 +67,14 @@ function reopenTopic(topicIndex) {
|
|||
actualTopic = closedTopics[topicIndex]
|
||||
document.getElementById("topicInput").value = actualTopic.name
|
||||
deleteTopic(topicIndex)
|
||||
saveClosedTopicsToLocalStorage()
|
||||
saveActualTopicToLocalStorage()
|
||||
saveClosedTopics()
|
||||
saveActualTopic()
|
||||
}
|
||||
|
||||
function start(watchIndex) {
|
||||
stop()
|
||||
actualTopic.watches[watchIndex].actions.push({"type": "start", "time": new Date().getTime()})
|
||||
saveActualTopicToLocalStorage()
|
||||
saveActualTopic()
|
||||
}
|
||||
|
||||
function stop() {
|
||||
|
@ -82,7 +85,7 @@ function stop() {
|
|||
}
|
||||
}
|
||||
});
|
||||
saveActualTopicToLocalStorage()
|
||||
saveActualTopic()
|
||||
}
|
||||
|
||||
function calcPercForWatch(watchIndex, topic) {
|
||||
|
@ -181,14 +184,18 @@ function refreshClosedTopics() {
|
|||
|
||||
function saveActualTopicName() {
|
||||
actualTopic.name = document.getElementById("topicInput").value
|
||||
saveActualTopicToLocalStorage()
|
||||
saveActualTopic()
|
||||
}
|
||||
|
||||
function saveActualTopicToLocalStorage() {
|
||||
|
||||
|
||||
function saveActualTopic() {
|
||||
//save it to LocalStorage
|
||||
localStorage.setItem("actualTopic", JSON.stringify(actualTopic))
|
||||
}
|
||||
|
||||
function saveClosedTopicsToLocalStorage() {
|
||||
function saveClosedTopics() {
|
||||
//save it to LocalStorage
|
||||
localStorage.setItem("closedTopics", JSON.stringify(closedTopics))
|
||||
}
|
||||
|
||||
|
@ -204,4 +211,10 @@ function elt (type, attrs, ...children) {
|
|||
else node.appendChild(document.createTextNode(child))
|
||||
}
|
||||
return node
|
||||
}
|
||||
|
||||
// random.ts
|
||||
function randomId() {
|
||||
const uint32 = window.crypto.getRandomValues(new Uint32Array(1))[0];
|
||||
return uint32.toString(16);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
require $_SERVER['DOCUMENT_ROOT'] . '/spreadSheetReader/SimpleXLSX.php';
|
||||
require $_SERVER['DOCUMENT_ROOT'] . '/spreadSheetReader/SimpleXLSXGen.php';
|
||||
function read_xls_file($filename){
|
||||
$fileContent = [];
|
||||
if ($xlsx = SimpleXLSX::parse($filename)) {
|
||||
$fileContent = ($xlsx->rows());
|
||||
} else {
|
||||
echo SimpleXLSX::parseError();
|
||||
}
|
||||
return $fileContent;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function write_xlsxFile($filename, $data) {
|
||||
|
||||
foreach ($data as $row) {
|
||||
echo "new Row: <br>";
|
||||
foreach ($row as $cell) {
|
||||
echo $cell." ";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$xlsx = SimpleXLSXGen::fromArray($data);
|
||||
$xlsx->saveAs($filename);
|
||||
}
|
Loading…
Reference in New Issue