Dodawanie zgłoszeń do Mantisa przez WebService

Jakiś czas temu napisałem skrypcik do zdalnego dodawanie zgłoszeń do Mantisa. Teraz go rozwinołem o wykorzystanie WebService.


Bazuje on na poprzedniej wersji więc nie będę wszystkiego dokładnie opisywał.

Potrzebujemy serwer WebService i jest on w pliku mantis_soap.php który umieszczamy w katalogu głównym Mantisa.

mantis_soap.php

[sourcecode lang=”php”]
< ?php //-------------------------------------------------------------------------------------------------------------- include "config_inc.php"; //-------------------------------------------------------------------------------------------------------------- function sql($sql, $g_hostname, $g_db_username, $g_db_password, $g_database_name) { $result["wynik"] = true; $result["komunikat"] = ""; $result["redirect"] = true; $result["result"] = array(); $link = @mysql_connect($g_hostname, $g_db_username, $g_db_password); if (!$link) { $result["komunikat"] = "Nie można się połączyć z bazą danych: " . mysql_error(); $result["redirect"] = false; $result["wynik"] = false; return $result; } $db_selected = @mysql_select_db($g_database_name, $link); if (!$db_selected) { $result["komunikat"] = "Nie można wybrać bazy: " . mysql_error(); $result["redirect"] = false; $result["wynik"] = false; return $result; } @mysql_query("SET NAMES "utf8""); $query = @mysql_query($sql); if(!$query) { $result["komunikat"] = "Zapytanie niepoprawne: "".$sql."""; $result["redirect"] = false; $result["wynik"] = false; return $result; } while ($row = @mysql_fetch_assoc($query)) { array_push($result["result"], $row); } @mysql_close($link); return $result; } function dodajZgloszenie($summary, $description, $idProjektu = 1, $idZglaszajacego = 2, $info = "") { global $g_complete_date_format; global $g_hostname; global $g_db_username; global $g_db_password; global $g_database_name; //-------------------------------------------------------------------------------------------------------------- $dataZgloszenia = date($g_complete_date_format); $kategoria = "Zgłoszenie zdalne"; $tytulZgloszenia = $summary; $opisZgloszenia = $description."\n\n".$info; $idZgloszenia = null; //-------------------------------------------------------------------------------------------------------------- $sql = "SELECT id FROM mantis_user_table WHERE ". "username = "$g_anonymous_account" "; $w = sql($sql, $g_hostname, $g_db_username, $g_db_password, $g_database_name); if($w["wynik"]) { $idZglaszajacego = $w["result"][0]["id"]; } //-------------------------------------------------------------------------------------------------------------- $sql = "INSERT INTO mantis_bug_text_table ". "(description)". " VALUES ". "("$opisZgloszenia");"; $w = sql($sql, $g_hostname, $g_db_username, $g_db_password, $g_database_name); if($w["wynik"]) { $sql = "SELECT id FROM mantis_bug_text_table WHERE ". "description = "$opisZgloszenia" ". "ORDER BY id DESC"; $w = sql($sql, $g_hostname, $g_db_username, $g_db_password, $g_database_name); $idZgloszenia = $w["result"][0]["id"]; $sql = "INSERT INTO mantis_bug_table ". "(id, project_id, reporter_id, category, date_submitted, last_updated, bug_text_id, summary)". " VALUES ". "("$idZgloszenia", "$idProjektu", "$idZglaszajacego", "$kategoria", "$dataZgloszenia", "$dataZgloszenia", "$idZgloszenia", "$tytulZgloszenia");"; $w = sql($sql, $g_hostname, $g_db_username, $g_db_password, $g_database_name); $sql = "INSERT INTO mantis_bug_history_table ". "(user_id, bug_id, date_modified, type)". " VALUES ". "("$idZglaszajacego", "$idZgloszenia", "$dataZgloszenia", "1");"; $w = sql($sql, $g_hostname, $g_db_username, $g_db_password, $g_database_name); } return true; } $server = new SoapServer(null, array("uri" => „urn:mantis_SOAP_dodajZgloszenie”));
$server->addFunction(„dodajZgloszenie”);
$server->handle();
?>
[/sourcecode]

A potem w dowolnym miejscu (serwisie) tworzymy klienta WebService który wygląda tak:
[sourcecode lang=”php”]
$client = new SoapClient(null, array(
„location” => „http://example.org/mantis_soap.php”,
„uri” => „urn:mantis_SOAP_dodajZgloszenie”,
„trace” => 1 ));
$client->__soapCall(„dodajZgloszenie”,array(„test”,”testuje”, 1, 2, „dodatkowe info”));
[/sourcecode]
gdzie: http://example.org/mantis_soap.php to URL do serwera WebService
a parametry „test”,”testuje”, 1, 2, „dodatkowe info” to kolejno:
tytuł zgłoszenia, opis zgłoszenia, id projektu, id zgłaszającego, i jakeś dodatkowe informacje które nie sią obowiązkowe.