octoprint.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. trait OctoPrintHomepageItem
  3. {
  4. public function getOctoprintHomepageData()
  5. {
  6. if (!$this->config['homepageOctoprintEnabled']) {
  7. $this->setAPIResponse('error', 'OctoPrint homepage item is not enabled', 409);
  8. return false;
  9. }
  10. if (!$this->qualifyRequest($this->config['homepageOctoprintAuth'])) {
  11. $this->setAPIResponse('error', 'User not approved to view this homepage item', 401);
  12. return false;
  13. }
  14. if (empty($this->config['octoprintURL'])) {
  15. $this->setAPIResponse('error', 'OctoPrint URL is not defined', 422);
  16. return false;
  17. }
  18. if (empty($this->config['octoprintToken'])) {
  19. $this->setAPIResponse('error', 'OctoPrint Token is not defined', 422);
  20. return false;
  21. }
  22. $api = [];
  23. $url = $this->qualifyURL($this->config['octoprintURL']);
  24. $endpoints = ['job', 'settings'];
  25. $api['data']['url'] = $this->config['octoprintURL'];
  26. foreach ($endpoints as $endpoint) {
  27. $dataUrl = $url . '/api/' . $endpoint;
  28. try {
  29. $headers = array('X-API-KEY' => $this->config['octoprintToken']);
  30. $response = Requests::get($dataUrl, $headers);
  31. if ($response->success) {
  32. $json = json_decode($response->body, true);
  33. $api['data'][$endpoint] = $json;
  34. $api['options'] = [
  35. 'title' => $this->config['octoprintHeader'],
  36. 'titleToggle' => $this->config['octoprintHeaderToggle'],
  37. ];
  38. } else {
  39. $this->setAPIResponse('error', 'OctoPrint connection error', 409);
  40. return false;
  41. }
  42. } catch (Requests_Exception $e) {
  43. $this->writeLog('error', 'Octoprint Function - Error: ' . $e->getMessage(), 'SYSTEM');
  44. $this->setAPIResponse('error', $e->getMessage(), 500);
  45. return false;
  46. };
  47. }
  48. $api = isset($api) ? $api : false;
  49. $this->setAPIResponse('success', null, 200, $api);
  50. return $api;
  51. }
  52. }