loadMe(); $this->me = $me; $this->layout()->set("me", $me); } protected function restartRaspberryPi($id) { $display = RaspberryDisplayModel::get($id); $ssh = new SSH2($display->ip_address, $this->port); $ssh->login($this->username, $this->password); $ssh->exec('sudo reboot now'); return true; } protected function getDisplaysApi(): array { $displays = RaspberryDisplayModel::getAll(); $result = []; foreach ($displays as $display) { $result[] = [ "display_label" => $display->display_label, "hostname" => $display->hostname, "ip" => $display->ip_address, "display_url" => $display->display_url, "auto_refresh_enabled" => $display->auto_refresh_enabled === "1", "margin_hot_fix_enabled" => $display->margin_hot_fix_enabled === "1", "custom_style" => $display->custom_style, "id" => $display->id, ]; } return $result; } protected function change() { $displayID = $this->request->displayID; $field = $this->request->field; $value = $this->request->value; $value = $value === "true" ? 1 : ($value === "false" ? 0 : $value); $display = RaspberryDisplayModel::get($displayID); if ($display === null) { return false; } $display->$field = $value; $display->save(); return true; } protected function getConfig() { $hostname = $this->request->hostname; $displays = RaspberryDisplayModel::getByHostname($hostname); if ($displays === null) { die("No display found for this hostname and ip:" . $hostname . " X " . $ip); } return array_map(function ($display) { return [ "display_url" => $display->data->display_url, "auto_refresh_enabled" => $display->data->auto_refresh_enabled === "1", "margin_hot_fix_enabled" => $display->data->margin_hot_fix_enabled === "1", "id" => $display->id, ]; } , $displays); } protected function apiAction() { $do = $this->request->do; if ($do !== "getConfig" && !$this->me->is("employee")) { $this->redirect("dashboard"); } switch ($do) { case "getDisplays": $return = $this->getDisplaysApi(); break; case "change": $return = $this->change(); break; case "reboot": $return = $this->restartRaspberryPi($this->request->displayID); break; case "getConfig": $return = $this->getConfig(); break; default: $return = false; break; } $data = []; if ($return === true) { $data = ["status" => "success"]; $this->returnJson($data); } if(!is_array($return) || !count($return)) { $data = ["status" => "error"]; $this->returnJson($data); } $data['status'] = "OK"; $data['result'] = $return; $this->returnJson($data); } protected function indexAction(): void { $this->layout()->setTemplate("RaspberryDisplay/Index"); } }