~ubuntu-branches/ubuntu/saucy/mapserver/saucy-security

« back to all changes in this revision

Viewing changes to mapscript/php/grid.c

  • Committer: Package Import Robot
  • Author(s): Francesco Paolo Lovergine
  • Date: 2011-12-23 14:02:06 UTC
  • mfrom: (26.1.2 sid)
  • Revision ID: package-import@ubuntu.com-20111223140206-n3h9t2hsa8hyslmu
Tags: 6.0.1-2
Added missed stuff for libmapscript-perl.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**********************************************************************
 
2
 * $Id: php_mapscript.c 9765 2010-01-28 15:32:10Z aboudreault $
 
3
 *
 
4
 * Project:  MapServer
 
5
 * Purpose:  PHP/MapScript extension for MapServer.  External interface 
 
6
 *           functions
 
7
 * Author:   Daniel Morissette, DM Solutions Group (dmorissette@dmsolutions.ca)
 
8
 *           Alan Boudreault, Mapgears
 
9
 *
 
10
 **********************************************************************
 
11
 * Copyright (c) 2000-2010, Daniel Morissette, DM Solutions Group Inc.
 
12
 *
 
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:
 
19
 * 
 
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.
 
22
 * 
 
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
 **********************************************************************/
 
31
 
 
32
#include "php_mapscript.h"
 
33
 
 
34
zend_class_entry *mapscript_ce_grid;
 
35
 
 
36
ZEND_BEGIN_ARG_INFO_EX(grid___construct_args, 0, 1, 1)
 
37
  ZEND_ARG_OBJ_INFO(0, layer, layerObj, 0)
 
38
ZEND_END_ARG_INFO()
 
39
 
 
40
ZEND_BEGIN_ARG_INFO_EX(grid___get_args, 0, 0, 1)
 
41
  ZEND_ARG_INFO(0, property)
 
42
ZEND_END_ARG_INFO()
 
43
 
 
44
ZEND_BEGIN_ARG_INFO_EX(grid___set_args, 0, 0, 2)
 
45
  ZEND_ARG_INFO(0, property)
 
46
  ZEND_ARG_INFO(0, value)
 
47
ZEND_END_ARG_INFO()
 
48
 
 
49
/* {{{ proto void __construct(layerObj layer)
 
50
   Create a new intance of gridObj. */
 
51
PHP_METHOD(gridObj, __construct)
 
52
{
 
53
    zval *zlayer;
 
54
    php_layer_object *php_layer;
 
55
    php_grid_object *php_grid, *php_old_grid;
 
56
    parent_object parent;
 
57
 
 
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);
 
62
        return;
 
63
    }
 
64
    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
 
65
    
 
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);
 
68
 
 
69
    php_layer->layer->connectiontype = MS_GRATICULE;
 
70
 
 
71
 
 
72
    if (php_layer->layer->layerinfo != NULL)
 
73
        free(php_layer->layer->layerinfo);
 
74
 
 
75
 
 
76
    php_layer->layer->layerinfo = (graticuleObj *)malloc( sizeof( graticuleObj ) );
 
77
    initGrid((graticuleObj *)php_layer->layer->layerinfo);
 
78
 
 
79
    php_grid->grid = (graticuleObj *)php_layer->layer->layerinfo;
 
80
 
 
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);
 
85
    }
 
86
 
 
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);
 
90
    
 
91
    return_value_ptr = &php_layer->grid;
 
92
}
 
93
/* }}} */
 
94
 
 
95
PHP_METHOD(gridObj, __get)
 
96
{
 
97
    char *property;
 
98
    long property_len;
 
99
    zval *zobj = getThis();
 
100
    php_grid_object *php_grid;
 
101
 
 
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);
 
106
        return;
 
107
    }
 
108
    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
 
109
    
 
110
    php_grid = (php_grid_object *) zend_object_store_get_object(zobj TSRMLS_CC);
 
111
 
 
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)
 
119
    else 
 
120
    {
 
121
        mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property);
 
122
    }
 
123
}
 
124
 
 
125
PHP_METHOD(gridObj, __set)
 
126
{
 
127
    char *property;
 
128
    long property_len;
 
129
    zval *value;
 
130
    zval *zobj = getThis();
 
131
    php_grid_object *php_grid;
 
132
 
 
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);
 
137
        return;
 
138
    }
 
139
    PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
 
140
    
 
141
    php_grid = (php_grid_object *) zend_object_store_get_object(zobj TSRMLS_CC);
 
142
 
 
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)
 
150
    else 
 
151
    {
 
152
        mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property);
 
153
    }
 
154
}
 
155
 
 
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)
 
161
    {NULL, NULL, NULL}
 
162
};
 
163
 
 
164
void mapscript_create_grid(graticuleObj *grid, parent_object parent, zval *return_value TSRMLS_DC)
 
165
{
 
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;
 
170
 
 
171
    php_grid->parent = parent;
 
172
    MAPSCRIPT_ADDREF(parent.val);
 
173
}
 
174
 
 
175
static void mapscript_grid_object_destroy(void *object TSRMLS_DC)
 
176
{
 
177
    php_grid_object *php_grid = (php_grid_object *)object;
 
178
 
 
179
    MAPSCRIPT_FREE_OBJECT(php_grid);
 
180
 
 
181
    MAPSCRIPT_FREE_PARENT(php_grid->parent);
 
182
 
 
183
    /* We don't need to free the gridObj */ 
 
184
 
 
185
    efree(object);
 
186
}
 
187
 
 
188
static zend_object_value mapscript_grid_object_new(zend_class_entry *ce TSRMLS_DC)
 
189
{
 
190
    zend_object_value retval;
 
191
    php_grid_object *php_grid;
 
192
 
 
193
    MAPSCRIPT_ALLOC_OBJECT(php_grid, php_grid_object);
 
194
 
 
195
    retval = mapscript_object_new(&php_grid->std, ce,
 
196
                                  &mapscript_grid_object_destroy TSRMLS_CC);
 
197
 
 
198
    MAPSCRIPT_INIT_PARENT(php_grid->parent);
 
199
 
 
200
    return retval;
 
201
}
 
202
 
 
203
PHP_MINIT_FUNCTION(grid)
 
204
{
 
205
    zend_class_entry ce;
 
206
 
 
207
    MAPSCRIPT_REGISTER_CLASS("gridObj", 
 
208
                             grid_functions,
 
209
                             mapscript_ce_grid,
 
210
                             mapscript_grid_object_new);
 
211
 
 
212
    mapscript_ce_grid->ce_flags |= ZEND_ACC_FINAL_CLASS; 
 
213
    
 
214
    return SUCCESS;
 
215
}