diff options
author | Simon Rettberg | 2019-07-17 16:52:02 +0200 |
---|---|---|
committer | Simon Rettberg | 2019-07-17 16:52:02 +0200 |
commit | 3da096142d44c31e180fb54c02ae9e9ff01b7dda (patch) | |
tree | c715a36c2fbbcd8e17bf7f80395fd4677416ec95 /modules-available/roomplanner/inc/composedroom.inc.php | |
parent | [roomplanner] Use .cachedScript() from slx-fixes (diff) | |
download | slx-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.php | 77 |
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); + } + +} |