1999-04-22 00:25:57 +00:00
/*
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2004-01-08 08:18:22 +00:00
| PHP Version 5 |
1999-04-22 00:25:57 +00:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2006-01-01 12:51:34 +00:00
| Copyright ( c ) 1997 - 2006 The PHP Group |
1999-04-22 00:25:57 +00:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2006-01-01 12:51:34 +00:00
| This source file is subject to version 3.01 of the PHP license , |
1999-07-16 13:13:16 +00:00
| that is bundled with this package in the file LICENSE , and is |
2003-06-10 20:04:29 +00:00
| available through the world - wide - web at the following url : |
2006-01-01 12:51:34 +00:00
| http : //www.php.net/license/3_01.txt |
1999-07-16 13:13:16 +00:00
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world - wide - web , please send a note to |
| license @ php . net so we can mail you a copy immediately . |
1999-04-22 00:25:57 +00:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Authors : Uwe Steinmann < Uwe . Steinmann @ fernuni - hagen . de > |
2002-11-25 12:30:28 +00:00
| Hartmut Holzgraefe < hholzgra @ php . net > |
1999-04-22 00:25:57 +00:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
*/
/* $Id$ */
/* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from
http : //beta1.adobe.com/ada/acrosdk/forms.html. */
/* Note that there is no code from the FdfTk lib in this file */
2001-05-24 10:07:29 +00:00
# ifdef HAVE_CONFIG_H
# include "config.h"
# endif
1999-04-22 00:25:57 +00:00
# include "php.h"
2002-10-21 19:55:28 +00:00
# include "php_open_temporary_file.h"
1999-04-22 00:25:57 +00:00
# if HAVE_FDFLIB
2001-04-06 23:17:31 +00:00
# include "SAPI.h"
2000-04-05 22:30:19 +00:00
# include "ext/standard/info.h"
2001-04-06 23:17:31 +00:00
# include "php_open_temporary_file.h"
# include "php_variables.h"
# include "php_fdf.h"
2000-04-05 22:30:19 +00:00
2003-07-14 23:23:01 +00:00
# ifndef S_ISDIR
# define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
# endif
2001-04-06 23:17:31 +00:00
static int le_fdf ;
1999-04-22 00:25:57 +00:00
2000-10-11 22:44:15 +00:00
SAPI_POST_HANDLER_FUNC ( fdf_post_handler ) ;
2006-06-14 21:36:10 +00:00
/* {{{ arginfo */
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_open , 0 )
ZEND_ARG_INFO ( 0 , filename )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_open_string , 0 )
ZEND_ARG_INFO ( 0 , fdf_data )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_create , 0 )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_close , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO_EX ( arginfo_fdf_get_value , 0 , 0 , 2 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , which )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO_EX ( arginfo_fdf_set_value , 0 , 0 , 3 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , value )
ZEND_ARG_INFO ( 0 , isname )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO_EX ( arginfo_fdf_next_field_name , 0 , 0 , 1 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_ap , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , face )
ZEND_ARG_INFO ( 0 , filename )
ZEND_ARG_INFO ( 0 , pagenr )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_get_ap , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , face )
ZEND_ARG_INFO ( 0 , filename )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_get_encoding , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_status , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , status )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_get_status , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO_EX ( arginfo_fdf_set_file , 0 , 0 , 2 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , filename )
ZEND_ARG_INFO ( 0 , target_frame )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_get_file , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO_EX ( arginfo_fdf_save , 0 , 0 , 1 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , filename )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_save_string , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_add_template , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , newpage )
ZEND_ARG_INFO ( 0 , filename )
ZEND_ARG_INFO ( 0 , template )
ZEND_ARG_INFO ( 0 , rename )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_flags , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , whichflags )
ZEND_ARG_INFO ( 0 , newflags )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_get_flags , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , whichflags )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_opt , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , element )
ZEND_ARG_INFO ( 0 , value )
ZEND_ARG_INFO ( 0 , name )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO_EX ( arginfo_fdf_get_opt , 0 , 0 , 2 )
ZEND_ARG_INFO ( 0 , fdfdof )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , element )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_submit_form_action , 0 )
2006-07-02 00:11:06 +00:00
ZEND_ARG_INFO ( 0 , fdfdoc )
2006-06-14 21:36:10 +00:00
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , whichtrigger )
ZEND_ARG_INFO ( 0 , url )
ZEND_ARG_INFO ( 0 , flags )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_javascript_action , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , whichtrigger )
ZEND_ARG_INFO ( 0 , script )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_encoding , 0 )
ZEND_ARG_INFO ( 0 , fdf_document )
ZEND_ARG_INFO ( 0 , encoding )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_errno , 0 )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_error , 0 )
ZEND_ARG_INFO ( 0 , errno )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO_EX ( arginfo_fdf_get_version , 0 , 0 , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_version , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , version )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_add_doc_javascript , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , scriptname )
ZEND_ARG_INFO ( 0 , script )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_on_import_javascript , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , script )
ZEND_ARG_INFO ( 0 , before_data_import )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_set_target_frame , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , target )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_remove_item , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , item )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_get_attachment , 0 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , fieldname )
ZEND_ARG_INFO ( 0 , savepath )
ZEND_END_ARG_INFO ( )
static
ZEND_BEGIN_ARG_INFO_EX ( arginfo_fdf_enum_values , 0 , 0 , 2 )
ZEND_ARG_INFO ( 0 , fdfdoc )
ZEND_ARG_INFO ( 0 , function )
ZEND_ARG_INFO ( 0 , userdata )
ZEND_END_ARG_INFO ( )
static
2006-07-23 23:55:46 +00:00
ZEND_BEGIN_ARG_INFO ( arginfo_fdf_header , 0 )
2006-06-14 21:36:10 +00:00
ZEND_END_ARG_INFO ( )
/* }}} */
2001-06-05 13:12:10 +00:00
/* {{{ fdf_functions[]
*/
2005-12-06 02:28:41 +00:00
zend_function_entry fdf_functions [ ] = {
2006-06-14 21:36:10 +00:00
PHP_FE ( fdf_add_template , arginfo_fdf_add_template )
PHP_FE ( fdf_close , arginfo_fdf_close )
PHP_FE ( fdf_create , arginfo_fdf_create )
PHP_FE ( fdf_enum_values , arginfo_fdf_enum_values )
PHP_FE ( fdf_errno , arginfo_fdf_errno )
PHP_FE ( fdf_error , arginfo_fdf_error )
PHP_FE ( fdf_get_ap , arginfo_fdf_get_ap )
PHP_FE ( fdf_get_encoding , arginfo_fdf_get_encoding )
PHP_FE ( fdf_get_file , arginfo_fdf_get_file )
PHP_FE ( fdf_get_flags , arginfo_fdf_get_flags )
PHP_FE ( fdf_get_opt , arginfo_fdf_get_opt )
PHP_FE ( fdf_get_status , arginfo_fdf_get_status )
PHP_FE ( fdf_get_value , arginfo_fdf_get_value )
PHP_FE ( fdf_get_version , arginfo_fdf_get_version )
PHP_FE ( fdf_next_field_name , arginfo_fdf_next_field_name )
PHP_FE ( fdf_open , arginfo_fdf_open )
PHP_FE ( fdf_open_string , arginfo_fdf_open_string )
PHP_FE ( fdf_remove_item , arginfo_fdf_remove_item )
PHP_FE ( fdf_save , arginfo_fdf_save )
PHP_FE ( fdf_save_string , arginfo_fdf_save_string )
PHP_FE ( fdf_set_ap , arginfo_fdf_set_ap )
PHP_FE ( fdf_set_encoding , arginfo_fdf_set_encoding )
PHP_FE ( fdf_set_file , arginfo_fdf_set_file )
PHP_FE ( fdf_set_flags , arginfo_fdf_set_flags )
PHP_FE ( fdf_set_javascript_action , arginfo_fdf_set_javascript_action )
PHP_FE ( fdf_set_opt , arginfo_fdf_set_opt )
PHP_FE ( fdf_set_status , arginfo_fdf_set_status )
PHP_FE ( fdf_set_submit_form_action , arginfo_fdf_set_submit_form_action )
PHP_FE ( fdf_set_value , arginfo_fdf_set_value )
PHP_FE ( fdf_header , arginfo_fdf_header )
2002-10-23 01:11:06 +00:00
# ifdef HAVE_FDFTK_5
2006-06-14 21:36:10 +00:00
PHP_FE ( fdf_add_doc_javascript , arginfo_fdf_add_doc_javascript )
PHP_FE ( fdf_get_attachment , arginfo_fdf_get_attachment )
PHP_FE ( fdf_set_on_import_javascript , arginfo_fdf_set_on_import_javascript )
PHP_FE ( fdf_set_target_frame , arginfo_fdf_set_target_frame )
PHP_FE ( fdf_set_version , arginfo_fdf_set_version )
2002-10-23 01:11:06 +00:00
# endif
1999-04-22 00:25:57 +00:00
{ NULL , NULL , NULL }
} ;
2001-06-05 13:12:10 +00:00
/* }}} */
1999-04-22 00:25:57 +00:00
2006-06-15 18:33:09 +00:00
ZEND_DECLARE_MODULE_GLOBALS ( fdf )
static PHP_GINIT_FUNCTION ( fdf ) ;
1999-12-17 20:55:31 +00:00
zend_module_entry fdf_module_entry = {
2001-10-11 23:33:59 +00:00
STANDARD_MODULE_HEADER ,
2001-04-06 23:17:31 +00:00
" fdf " ,
fdf_functions ,
PHP_MINIT ( fdf ) ,
PHP_MSHUTDOWN ( fdf ) ,
2002-10-21 19:55:28 +00:00
PHP_RINIT ( fdf ) ,
2001-04-06 23:17:31 +00:00
NULL ,
PHP_MINFO ( fdf ) ,
2001-10-11 23:33:59 +00:00
NO_VERSION_YET ,
2006-06-15 18:33:09 +00:00
PHP_MODULE_GLOBALS ( fdf ) ,
PHP_GINIT ( fdf ) ,
NULL ,
NULL ,
STANDARD_MODULE_PROPERTIES_EX
1999-04-22 00:25:57 +00:00
} ;
2000-05-23 09:33:51 +00:00
# ifdef COMPILE_DL_FDF
2000-05-02 00:30:36 +00:00
ZEND_GET_MODULE ( fdf )
1999-04-22 00:25:57 +00:00
# endif
2002-10-21 19:55:28 +00:00
# define FDF_SUCCESS do { FDF_G(error)=FDFErcOK; RETURN_TRUE;} while(0)
# define FDF_FAILURE(err) do { FDF_G(error)=err; RETURN_FALSE;} while(0)
2001-04-06 23:17:31 +00:00
2001-07-31 05:44:11 +00:00
static void phpi_FDFClose ( zend_rsrc_list_entry * rsrc TSRMLS_DC )
2000-10-20 18:25:16 +00:00
{
FDFDoc fdf = ( FDFDoc ) rsrc - > ptr ;
2001-07-31 05:44:11 +00:00
2001-04-06 23:17:31 +00:00
( void ) FDFClose ( fdf ) ;
1999-08-06 06:52:06 +00:00
}
2001-03-18 02:35:10 +00:00
# define FDF_POST_CONTENT_TYPE "application / vnd.fdf"
static sapi_post_entry php_fdf_post_entry = {
FDF_POST_CONTENT_TYPE ,
sizeof ( FDF_POST_CONTENT_TYPE ) - 1 ,
sapi_read_standard_form_data ,
2001-03-18 05:52:40 +00:00
fdf_post_handler
2001-03-18 02:35:10 +00:00
} ;
2006-06-15 18:33:09 +00:00
static PHP_GINIT_FUNCTION ( fdf )
2003-05-28 09:40:32 +00:00
{
memset ( fdf_globals , 0 , sizeof ( * fdf_globals ) ) ;
}
2001-06-05 13:12:10 +00:00
/* {{{ PHP_MINIT_FUNCTION
*/
1999-07-27 19:44:46 +00:00
PHP_MINIT_FUNCTION ( fdf )
1999-04-22 00:25:57 +00:00
{
2001-04-06 23:17:31 +00:00
le_fdf = zend_register_list_destructors_ex ( phpi_FDFClose , NULL , " fdf " , module_number ) ;
2000-08-15 18:46:59 +00:00
2002-10-21 19:55:28 +00:00
/* add handler for Acrobat FDF form post requests */
2005-04-20 22:51:45 +00:00
sapi_register_post_entry ( & php_fdf_post_entry TSRMLS_CC ) ;
2000-10-11 22:44:15 +00:00
2001-04-06 23:17:31 +00:00
2002-10-21 19:55:28 +00:00
/* Constants used by fdf_set_opt() */
2000-08-15 18:46:59 +00:00
REGISTER_LONG_CONSTANT ( " FDFValue " , FDFValue , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFStatus " , FDFStatus , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFFile " , FDFFile , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFID " , FDFID , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFFf " , FDFFf , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFSetFf " , FDFSetFf , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFClearFf " , FDFClearFf , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFFlags " , FDFFlags , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFSetF " , FDFSetF , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFClrF " , FDFClrF , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFAP " , FDFAP , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFAS " , FDFAS , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFAction " , FDFAction , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFAA " , FDFAA , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFAPRef " , FDFAPRef , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFIF " , FDFIF , CONST_CS | CONST_PERSISTENT ) ;
2000-08-21 09:23:37 +00:00
/* Constants used by fdf_set_javascript_action() */
REGISTER_LONG_CONSTANT ( " FDFEnter " , FDFEnter , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFExit " , FDFExit , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFDown " , FDFDown , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFUp " , FDFUp , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFFormat " , FDFFormat , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFValidate " , FDFValidate , CONST_CS | CONST_PERSISTENT ) ;
2003-05-28 09:40:32 +00:00
2000-08-21 09:23:37 +00:00
REGISTER_LONG_CONSTANT ( " FDFKeystroke " , FDFKeystroke , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFCalculate " , FDFCalculate , CONST_CS | CONST_PERSISTENT ) ;
2002-10-21 19:55:28 +00:00
/* Constants used by fdf_(set|get)_ap */
REGISTER_LONG_CONSTANT ( " FDFNormalAP " , 1 , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFRolloverAP " , 2 , CONST_CS | CONST_PERSISTENT ) ;
REGISTER_LONG_CONSTANT ( " FDFDownAP " , 3 , CONST_CS | CONST_PERSISTENT ) ;
2003-05-28 09:40:32 +00:00
2000-07-06 14:47:02 +00:00
# ifdef PHP_WIN32
2000-07-06 05:30:06 +00:00
return SUCCESS ;
2003-05-09 07:55:32 +00:00
# else
return ( FDFInitialize ( ) = = FDFErcOK ) ? SUCCESS : FAILURE ;
2000-07-06 05:30:06 +00:00
# endif
1999-04-22 00:25:57 +00:00
}
2001-06-05 13:12:10 +00:00
/* }}} */
1999-04-22 00:25:57 +00:00
2002-10-21 19:55:28 +00:00
/* {{{ RINIT */
2003-05-13 22:09:18 +00:00
PHP_RINIT_FUNCTION ( fdf )
{
2003-05-28 09:40:32 +00:00
FDF_G ( error ) = FDFErcOK ;
2002-10-21 19:55:28 +00:00
return SUCCESS ;
}
/* }}} */
2001-06-05 13:12:10 +00:00
/* {{{ PHP_MINFO_FUNCTION
*/
1999-07-27 19:44:46 +00:00
PHP_MINFO_FUNCTION ( fdf )
{
1999-04-22 00:25:57 +00:00
/* need to use a PHPAPI function here because it is external module in windows */
2000-04-05 22:30:19 +00:00
php_info_print_table_start ( ) ;
php_info_print_table_row ( 2 , " FDF Support " , " enabled " ) ;
php_info_print_table_row ( 2 , " FdfTk Version " , FDFGetVersion ( ) ) ;
php_info_print_table_end ( ) ;
1999-04-22 00:25:57 +00:00
}
2001-06-05 13:12:10 +00:00
/* }}} */
1999-04-22 00:25:57 +00:00
2001-06-05 13:12:10 +00:00
/* {{{ PHP_MSHUTDOWN_FUNCTION
*/
1999-07-27 19:44:46 +00:00
PHP_MSHUTDOWN_FUNCTION ( fdf )
{
2000-10-11 22:44:15 +00:00
/* remove handler for Acrobat FDF form post requests */
2005-04-20 22:51:45 +00:00
sapi_unregister_post_entry ( & php_fdf_post_entry TSRMLS_CC ) ;
2000-10-11 22:44:15 +00:00
2000-07-06 14:47:02 +00:00
# ifdef PHP_WIN32
2000-07-06 05:30:06 +00:00
return SUCCESS ;
2003-05-09 07:55:32 +00:00
# else
return ( FDFFinalize ( ) = = FDFErcOK ) ? SUCCESS : FAILURE ;
2000-07-06 05:30:06 +00:00
# endif
1999-04-22 00:25:57 +00:00
}
2001-06-05 13:12:10 +00:00
/* }}} */
2001-04-06 23:17:31 +00:00
2003-02-10 00:47:45 +00:00
/* {{{ proto resource fdf_open(string filename)
2001-04-07 02:48:19 +00:00
Opens a new FDF document */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_open )
{
zval * * file ;
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2000-06-05 19:47:54 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 1 | | zend_get_parameters_ex ( 1 , & file ) = = FAILURE ) {
1999-04-22 00:25:57 +00:00
WRONG_PARAM_COUNT ;
}
1999-12-15 05:21:28 +00:00
convert_to_string_ex ( file ) ;
1999-04-22 00:25:57 +00:00
2003-05-21 17:04:08 +00:00
if ( php_check_open_basedir ( Z_STRVAL_PP ( file ) TSRMLS_CC ) | | ( PG ( safe_mode ) & & ! php_checkuid ( Z_STRVAL_PP ( file ) , " wb+ " , CHECKUID_CHECK_MODE_PARAM ) ) ) {
RETURN_FALSE ;
}
2001-04-06 23:17:31 +00:00
err = FDFOpen ( Z_STRVAL_PP ( file ) , 0 , & fdf ) ;
1999-04-22 00:25:57 +00:00
2001-04-06 23:17:31 +00:00
if ( err ! = FDFErcOK | | ! fdf ) {
2002-10-21 19:55:28 +00:00
if ( err = = FDFErcOK ) err = FDFErcInternalError ;
FDF_FAILURE ( err ) ;
}
ZEND_REGISTER_RESOURCE ( return_value , fdf , le_fdf ) ;
}
/* }}} */
2003-02-10 00:47:45 +00:00
/* {{{ proto resource fdf_open_string(string fdf_data)
2002-10-21 19:55:28 +00:00
Opens a new FDF document from string */
PHP_FUNCTION ( fdf_open_string )
{
char * fdf_data ;
int fdf_data_len ;
FDFDoc fdf ;
FDFErc err ;
char * temp_filename ;
FILE * fp ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " s " ,
& fdf_data , & fdf_data_len )
= = FAILURE ) {
return ;
}
fp = php_open_temporary_file ( PG ( upload_tmp_dir ) , " php " , & temp_filename TSRMLS_CC ) ;
if ( ! fp ) {
1999-04-22 00:25:57 +00:00
RETURN_FALSE ;
}
2002-10-21 19:55:28 +00:00
fwrite ( fdf_data , fdf_data_len , 1 , fp ) ;
fclose ( fp ) ;
err = FDFOpen ( temp_filename , 0 , & fdf ) ;
unlink ( temp_filename ) ;
efree ( temp_filename ) ;
if ( err ! = FDFErcOK | | ! fdf ) {
if ( err = = FDFErcOK ) err = FDFErcInternalError ;
FDF_FAILURE ( err ) ;
}
1999-04-22 00:25:57 +00:00
2001-04-06 23:17:31 +00:00
ZEND_REGISTER_RESOURCE ( return_value , fdf , le_fdf ) ;
}
/* }}} */
1999-04-22 00:25:57 +00:00
2003-02-10 00:47:45 +00:00
/* {{{ proto resource fdf_create(void)
2001-04-07 02:48:19 +00:00
Creates a new FDF document */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_create )
{
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-08-13 07:55:39 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 0 ) {
WRONG_PARAM_COUNT ;
}
2001-08-13 06:43:47 +00:00
1999-04-22 00:25:57 +00:00
err = FDFCreate ( & fdf ) ;
2001-04-06 23:17:31 +00:00
if ( err ! = FDFErcOK | | ! fdf ) {
2002-10-21 19:55:28 +00:00
if ( err = = FDFErcOK ) err = FDFErcInternalError ;
FDF_FAILURE ( err ) ;
2001-04-06 23:17:31 +00:00
}
1999-04-22 00:25:57 +00:00
2001-04-06 23:17:31 +00:00
ZEND_REGISTER_RESOURCE ( return_value , fdf , le_fdf ) ;
1999-04-22 00:25:57 +00:00
}
/* }}} */
2003-06-15 15:29:46 +00:00
/* {{{ proto void fdf_close(resource fdfdoc)
2001-04-07 02:48:19 +00:00
Closes the FDF document */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_close )
{
zval * * fdfp ;
FDFDoc fdf ;
if ( ZEND_NUM_ARGS ( ) ! = 1 | | zend_get_parameters_ex ( 1 , & fdfp ) = = FAILURE ) {
WRONG_PARAM_COUNT ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
zend_list_delete ( Z_RESVAL_PP ( fdfp ) ) ;
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto string fdf_get_value(resource fdfdoc, string fieldname [, int which])
2001-04-07 02:48:19 +00:00
Gets the value of a field as string */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_get_value )
{
2002-10-21 19:55:28 +00:00
zval * r_fdf ;
char * fieldname ;
int fieldname_len ;
long which = - 1 ;
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2002-10-21 19:55:28 +00:00
ASInt32 nr , size = 256 ;
char * buffer ;
1999-04-22 00:25:57 +00:00
2002-10-21 19:55:28 +00:00
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rs|l " ,
& r_fdf , & fieldname , & fieldname_len ,
& which )
= = FAILURE ) {
return ;
1999-04-22 00:25:57 +00:00
}
2002-10-21 19:55:28 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
2001-04-06 23:17:31 +00:00
buffer = emalloc ( size ) ;
2002-10-21 19:55:28 +00:00
if ( which > = 0 ) {
2002-10-23 01:11:06 +00:00
# if HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
err = FDFGetNthValue ( fdf , fieldname , which , buffer , size - 2 , & nr ) ;
2002-10-23 01:11:06 +00:00
# else
php_error_docref ( NULL TSRMLS_CC , E_WARNING , " the optional 'which' parameter requires FDF toolkit 5.0 or above, it will be ignored for now " ) ;
which = - 1 ;
# endif
2002-10-21 19:55:28 +00:00
} else {
err = FDFGetValue ( fdf , fieldname , buffer , size - 2 , & nr ) ;
}
2001-04-06 23:17:31 +00:00
if ( err = = FDFErcBufTooShort & & nr > 0 ) {
2002-10-21 19:55:28 +00:00
buffer = erealloc ( buffer , nr + 2 ) ;
if ( which > = 0 ) {
2002-10-23 01:11:06 +00:00
# if HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
err = FDFGetNthValue ( fdf , fieldname , which , buffer , nr , & nr ) ;
2002-10-23 01:11:06 +00:00
# endif
2002-10-21 19:55:28 +00:00
} else {
err = FDFGetValue ( fdf , fieldname , buffer , nr , & nr ) ;
}
2002-10-23 01:11:06 +00:00
# if HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
} else if ( ( err = = FDFErcValueIsArray ) & & ( which = = - 1 ) ) {
2003-01-18 19:49:28 +00:00
array_init ( return_value ) ;
2002-10-21 19:55:28 +00:00
which = 0 ;
do {
err = FDFGetNthValue ( fdf , fieldname , which , buffer , size - 2 , & nr ) ;
if ( err = = FDFErcBufTooShort & & nr > 0 ) {
buffer = erealloc ( buffer , nr + 2 ) ;
err = FDFGetNthValue ( fdf , fieldname , which , buffer , nr , & nr ) ;
}
if ( err = = FDFErcOK ) {
add_next_index_string ( return_value , buffer , 1 ) ;
}
which + + ;
} while ( err = = FDFErcOK ) ;
efree ( buffer ) ;
buffer = NULL ;
2002-10-23 01:11:06 +00:00
# endif
2002-10-21 19:55:28 +00:00
}
2001-04-06 23:17:31 +00:00
2003-09-11 00:47:32 +00:00
if ( ( err ! = FDFErcOK ) & & ( err ! = FDFErcNoValue ) ) {
2002-10-21 19:55:28 +00:00
if ( buffer ) efree ( buffer ) ;
FDF_FAILURE ( err ) ;
}
if ( buffer ) {
RETVAL_STRING ( buffer , 1 ) ;
2001-04-06 23:17:31 +00:00
efree ( buffer ) ;
1999-04-22 00:25:57 +00:00
}
2002-10-21 19:55:28 +00:00
return ;
1999-04-22 00:25:57 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_set_value(resource fdfdoc, string fieldname, mixed value [, int isname])
2001-04-07 02:48:19 +00:00
Sets the value of a field */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_set_value )
{
2002-10-21 19:55:28 +00:00
zval * * fdfp , * * fieldname , * * value , * * dummy ;
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2002-10-21 19:55:28 +00:00
switch ( ZEND_NUM_ARGS ( ) ) {
case 3 :
if ( zend_get_parameters_ex ( 3 , & fdfp , & fieldname , & value ) = = FAILURE ) {
WRONG_PARAM_COUNT ;
}
break ;
case 4 :
if ( zend_get_parameters_ex ( 4 , & fdfp , & fieldname , & value , & dummy ) = = FAILURE ) {
WRONG_PARAM_COUNT ;
}
break ;
default :
1999-04-22 00:25:57 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
1999-04-22 00:25:57 +00:00
2001-04-06 23:17:31 +00:00
convert_to_string_ex ( fieldname ) ;
1999-04-22 00:25:57 +00:00
2002-10-21 19:55:28 +00:00
if ( Z_TYPE_PP ( value ) = = IS_ARRAY ) {
2002-10-23 01:11:06 +00:00
# ifdef HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
ASInt32 nValues = zend_hash_num_elements ( Z_ARRVAL_PP ( value ) ) ;
char * * newValues = ecalloc ( nValues , sizeof ( char * ) ) , * * next ;
HashPosition pos ;
zval * * tmp ;
next = newValues ;
zend_hash_internal_pointer_reset_ex ( Z_ARRVAL_PP ( value ) , & pos ) ;
while ( zend_hash_get_current_data_ex ( Z_ARRVAL_PP ( value ) ,
( void * * ) & tmp ,
& pos ) = = SUCCESS ) {
convert_to_string_ex ( tmp ) ;
* next + + = estrdup ( Z_STRVAL_PP ( tmp ) ) ;
zend_hash_move_forward_ex ( Z_ARRVAL_PP ( value ) , & pos ) ;
}
err = FDFSetValues ( fdf , Z_STRVAL_PP ( fieldname ) , nValues , ( const char * * ) newValues ) ;
for ( next = newValues ; nValues ; nValues - - ) {
efree ( * next + + ) ;
}
efree ( newValues ) ;
2002-10-23 01:11:06 +00:00
# else
php_error_docref ( NULL TSRMLS_CC , E_WARNING , " setting array values is only possible with FDF toolkit 5.0 and above " ) ;
RETURN_FALSE ;
# endif
2002-10-21 19:55:28 +00:00
} else {
convert_to_string_ex ( value ) ;
err = FDFSetValue ( fdf , Z_STRVAL_PP ( fieldname ) , Z_STRVAL_PP ( value ) , ( ASBool ) 0 /*dummy*/ ) ;
}
2001-04-06 23:17:31 +00:00
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2001-04-06 23:17:31 +00:00
}
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
1999-04-22 00:25:57 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto string fdf_next_field_name(resource fdfdoc [, string fieldname])
2001-04-07 02:48:19 +00:00
Gets the name of the next field name or the first field name */
2001-04-05 05:38:18 +00:00
PHP_FUNCTION ( fdf_next_field_name )
{
2001-04-06 23:17:31 +00:00
zval * * fdfp , * * field ;
int argc = ZEND_NUM_ARGS ( ) ;
2001-04-05 05:38:18 +00:00
ASInt32 length = 256 , nr ;
char * buffer = NULL , * fieldname = NULL ;
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
if ( argc > 2 | | argc < 1 | | zend_get_parameters_ex ( argc , & fdfp , & field ) = = FAILURE ) {
1999-04-22 00:25:57 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
1999-04-22 00:25:57 +00:00
2001-04-05 05:38:18 +00:00
if ( argc = = 2 ) {
convert_to_string_ex ( field ) ;
fieldname = Z_STRVAL_PP ( field ) ;
}
buffer = emalloc ( length ) ;
err = FDFNextFieldName ( fdf , fieldname , buffer , length - 1 , & nr ) ;
2001-04-06 23:17:31 +00:00
2001-04-05 05:38:18 +00:00
if ( err = = FDFErcBufTooShort & & nr > 0 ) {
2001-08-11 16:39:07 +00:00
buffer = erealloc ( buffer , nr + 1 ) ;
err = FDFNextFieldName ( fdf , fieldname , buffer , length - 1 , & nr ) ;
2001-04-05 05:38:18 +00:00
}
2001-04-06 23:17:31 +00:00
2001-04-05 05:38:18 +00:00
if ( err ! = FDFErcOK ) {
efree ( buffer ) ;
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2001-04-05 05:38:18 +00:00
}
2001-04-06 23:17:31 +00:00
2001-04-05 05:38:18 +00:00
RETVAL_STRING ( buffer , 1 ) ;
efree ( buffer ) ;
1999-04-22 00:25:57 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_set_ap(resource fdfdoc, string fieldname, int face, string filename, int pagenr)
2001-04-07 02:48:19 +00:00
Sets the appearence of a field */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_set_ap )
{
zval * * fdfp , * * fieldname , * * face , * * filename , * * pagenr ;
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
FDFAppFace facenr ;
1999-04-22 00:25:57 +00:00
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 5 | | zend_get_parameters_ex ( 5 , & fdfp , & fieldname , & face , & filename , & pagenr ) = = FAILURE ) {
1999-04-22 00:25:57 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
convert_to_string_ex ( fieldname ) ;
convert_to_long_ex ( face ) ;
convert_to_string_ex ( filename ) ;
2003-05-21 17:04:08 +00:00
if ( php_check_open_basedir ( Z_STRVAL_PP ( filename ) TSRMLS_CC ) | | ( PG ( safe_mode ) & & ! php_checkuid ( Z_STRVAL_PP ( filename ) , " wb+ " , CHECKUID_CHECK_MODE_PARAM ) ) ) {
RETURN_FALSE ;
}
2001-04-06 23:17:31 +00:00
convert_to_long_ex ( pagenr ) ;
1999-04-22 00:25:57 +00:00
2001-04-06 23:17:31 +00:00
switch ( Z_LVAL_PP ( face ) ) {
1999-04-22 00:25:57 +00:00
case 1 :
2001-04-06 23:17:31 +00:00
facenr = FDFNormalAP ;
1999-04-22 00:25:57 +00:00
break ;
case 2 :
2001-04-06 23:17:31 +00:00
facenr = FDFRolloverAP ;
1999-04-22 00:25:57 +00:00
break ;
case 3 :
2001-04-06 23:17:31 +00:00
facenr = FDFDownAP ;
1999-04-22 00:25:57 +00:00
break ;
default :
2001-04-06 23:17:31 +00:00
facenr = FDFNormalAP ;
2002-10-21 19:55:28 +00:00
break ;
1999-04-22 00:25:57 +00:00
}
2001-04-06 23:17:31 +00:00
err = FDFSetAP ( fdf , Z_STRVAL_PP ( fieldname ) , facenr , NULL , Z_STRVAL_PP ( filename ) , ( ASInt32 ) Z_LVAL_PP ( pagenr ) ) ;
/* This should be made more intelligent, ie. use switch() with the
possible errors this function can return . Or create global error handler function .
*/
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2001-04-06 23:17:31 +00:00
}
1999-04-22 00:25:57 +00:00
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
2001-04-06 23:17:31 +00:00
1999-04-22 00:25:57 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_get_ap(resource fdfdoc, string fieldname, int face, string filename)
Gets the appearance of a field and creates a PDF document out of it . */
PHP_FUNCTION ( fdf_get_ap ) {
zval * r_fdf ;
char * fieldname , * filename ;
2003-03-06 23:07:28 +00:00
int fieldname_len , filename_len ;
long face ;
2002-10-21 19:55:28 +00:00
FDFDoc fdf ;
FDFErc err ;
FDFAppFace facenr ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rsls " ,
& r_fdf , & fieldname , & fieldname_len ,
& face , & filename , & filename_len )
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
2003-05-21 17:04:08 +00:00
if ( php_check_open_basedir ( filename TSRMLS_CC ) | | ( PG ( safe_mode ) & & ! php_checkuid ( filename , " wb+ " , CHECKUID_CHECK_MODE_PARAM ) ) ) {
RETURN_FALSE ;
}
2002-10-21 19:55:28 +00:00
switch ( face ) {
case 1 :
facenr = FDFNormalAP ;
break ;
case 2 :
facenr = FDFRolloverAP ;
break ;
case 3 :
facenr = FDFDownAP ;
break ;
default :
facenr = FDFNormalAP ;
break ;
}
err = FDFGetAP ( fdf , fieldname , facenr , filename ) ;
/* This should be made more intelligent, ie. use switch() with the
possible errors this function can return . Or create global error handler function .
*/
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
FDF_SUCCESS ;
}
/* }}} */
/* {{{ proto string fdf_get_encoding(resource fdf)
Gets FDF file encoding scheme */
PHP_FUNCTION ( fdf_get_encoding ) {
zval * r_fdf ;
FDFDoc fdf ;
FDFErc err ;
char buffer [ 32 ] ;
ASInt32 len ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " r " ,
& r_fdf ) = = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
err = FDFGetEncoding ( fdf , buffer , 32 , & len ) ;
/* This should be made more intelligent, ie. use switch() with the
possible errors this function can return . Or create global error handler function .
*/
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
FDF_G ( error ) = FDFErcOK ;
RETURN_STRINGL ( buffer , ( size_t ) len , 1 ) ;
}
/* }}} */
/* {{{ proto bool fdf_set_status(resource fdfdoc, string status)
2001-04-07 02:48:19 +00:00
Sets the value of / Status key */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_set_status )
{
zval * * fdfp , * * status ;
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 2 | | zend_get_parameters_ex ( 2 , & fdfp , & status ) = = FAILURE ) {
1999-04-22 00:25:57 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
convert_to_string_ex ( status ) ;
err = FDFSetStatus ( fdf , Z_STRVAL_PP ( status ) ) ;
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
1999-04-22 00:25:57 +00:00
}
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
1999-04-22 00:25:57 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto string fdf_get_status(resource fdfdoc)
2001-04-07 02:48:19 +00:00
Gets the value of / Status key */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_get_status )
{
zval * * fdfp ;
ASInt32 nr , size = 256 ;
1999-04-22 00:25:57 +00:00
char * buf ;
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 1 | | zend_get_parameters_ex ( 1 , & fdfp ) = = FAILURE ) {
1999-04-22 00:25:57 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
buf = emalloc ( size ) ;
err = FDFGetStatus ( fdf , buf , size - 1 , & nr ) ;
if ( err = = FDFErcBufTooShort & & nr > 0 ) {
2001-08-11 16:39:07 +00:00
buf = erealloc ( buf , nr + 1 ) ;
2001-04-06 23:17:31 +00:00
err = FDFGetStatus ( fdf , buf , size - 1 , & nr ) ;
}
if ( err ! = FDFErcOK ) {
efree ( buf ) ;
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
1999-04-22 00:25:57 +00:00
}
2001-04-06 23:17:31 +00:00
RETVAL_STRING ( buf , 1 ) ;
efree ( buf ) ;
1999-04-22 00:25:57 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_set_file(resource fdfdoc, string filename [, string target_frame])
2001-04-07 02:48:19 +00:00
Sets the value of / F key */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_set_file )
{
2002-10-21 19:55:28 +00:00
zval * r_fdf ;
char * filename , * target_frame = NULL ;
int filename_len , target_frame_len ;
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2002-10-21 19:55:28 +00:00
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rs|s " , & r_fdf ,
& filename , & filename_len ,
& target_frame , & target_frame_len )
= = FAILURE ) {
return ;
1999-04-22 00:25:57 +00:00
}
2004-05-16 14:38:19 +00:00
if ( php_check_open_basedir ( filename TSRMLS_CC ) | | ( PG ( safe_mode ) & & ! php_checkuid ( filename , " wb+ " , CHECKUID_CHECK_MODE_PARAM ) ) ) {
RETURN_FALSE ;
}
2002-10-21 19:55:28 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
2001-04-06 23:17:31 +00:00
2002-10-21 19:55:28 +00:00
err = FDFSetFile ( fdf , filename ) ;
2001-04-06 23:17:31 +00:00
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
}
if ( target_frame ) {
2002-10-23 01:11:06 +00:00
# ifdef HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
err = FDFSetTargetFrame ( fdf , target_frame ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
2002-10-23 01:11:06 +00:00
# else
php_error_docref ( NULL TSRMLS_CC , E_WARNING , " setting the target frame is only possible with FDF toolkit 5.0 and above, ignoring it for now " ) ;
# endif
1999-04-22 00:25:57 +00:00
}
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
1999-04-22 00:25:57 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto string fdf_get_file(resource fdfdoc)
2001-04-07 02:48:19 +00:00
Gets the value of / F key */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_get_file )
{
zval * * fdfp ;
ASInt32 nr , size = 256 ;
1999-04-22 00:25:57 +00:00
char * buf ;
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 1 | | zend_get_parameters_ex ( 1 , & fdfp ) = = FAILURE ) {
1999-04-22 00:25:57 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
buf = emalloc ( size ) ;
err = FDFGetFile ( fdf , buf , size - 1 , & nr ) ;
if ( err = = FDFErcBufTooShort & & nr > 0 ) {
2001-08-11 16:39:07 +00:00
buf = erealloc ( buf , nr + 1 ) ;
2001-04-06 23:17:31 +00:00
err = FDFGetFile ( fdf , buf , size - 1 , & nr ) ;
}
if ( err ! = FDFErcOK ) {
efree ( buf ) ;
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
1999-04-22 00:25:57 +00:00
}
2001-04-06 23:17:31 +00:00
RETVAL_STRING ( buf , 1 ) ;
efree ( buf ) ;
1999-04-22 00:25:57 +00:00
}
/* }}} */
2003-06-15 15:29:46 +00:00
/* {{{ proto bool fdf_save(resource fdfdoc [, string filename])
2001-04-07 02:48:19 +00:00
Writes out the FDF file */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_save )
{
2002-10-21 19:55:28 +00:00
zval * r_fdf ;
char * filename = NULL ;
int filename_len ;
1999-04-22 00:25:57 +00:00
FDFDoc fdf ;
FDFErc err ;
2002-10-21 19:55:28 +00:00
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " r|s " , & r_fdf , & filename , & filename_len )
= = FAILURE ) {
return ;
1999-04-22 00:25:57 +00:00
}
2002-10-21 19:55:28 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
if ( filename ) {
2003-05-21 17:04:08 +00:00
if ( php_check_open_basedir ( filename TSRMLS_CC ) | | ( PG ( safe_mode ) & & ! php_checkuid ( filename , " wb+ " , CHECKUID_CHECK_MODE_PARAM ) ) ) {
RETURN_FALSE ;
}
2002-10-21 19:55:28 +00:00
err = FDFSave ( fdf , filename ) ;
} else {
FILE * fp ;
char * temp_filename ;
fp = php_open_temporary_file ( PG ( upload_tmp_dir ) , " php " , & temp_filename TSRMLS_CC ) ;
if ( ! fp ) {
err = FDFErcFileSysErr ;
} else {
fclose ( fp ) ;
err = FDFSave ( fdf , temp_filename ) ;
if ( err = = FDFErcOK ) {
php_stream * stream = php_stream_open_wrapper ( temp_filename , " rb " , 0 , NULL ) ;
if ( stream ) {
php_stream_passthru ( stream ) ;
php_stream_close ( stream ) ;
} else {
err = FDFErcFileSysErr ;
}
}
}
if ( temp_filename ) {
unlink ( temp_filename ) ;
efree ( temp_filename ) ;
}
}
2001-04-06 23:17:31 +00:00
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
}
FDF_SUCCESS ;
}
/* }}} */
2003-06-15 15:29:46 +00:00
/* {{{ proto string fdf_save_string(resource fdfdoc)
2002-10-21 19:55:28 +00:00
Returns the FDF file as a string */
PHP_FUNCTION ( fdf_save_string )
{
zval * r_fdf ;
FDFDoc fdf ;
FDFErc err ;
FILE * fp ;
char * temp_filename = NULL ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " r " , & r_fdf )
= = FAILURE ) {
return ;
1999-04-22 00:25:57 +00:00
}
2002-10-21 19:55:28 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
1999-04-22 00:25:57 +00:00
2002-10-21 19:55:28 +00:00
fp = php_open_temporary_file ( PG ( upload_tmp_dir ) , " php " , & temp_filename TSRMLS_CC ) ;
if ( ! fp ) {
err = FDFErcFileSysErr ;
} else {
fclose ( fp ) ;
err = FDFSave ( fdf , temp_filename ) ;
if ( err = = FDFErcOK ) {
fp = fopen ( temp_filename , " rb " ) ;
if ( fp ) {
struct stat stat ;
char * buf ;
2004-11-08 04:54:27 +00:00
if ( fstat ( fileno ( fp ) , & stat ) = = - 1 ) {
RETVAL_FALSE ;
goto err ;
}
2002-10-21 19:55:28 +00:00
buf = emalloc ( stat . st_size + 1 ) ;
fread ( buf , stat . st_size , 1 , fp ) ;
buf [ stat . st_size ] = ' \0 ' ;
fclose ( fp ) ;
unlink ( temp_filename ) ;
efree ( temp_filename ) ;
RETURN_STRINGL ( buf , stat . st_size , 0 ) ;
} else {
err = FDFErcFileSysErr ;
}
}
}
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
2004-11-08 04:54:27 +00:00
err :
2002-10-21 19:55:28 +00:00
if ( temp_filename ) {
unlink ( temp_filename ) ;
efree ( temp_filename ) ;
}
return ;
2001-04-06 23:17:31 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_add_template(resource fdfdoc, int newpage, string filename, string template, int rename)
2001-04-07 02:48:19 +00:00
Adds a template into the FDF document */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_add_template )
{
zval * * fdfp , * * newpage , * * filename , * * template , * * rename ;
1999-08-06 06:52:06 +00:00
FDFDoc fdf ;
FDFErc err ;
pdfFileSpecRec filespec ;
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 5 | | zend_get_parameters_ex ( 5 , & fdfp , & newpage , & filename , & template , & rename ) = = FAILURE ) {
1999-08-06 06:52:06 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
convert_to_long_ex ( newpage ) ;
convert_to_string_ex ( filename ) ;
convert_to_string_ex ( template ) ;
convert_to_long_ex ( rename ) ;
1999-08-06 06:52:06 +00:00
2003-05-21 17:04:08 +00:00
if ( php_check_open_basedir ( Z_STRVAL_PP ( filename ) TSRMLS_CC ) | | ( PG ( safe_mode ) & & ! php_checkuid ( Z_STRVAL_PP ( filename ) , " wb+ " , CHECKUID_CHECK_MODE_PARAM ) ) ) {
RETURN_FALSE ;
}
1999-08-06 06:52:06 +00:00
filespec . FS = NULL ;
2001-04-06 23:17:31 +00:00
filespec . F = Z_STRVAL_PP ( filename ) ;
1999-08-06 06:52:06 +00:00
filespec . Mac = NULL ;
filespec . DOS = NULL ;
filespec . Unix = NULL ;
filespec . ID [ 0 ] = NULL ;
filespec . ID [ 1 ] = NULL ;
filespec . bVolatile = false ;
2001-04-06 23:17:31 +00:00
2003-05-09 07:55:32 +00:00
err = FDFAddTemplate ( fdf , ( unsigned short ) ( Z_LVAL_PP ( newpage ) ) , & filespec , Z_STRVAL_PP ( template ) , ( unsigned short ) ( Z_LVAL_PP ( rename ) ) ) ;
2001-04-06 23:17:31 +00:00
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2001-04-06 23:17:31 +00:00
}
1999-08-06 06:52:06 +00:00
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
1999-08-06 06:52:06 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_set_flags(resource fdfdoc, string fieldname, int whichflags, int newflags)
2001-04-07 02:48:19 +00:00
Sets flags for a field in the FDF document */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_set_flags )
{
zval * * fdfp , * * fieldname , * * flags , * * newflags ;
2000-08-07 11:37:42 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 4 | | zend_get_parameters_ex ( 4 , & fdfp , & fieldname , & flags , & newflags ) = = FAILURE ) {
2000-08-07 11:37:42 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
convert_to_string_ex ( fieldname ) ;
convert_to_long_ex ( flags ) ;
convert_to_long_ex ( newflags ) ;
2001-08-11 16:39:07 +00:00
err = FDFSetFlags ( fdf , Z_STRVAL_PP ( fieldname ) , Z_LVAL_PP ( flags ) , Z_LVAL_PP ( newflags ) ) ;
2001-04-06 23:17:31 +00:00
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2000-08-07 11:37:42 +00:00
}
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
2000-08-07 11:37:42 +00:00
}
/* }}} */
2002-10-21 19:55:28 +00:00
/* {{{ proto int fdf_get_flags(resorce fdfdoc, string fieldname, int whichflags)
Gets the flags of a field */
PHP_FUNCTION ( fdf_get_flags ) {
zval * r_fdf ;
char * fieldname ;
2003-03-06 23:07:28 +00:00
int fieldname_len ;
long whichflags ;
2002-10-21 19:55:28 +00:00
FDFDoc fdf ;
FDFErc err ;
ASUns32 flags ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rsl " ,
& r_fdf , & fieldname , & fieldname_len ,
& whichflags )
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
err = FDFGetFlags ( fdf , fieldname , ( FDFItem ) whichflags , & flags ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
RETURN_LONG ( ( long ) flags ) ;
}
/* }}} */
/* {{{ proto bool fdf_set_opt(resource fdfdoc, string fieldname, int element, string value, string name)
2001-04-07 02:48:19 +00:00
Sets a value in the opt array for a field */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_set_opt )
{
zval * * fdfp , * * fieldname , * * element , * * value , * * name ;
2000-08-07 11:37:42 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 5 | | zend_get_parameters_ex ( 5 , & fdfp , & fieldname , & element , & value , & name ) = = FAILURE ) {
2000-08-07 11:37:42 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
convert_to_string_ex ( fieldname ) ;
convert_to_long_ex ( element ) ;
convert_to_string_ex ( value ) ;
convert_to_string_ex ( name ) ;
2001-08-11 16:39:07 +00:00
err = FDFSetOpt ( fdf , Z_STRVAL_PP ( fieldname ) , Z_LVAL_PP ( element ) , Z_STRVAL_PP ( value ) , Z_STRVAL_PP ( name ) ) ;
2001-04-06 23:17:31 +00:00
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2000-08-07 11:37:42 +00:00
}
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
2000-08-07 11:37:42 +00:00
}
/* }}} */
2003-03-17 13:11:19 +00:00
/* {{{ proto mixed fdf_get_opt(resource fdfdof, string fieldname [, int element])
2002-10-21 19:55:28 +00:00
Gets a value from the opt array of a field */
PHP_FUNCTION ( fdf_get_opt ) {
zval * r_fdf ;
char * fieldname ;
2003-03-06 23:07:28 +00:00
int fieldname_len ;
long element = - 1 ;
2002-10-21 19:55:28 +00:00
FDFDoc fdf ;
FDFErc err ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rs|l " ,
& r_fdf , & fieldname , & fieldname_len ,
& element )
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
if ( element = = - 1 ) {
ASInt32 elements ;
err = FDFGetOpt ( fdf , fieldname , ( ASInt32 ) - 1 , NULL , NULL , 0 , & elements ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
RETURN_LONG ( ( long ) elements ) ;
} else {
ASInt32 bufSize , nRet ;
char * buf1 , * buf2 ;
bufSize = 1024 ;
buf1 = emalloc ( bufSize ) ;
buf2 = emalloc ( bufSize ) ;
err = FDFGetOpt ( fdf , fieldname , ( ASInt32 ) element , buf1 , buf2 , bufSize , & nRet ) ;
if ( err = = FDFErcBufTooShort ) {
efree ( buf1 ) ;
efree ( buf2 ) ;
buf1 = emalloc ( nRet ) ;
buf2 = emalloc ( nRet ) ;
bufSize = nRet ;
err = FDFGetOpt ( fdf , fieldname , ( ASInt32 ) element , buf1 , buf2 , bufSize , & nRet ) ;
}
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
2003-01-18 19:49:28 +00:00
array_init ( return_value ) ;
2002-10-21 19:55:28 +00:00
add_next_index_stringl ( return_value , buf1 , strlen ( buf1 ) , 1 ) ;
add_next_index_stringl ( return_value , buf2 , strlen ( buf2 ) , 1 ) ;
efree ( buf1 ) ;
efree ( buf2 ) ;
}
}
/* }}} */
/* {{{ proto bool fdf_set_submit_form_action(resource fdfdoc, string fieldname, int whichtrigger, string url, int flags)
2001-04-07 02:48:19 +00:00
Sets the submit form action for a field */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_set_submit_form_action )
{
zval * * fdfp , * * fieldname , * * trigger , * * url , * * flags ;
2000-08-07 11:37:42 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 5 | | zend_get_parameters_ex ( 5 , & fdfp , & fieldname , & trigger , & url , & flags ) = = FAILURE ) {
2000-08-07 11:37:42 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
convert_to_string_ex ( fieldname ) ;
convert_to_long_ex ( trigger ) ;
convert_to_string_ex ( url ) ;
convert_to_long_ex ( flags ) ;
err = FDFSetSubmitFormAction ( fdf , Z_STRVAL_PP ( fieldname ) , Z_LVAL_PP ( trigger ) , Z_STRVAL_PP ( url ) , Z_LVAL_PP ( flags ) ) ;
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2000-08-07 11:37:42 +00:00
}
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
2000-08-07 11:37:42 +00:00
}
2001-04-06 23:17:31 +00:00
/* }}} */
2000-08-07 11:37:42 +00:00
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_set_javascript_action(resource fdfdoc, string fieldname, int whichtrigger, string script)
2001-04-07 02:48:19 +00:00
Sets the javascript action for a field */
2001-04-06 23:17:31 +00:00
PHP_FUNCTION ( fdf_set_javascript_action )
{
zval * * fdfp , * * fieldname , * * trigger , * * script ;
2000-08-21 09:23:37 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-04-06 23:17:31 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 4 | | zend_get_parameters_ex ( 4 , & fdfp , & fieldname , & trigger , & script ) = = FAILURE ) {
2000-08-21 09:23:37 +00:00
WRONG_PARAM_COUNT ;
}
2001-04-06 23:17:31 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
convert_to_string_ex ( fieldname ) ;
convert_to_long_ex ( trigger ) ;
convert_to_string_ex ( script ) ;
err = FDFSetJavaScriptAction ( fdf , Z_STRVAL_PP ( fieldname ) , Z_LVAL_PP ( trigger ) , Z_STRVAL_PP ( script ) ) ;
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2000-08-21 09:23:37 +00:00
}
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
2000-08-21 09:23:37 +00:00
}
2001-04-06 23:17:31 +00:00
/* }}} */
2000-08-21 09:23:37 +00:00
2003-02-10 00:47:45 +00:00
/* {{{ proto bool fdf_set_encoding(resource fdf_document, string encoding)
2001-07-13 16:58:09 +00:00
Sets FDF encoding ( either " Shift-JIS " or " Unicode " ) */
2001-07-28 03:57:16 +00:00
PHP_FUNCTION ( fdf_set_encoding )
{
zval * * fdfp , * * enc ;
2001-07-13 16:58:09 +00:00
FDFDoc fdf ;
FDFErc err ;
2001-07-28 03:57:16 +00:00
if ( ZEND_NUM_ARGS ( ) ! = 2 | | zend_get_parameters_ex ( 2 , & fdfp , & enc ) = = FAILURE ) {
2001-07-13 16:58:09 +00:00
WRONG_PARAM_COUNT ;
}
2001-07-28 03:57:16 +00:00
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , fdfp , - 1 , " fdf " , le_fdf ) ;
2001-07-13 16:58:09 +00:00
2001-07-28 03:57:16 +00:00
convert_to_string_ex ( enc ) ;
err = FDFSetEncoding ( fdf , Z_STRVAL_PP ( enc ) ) ;
2001-07-13 16:58:09 +00:00
if ( err ! = FDFErcOK ) {
2002-10-21 19:55:28 +00:00
FDF_FAILURE ( err ) ;
2001-07-13 16:58:09 +00:00
}
2002-10-21 19:55:28 +00:00
FDF_SUCCESS ;
2001-07-13 16:58:09 +00:00
}
/* }}} */
2001-06-05 13:12:10 +00:00
/* {{{ SAPI_POST_HANDLER_FUNC
* SAPI post handler for FDF forms */
2000-10-11 22:44:15 +00:00
SAPI_POST_HANDLER_FUNC ( fdf_post_handler )
{
FILE * fp ;
FDFDoc theFDF ;
2001-08-11 16:39:07 +00:00
char * name = NULL , * value = NULL , * p , * data ;
int name_len = 0 , value_len = 0 ;
2000-10-11 22:44:15 +00:00
char * lastfieldname = NULL ;
char * filename = NULL ;
FDFErc err ;
2001-03-18 05:52:40 +00:00
ASInt32 nBytes ;
2000-10-11 22:44:15 +00:00
zval * array_ptr = ( zval * ) arg ;
2001-08-05 01:43:02 +00:00
fp = php_open_temporary_file ( NULL , " fdfdata. " , & filename TSRMLS_CC ) ;
2000-10-11 22:44:15 +00:00
if ( ! fp ) {
if ( filename ) efree ( filename ) ;
return ;
}
2001-08-11 16:39:07 +00:00
fwrite ( SG ( request_info ) . post_data , SG ( request_info ) . post_data_length , 1 , fp ) ;
2000-10-11 22:44:15 +00:00
fclose ( fp ) ;
2001-04-05 05:38:18 +00:00
/* Set HTTP_FDF_DATA variable */
2001-08-11 16:39:07 +00:00
data = estrndup ( SG ( request_info ) . post_data , SG ( request_info ) . post_data_length ) ;
2001-04-05 05:38:18 +00:00
SET_VAR_STRINGL ( " HTTP_FDF_DATA " , data , SG ( request_info ) . post_data_length ) ;
2001-08-11 16:39:07 +00:00
err = FDFOpen ( filename , 0 , & theFDF ) ;
2000-10-11 22:44:15 +00:00
if ( err = = FDFErcOK ) {
name = emalloc ( name_len = 256 ) ;
value = emalloc ( value_len = 256 ) ;
while ( 1 ) {
2001-08-11 16:39:07 +00:00
err = FDFNextFieldName ( theFDF , lastfieldname , name , name_len - 1 , & nBytes ) ;
2000-10-11 22:44:15 +00:00
if ( err = = FDFErcBufTooShort & & nBytes > 0 ) {
2001-08-11 16:39:07 +00:00
name = erealloc ( name , name_len = ( nBytes + 1 ) ) ;
err = FDFNextFieldName ( theFDF , lastfieldname , name , name_len - 1 , & nBytes ) ;
2000-10-11 22:44:15 +00:00
}
if ( err ! = FDFErcOK | | nBytes = = 0 ) break ;
if ( lastfieldname ) efree ( lastfieldname ) ;
lastfieldname = estrdup ( name ) ;
2001-08-11 16:39:07 +00:00
err = FDFGetValue ( theFDF , name , NULL , 0 , & nBytes ) ;
2000-10-11 22:44:15 +00:00
if ( err ! = FDFErcOK & & err ! = FDFErcNoValue ) break ;
2001-08-11 16:39:07 +00:00
if ( value_len < nBytes + 1 ) value = erealloc ( value , value_len = ( nBytes + 1 ) ) ;
2000-10-11 22:44:15 +00:00
if ( nBytes > 0 ) {
2001-08-11 16:39:07 +00:00
err = FDFGetValue ( theFDF , name , value , value_len - 1 , & nBytes ) ;
2000-10-11 22:44:15 +00:00
if ( err = = FDFErcOK & & nBytes ! = 0 ) {
for ( p = value ; * p ; p + + ) if ( * p = = ' \r ' ) * p = ' \n ' ;
2001-03-18 09:25:40 +00:00
if ( lastfieldname ) efree ( lastfieldname ) ;
2000-10-11 22:44:15 +00:00
lastfieldname = estrdup ( name ) ;
2001-07-28 11:36:37 +00:00
php_register_variable ( name , value , array_ptr TSRMLS_CC ) ;
2000-10-11 22:44:15 +00:00
}
}
}
FDFClose ( theFDF ) ;
2001-04-30 12:45:02 +00:00
VCWD_UNLINK ( ( const char * ) filename ) ;
2000-10-11 22:44:15 +00:00
efree ( filename ) ;
if ( name ) efree ( name ) ;
if ( value ) efree ( value ) ;
if ( lastfieldname ) efree ( lastfieldname ) ;
}
}
2001-06-05 13:12:10 +00:00
/* }}} */
2000-10-11 22:44:15 +00:00
2003-02-10 00:47:45 +00:00
/* {{{ proto int fdf_errno(void)
2002-10-21 19:55:28 +00:00
Gets error code for last operation */
PHP_FUNCTION ( fdf_errno ) {
RETURN_LONG ( ( long ) FDF_G ( error ) ) ;
}
/* }}} */
2003-02-10 00:47:45 +00:00
/* {{{ proto string fdf_error([int errno])
2002-10-21 19:55:28 +00:00
Gets error description for error code */
PHP_FUNCTION ( fdf_error ) {
FDFErc err ;
long p_err = - 1 ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " |l " , & p_err )
= = FAILURE ) {
return ;
}
err = ( p_err > = 0 ) ? ( FDFErc ) p_err : FDF_G ( error ) ;
switch ( err ) {
case FDFErcOK :
RETURN_STRING ( " no error " , 1 ) ;
case FDFErcInternalError :
RETURN_STRING ( " An internal FDF Library error occurred " , 1 ) ;
case FDFErcBadParameter :
RETURN_STRING ( " One or more of the parameters passed were invalid. " , 1 ) ;
case FDFErcFileSysErr :
RETURN_STRING ( " A file system error occurred or the file was not found " , 1 ) ;
case FDFErcBadFDF :
RETURN_STRING ( " The FDF file being opened or parsed was invalid " , 1 ) ;
case FDFErcFieldNotFound :
RETURN_STRING ( " The field whose name was passed in the parameter fieldName does not exist in the FDF file " , 1 ) ;
case FDFErcNoValue :
RETURN_STRING ( " The field whose value was requested has no value " , 1 ) ;
case FDFErcEnumStopped :
RETURN_STRING ( " Enumeration was stopped by FDFEnumValues by returning FALSE " , 1 ) ;
case FDFErcCantInsertField :
RETURN_STRING ( " The field whose name was passed in the parameter fieldName cannot be inserted into the FDF file " , 1 ) ;
case FDFErcNoOption :
RETURN_STRING ( " The requested element in a fields /Opt key does not exist, or the field has no /Opt key. " , 1 ) ;
case FDFErcNoFlags :
RETURN_STRING ( " The field has no /F or /Ff keys " , 1 ) ;
case FDFErcBadPDF :
RETURN_STRING ( " The PDF file passed as the parameter to FDFSetAP was invalid, or did not contain the requested page " , 1 ) ;
case FDFErcBufTooShort :
RETURN_STRING ( " The buffer passed as a parameter was too short " , 1 ) ;
case FDFErcNoAP :
RETURN_STRING ( " The field has no /AP key " , 1 ) ;
case FDFErcIncompatibleFDF :
RETURN_STRING ( " An attempt to mix classic and template-based FDF files was made " , 1 ) ;
2002-10-23 01:11:06 +00:00
# ifdef HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
case FDFErcNoAppendSaves :
RETURN_STRING ( " The FDF does not include a /Difference key " , 1 ) ;
case FDFErcValueIsArray :
RETURN_STRING ( " The value of this field is an array. Use FDFGetNthValue. " , 1 ) ;
case FDFErcEmbeddedFDFs :
RETURN_STRING ( " The FDF you passed as a parameter is a container for one or more FDFs embedded within it. Use FDFOpenFromEmbedded to gain access to each embedded FDF " , 1 ) ;
case FDFErcNoMoreFDFs :
RETURN_STRING ( " Returned by FDFOpenFromEmbedded when parameter iWhich >= the number of embedded FDFs (including the case when the passed FDF does not contain any embedded FDFs) " , 1 ) ;
case FDFErcInvalidPassword :
RETURN_STRING ( " Returned by FDFOpenFromEmbedded when the embedded FDF is encrypted, and you did not provide the correct password " , 1 ) ;
2002-10-23 01:11:06 +00:00
# endif
2002-10-21 19:55:28 +00:00
case FDFErcLast :
RETURN_STRING ( " Reserved for future use " , 1 ) ;
default :
RETURN_STRING ( " unknown error " , 1 ) ;
}
}
/* }}} */
/* {{{ proto string fdf_get_version([resource fdfdoc])
Gets version number for FDF api or file */
PHP_FUNCTION ( fdf_get_version ) {
zval * r_fdf = NULL ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " |r " , & r_fdf )
= = FAILURE ) {
return ;
}
if ( r_fdf ) {
2002-10-23 01:11:06 +00:00
# if HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
const char * fdf_version ;
FDFDoc fdf ;
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
fdf_version = FDFGetFDFVersion ( fdf ) ;
RETURN_STRING ( ( char * ) fdf_version , 1 ) ;
2002-10-23 01:11:06 +00:00
# else
RETURN_STRING ( " 1.2 " , 1 ) ;
# endif
2002-10-21 19:55:28 +00:00
} else {
const char * api_version = FDFGetVersion ( ) ;
RETURN_STRING ( ( char * ) api_version , 1 ) ;
}
}
/* }}} */
2002-10-23 01:11:06 +00:00
# ifdef HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_set_version(resourece fdfdoc, string version)
Sets FDF version for a file */
PHP_FUNCTION ( fdf_set_version ) {
zval * r_fdf ;
char * version ;
int version_len ;
FDFDoc fdf ;
FDFErc err ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rs " , & r_fdf , & version , & version_len )
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
err = FDFSetFDFVersion ( fdf , version ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
FDF_SUCCESS ;
}
/* }}} */
/* {{{ proto bool fdf_add_doc_javascript(resource fdfdoc, string scriptname, string script)
Add javascript code to the fdf file */
PHP_FUNCTION ( fdf_add_doc_javascript ) {
zval * r_fdf ;
char * name , * script ;
int name_len , script_len ;
FDFDoc fdf ;
FDFErc err ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rss " , & r_fdf ,
& name , & name_len ,
& script , & script_len
)
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
err = FDFAddDocJavaScript ( fdf , name , script ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
FDF_SUCCESS ;
}
/* }}} */
2006-06-14 21:36:10 +00:00
/* {{{ proto bool fdf_set_on_import_javascript(resource fdfdoc, string script, bool before_data_import)
2002-10-21 19:55:28 +00:00
Adds javascript code to be executed when Acrobat opens the FDF */
PHP_FUNCTION ( fdf_set_on_import_javascript ) {
zval * r_fdf ;
char * script ;
int script_len ;
zend_bool before ;
FDFDoc fdf ;
FDFErc err ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rsb " , & r_fdf ,
& script , & script_len , & before
)
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
err = FDFSetOnImportJavaScript ( fdf , script , before ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
FDF_SUCCESS ;
}
/* }}} */
/* {{{ proto bool fdf_set_target_frame(resource fdfdoc, string target)
Sets target frame for form */
PHP_FUNCTION ( fdf_set_target_frame ) {
zval * r_fdf ;
char * target ;
int target_len ;
FDFDoc fdf ;
FDFErc err ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rs " , & r_fdf ,
& target , & target_len
)
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
err = FDFSetTargetFrame ( fdf , target ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
FDF_SUCCESS ;
}
/* }}} */
2002-10-23 01:11:06 +00:00
# endif
2002-10-21 19:55:28 +00:00
/* {{{ proto bool fdf_remove_item(resource fdfdoc, string fieldname, int item)
Sets target frame for form */
PHP_FUNCTION ( fdf_remove_item ) {
zval * r_fdf ;
char * fieldname ;
int fieldname_len ;
long item ;
FDFDoc fdf ;
FDFErc err ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rsl " , & r_fdf ,
2002-12-11 15:32:35 +00:00
& fieldname , & fieldname_len ,
2002-12-11 20:04:23 +00:00
& item
2002-10-21 19:55:28 +00:00
)
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
err = FDFRemoveItem ( fdf , * fieldname ? fieldname : NULL , item ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
FDF_SUCCESS ;
}
/* }}} */
2002-10-23 01:11:06 +00:00
# ifdef HAVE_FDFTK_5
2002-10-21 19:55:28 +00:00
/* {{{ proto array fdf_get_attachment(resource fdfdoc, string fieldname, string savepath)
Get attached uploaded file */
PHP_FUNCTION ( fdf_get_attachment ) {
zval * r_fdf ;
char * fieldname , * savepath ;
int fieldname_len , savepath_len ;
int is_dir = 0 ;
FDFDoc fdf ;
FDFErc err ;
char pathbuf [ MAXPATHLEN ] , mimebuf [ 1024 ] ;
struct stat statBuf ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rss " , & r_fdf ,
& fieldname , & fieldname_len ,
& savepath , & savepath_len
)
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
2004-05-16 14:38:19 +00:00
if ( php_check_open_basedir ( savepath TSRMLS_CC ) | | ( PG ( safe_mode ) & & ! php_checkuid ( savepath , " wb+ " , CHECKUID_CHECK_MODE_PARAM ) ) ) {
RETURN_FALSE ;
}
2002-10-21 19:55:28 +00:00
strncpy ( pathbuf , savepath , MAXPATHLEN - 1 ) ;
pathbuf [ MAXPATHLEN - 1 ] = ' \0 ' ;
if ( 0 = = stat ( pathbuf , & statBuf ) ) {
is_dir = S_ISDIR ( statBuf . st_mode ) ;
}
err = FDFExtractAttachment ( fdf , fieldname , pathbuf , sizeof ( pathbuf ) , is_dir , mimebuf , sizeof ( mimebuf ) ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
2003-01-18 19:49:28 +00:00
array_init ( return_value ) ;
2002-10-21 19:55:28 +00:00
add_assoc_string ( return_value , " path " , pathbuf , 1 ) ;
add_assoc_string ( return_value , " type " , mimebuf , 1 ) ;
stat ( pathbuf , & statBuf ) ;
add_assoc_long ( return_value , " size " , statBuf . st_size ) ;
}
/* }}} */
2002-10-23 01:11:06 +00:00
# endif
2002-10-21 19:55:28 +00:00
/* {{{ enum_values_callback */
2003-03-10 02:14:09 +00:00
static ASBool enum_values_callback ( char * name , char * value , void * userdata )
{
zval * retval_ptr , * z_name , * z_value , * * args [ 3 ] ;
long retval = 0 ;
int numargs = 2 ;
TSRMLS_FETCH ( ) ;
MAKE_STD_ZVAL ( z_name ) ;
ZVAL_STRING ( z_name , name , 1 ) ;
args [ 0 ] = & z_name ;
if ( * value ) { /* simple value */
MAKE_STD_ZVAL ( z_value ) ;
ZVAL_STRING ( z_value , value , 1 ) ;
args [ 1 ] = & z_value ;
} else { /* empty value *might* be an array */
/* TODO: do it like fdf_get_value (or re-implement yourself?) */
}
if ( userdata ) {
args [ 2 ] = ( zval * * ) userdata ;
numargs + + ;
}
if ( call_user_function_ex ( EG ( function_table ) ,
2002-10-21 19:55:28 +00:00
NULL ,
FDF_G ( enum_callback ) ,
& retval_ptr ,
numargs , args ,
2003-03-10 02:14:09 +00:00
0 , NULL TSRMLS_CC ) = = SUCCESS
& & retval_ptr ) {
convert_to_long_ex ( & retval_ptr ) ;
retval = Z_LVAL_P ( retval_ptr ) ;
zval_ptr_dtor ( & retval_ptr ) ;
} else {
2002-10-21 19:55:28 +00:00
php_error_docref ( NULL TSRMLS_CC , E_WARNING , " callback failed " ) ;
2003-03-10 02:14:09 +00:00
}
2002-10-21 19:55:28 +00:00
2003-03-10 02:14:09 +00:00
zval_ptr_dtor ( & z_name ) ;
zval_ptr_dtor ( & z_value ) ;
2002-10-21 19:55:28 +00:00
2003-05-09 07:55:32 +00:00
return ( ASBool ) retval ;
2003-03-10 02:14:09 +00:00
}
2002-10-21 19:55:28 +00:00
/* }}} */
2003-02-10 00:47:45 +00:00
/* {{{ proto bool fdf_enum_values(resource fdfdoc, callback function [, mixed userdata])
Call a user defined function for each document value */
2002-10-21 19:55:28 +00:00
PHP_FUNCTION ( fdf_enum_values ) {
zval * r_fdf ;
zval * callback ;
zval * userdata = NULL ;
FDFDoc fdf ;
FDFErc err ;
char * name ;
char namebuf [ 1024 ] , valbuf [ 1024 ] ;
if ( zend_parse_parameters ( ZEND_NUM_ARGS ( ) TSRMLS_CC , " rz|z " , & r_fdf ,
& callback , & userdata
)
= = FAILURE ) {
return ;
}
ZEND_FETCH_RESOURCE ( fdf , FDFDoc * , & r_fdf , - 1 , " fdf " , le_fdf ) ;
if ( ! zend_is_callable ( callback , 0 , & name ) ) {
php_error_docref1 ( NULL TSRMLS_CC , name , E_WARNING , " Second argument is expected to be a valid callback " ) ;
efree ( name ) ;
RETURN_FALSE ;
}
efree ( name ) ;
FDF_G ( enum_callback ) = callback ;
FDF_G ( enum_fdf ) = fdf ;
err = FDFEnumValues ( fdf , enum_values_callback ,
namebuf , sizeof ( namebuf ) ,
valbuf , sizeof ( valbuf ) ,
userdata ? & userdata : NULL , 0 ) ;
if ( err ! = FDFErcOK ) {
FDF_FAILURE ( err ) ;
}
FDF_SUCCESS ;
}
/* }}} */
2003-03-17 13:11:19 +00:00
/* {{{ proto void fdf_header(void)
2003-02-10 00:47:45 +00:00
Set FDF specific HTTP headers */
2002-10-21 19:55:28 +00:00
PHP_FUNCTION ( fdf_header ) {
sapi_header_line ctr = { 0 } ;
ctr . line = " Content-type: application/vnd.fdf " ;
ctr . line_len = strlen ( ctr . line ) ;
ctr . response_code = 200 ;
sapi_header_op ( SAPI_HEADER_REPLACE , & ctr TSRMLS_CC ) ;
}
/* }}} */
2001-07-13 16:58:09 +00:00
1999-04-22 00:25:57 +00:00
# endif
/*
* Local variables :
* tab - width : 4
* c - basic - offset : 4
* End :
2001-09-09 13:29:31 +00:00
* vim600 : sw = 4 ts = 4 fdm = marker
* vim < 600 : sw = 4 ts = 4
1999-04-22 00:25:57 +00:00
*/