diff --git a/update_redmine.php b/update_redmine.php new file mode 100644 index 0000000..ae546a8 --- /dev/null +++ b/update_redmine.php @@ -0,0 +1,115 @@ +#!/usr/bin/php +prepareAction(); +$u->sendAction(); + +/** + * The class that does all the magic. + */ +class update_redmine { + + /** + * Are we in debug mode? + * @var bool + */ + private $debugMode = FALSE; + + /** + * The URL of the Redmine install. + * @var string + */ + private $baseUrl; + + /** + * Full URL to send the request to. + * @var string + */ + private $fullUrl; + + /** + * JSON-formatted body of the HTTP request to Redmine. + * @var string + */ + private $json; + + /** + * The Redmine API key. + * @var string + */ + private $apiKey; + + /** + * The action we want to perform. Must appear on a greenlist (in $this->setAction) + * @var string + */ + private $action; + + /** + * The HTTP method we want to use: GET, POST, PUT, DELETE. + * @var string + */ + private $httpMethod; + + public function __construct($action = NULL) { + // Load the .env file + $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); + $dotenv->load(); + + // Debug Mode will show more information. + $this->debugMode = (bool) getenv('DEBUG_MODE'); + $this->baseUrl = getenv('REDMINE_URL'); + $this->apiKey = getenv('KEY'); + $this->setAction($action); + } + + public function setAction($action) { + $validActions = [ + 'do_not_alert' => 'PUT', + ]; + if ($validActions['$action'] ?? FALSE) { + $this->action = $action; + $this->httpMethod = $validActions[$action]; + } + } + + /** + * Takes the arguments received from $_GET and prepares the values to send to Redmine. + */ + public function prepareAction() { + if ($this->action === 'do_not_alert') { + $this->json = '{"issue": {"custom_fields": [{"id": 4, "value": "1"}]}}'; + if (is_int($_GET['issue'])) { + $issue = $GET['issue']; + } + $this->fullUrl = $this->baseUrl . "/$issue.json"; + } + } + + public function sendAction() { + if ($this->action) { + $this->sendToRedmine($this->httpMethod, $this->json); + } + } + + public function sendToRedmine($method = 'GET', $json) { + // use key 'http' even if you send the request to https://... + $options = [ + 'http' => [ + 'header' => "Content-type: application/json\r\nX-Redmine-API-Key: $this->apiKey\r\n", + 'method' => $method, + 'content' => $json, + ], + ]; + $context = stream_context_create($options); + $result = file_get_contents($this->fullUrl, FALSE, $context); + if ($result === FALSE) { + print_r($result); + } + } + +}