You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by ps...@apache.org on 2013/05/02 19:10:34 UTC

svn commit: r1478448 - /wookie/trunk/connector/php/WookieConnectorService.php

Author: psharples
Date: Thu May  2 17:10:33 2013
New Revision: 1478448

URL: http://svn.apache.org/r1478448
Log:
postWidget functionality for the php connector. See WOOKIE-415.

Modified:
    wookie/trunk/connector/php/WookieConnectorService.php

Modified: wookie/trunk/connector/php/WookieConnectorService.php
URL: http://svn.apache.org/viewvc/wookie/trunk/connector/php/WookieConnectorService.php?rev=1478448&r1=1478447&r2=1478448&view=diff
==============================================================================
--- wookie/trunk/connector/php/WookieConnectorService.php (original)
+++ wookie/trunk/connector/php/WookieConnectorService.php Thu May  2 17:10:33 2013
@@ -173,6 +173,74 @@ class WookieConnectorService implements 
 		return new HTTP_Response($response, $http_response_header);
 	}
 
+	/**
+	 * 
+	 * @param String $widgetFile - full path on disk where the widget is located
+	 * @param unknown $adminUsername - wookie admin username
+	 * @param unknown $adminPassword - wookie admin password
+	 * @return HTTP_Response - new HTTP_Response instance
+	 */
+	public function postWidget($widgetFile, $adminUsername, $adminPassword){
+		$file = basename($widgetFile); //actual filename without the path
+		$fileContents = file_get_contents($widgetFile);
+		//Boundary definition
+		$boundary = substr(md5(rand(0,32000)), 0, 20);
+		$data = "--".$boundary . "\r\n";		
+		$data .= "Content-Disposition: form-data; name=\"upload\"; filename=\"" . $file . "\"\r\n";
+		$data .= "Content-Type: application/octet-stream; charset=ISO-8859-1\r\n";
+		$data .= "Content-Transfer-Encoding: binary\r\n\r\n";
+		$data .= $fileContents."\r\n";
+		$data .= "--".$boundary. "--" . "\r\n";
+		//Construct params
+		$params = array('http' => array(
+				'method' => 'POST',
+				'header' => "Authorization: Basic " . base64_encode("$adminUsername:$adminPassword") . "\r\n" .
+							//"Connection: Keep-Alive" . "\r\n" .
+							"Content-Type: multipart/form-data;boundary=".$boundary ."\r\n",
+				'content' => $data,
+				'timeout' => 30
+		));
+		$this->setHttpStreamContext($params);
+		$requestUrl = $this->getConnection()->getURL().'widgets';
+		$response = @file_get_contents($requestUrl, false, $this->getHttpStreamContext());
+		//revert back to default value for other requests
+		$this->setHttpStreamContext(array('http' => array('timeout' => 15)));
+		return new HTTP_Response($response, $http_response_header);
+	}
+	
+	/**
+	 * 
+	 * @param String $requestUrl - a string url of where the widget is online
+	 * @param unknown $adminUsername - wookie admin username
+	 * @param unknown $adminPassword - wookie admin password
+	 * @throws WookieConnectorException
+	 * @return string - *should be the xml representation of the widget* - but for now a raw dump of the response by wookie
+	 */
+	public function postWidgetByUrl($requestUrl, $adminUsername, $adminPassword){
+		if(!isset($adminUsername) || !isset($adminUsername)){
+			throw new WookieConnectorException("Wookie admin username and password missing.");
+		}
+		$response = $this->do_request($requestUrl, null, 'GET');
+		if($response->getStatusCode() == 200) {
+			$filename = uniqid(rand(), true) . '.wgt';
+			$handle = fopen(sys_get_temp_dir()  . $filename, "w");
+			fwrite($handle, $response->getResponseText());
+			$widgetResponse = $this->postWidget(sys_get_temp_dir() . $filename, $adminUsername, $adminPassword);
+			fclose($handle);
+			unlink(sys_get_temp_dir() . $filename);
+			if($response->getStatusCode() == 200 || $response->getStatusCode() == 201){
+				//todo - this wont load for some reason
+				//return simplexml_load_file($widgetResponse->getResponseText());
+				return $widgetResponse->getResponseText();
+			}
+			else{
+				throw new WookieConnectorException("Problem uploading the widget to " . $this->getConnection()->getURL().'widgets');
+			}
+		}
+		else{
+			throw new WookieConnectorException("Problem downloading the original widget from " . $requestUrl);
+		}
+	}
 
 	/**
 	 * Get or create an instance of a widget.