1
/**********************************************************************
2
* $Id: php_mapscript.c 9765 2010-01-28 15:32:10Z aboudreault $
5
* Purpose: PHP/MapScript extension for MapServer. External interface
7
* Author: Daniel Morissette, DM Solutions Group (dmorissette@dmsolutions.ca)
8
* Alan Boudreault, Mapgears
10
**********************************************************************
11
* Copyright (c) 2000-2010, Daniel Morissette, DM Solutions Group Inc.
13
* Permission is hereby granted, free of charge, to any person obtaining a
14
* copy of this software and associated documentation files (the "Software"),
15
* to deal in the Software without restriction, including without limitation
16
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
17
* and/or sell copies of the Software, and to permit persons to whom the
18
* Software is furnished to do so, subject to the following conditions:
20
* The above copyright notice and this permission notice shall be included in
21
* all copies of this Software or works derived from this Software.
23
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29
* DEALINGS IN THE SOFTWARE.
30
**********************************************************************/
32
#include "php_mapscript.h"
34
zend_class_entry *mapscript_ce_outputformat;
36
ZEND_BEGIN_ARG_INFO_EX(outputformat___get_args, 0, 0, 1)
37
ZEND_ARG_INFO(0, property)
40
ZEND_BEGIN_ARG_INFO_EX(outputformat___set_args, 0, 0, 2)
41
ZEND_ARG_INFO(0, property)
42
ZEND_ARG_INFO(0, value)
45
ZEND_BEGIN_ARG_INFO_EX(outputformat_setOption_args, 0, 0, 2)
46
ZEND_ARG_INFO(0, property)
47
ZEND_ARG_INFO(0, value)
50
ZEND_BEGIN_ARG_INFO_EX(outputformat_getOption_args, 0, 0, 1)
51
ZEND_ARG_INFO(0, property)
54
/* {{{ proto outputformat __construct()
55
outputFormatObj CANNOT be instanciated, this will throw an exception on use */
56
PHP_METHOD(outputFormatObj, __construct)
58
mapscript_throw_exception("outputFormatObj cannot be constructed" TSRMLS_CC);
62
PHP_METHOD(outputFormatObj, __get)
66
zval *zobj = getThis();
67
php_outputformat_object *php_outputformat;
69
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
70
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
71
&property, &property_len) == FAILURE) {
72
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
75
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
77
php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
80
IF_GET_STRING("name", php_outputformat->outputformat->name)
81
else IF_GET_STRING("mimetype", php_outputformat->outputformat->mimetype)
82
else IF_GET_STRING("driver", php_outputformat->outputformat->driver)
83
else IF_GET_STRING("extension", php_outputformat->outputformat->extension)
84
else IF_GET_LONG("renderer", php_outputformat->outputformat->renderer)
85
else IF_GET_LONG("imagemode", php_outputformat->outputformat->imagemode)
86
else IF_GET_LONG("transparent", php_outputformat->outputformat->transparent)
89
mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property);
93
PHP_METHOD(outputFormatObj, __set)
98
zval *zobj = getThis();
99
php_outputformat_object *php_outputformat;
101
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
102
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
103
&property, &property_len, &value) == FAILURE) {
104
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
107
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
109
php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
111
IF_SET_STRING("name", php_outputformat->outputformat->name, value)
112
else IF_SET_STRING("mimetype", php_outputformat->outputformat->mimetype, value)
113
else IF_SET_STRING("driver", php_outputformat->outputformat->driver, value)
114
else IF_SET_STRING("extension", php_outputformat->outputformat->extension, value)
115
else IF_SET_LONG("renderer", php_outputformat->outputformat->renderer, value)
116
else IF_SET_LONG("imagemode", php_outputformat->outputformat->imagemode, value)
117
else IF_SET_LONG("transparent", php_outputformat->outputformat->transparent, value)
120
mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property);
124
/* {{{ proto int outputFormat.setOption(string property_name, new_value)
125
Add or Modify the format option list. return true on success.*/
126
PHP_METHOD(outputFormatObj, setOption)
132
zval *zobj = getThis();
133
php_outputformat_object *php_outputformat;
135
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
136
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
137
&property, &property_len, &value, &value_len) == FAILURE) {
138
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
141
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
143
php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
145
msSetOutputFormatOption(php_outputformat->outputformat, property, value);
147
RETURN_LONG(MS_SUCCESS);
151
/* {{{ proto string outputFormat.getOption(string property_name)
152
Returns the associated value for the format option property passed as
153
argument. Returns an empty string if property not found.*/
154
PHP_METHOD(outputFormatObj, getOption)
158
zval *zobj = getThis();
159
const char *value = NULL;
160
php_outputformat_object *php_outputformat;
162
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
163
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
164
&property, &property_len) == FAILURE) {
165
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
168
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
170
php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
172
value = msGetOutputFormatOption(php_outputformat->outputformat, property, "");
174
RETURN_STRING((char*)value,1);
178
/* {{{ proto int outputFormat.validate()
179
Checks some internal consistency issues, and returns MS_SUCCESS if things
180
are OK and MS_FAILURE if there are problems. Some problems are fixed up
181
internally. May produce debug output if issues encountered.*/
182
PHP_METHOD(outputFormatObj, validate)
184
zval *zobj = getThis();
185
int status = MS_FALSE;
186
php_outputformat_object *php_outputformat;
188
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
189
if (zend_parse_parameters_none() == FAILURE) {
190
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
193
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
195
php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
197
status = msOutputFormatValidate(php_outputformat->outputformat, MS_TRUE);
198
if (status != MS_TRUE)
200
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
201
RETURN_LONG(MS_FAILURE);
204
RETURN_LONG(MS_SUCCESS);
208
zend_function_entry outputformat_functions[] = {
209
PHP_ME(outputFormatObj, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
210
PHP_ME(outputFormatObj, __get, outputformat___get_args, ZEND_ACC_PUBLIC)
211
PHP_ME(outputFormatObj, __set, outputformat___set_args, ZEND_ACC_PUBLIC)
212
PHP_MALIAS(outputFormatObj, set, __set, NULL, ZEND_ACC_PUBLIC)
213
PHP_ME(outputFormatObj, setOption, outputformat_setOption_args, ZEND_ACC_PUBLIC)
214
PHP_ME(outputFormatObj, getOption, outputformat_getOption_args, ZEND_ACC_PUBLIC)
215
PHP_ME(outputFormatObj, validate, NULL, ZEND_ACC_PUBLIC)
219
void mapscript_create_outputformat(outputFormatObj *outputformat, parent_object parent, zval *return_value TSRMLS_DC)
221
php_outputformat_object * php_outputformat;
222
object_init_ex(return_value, mapscript_ce_outputformat);
223
php_outputformat = (php_outputformat_object *)zend_object_store_get_object(return_value TSRMLS_CC);
224
php_outputformat->outputformat = outputformat;
226
php_outputformat->parent = parent;
227
MAPSCRIPT_ADDREF(parent.val);
230
static void mapscript_outputformat_object_destroy(void *object TSRMLS_DC)
232
php_outputformat_object *php_outputformat = (php_outputformat_object *)object;
234
MAPSCRIPT_FREE_OBJECT(php_outputformat);
236
MAPSCRIPT_FREE_PARENT(php_outputformat->parent);
238
/* We don't need to free the outputFormatObj */
243
static zend_object_value mapscript_outputformat_object_new(zend_class_entry *ce TSRMLS_DC)
245
zend_object_value retval;
246
php_outputformat_object *php_outputformat;
248
MAPSCRIPT_ALLOC_OBJECT(php_outputformat, php_outputformat_object);
250
retval = mapscript_object_new(&php_outputformat->std, ce,
251
&mapscript_outputformat_object_destroy TSRMLS_CC);
253
MAPSCRIPT_INIT_PARENT(php_outputformat->parent);
258
PHP_MINIT_FUNCTION(outputformat)
262
MAPSCRIPT_REGISTER_CLASS("outputFormatObj",
263
outputformat_functions,
264
mapscript_ce_outputformat,
265
mapscript_outputformat_object_new);
267
mapscript_ce_outputformat->ce_flags |= ZEND_ACC_FINAL_CLASS;