Explorar o código

Added a new web service to create UserRequest tickets (similarly to Incidents tickets). Based on code from Vincenzo Todisco.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1408 a333f486-631f-4898-b8df-5754b55c2be0
dflaven %!s(int64=14) %!d(string=hai) anos
pai
achega
9d4c6801c5
Modificáronse 2 ficheiros con 83 adicións e 5 borrados
  1. 34 0
      webservices/itop.wsdl.tpl
  2. 49 5
      webservices/webservices.basic.php

+ 34 - 0
webservices/itop.wsdl.tpl

@@ -143,6 +143,21 @@
 	<message name="GetVersionResponse">
 		<part name="GetVersionReturn" type="xsd:string"/>
 	</message>
+	<message name="CreateRequestTicket">
+		<part name="login" type="xsd:string"/>
+		<part name="password" type="xsd:string"/>
+		<part name="title" type="xsd:string"/>
+		<part name="description" type="xsd:string"/>
+		<part name="caller" type="typens:ExternalKeySearch"/>
+		<part name="customer" type="typens:ExternalKeySearch"/>
+		<part name="service" type="typens:ExternalKeySearch"/>
+		<part name="service_subcategory" type="typens:ExternalKeySearch"/>
+		<part name="product" type="xsd:string"/>
+		<part name="workgroup" type="typens:ExternalKeySearch"/>
+		<part name="impacted_cis" type="typens:ArrayOfLinkCreationSpec"/>
+		<part name="impact" type="xsd:string"/>
+		<part name="urgency" type="xsd:string"/>
+	</message>
 	<message name="CreateIncidentTicket">
 		<part name="login" type="xsd:string"/>
 		<part name="password" type="xsd:string"/>
@@ -161,6 +176,9 @@
 	<message name="CreateIncidentTicketResponse">
 		<part name="CreateIncidentTicketReturn" type="typens:Result"/>
 	</message>
+	<message name="CreateRequestTicketResponse">
+		<part name="CreateRequestTicketReturn" type="typens:Result"/>
+	</message>
 	<message name="SearchObjects">
 		<part name="login" type="xsd:string"/>
 		<part name="password" type="xsd:string"/>
@@ -178,6 +196,13 @@
 			<input message="typens:GetVersion"/>
 			<output message="typens:GetVersionResponse"/>
 		</operation>
+		<operation name="CreateRequestTicket">
+			<!-- <wsdl:documentation>
+				Create a ticket, return information about reconciliation on external keys and the created ticket
+			</wsdl:documentation> -->
+			<input message="typens:CreateRequestTicket"/>
+			<output message="typens:CreateRequestTicketResponse"/>
+		</operation>
 		<operation name="CreateIncidentTicket">
 			<wsdl:documentation>
 				Create a ticket, return information about reconciliation on external keys and the created ticket
@@ -204,6 +229,15 @@
 				<soap:body namespace="urn:ITop" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
 			</output>
 		</operation>
+		<operation name="CreateRequestTicket">
+			<soap:operation soapAction="urn:WebServiceAction"/>
+			<input>
+				<soap:body namespace="urn:ITop" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+			</input>
+			<output>
+				<soap:body namespace="urn:ITop" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+			</output>
+		</operation>
 		<operation name="CreateIncidentTicket">
 			<soap:operation soapAction="urn:WebServiceAction"/>
 			<input>

+ 49 - 5
webservices/webservices.basic.php

@@ -53,7 +53,7 @@ class BasicServices extends WebServicesBase
 		return $sVersionString;
 	}
 
-	public function CreateIncidentTicket($sLogin, $sPassword, $sTitle, $sDescription, $oCallerDesc, $oCustomerDesc, $oServiceDesc, $oServiceSubcategoryDesc, $sProduct, $oWorkgroupDesc, $aSOAPImpactedCIs, $sImpact, $sUrgency)
+	public function CreateRequestTicket($sLogin, $sPassword, $sTitle, $sDescription, $oCallerDesc, $oCustomerDesc, $oServiceDesc, $oServiceSubcategoryDesc, $sProduct, $oWorkgroupDesc, $aSOAPImpactedCIs, $sImpact, $sUrgency)
 	{
 		if (!UserRights::CheckCredentials($sLogin, $sPassword))
 		{
@@ -77,8 +77,9 @@ class BasicServices extends WebServicesBase
 			$aImpactedCIs[] = self::SoapStructToLinkCreationSpec($oImpactedCIs);
 		}
 
-		$oRes = $this->_CreateIncidentTicket
+		$oRes = $this->_CreateResponseTicket
 		(
+			'UserRequest',
 			$sTitle,
 			$sDescription,
 			$aCallerDesc,
@@ -94,10 +95,53 @@ class BasicServices extends WebServicesBase
 		return $oRes->ToSoapStructure();
 	}
 
+	public function CreateIncidentTicket($sLogin, $sPassword, $sTitle, $sDescription, $oCallerDesc, $oCustomerDesc, $oServiceDesc, $oServiceSubcategoryDesc, $sProduct, $oWorkgroupDesc, $aSOAPImpactedCIs, $sImpact, $sUrgency)
+	{
+		if (!UserRights::CheckCredentials($sLogin, $sPassword))
+		{
+			$oRes = new WebServiceResultFailedLogin($sLogin);
+			$this->LogUsage(__FUNCTION__, $oRes);
+
+			return $oRes->ToSoapStructure();
+		}
+		UserRights::Login($sLogin);
+
+		$aCallerDesc = self::SoapStructToExternalKeySearch($oCallerDesc);
+		$aCustomerDesc = self::SoapStructToExternalKeySearch($oCustomerDesc);
+		$aServiceDesc = self::SoapStructToExternalKeySearch($oServiceDesc);
+		$aServiceSubcategoryDesc = self::SoapStructToExternalKeySearch($oServiceSubcategoryDesc);
+		$aWorkgroupDesc = self::SoapStructToExternalKeySearch($oWorkgroupDesc);
+
+		$aImpactedCIs = array();
+		if (is_null($aSOAPImpactedCIs)) $aSOAPImpactedCIs = array();
+		foreach($aSOAPImpactedCIs as $oImpactedCIs)
+		{
+			$aImpactedCIs[] = self::SoapStructToLinkCreationSpec($oImpactedCIs);
+		}
+
+		$oRes = $this->_CreateResponseTicket
+		(
+			'Incident',
+			$sTitle,
+			$sDescription,
+			$aCallerDesc,
+			$aCustomerDesc,
+			$aServiceDesc,
+			$aServiceSubcategoryDesc,
+			$sProduct,
+			$aWorkgroupDesc,
+			$aImpactedCIs,
+			$sImpact,
+			$sUrgency
+		);
+		return $oRes->ToSoapStructure();
+	}
+	
 	/**
-	 * Create an incident ticket from a monitoring system
+	 * Create an ResponseTicket (Incident or UserRequest) from an external system
 	 * Some CIs might be specified (by their name/IP)
 	 *	 
+	 * @param string sClass The class of the ticket: Incident or UserRequest
 	 * @param string sTitle
 	 * @param string sDescription
 	 * @param array aCallerDesc
@@ -112,7 +156,7 @@ class BasicServices extends WebServicesBase
 	 *
 	 * @return WebServiceResult
 	 */
-	protected function _CreateIncidentTicket($sTitle, $sDescription, $aCallerDesc, $aCustomerDesc, $aServiceDesc, $aServiceSubcategoryDesc, $sProduct, $aWorkgroupDesc, $aImpactedCIs, $sImpact, $sUrgency)
+	protected function _CreateResponseTicket($sClass, $sTitle, $sDescription, $aCallerDesc, $aCustomerDesc, $aServiceDesc, $aServiceSubcategoryDesc, $sProduct, $aWorkgroupDesc, $aImpactedCIs, $sImpact, $sUrgency)
 	{
 
 		$oRes = new WebServiceResult();
@@ -124,7 +168,7 @@ class BasicServices extends WebServicesBase
 			$oMyChange->Set("userinfo", "Administrator");
 			$iChangeId = $oMyChange->DBInsertNoReload();
 	
-			$oNewTicket = MetaModel::NewObject('Incident');
+			$oNewTicket = MetaModel::NewObject($sClass);
 			$this->MyObjectSetScalar('title', 'title', $sTitle, $oNewTicket, $oRes);
 			$this->MyObjectSetScalar('description', 'description', $sDescription, $oNewTicket, $oRes);