#!/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); } } }