[20951] New feature: Generic support for jasper report

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

Added Paths:
-----------
    people/sigurdne/modules/phpgwapi/trunk/inc/class.jasper_wrapper.inc.php
    people/sigurdne/modules/phpgwapi/trunk/inc/jasper/readme_config.txt

Added: people/sigurdne/modules/phpgwapi/trunk/inc/class.jasper_wrapper.inc.php
===================================================================
--- people/sigurdne/modules/phpgwapi/trunk/inc/class.jasper_wrapper.inc.php	                        (rev 0)
+++ people/sigurdne/modules/phpgwapi/trunk/inc/class.jasper_wrapper.inc.php	2010-01-13 19:03:41 UTC (rev 20951)
@@ -0,0 +1,179 @@
+<?php
+	// Java-bin path
+	define('JAVA_BIN', '/usr/bin/java');
+
+	// path to JasperEngine.class
+	define('JASPER_BIN', PHPGW_API_INC.'/jasper/bin/');
+
+	# path to the Jasper libraries
+	# N.B. should always end with a /
+	define ('JASPER_LIBS', PHPGW_API_INC .'/jasper/lib/');
+
+	class phpgwapi_jasper_wrapper
+	{
+		# path to the Jasper config file (containing the report-list)
+		var $jasper_config = ''; //PHPGW_SERVER_ROOT.'/booking/jasper/jasper_config.xml';
+
+		public function __construct()
+		{
+			if (stristr(PHP_OS, 'WIN')) 
+			{ 
+				$sep = ';';// Win 
+			}
+			else
+			{ 
+				$sep = ':';// Other
+			}
+
+//			$java_classpath = ':.:';
+
+			$java_classpath = "{$sep}.{$sep}";
+			foreach (glob(JASPER_LIBS . "*.jar") as $filename) 
+			{
+				$java_classpath .=  $filename . $sep;
+			}
+			$this->java_classpath = $java_classpath;
+
+			$_key = $GLOBALS['phpgw_info']['server']['setup_mcrypt_key'];
+			$_iv  = $GLOBALS['phpgw_info']['server']['mcrypt_iv'];
+			$crypto = createObject('phpgwapi.crypto',array($_key, $_iv));
+
+			$db_host = $crypto->decrypt($GLOBALS['phpgw_info']['server']['db_host']);
+			$db_name = $crypto->decrypt($GLOBALS['phpgw_info']['server']['db_name']);
+			$this->db_user = $crypto->decrypt($GLOBALS['phpgw_info']['server']['db_user']);
+			$this->db_pass = $crypto->decrypt($GLOBALS['phpgw_info']['server']['db_pass']);
+			$this->connection_string = "";
+
+			if ($GLOBALS['phpgw_info']['server']['db_type'] == "postgres") 
+			{
+				$this->connection_string = "jdbc:postgresql://".$db_host.":5432/".$db_name;
+			} 
+			elseif ($GLOBALS['phpgw_info']['server']['db_type'] == "mysql") 
+			{
+				$this->connection_string = "jdbc:postgresql://".$db_host.":3306/".$db_name;
+			}
+		}
+
+		public function execute($parameters, $output_type, $report_name, &$err) 
+		{
+			if (!chdir(JASPER_BIN)) 
+			{
+				$err['chdir'] = lang('Unable to perform chdir');
+				return 102;
+			}
+
+			$cmd = sprintf("CLASSPATH=%s %s -D%s JasperEngine -p %s -t %s -n %s -d %s -u %s -P %s %s",
+							$this->java_classpath,
+							JAVA_BIN,
+							'java.awt.headless=true', // To run the environment with a headless implementation (when apache-user can't connect to X11)
+							$parameters,
+							$output_type,
+							$report_name,
+							$this->connection_string,
+							$this->db_user,
+							$this->db_pass,
+							$this->jasper_config);
+
+			exec($cmd, $cmd_output, $retval);
+		//  echo $cmd . ":retval: " . $retval;
+			//  exit(0);
+
+			switch ($retval) 
+			{
+				case 201:
+					$err['corrupt template'] = lang('Corrupt template');
+					break;
+
+				case 202:
+					$err['fill report'] = lang('Unable to fill report');
+					break;
+
+				case 203:
+					$err['report object'] = lang('Corrupt report object');
+					break;
+
+				case 204:
+					$err['pdf'] = lang('Unable to export to PDF');
+					break;
+
+				case 205:
+					$err['csv'] = lang('Unable to export to CSV');
+					break;
+
+				case 206:
+					$err['xls'] = lang('Unable to export to XLS');
+					break;
+
+				case 207:
+					$err['parse'] = lang('Unable to parse configuration');
+					break;
+
+				case 208:
+					$err['invalid output'] = lang('Invalid output-type provided');
+					break;
+
+				case 209:
+					$err['mysql driver'] = lang('Unable to load the MySQL driver');
+					break;
+
+				case 210:
+					$err['psql driver'] = lang('Unable to load the PostgreSQL driver');
+					break;
+
+				case 211:
+					$err['connect'] = lang('Unable to connect to database');
+					break;
+
+				case 212:
+					$err['no name'] = lang('Missing report-name');
+					break;
+
+				case 213:
+					$err['invalid rname'] = lang('Invalid report-name');
+					break;
+
+				case 214:
+					$err['invalid rname'] = lang('Missing configuration file');
+					break;
+
+				case 215:
+					$err['missing cs'] = lang('Missing connection-string');
+					break;
+
+				case 216:
+					$err['missing du'] = lang('Missing DB-username');
+					break;
+
+				case 217:
+					$err['missing dp'] = lang('Missing DB-password');
+					break;
+
+				case 0:
+					$output = join("\n", $cmd_output);
+					if ($output_type == 'PDF') 
+					{
+						$mime= 'application/pdf';
+						$filename ="{$report_name}.pdf"; 
+					} 
+					else if ($output_type == 'CSV') 
+					{
+						$mime= 'text/csv';
+						$filename ="{$report_name}.csv"; 
+					} 
+					else if ($output_type == 'XLS') 
+					{
+						$mime= 'application/vnd.ms-excel';
+						$filename ="{$report_name}.xls"; 
+					} 
+					else 
+					{ // should never arise                                                                                                                                                           
+						$mime= 'application/octet-stream';
+						$filename ="{$report_name}.dat"; 
+					}
+
+				$browser = CreateObject('phpgwapi.browser');
+				$browser->content_header($filename,$mime,strlen($output));
+				echo $output;
+			}
+		}
+	}

Added: people/sigurdne/modules/phpgwapi/trunk/inc/jasper/readme_config.txt
===================================================================
--- people/sigurdne/modules/phpgwapi/trunk/inc/jasper/readme_config.txt	                        (rev 0)
+++ people/sigurdne/modules/phpgwapi/trunk/inc/jasper/readme_config.txt	2010-01-13 19:03:41 UTC (rev 20951)
@@ -0,0 +1,21 @@
+
+//Generate config-file on the fly
+// Start-------------------------------------------------
+	$report_name		= 'report_participants';
+	$report_source		= '/var/www/bk/dev-sigurd-2/booking/jasper/templates/participants.jrxml';			
+
+	$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);
+
+// Slutt-------------------------------
+