Browse Source

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

Christian Fasanando 14 năm trước cách đây
mục cha
commit
0d3404c3bd
40 tập tin đã thay đổi với 471 bổ sung67 xóa
  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();