Ver código fonte

updating ppt convert for office 3 and posibility to convert it with webservices

Christian Fasanando 14 anos atrás
pai
commit
0d3404c3bd
40 arquivos alterados com 471 adições e 67 exclusões
  1. BIN
      main/inc/lib/ppt2png/AbstractDokeosDocumentConverter.class
  2. BIN
      main/inc/lib/ppt2png/AbstractDokeosDocumentConverter.java
  3. 17 0
      main/inc/lib/ppt2png/AbstractDokeosOpenOfficeConnection.java
  4. BIN
      main/inc/lib/ppt2png/DocumentConverter.class
  5. 9 4
      main/inc/lib/ppt2png/DocumentConverter.java
  6. 327 0
      main/inc/lib/ppt2png/DocumentConverter.java.orig
  7. BIN
      main/inc/lib/ppt2png/DokeosConverter.class
  8. BIN
      main/inc/lib/ppt2png/DokeosConverter.java
  9. BIN
      main/inc/lib/ppt2png/DokeosDocumentFormatRegistry.java
  10. BIN
      main/inc/lib/ppt2png/DokeosSocketOfficeConnection.java
  11. BIN
      main/inc/lib/ppt2png/OogieDocumentConverter.java
  12. BIN
      main/inc/lib/ppt2png/StringOperation.java
  13. BIN
      main/inc/lib/ppt2png/WoogieDocumentConverter.java
  14. BIN
      main/inc/lib/ppt2png/commons-cli-1.2.jar
  15. BIN
      main/inc/lib/ppt2png/commons-io-1.3.1.jar
  16. BIN
      main/inc/lib/ppt2png/commons-io-1.4.jar
  17. BIN
      main/inc/lib/ppt2png/edtftpj-1.5.2.jar
  18. 0 6
      main/inc/lib/ppt2png/index.html
  19. 7 0
      main/inc/lib/ppt2png/java.policy.applet
  20. BIN
      main/inc/lib/ppt2png/java_uno.jar
  21. BIN
      main/inc/lib/ppt2png/jodconverter-cli-2.2.1.jar
  22. BIN
      main/inc/lib/ppt2png/jodconverter-cli-2.2.2.jar
  23. BIN
      main/inc/lib/ppt2png/juh-2.3.0.jar
  24. BIN
      main/inc/lib/ppt2png/juh-3.0.1.jar
  25. BIN
      main/inc/lib/ppt2png/jurt-2.3.0.jar
  26. BIN
      main/inc/lib/ppt2png/jurt-3.0.1.jar
  27. BIN
      main/inc/lib/ppt2png/jut.jar
  28. BIN
      main/inc/lib/ppt2png/oogie.jar
  29. BIN
      main/inc/lib/ppt2png/ridl-2.3.0.jar
  30. BIN
      main/inc/lib/ppt2png/ridl-3.0.1.jar
  31. BIN
      main/inc/lib/ppt2png/ridl.jar
  32. BIN
      main/inc/lib/ppt2png/slf4j-api-1.4.3.jar
  33. BIN
      main/inc/lib/ppt2png/slf4j-api-1.5.6.jar
  34. BIN
      main/inc/lib/ppt2png/slf4j-jdk14-1.4.3.jar
  35. BIN
      main/inc/lib/ppt2png/slf4j-jdk14-1.5.6.jar
  36. BIN
      main/inc/lib/ppt2png/unoil-2.3.0.jar
  37. BIN
      main/inc/lib/ppt2png/unoil-3.0.1.jar
  38. BIN
      main/inc/lib/ppt2png/xstream-1.2.2.jar
  39. BIN
      main/inc/lib/ppt2png/xstream-1.3.1.jar
  40. 111 57
      main/newscorm/openoffice_document.class.php

BIN
main/inc/lib/ppt2png/AbstractDokeosDocumentConverter.class


BIN
main/inc/lib/ppt2png/AbstractDokeosDocumentConverter.java


+ 17 - 0
main/inc/lib/ppt2png/AbstractDokeosOpenOfficeConnection.java

@@ -0,0 +1,17 @@
+To use the library in your own Java app you need
+
+ * commons-io
+ * jodconverter
+ * juh
+ * jurt
+ * ridl
+ * slf4j-api
+ * slf4j-jdk14 or another slf4j implementation - see http://slf4j.org
+ * unoil
+ * xstream - only if you use XmlDocumentFormatRegistry
+
+The command line interface additionally requires
+
+ * commons-cli
+ * jodconverter-cli
+

BIN
main/inc/lib/ppt2png/DocumentConverter.class


+ 9 - 4
main/inc/lib/ppt2png/DocumentConverter.java

@@ -1,6 +1,6 @@
 import java.awt.Event;
 
-import sun.text.Normalizer;
+//import sun.text.Normalizer;
 
 import com.enterprisedt.net.ftp.FTPClient;
 import com.enterprisedt.net.ftp.FTPConnectMode;
@@ -289,8 +289,10 @@ public class DocumentConverter {
 	}
 	
 	public static String removeAccents(String text) {
-	    String newText =  Normalizer.decompose(text, false, 0)
-	                     .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
+	    
+		/*
+		String newText =  Normalizer.decompose(text, false, 0)
+	                     .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");*/
 	    /*
 	    newText = newText.replace('\u00B4','_');
 	    newText = newText.replace('\u02CA','_');
@@ -302,13 +304,16 @@ public class DocumentConverter {
 	    newText = newText.replace('\u0384','_');
 	    newText = newText.replace('\u055A','_');
 	    */
+		/*
 	    newText = newText.replace('\u2019','_');
 	    newText = newText.replace('\u00B4','_');
 	    newText = newText.replace('\u055A','_');
 	    newText = newText.replace('?','_');
 	    newText = newText.replace('\'','_');
 	    newText = newText.replace(' ','_');
-	    return newText;
+	    return newText;*/
+		return java.text.Normalizer.normalize(text, java.text.Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "");
+
 	}
 	
 	public boolean handleEvent(Event evt) {

+ 327 - 0
main/inc/lib/ppt2png/DocumentConverter.java.orig

@@ -0,0 +1,327 @@
+import java.awt.Event;
+
+//import sun.text.Normalizer;
+
+import com.enterprisedt.net.ftp.FTPClient;
+import com.enterprisedt.net.ftp.FTPConnectMode;
+import com.enterprisedt.net.ftp.FTPTransferType;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.bridge.XBridge;
+import com.sun.star.bridge.XBridgeFactory;
+import com.sun.star.connection.NoConnectException;
+import com.sun.star.connection.XConnection;
+import com.sun.star.connection.XConnector;
+import com.sun.star.container.XNamed;
+import com.sun.star.document.XExporter;
+import com.sun.star.document.XFilter;
+import com.sun.star.drawing.XDrawPage;
+import com.sun.star.drawing.XDrawPages;
+import com.sun.star.drawing.XDrawPagesSupplier;
+import com.sun.star.frame.XComponentLoader;
+import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XMultiComponentFactory;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+
+/**
+ * The class <CODE>DocumentConverter</CODE> allows you to convert all
+ * documents in a given directory and in its subdirectories to a given type. A
+ * converted document will be created in the same directory as the origin
+ * document.
+ * 
+ */
+public class DocumentConverter {
+	/**
+	 * Containing the loaded documents
+	 */
+	static XComponentLoader xcomponentloader = null;
+ 
+	/**
+	 * Connecting to the office with the component UnoUrlResolver and calling
+	 * the static method traverse
+	 * 
+	 * @param args
+	 *            The array of the type String contains the directory, in which
+	 *            all files should be converted, the favoured converting type
+	 *            and the wanted extension
+	 */
+	public static void main(String args[]) {
+		
+		String cnx, ftpuser, host, port, url, ftpPasswd, destinationFolder, remoteFolderFullPath, remoteFolder;
+		int width, height;
+		
+		try {			
+			host = args[0];
+			port = args[1];
+			url = args[2];
+			destinationFolder = args[3];
+			width = Integer.parseInt(args[4]);
+			height = Integer.parseInt(args[5]);
+			if(args.length == 8){
+				ftpuser = args[6];
+				ftpPasswd = args[7];
+			}
+			else{
+				ftpuser = "";
+				ftpPasswd = "";
+			}
+			
+			
+			if(host.equals("localhost")){
+				String prefix = "file://";
+				if(url.charAt(0)!='/')
+					prefix += '/';
+				url = prefix+url;
+				remoteFolder = destinationFolder; 
+				remoteFolderFullPath = prefix;
+			}
+			else {
+				remoteFolderFullPath = "file:///home/"+ftpuser+"/";					
+				remoteFolder = url.replace('/','_');
+				remoteFolder = removeAccents(remoteFolder);
+			}			
+			
+			cnx = "socket,host="+host+",port="+port;
+		
+			XComponentContext xComponentContext = com.sun.star.comp.helper.Bootstrap
+					.createInitialComponentContext(null);
+			
+			
+			XComponentContext xRemoteContext = xComponentContext;
+
+			Object x = xRemoteContext
+					.getServiceManager()
+					.createInstanceWithContext(
+							"com.sun.star.connection.Connector", xRemoteContext);
+
+			XConnector xConnector = (XConnector) UnoRuntime.queryInterface(
+					XConnector.class, x);
+			
+			XConnection connection = xConnector.connect(cnx);
+
+			//if (connection == null)
+				//System.out.println("Connection is null");
+			x = xRemoteContext.getServiceManager().createInstanceWithContext(
+					"com.sun.star.bridge.BridgeFactory", xRemoteContext);
+
+			
+			XBridgeFactory xBridgeFactory = (XBridgeFactory) UnoRuntime
+					.queryInterface(XBridgeFactory.class, x);
+			
+			// this is the bridge that you will dispose
+			XBridge bridge = xBridgeFactory.createBridge("", "urp", connection,null);
+			
+			/*XComponent xComponent = (XComponent) UnoRuntime.queryInterface(
+					XComponent.class, bridge);*/
+			// get the remote instance
+			x = bridge.getInstance("StarOffice.ServiceManager");
+			// Query the initial object for its main factory interface
+			XMultiComponentFactory xMultiComponentFactory = (XMultiComponentFactory) UnoRuntime
+					.queryInterface(XMultiComponentFactory.class, x);
+			XPropertySet xProperySet = (XPropertySet) UnoRuntime
+					.queryInterface(XPropertySet.class, xMultiComponentFactory);
+			
+			// Get the default context from the office server.
+			Object oDefaultContext = xProperySet
+					.getPropertyValue("DefaultContext");
+
+			// Query for the interface XComponentContext.
+			xComponentContext = (XComponentContext) UnoRuntime.queryInterface(
+					XComponentContext.class, oDefaultContext);
+			
+			
+			while (xcomponentloader == null) {
+				try {	
+					
+					xcomponentloader = (XComponentLoader) UnoRuntime
+							.queryInterface(
+									XComponentLoader.class,
+									xMultiComponentFactory
+											.createInstanceWithContext(
+													"com.sun.star.frame.Desktop",
+													xComponentContext));
+					
+					//System.out.println("Loading document "+url);
+									
+					FTPClient ftp = new FTPClient();
+					if(!host.equals("localhost")){
+						//ftp connexion						
+						ftp.setRemoteHost(host);
+						ftp.connect();
+						ftp.login(ftpuser, ftpPasswd);
+						ftp.setConnectMode(FTPConnectMode.PASV);
+						ftp.setType(FTPTransferType.BINARY);
+			            try{
+			            	ftp.mkdir(remoteFolder);
+			            }catch(Exception e){}
+			            ftp.chdir(remoteFolder);
+			            ftp.put(url,"presentation.ppt");			            
+			            url = remoteFolderFullPath+"/"+remoteFolder+"/presentation.ppt";
+			            
+			            
+					}
+					
+					PropertyValue[] loadProps = new PropertyValue[2];
+					loadProps[0] = new PropertyValue();
+				    loadProps[0].Name = "Hidden";
+				    loadProps[0].Value = new Boolean(true);
+				    
+					// open the document
+					XComponent component = xcomponentloader
+							.loadComponentFromURL(url,
+									"_blank", 0, loadProps);
+					
+		          
+					//System.out.println("Document Opened");
+					
+					// filter
+					loadProps = new PropertyValue[4];
+					
+					// type of image
+					loadProps[0] = new PropertyValue();
+					loadProps[0].Name = "MediaType";
+					loadProps[0].Value = "image/png";
+					
+					// Height and width
+					PropertyValue[] filterDatas = new PropertyValue[4];
+					for(int i = 0; i<4 ; i++){
+						filterDatas[i] = new PropertyValue();
+					}
+					
+					filterDatas[0].Name = "PixelWidth";
+					filterDatas[0].Value = new Integer(width);
+					filterDatas[1].Name = "PixelHeight";
+					filterDatas[1].Value = new Integer(height);
+					filterDatas[2].Name = "LogicalWidth";
+					filterDatas[2].Value = new Integer(2000);
+					filterDatas[3].Name = "LogicalHeight";
+					filterDatas[3].Value = new Integer(2000);
+					
+					
+					XDrawPagesSupplier pagesSupplier = (XDrawPagesSupplier) UnoRuntime
+							.queryInterface(XDrawPagesSupplier.class, component);
+					//System.out.println(pagesSupplier.toString());				
+					XDrawPages pages = pagesSupplier.getDrawPages();
+					int nbPages = pages.getCount();
+		            
+					
+					for (int i = 0; i < nbPages; i++) {
+											
+						XDrawPage page = (XDrawPage) UnoRuntime.queryInterface(
+								com.sun.star.drawing.XDrawPage.class, pages
+										.getByIndex(i));
+						
+						XNamed xPageName = (XNamed)UnoRuntime.queryInterface(XNamed.class,page);
+						
+						xPageName.setName("slide"+(i+1));
+						//if(!xPageName.getName().equals("slide"+(i+1)) && !xPageName.getName().equals("page"+(i+1)))
+							//xPageName.setName((i+1)+"-"+xPageName.getName());
+						Object GraphicExportFilter = xMultiComponentFactory
+								.createInstanceWithContext(
+										"com.sun.star.drawing.GraphicExportFilter",
+										xComponentContext);
+						XExporter xExporter = (XExporter) UnoRuntime
+								.queryInterface(XExporter.class,
+										GraphicExportFilter);
+
+						XComponent xComp = (XComponent) UnoRuntime
+								.queryInterface(XComponent.class, page);
+
+						xExporter.setSourceDocument(xComp);
+						loadProps[1] = new PropertyValue();
+						loadProps[1].Name = "URL";
+						loadProps[1].Value = remoteFolderFullPath+remoteFolder+"/"+xPageName.getName()+".png";
+						loadProps[2] = new PropertyValue();
+						loadProps[2].Name = "FilterData";
+						loadProps[2].Value = filterDatas;
+						loadProps[3] = new PropertyValue(); 
+						loadProps[3].Name = "Quality"; 
+						loadProps[3].Value = new Integer(100);
+						
+						XFilter xFilter = (XFilter) UnoRuntime.queryInterface(XFilter.class, GraphicExportFilter);
+
+						xFilter.filter(loadProps);
+						System.out.println(xPageName.getName()+".png");
+
+						//System.out.println("Page saved to url "+loadProps[1].Value);
+						
+					}
+					
+					if(!host.equals("localhost")){
+						String[] files = ftp.dir();
+			            for (int i = 0; i < files.length; i++){
+			            	//System.out.println("Transfer of "+files[i]+ "to "+destinationFolder+"/"+files[i]);
+			            	if(!files[i].equals("presentation.ppt"))
+			            		ftp.get(destinationFolder+"/"+files[i],files[i]);
+			            	ftp.delete(files[i]);
+			            }
+						ftp.chdir("..");
+						ftp.rmdir(remoteFolder);
+						ftp.quit();
+					}
+					
+					//System.out.println("Closing Document");
+					component.dispose();
+					//System.out.println("Document close");
+
+					System.exit(0);
+				} 
+				catch (NoConnectException e) {
+					System.out.println(e.toString());
+					e.printStackTrace();
+					System.exit(255);
+				} 
+				catch (Exception e) {
+					System.out.println(e.toString());
+					e.printStackTrace();
+					System.exit(255);
+				}
+
+			}
+		} 
+		catch (Exception e) {
+			System.out.println(e.toString());
+			e.printStackTrace();
+			System.exit(255);
+		}
+
+	}
+	
+	public static String removeAccents(String text) {
+	    
+		/*
+		String newText =  Normalizer.decompose(text, false, 0)
+	                     .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");*/
+	    /*
+	    newText = newText.replace('\u00B4','_');
+	    newText = newText.replace('\u02CA','_');
+	    newText = newText.replace('\u02B9','_');
+	    newText = newText.replace('\u02BC','_');	    
+	    newText = newText.replace('\u02B9','_');
+	    newText = newText.replace('\u03D8','_');
+	    newText = newText.replace('\u0374','_');
+	    newText = newText.replace('\u0384','_');
+	    newText = newText.replace('\u055A','_');
+	    */
+		/*
+	    newText = newText.replace('\u2019','_');
+	    newText = newText.replace('\u00B4','_');
+	    newText = newText.replace('\u055A','_');
+	    newText = newText.replace('?','_');
+	    newText = newText.replace('\'','_');
+	    newText = newText.replace(' ','_');
+	    return newText;*/
+		return java.text.Normalizer.normalize(text, java.text.Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "");
+
+	}
+	
+	public boolean handleEvent(Event evt) {
+        // Traitement de l'evenement de fin de programme
+         if ( evt.id == evt.WINDOW_DESTROY ) {
+              System.exit(0) ;
+              return true ;
+         }
+         return false ;
+  }
+}

BIN
main/inc/lib/ppt2png/DokeosConverter.class


BIN
main/inc/lib/ppt2png/DokeosConverter.java


BIN
main/inc/lib/ppt2png/DokeosDocumentFormatRegistry.java


BIN
main/inc/lib/ppt2png/DokeosSocketOfficeConnection.java


BIN
main/inc/lib/ppt2png/OogieDocumentConverter.java


BIN
main/inc/lib/ppt2png/StringOperation.java


BIN
main/inc/lib/ppt2png/WoogieDocumentConverter.java


BIN
main/inc/lib/ppt2png/commons-cli-1.2.jar


BIN
main/inc/lib/ppt2png/commons-io-1.3.1.jar


BIN
main/inc/lib/ppt2png/commons-io-1.4.jar


BIN
main/inc/lib/ppt2png/edtftpj-1.5.2.jar


+ 0 - 6
main/inc/lib/ppt2png/index.html

@@ -1,6 +0,0 @@
-<html>
-<head>
-</head>
-<body>
-</body>
-</html>

+ 7 - 0
main/inc/lib/ppt2png/java.policy.applet

@@ -0,0 +1,7 @@
+/* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/
+/* DO NOT EDIT */
+
+grant {
+  permission java.security.AllPermission;
+};
+

BIN
main/inc/lib/ppt2png/java_uno.jar → main/inc/lib/ppt2png/java_uno.jar


BIN
main/inc/lib/ppt2png/jodconverter-cli-2.2.1.jar


BIN
main/inc/lib/ppt2png/jodconverter-cli-2.2.2.jar


BIN
main/inc/lib/ppt2png/juh-2.3.0.jar


BIN
main/inc/lib/ppt2png/juh-3.0.1.jar


BIN
main/inc/lib/ppt2png/jurt-2.3.0.jar


BIN
main/inc/lib/ppt2png/jurt-3.0.1.jar


BIN
main/inc/lib/ppt2png/jut.jar


BIN
main/inc/lib/ppt2png/oogie.jar


BIN
main/inc/lib/ppt2png/ridl-2.3.0.jar


BIN
main/inc/lib/ppt2png/ridl-3.0.1.jar


BIN
main/inc/lib/ppt2png/ridl.jar


BIN
main/inc/lib/ppt2png/slf4j-api-1.4.3.jar


BIN
main/inc/lib/ppt2png/slf4j-api-1.5.6.jar


BIN
main/inc/lib/ppt2png/slf4j-jdk14-1.4.3.jar


BIN
main/inc/lib/ppt2png/slf4j-jdk14-1.5.6.jar


BIN
main/inc/lib/ppt2png/unoil-2.3.0.jar


BIN
main/inc/lib/ppt2png/unoil-3.0.1.jar


BIN
main/inc/lib/ppt2png/xstream-1.2.2.jar


BIN
main/inc/lib/ppt2png/xstream-1.3.1.jar


+ 111 - 57
main/newscorm/openoffice_document.class.php

@@ -53,80 +53,134 @@ abstract class OpenofficeDocument extends learnpath {
 
         $this->created_dir = create_unexisting_directory($_course, $_user['user_id'], 0, 0, $this->base_work_dir, $dir_name);
 
-        move_uploaded_file($file['tmp_name'], $this->base_work_dir.'/'.$this->file_path);
+        $ppt2lp_host = api_get_setting('service_ppt2lp', 'host');
+
+        if ($ppt2lp_host == 'localhost') {
+          
+          move_uploaded_file($file['tmp_name'], $this->base_work_dir.'/'.$this->file_path);
+          $perm = api_get_setting('permissions_for_new_files');
+          if (IS_WINDOWS_OS) { // IS_WINDOWS_OS has been defined in main_api.lib.php
+              $converter_path = str_replace('/', '\\', api_get_path(SYS_PATH).'main/inc/lib/ppt2png');
+              $class_path = $converter_path.';'.$converter_path.'/jodconverter-2.2.2.jar;'.$converter_path.'/jodconverter-cli-2.2.2.jar';
+              //$cmd = 'java -cp "'.$class_path.'" DokeosConverter';
+              $cmd = 'java -Dfile.encoding=UTF-8 -cp "'.$class_path.'" DokeosConverter';
+          } else {
+              $converter_path = api_get_path(SYS_PATH).'main/inc/lib/ppt2png';
+              //$class_path = '-cp .:jodconverter-2.2.1.jar:jodconverter-cli-2.2.1.jar';
+              $class_path = ' -Dfile.encoding=UTF-8 -cp .:jodconverter-2.2.2.jar:jodconverter-cli-2.2.2.jar';
+              $cmd = 'cd '.$converter_path.' && java '.$class_path.' DokeosConverter';
+          }
+          $cmd .=  ' -p '.api_get_setting('service_ppt2lp', 'port');
+          // Call to the function implemented by child.
+          $cmd .= $this -> add_command_parameters();
+          // To allow openoffice to manipulate docs.
+          @chmod($this->base_work_dir.$this->created_dir, 0777);
+          @chmod($this->base_work_dir.$this->file_path, 0777);
+
+          $locale = $this->original_locale; // TODO: Improve it because we're not sure this locale is present everywhere.
+          putenv('LC_ALL='.$locale);
+
+          $files = array(); $return = 0;
+          $shell = exec($cmd, $files, $return);
+
+          if ($return != 0) { // If the java application returns an error code.
+              switch ($return) {
+                  // Can't connect to openoffice.
+                  case 1: $this->error = get_lang('CannotConnectToOpenOffice'); break;
+                  // Conversion failed in openoffice.
+                  case 2: $this->error = get_lang('OogieConversionFailed'); break;
+                  // Conversion can't be launch because command failed.
+                  case 255: $this->error = get_lang('OogieUnknownError'); break;
+              }
+              DocumentManager::delete_document($_course, $dir_name, $this->base_work_dir);
+              return false;
+          }
 
-        $perm = api_get_setting('permissions_for_new_files');
-
-        /*
-        $classpath = '-cp .:jodconverter-2.2.1.jar:jodconverter-cli-2.2.1.jar';
-        if (isset($_ENV['OS']) && strpos($_ENV['OS'], 'Windows') !== false) {
-            $classpath = str_replace(':', ';', $classpath);
-        }
-        if (isset($_ENV['OS']) && strpos($_ENV['OS'], 'Windows') !== false) {
-            $cmd = 'cd '.str_replace('/', '\\', api_get_path(SYS_PATH).'main/inc/lib/ppt2png ').$classpath.' DokeosConverter';
         } else {
-            $cmd = 'cd '.api_get_path(SYS_PATH).'main/inc/lib/ppt2png && java '.$classpath.' DokeosConverter';
+
+          // get result from webservices
+          $result = $this->_get_remote_ppt2lp_files($file);
+          $result = unserialize(base64_decode($result));
+
+          // save remote images to server
+          chmod ($this->base_work_dir.$this->created_dir, api_get_permissions_for_new_directories());
+          if (!empty($result['images'])) {
+            foreach ($result['images'] as $image => $img_data) {
+              $image_path = $this->base_work_dir.$this->created_dir;
+              @file_put_contents($image_path.'/'.$image, base64_decode($img_data));
+              @chmod($image_path.'/'.$image, 0777);
+            }
+          }
+
+          // files info
+          $files = $result['files'];
+
         }
-        $cmd .=  ' -p '.api_get_setting('service_ppt2lp','port');
-        */
-        if (IS_WINDOWS_OS) { // IS_WINDOWS_OS has been defined in main_api.lib.php
-            $converter_path = str_replace('/', '\\', api_get_path(SYS_PATH).'main/inc/lib/ppt2png');
-            $class_path = $converter_path.';'.$converter_path.'/jodconverter-2.2.1.jar;'.$converter_path.'/jodconverter-cli-2.2.1.jar';
-
-            //$cmd = 'java -cp "'.$class_path.'" DokeosConverter';
-            $cmd = 'java -Dfile.encoding=UTF-8 -cp "'.$class_path.'" DokeosConverter';
-        } else {
-            $converter_path = api_get_path(SYS_PATH).'main/inc/lib/ppt2png';
 
-            //$class_path = '-cp .:jodconverter-2.2.1.jar:jodconverter-cli-2.2.1.jar';
-            $class_path = ' -Dfile.encoding=UTF-8 -cp .:jodconverter-2.2.1.jar:jodconverter-cli-2.2.1.jar';
+        if (!empty($files)) {
+          // Create lp.
+          $this->lp_id = learnpath::add_lp($_course['id'], ucfirst(pathinfo($file['name'], PATHINFO_FILENAME)), '', 'guess', 'manual');
 
-            $cmd = 'cd '.$converter_path.' && java '.$class_path.' DokeosConverter';
+          // Call to the function implemented by child following action_after_conversion parameter.
+          switch ($action_after_conversion) {
+              case 'make_lp': $this -> make_lp($files);
+                  break;
+              case 'add_docs_to_visio': $this -> add_docs_to_visio($files);
+                  break;
+          }
+
+          chmod ($this->base_work_dir.$this->created_dir, api_get_permissions_for_new_directories());
         }
-        $cmd .=  ' -p '.api_get_setting('service_ppt2lp', 'port');
+        return $this->first_item;
+    }
 
-        // Call to the function implemented by child.
-        $cmd .= $this -> add_command_parameters();
+    /**
+     * Get images files from remote host (with webservices)
+     * @param   array current ppt file
+     * @return  array images files
+     */
+    private function _get_remote_ppt2lp_files($file) {
 
-        // To allow openoffice to manipulate docs.
-        @chmod($this->base_work_dir.$this->created_dir, 0777);
-        @chmod($this->base_work_dir.$this->file_path, 0777);
+      require_once api_get_path(LIBRARY_PATH).'nusoap/nusoap.php';
+      
+      // host
+      $ppt2lp_host = api_get_setting('service_ppt2lp', 'host');
 
-        $locale = $this->original_locale; // TODO: Improve it because we're not sure this locale is present everywhere.
-        putenv('LC_ALL='.$locale);
-        $files = array(); $return = 0;
-        $shell = exec($cmd, $files, $return);
-        if ($return != 0) { // If the java application returns an error code.
-            switch ($return) {
-                // Can't connect to openoffice.
-                case 1: $this->error = get_lang('CannotConnectToOpenOffice'); break;
 
-                // Conversion failed in openoffice.
-                case 2: $this->error = get_lang('OogieConversionFailed'); break;
+      // secret key
+      $secret_key = sha1(api_get_setting('service_ppt2lp', 'ftp_password'));
+      //$secret_key = sha1($_SERVER['REMOTE_ADDR'].api_get_setting('service_ppt2lp', 'ftp_password'));
+      //error_log('IP:'.$_SERVER['REMOTE_ADDR']);
+      
+      // client
+      $client = new nusoap_client($ppt2lp_host, true);
 
-                // Conversion can't be launch because command failed.
-                case 255: $this->error = get_lang('OogieUnknownError'); break;
-            }
+      $result = '';
+      $err = $client->getError();
+      if (!$err) {
 
-            DocumentManager::delete_document($_course, $dir_name, $this->base_work_dir);
-            return false;
-        }
+        $file_data  = base64_encode(file_get_contents($file['tmp_name']));
+        $file_name  = $file['name'];
+        $service_ppt2lp_size = api_get_setting('service_ppt2lp', 'size');
 
-        // Create lp.
-        $this->lp_id = learnpath::add_lp($_course['id'], ucfirst(pathinfo($file['name'], PATHINFO_FILENAME)), '', 'guess', 'manual');
+        $params = array(
+                      'secret_key'  => $secret_key,
+                      'file_data'   => $file_data,
+                      'file_name'   => $file_name,
+                      'service_ppt2lp_size' => $service_ppt2lp_size,
+                  );
+        
+        $result = $client->call('ws_convert_ppt', array('convert_ppt' => $params));
 
-        // Call to the function implemented by child following action_after_conversion parameter.
-        switch ($action_after_conversion) {
-            case 'make_lp': $this -> make_lp($files);
-                break;
-            case 'add_docs_to_visio': $this -> add_docs_to_visio($files);
-                break;
-        }
+      } else {
+        return false;
+      }
+
+      return $result;
 
-        chmod ($this->base_work_dir.$this->created_dir, api_get_permissions_for_new_directories());
-        return $this->first_item;
     }
 
+
     abstract function make_lp();
     abstract function add_docs_to_visio();
     abstract function add_command_parameters();