summaryrefslogtreecommitdiffstats
path: root/modules-available/roomplanner/inc/composedroom.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2019-07-17 16:52:02 +0200
committerSimon Rettberg2019-07-17 16:52:02 +0200
commit3da096142d44c31e180fb54c02ae9e9ff01b7dda (patch)
treec715a36c2fbbcd8e17bf7f80395fd4677416ec95 /modules-available/roomplanner/inc/composedroom.inc.php
parent[roomplanner] Use .cachedScript() from slx-fixes (diff)
downloadslx-admin-3da096142d44c31e180fb54c02ae9e9ff01b7dda.tar.gz
slx-admin-3da096142d44c31e180fb54c02ae9e9ff01b7dda.tar.xz
slx-admin-3da096142d44c31e180fb54c02ae9e9ff01b7dda.zip
[roomplanner] First prototype of composed room editor
Saving/loading works, but no entry is generated for pvs.ini. Also this approach fails to meaningfully handle rooms with two removable walls where you also want to use both possible combinations of two combined rooms and a single one.
Diffstat (limited to 'modules-available/roomplanner/inc/composedroom.inc.php')
-rw-r--r--modules-available/roomplanner/inc/composedroom.inc.php77
1 files changed, 77 insertions, 0 deletions
diff --git a/modules-available/roomplanner/inc/composedroom.inc.php b/modules-available/roomplanner/inc/composedroom.inc.php
new file mode 100644
index 00000000..11e8455e
--- /dev/null
+++ b/modules-available/roomplanner/inc/composedroom.inc.php
@@ -0,0 +1,77 @@
+<?php
+
+class ComposedRoom
+{
+ /**
+ * @var string How to compose contained rooms. Value is either horizontal or vertical.
+ */
+ public $orientation = 'horizontal';
+
+ /**
+ * @var int[] Order in which contained rooms are composed. List of locationid.
+ */
+ public $list;
+
+ /**
+ * @var bool Whether composed room is active, ie. visible in PVS.
+ */
+ public $enabled;
+
+ /**
+ * @var int locationid of contained room that is the controlling room;
+ */
+ public $controlRoom;
+
+ public function __construct($data)
+ {
+ if ($data instanceof ComposedRoom) {
+ foreach ($data as $k => $v) {
+ $this->{$k} = $v;
+ }
+ } else {
+ if (is_array($data) && isset($data['roomplan'])) {
+ // From DB
+ $data = json_decode($data['roomplan'], true);
+ } elseif (is_string($data)) {
+ // Just JSON
+ $data = json_decode($data, true);
+ }
+ if (is_array($data)) {
+ foreach ($this as $k => $v) {
+ if (isset($data[$k])) {
+ $this->{$k} = $data[$k];
+ }
+ }
+ }
+ }
+ $this->sanitize();
+ }
+
+ /**
+ * Make sure all member vars have the proper type
+ */
+ private function sanitize()
+ {
+ $this->orientation = ($this->orientation === 'horizontal' ? 'horizontal' : 'vertical');
+ settype($this->enabled, 'bool');
+ settype($this->list, 'array');
+ settype($this->controlRoom, 'int');
+ foreach ($this->list as &$v) {
+ settype($v, 'int');
+ }
+ $this->list = array_values($this->list);
+ if (!empty($this->list) && !in_array($this->controlRoom, $this->list)) {
+ $this->controlRoom = $this->list[0];
+ }
+ }
+
+ /**
+ * @return false|string JSON
+ */
+ public function serialize()
+ {
+ $this->sanitize();
+ return json_encode($this);
+ }
+
+}