first draft of update_redmine
This commit is contained in:
		
							
								
								
									
										115
									
								
								update_redmine.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								update_redmine.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/php
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					declare(strict_types = 1);
 | 
				
			||||||
 | 
					require_once 'vendor/autoload.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Update Redmine script */
 | 
				
			||||||
 | 
					$u = new update_redmine($_GET['action']);
 | 
				
			||||||
 | 
					$u->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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user