From 3c3db309b001354cd28d1f3e0192e8f4eb5d1ca2 Mon Sep 17 00:00:00 2001
From: Christian Klinger
Date: Mon, 5 Sep 2016 13:25:54 +0200
Subject: added "zurück"-Button to "Generisches Modul".
---
modules-available/sysconfig/templates/custom-upload.html | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
(limited to 'modules-available')
diff --git a/modules-available/sysconfig/templates/custom-upload.html b/modules-available/sysconfig/templates/custom-upload.html
index c453a97d..51677f8b 100644
--- a/modules-available/sysconfig/templates/custom-upload.html
+++ b/modules-available/sysconfig/templates/custom-upload.html
@@ -14,5 +14,11 @@
{{lang_supportedFiles}}: .tar.gz, .tar.bz2, .zip
-
+
+
+
+
+
--
cgit v1.2.3-55-g7522
From 4a7d0b5c799f915b9ca84dc0418bc7a7a6185f2e Mon Sep 17 00:00:00 2001
From: Christian Klinger
Date: Mon, 5 Sep 2016 17:07:24 +0200
Subject: Added a pvs.ini file generator.
---
.../roomplanner/inc/pvsgenerator.inc.php | 154 +++++++++++++++++++++
modules-available/roomplanner/page.inc.php | 7 +
2 files changed, 161 insertions(+)
create mode 100644 modules-available/roomplanner/inc/pvsgenerator.inc.php
(limited to 'modules-available')
diff --git a/modules-available/roomplanner/inc/pvsgenerator.inc.php b/modules-available/roomplanner/inc/pvsgenerator.inc.php
new file mode 100644
index 00000000..21ee199b
--- /dev/null
+++ b/modules-available/roomplanner/inc/pvsgenerator.inc.php
@@ -0,0 +1,154 @@
+fetch(PDO::FETCH_ASSOC)) {
+ if (Location::isLeaf($row['locationid'])) {
+ $rooms[] = $row;
+ }
+ }
+ /* collect names */
+ $roomNames = array();
+
+ foreach($rooms as $room) {
+ $roomNames[] = $room['locationname'];
+ }
+
+ /* add [General]-block */
+ $config = "[General]\n";
+ $config .= 'rooms=' . implode(', ', $roomNames) . "\n";
+ $config .= "allowClientQuit=True\n"; // TODO: remove this
+ $config .= "showLockDesktopButton=True\n"; // TODO: Make this configurable (or not)
+ $config .= "\n\n";
+
+ /* foreach room generate room-block */
+ foreach($rooms as $room) {
+ $config .= PvsGenerator::generateRoomBlock($room);
+ $config .= "\n";
+ }
+
+ return $config;
+ }
+
+ private static function generateRoomBlock($room)
+ {
+ $out = '[' . $room['locationname'] . "]\n";
+
+
+ /* find all clients in that room */
+ $machines = PvsGenerator::getMachines($room['locationid']);
+ /* manager */
+ $mgr = $room['managerip'];
+ $tutor = $room['tutorip'];
+ if ($mgr) {
+ $out .= 'mgrIP=' . $mgr . "\n";
+ }
+ /* tutor */
+ if ($tutor) {
+ $out .= 'tutorIP' . $tutor . "\n";
+ }
+
+ /* grid */
+ $out .= PvsGenerator::generateGrid($machines);
+
+ return $out;
+ }
+
+ private static function generateGrid($machines)
+ {
+ $out = "";
+
+ /* this is a virtual grid, we first need this to do some optimizations */
+ $grid = array();
+ /* add each contained client with position and ip */
+ foreach ($machines as $machine) {
+ $grid[$machine['clientip']] = [$machine['gridCol'], $machine['gridRow']];
+ }
+ /* find bounding box */
+ PvsGenerator::boundingBox($grid, $minX, $minY, $maxX, $maxY);
+ $clientSizeX = 4; /* TODO: optimize */
+ $clientSizeY = 4; /* TODO: optimize */
+ $sizeX = max($maxX - $minX + $clientSizeX, 1); /* never negative */
+ $sizeY = max($maxY - $minY + $clientSizeY, 1); /* and != 0 to avoid divide-by-zero in pvsmgr */
+
+ /* zoom all clients into bounding box */
+ foreach ($grid as $ip => $pos) {
+ $newX = $grid[$ip][X] - $minX;
+ $newY = $grid[$ip][Y] - $minY;
+ $grid[$ip] = [$newX, $newY];
+ }
+
+ $out .= "gridSize=@Size($sizeX $sizeY)\n";
+ $out .= "clientSize=@Size($clientSizeX $clientSizeY)\n";
+ $out .= "client\\size=" . count($grid) . "\n";
+
+ $i = 1;
+ foreach ($grid as $ip => $pos) {
+ $out .= "client\\" . $i . "\\ip=$ip\n";
+ $out .= "client\\" . $i++ . "\\pos=@Point(" . $pos[X] . ' ' . $pos[Y] . ")\n";
+ }
+
+ return $out;
+
+ }
+
+
+
+ private static function getMachines($roomid) {
+ $ret = Database::simpleQuery(
+ 'SELECT clientip, position FROM machine WHERE locationid = :locationid',
+ ['locationid' => $roomid]);
+
+ $machines = array();
+
+ while ($row = $ret->fetch(PDO::FETCH_ASSOC)) {
+ $position = json_decode($row['position'], true);
+
+ $machine = array();
+ $machine['clientip'] = $row['clientip'];
+ $machine['gridRow'] = $position['gridRow'];
+ $machine['gridCol'] = $position['gridCol'];
+ $machine['tutor'] = false; /* TODO: find out if machine is default tutor */
+ $machine['manager'] = false; /* TODO: find out if machine is manager */
+
+ $machines[] = $machine;
+ }
+
+ return $machines;
+
+ }
+
+ private static function boundingBox($grid, &$minX, &$minY, &$maxX, &$maxY ) {
+ $minX = PHP_INT_MAX; /* PHP_INT_MIN is only avaiable since PHP 7 */
+ $maxX = ~PHP_INT_MAX;
+ $minY = PHP_INT_MAX;
+ $maxY = ~PHP_INT_MAX;
+
+ foreach ($grid as $pos) {
+ $minX = min($minX, $pos[X]);
+ $maxX = max($maxX, $pos[X]);
+ $minY = min($minY, $pos[Y]);
+ $maxY = max($maxY, $pos[Y]);
+ }
+ }
+
+}
+
diff --git a/modules-available/roomplanner/page.inc.php b/modules-available/roomplanner/page.inc.php
index 7152f015..0d4b7ee9 100644
--- a/modules-available/roomplanner/page.inc.php
+++ b/modules-available/roomplanner/page.inc.php
@@ -19,6 +19,13 @@ class Page_Roomplanner extends Page
if ($locationid === null) { die('please specify locationid'); }
+ if (Request::get('pvs', false, 'bool')) {
+ /* return a pvs-file */
+ echo "";
+ echo PvsGenerator::generate($locationid);
+ echo "
";
+ die();
+ }
$furniture = $this->getFurniture($locationid);
$subnetMachines = $this->getPotentialMachines($locationid);
--
cgit v1.2.3-55-g7522