summaryrefslogtreecommitdiffstats
path: root/modules-available/roomplanner/inc/composedroom.inc.php
diff options
context:
space:
mode:
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);
+ }
+
+}