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_grid;
36
ZEND_BEGIN_ARG_INFO_EX(grid___construct_args, 0, 1, 1)
37
ZEND_ARG_OBJ_INFO(0, layer, layerObj, 0)
40
ZEND_BEGIN_ARG_INFO_EX(grid___get_args, 0, 0, 1)
41
ZEND_ARG_INFO(0, property)
44
ZEND_BEGIN_ARG_INFO_EX(grid___set_args, 0, 0, 2)
45
ZEND_ARG_INFO(0, property)
46
ZEND_ARG_INFO(0, value)
49
/* {{{ proto void __construct(layerObj layer)
50
Create a new intance of gridObj. */
51
PHP_METHOD(gridObj, __construct)
54
php_layer_object *php_layer;
55
php_grid_object *php_grid, *php_old_grid;
58
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
59
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O",
60
&zlayer, mapscript_ce_layer) == FAILURE) {
61
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
64
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
66
php_grid = (php_grid_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
67
php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
69
php_layer->layer->connectiontype = MS_GRATICULE;
72
if (php_layer->layer->layerinfo != NULL)
73
free(php_layer->layer->layerinfo);
76
php_layer->layer->layerinfo = (graticuleObj *)malloc( sizeof( graticuleObj ) );
77
initGrid((graticuleObj *)php_layer->layer->layerinfo);
79
php_grid->grid = (graticuleObj *)php_layer->layer->layerinfo;
81
if (php_layer->grid && (Z_TYPE_P(php_layer->grid) == IS_OBJECT)) {
82
php_old_grid = (php_grid_object *) zend_object_store_get_object(php_layer->grid TSRMLS_CC);
83
php_old_grid->parent.child_ptr = NULL;
84
zend_objects_store_del_ref(php_layer->grid TSRMLS_CC);
87
MAKE_STD_ZVAL(php_layer->grid);
88
MAPSCRIPT_MAKE_PARENT(zlayer, &php_layer->grid);
89
mapscript_create_grid((graticuleObj *)(php_layer->layer->layerinfo), parent, php_layer->grid TSRMLS_CC);
91
return_value_ptr = &php_layer->grid;
95
PHP_METHOD(gridObj, __get)
99
zval *zobj = getThis();
100
php_grid_object *php_grid;
102
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
103
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
104
&property, &property_len) == FAILURE) {
105
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
108
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
110
php_grid = (php_grid_object *) zend_object_store_get_object(zobj TSRMLS_CC);
112
IF_GET_DOUBLE("minsubdivide", php_grid->grid->minsubdivides)
113
else IF_GET_DOUBLE("maxsubdivide", php_grid->grid->maxsubdivides)
114
else IF_GET_DOUBLE("minarcs", php_grid->grid->minarcs)
115
else IF_GET_DOUBLE("maxarcs", php_grid->grid->maxarcs)
116
else IF_GET_DOUBLE("mininterval", php_grid->grid->minincrement)
117
else IF_GET_DOUBLE("maxinterval", php_grid->grid->maxincrement)
118
else IF_GET_STRING("labelformat", php_grid->grid->labelformat)
121
mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property);
125
PHP_METHOD(gridObj, __set)
130
zval *zobj = getThis();
131
php_grid_object *php_grid;
133
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
134
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
135
&property, &property_len, &value) == FAILURE) {
136
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
139
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
141
php_grid = (php_grid_object *) zend_object_store_get_object(zobj TSRMLS_CC);
143
IF_SET_DOUBLE("minsubdivide", php_grid->grid->minsubdivides, value)
144
else IF_SET_DOUBLE("maxsubdivide", php_grid->grid->maxsubdivides, value)
145
else IF_SET_DOUBLE("minarcs", php_grid->grid->minarcs, value)
146
else IF_SET_DOUBLE("maxarcs", php_grid->grid->maxarcs, value)
147
else IF_SET_DOUBLE("mininterval", php_grid->grid->minincrement, value)
148
else IF_SET_DOUBLE("maxinterval", php_grid->grid->maxincrement, value)
149
else IF_SET_STRING("labelformat", php_grid->grid->labelformat, value)
152
mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property);
156
zend_function_entry grid_functions[] = {
157
PHP_ME(gridObj, __construct, grid___construct_args, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
158
PHP_ME(gridObj, __get, grid___get_args, ZEND_ACC_PUBLIC)
159
PHP_ME(gridObj, __set, grid___set_args, ZEND_ACC_PUBLIC)
160
PHP_MALIAS(gridObj, set, __set, NULL, ZEND_ACC_PUBLIC)
164
void mapscript_create_grid(graticuleObj *grid, parent_object parent, zval *return_value TSRMLS_DC)
166
php_grid_object * php_grid;
167
object_init_ex(return_value, mapscript_ce_grid);
168
php_grid = (php_grid_object *)zend_object_store_get_object(return_value TSRMLS_CC);
169
php_grid->grid = grid;
171
php_grid->parent = parent;
172
MAPSCRIPT_ADDREF(parent.val);
175
static void mapscript_grid_object_destroy(void *object TSRMLS_DC)
177
php_grid_object *php_grid = (php_grid_object *)object;
179
MAPSCRIPT_FREE_OBJECT(php_grid);
181
MAPSCRIPT_FREE_PARENT(php_grid->parent);
183
/* We don't need to free the gridObj */
188
static zend_object_value mapscript_grid_object_new(zend_class_entry *ce TSRMLS_DC)
190
zend_object_value retval;
191
php_grid_object *php_grid;
193
MAPSCRIPT_ALLOC_OBJECT(php_grid, php_grid_object);
195
retval = mapscript_object_new(&php_grid->std, ce,
196
&mapscript_grid_object_destroy TSRMLS_CC);
198
MAPSCRIPT_INIT_PARENT(php_grid->parent);
203
PHP_MINIT_FUNCTION(grid)
207
MAPSCRIPT_REGISTER_CLASS("gridObj",
210
mapscript_grid_object_new);
212
mapscript_ce_grid->ce_flags |= ZEND_ACC_FINAL_CLASS;