[20960] New feature: Generic support for jasper report

Sigurd Nes <[email protected]> Wed, 13 Jan 2010 19:17:03 +0000
Newsgroups gmane.comp.web.phpgroupware.cvs
Message-ID <[email protected]>
Revision: 20960
          http://svn.sv.gnu.org/viewvc/?view=rev&root=phpgroupware&revision=20960
Author:   sigurdne
Date:     2010-01-13 19:17:03 +0000 (Wed, 13 Jan 2010)
Log Message:
-----------
New feature: Generic support for jasper report

Modified Paths:
--------------
    people/sigurdne/modules/property/trunk/inc/class.bofiles.inc.php

Modified: people/sigurdne/modules/property/trunk/inc/class.bofiles.inc.php
===================================================================
--- people/sigurdne/modules/property/trunk/inc/class.bofiles.inc.php	2010-01-13 19:15:51 UTC (rev 20959)
+++ people/sigurdne/modules/property/trunk/inc/class.bofiles.inc.php	2010-01-13 19:17:03 UTC (rev 20960)
@@ -8,7 +8,7 @@
 	 * @package phpgroupware
 	 * @subpackage property
 	 * @category core
- 	 * @version $Id: class.bofiles.inc.php 4058 2009-11-06 14:50:54Z sigurd $
+ 	 * @version $Id: class.bofiles.inc.php 4490 2010-01-13 14:49:18Z sigurd $
 	 */
 
 	/*
@@ -224,8 +224,6 @@
 						'nofiles'		=> true
 					));
 
-				$browser = CreateObject('phpgwapi.browser');
-
 				if(!$jasper)
 				{
 				$this->vfs->override_acl = 1;
@@ -236,53 +234,64 @@
 
 				$this->vfs->override_acl = 0;
 
+					$browser = CreateObject('phpgwapi.browser');
 				$browser->content_header($ls_array[0]['name'],$ls_array[0]['mime_type'],$ls_array[0]['size']);
 				echo $document;
 			}
 				else //Execute the jasper report
 				{
-					//class_path
-				//	$dirname = PHPGW_API_INC . '/jasper/lib';
-					$dirname = 'phpgwapi/inc/jasper/lib';
-					$file_list = array();
-				//	$file_list[] = PHPGW_API_INC . '/jasper/bin';
-					$file_list[] = 'phpgwapi/inc/jasper/bin';
-					$dir = new DirectoryIterator($dirname); 
-					if ( is_object($dir) )
-					{
-						foreach ( $dir as $_file )
-						{
-							if ( $_file->isDot()
-								|| !$_file->isFile()
-								|| !$_file->isReadable()
-								|| mime_content_type($_file->getPathname()) == 'text/xml')
-							{
-								continue;
-							}
+					$output_type = 'PDF';
 
-							$file_list[] = (string) "{$dirname}/{$_file}";
-						}
-					}
-					
-					if (stristr(PHP_OS, 'WIN')) 
-					{ 
-						$sep = ';';// Win 
-					}
-					else
-					{ 
-						$sep = ':';// Other
-					}
+					/**
+					* 'parameters' will be in the following format:
+					* 'key1|value1;key2|value2;key3|value3' where key1, key2 ... keyX are
+					*  unique
+					*/
+/*
+					$jasper_parameters = sprintf("\"BK_DATE_FROM|%s;BK_DATE_TO|%s;BK_BUILDINGS|%s\"",
+						1,//$from,
+						1,//$to,
+						1);//implode(",", $building_list));
 
-					$class_path = implode($sep, $file_list);
-					$type = 'pdf';
-					$select_criteria = '//Record';
-					$template = "{$this->rootdir}/{$file}";
+*/
+					$jasper_parameters = '"DUMMY|1"';
 
-					$cmd = "java -Djava.awt.headless=true -cp {$class_path} XmlJasperInterface -o{$type} -f{$template} -x{$select_criteria} < " . PHPGW_SERVER_ROOT . "/catch/test_data/jasper/tilstand.xml";
 
-					$browser->content_header('report.pdf','application/pdf');
+					// DEBUG
+					//print_r($jasper_parameters);die();
+					//exit(0);
 
-					passthru($cmd);
+					$info				= pathinfo($file);
+					$report_name 		=  'report_' . basename($file,'.'.$info['extension']);
+					$report_source 		= "{$this->rootdir}{$file}";
+					$memory = xmlwriter_open_memory();
+					xmlwriter_start_document($memory,'1.0','UTF-8');
+
+					xmlwriter_start_element ($memory,'JasperConfig'); // <JasperConfig>
+						xmlwriter_start_element ($memory,'Reports'); // <Reports>	
+							xmlwriter_start_element ($memory,'Report'); // <Report>			
+								xmlwriter_write_attribute( $memory, 'name', $report_name);
+								xmlwriter_write_attribute( $memory, 'source', $report_source);
+							xmlwriter_end_element($memory); // </Report>
+						xmlwriter_end_element($memory); // </Reports>
+					xmlwriter_end_element($memory); // </JasperConfig>
+	
+					$xml = xmlwriter_output_memory($memory,true);
+
+					$jasper_config = $GLOBALS['phpgw_info']['server']['temp_dir'] . '/config_' . basename($file);
+					$file_written = false;
+					$fp = fopen($jasper_config, "wb");
+					fwrite($fp,$xml);
+				
+					if(fclose($fp))
+					{
+						$file_written=true;
+					}
+
+					$jasper_wrapper = CreateObject('phpgwapi.jasper_wrapper');
+					$jasper_wrapper->jasper_config = $jasper_config;
+					$jasper_wrapper->execute($jasper_parameters, $output_type, $report_name, $errors);     
+					unlink($jasper_config);
 				}
 			}
 		}