'Octoprint', 'enabled' => true, 'image' => 'plugins/images/tabs/octoprint.png', 'category' => 'Monitor', 'settingsArray' => __FUNCTION__ ]; if ($infoOnly) { return $homepageInformation; } $homepageSettings = [ 'debug' => true, 'settings' => [ 'Enable' => [ $this->settingsOption('enable', 'homepageOctoprintEnabled'), $this->settingsOption('auth', 'homepageOctoprintAuth'), ], 'Connection' => [ $this->settingsOption('url', 'octoprintURL'), $this->settingsOption('token', 'octoprintToken'), $this->settingsOption('disable-cert-check', 'octoprintDisableCertCheck'), $this->settingsOption('use-custom-certificate', 'octoprintUseCustomCertificate'), ], 'Options' => [ $this->settingsOption('title', 'octoprintHeader'), $this->settingsOption('toggle-title', 'octoprintHeaderToggle'), ], ] ]; return array_merge($homepageInformation, $homepageSettings); } public function octoprintHomepagePermissions($key = null) { $permissions = [ 'main' => [ 'enabled' => [ 'homepageOctoprintEnabled' ], 'auth' => [ 'homepageOctoprintAuth' ], 'not_empty' => [ 'octoprintURL', 'octoprintToken' ] ] ]; return $this->homepageCheckKeyPermissions($key, $permissions); } public function homepageOrderOctoprint() { if ($this->homepageItemPermissions($this->octoprintHomepagePermissions('main'))) { return '

Loading OctoPrint...

'; } } public function getOctoprintHomepageData() { if (!$this->homepageItemPermissions($this->octoprintHomepagePermissions('main'), true)) { return false; } $api = []; $url = $this->qualifyURL($this->config['octoprintURL']); $endpoints = ['job', 'settings']; $api['data']['url'] = $this->config['octoprintURL']; foreach ($endpoints as $endpoint) { $dataUrl = $url . '/api/' . $endpoint; try { $headers = array('X-API-KEY' => $this->config['octoprintToken']); $options = $this->requestOptions($url, $this->config['homepageOctoprintRefresh'], $this->config['octoprintDisableCertCheck'], $this->config['octoprintUseCustomCertificate']); $response = Requests::get($dataUrl, $headers, $options); if ($response->success) { $json = json_decode($response->body, true); $api['data'][$endpoint] = $json; $api['options'] = [ 'title' => $this->config['octoprintHeader'], 'titleToggle' => $this->config['octoprintHeaderToggle'], ]; } else { $this->setAPIResponse('error', 'OctoPrint connection error', 409); return false; } } catch (Requests_Exception $e) { $this->setLoggerChannel('Octoprint')->error($e); $this->setResponse(500, $e->getMessage()); return false; }; } $api = isset($api) ? $api : false; $this->setAPIResponse('success', null, 200, $api); return $api; } }