1
0
forked from pool/mapserver
mapserver/5461.patch

8837 lines
312 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 9dbfe1b23d9c9529c9c980bd3de79dbf2033f388 Mon Sep 17 00:00:00 2001
From: bjoernboldt <mapscript@pixaweb.net>
Date: Mon, 3 Jul 2017 09:32:20 +0200
Subject: [PATCH 1/5] Add PHP7.x-support
---
mapscript/php/class.c | 184 +++++++++++-----
mapscript/php/cluster.c | 81 +++++--
mapscript/php/color.c | 68 +++++-
mapscript/php/error.c | 96 ++++++--
mapscript/php/grid.c | 82 ++++++-
mapscript/php/hashtable.c | 73 ++++++-
mapscript/php/image.c | 67 +++++-
mapscript/php/label.c | 141 +++++++++---
mapscript/php/labelcache.c | 56 ++++-
mapscript/php/labelcachemember.c | 104 +++++++--
mapscript/php/labelleader.c | 58 ++++-
mapscript/php/layer.c | 438 ++++++++++++++++++++++++-------------
mapscript/php/legend.c | 76 ++++++-
mapscript/php/line.c | 101 +++++++--
mapscript/php/map.c | 378 +++++++++++++++++++++-----------
mapscript/php/mapscript_error.c | 13 ++
mapscript/php/outputformat.c | 81 ++++++-
mapscript/php/owsrequest.c | 174 ++++++++++++---
mapscript/php/php_mapscript.c | 80 +++++--
mapscript/php/php_mapscript.h | 326 ++++++++++++++++++++++++++-
mapscript/php/php_mapscript_util.c | 77 ++++---
mapscript/php/php_mapscript_util.h | 89 +++++++-
mapscript/php/point.c | 121 ++++++++--
mapscript/php/projection.c | 83 ++++++-
mapscript/php/querymap.c | 73 ++++++-
mapscript/php/rect.c | 108 +++++++--
mapscript/php/referencemap.c | 75 ++++++-
mapscript/php/result.c | 59 ++++-
mapscript/php/scalebar.c | 81 ++++++-
mapscript/php/shape.c | 199 +++++++++++------
mapscript/php/shapefile.c | 79 +++++--
mapscript/php/style.c | 158 +++++++++----
mapscript/php/symbol.c | 92 ++++++--
mapscript/php/web.c | 75 ++++++-
34 files changed, 3259 insertions(+), 787 deletions(-)
diff --git a/mapscript/php/class.c b/mapscript/php/class.c
index 48f2f812a..a256ac9bd 100644
--- a/mapscript/php/class.c
+++ b/mapscript/php/class.c
@@ -143,10 +143,10 @@ PHP_METHOD(classObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
if (zclass)
- php_class2 = (php_class_object *) zend_object_store_get_object(zclass TSRMLS_CC);
+ php_class2 = MAPSCRIPT_OBJ_P(php_class_object, zclass);
if ((class = classObj_new(php_layer->layer, (zclass ? php_class2->class:NULL))) == NULL) {
@@ -177,7 +177,7 @@ PHP_METHOD(classObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
IF_GET_STRING("name", php_class->class->name)
else IF_GET_STRING("title", php_class->class->title)
@@ -213,7 +213,7 @@ PHP_METHOD(classObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
/* special case for "template" which we want to set to NULL and not an empty string */
if(Z_TYPE_P(value)==IS_NULL && !strcmp(property,"template")) {
@@ -258,8 +258,8 @@ PHP_METHOD(classObj, addLabel)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_label = (php_label_object *) zend_object_store_get_object(zlabel TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zlabel);
status = classObj_addLabel(php_class->class, php_label->label);
php_label->is_ref = 1;
@@ -287,7 +287,7 @@ PHP_METHOD(classObj, removeLabel)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
if ((label = classObj_removeLabel(php_class->class, index)) == NULL) {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
@@ -318,7 +318,7 @@ PHP_METHOD(classObj, getLabel)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
if ((label = classObj_getLabel(php_class->class, index)) == NULL) {
mapscript_throw_exception("Invalid label index." TSRMLS_CC);
@@ -349,7 +349,7 @@ PHP_METHOD(classObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
status = classObj_updateFromString(php_class->class, snippet);
@@ -378,14 +378,14 @@ PHP_METHOD(classObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
value = classObj_convertToString(php_class->class);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -408,7 +408,7 @@ PHP_METHOD(classObj, setExpression)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
status = classObj_setExpression(php_class->class, expression);
@@ -437,14 +437,14 @@ PHP_METHOD(classObj, getExpressionString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
value = classObj_getExpressionString(php_class->class);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -468,8 +468,8 @@ PHP_METHOD(classObj, setText)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(php_class->parent.val TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class->parent.val);
status = classObj_setText(php_class->class, php_layer->layer, text);
@@ -498,14 +498,14 @@ PHP_METHOD(classObj, getTextString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
value = classObj_getTextString(php_class->class);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -528,7 +528,7 @@ PHP_METHOD(classObj, getStyle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
if (index < 0 || index >= php_class->class->numstyles) {
mapscript_throw_exception("Invalid style index." TSRMLS_CC);
@@ -560,8 +560,8 @@ PHP_METHOD(classObj, insertStyle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_style = (php_style_object *) zend_object_store_get_object(zstyle TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zstyle);
RETURN_LONG(msInsertStyle(php_class->class, php_style->style, index));
}
@@ -585,7 +585,7 @@ PHP_METHOD(classObj, removeStyle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
style = msRemoveStyle(php_class->class, index);
@@ -615,7 +615,7 @@ PHP_METHOD(classObj, moveStyleUp)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
status = classObj_moveStyleUp(php_class->class, index);
@@ -643,7 +643,7 @@ PHP_METHOD(classObj, moveStyleDown)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
status = classObj_moveStyleDown(php_class->class, index);
@@ -669,7 +669,7 @@ PHP_METHOD(classObj, deleteStyle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
status = classObj_deleteStyle(php_class->class, index);
@@ -684,7 +684,7 @@ PHP_METHOD(classObj, getMetaData)
zval *zname;
zval *zobj = getThis();
php_class_object *php_class;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z",
@@ -694,12 +694,15 @@ PHP_METHOD(classObj, getMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata);
-
MAPSCRIPT_CALL_METHOD_1(php_class->metadata, "get", retval, zname);
+#if PHP_VERSION_ID < 70000
RETURN_STRING(Z_STRVAL_P(retval),1);
+#else
+ RETURN_STRING(Z_STRVAL(retval));
+#endif
}
/* }}} */
@@ -710,7 +713,7 @@ PHP_METHOD(classObj, setMetaData)
zval *zname, *zvalue;
zval *zobj = getThis();
php_class_object *php_class;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz",
@@ -720,12 +723,16 @@ PHP_METHOD(classObj, setMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata);
MAPSCRIPT_CALL_METHOD_2(php_class->metadata, "set", retval, zname, zvalue);
+#if PHP_VERSION_ID < 70000
RETURN_LONG(Z_LVAL_P(retval));
+#else
+ RETURN_LONG(Z_LVAL(retval));
+#endif
}
/* }}} */
@@ -736,7 +743,7 @@ PHP_METHOD(classObj, removeMetaData)
zval *zname;
zval *zobj = getThis();
php_class_object *php_class;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z",
@@ -746,12 +753,16 @@ PHP_METHOD(classObj, removeMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata);
MAPSCRIPT_CALL_METHOD_1(php_class->metadata, "remove", retval, zname);
+#if PHP_VERSION_ID < 70000
RETURN_LONG(Z_LVAL_P(retval));
+#else
+ RETURN_LONG(Z_LVAL(retval));
+#endif
}
/* }}} */
@@ -774,15 +785,15 @@ PHP_METHOD(classObj, createLegendIcon)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(php_class->parent.val TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class->parent.val);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this class object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((image = classObj_createLegendIcon(php_class->class,
php_map->map,
@@ -820,17 +831,17 @@ PHP_METHOD(classObj, drawLegendIcon)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(php_class->parent.val TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class->parent.val);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this class object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if (!MS_RENDERER_PLUGIN(php_image->image->format)) {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
@@ -865,7 +876,7 @@ PHP_METHOD(classObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj);
MAPSCRIPT_DELREF(php_class->metadata);
}
@@ -905,13 +916,87 @@ void mapscript_create_class(classObj *class, parent_object parent, zval *return_
{
php_class_object * php_class;
object_init_ex(return_value, mapscript_ce_class);
- php_class = (php_class_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, return_value);
php_class->class = class;
php_class->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_class_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_class_object *php_class;
+
+ php_class = ecalloc(1, sizeof(*php_class) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_class->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_class->zobj, ce);
+
+ php_class->zobj.handlers = &mapscript_class_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_class->parent);
+ ZVAL_UNDEF(&php_class->metadata);
+ ZVAL_UNDEF(&php_class->leader);
+
+ return &php_class->zobj;
+}
+
+static void mapscript_class_free_object(zend_object *object)
+{
+ php_class_object *php_class;
+
+ php_class = (php_class_object *)((char *)object - XtOffsetOf(php_class_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_class->parent);
+
+ MAPSCRIPT_DELREF(php_class->metadata);
+ MAPSCRIPT_DELREF(php_class->leader);
+
+ /* We don't need to free the classObj */
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_class_clone_object(zval *zobj)
+{
+ php_class_object *php_class_old, *php_class_new;
+ php_layer_object *php_layer;
+ zend_object* zobj_new;
+
+ php_class_old = MAPSCRIPT_OBJ_P(php_class_object, zobj);
+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class_old->parent.val);
+
+ zobj_new = mapscript_class_create_object(mapscript_ce_class);
+ php_class_new = (php_class_object *)((char *)zobj_new - XtOffsetOf(php_class_object, zobj));
+
+ zend_objects_clone_members(&php_class_new->zobj, &php_class_old->zobj);
+
+ php_class_new->class = classObj_clone(php_class_old->class, php_layer->layer);
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(class)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "classObj", class_functions);
+ mapscript_ce_class = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_class->create_object = mapscript_class_create_object;
+ mapscript_ce_class->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_class_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_class_object_handlers));
+ mapscript_class_object_handlers.free_obj = mapscript_class_free_object;
+ mapscript_class_object_handlers.clone_obj = mapscript_class_clone_object;
+ mapscript_class_object_handlers.offset = XtOffsetOf(php_class_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_class_object_destroy(void *object TSRMLS_DC)
{
php_class_object *php_class = (php_class_object *)object;
@@ -961,8 +1046,8 @@ static zend_object_value mapscript_class_object_clone(zval *zobj TSRMLS_DC)
php_layer_object *php_layer;
zend_object_value new_ov;
- php_class_old = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(php_class_old->parent.val TSRMLS_CC);
+ php_class_old = MAPSCRIPT_OBJ_P(php_class_object, zobj);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, php_class_old->parent.val);
new_ov = mapscript_class_object_new_ex(mapscript_ce_class, &php_class_new TSRMLS_CC);
zend_objects_clone_members(&php_class_new->std, new_ov, &php_class_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC);
@@ -988,3 +1073,4 @@ PHP_MINIT_FUNCTION(class)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/cluster.c b/mapscript/php/cluster.c
index 1031c020a..48dce8ae4 100644
--- a/mapscript/php/cluster.c
+++ b/mapscript/php/cluster.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_cluster;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_cluster_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(cluster___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -78,7 +81,7 @@ PHP_METHOD(clusterObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj);
IF_GET_DOUBLE("maxdistance", php_cluster->cluster->maxdistance)
else IF_GET_DOUBLE("buffer", php_cluster->cluster->buffer)
@@ -104,7 +107,7 @@ PHP_METHOD(clusterObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj);
IF_SET_DOUBLE("maxdistance", php_cluster->cluster->maxdistance, value)
else IF_SET_DOUBLE("buffer", php_cluster->cluster->buffer, value)
@@ -132,7 +135,7 @@ PHP_METHOD(clusterObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj);
status = clusterObj_updateFromString(php_cluster->cluster, snippet);
@@ -161,14 +164,14 @@ PHP_METHOD(clusterObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj);
value = clusterObj_convertToString(php_cluster->cluster);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -191,7 +194,7 @@ PHP_METHOD(clusterObj, setGroup)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj);
if ((status = clusterObj_setGroup(php_cluster->cluster, group)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -217,14 +220,14 @@ PHP_METHOD(clusterObj, getGroupString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj);
value = clusterObj_getGroupString(php_cluster->cluster);
if (value == NULL) {
RETURN_NULL();
}
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -247,7 +250,7 @@ PHP_METHOD(clusterObj, setFilter)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj);
if ((status = clusterObj_setFilter(php_cluster->cluster, filter)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -273,14 +276,14 @@ PHP_METHOD(clusterObj, getFilterString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj);
value = clusterObj_getFilterString(php_cluster->cluster);
if (value == NULL) {
RETURN_NULL();
}
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -304,16 +307,65 @@ void mapscript_create_cluster(clusterObj *cluster, parent_object parent, zval *r
{
php_cluster_object * php_cluster;
object_init_ex(return_value, mapscript_ce_cluster);
- php_cluster = (php_cluster_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, return_value);
php_cluster->cluster = cluster;
- if (parent.val)
+ if (ZVAL_NOT_UNDEF(parent.val))
php_cluster->is_ref = 1;
php_cluster->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_cluster_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_cluster_object *php_cluster;
+
+ php_cluster = ecalloc(1, sizeof(*php_cluster) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_cluster->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_cluster->zobj, ce);
+
+ php_cluster->zobj.handlers = &mapscript_cluster_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_cluster->parent);
+
+ return &php_cluster->zobj;
+}
+
+static void mapscript_cluster_free_object(zend_object *object)
+{
+ php_cluster_object *php_cluster;
+
+ php_cluster = (php_cluster_object *)((char *)object - XtOffsetOf(php_cluster_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_cluster->parent);
+
+ /* We don't need to free the clusterObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(cluster)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "clusterObj", cluster_functions);
+ mapscript_ce_cluster = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_cluster->create_object = mapscript_cluster_create_object;
+ mapscript_ce_cluster->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_cluster_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_cluster_object_handlers));
+ mapscript_cluster_object_handlers.free_obj = mapscript_cluster_free_object;
+ mapscript_cluster_object_handlers.offset = XtOffsetOf(php_cluster_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_cluster_object_destroy(void *object TSRMLS_DC)
{
php_cluster_object *php_cluster = (php_cluster_object *)object;
@@ -356,3 +408,4 @@ PHP_MINIT_FUNCTION(cluster)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/color.c b/mapscript/php/color.c
index bc86f3b35..559ef5eb0 100644
--- a/mapscript/php/color.c
+++ b/mapscript/php/color.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_color;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_color_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(color___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -79,7 +82,7 @@ PHP_METHOD(colorObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj);
IF_GET_LONG("red", php_color->color->red)
else IF_GET_LONG("green", php_color->color->green)
@@ -106,7 +109,7 @@ PHP_METHOD(colorObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj);
IF_SET_COLOR("red", php_color->color->red, value)
else IF_SET_COLOR("green", php_color->color->green, value)
@@ -134,7 +137,7 @@ PHP_METHOD(colorObj, setRGB)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj);
MS_INIT_COLOR(*(php_color->color), red, green, blue, alpha);
@@ -173,7 +176,7 @@ PHP_METHOD(colorObj, setHex)
RETURN_LONG(MS_FAILURE);
}
- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj);
MS_INIT_COLOR(*(php_color->color), red, green, blue, alpha);
@@ -194,7 +197,7 @@ PHP_METHOD(colorObj, toHex)
php_color_object *php_color;
colorObj *color;
- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj);
color = php_color->color;
if (color->red < 0 || color->green < 0 || color->blue < 0) {
@@ -215,7 +218,7 @@ PHP_METHOD(colorObj, toHex)
return;
}
- RETURN_STRINGL(hex, strlen(hex), 0);
+ MAPSCRIPT_RETURN_STRINGL(hex, strlen(hex), 0);
}
/* }}} */
@@ -235,7 +238,7 @@ void mapscript_create_color(colorObj *color, parent_object parent, zval *return_
{
php_color_object * php_color;
object_init_ex(return_value, mapscript_ce_color);
- php_color = (php_color_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_color = MAPSCRIPT_OBJ_P(php_color_object, return_value);
php_color->color = color;
php_color->parent = parent;
@@ -243,6 +246,55 @@ void mapscript_create_color(colorObj *color, parent_object parent, zval *return_
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_color_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_color_object *php_color;
+
+ php_color = ecalloc(1, sizeof(*php_color) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_color->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_color->zobj, ce);
+
+ php_color->zobj.handlers = &mapscript_color_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_color->parent);
+
+ return &php_color->zobj;
+}
+
+static void mapscript_color_free_object(zend_object *object)
+{
+ php_color_object *php_color;
+
+ php_color = (php_color_object *)((char *)object - XtOffsetOf(php_color_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_color->parent);
+
+ /* We don't need to free the colorObj, the mapObj will do it */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(color)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "colorObj", color_functions);
+ mapscript_ce_color = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_color->create_object = mapscript_color_create_object;
+ mapscript_ce_color->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_color_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_color_object_handlers));
+ mapscript_color_object_handlers.free_obj = mapscript_color_free_object;
+ mapscript_color_object_handlers.offset = XtOffsetOf(php_color_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_color_object_destroy(void *object TSRMLS_DC)
{
php_color_object *php_color = (php_color_object *)object;
@@ -284,4 +336,4 @@ PHP_MINIT_FUNCTION(color)
return SUCCESS;
}
-
+#endif
diff --git a/mapscript/php/error.c b/mapscript/php/error.c
index 2e96eea27..881295ef4 100644
--- a/mapscript/php/error.c
+++ b/mapscript/php/error.c
@@ -31,7 +31,7 @@
#include "php_mapscript.h"
-#if PHP_VERSION_ID >= 50625
+#if PHP_VERSION_ID >= 50625 && PHP_VERSION_ID < 70000
#undef ZVAL_STRING
#define ZVAL_STRING(z, s, duplicate) do { \
const char *__s=(s); \
@@ -43,6 +43,9 @@
#endif
zend_class_entry *mapscript_ce_error;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_error_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(error___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -66,7 +69,8 @@ PHP_METHOD(errorObj, __get)
char *property;
long property_len = 0;
zval *zobj = getThis();
- php_error_object *php_error;
+ /* php_error is in PHP7 defined in php.h, so we use php_errobj instead */
+ php_error_object *php_errobj;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
@@ -76,12 +80,12 @@ PHP_METHOD(errorObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_error = (php_error_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_errobj = MAPSCRIPT_OBJ_P(php_error_object, zobj);
- IF_GET_LONG("code", php_error->error->code)
- else IF_GET_STRING("routine", php_error->error->routine)
- else IF_GET_STRING("message", php_error->error->message)
- else IF_GET_LONG("isreported", php_error->error->isreported)
+ IF_GET_LONG("code", php_errobj->error->code)
+ else IF_GET_STRING("routine", php_errobj->error->routine)
+ else IF_GET_STRING("message", php_errobj->error->message)
+ else IF_GET_LONG("isreported", php_errobj->error->isreported)
else {
mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property);
}
@@ -92,8 +96,8 @@ PHP_METHOD(errorObj, __set)
char *property;
long property_len = 0;
zval *value;
- zval *zobj = getThis();
- php_error_object *php_error;
+ /* zval *zobj = getThis(); */
+ /* php_error_object *php_errobj; */
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
@@ -103,7 +107,7 @@ PHP_METHOD(errorObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_error = (php_error_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ /* php_errobj = MAPSCRIPT_OBJ_P(php_error_object, zobj); */
if ( (STRING_EQUAL("code", property)) ||
(STRING_EQUAL("routine", property)) ||
@@ -120,7 +124,7 @@ PHP_METHOD(errorObj, __set)
PHP_METHOD(errorObj, next)
{
zval *zobj = getThis();
- php_error_object *php_error;
+ php_error_object *php_errobj;
errorObj *error = NULL;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
@@ -130,15 +134,15 @@ PHP_METHOD(errorObj, next)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_error = (php_error_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_errobj = MAPSCRIPT_OBJ_P(php_error_object, zobj);
- if (php_error->error->next == NULL)
+ if (php_errobj->error->next == NULL)
RETURN_NULL();
/* Make sure 'self' is still valid. It may have been deleted by
* msResetErrorList() */
error = msGetErrorObj();
- while(error != php_error->error) {
+ while(error != php_errobj->error) {
if (error->next == NULL) {
mapscript_throw_exception("Trying to access an errorObj that has expired." TSRMLS_CC);
return;
@@ -146,7 +150,7 @@ PHP_METHOD(errorObj, next)
error = error->next;
}
- php_error->error = php_error->error->next;
+ php_errobj->error = php_errobj->error->next;
*return_value = *zobj;
zval_copy_ctor(return_value);
INIT_PZVAL(return_value);
@@ -164,17 +168,62 @@ zend_function_entry error_functions[] = {
void mapscript_create_error(errorObj *error, zval *return_value TSRMLS_DC)
{
- php_error_object * php_error;
+ php_error_object * php_errobj;
object_init_ex(return_value, mapscript_ce_error);
- php_error = (php_error_object *)zend_object_store_get_object(return_value TSRMLS_CC);
- php_error->error = error;
+ php_errobj = MAPSCRIPT_OBJ_P(php_error_object, return_value);
+ php_errobj->error = error;
+}
+
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_error_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_error_object *php_errobj;
+
+ php_errobj = ecalloc(1, sizeof(*php_errobj) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_errobj->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_errobj->zobj, ce);
+
+ php_errobj->zobj.handlers = &mapscript_error_object_handlers;
+
+ return &php_errobj->zobj;
}
+/*
+static void mapscript_error_free_object(zend_object *object)
+{
+ php_error_object *php_errobj;
+
+ php_errobj = (php_error_object *)((char *)object - XtOffsetOf(php_error_object, zobj));
+
+ zend_object_std_dtor(object);
+}
+*/
+
+PHP_MINIT_FUNCTION(error)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "errorObj", error_functions);
+ mapscript_ce_error = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_error->create_object = mapscript_error_create_object;
+ mapscript_ce_error->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_error_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_error_object_handlers));
+ /* mapscript_error_object_handlers.free_obj = mapscript_error_free_object; // nothing to do here -> use standard handler */
+ mapscript_error_object_handlers.offset = XtOffsetOf(php_error_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_error_object_destroy(void *object TSRMLS_DC)
{
- php_error_object *php_error = (php_error_object *)object;
+ php_error_object *php_errobj = (php_error_object *)object;
- MAPSCRIPT_FREE_OBJECT(php_error);
+ MAPSCRIPT_FREE_OBJECT(php_errobj);
/* We don't need to free the errorObj */
@@ -184,11 +233,11 @@ static void mapscript_error_object_destroy(void *object TSRMLS_DC)
static zend_object_value mapscript_error_object_new(zend_class_entry *ce TSRMLS_DC)
{
zend_object_value retval;
- php_error_object *php_error;
+ php_error_object *php_errobj;
- MAPSCRIPT_ALLOC_OBJECT(php_error, php_error_object);
+ MAPSCRIPT_ALLOC_OBJECT(php_errobj, php_error_object);
- retval = mapscript_object_new(&php_error->std, ce,
+ retval = mapscript_object_new(&php_errobj->std, ce,
&mapscript_error_object_destroy TSRMLS_CC);
return retval;
@@ -207,3 +256,4 @@ PHP_MINIT_FUNCTION(error)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/grid.c b/mapscript/php/grid.c
index 977b7600d..c13f54bc3 100644
--- a/mapscript/php/grid.c
+++ b/mapscript/php/grid.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_grid;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_grid_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(grid___construct_args, 0, 1, 1)
ZEND_ARG_OBJ_INFO(0, layer, layerObj, 0)
@@ -63,8 +66,8 @@ PHP_METHOD(gridObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_grid = (php_grid_object *) zend_object_store_get_object(getThis() TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, getThis());
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
php_layer->layer->connectiontype = MS_GRATICULE;
@@ -78,17 +81,30 @@ PHP_METHOD(gridObj, __construct)
php_grid->grid = (graticuleObj *)php_layer->layer->layerinfo;
- if (php_layer->grid && (Z_TYPE_P(php_layer->grid) == IS_OBJECT)) {
- php_old_grid = (php_grid_object *) zend_object_store_get_object(php_layer->grid TSRMLS_CC);
+ if (ZVAL_NOT_UNDEF(php_layer->grid) && (MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT)) {
+ php_old_grid = MAPSCRIPT_OBJ(php_grid_object, php_layer->grid);
php_old_grid->parent.child_ptr = NULL;
+#if PHP_VERSION_ID < 70000
zend_objects_store_del_ref(php_layer->grid TSRMLS_CC);
+#else
+/*
+ Z_SET_REFCOUNT(php_layer->grid, 0);
+ _zval_dtor_func_for_ptr(Z_COUNTED(php_layer->grid));
+ Z_UNDEF(&php_layer->grid);
+*/
+ MAPSCRIPT_DELREF(php_layer->grid);
+#endif
}
MAKE_STD_ZVAL(php_layer->grid);
MAPSCRIPT_MAKE_PARENT(zlayer, &php_layer->grid);
+#if PHP_VERSION_ID < 70000
mapscript_create_grid((graticuleObj *)(php_layer->layer->layerinfo), parent, php_layer->grid TSRMLS_CC);
-
return_value_ptr = &php_layer->grid;
+#else
+ mapscript_create_grid((graticuleObj *)(php_layer->layer->layerinfo), parent, &php_layer->grid TSRMLS_CC);
+ return_value = &php_layer->grid;
+#endif
}
/* }}} */
@@ -107,7 +123,7 @@ PHP_METHOD(gridObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_grid = (php_grid_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, zobj);
IF_GET_DOUBLE("minsubdivide", php_grid->grid->minsubdivides)
else IF_GET_DOUBLE("maxsubdivide", php_grid->grid->maxsubdivides)
@@ -137,7 +153,7 @@ PHP_METHOD(gridObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_grid = (php_grid_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, zobj);
IF_SET_DOUBLE("minsubdivide", php_grid->grid->minsubdivides, value)
else IF_SET_DOUBLE("maxsubdivide", php_grid->grid->maxsubdivides, value)
@@ -160,11 +176,60 @@ zend_function_entry grid_functions[] = {
}
};
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_grid_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_grid_object *php_grid;
+
+ php_grid = ecalloc(1, sizeof(*php_grid) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_grid->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_grid->zobj, ce);
+
+ php_grid->zobj.handlers = &mapscript_grid_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_grid->parent);
+
+ return &php_grid->zobj;
+}
+
+static void mapscript_grid_free_object(zend_object *object)
+{
+ php_grid_object *php_grid;
+
+ php_grid = (php_grid_object *)((char *)object - XtOffsetOf(php_grid_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_grid->parent);
+
+ /* We don't need to free the gridObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(grid)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "gridObj", grid_functions);
+ mapscript_ce_grid = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_grid->create_object = mapscript_grid_create_object;
+ mapscript_ce_grid->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_grid_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_grid_object_handlers));
+ mapscript_grid_object_handlers.free_obj = mapscript_grid_free_object;
+ mapscript_grid_object_handlers.offset = XtOffsetOf(php_grid_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
void mapscript_create_grid(graticuleObj *grid, parent_object parent, zval *return_value TSRMLS_DC)
{
php_grid_object * php_grid;
object_init_ex(return_value, mapscript_ce_grid);
- php_grid = (php_grid_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, return_value);
php_grid->grid = grid;
php_grid->parent = parent;
@@ -212,3 +277,4 @@ PHP_MINIT_FUNCTION(grid)
return SUCCESS;
}
+#endif
\ No newline at end of file
diff --git a/mapscript/php/hashtable.c b/mapscript/php/hashtable.c
index 44f56805f..3e6c0c783 100644
--- a/mapscript/php/hashtable.c
+++ b/mapscript/php/hashtable.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_hashtable;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_hashtable_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(hashtable___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -82,7 +85,7 @@ PHP_METHOD(hashtableObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj);
IF_GET_LONG("numitems", php_hashtable->hashtable->numitems)
else {
@@ -129,14 +132,14 @@ PHP_METHOD(hashtableObj, get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj);
value = hashTableObj_get(php_hashtable->hashtable, key);
if (value == NULL) {
- RETURN_STRING("",1);
+ MAPSCRIPT_RETURN_STRING("",1);
}
- RETURN_STRING((char *)value, 1);
+ MAPSCRIPT_RETURN_STRING((char *)value, 1);
}
/* }}} */
@@ -158,7 +161,7 @@ PHP_METHOD(hashtableObj, set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj);
if ((status = hashTableObj_set(php_hashtable->hashtable, key, value)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -187,7 +190,7 @@ PHP_METHOD(hashtableObj, remove)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj);
if ((status = hashTableObj_remove(php_hashtable->hashtable, key)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -212,7 +215,7 @@ PHP_METHOD(hashtableObj, clear)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj);
hashTableObj_clear(php_hashtable->hashtable);
}
@@ -237,14 +240,14 @@ PHP_METHOD(hashtableObj, nextKey)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj);
value = hashTableObj_nextKey(php_hashtable->hashtable, key);
if (value == NULL)
RETURN_NULL();
- RETURN_STRING(value, 1);
+ MAPSCRIPT_RETURN_STRING(value, 1);
}
/* }}} */
@@ -265,7 +268,7 @@ void mapscript_create_hashtable(hashTableObj *hashtable, parent_object parent, z
{
php_hashtable_object * php_hashtable;
object_init_ex(return_value, mapscript_ce_hashtable);
- php_hashtable = (php_hashtable_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, return_value);
php_hashtable->hashtable = hashtable;
php_hashtable->parent = parent;
@@ -273,6 +276,55 @@ void mapscript_create_hashtable(hashTableObj *hashtable, parent_object parent, z
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_hashtable_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_hashtable_object *php_hashtable;
+
+ php_hashtable = ecalloc(1, sizeof(*php_hashtable) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_hashtable->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_hashtable->zobj, ce);
+
+ php_hashtable->zobj.handlers = &mapscript_hashtable_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_hashtable->parent);
+
+ return &php_hashtable->zobj;
+}
+
+static void mapscript_hashtable_free_object(zend_object *object)
+{
+ php_hashtable_object *php_hashtable;
+
+ php_hashtable = (php_hashtable_object *)((char *)object - XtOffsetOf(php_hashtable_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_hashtable->parent);
+
+ /* We don't need to free the hashTableObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(hashtable)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "hashTableObj", hashtable_functions);
+ mapscript_ce_hashtable = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_hashtable->create_object = mapscript_hashtable_create_object;
+ mapscript_ce_hashtable->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_hashtable_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_hashtable_object_handlers));
+ mapscript_hashtable_object_handlers.free_obj = mapscript_hashtable_free_object;
+ mapscript_hashtable_object_handlers.offset = XtOffsetOf(php_hashtable_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_hashtable_object_destroy(void *object TSRMLS_DC)
{
php_hashtable_object *php_hashtable = (php_hashtable_object *)object;
@@ -314,3 +366,4 @@ PHP_MINIT_FUNCTION(hashtable)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/image.c b/mapscript/php/image.c
index f284e5936..719208866 100644
--- a/mapscript/php/image.c
+++ b/mapscript/php/image.c
@@ -34,6 +34,9 @@
#include "main/php_output.h"
zend_class_entry *mapscript_ce_image;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_image_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(image___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -81,7 +84,7 @@ PHP_METHOD(imageObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj);
IF_GET_LONG("width", php_image->image->width)
else IF_GET_LONG("height", php_image->image->height)
@@ -111,7 +114,7 @@ PHP_METHOD(imageObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj);
IF_SET_STRING("imagepath", php_image->image->imagepath, value)
else IF_SET_STRING("imageurl", php_image->image->imageurl, value)
@@ -144,7 +147,7 @@ PHP_METHOD(imageObj, saveWebImage)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj);
imageFilename = msTmpFilename(php_image->image->format->extension);
imageFile = msBuildPath(path, php_image->image->imagepath, imageFilename);
@@ -157,7 +160,7 @@ PHP_METHOD(imageObj, saveWebImage)
imageUrlFull = msBuildPath(path, php_image->image->imageurl, imageFilename);
msFree(imageFilename);
- RETURN_STRING(imageUrlFull, 1);
+ MAPSCRIPT_RETURN_STRING(imageUrlFull, 1);
}
/* }}} */
@@ -194,8 +197,8 @@ PHP_METHOD(imageObj, pasteImage)
if (ZEND_NUM_ARGS() == 3)
mapscript_report_php_error(E_WARNING, "dstX parameter given but not dstY" TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_imageSrc = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj);
+ php_imageSrc = MAPSCRIPT_OBJ_P(php_image_object, zimage);
if (!MS_RENDERER_PLUGIN(php_imageSrc->image->format) ||
!MS_RENDERER_PLUGIN(php_image->image->format)) {
@@ -274,9 +277,9 @@ PHP_METHOD(imageObj, saveImage)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj);
if (zmap)
- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
if(filename_len > 0) {
if ((status = msSaveImage((zmap ? php_map->map:NULL), php_image->image, filename) != MS_SUCCESS)) {
@@ -339,10 +342,55 @@ void mapscript_create_image(imageObj *image, zval *return_value TSRMLS_DC)
{
php_image_object * php_image;
object_init_ex(return_value, mapscript_ce_image);
- php_image = (php_image_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, return_value);
php_image->image = image;
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_image_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_image_object *php_image;
+
+ php_image = ecalloc(1, sizeof(*php_image) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_image->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_image->zobj, ce);
+
+ php_image->zobj.handlers = &mapscript_image_object_handlers;
+
+ return &php_image->zobj;
+}
+
+static void mapscript_image_free_object(zend_object *object)
+{
+ php_image_object *php_image;
+
+ php_image = (php_image_object *)((char *)object - XtOffsetOf(php_image_object, zobj));
+
+ msFreeImage(php_image->image);
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(image)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "imageObj", image_functions);
+ mapscript_ce_image = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_image->create_object = mapscript_image_create_object;
+ mapscript_ce_image->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_image_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_image_object_handlers));
+ mapscript_image_object_handlers.free_obj = mapscript_image_free_object;
+ mapscript_image_object_handlers.offset = XtOffsetOf(php_image_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_image_object_destroy(void *object TSRMLS_DC)
{
php_image_object *php_image = (php_image_object *)object;
@@ -380,3 +428,4 @@ PHP_MINIT_FUNCTION(image)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/label.c b/mapscript/php/label.c
index 9fab6ec3e..214dfb19b 100644
--- a/mapscript/php/label.c
+++ b/mapscript/php/label.c
@@ -106,7 +106,7 @@ PHP_METHOD(labelObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, getThis());
if ((php_label->label = labelObj_new()) == NULL) {
mapscript_throw_exception("Unable to construct labelObj." TSRMLS_CC);
@@ -130,7 +130,7 @@ PHP_METHOD(labelObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
IF_GET_STRING("font", php_label->label->font)
else IF_GET_STRING("encoding", php_label->label->encoding)
@@ -187,7 +187,7 @@ PHP_METHOD(labelObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
IF_SET_STRING("font", php_label->label->font, value)
else IF_SET_STRING("encoding", php_label->label->encoding, value)
@@ -248,7 +248,7 @@ PHP_METHOD(labelObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
if ((status = labelObj_updateFromString(php_label->label, snippet)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -274,14 +274,14 @@ PHP_METHOD(labelObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
value = labelObj_convertToString(php_label->label);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -304,7 +304,7 @@ PHP_METHOD(labelObj, setBinding)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
if (bindingId < 0 || bindingId > MS_LABEL_BINDING_LENGTH) {
mapscript_throw_exception("Invalid binding id." TSRMLS_CC);
@@ -347,7 +347,7 @@ PHP_METHOD(labelObj, getBinding)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
if (bindingId < 0 || bindingId > MS_LABEL_BINDING_LENGTH) {
mapscript_throw_exception("Invalid binding id." TSRMLS_CC);
@@ -355,7 +355,7 @@ PHP_METHOD(labelObj, getBinding)
}
if( (value = php_label->label->bindings[bindingId].item) != NULL) {
- RETURN_STRING(value, 1);
+ MAPSCRIPT_RETURN_STRING(value, 1);
}
RETURN_NULL();
@@ -379,7 +379,7 @@ PHP_METHOD(labelObj, removeBinding)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
if (bindingId < 0 || bindingId > MS_LABEL_BINDING_LENGTH) {
mapscript_throw_exception("Invalid binding id." TSRMLS_CC);
@@ -417,7 +417,7 @@ PHP_METHOD(labelObj, getStyle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
if (index < 0 || index >= php_label->label->numstyles) {
mapscript_throw_exception("Invalid style index." TSRMLS_CC);
@@ -449,8 +449,8 @@ PHP_METHOD(labelObj, insertStyle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_style = (php_style_object *) zend_object_store_get_object(zstyle TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zstyle);
RETURN_LONG(msInsertLabelStyle(php_label->label, php_style->style, index));
}
@@ -474,7 +474,7 @@ PHP_METHOD(labelObj, removeStyle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
style = msRemoveLabelStyle(php_label->label, index);
@@ -500,7 +500,7 @@ PHP_METHOD(labelObj, moveStyleUp)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
status = labelObj_moveStyleUp(php_label->label, index);
@@ -524,7 +524,7 @@ PHP_METHOD(labelObj, moveStyleDown)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
status = labelObj_moveStyleDown(php_label->label, index);
@@ -548,7 +548,7 @@ PHP_METHOD(labelObj, deleteStyle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
status = labelObj_deleteStyle(php_label->label, index);
@@ -570,7 +570,7 @@ PHP_METHOD(labelObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
MAPSCRIPT_DELREF(php_label->color);
MAPSCRIPT_DELREF(php_label->outlinecolor);
@@ -596,7 +596,7 @@ PHP_METHOD(labelObj, setExpression)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
status = labelObj_setExpression(php_label->label, expression);
@@ -625,14 +625,14 @@ PHP_METHOD(labelObj, getExpressionString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
value = labelObj_getExpressionString(php_label->label);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -656,8 +656,8 @@ PHP_METHOD(labelObj, setText)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(php_label->parent.val TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_label->parent.val);
status = labelObj_setText(php_label->label, php_layer->layer, text);
@@ -686,14 +686,14 @@ PHP_METHOD(labelObj, getTextString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj);
value = labelObj_getTextString(php_label->label);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -728,16 +728,93 @@ void mapscript_create_label(labelObj *label, parent_object parent, zval *return_
{
php_label_object * php_label;
object_init_ex(return_value, mapscript_ce_label);
- php_label = (php_label_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, return_value);
php_label->label = label;
- if (parent.val)
+ if(ZVAL_NOT_UNDEF(parent.val))
php_label->is_ref = 1;
php_label->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_label_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_label_object *php_label;
+
+ php_label = ecalloc(1, sizeof(*php_label) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_label->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_label->zobj, ce);
+
+ php_label->zobj.handlers = &mapscript_label_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_label->parent);
+ php_label->is_ref = 0;
+ ZVAL_UNDEF(&php_label->color);
+ ZVAL_UNDEF(&php_label->outlinecolor);
+ ZVAL_UNDEF(&php_label->shadowcolor);
+ ZVAL_UNDEF(&php_label->leader);
+
+
+ return &php_label->zobj;
+}
+
+static void mapscript_label_free_object(zend_object *object)
+{
+ php_label_object *php_label;
+
+ php_label = (php_label_object *)((char *)object - XtOffsetOf(php_label_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_label->parent);
+ MAPSCRIPT_DELREF(php_label->color);
+ MAPSCRIPT_DELREF(php_label->outlinecolor);
+ MAPSCRIPT_DELREF(php_label->shadowcolor);
+ MAPSCRIPT_DELREF(php_label->leader);
+
+ if (php_label->label && !php_label->is_ref) {
+ labelObj_destroy(php_label->label);
+ }
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_label_clone_object(zval *zobj)
+{
+ php_label_object *php_label_old, *php_label_new;
+ zend_object* zobj_new;
+
+ php_label_old = MAPSCRIPT_OBJ_P(php_label_object, zobj);
+
+ zobj_new = mapscript_label_create_object(mapscript_ce_label);
+ php_label_new = (php_label_object *)((char *)zobj_new - XtOffsetOf(php_label_object, zobj));
+
+ php_label_new->label = labelObj_clone(php_label_old->label);
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(label)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "labelObj", label_functions);
+ mapscript_ce_label = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_label->create_object = mapscript_label_create_object;
+ mapscript_ce_label->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_label_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_label_object_handlers));
+ mapscript_label_object_handlers.free_obj = mapscript_label_free_object;
+ mapscript_label_object_handlers.clone_obj = mapscript_label_clone_object;
+ mapscript_label_object_handlers.offset = XtOffsetOf(php_label_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_label_object_destroy(void *object TSRMLS_DC)
{
php_label_object *php_label = (php_label_object *)object;
@@ -791,7 +868,7 @@ static zend_object_value mapscript_label_object_clone(zval *zobj TSRMLS_DC)
php_label_object *php_label_old, *php_label_new;
zend_object_value new_ov;
- php_label_old = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_label_old = MAPSCRIPT_OBJ_P(php_label_object, zobj);
new_ov = mapscript_label_object_new_ex(mapscript_ce_label, &php_label_new TSRMLS_CC);
zend_objects_clone_members(&php_label_new->std, new_ov, &php_label_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC);
@@ -817,4 +894,4 @@ PHP_MINIT_FUNCTION(label)
return SUCCESS;
}
-
+#endif
diff --git a/mapscript/php/labelcache.c b/mapscript/php/labelcache.c
index 43f6ef503..cd04b3cdf 100644
--- a/mapscript/php/labelcache.c
+++ b/mapscript/php/labelcache.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_labelcache;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_labelcache_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(labelcache___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -75,7 +78,7 @@ PHP_METHOD(labelCacheObj, freeCache)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_labelcache = (php_labelcache_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_labelcache = MAPSCRIPT_OBJ_P(php_labelcache_object, zobj);
labelCacheObj_freeCache(php_labelcache->labelcache);
@@ -96,13 +99,61 @@ void mapscript_create_labelcache(labelCacheObj *labelcache, parent_object parent
{
php_labelcache_object * php_labelcache;
object_init_ex(return_value, mapscript_ce_labelcache);
- php_labelcache = (php_labelcache_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_labelcache = MAPSCRIPT_OBJ_P(php_labelcache_object, return_value);
php_labelcache->labelcache = labelcache;
php_labelcache->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_labelcache_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_labelcache_object *php_labelcache;
+
+ php_labelcache = ecalloc(1, sizeof(*php_labelcache) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_labelcache->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_labelcache->zobj, ce);
+
+ php_labelcache->zobj.handlers = &mapscript_labelcache_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_labelcache->parent);
+
+ return &php_labelcache->zobj;
+}
+
+static void mapscript_labelcache_free_object(zend_object *object)
+{
+ php_labelcache_object *php_labelcache;
+
+ php_labelcache = (php_labelcache_object *)((char *)object - XtOffsetOf(php_labelcache_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_labelcache->parent);
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(labelcache)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "labelcacheObj", labelcache_functions);
+ mapscript_ce_labelcache = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_labelcache->create_object = mapscript_labelcache_create_object;
+ mapscript_ce_labelcache->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_labelcache_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_labelcache_object_handlers));
+ mapscript_labelcache_object_handlers.free_obj = mapscript_labelcache_free_object;
+ mapscript_labelcache_object_handlers.offset = XtOffsetOf(php_labelcache_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_labelcache_object_destroy(void *object TSRMLS_DC)
{
php_labelcache_object *php_labelcache = (php_labelcache_object *)object;
@@ -144,3 +195,4 @@ PHP_MINIT_FUNCTION(labelcache)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/labelcachemember.c b/mapscript/php/labelcachemember.c
index e34010673..6241b9528 100644
--- a/mapscript/php/labelcachemember.c
+++ b/mapscript/php/labelcachemember.c
@@ -29,10 +29,12 @@
* DEALINGS IN THE SOFTWARE.
**********************************************************************/
-#ifdef what_the_fxxx_is_this_for
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_labelcachemember;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_labelcachemember_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(labelcachemember___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -66,21 +68,21 @@ PHP_METHOD(labelCacheMemberObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_labelcachemember = MAPSCRIPT_OBJ_P(php_labelcachemember_object, zobj);
IF_GET_LONG("classindex", php_labelcachemember->labelcachemember->classindex)
- else IF_GET_LONG("featuresize", php_labelcachemember->labelcachemember->featuresize)
+ /* else IF_GET_LONG("featuresize", php_labelcachemember->labelcachemember->featuresize) */
else IF_GET_LONG("layerindex", php_labelcachemember->labelcachemember->layerindex)
- else IF_GET_LONG("numstyles", php_labelcachemember->labelcachemember->numstyles)
- else IF_GET_LONG("numlabels", php_labelcachemember->labelcachemember->numlabels)
+ /* else IF_GET_LONG("numstyles", php_labelcachemember->labelcachemember->numstyles) */
+ /* else IF_GET_LONG("numlabels", php_labelcachemember->labelcachemember->numlabels) */
/* else IF_GET_LONG("shapeindex", php_labelcachemember->labelcachemember->shapeindex) */
else IF_GET_LONG("status", php_labelcachemember->labelcachemember->status)
else IF_GET_LONG("markerid", php_labelcachemember->labelcachemember->markerid)
/* else IF_GET_LONG("tileindex", php_labelcachemember->labelcachemember->tileindex) */
else IF_GET_OBJECT("point", mapscript_ce_point, php_labelcachemember->point, &php_labelcachemember->labelcachemember->point)
- else IF_GET_OBJECT("labels", mapscript_ce_label, php_labelcachemember->labels, &php_labelcachemember->labelcachemember->labels)
- else IF_GET_OBJECT("styles", mapscript_ce_style, php_labelcachemember->styles, php_labelcachemember->labelcachemember->styles)
- else IF_GET_OBJECT("poly", mapscript_ce_shape, php_labelcachemember->poly, php_labelcachemember->labelcachemember->poly)
+ /* else IF_GET_OBJECT("labels", mapscript_ce_label, php_labelcachemember->labels, &php_labelcachemember->labelcachemember->labels) */
+ /* else IF_GET_OBJECT("styles", mapscript_ce_style, php_labelcachemember->styles, php_labelcachemember->labelcachemember->styles) */
+ /* else IF_GET_OBJECT("poly", mapscript_ce_shape, php_labelcachemember->poly, php_labelcachemember->labelcachemember->poly) */
else {
mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property);
}
@@ -91,8 +93,8 @@ PHP_METHOD(labelCacheMemberObj, __set)
char *property;
long property_len = 0;
zval *value;
- zval *zobj = getThis();
- php_labelcachemember_object *php_labelcachemember;
+ /* zval *zobj = getThis(); */
+ /* php_labelcachemember_object *php_labelcachemember; */
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz",
@@ -102,20 +104,20 @@ PHP_METHOD(labelCacheMemberObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ /* php_labelcachemember = MAPSCRIPT_OBJ_P(php_labelcachemember_object, zobj); */
if ( (STRING_EQUAL("classindex", property)) ||
- (STRING_EQUAL("featuresize", property)) ||
+ /* (STRING_EQUAL("featuresize", property)) || */
(STRING_EQUAL("layerindex", property)) ||
- (STRING_EQUAL("numstyles", property)) ||
- (STRING_EQUAL("numlabels", property)) ||
- (STRING_EQUAL("shapeindex", property)) ||
+ /* (STRING_EQUAL("numstyles", property)) || */
+ /* (STRING_EQUAL("numlabels", property)) || */
+ /* (STRING_EQUAL("shapeindex", property)) || */
(STRING_EQUAL("status", property)) ||
(STRING_EQUAL("markerid", property)) ||
- (STRING_EQUAL("tileindex", property)) ||
- (STRING_EQUAL("labels", property)) ||
- (STRING_EQUAL("styles", property)) ||
- (STRING_EQUAL("poly", property)) ||
+ /* (STRING_EQUAL("tileindex", property)) || */
+ /* (STRING_EQUAL("labels", property)) || */
+ /* (STRING_EQUAL("styles", property)) || */
+ /* (STRING_EQUAL("poly", property)) || */
(STRING_EQUAL("point", property))) {
mapscript_throw_exception("Property '%s' is read-only and cannot be set." TSRMLS_CC, property);
} else {
@@ -137,7 +139,7 @@ PHP_METHOD(labelCacheMemberObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_labelcachemember = MAPSCRIPT_OBJ_P(php_labelcachemember_object, zobj);
MAPSCRIPT_DELREF(php_labelcachemember->point);
MAPSCRIPT_DELREF(php_labelcachemember->labels);
@@ -162,7 +164,7 @@ void mapscript_create_labelcachemember(labelCacheMemberObj *labelcachemember,
{
php_labelcachemember_object * php_labelcachemember;
object_init_ex(return_value, mapscript_ce_labelcachemember);
- php_labelcachemember = (php_labelcachemember_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_labelcachemember = MAPSCRIPT_OBJ_P(php_labelcachemember_object, return_value);
php_labelcachemember->labelcachemember = labelcachemember;
php_labelcachemember->parent = parent;
@@ -170,6 +172,65 @@ void mapscript_create_labelcachemember(labelCacheMemberObj *labelcachemember,
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_labelcachemember_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_labelcachemember_object *php_labelcachemember;
+
+ php_labelcachemember = ecalloc(1, sizeof(*php_labelcachemember) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_labelcachemember->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_labelcachemember->zobj, ce);
+
+ php_labelcachemember->zobj.handlers = &mapscript_labelcachemember_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_labelcachemember->parent);
+ ZVAL_UNDEF(&php_labelcachemember->point);
+ ZVAL_UNDEF(&php_labelcachemember->labels);
+ ZVAL_UNDEF(&php_labelcachemember->styles);
+ ZVAL_UNDEF(&php_labelcachemember->poly);
+
+
+ return &php_labelcachemember->zobj;
+}
+
+static void mapscript_labelcachemember_free_object(zend_object *object)
+{
+ php_labelcachemember_object *php_labelcachemember;
+
+ php_labelcachemember = (php_labelcachemember_object *)((char *)object - XtOffsetOf(php_labelcachemember_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_labelcachemember->parent);
+ MAPSCRIPT_DELREF(php_labelcachemember->point);
+ MAPSCRIPT_DELREF(php_labelcachemember->labels);
+ MAPSCRIPT_DELREF(php_labelcachemember->styles);
+ MAPSCRIPT_DELREF(php_labelcachemember->poly);
+
+ /* We don't need to free the labelCacheMemberObj, the mapObj will do it */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(labelcachemember)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "labelCacheMemberObj", labelcachemember_functions);
+ mapscript_ce_labelcachemember = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_labelcachemember->create_object = mapscript_labelcachemember_create_object;
+ mapscript_ce_labelcachemember->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_labelcachemember_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_labelcachemember_object_handlers));
+ mapscript_labelcachemember_object_handlers.free_obj = mapscript_labelcachemember_free_object;
+ mapscript_labelcachemember_object_handlers.offset = XtOffsetOf(php_labelcachemember_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
+
static void mapscript_labelcachemember_object_destroy(void *object TSRMLS_DC)
{
php_labelcachemember_object *php_labelcachemember = (php_labelcachemember_object *)object;
@@ -220,4 +281,3 @@ PHP_MINIT_FUNCTION(labelcachemember)
return SUCCESS;
}
#endif
-
diff --git a/mapscript/php/labelleader.c b/mapscript/php/labelleader.c
index 343a531e8..edf4d113a 100644
--- a/mapscript/php/labelleader.c
+++ b/mapscript/php/labelleader.c
@@ -30,6 +30,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_labelleader;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_labelleader_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(labelleader___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -63,7 +66,7 @@ PHP_METHOD(labelLeaderObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_labelleader = (php_labelleader_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_labelleader = MAPSCRIPT_OBJ_P(php_labelleader_object, zobj);
IF_GET_LONG("maxdistance", php_labelleader->labelleader->maxdistance)
else IF_GET_LONG("gridstep", php_labelleader->labelleader->gridstep)
@@ -106,13 +109,63 @@ void mapscript_create_labelleader(labelLeaderObj *labelleader, parent_object par
{
php_labelleader_object * php_labelleader;
object_init_ex(return_value, mapscript_ce_labelleader);
- php_labelleader = (php_labelleader_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_labelleader = MAPSCRIPT_OBJ_P(php_labelleader_object, return_value);
php_labelleader->labelleader = labelleader;
php_labelleader->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_labelleader_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_labelleader_object *php_labelleader;
+
+ php_labelleader = ecalloc(1, sizeof(*php_labelleader) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_labelleader->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_labelleader->zobj, ce);
+
+ php_labelleader->zobj.handlers = &mapscript_labelleader_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_labelleader->parent);
+
+ return &php_labelleader->zobj;
+}
+
+static void mapscript_labelleader_free_object(zend_object *object)
+{
+ php_labelleader_object *php_labelleader;
+
+ php_labelleader = (php_labelleader_object *)((char *)object - XtOffsetOf(php_labelleader_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_labelleader->parent);
+
+ /* We don't need to free the labelLeaderObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(labelleader)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "labelLeaderObj", labelleader_functions);
+ mapscript_ce_labelleader = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_labelleader->create_object = mapscript_labelleader_create_object;
+ mapscript_ce_labelleader->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_labelleader_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_labelleader_object_handlers));
+ mapscript_labelleader_object_handlers.free_obj = mapscript_labelleader_free_object;
+ mapscript_labelleader_object_handlers.offset = XtOffsetOf(php_labelleader_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
+
static void mapscript_labelleader_object_destroy(void *object TSRMLS_DC)
{
php_labelleader_object *php_labelleader = (php_labelleader_object *)object;
@@ -154,3 +207,4 @@ PHP_MINIT_FUNCTION(labelleader)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/layer.c b/mapscript/php/layer.c
index 8567bc8e2..09c961173 100644
--- a/mapscript/php/layer.c
+++ b/mapscript/php/layer.c
@@ -220,10 +220,10 @@ PHP_METHOD(layerObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *)zend_object_store_get_object(zobj TSRMLS_CC);
- php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
if (zlayer)
- php_layer2 = (php_layer_object *)zend_object_store_get_object(zlayer TSRMLS_CC);
+ php_layer2 = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
if ((layer = layerObj_new(php_map->map)) == NULL) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -235,7 +235,7 @@ PHP_METHOD(layerObj, __construct)
MAPSCRIPT_MAKE_PARENT(zmap, NULL);
php_layer->parent = parent;
- MAPSCRIPT_ADDREF(zmap);
+ MAPSCRIPT_ADDREF_P(zmap);
/* if a layer is passed as argument, copy the layer into
the new one */
@@ -248,7 +248,11 @@ PHP_METHOD(layerObj, __construct)
if (layer->connectiontype != MS_GRATICULE || layer->layerinfo == NULL) {
MAKE_STD_ZVAL(php_layer->grid);
+#if PHP_VERSION_ID < 70000
ZVAL_NULL(php_layer->grid);
+#else
+ ZVAL_NULL(&php_layer->grid);
+#endif
}
}
/* }}} */
@@ -268,7 +272,7 @@ PHP_METHOD(layerObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
IF_GET_LONG("numclasses", php_layer->layer->numclasses)
else IF_GET_STRING("encoding", php_layer->layer->encoding)
@@ -345,7 +349,7 @@ PHP_METHOD(layerObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
/* special case for "template" which we want to set to NULL and not an empty string */
if(Z_TYPE_P(value)==IS_NULL && !strcmp(property,"template")) {
@@ -433,15 +437,15 @@ PHP_METHOD(layerObj, draw)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_draw(php_layer->layer, php_map->map, php_image->image)) != MS_SUCCESS)
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
@@ -469,15 +473,15 @@ PHP_METHOD(layerObj, drawQuery)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_drawQuery(php_layer->layer, php_map->map, php_image->image)) != MS_SUCCESS)
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
@@ -508,15 +512,15 @@ PHP_METHOD(layerObj, queryByPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_queryByPoint(php_layer->layer, php_map->map, php_point->point,
mode, buffer)) != MS_SUCCESS)
@@ -545,15 +549,15 @@ PHP_METHOD(layerObj, queryByRect)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_rect = (php_rect_object *) zend_object_store_get_object(zrect TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zrect);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_queryByRect(php_layer->layer, php_map->map, *(php_rect->rect))) != MS_SUCCESS)
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
@@ -581,15 +585,15 @@ PHP_METHOD(layerObj, queryByShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_queryByShape(php_layer->layer, php_map->map, php_shape->shape)) != MS_SUCCESS)
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
@@ -616,14 +620,14 @@ PHP_METHOD(layerObj, queryByFeatures)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_queryByFeatures(php_layer->layer, php_map->map, slayer)) != MS_SUCCESS)
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
@@ -656,14 +660,14 @@ PHP_METHOD(layerObj, queryByAttributes)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_queryByAttributes(php_layer->layer, php_map->map,
item, string, mode)) != MS_SUCCESS)
@@ -692,14 +696,14 @@ PHP_METHOD(layerObj, queryByFilter)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_queryByFilter(php_layer->layer, php_map->map,
string)) != MS_SUCCESS)
@@ -728,14 +732,14 @@ PHP_METHOD(layerObj, queryByIndex)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((status = layerObj_queryByIndex(php_layer->layer, php_map->map,
tileindex, shapeindex, addtoquery)) != MS_SUCCESS)
@@ -763,7 +767,7 @@ PHP_METHOD(layerObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if ((status = layerObj_updateFromString(php_layer->layer, snippet)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -789,14 +793,14 @@ PHP_METHOD(layerObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
value = layerObj_convertToString(php_layer->layer);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -819,7 +823,7 @@ PHP_METHOD(layerObj, getClass)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if ((class = layerObj_getClass(php_layer->layer, index)) == NULL) {
mapscript_throw_exception("Invalid class index." TSRMLS_CC);
@@ -837,7 +841,8 @@ PHP_METHOD(layerObj, getClass)
PHP_METHOD(layerObj, getClassIndex)
{
zval *zobj = getThis();
- zval *zshape, **ppzval, *zclassgroup = NULL;
+ zval *zshape, *zclassgroup = NULL;
+ MAPSCRIPT_ZVAL_P ppzval;
int numElements, *classGroups = NULL;
int retval = -1, i = 0;
long numClasses = 0;
@@ -856,15 +861,15 @@ PHP_METHOD(layerObj, getClassIndex)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if (zclassgroup) {
classgroup_hash = Z_ARRVAL_P(zclassgroup);
@@ -874,7 +879,11 @@ PHP_METHOD(layerObj, getClassIndex)
for(zend_hash_internal_pointer_reset(classgroup_hash);
zend_hash_has_more_elements(classgroup_hash) == SUCCESS;
zend_hash_move_forward(classgroup_hash), ++i) {
+#if PHP_VERSION_ID < 70000
zend_hash_get_current_data(classgroup_hash, (void **)&ppzval);
+#else
+ ppzval = zend_hash_get_current_data(classgroup_hash);
+#endif
classGroups[i] = Z_LVAL_PP(ppzval);
}
}
@@ -907,7 +916,7 @@ PHP_METHOD(layerObj, setFilter)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if ((status = layerObj_setFilter(php_layer->layer, expression)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -933,14 +942,14 @@ PHP_METHOD(layerObj, getFilterString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
value = layerObj_getFilter(php_layer->layer);
if (value == NULL) {
RETURN_NULL();
}
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -964,16 +973,16 @@ PHP_METHOD(layerObj, setProjection)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- if (php_layer->projection)
- php_projection = (php_projection_object *) zend_object_store_get_object(php_layer->projection TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ if (ZVAL_NOT_UNDEF(php_layer->projection))
+ php_projection = MAPSCRIPT_OBJ(php_projection_object, php_layer->projection);
if ((status = layerObj_setProjection(php_layer->layer, projection)) != MS_SUCCESS) {
mapscript_report_php_error(E_WARNING, "setProjection failed" TSRMLS_CC);
RETURN_LONG(status);
}
- if (php_layer->projection)
+ if (ZVAL_NOT_UNDEF(php_layer->projection))
php_projection->projection = &(php_layer->layer->projection);
RETURN_LONG(status);
@@ -995,14 +1004,14 @@ PHP_METHOD(layerObj, getProjection)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
projection = layerObj_getProjection(php_layer->layer);
if (projection == NULL) {
RETURN_NULL();
}
- RETVAL_STRING(projection, 1);
+ MAPSCRIPT_RETVAL_STRING(projection, 1);
free(projection);
}
/* }}} */
@@ -1026,16 +1035,16 @@ PHP_METHOD(layerObj, setWKTProjection)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- if (php_layer->projection)
- php_projection = (php_projection_object *) zend_object_store_get_object(php_layer->projection TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ if (ZVAL_NOT_UNDEF(php_layer->projection))
+ php_projection = MAPSCRIPT_OBJ(php_projection_object, php_layer->projection);
if ((status = layerObj_setWKTProjection(php_layer->layer, projection)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
return;
}
- if (php_layer->projection)
+ if (ZVAL_NOT_UNDEF(php_layer->projection))
php_projection->projection = &(php_layer->layer->projection);
RETURN_LONG(status);
@@ -1056,7 +1065,7 @@ PHP_METHOD(layerObj, getNumResults)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if (!php_layer->layer->resultcache)
@@ -1081,7 +1090,7 @@ PHP_METHOD(layerObj, getResultsBounds)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if (!php_layer->layer->resultcache)
RETURN_NULL();
@@ -1111,7 +1120,7 @@ PHP_METHOD(layerObj, getResult)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if ((result = layerObj_getResult(php_layer->layer, index)) == NULL) {
mapscript_throw_exception("Invalid result index." TSRMLS_CC);
@@ -1140,7 +1149,7 @@ PHP_METHOD(layerObj, open)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
status = layerObj_open(php_layer->layer);
@@ -1182,8 +1191,8 @@ PHP_METHOD(layerObj, whichShapes)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_rect = (php_rect_object *) zend_object_store_get_object(zrect TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zrect);
status = layerObj_whichShapes(php_layer->layer, php_rect->rect);
@@ -1207,7 +1216,7 @@ PHP_METHOD(layerObj, nextShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
shape = layerObj_nextShape(php_layer->layer);
@@ -1234,7 +1243,7 @@ PHP_METHOD(layerObj, close)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
layerObj_close(php_layer->layer);
}
@@ -1256,7 +1265,7 @@ PHP_METHOD(layerObj, getExtent)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
/* Create a new rectObj to hold the result */
if ((rect = rectObj_new()) == NULL) {
@@ -1290,7 +1299,7 @@ PHP_METHOD(layerObj, setExtent)
return;
}
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if (minx > maxx || miny > maxy) {
mapscript_throw_mapserver_exception("Invalid min/max values" TSRMLS_CC);
@@ -1320,8 +1329,8 @@ PHP_METHOD(layerObj, addFeature)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
status = layerObj_addFeature(php_layer->layer, php_shape->shape);
@@ -1337,7 +1346,7 @@ PHP_METHOD(layerObj, getMetaData)
zval *zname;
zval *zobj = getThis();
php_layer_object *php_layer;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z",
@@ -1347,12 +1356,16 @@ PHP_METHOD(layerObj, getMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata);
MAPSCRIPT_CALL_METHOD_1(php_layer->metadata, "get", retval, zname);
+#if PHP_VERSION_ID < 70000
RETURN_STRING(Z_STRVAL_P(retval),1);
+#else
+ RETURN_STRING(Z_STRVAL(retval))
+#endif
}
/* }}} */
@@ -1363,7 +1376,7 @@ PHP_METHOD(layerObj, setMetaData)
zval *zname, *zvalue;
zval *zobj = getThis();
php_layer_object *php_layer;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz",
@@ -1373,12 +1386,16 @@ PHP_METHOD(layerObj, setMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata);
MAPSCRIPT_CALL_METHOD_2(php_layer->metadata, "set", retval, zname, zvalue);
+#if PHP_VERSION_ID < 70000
RETURN_LONG(Z_LVAL_P(retval));
+#else
+ RETURN_LONG(Z_LVAL(retval));
+#endif
}
/* }}} */
@@ -1389,7 +1406,7 @@ PHP_METHOD(layerObj, removeMetaData)
zval *zname;
zval *zobj = getThis();
php_layer_object *php_layer;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z",
@@ -1399,12 +1416,16 @@ PHP_METHOD(layerObj, removeMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata);
MAPSCRIPT_CALL_METHOD_1(php_layer->metadata, "remove", retval, zname);
+#if PHP_VERSION_ID < 70000
RETURN_LONG(Z_LVAL_P(retval));
+#else
+ RETURN_LONG(Z_LVAL(retval));
+#endif
}
/* }}} */
@@ -1429,14 +1450,14 @@ PHP_METHOD(layerObj, getWMSFeatureInfoURL)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
if ((value = layerObj_getWMSFeatureInfoURL(php_layer->layer, php_map->map,
clickx,
@@ -1444,10 +1465,10 @@ PHP_METHOD(layerObj, getWMSFeatureInfoURL)
featureCount,
infoFormat)) == NULL) {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -1467,7 +1488,7 @@ PHP_METHOD(layerObj, getItems)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
array_init(return_value);
status = msLayerGetItems(php_layer->layer);
@@ -1475,7 +1496,7 @@ PHP_METHOD(layerObj, getItems)
if (status != MS_FAILURE && php_layer->layer->numitems > 0) {
for (i=0; i<php_layer->layer->numitems; i++) {
/* add a copy of the group name to the PHP array */
- add_next_index_string(return_value, php_layer->layer->items[i], 1);
+ mapscript_add_next_index_string(return_value, php_layer->layer->items[i], 1);
}
}
}
@@ -1498,7 +1519,7 @@ PHP_METHOD(layerObj, setProcessing)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
php_layer->layer->numprocessing++;
if(php_layer->layer->numprocessing == 1)
@@ -1532,7 +1553,7 @@ PHP_METHOD(layerObj, setProcessingKey)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
msLayerSetProcessingKey( php_layer->layer, key, value );
@@ -1555,12 +1576,12 @@ PHP_METHOD(layerObj, getProcessing)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
array_init(return_value);
if (php_layer->layer->numprocessing > 0) {
for (i=0; i<php_layer->layer->numprocessing; i++) {
- add_next_index_string(return_value, php_layer->layer->processing[i], 1);
+ mapscript_add_next_index_string(return_value, php_layer->layer->processing[i], 1);
}
}
}
@@ -1581,7 +1602,7 @@ PHP_METHOD(layerObj, clearProcessing)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if (php_layer->layer->numprocessing > 0) {
for(i=0; i<php_layer->layer->numprocessing; i++)
@@ -1608,12 +1629,12 @@ PHP_METHOD(layerObj, executeWFSGetFeature)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if ((value=layerObj_executeWFSGetFeature(php_layer->layer)) == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -1642,7 +1663,7 @@ PHP_METHOD(layerObj, applySLD)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
status = layerObj_applySLD(php_layer->layer, sldxml, namedLayer);
@@ -1675,7 +1696,7 @@ PHP_METHOD(layerObj, applySLDURL)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
status = layerObj_applySLDURL(php_layer->layer, sldurl, namedLayer);
@@ -1699,16 +1720,16 @@ PHP_METHOD(layerObj, generateSLD)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
buffer = layerObj_generateSLD(php_layer->layer);
if (buffer) {
- RETVAL_STRING(buffer, 1);
+ MAPSCRIPT_RETVAL_STRING(buffer, 1);
free(buffer);
} else {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
}
/* }}} */
@@ -1731,7 +1752,7 @@ PHP_METHOD(layerObj, moveClassUp)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
status = layerObj_moveClassUp(php_layer->layer, index);
@@ -1757,7 +1778,7 @@ PHP_METHOD(layerObj, moveClassDown)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
status = layerObj_moveClassDown(php_layer->layer, index);
@@ -1784,7 +1805,7 @@ PHP_METHOD(layerObj, removeClass)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if ((class = layerObj_removeClass(php_layer->layer, index)) == NULL) {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
@@ -1814,14 +1835,14 @@ PHP_METHOD(layerObj, isVisible)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
retval = msLayerIsVisible(php_map->map, php_layer->layer);
@@ -1849,7 +1870,7 @@ PHP_METHOD(layerObj, setConnectionType)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if ((status = layerObj_setConnectionType(php_layer->layer,
type,
@@ -1859,10 +1880,14 @@ PHP_METHOD(layerObj, setConnectionType)
}
if (php_layer->layer->connectiontype != MS_GRATICULE || php_layer->layer->layerinfo == NULL) {
- if (php_layer->grid && Z_TYPE_P(php_layer->grid) == IS_OBJECT) {
+ if (ZVAL_NOT_UNDEF(php_layer->grid) && MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT) {
MAPSCRIPT_DELREF(php_layer->grid);
MAKE_STD_ZVAL(php_layer->grid);
+#if PHP_VERSION_ID < 70000
ZVAL_NULL(php_layer->grid);
+#else
+ ZVAL_NULL(&php_layer->grid);
+#endif
}
}
@@ -1876,7 +1901,7 @@ PHP_METHOD(layerObj, getGridIntersectionCoordinates)
{
zval *zobj = getThis();
graticuleIntersectionObj *values=NULL;
- zval *tmp_arr1;
+ MAPSCRIPT_ZVAL tmp_arr1;
int i=0;
php_layer_object *php_layer;
php_map_object *php_map;
@@ -1888,14 +1913,14 @@ PHP_METHOD(layerObj, getGridIntersectionCoordinates)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
- if (!php_layer->parent.val) {
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
array_init(return_value);
@@ -1914,92 +1939,118 @@ PHP_METHOD(layerObj, getGridIntersectionCoordinates)
add_assoc_double(return_value, "topnumpoints", values->nTop);
MAKE_STD_ZVAL(tmp_arr1);
- array_init(tmp_arr1);
+ mapscript_array_init(tmp_arr1);
for (i=0; i<values->nTop; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_string(tmp_arr1, values->papszTopLabels[i],1);
+#else
+ add_next_index_string(&tmp_arr1, values->papszTopLabels[i]);
+#endif
}
- zend_hash_update(Z_ARRVAL_P(return_value), "toplabels", strlen("toplabels")+1, &tmp_arr1,
- sizeof(tmp_arr1), NULL);
+ mapscript_hash_update(Z_ARRVAL_P(return_value), "toplabels", tmp_arr1);
MAKE_STD_ZVAL(tmp_arr1);
- array_init(tmp_arr1);
+ mapscript_array_init(tmp_arr1);
for (i=0; i<values->nTop; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_double(tmp_arr1, values->pasTop[i].x);
add_next_index_double(tmp_arr1, values->pasTop[i].y);
+#else
+ add_next_index_double(&tmp_arr1, values->pasTop[i].x);
+ add_next_index_double(&tmp_arr1, values->pasTop[i].y);
+#endif
}
- zend_hash_update(Z_ARRVAL_P(return_value), "toppoints", strlen("toppoints")+1, &tmp_arr1,
- sizeof(tmp_arr1), NULL);
+ mapscript_hash_update(Z_ARRVAL_P(return_value), "toppoints", tmp_arr1);
/*BOTTOM*/
add_assoc_double(return_value, "bottomnumpoints", values->nBottom);
MAKE_STD_ZVAL(tmp_arr1);
- array_init(tmp_arr1);
+ mapscript_array_init(tmp_arr1);
for (i=0; i<values->nBottom; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_string(tmp_arr1, values->papszBottomLabels[i],1);
+#else
+ add_next_index_string(&tmp_arr1, values->papszBottomLabels[i]);
+#endif
}
- zend_hash_update(Z_ARRVAL_P(return_value), "bottomlabels", strlen("bottomlabels")+1, &tmp_arr1,
- sizeof(tmp_arr1), NULL);
+ mapscript_hash_update(Z_ARRVAL_P(return_value), "bottomlabels", tmp_arr1);
MAKE_STD_ZVAL(tmp_arr1);
- array_init(tmp_arr1);
+ mapscript_array_init(tmp_arr1);
for (i=0; i<values->nBottom; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_double(tmp_arr1, values->pasBottom[i].x);
add_next_index_double(tmp_arr1, values->pasBottom[i].y);
+#else
+ add_next_index_double(&tmp_arr1, values->pasBottom[i].x);
+ add_next_index_double(&tmp_arr1, values->pasBottom[i].y);
+#endif
}
- zend_hash_update(Z_ARRVAL_P(return_value), "bottompoints", strlen("bottompoints")+1, &tmp_arr1,
- sizeof(tmp_arr1), NULL);
+ mapscript_hash_update(Z_ARRVAL_P(return_value), "bottompoints", tmp_arr1);
/*LEFT*/
add_assoc_double(return_value, "leftnumpoints", values->nLeft);
MAKE_STD_ZVAL(tmp_arr1);
- array_init(tmp_arr1);
+ mapscript_array_init(tmp_arr1);
for (i=0; i<values->nLeft; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_string(tmp_arr1, values->papszLeftLabels[i],1);
+#else
+ add_next_index_string(&tmp_arr1, values->papszLeftLabels[i]);
+#endif
}
- zend_hash_update(Z_ARRVAL_P(return_value), "leftlabels", strlen("leftlabels")+1, &tmp_arr1,
- sizeof(tmp_arr1), NULL);
+ mapscript_hash_update(Z_ARRVAL_P(return_value), "leftlabels", tmp_arr1);
MAKE_STD_ZVAL(tmp_arr1);
- array_init(tmp_arr1);
+ mapscript_array_init(tmp_arr1);
for (i=0; i<values->nLeft; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_double(tmp_arr1, values->pasLeft[i].x);
add_next_index_double(tmp_arr1, values->pasLeft[i].y);
-
+#else
+ add_next_index_double(&tmp_arr1, values->pasLeft[i].x);
+ add_next_index_double(&tmp_arr1, values->pasLeft[i].y);
+#endif
}
- zend_hash_update(Z_ARRVAL_P(return_value), "leftpoints", strlen("leftpoints")+1, &tmp_arr1,
- sizeof(tmp_arr1), NULL);
+ mapscript_hash_update(Z_ARRVAL_P(return_value), "leftpoints", tmp_arr1);
/*RIGHT*/
add_assoc_double(return_value, "rightnumpoints", values->nRight);
MAKE_STD_ZVAL(tmp_arr1);
- array_init(tmp_arr1);
+ mapscript_array_init(tmp_arr1);
for (i=0; i<values->nRight; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_string(tmp_arr1, values->papszRightLabels[i],1);
+#else
+ add_next_index_string(&tmp_arr1, values->papszRightLabels[i]);
+#endif
}
- zend_hash_update(Z_ARRVAL_P(return_value), "rightlabels", strlen("rightlabels")+1, &tmp_arr1,
- sizeof(tmp_arr1), NULL);
+ mapscript_hash_update(Z_ARRVAL_P(return_value), "rightlabels", tmp_arr1);
MAKE_STD_ZVAL(tmp_arr1);
- array_init(tmp_arr1);
+ mapscript_array_init(tmp_arr1);
for (i=0; i<values->nRight; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_double(tmp_arr1, values->pasRight[i].x);
add_next_index_double(tmp_arr1, values->pasRight[i].y);
-
+#else
+ add_next_index_double(&tmp_arr1, values->pasRight[i].x);
+ add_next_index_double(&tmp_arr1, values->pasRight[i].y);
+#endif
}
- zend_hash_update(Z_ARRVAL_P(return_value), "rightpoints", strlen("rightpoints")+1, &tmp_arr1,
- sizeof(tmp_arr1), NULL);
+ mapscript_hash_update(Z_ARRVAL_P(return_value), "rightpoints", tmp_arr1);
msGraticuleLayerFreeIntersectionPoints(values);
}
@@ -2024,8 +2075,8 @@ PHP_METHOD(layerObj, getShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_result = (php_result_object *) zend_object_store_get_object(zresult TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+ php_result = MAPSCRIPT_OBJ_P(php_result_object, zresult);
/* Create a new shapeObj to hold the result
* Note that the type used to create the shape (MS_NULL) does not matter
@@ -2062,13 +2113,13 @@ PHP_METHOD(layerObj, getGeomTransform)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
if (php_layer->layer->_geomtransform.type == MS_GEOMTRANSFORM_NONE ||
!php_layer->layer->_geomtransform.string)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETURN_STRING(php_layer->layer->_geomtransform.string, 1);
+ MAPSCRIPT_RETURN_STRING(php_layer->layer->_geomtransform.string, 1);
}
/* }}} */
@@ -2089,7 +2140,7 @@ PHP_METHOD(layerObj, setGeomTransform)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
msFree(php_layer->layer->_geomtransform.string);
if (transform_len > 0) {
@@ -2118,10 +2169,10 @@ PHP_METHOD(layerObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
MAPSCRIPT_DELREF(php_layer->offsite);
- if (php_layer->grid && Z_TYPE_P(php_layer->grid) == IS_OBJECT)
+ if (ZVAL_NOT_UNDEF(php_layer->grid) && MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT)
MAPSCRIPT_DELREF(php_layer->grid);
MAPSCRIPT_DELREF(php_layer->metadata);
MAPSCRIPT_DELREF(php_layer->bindvals);
@@ -2195,21 +2246,110 @@ void mapscript_create_layer(layerObj *layer, parent_object parent, zval *return_
{
php_layer_object * php_layer;
object_init_ex(return_value, mapscript_ce_layer);
- php_layer = (php_layer_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, return_value);
php_layer->layer = layer;
if (layer->connectiontype != MS_GRATICULE || layer->layerinfo == NULL) {
MAKE_STD_ZVAL(php_layer->grid);
+#if PHP_VERSION_ID < 70000
ZVAL_NULL(php_layer->grid);
+#else
+ ZVAL_NULL(&php_layer->grid);
+#endif
}
- if (parent.val)
+ if(ZVAL_NOT_UNDEF(parent.val))
php_layer->is_ref = 1;
php_layer->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_layer_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_layer_object *php_layer;
+
+ php_layer = ecalloc(1, sizeof(*php_layer) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_layer->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_layer->zobj, ce);
+
+ php_layer->zobj.handlers = &mapscript_layer_object_handlers;
+
+ php_layer->is_ref = 0;
+ MAPSCRIPT_INIT_PARENT(php_layer->parent);
+ ZVAL_UNDEF(&php_layer->offsite);
+ ZVAL_UNDEF(&php_layer->grid);
+ ZVAL_UNDEF(&php_layer->metadata);
+ ZVAL_UNDEF(&php_layer->bindvals);
+ ZVAL_UNDEF(&php_layer->cluster);
+ ZVAL_UNDEF(&php_layer->projection);
+ ZVAL_UNDEF(&php_layer->extent);
+
+ return &php_layer->zobj;
+}
+
+static void mapscript_layer_free_object(zend_object *object)
+{
+ php_layer_object *php_layer;
+
+ php_layer = (php_layer_object *)((char *)object - XtOffsetOf(php_layer_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_layer->parent);
+ MAPSCRIPT_DELREF(php_layer->offsite);
+ if (ZVAL_NOT_UNDEF(php_layer->grid) && MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT)
+ MAPSCRIPT_DELREF(php_layer->grid);
+ MAPSCRIPT_DELREF(php_layer->metadata);
+ MAPSCRIPT_DELREF(php_layer->bindvals);
+ MAPSCRIPT_DELREF(php_layer->cluster);
+ MAPSCRIPT_DELREF(php_layer->projection);
+ MAPSCRIPT_DELREF(php_layer->extent);
+
+ if (php_layer->layer && !php_layer->is_ref) {
+ layerObj_destroy(php_layer->layer);
+ }
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_layer_clone_object(zval *zobj)
+{
+ php_layer_object *php_layer_old, *php_layer_new;
+ zend_object* zobj_new;
+
+ php_layer_old = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
+
+ zobj_new = mapscript_layer_create_object(mapscript_ce_layer);
+ php_layer_new = (php_layer_object *)((char *)zobj_new - XtOffsetOf(php_layer_object, zobj));
+
+ zend_objects_clone_members(&php_layer_new->zobj, &php_layer_old->zobj);
+
+ php_layer_new->layer = layerObj_clone(php_layer_old->layer);
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(layer)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "layerObj", layer_functions);
+ mapscript_ce_layer = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_layer->create_object = mapscript_layer_create_object;
+ mapscript_ce_layer->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_layer_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_layer_object_handlers));
+ mapscript_layer_object_handlers.free_obj = mapscript_layer_free_object;
+ mapscript_layer_object_handlers.clone_obj = mapscript_layer_clone_object;
+ mapscript_layer_object_handlers.offset = XtOffsetOf(php_layer_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_layer_object_destroy(void *object TSRMLS_DC)
{
php_layer_object *php_layer = (php_layer_object *)object;
@@ -2269,7 +2409,7 @@ static zend_object_value mapscript_layer_object_clone(zval *zobj TSRMLS_DC)
php_layer_object *php_layer_old, *php_layer_new;
zend_object_value new_ov;
- php_layer_old = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_layer_old = MAPSCRIPT_OBJ_P(php_layer_object, zobj);
new_ov = mapscript_layer_object_new_ex(mapscript_ce_layer, &php_layer_new TSRMLS_CC);
zend_objects_clone_members(&php_layer_new->std, new_ov, &php_layer_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC);
@@ -2295,4 +2435,4 @@ PHP_MINIT_FUNCTION(layer)
return SUCCESS;
}
-
+#endif
diff --git a/mapscript/php/legend.c b/mapscript/php/legend.c
index 52258fec5..29e080df7 100644
--- a/mapscript/php/legend.c
+++ b/mapscript/php/legend.c
@@ -30,6 +30,9 @@
**********************************************************************/
#include "php_mapscript.h"
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_legend_object_handlers;
+#endif
zend_class_entry *mapscript_ce_legend;
@@ -69,7 +72,7 @@ PHP_METHOD(legendObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj);
IF_GET_LONG("height", php_legend->legend->height)
else IF_GET_LONG("width", php_legend->legend->width)
@@ -105,7 +108,7 @@ PHP_METHOD(legendObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj);
IF_SET_LONG("height", php_legend->legend->height, value)
else IF_SET_LONG("width", php_legend->legend->width, value)
@@ -144,7 +147,7 @@ PHP_METHOD(legendObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj);
status = legendObj_updateFromString(php_legend->legend, snippet);
@@ -172,14 +175,14 @@ PHP_METHOD(legendObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj);
value = legendObj_convertToString(php_legend->legend);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -198,7 +201,7 @@ PHP_METHOD(legendObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj);
MAPSCRIPT_DELREF(php_legend->outlinecolor);
MAPSCRIPT_DELREF(php_legend->imagecolor);
@@ -217,11 +220,67 @@ zend_function_entry legend_functions[] = {
}
};
+
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_legend_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_legend_object *php_legend;
+
+ php_legend = ecalloc(1, sizeof(*php_legend) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_legend->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_legend->zobj, ce);
+
+ php_legend->zobj.handlers = &mapscript_legend_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_legend->parent);
+ ZVAL_UNDEF(&php_legend->outlinecolor);
+ ZVAL_UNDEF(&php_legend->imagecolor);
+ ZVAL_UNDEF(&php_legend->label);
+
+ return &php_legend->zobj;
+}
+
+static void mapscript_legend_free_object(zend_object *object)
+{
+ php_legend_object *php_legend;
+
+ php_legend = (php_legend_object *)((char *)object - XtOffsetOf(php_legend_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_legend->parent);
+ MAPSCRIPT_DELREF(php_legend->outlinecolor);
+ MAPSCRIPT_DELREF(php_legend->imagecolor);
+ MAPSCRIPT_DELREF(php_legend->label);
+
+ /* We don't need to free the legendObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(legend)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "legendObj", legend_functions);
+ mapscript_ce_legend = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_legend->create_object = mapscript_legend_create_object;
+ mapscript_ce_legend->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_legend_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_legend_object_handlers));
+ mapscript_legend_object_handlers.free_obj = mapscript_legend_free_object;
+ mapscript_legend_object_handlers.offset = XtOffsetOf(php_legend_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
void mapscript_create_legend(legendObj *legend, parent_object parent, zval *return_value TSRMLS_DC)
{
php_legend_object * php_legend;
object_init_ex(return_value, mapscript_ce_legend);
- php_legend = (php_legend_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, return_value);
php_legend->legend = legend;
php_legend->parent = parent;
@@ -275,3 +334,4 @@ PHP_MINIT_FUNCTION(legend)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/line.c b/mapscript/php/line.c
index cf73316a2..44aeb583c 100644
--- a/mapscript/php/line.c
+++ b/mapscript/php/line.c
@@ -87,7 +87,7 @@ PHP_METHOD(lineObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_line = (php_line_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, getThis());
if ((php_line->line = lineObj_new()) == NULL) {
mapscript_throw_exception("Unable to construct lineObj." TSRMLS_CC);
@@ -111,7 +111,7 @@ PHP_METHOD(lineObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj);
IF_GET_LONG("numpoints", php_line->line->numpoints)
else {
@@ -158,8 +158,8 @@ PHP_METHOD(lineObj, add)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point = (php_point_object *) zend_object_store_get_object(zobj_point TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj_point);
status = lineObj_add(php_line->line, php_point->point);
@@ -185,7 +185,7 @@ PHP_METHOD(lineObj, addXY)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj);
point.x = x;
point.y = y;
@@ -220,7 +220,7 @@ PHP_METHOD(lineObj, addXYZ)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj);
point.x = x;
point.y = y;
@@ -255,9 +255,9 @@ PHP_METHOD(lineObj, project)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_proj_in = (php_projection_object *) zend_object_store_get_object(zobj_proj_in TSRMLS_CC);
- php_proj_out = (php_projection_object *) zend_object_store_get_object(zobj_proj_out TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj);
+ php_proj_in = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_in);
+ php_proj_out = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_out);
status = lineObj_project(php_line->line, php_proj_in->projection, php_proj_out->projection);
if (status != MS_SUCCESS) {
@@ -284,7 +284,7 @@ PHP_METHOD(lineObj, point)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj);
if ( (index < 0) || (index >= php_line->line->numpoints)) {
mapscript_throw_exception("Point '%d' does not exist in this object." TSRMLS_CC, index);
@@ -314,14 +314,14 @@ PHP_METHOD(lineObj, set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj);
if ( (index < 0) || (index >= php_line->line->numpoints)) {
mapscript_throw_exception("Point '%d' does not exist in this object." TSRMLS_CC, index);
return;
}
- php_point = (php_point_object *) zend_object_store_get_object(zobj_point TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj_point);
php_line->line->point[index].x = php_point->point->x;
php_line->line->point[index].y = php_point->point->y;
@@ -350,16 +350,86 @@ void mapscript_create_line(lineObj *line, parent_object parent, zval *return_val
{
php_line_object * php_line;
object_init_ex(return_value, mapscript_ce_line);
- php_line = (php_line_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, return_value);
php_line->line = line;
- if (parent.val)
+ if (ZVAL_NOT_UNDEF(parent.val))
php_line->is_ref = 1;
php_line->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_line_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_line_object *php_line;
+
+ php_line = ecalloc(1, sizeof(*php_line) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_line->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_line->zobj, ce);
+
+ php_line->zobj.handlers = &mapscript_line_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_line->parent);
+ php_line->is_ref = 0;
+
+ return &php_line->zobj;
+}
+
+static void mapscript_line_free_object(zend_object *object)
+{
+ php_line_object *php_line;
+
+ php_line = (php_line_object *)((char *)object - XtOffsetOf(php_line_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_line->parent);
+
+ if (php_line->line && !php_line->is_ref) {
+ lineObj_destroy(php_line->line);
+ }
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_line_clone_object(zval *zobj)
+{
+ php_line_object *php_line_old, *php_line_new;
+ zend_object* zobj_new;
+
+ php_line_old = MAPSCRIPT_OBJ_P(php_line_object, zobj);
+
+ zobj_new = mapscript_line_create_object(mapscript_ce_line);
+ php_line_new = (php_line_object *)((char *)zobj_new - XtOffsetOf(php_line_object, zobj));
+
+ zend_objects_clone_members(&php_line_new->zobj, &php_line_old->zobj);
+
+ php_line_new->line = lineObj_clone(php_line_old->line);
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(line)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "lineObj", line_functions);
+ mapscript_ce_line = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_line->create_object = mapscript_line_create_object;
+ mapscript_ce_line->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_line_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_line_object_handlers));
+ mapscript_line_object_handlers.free_obj = mapscript_line_free_object;
+ mapscript_line_object_handlers.clone_obj = mapscript_line_clone_object;
+ mapscript_line_object_handlers.offset = XtOffsetOf(php_line_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_line_object_destroy(void *object TSRMLS_DC)
{
php_line_object *php_line = (php_line_object *)object;
@@ -405,7 +475,7 @@ static zend_object_value mapscript_line_object_clone(zval *zobj TSRMLS_DC)
php_line_object *php_line_old, *php_line_new;
zend_object_value new_ov;
- php_line_old = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_line_old = MAPSCRIPT_OBJ_P(php_line_object, zobj);
new_ov = mapscript_line_object_new_ex(mapscript_ce_line, &php_line_new TSRMLS_CC);
zend_objects_clone_members(&php_line_new->std, new_ov, &php_line_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC);
@@ -432,3 +502,4 @@ PHP_MINIT_FUNCTION(line)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/map.c b/mapscript/php/map.c
index aa477375a..b8fcfda86 100644
--- a/mapscript/php/map.c
+++ b/mapscript/php/map.c
@@ -312,9 +312,11 @@ ZEND_BEGIN_ARG_INFO_EX(map_removeLayer_args, 0, 0, 1)
ZEND_ARG_INFO(0, index)
ZEND_END_ARG_INFO()
+#ifdef disabled
ZEND_BEGIN_ARG_INFO_EX(map_getLabel_args, 0, 0, 1)
ZEND_ARG_INFO(0, index)
ZEND_END_ARG_INFO()
+#endif
/* {{{ proto void __construct(string mapFileName, newMapPath)
Create a new mapObj instance. */
@@ -337,7 +339,7 @@ PHP_METHOD(mapObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *)zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
map = mapObj_new(filename, path);
@@ -365,7 +367,7 @@ PHP_METHOD(mapObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
IF_GET_LONG("numlayers", php_map->map->numlayers)
else IF_GET_STRING("name", php_map->map->name)
@@ -424,7 +426,7 @@ PHP_METHOD(mapObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
IF_SET_STRING("name", php_map->map->name, value)
else IF_SET_LONG("status", php_map->map->status, value)
@@ -487,7 +489,7 @@ PHP_METHOD(mapObj, getSymbolByName)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
symbolId = mapObj_getSymbolByName(php_map->map, symbolName);
@@ -514,7 +516,7 @@ PHP_METHOD(mapObj, getSymbolObjectById)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if ( symbolId < 0 || symbolId >= php_map->map->symbolset.numsymbols) {
mapscript_throw_exception("Invalid symbol index." TSRMLS_CC);
@@ -543,7 +545,7 @@ PHP_METHOD(mapObj, prepareQuery)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
mapObj_prepareQuery(php_map->map);
}
@@ -564,7 +566,7 @@ PHP_METHOD(mapObj, prepareImage)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
image = mapObj_prepareImage(php_map->map);
if (image == NULL) {
@@ -593,7 +595,7 @@ PHP_METHOD(mapObj, draw)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
image = mapObj_draw(php_map->map);
if (image == NULL) {
@@ -620,7 +622,7 @@ PHP_METHOD(mapObj, drawQuery)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
image = mapObj_drawQuery(php_map->map);
if (image == NULL) {
@@ -647,7 +649,7 @@ PHP_METHOD(mapObj, drawLegend)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
image = mapObj_drawLegend(php_map->map);
if (image == NULL) {
@@ -675,7 +677,7 @@ PHP_METHOD(mapObj, drawReferenceMap)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
image = mapObj_drawReferenceMap(php_map->map);
if (image == NULL) {
@@ -703,7 +705,7 @@ PHP_METHOD(mapObj, drawScaleBar)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
image = mapObj_drawScalebar(php_map->map);
if (image == NULL) {
@@ -734,8 +736,8 @@ PHP_METHOD(mapObj, embedLegend)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
retval = mapObj_embedLegend(php_map->map, php_image->image);
if ( (retval == MS_FAILURE) || (retval == -1) ) {
@@ -766,8 +768,8 @@ PHP_METHOD(mapObj, embedScaleBar)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
retval = mapObj_embedScalebar(php_map->map, php_image->image);
if ( (retval == MS_FAILURE) || (retval == -1) ) {
@@ -798,8 +800,8 @@ PHP_METHOD(mapObj, drawLabelCache)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
retval = mapObj_drawLabelCache(php_map->map, php_image->image);
if ( (retval == MS_FAILURE) || (retval == -1) ) {
@@ -830,7 +832,7 @@ PHP_METHOD(mapObj, getLayer)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
layer = mapObj_getLayer(php_map->map, index);
if (layer == NULL) {
@@ -864,7 +866,7 @@ PHP_METHOD(mapObj, getLayerByName)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
layer = mapObj_getLayerByName(php_map->map, layerName);
if (layer == NULL) {
@@ -898,7 +900,7 @@ PHP_METHOD(mapObj, getColorByIndex)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
palette = php_map->map->palette;
@@ -934,7 +936,7 @@ PHP_METHOD(mapObj, setExtent)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = msMapSetExtent( php_map->map,
minx, miny,
@@ -967,8 +969,8 @@ PHP_METHOD(mapObj, setCenter)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
status = mapObj_setCenter(php_map->map, php_point->point);
if (status != MS_SUCCESS) {
@@ -996,7 +998,7 @@ PHP_METHOD(mapObj, offsetExtent)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_offsetExtent(php_map->map, x, y);
if (status != MS_SUCCESS) {
@@ -1025,7 +1027,7 @@ PHP_METHOD(mapObj, scaleExtent)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_scaleExtent(php_map->map, zoomFactor, minScaleDenom, maxScaleDenom);
if (status != MS_SUCCESS) {
@@ -1056,7 +1058,7 @@ PHP_METHOD(mapObj, setRotation)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_setRotation(php_map->map, angle);
if (status != MS_SUCCESS) {
@@ -1086,7 +1088,7 @@ PHP_METHOD(mapObj, setSize)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = msMapSetSize(php_map->map, width, height);
if (status != MS_SUCCESS) {
@@ -1126,11 +1128,11 @@ PHP_METHOD(mapObj, zoomPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_pixelPosition = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
- php_geoRefExtent = (php_rect_object *) zend_object_store_get_object(zgeoRefExtent TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_pixelPosition = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
+ php_geoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zgeoRefExtent);
if (zmaxGeoRefExtent)
- php_maxGeoRefExtent = (php_rect_object *) zend_object_store_get_object(zmaxGeoRefExtent TSRMLS_CC);
+ php_maxGeoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zmaxGeoRefExtent);
/* -------------------------------------------------------------------- */
/* check the validity of the parameters. */
@@ -1345,11 +1347,11 @@ PHP_METHOD(mapObj, zoomRectangle)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_pixelExtent = (php_rect_object *) zend_object_store_get_object(zpixelExtent TSRMLS_CC);
- php_geoRefExtent = (php_rect_object *) zend_object_store_get_object(zgeoRefExtent TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_pixelExtent = MAPSCRIPT_OBJ_P(php_rect_object, zpixelExtent);
+ php_geoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zgeoRefExtent);
if (zmaxGeoRefExtent)
- php_maxGeoRefExtent = (php_rect_object *) zend_object_store_get_object(zmaxGeoRefExtent TSRMLS_CC);
+ php_maxGeoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zmaxGeoRefExtent);
/* -------------------------------------------------------------------- */
@@ -1540,11 +1542,11 @@ PHP_METHOD(mapObj, zoomScale)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_pixelPosition = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
- php_geoRefExtent = (php_rect_object *) zend_object_store_get_object(zgeoRefExtent TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_pixelPosition = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
+ php_geoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zgeoRefExtent);
if (zmaxGeoRefExtent)
- php_maxGeoRefExtent = (php_rect_object *) zend_object_store_get_object(zmaxGeoRefExtent TSRMLS_CC);
+ php_maxGeoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zmaxGeoRefExtent);
/* -------------------------------------------------------------------- */
/* check the validity of the parameters. */
@@ -1771,8 +1773,8 @@ PHP_METHOD(mapObj, queryByPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
status = mapObj_queryByPoint(php_map->map, php_point->point, mode, buffer);
if (status != MS_SUCCESS) {
@@ -1800,8 +1802,8 @@ PHP_METHOD(mapObj, queryByRect)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_rect = (php_rect_object *) zend_object_store_get_object(zrect TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zrect);
status = mapObj_queryByRect(php_map->map, *(php_rect->rect));
if (status != MS_SUCCESS) {
@@ -1836,8 +1838,8 @@ PHP_METHOD(mapObj, queryByShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
status = mapObj_queryByShape(php_map->map, php_shape->shape);
if (status != MS_SUCCESS) {
@@ -1864,7 +1866,7 @@ PHP_METHOD(mapObj, queryByFeatures)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_queryByFeatures(php_map->map, slayer);
if (status != MS_SUCCESS) {
@@ -1902,7 +1904,7 @@ PHP_METHOD(mapObj, queryByIndex)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_queryByIndex(php_map->map, layerIndex,
tileIndex,
@@ -1933,7 +1935,7 @@ PHP_METHOD(mapObj, queryByFilter)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_queryByFilter(php_map->map, string);
if (status != MS_SUCCESS) {
@@ -1963,7 +1965,7 @@ PHP_METHOD(mapObj, saveQuery)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_saveQuery(php_map->map, filename, results);
@@ -1991,7 +1993,7 @@ PHP_METHOD(mapObj, saveQueryAsGML)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = msGMLWriteQuery(php_map->map, filename, namespace);
@@ -2017,7 +2019,7 @@ PHP_METHOD(mapObj, loadQuery)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_loadQuery(php_map->map, filename);
@@ -2042,7 +2044,7 @@ PHP_METHOD(mapObj, freeQuery)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
mapObj_freeQuery(php_map->map, qlayer);
@@ -2068,7 +2070,7 @@ PHP_METHOD(mapObj, save)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_save(php_map->map, filename);
if (status != MS_SUCCESS) {
@@ -2100,7 +2102,7 @@ PHP_METHOD(mapObj, setProjection)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapscript_map_setProjection(MS_FALSE, php_map,
projection, setUnitsAndExtents TSRMLS_CC);
@@ -2123,14 +2125,14 @@ PHP_METHOD(mapObj, getProjection)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
projection = mapObj_getProjection(php_map->map);
if (projection == NULL) {
RETURN_NULL();
}
- RETVAL_STRING(projection, 1);
+ MAPSCRIPT_RETVAL_STRING(projection, 1);
free(projection);
}
/* }}} */
@@ -2154,7 +2156,7 @@ PHP_METHOD(mapObj, setWKTProjection)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapscript_map_setProjection(MS_TRUE, php_map,
projection, setUnitsAndExtents TSRMLS_CC);
@@ -2169,7 +2171,7 @@ PHP_METHOD(mapObj, getMetaData)
zval *zname;
zval *zobj = getThis();
php_map_object *php_map;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z",
@@ -2179,12 +2181,16 @@ PHP_METHOD(mapObj, getMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata);
MAPSCRIPT_CALL_METHOD_1(php_map->metadata, "get", retval, zname);
+#if PHP_VERSION_ID < 70000
RETURN_STRING(Z_STRVAL_P(retval),1);
+#else
+ RETURN_STRING(Z_STRVAL(retval));
+#endif
}
/* }}} */
@@ -2195,7 +2201,7 @@ PHP_METHOD(mapObj, setMetaData)
zval *zname, *zvalue;
zval *zobj = getThis();
php_map_object *php_map;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz",
@@ -2205,12 +2211,16 @@ PHP_METHOD(mapObj, setMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata);
MAPSCRIPT_CALL_METHOD_2(php_map->metadata, "set", retval, zname, zvalue);
+#if PHP_VERSION_ID < 70000
RETURN_LONG(Z_LVAL_P(retval));
+#else
+ RETURN_LONG(Z_LVAL(retval));
+#endif
}
/* }}} */
@@ -2221,7 +2231,7 @@ PHP_METHOD(mapObj, removeMetaData)
zval *zname;
zval *zobj = getThis();
php_map_object *php_map;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z",
@@ -2231,12 +2241,16 @@ PHP_METHOD(mapObj, removeMetaData)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata);
MAPSCRIPT_CALL_METHOD_1(php_map->metadata, "remove", retval, zname);
+#if PHP_VERSION_ID < 70000
RETURN_LONG(Z_LVAL_P(retval));
+#else
+ RETURN_LONG(Z_LVAL(retval));
+#endif
}
/* }}} */
@@ -2260,7 +2274,7 @@ PHP_METHOD(mapObj, getLayersIndexByGroup)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
array_init(return_value);
indexes = mapObj_getLayersIndexByGroup(php_map->map, groupName, &count);
@@ -2290,7 +2304,7 @@ PHP_METHOD(mapObj, getAllGroupNames)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
array_init(return_value);
if (php_map->map->numlayers > 0) {
@@ -2298,7 +2312,11 @@ PHP_METHOD(mapObj, getAllGroupNames)
for (i=0; i<numTok; i++) {
/* add a copy of the group name to the PHP array */
+#if PHP_VERSION_ID < 70000
add_next_index_string(return_value, groups[i], 1);
+#else
+ add_next_index_string(return_value, groups[i]);
+#endif
free(groups[i]);
}
free(groups);
@@ -2322,12 +2340,16 @@ PHP_METHOD(mapObj, getAllLayerNames)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
array_init(return_value);
count = php_map->map->numlayers;
for (i=0; i<count; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_string(return_value, php_map->map->layers[i]->name, 1);
+#else
+ add_next_index_string(return_value, php_map->map->layers[i]->name);
+#endif
}
}
/* }}} */
@@ -2349,7 +2371,7 @@ PHP_METHOD(mapObj, moveLayerUp)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_moveLayerup(php_map->map, index);
@@ -2374,7 +2396,7 @@ PHP_METHOD(mapObj, moveLayerDown)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_moveLayerdown(php_map->map, index);
@@ -2400,7 +2422,7 @@ PHP_METHOD(mapObj, getLayersDrawingOrder)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
array_init(return_value);
@@ -2436,7 +2458,8 @@ PHP_METHOD(mapObj, getLayersDrawingOrder)
PHP_METHOD(mapObj, setLayersDrawingOrder)
{
zval *zobj = getThis();
- zval *zindexes, **ppzval;
+ zval *zindexes;
+ MAPSCRIPT_ZVAL_P ppzval;
HashTable *indexes_hash = NULL;
int *indexes = NULL;
int numElements = 0;
@@ -2451,7 +2474,7 @@ PHP_METHOD(mapObj, setLayersDrawingOrder)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
indexes_hash = Z_ARRVAL_P(zindexes);
numElements = zend_hash_num_elements(indexes_hash);
@@ -2468,7 +2491,11 @@ PHP_METHOD(mapObj, setLayersDrawingOrder)
for(zend_hash_internal_pointer_reset(indexes_hash);
zend_hash_has_more_elements(indexes_hash) == SUCCESS;
zend_hash_move_forward(indexes_hash), ++i) {
+#if PHP_VERSION_ID < 70000
zend_hash_get_current_data(indexes_hash, (void **)&ppzval);
+#else
+ ppzval = zend_hash_get_current_data(indexes_hash);
+#endif
indexes[i] = Z_LVAL_PP(ppzval);
}
@@ -2506,7 +2533,7 @@ PHP_METHOD(mapObj, processTemplate)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
indexes_hash = Z_ARRVAL_P(zindexes);
/**
@@ -2534,7 +2561,7 @@ PHP_METHOD(mapObj, processTemplate)
} else {
// Failed for some reason
mapscript_report_php_error(E_WARNING, "processTemplate: failed reading array" TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
efree(papszNameValue);
@@ -2545,11 +2572,11 @@ PHP_METHOD(mapObj, processTemplate)
msFree(papszValue);
if (buffer) {
- RETVAL_STRING(buffer, 1);
+ MAPSCRIPT_RETVAL_STRING(buffer, 1);
free(buffer);
} else {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
}
/* }}} */
@@ -2578,7 +2605,7 @@ PHP_METHOD(mapObj, processQueryTemplate)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
indexes_hash = Z_ARRVAL_P(zindexes);
/**
@@ -2607,7 +2634,7 @@ PHP_METHOD(mapObj, processQueryTemplate)
} else {
// Failed for some reason
mapscript_report_php_error(E_WARNING, "processQueryTemplate: failed reading array" TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
efree(papszNameValue);
@@ -2619,11 +2646,11 @@ PHP_METHOD(mapObj, processQueryTemplate)
msFree(papszValue);
if (buffer) {
- RETVAL_STRING(buffer, 1);
+ MAPSCRIPT_RETVAL_STRING(buffer, 1);
free(buffer);
} else {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
}
/* }}} */
@@ -2651,7 +2678,7 @@ PHP_METHOD(mapObj, processLegendTemplate)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
indexes_hash = Z_ARRVAL_P(zindexes);
/**
@@ -2680,7 +2707,7 @@ PHP_METHOD(mapObj, processLegendTemplate)
} else {
// Failed for some reason
mapscript_report_php_error(E_WARNING, "processLegendTemplate: failed reading array" TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
efree(papszNameValue);
@@ -2692,11 +2719,11 @@ PHP_METHOD(mapObj, processLegendTemplate)
msFree(papszValue);
if (buffer) {
- RETVAL_STRING(buffer, 1);
+ MAPSCRIPT_RETVAL_STRING(buffer, 1);
free(buffer);
} else {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
}
/* }}} */
@@ -2718,7 +2745,7 @@ PHP_METHOD(mapObj, setSymbolSet)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if(filename_len > 0) {
if ((status = mapObj_setSymbolSet(php_map->map,
@@ -2748,7 +2775,7 @@ PHP_METHOD(mapObj, getNumSymbols)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
RETURN_LONG(php_map->map->symbolset.numsymbols);
}
@@ -2771,7 +2798,7 @@ PHP_METHOD(mapObj, setFontSet)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if(filename_len > 0) {
if ((status = mapObj_setFontSet(php_map->map,
@@ -2805,9 +2832,9 @@ PHP_METHOD(mapObj, selectOutputFormat)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- if (php_map->outputformat)
- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(php_map->outputformat TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ if (ZVAL_NOT_UNDEF(php_map->outputformat))
+ php_outputformat = MAPSCRIPT_OBJ(php_outputformat_object, php_map->outputformat);
if ((status = mapObj_selectOutputFormat(php_map->map,
type)) != MS_SUCCESS)
@@ -2815,7 +2842,7 @@ PHP_METHOD(mapObj, selectOutputFormat)
{
mapscript_report_php_error(E_WARNING, "Unable to set output format to '%s'" TSRMLS_CC,
type);
- } else if (php_map->outputformat) {
+ } else if (ZVAL_NOT_UNDEF(php_map->outputformat)) {
php_outputformat->outputformat = php_map->map->outputformat;
}
@@ -2841,8 +2868,8 @@ PHP_METHOD(mapObj, appendOutputFormat)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zoutputformat TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zoutputformat);
retval = msAppendOutputFormat(php_map->map, php_outputformat->outputformat);
@@ -2868,7 +2895,7 @@ PHP_METHOD(mapObj, removeOutputFormat)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if ((status = msRemoveOutputFormat(php_map->map, name)) != MS_SUCCESS)
@@ -2898,7 +2925,7 @@ PHP_METHOD(mapObj, getOutputFormat)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if (index < 0 || index >= php_map->map->numoutputformats) {
mapscript_throw_mapserver_exception("Invalid outputformat index." TSRMLS_CC);
@@ -2928,7 +2955,7 @@ PHP_METHOD(mapObj, saveMapContext)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if(filename_len > 0) {
if ((status = mapObj_saveMapContext(php_map->map, filename)) != MS_SUCCESS) {
@@ -2961,7 +2988,7 @@ PHP_METHOD(mapObj, loadMapContext)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if(filename_len > 0) {
if ((status = mapObj_loadMapContext(php_map->map, filename, unique)) != MS_SUCCESS) {
@@ -2994,7 +3021,7 @@ PHP_METHOD(mapObj, applySLD)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_applySLD(php_map->map, sldxml);
@@ -3021,7 +3048,7 @@ PHP_METHOD(mapObj, applySLDURL)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
status = mapObj_applySLDURL(php_map->map, sldurl);
@@ -3044,16 +3071,16 @@ PHP_METHOD(mapObj, generateSLD)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
buffer = mapObj_generateSLD(php_map->map);
if (buffer) {
- RETVAL_STRING(buffer, 1);
+ MAPSCRIPT_RETVAL_STRING(buffer, 1);
free(buffer);
} else {
mapscript_report_mapserver_error(E_WARNING TSRMLS_CC);
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
}
/* }}} */
@@ -3078,12 +3105,12 @@ PHP_METHOD(mapObj, getConfigOption)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if ((value = (char *)msGetConfigOption(php_map->map, key)) == NULL) {
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
} else {
- RETURN_STRING(value, 1);
+ MAPSCRIPT_RETURN_STRING(value, 1);
}
}
/* }}} */
@@ -3107,7 +3134,7 @@ PHP_METHOD(mapObj, setConfigOption)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
msSetConfigOption(php_map->map, key,value);
@@ -3129,7 +3156,7 @@ PHP_METHOD(mapObj, applyConfigOptions)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
msApplyMapConfigOptions(php_map->map);
RETURN_LONG(MS_SUCCESS);
@@ -3158,8 +3185,8 @@ PHP_METHOD(mapObj, loadOwsParameters)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_request = (php_owsrequest_object *) zend_object_store_get_object(zrequest TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_request = MAPSCRIPT_OBJ_P(php_owsrequest_object, zrequest);
if (!version) {
version = strdup("1.1.1");
@@ -3193,8 +3220,8 @@ PHP_METHOD(mapObj, owsDispatch)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_request = (php_owsrequest_object *) zend_object_store_get_object(zrequest TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_request = MAPSCRIPT_OBJ_P(php_owsrequest_object, zrequest);
status = mapObj_OWSDispatch(php_map->map, php_request->cgirequest);
@@ -3221,8 +3248,8 @@ PHP_METHOD(mapObj, insertLayer)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
if ((retval = mapObj_insertLayer(php_map->map, php_layer->layer, index)) < 0) {
@@ -3254,7 +3281,7 @@ PHP_METHOD(mapObj, removeLayer)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
if ((layer = mapObj_removeLayer(php_map->map, index)) == NULL) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -3287,7 +3314,7 @@ PHP_METHOD(mapObj, getLabel)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
labelCacheMember=mapObj_getLabel(php_map->map, index);
@@ -3316,14 +3343,14 @@ PHP_METHOD(mapObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
value = mapObj_convertToString(php_map->map);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -3352,7 +3379,7 @@ PHP_METHOD(mapObj, getLatLongExtent)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
geoRefExt.minx = php_map->map->extent.minx;
geoRefExt.miny = php_map->map->extent.miny;
@@ -3389,7 +3416,7 @@ PHP_METHOD(mapObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj);
MAPSCRIPT_DELREF(php_map->outputformat);
MAPSCRIPT_DELREF(php_map->extent);
@@ -3505,10 +3532,10 @@ static int mapscript_map_setProjection(int isWKTProj, php_map_object *php_map,
php_projection_object *php_projection = NULL;
php_rect_object *php_extent = NULL;
- if (php_map->projection)
- php_projection = (php_projection_object *) zend_object_store_get_object(php_map->projection TSRMLS_CC);
- if (php_map->extent)
- php_extent = (php_rect_object *) zend_object_store_get_object(php_map->extent TSRMLS_CC);
+ if (ZVAL_NOT_UNDEF(php_map->projection))
+ php_projection = MAPSCRIPT_OBJ(php_projection_object, php_map->projection);
+ if (ZVAL_NOT_UNDEF(php_map->extent))
+ php_extent = MAPSCRIPT_OBJ(php_rect_object, php_map->extent);
in = php_map->map->projection;
msInitProjection(&out);
@@ -3535,7 +3562,7 @@ static int mapscript_map_setProjection(int isWKTProj, php_map_object *php_map,
if (status == -1) {
mapscript_report_php_error(E_WARNING, "setProjection failed" TSRMLS_CC);
return MS_FAILURE;
- } else if (php_map->projection) {
+ } else if (ZVAL_NOT_UNDEF(php_map->projection)) {
php_projection->projection = &(php_map->map->projection);
}
@@ -3554,7 +3581,7 @@ static int mapscript_map_setProjection(int isWKTProj, php_map_object *php_map,
msCalculateScale(php_map->map->extent, php_map->map->units, php_map->map->width, php_map->map->height,
php_map->map->resolution, &(php_map->map->scaledenom));
- if (php_map->extent)
+ if (ZVAL_NOT_UNDEF(php_map->extent))
php_extent->rect = &(php_map->map->extent);
}
}
@@ -3570,10 +3597,103 @@ void mapscript_create_map(mapObj *map, zval *return_value TSRMLS_DC)
{
php_map_object * php_map;
object_init_ex(return_value, mapscript_ce_map);
- php_map = (php_map_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, return_value);
php_map->map = map;
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_map_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_map_object *php_map;
+
+ php_map = ecalloc(1, sizeof(*php_map) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_map->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_map->zobj, ce);
+
+ php_map->zobj.handlers = &mapscript_map_object_handlers;
+
+ ZVAL_UNDEF(&php_map->outputformat);
+ ZVAL_UNDEF(&php_map->extent);
+ ZVAL_UNDEF(&php_map->web);
+ ZVAL_UNDEF(&php_map->reference);
+ ZVAL_UNDEF(&php_map->imagecolor);
+ ZVAL_UNDEF(&php_map->scalebar);
+ ZVAL_UNDEF(&php_map->legend);
+ ZVAL_UNDEF(&php_map->querymap);
+#ifdef disabled
+ ZVAL_UNDEF(&php_map->labelcache);
+#endif
+ ZVAL_UNDEF(&php_map->projection);
+ ZVAL_UNDEF(&php_map->metadata);
+ ZVAL_UNDEF(&php_map->configoptions);
+
+ return &php_map->zobj;
+}
+
+static void mapscript_map_free_object(zend_object *object)
+{
+ php_map_object *php_map;
+
+ php_map = (php_map_object *)((char *)object - XtOffsetOf(php_map_object, zobj));
+
+ MAPSCRIPT_DELREF(php_map->outputformat);
+ MAPSCRIPT_DELREF(php_map->extent);
+ MAPSCRIPT_DELREF(php_map->web);
+ MAPSCRIPT_DELREF(php_map->reference);
+ MAPSCRIPT_DELREF(php_map->imagecolor);
+ MAPSCRIPT_DELREF(php_map->scalebar);
+ MAPSCRIPT_DELREF(php_map->legend);
+ MAPSCRIPT_DELREF(php_map->querymap);
+#ifdef disabled
+ MAPSCRIPT_DELREF(php_map->labelcache);
+#endif
+ MAPSCRIPT_DELREF(php_map->projection);
+ MAPSCRIPT_DELREF(php_map->metadata);
+ MAPSCRIPT_DELREF(php_map->configoptions);
+
+ mapObj_destroy(php_map->map);
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_map_clone_object(zval *zobj)
+{
+ php_map_object *php_map_old, *php_map_new;
+ zend_object* zobj_new;
+
+ php_map_old = MAPSCRIPT_OBJ_P(php_map_object, zobj);
+
+ zobj_new = mapscript_map_create_object(mapscript_ce_map);
+ php_map_new = (php_map_object *)((char *)zobj_new - XtOffsetOf(php_map_object, zobj));
+
+ zend_objects_clone_members(&php_map_new->zobj, &php_map_old->zobj);
+
+ php_map_new->map = mapObj_clone(php_map_old->map);
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(map)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "mapObj", map_functions);
+ mapscript_ce_map = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_map->create_object = mapscript_map_create_object;
+ mapscript_ce_map->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_map_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_map_object_handlers));
+ mapscript_map_object_handlers.free_obj = mapscript_map_free_object;
+ mapscript_map_object_handlers.clone_obj = mapscript_map_clone_object;
+ mapscript_map_object_handlers.offset = XtOffsetOf(php_map_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_map_object_destroy(void *object TSRMLS_DC)
{
php_map_object *php_map = (php_map_object *)object;
@@ -3641,7 +3761,7 @@ static zend_object_value mapscript_map_object_clone(zval *zobj TSRMLS_DC)
php_map_object *php_map_old, *php_map_new;
zend_object_value new_ov;
- php_map_old = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_map_old = MAPSCRIPT_OBJ_P(php_map_object, zobj);
new_ov = mapscript_map_object_new_ex(mapscript_ce_map, &php_map_new TSRMLS_CC);
zend_objects_clone_members(&php_map_new->std, new_ov, &php_map_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC);
@@ -3667,4 +3787,4 @@ PHP_MINIT_FUNCTION(map)
return SUCCESS;
}
-
+#endif
diff --git a/mapscript/php/mapscript_error.c b/mapscript/php/mapscript_error.c
index e2bef8ae5..dccf066d6 100644
--- a/mapscript/php/mapscript_error.c
+++ b/mapscript/php/mapscript_error.c
@@ -39,7 +39,11 @@
zend_class_entry *mapscript_ce_mapscriptexception;
+#if PHP_VERSION_ID >= 70000
+zend_object* mapscript_throw_exception(char *format TSRMLS_DC, ...)
+#else
zval* mapscript_throw_exception(char *format TSRMLS_DC, ...)
+#endif
{
va_list args;
char message[MAX_EXCEPTION_MSG];
@@ -53,7 +57,11 @@ zval* mapscript_throw_exception(char *format TSRMLS_DC, ...)
return zend_throw_exception(mapscript_ce_mapscriptexception, message, 0 TSRMLS_CC);
}
+#if PHP_VERSION_ID >= 70000
+zend_object* mapscript_throw_mapserver_exception(char *format TSRMLS_DC, ...)
+#else
zval* mapscript_throw_mapserver_exception(char *format TSRMLS_DC, ...)
+#endif
{
va_list args;
char message[MAX_EXCEPTION_MSG];
@@ -111,7 +119,12 @@ PHP_MINIT_FUNCTION(mapscript_error)
zend_class_entry ce;
INIT_CLASS_ENTRY(ce, "MapScriptException", NULL);
+
+#if PHP_VERSION_ID >= 70000
+ mapscript_ce_mapscriptexception = zend_register_internal_class_ex(&ce, zend_exception_get_default(TSRMLS_C));
+#else
mapscript_ce_mapscriptexception = zend_register_internal_class_ex(&ce, zend_exception_get_default(TSRMLS_C), "Exception" TSRMLS_CC);
+#endif
return SUCCESS;
}
diff --git a/mapscript/php/outputformat.c b/mapscript/php/outputformat.c
index a6dca9435..887a2de07 100644
--- a/mapscript/php/outputformat.c
+++ b/mapscript/php/outputformat.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_outputformat;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_outputformat_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(outputformat___construct_args, 0, 0, 1)
ZEND_ARG_INFO(0, driver)
@@ -79,7 +82,7 @@ PHP_METHOD(outputFormatObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_outputformat = (php_outputformat_object *)zend_object_store_get_object(zobj TSRMLS_CC);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj);
if ((php_outputformat->outputformat = outputFormatObj_new(driver, name)) == NULL) {
mapscript_throw_exception("Unable to construct outputFormatObj." TSRMLS_CC);
@@ -103,7 +106,7 @@ PHP_METHOD(outputFormatObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj);
IF_GET_STRING("name", php_outputformat->outputformat->name)
@@ -136,7 +139,7 @@ PHP_METHOD(outputFormatObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj);
IF_SET_STRING("name", php_outputformat->outputformat->name, value)
else IF_SET_STRING("mimetype", php_outputformat->outputformat->mimetype, value)
@@ -174,7 +177,7 @@ PHP_METHOD(outputFormatObj, setOption)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj);
msSetOutputFormatOption(php_outputformat->outputformat, property, value);
@@ -201,11 +204,11 @@ PHP_METHOD(outputFormatObj, getOption)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj);
value = msGetOutputFormatOption(php_outputformat->outputformat, property, "");
- RETURN_STRING((char*)value,1);
+ MAPSCRIPT_RETURN_STRING((char*)value,1);
}
/* }}} */
@@ -226,7 +229,7 @@ PHP_METHOD(outputFormatObj, validate)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj);
status = msOutputFormatValidate(php_outputformat->outputformat, MS_TRUE);
if (status != MS_TRUE) {
@@ -253,19 +256,19 @@ PHP_METHOD(outputFormatObj, getOptionByIndex)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj);
if (index < 0 || index >= php_outputformat->outputformat->numformatoptions) {
mapscript_throw_mapserver_exception("Invalid format option index." TSRMLS_CC);
return;
}
- RETURN_STRING(php_outputformat->outputformat->formatoptions[index],1);
+ MAPSCRIPT_RETURN_STRING(php_outputformat->outputformat->formatoptions[index],1);
}
/* }}} */
zend_function_entry outputformat_functions[] = {
- PHP_ME(outputFormatObj, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
+ PHP_ME(outputFormatObj, __construct, outputformat___construct_args, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
PHP_ME(outputFormatObj, __get, outputformat___get_args, ZEND_ACC_PUBLIC)
PHP_ME(outputFormatObj, __set, outputformat___set_args, ZEND_ACC_PUBLIC)
PHP_MALIAS(outputFormatObj, set, __set, NULL, ZEND_ACC_PUBLIC)
@@ -281,16 +284,69 @@ void mapscript_create_outputformat(outputFormatObj *outputformat, parent_object
{
php_outputformat_object * php_outputformat;
object_init_ex(return_value, mapscript_ce_outputformat);
- php_outputformat = (php_outputformat_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, return_value);
php_outputformat->outputformat = outputformat;
- if (parent.val)
+ if(ZVAL_NOT_UNDEF(parent.val))
php_outputformat->is_ref = 1;
php_outputformat->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_outputformat_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_outputformat_object *php_outputformat;
+
+ php_outputformat = ecalloc(1, sizeof(*php_outputformat) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_outputformat->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_outputformat->zobj, ce);
+
+ php_outputformat->zobj.handlers = &mapscript_outputformat_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_outputformat->parent);
+ php_outputformat->is_ref = 0;
+
+ return &php_outputformat->zobj;
+}
+
+static void mapscript_outputformat_free_object(zend_object *object)
+{
+ php_outputformat_object *php_outputformat;
+
+ php_outputformat = (php_outputformat_object *)((char *)object - XtOffsetOf(php_outputformat_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_outputformat->parent);
+
+ if (php_outputformat->outputformat && !php_outputformat->is_ref) {
+ outputFormatObj_destroy(php_outputformat->outputformat);
+ }
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(outputformat)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "outputFormatObj", outputformat_functions);
+ mapscript_ce_outputformat = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_outputformat->create_object = mapscript_outputformat_create_object;
+ mapscript_ce_outputformat->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_outputformat_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_outputformat_object_handlers));
+ mapscript_outputformat_object_handlers.free_obj = mapscript_outputformat_free_object;
+ mapscript_outputformat_object_handlers.offset = XtOffsetOf(php_outputformat_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
+
static void mapscript_outputformat_object_destroy(void *object TSRMLS_DC)
{
php_outputformat_object *php_outputformat = (php_outputformat_object *)object;
@@ -335,3 +391,4 @@ PHP_MINIT_FUNCTION(outputformat)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/owsrequest.c b/mapscript/php/owsrequest.c
index 11d999609..ce4a05362 100644
--- a/mapscript/php/owsrequest.c
+++ b/mapscript/php/owsrequest.c
@@ -39,6 +39,9 @@
char *owsrequest_getenv(const char *name, void *thread_context);
zend_class_entry *mapscript_ce_owsrequest;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_owsrequest_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(owsrequest___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -86,7 +89,7 @@ PHP_METHOD(OWSRequestObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj);
if ((request = cgirequestObj_new()) == NULL) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -112,7 +115,7 @@ PHP_METHOD(OWSRequestObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj);
IF_GET_LONG("numparams", php_owsrequest->cgirequest->NumParams)
@@ -157,24 +160,24 @@ PHP_METHOD(OWSRequestObj, __set)
PHP_METHOD(OWSRequestObj, loadParams)
{
zval *zobj = getThis();
- zval **val;
+ MAPSCRIPT_ZVAL_P val;
php_owsrequest_object *php_owsrequest;
void *thread_context;
+ PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
+ if (zend_parse_parameters_none() == FAILURE) {
+ PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+ return;
+ }
+ PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
+
#ifdef ZTS
thread_context = (void*)TSRMLS_C;
#else
thread_context = NULL;
#endif
- //PHP_MAPSCRIPT_ERROR_HANDLING(TRUE);
- if (zend_parse_parameters_none() == FAILURE) {
- //PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- return;
- }
- //PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
-
- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj);
if ( (STRING_EQUAL(sapi_module.name,"cli")) ||
(STRING_EQUAL(sapi_module.name,"cgi")) ||
@@ -184,6 +187,15 @@ PHP_METHOD(OWSRequestObj, loadParams)
// check if we have input data for GET method
if (SG(request_info).request_method &&
STRING_EQUAL(SG(request_info).request_method, "GET")) {
+#if PHP_VERSION_ID >= 70000
+ zend_is_auto_global_str("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
+ if ( !Z_ISUNDEF(PG(http_globals)[TRACK_VARS_SERVER]) &&
+ ((val = zend_hash_str_find(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), "QUERY_STRING", sizeof("QUERY_STRING")-1)) != NULL) &&
+ (Z_TYPE_P(val) == IS_STRING) &&
+ (Z_STRLEN_P(val) > 0) ) {
+ cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv, NULL, 0, thread_context);
+ }
+#else
zend_is_auto_global("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
if ( PG(http_globals)[TRACK_VARS_SERVER] &&
(zend_hash_find(PG(http_globals)[TRACK_VARS_SERVER]->value.ht, "QUERY_STRING", sizeof("QUERY_STRING"), (void **) &val) == SUCCESS) &&
@@ -191,24 +203,40 @@ PHP_METHOD(OWSRequestObj, loadParams)
(Z_STRLEN_PP(val) > 0) ) {
cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv, NULL, 0, thread_context);
}
+#endif
} else {
#if PHP_VERSION_ID >= 50600
php_stream *s = php_stream_temp_new();
php_stream *input = php_stream_open_wrapper("php://input", "r", 0, NULL);
+#if PHP_VERSION_ID >= 70000
+ zend_string *raw_post_data = NULL;
+#else
char *raw_post_data = NULL;
long raw_post_data_length = 0;
+#endif
/* php://input does not support stat */
php_stream_copy_to_stream_ex(input, s, -1, NULL);
php_stream_close(input);
php_stream_rewind(s);
+
- raw_post_data_length = php_stream_copy_to_mem(s, raw_post_data, -1, 0);
+#if PHP_VERSION_ID >= 70000
+ raw_post_data = php_stream_copy_to_mem(s, -1, 0);
+
+ cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv,
+ ZSTR_VAL(raw_post_data),
+ ZSTR_LEN(raw_post_data), thread_context);
+
+ if(raw_post_data) zend_string_free(raw_post_data);
+#else
+ raw_post_data_length = php_stream_copy_to_mem(s, raw_post_data, -1, 0);
cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv,
raw_post_data,
raw_post_data_length, thread_context);
+#endif
#else
cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv,
SG(request_info).raw_post_data,
@@ -240,7 +268,7 @@ PHP_METHOD(OWSRequestObj, setParameter)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj);
cgirequestObj_setParameter(php_owsrequest->cgirequest, name, value);
@@ -267,7 +295,7 @@ PHP_METHOD(OWSRequestObj, addParameter)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj);
cgirequestObj_addParameter(php_owsrequest->cgirequest, name, value);
@@ -276,7 +304,7 @@ PHP_METHOD(OWSRequestObj, addParameter)
/* }}} */
/* {{{ proto string owsrequest.getName(int index)
- Return the name of the parameter at index in the requests array of parameter names. */
+ Return the name of the parameter at index in the request's array of parameter names. */
PHP_METHOD(OWSRequestObj, getName)
{
long index;
@@ -292,13 +320,13 @@ PHP_METHOD(OWSRequestObj, getName)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj);
value = cgirequestObj_getName(php_owsrequest->cgirequest, index);
if (!value)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETURN_STRING(value,1);
+ MAPSCRIPT_RETURN_STRING(value,1);
}
/* }}} */
@@ -319,13 +347,13 @@ PHP_METHOD(OWSRequestObj, getValue)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj);
value = cgirequestObj_getValue(php_owsrequest->cgirequest, index);
if (!value)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETURN_STRING(value,1);
+ MAPSCRIPT_RETURN_STRING(value,1);
}
/* }}} */
@@ -347,13 +375,13 @@ PHP_METHOD(OWSRequestObj, getValueByName)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj);
value = cgirequestObj_getValueByName(php_owsrequest->cgirequest, name);
if (!value)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETURN_STRING(value,1);
+ MAPSCRIPT_RETURN_STRING(value,1);
}
/* }}} */
@@ -371,6 +399,7 @@ zend_function_entry owsrequest_functions[] = {
}
};
+#if PHP_VERSION_ID < 70000
char *owsrequest_getenv(const char *name, void *thread_context)
{
zval **val, **ppzval;
@@ -410,15 +439,108 @@ char *owsrequest_getenv(const char *name, void *thread_context)
return NULL;
}
+#else
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+char *owsrequest_getenv(const char *name, void *thread_context)
+{
+ zval *val, *ppzval;
+ zval cookie_result;
+ HashTable *cookies;
+ zend_string *string_key;
+ zend_string *result = NULL;
+ zend_ulong num_key;
+ size_t len, sum = 0;
+ int i = 0;
+ TSRMLS_FETCH_FROM_CTX(thread_context);
+
+ if (STRING_EQUAL(name, "HTTP_COOKIE")) {
+ cookies = Z_ARRVAL(PG(http_globals)[TRACK_VARS_COOKIE]);
+ for(zend_hash_internal_pointer_reset(cookies);
+ zend_hash_has_more_elements(cookies) == SUCCESS;
+ zend_hash_move_forward(cookies), ++i) {
+ ppzval = zend_hash_get_current_data(cookies);
+ zend_hash_get_current_key(cookies, &string_key, &num_key);
+ len = (ZSTR_LEN(string_key)+Z_STRLEN_P(ppzval)+2) * sizeof(char);
+ if(!result)
+ result = zend_string_alloc(len, 1);
+ else
+ result = zend_string_extend(result, sum + len, 1);
+ sprintf(&result->val[sum], "%s=%s;",ZSTR_VAL(string_key),Z_STRVAL_P(ppzval));
+ sum += len;
+ }
+ if (result){
+ ZVAL_STRINGL(&cookie_result, ZSTR_VAL(result), ZSTR_LEN(result));
+ zend_string_free(result);
+ return Z_STRVAL(cookie_result); /* this string will stay in memory until php-script exit */
+ }
+ else
+ return "";
+ } else {
+ zend_is_auto_global_str("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
+ if ( (!Z_ISUNDEF(PG(http_globals)[TRACK_VARS_SERVER])) &&
+ ((val = zend_hash_str_find(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), name, strlen(name))) != NULL) &&
+ (Z_TYPE_P(val) == IS_STRING)) {
+ return Z_STRVAL_P(val);
+ }
+ }
+
+ return NULL;
+}
+#endif
void mapscript_create_owsrequest(cgiRequestObj *cgirequest, zval *return_value TSRMLS_DC)
{
php_owsrequest_object * php_owsrequest;
object_init_ex(return_value, mapscript_ce_owsrequest);
- php_owsrequest = (php_owsrequest_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, return_value);
php_owsrequest->cgirequest = cgirequest;
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_owsrequest_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_owsrequest_object *php_owsrequest;
+
+ php_owsrequest = ecalloc(1, sizeof(*php_owsrequest) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_owsrequest->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_owsrequest->zobj, ce);
+
+ php_owsrequest->zobj.handlers = &mapscript_owsrequest_object_handlers;
+
+ return &php_owsrequest->zobj;
+}
+
+static void mapscript_owsrequest_free_object(zend_object *object)
+{
+ php_owsrequest_object *php_owsrequest;
+
+ php_owsrequest = (php_owsrequest_object *)((char *)object - XtOffsetOf(php_owsrequest_object, zobj));
+
+ cgirequestObj_destroy(php_owsrequest->cgirequest);
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(owsrequest)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "OWSRequestObj", owsrequest_functions);
+ mapscript_ce_owsrequest = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_owsrequest->create_object = mapscript_owsrequest_create_object;
+ mapscript_ce_owsrequest->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_owsrequest_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_owsrequest_object_handlers));
+ mapscript_owsrequest_object_handlers.free_obj = mapscript_owsrequest_free_object;
+ mapscript_owsrequest_object_handlers.offset = XtOffsetOf(php_owsrequest_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_owsrequest_object_destroy(void *object TSRMLS_DC)
{
php_owsrequest_object *php_owsrequest = (php_owsrequest_object *)object;
@@ -455,4 +577,4 @@ PHP_MINIT_FUNCTION(owsrequest)
return SUCCESS;
}
-
+#endif
diff --git a/mapscript/php/php_mapscript.c b/mapscript/php/php_mapscript.c
index 5ef38461f..37aa1ddea 100644
--- a/mapscript/php/php_mapscript.c
+++ b/mapscript/php/php_mapscript.c
@@ -197,9 +197,9 @@ PHP_FUNCTION(ms_newLayerObj)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
if (zlayer)
- php_layer = (php_layer_object *)zend_object_store_get_object(zlayer TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
if ((layer = layerObj_new(php_map->map)) == NULL) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -260,7 +260,7 @@ PHP_FUNCTION(ms_newRectObj)
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
object_init_ex(return_value, mapscript_ce_rect);
- php_rect = (php_rect_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, return_value);
if ((php_rect->rect = rectObj_new()) == NULL) {
mapscript_throw_exception("Unable to construct rectObj." TSRMLS_CC);
@@ -314,7 +314,7 @@ PHP_FUNCTION(ms_newLineObj)
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
object_init_ex(return_value, mapscript_ce_line);
- php_line = (php_line_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, return_value);
if ((php_line->line = lineObj_new()) == NULL) {
mapscript_throw_exception("Unable to construct lineObj." TSRMLS_CC);
@@ -342,9 +342,9 @@ PHP_FUNCTION(ms_newStyleObj)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_class = (php_class_object *)zend_object_store_get_object(zclass TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zclass);
if (zstyle)
- php_style = (php_style_object *)zend_object_store_get_object(zstyle TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zstyle);
if ((style = styleObj_new(php_class->class, (zstyle ? php_style->style : NULL))) == NULL) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -375,9 +375,9 @@ PHP_FUNCTION(ms_newClassObj)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
if (zclass)
- php_class = (php_class_object *) zend_object_store_get_object(zclass TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zclass);
if ((class = classObj_new(php_layer->layer, (zclass ? php_class->class:NULL))) == NULL) {
@@ -409,7 +409,7 @@ PHP_FUNCTION(ms_newSymbolObj)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
retval = msAddNewSymbol(php_map->map, symbolName);
@@ -433,7 +433,7 @@ PHP_FUNCTION(ms_newShapeObj)
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
object_init_ex(return_value, mapscript_ce_shape);
- php_shape = (php_shape_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, return_value);
if ((php_shape->shape = shapeObj_new(type)) == NULL) {
mapscript_throw_exception("Unable to construct shapeObj." TSRMLS_CC);
@@ -441,7 +441,7 @@ PHP_FUNCTION(ms_newShapeObj)
}
MAKE_STD_ZVAL(php_shape->values);
- array_init(php_shape->values);
+ mapscript_array_init(php_shape->values);
}
/* }}} */
@@ -462,7 +462,7 @@ PHP_FUNCTION(ms_shapeObjFromWkt)
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
object_init_ex(return_value, mapscript_ce_shape);
- php_shape = (php_shape_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, return_value);
if ((php_shape->shape = msShapeFromWKT(wkt)) == NULL) {
mapscript_throw_exception("Unable to construct shapeObj." TSRMLS_CC);
@@ -470,7 +470,7 @@ PHP_FUNCTION(ms_shapeObjFromWkt)
}
MAKE_STD_ZVAL(php_shape->values);
- array_init(php_shape->values);
+ mapscript_array_init(php_shape->values);
}
/* }}} */
@@ -538,7 +538,7 @@ PHP_FUNCTION(ms_newGridObj)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
php_layer->layer->connectiontype = MS_GRATICULE;
@@ -550,19 +550,29 @@ PHP_FUNCTION(ms_newGridObj)
php_layer->layer->grid = (graticuleObj *)malloc( sizeof( graticuleObj ) );
initGrid(php_layer->layer->grid);
- if (php_layer->grid && (Z_TYPE_P(php_layer->grid) == IS_OBJECT)) {
- php_grid = (php_grid_object *) zend_object_store_get_object(php_layer->grid TSRMLS_CC);
+ if (ZVAL_NOT_UNDEF(php_layer->grid) && (MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT)) {
+ php_grid = MAPSCRIPT_OBJ(php_grid_object, php_layer->grid);
php_grid->parent.child_ptr = NULL;
+#if PHP_VERSION_ID < 70000
zend_objects_store_del_ref(php_layer->grid TSRMLS_CC);
+#else
+ MAPSCRIPT_DELREF(php_layer->grid);
+#endif
}
MAKE_STD_ZVAL(php_layer->grid);
MAPSCRIPT_MAKE_PARENT(zlayer, &php_layer->grid);
+#if PHP_VERSION_ID < 70000
mapscript_create_grid((graticuleObj *)(php_layer->layer->grid), parent, php_layer->grid TSRMLS_CC);
zend_objects_store_add_ref(php_layer->grid TSRMLS_CC);
*return_value = *(php_layer->grid);
+#else
+ mapscript_create_grid((graticuleObj *)(php_layer->layer->grid), parent, &php_layer->grid TSRMLS_CC);
+
+ ZVAL_COPY_VALUE(return_value, &php_layer->grid);
+#endif
}
/* }}} */
@@ -616,7 +626,7 @@ PHP_FUNCTION(ms_GetVersion)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- RETURN_STRING(msGetVersion(), 1);
+ MAPSCRIPT_RETURN_STRING(msGetVersion(), 1);
}
/************************************************************************/
@@ -685,7 +695,7 @@ PHP_FUNCTION(ms_ioGetStdoutBufferString)
buffer = (char *) (buf->data);
- RETURN_STRINGL(buffer, buf->data_offset, 1);
+ MAPSCRIPT_RETURN_STRINGL(buffer, buf->data_offset, 1);
}
@@ -732,12 +742,35 @@ PHP_FUNCTION(ms_ioStripStdoutBufferContentType)
buf = msIO_stripStdoutBufferContentType();
if (buf) {
- RETURN_STRING((char *)buf, 1);
+ MAPSCRIPT_RETURN_STRING((char *)buf, 1);
} else {
RETURN_FALSE;
}
}
+PHP_FUNCTION(ms_ioGetAndStripStdoutBufferMimeHeaders)
+{
+ hashTableObj *hashtable;
+ char *value, *key = NULL;
+
+ if((hashtable = msIO_getAndStripStdoutBufferMimeHeaders())) {
+
+ array_init(return_value);
+
+ while((key = hashTableObj_nextKey(hashtable, key))) {
+ value = (char *) hashTableObj_get(hashtable, key);
+#if PHP_VERSION_ID < 70000
+ add_assoc_string(return_value, key, value, 1);
+#else
+ add_assoc_string(return_value, key, value);
+#endif
+ }
+ free(hashtable);
+ }
+ else
+ RETURN_FALSE;
+}
+
PHP_FUNCTION(ms_ioStripStdoutBufferContentHeaders)
{
msIO_stripStdoutBufferContentHeaders();
@@ -783,7 +816,7 @@ PHP_FUNCTION(ms_getCwd)
RETURN_FALSE;
}
- RETURN_STRING(buffer, 1);
+ MAPSCRIPT_RETURN_STRING(buffer, 1);
}
PHP_FUNCTION(ms_getPid)
@@ -824,7 +857,7 @@ PHP_FUNCTION(ms_getScale)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_geoRefExt = (php_rect_object *)zend_object_store_get_object(zgeoRefExt TSRMLS_CC);
+ php_geoRefExt = MAPSCRIPT_OBJ_P(php_rect_object, zgeoRefExt);
if (msCalculateScale(*(php_geoRefExt->rect), unit, width, height, resolution, &dfScale) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -870,7 +903,11 @@ PHP_FUNCTION(ms_tokenizeMap)
}
for (i=0; i<numtokens; i++) {
+#if PHP_VERSION_ID < 70000
add_next_index_string(return_value, tokens[i], 1);
+#else
+ add_next_index_string(return_value, tokens[i]);
+#endif
}
msFreeCharArray(tokens, numtokens);
@@ -909,6 +946,7 @@ zend_function_entry mapscript_functions[] = {
PHP_FE(ms_ioResetHandlers, NULL)
PHP_FE(ms_ioStripStdoutBufferContentType, NULL)
PHP_FE(ms_ioStripStdoutBufferContentHeaders, NULL)
+ PHP_FE(ms_ioGetAndStripStdoutBufferMimeHeaders, NULL)
PHP_FE(ms_ioGetStdoutBufferBytes, NULL) {
NULL, NULL, NULL
}
diff --git a/mapscript/php/php_mapscript.h b/mapscript/php/php_mapscript.h
index d961fb930..740aa4899 100644
--- a/mapscript/php/php_mapscript.h
+++ b/mapscript/php/php_mapscript.h
@@ -61,6 +61,71 @@
#define MAPSCRIPT_VERSION "($Revision$ $Date$)"
+#define MAPSCRIPT_VERSION "($Revision$ $Date$)"
+
+#if PHP_VERSION_ID >= 70000
+#define MAPSCRIPT_ZVAL zval
+#define MAPSCRIPT_ZVAL_P zval*
+
+#define Z_DVAL_PP(zv) Z_DVAL_P(zv)
+#define Z_LVAL_PP(zv) Z_LVAL_P(zv)
+#define Z_STRVAL_PP(zv) Z_STRVAL_P(zv)
+
+#define MAPSCRIPT_OBJ_P(t, o) (t *)((char *)(Z_OBJ_P(o)) - XtOffsetOf(t, zobj))
+#define MAPSCRIPT_OBJ(t, o) (t *)((char *)(Z_OBJ(o)) - XtOffsetOf(t, zobj))
+#define MAPSCRIPT_RETURN_STRINGL(a, b, c) RETURN_STRINGL(a, b)
+#define MAPSCRIPT_RETURN_STRING(a, b) RETURN_STRING(a)
+#define MAPSCRIPT_RETVAL_STRING(a, b) RETVAL_STRING(a)
+#define MAPSCRIPT_RETURN_STRINGL(a, b, c) RETURN_STRINGL(a, b)
+#define MAPSCRIPT_ZVAL_STRING(a, b, c) ZVAL_STRING(a, b)
+
+#define mapscript_is_auto_global(s, l) zend_is_auto_global_str(s, l)
+#define mapscript_array_init(zv) array_init(&zv)
+#define mapscript_add_next_index_string(a, b, c) add_next_index_string(a, b)
+#define mapscript_add_assoc_string(zv, b, c, d) add_assoc_string(&zv, b, c)
+#define mapscript_hash_get_current_key(a, b, c, d) zend_hash_get_current_key(a, b, c)
+#define mapscript_hash_update(ht, keyname, data) \
+ zend_hash_str_update(ht, keyname, strlen(keyname)+1, &data);
+
+#define MAPSCRIPT_TYPE(zv) Z_TYPE(zv)
+#define MAPSCRIPT_OBJCE(zv) Z_OBJCE(zv)
+#define MAKE_STD_ZVAL(zv) ZVAL_UNDEF(&zv)
+#define ZVAL_NOT_UNDEF(zv) !(Z_ISUNDEF(zv))
+#define ZVAL_IS_UNDEF(zv) (Z_ISUNDEF(zv))
+#define ZVAL_SET_UNDEF(zv) ZVAL_UNDEF(&zv)
+#define INIT_ZVAL(zv)
+#define INIT_PZVAL(a)
+
+#else
+
+#define MAPSCRIPT_ZVAL zval*
+#define MAPSCRIPT_ZVAL_P zval**
+
+#define MAPSCRIPT_OBJ_P(t, o) (t *) zend_object_store_get_object(o TSRMLS_CC)
+#define MAPSCRIPT_OBJ(t, o) (t *) zend_object_store_get_object(o TSRMLS_CC)
+#define MAPSCRIPT_RETURN_STRINGL(a, b, c) RETURN_STRINGL(a, b, c)
+#define MAPSCRIPT_RETURN_STRING(a, b) RETURN_STRING(a, b)
+#define MAPSCRIPT_RETVAL_STRING(a, b) RETVAL_STRING(a, b)
+#define MAPSCRIPT_RETVAL_STRINGL(a, b, c) RETURN_STRINGL(a, b, c)
+#define MAPSCRIPT_ZVAL_STRING(a, b, c) ZVAL_STRING(a, b, c)
+
+#define mapscript_is_auto_global(s, l) zend_is_auto_global(s, l)
+#define mapscript_array_init(zv) array_init(zv)
+#define mapscript_add_next_index_string(a, b, c) add_next_index_string(a, b, c)
+#define mapscript_add_assoc_string(a, b, c, d) add_assoc_string(a, b, c, d)
+#define mapscript_hash_get_current_key(a, b, c, d) zend_hash_get_current_key(a, b, c, d)
+#define mapscript_hash_update(ht, key, data) \
+ zend_hash_update(Z_ARRVAL_P(return_value), key, strlen(key)+1, &data, sizeof(data), NULL)
+
+#define MAPSCRIPT_TYPE(zv) Z_TYPE_P(zv)
+#define MAPSCRIPT_OBJCE(zv) Z_OBJCE_P(zv)
+#define ZVAL_NOT_UNDEF(zv) (zv != NULL)
+#define ZVAL_IS_UNDEF(zv) (zv == NULL)
+#define ZVAL_SET_UNDEF(zv) zv = NULL
+
+#endif
+
+
extern zend_module_entry mapscript_module_entry;
#define phpext_mapscript_ptr &mapscript_module_entry
@@ -104,6 +169,252 @@ extern zend_module_entry mapscript_module_entry;
#endif
/* MapScript objects */
+#if PHP_VERSION_ID >= 70000
+typedef struct _parent_object {
+ zval val; // the zval of the parent
+ zval *child_ptr; // a ptr to a parent property, which is the zval of the child object.
+ // should be set to NULL when the child is destroyed
+} parent_object;
+
+typedef struct _php_color_object {
+ parent_object parent;
+ colorObj *color;
+ zend_object zobj;
+} php_color_object;
+
+typedef struct _php_rect_object {
+ parent_object parent;
+ int is_ref;
+ rectObj *rect;
+ zend_object zobj;
+} php_rect_object;
+
+typedef struct _php_hashtable_object {
+ parent_object parent;
+ hashTableObj *hashtable;
+ zend_object zobj;
+} php_hashtable_object;
+
+typedef struct _php_symbol_object {
+ parent_object parent;
+ symbolObj *symbol;
+ zend_object zobj;
+} php_symbol_object;
+
+typedef struct _php_class_object {
+ parent_object parent; //old layer
+ zval metadata;
+ zval leader;
+ classObj *class;
+ zend_object zobj;
+} php_class_object;
+
+typedef struct _php_image_object {
+ imageObj *image;
+ zend_object zobj;
+} php_image_object;
+
+typedef struct _php_web_object {
+ parent_object parent;
+ zval extent;
+ zval metadata;
+ zval validation;
+ webObj *web;
+ zend_object zobj;
+} php_web_object;
+
+typedef struct _php_legend_object {
+ parent_object parent;
+ zval outlinecolor;
+ zval label;
+ zval imagecolor;
+ legendObj *legend;
+ zend_object zobj;
+} php_legend_object;
+
+typedef struct _php_outputformat_object {
+ parent_object parent;
+ int is_ref;
+ outputFormatObj *outputformat;
+ zend_object zobj;
+} php_outputformat_object;
+
+typedef struct _php_querymap_object {
+ parent_object parent;
+ zval color;
+ queryMapObj *querymap;
+ zend_object zobj;
+} php_querymap_object;
+
+typedef struct _php_grid_object {
+ parent_object parent;
+ graticuleObj *grid;
+ zend_object zobj;
+} php_grid_object;
+
+typedef struct _php_error_object {
+ errorObj *error;
+ zend_object zobj;
+} php_error_object;
+
+typedef struct _php_referencemap_object {
+ parent_object parent;
+ zval extent;
+ zval color;
+ zval outlinecolor;
+ referenceMapObj *referencemap;
+ zend_object zobj;
+} php_referencemap_object;
+
+typedef struct _php_label_object {
+ parent_object parent;
+ int is_ref;
+ zval color;
+ zval outlinecolor;
+ zval shadowcolor;
+ zval backgroundcolor;
+ zval backgroundshadowcolor;
+ zval leader;
+ labelObj *label;
+ zend_object zobj;
+} php_label_object;
+
+typedef struct _php_style_object {
+ parent_object parent;
+ zval color;
+ zval outlinecolor;
+ zval backgroundcolor;
+ zval mincolor;
+ zval maxcolor;
+ styleObj *style;
+ zend_object zobj;
+} php_style_object;
+
+typedef struct _php_projection_object {
+ parent_object parent;
+ int is_ref;
+ projectionObj *projection;
+ zend_object zobj;
+} php_projection_object;
+
+typedef struct _php_point_object {
+ parent_object parent;
+ int is_ref;
+ pointObj *point;
+ zend_object zobj;
+} php_point_object;
+
+typedef struct _php_line_object {
+ parent_object parent;
+ int is_ref;
+ lineObj *line;
+ zend_object zobj;
+} php_line_object;
+
+typedef struct _php_shape_object {
+ parent_object parent;
+ zval bounds;
+ zval values;
+ int is_ref;
+ shapeObj *shape;
+ zend_object zobj;
+} php_shape_object;
+
+typedef struct _php_shapefile_object {
+ zval bounds;
+ shapefileObj *shapefile;
+ zend_object zobj;
+} php_shapefile_object;
+
+#ifdef disabled
+typedef struct _php_labelcache_object {
+ parent_object parent;
+ labelCacheObj *labelcache;
+ zend_object zobj;
+} php_labelcache_object;
+#endif
+
+typedef struct _php_labelleader_object {
+ parent_object parent;
+ labelLeaderObj *labelleader;
+ zend_object zobj;
+} php_labelleader_object;
+
+#ifdef disabled
+typedef struct _php_labelcachemember_object {
+ parent_object parent;
+ zval labels; /* should be immutable */
+ zval point; /* should be immutable */
+ zval styles; /* should be immutable */
+ zval poly; /* should be immutable */
+ labelCacheMemberObj *labelcachemember;
+ zend_object zobj;
+} php_labelcachemember_object;
+#endif
+
+typedef struct _php_result_object {
+ parent_object parent;
+ resultObj *result;
+ zend_object zobj;
+} php_result_object;
+
+typedef struct _php_scalebar_object {
+ parent_object parent;
+ zval color;
+ zval backgroundcolor;
+ zval outlinecolor;
+ zval label;
+ zval imagecolor;
+ scalebarObj *scalebar;
+ zend_object zobj;
+} php_scalebar_object;
+
+typedef struct _php_owsrequest_object {
+ cgiRequestObj *cgirequest;
+ zend_object zobj;
+} php_owsrequest_object;
+
+typedef struct _php_layer_object {
+ parent_object parent; //old map
+ zval offsite;
+ zval grid;
+ zval metadata;
+ zval bindvals;
+ zval projection;
+ zval cluster;
+ zval extent;
+ int is_ref;
+ layerObj *layer;
+ zend_object zobj;
+} php_layer_object;
+
+typedef struct _php_map_object {
+ zval outputformat;
+ zval extent;
+ zval web;
+ zval reference;
+ zval imagecolor;
+ zval scalebar;
+ zval legend;
+ zval querymap;
+#ifdef disabled
+ zval labelcache;
+#endif
+ zval projection;
+ zval metadata;
+ zval configoptions;
+ mapObj *map;
+ zend_object zobj;
+} php_map_object;
+
+typedef struct _php_cluster_object {
+ parent_object parent;
+ int is_ref;
+ clusterObj *cluster;
+ zend_object zobj;
+} php_cluster_object;
+#else
+/* PHP5 object structs */
typedef struct _parent_object {
zval *val; // the zval of the parent
zval **child_ptr; // a ptr to a parent property, which point to the child object.
@@ -347,6 +658,7 @@ typedef struct _php_cluster_object {
int is_ref;
clusterObj *cluster;
} php_cluster_object;
+#endif
/* Lifecyle functions*/
PHP_MINIT_FUNCTION(mapscript);
@@ -403,6 +715,7 @@ PHP_FUNCTION(ms_ioGetStdoutBufferString);
PHP_FUNCTION(ms_ioResetHandlers);
PHP_FUNCTION(ms_ioStripStdoutBufferContentType);
PHP_FUNCTION(ms_ioStripStdoutBufferContentHeaders);
+PHP_FUNCTION(ms_ioGetAndStripStdoutBufferMimeHeaders);
PHP_FUNCTION(ms_ioGetStdoutBufferBytes);
/* object constructors */
@@ -457,14 +770,17 @@ extern zend_class_entry *mapscript_ce_layer;
extern zend_class_entry *mapscript_ce_map;
extern zend_class_entry *mapscript_ce_cluster;
+#if PHP_VERSION_ID < 70000
/* PHP Object constructors */
extern zend_object_value mapscript_object_new(zend_object *zobj, zend_class_entry *ce,
void (*zend_objects_free_object) TSRMLS_DC);
extern zend_object_value mapscript_object_new_ex(zend_object *zobj, zend_class_entry *ce,
void (*zend_objects_free_object),
zend_object_handlers *object_handlers TSRMLS_DC);
+#endif /* PHP_VERSION_ID < 70000 */
+
extern void mapscript_fetch_object(zend_class_entry *ce, zval* zval_parent, php_layer_object* layer,
- void *internal_object, zval **php_object_storage TSRMLS_DC);
+ void *internal_object, MAPSCRIPT_ZVAL_P php_object_storage TSRMLS_DC);
extern void mapscript_create_color(colorObj *color, parent_object parent, zval *return_value TSRMLS_DC);
extern void mapscript_create_rect(rectObj *rect, parent_object php_parent, zval *return_value TSRMLS_DC);
extern void mapscript_create_hashtable(hashTableObj *hashtable, parent_object parent, zval *return_value TSRMLS_DC);
@@ -504,9 +820,17 @@ extern void mapscript_create_cluster(clusterObj *cluster, parent_object php_pare
/* Exported functions for PHP Mapscript API */
/* throw a MapScriptException */
+#if PHP_VERSION_ID >= 70000
+extern zend_object * mapscript_throw_exception(char *format TSRMLS_DC, ...);
+#else
extern zval * mapscript_throw_exception(char *format TSRMLS_DC, ...);
+#endif
/* print all MapServer errors (as Warning) and throw a MapScriptException */
+#if PHP_VERSION_ID >= 70000
+extern zend_object* mapscript_throw_mapserver_exception(char *format TSRMLS_DC, ...);
+#else
extern zval* mapscript_throw_mapserver_exception(char *format TSRMLS_DC, ...);
+#endif
extern void mapscript_report_mapserver_error(int error_type TSRMLS_DC);
extern void mapscript_report_php_error(int error_type, char *format TSRMLS_DC, ...);
diff --git a/mapscript/php/php_mapscript_util.c b/mapscript/php/php_mapscript_util.c
index fc681bd7e..eaa83b21a 100644
--- a/mapscript/php/php_mapscript_util.c
+++ b/mapscript/php/php_mapscript_util.c
@@ -31,7 +31,7 @@
#include "php_mapscript_util.h"
#include "../../maperror.h"
-
+#if PHP_VERSION_ID < 70000
zend_object_value mapscript_object_new(zend_object *zobj,
zend_class_entry *ce,
void (*zend_objects_free_object) TSRMLS_DC)
@@ -78,22 +78,37 @@ zend_object_value mapscript_object_new_ex(zend_object *zobj,
retval.handlers = object_handlers;
return retval;
}
+#endif /* PHP_VERSION_ID < 70000 */
int mapscript_extract_associative_array(HashTable *php, char **array)
{
- zval **value;
+ MAPSCRIPT_ZVAL_P value;
+#if PHP_VERSION_ID < 70000
char *string_key = NULL;
ulong num_key;
+#else
+ zend_string *string_key = NULL;
+ zend_ulong num_key;
+#endif
+
int i = 0;
for(zend_hash_internal_pointer_reset(php);
zend_hash_has_more_elements(php) == SUCCESS;
zend_hash_move_forward(php)) {
+#if PHP_VERSION_ID < 70000
zend_hash_get_current_data(php, (void **)&value);
+#else
+ value = zend_hash_get_current_data(php);
+#endif
- switch (zend_hash_get_current_key(php, &string_key, &num_key, 1)) {
+ switch (mapscript_hash_get_current_key(php, &string_key, &num_key, 1)) {
case HASH_KEY_IS_STRING:
+#if PHP_VERSION_ID < 70000
array[i++] = string_key;
+#else
+ array[i++] = ZSTR_VAL(string_key);
+#endif
array[i++] = Z_STRVAL_PP(value);
break;
}
@@ -107,64 +122,70 @@ int mapscript_extract_associative_array(HashTable *php, char **array)
otherwise it creates it */
void mapscript_fetch_object(zend_class_entry *ce, zval* zval_parent, php_layer_object* layer,
void *internal_object,
- zval **php_object_storage TSRMLS_DC)
+ MAPSCRIPT_ZVAL_P php_object_storage TSRMLS_DC)
{
parent_object p;
// create the parent struct
+#if PHP_VERSION_ID < 70000
p.val = zval_parent;
+ #define mapscript_fetch_object_return_value *php_object_storage
+#else
+ p.val = *zval_parent;
+ #define mapscript_fetch_object_return_value php_object_storage
+#endif
p.child_ptr = &*php_object_storage;
MAKE_STD_ZVAL(*php_object_storage);
if (ce == mapscript_ce_outputformat)
- mapscript_create_outputformat((outputFormatObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_outputformat((outputFormatObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_color)
- mapscript_create_color((colorObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_color((colorObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_rect)
- mapscript_create_rect((rectObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_rect((rectObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_class)
- mapscript_create_class((classObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_class((classObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_hashtable)
- mapscript_create_hashtable((hashTableObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_hashtable((hashTableObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_label)
- mapscript_create_label((labelObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_label((labelObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_style)
- mapscript_create_style((styleObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_style((styleObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_symbol)
- mapscript_create_symbol((symbolObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_symbol((symbolObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
#ifdef disabled
else if (ce == mapscript_ce_labelcachemember)
- mapscript_create_labelcachemember((labelCacheMemberObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_labelcachemember((labelCacheMemberObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_labelcache)
- mapscript_create_labelcache((labelCacheObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_labelcache((labelCacheObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
#endif
else if (ce == mapscript_ce_result)
- mapscript_create_result((resultObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_result((resultObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_scalebar)
- mapscript_create_scalebar((scalebarObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_scalebar((scalebarObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_web)
- mapscript_create_web((webObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_web((webObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_legend)
- mapscript_create_legend((legendObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_legend((legendObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_querymap)
- mapscript_create_querymap((queryMapObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_querymap((queryMapObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_grid)
- mapscript_create_grid((graticuleObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_grid((graticuleObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_referencemap)
- mapscript_create_referencemap((referenceMapObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_referencemap((referenceMapObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_point)
- mapscript_create_point((pointObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_point((pointObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_projection)
- mapscript_create_projection((projectionObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_projection((projectionObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_line)
- mapscript_create_line((lineObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_line((lineObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_shape)
- mapscript_create_shape((shapeObj*)internal_object, p, layer, *php_object_storage TSRMLS_CC);
+ mapscript_create_shape((shapeObj*)internal_object, p, layer, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_layer)
- mapscript_create_layer((layerObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_layer((layerObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_cluster)
- mapscript_create_cluster((clusterObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_cluster((clusterObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
else if (ce == mapscript_ce_labelleader)
- mapscript_create_labelleader((labelLeaderObj*)internal_object, p, *php_object_storage TSRMLS_CC);
+ mapscript_create_labelleader((labelLeaderObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC);
}
diff --git a/mapscript/php/php_mapscript_util.h b/mapscript/php/php_mapscript_util.h
index 73ae02df6..bccfd169b 100644
--- a/mapscript/php/php_mapscript_util.h
+++ b/mapscript/php/php_mapscript_util.h
@@ -36,6 +36,8 @@
#include "php_globals.h"
#include "php_mapscript.h"
+#if PHP_VERSION_ID < 70000
+
#if ZEND_MODULE_API_NO < 20010901
#define TSRMLS_D void
#define TSRMLS_DC
@@ -141,9 +143,30 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre
#define MAPSCRIPT_FREE_OBJECT(zobj) \
zend_hash_destroy(zobj->std.properties); \
FREE_HASHTABLE(zobj->std.properties);
+#endif /* PHP_VERSION_ID < 70000 */
+#if PHP_VERSION_ID >= 70000
+#define MAPSCRIPT_ADDREF(zv) if(!(Z_ISUNDEF(zv))) GC_REFCOUNT(Z_COUNTED(zv))++;
+#define MAPSCRIPT_ADDREF_P(zv) if(!(Z_ISUNDEF(*zv))) GC_REFCOUNT(Z_COUNTED_P(zv))++;
+#else
#define MAPSCRIPT_ADDREF(zobj) if (zobj) Z_ADDREF_P(zobj)
+#define MAPSCRIPT_ADDREF_P(zv) MAPSCRIPT_ADDREF(zv)
+#endif
+#if PHP_VERSION_ID >= 70000
+#ifndef _zval_dtor_func_for_ptr
+//use _zval_dtor_func in PHP7.1 instead
+#define _zval_dtor_func_for_ptr _zval_dtor_func
+#endif
+#define MAPSCRIPT_DELREF(zv) \
+ if (!(Z_ISUNDEF(zv))) \
+ { \
+ zend_refcounted *_gc = Z_COUNTED_P(&zv); \
+ if(--GC_REFCOUNT(_gc) == 0) \
+ _zval_dtor_func_for_ptr(_gc); \
+ ZVAL_UNDEF(&zv); \
+ }
+#else
#define MAPSCRIPT_DELREF(zobj) \
if (zobj) \
{ \
@@ -155,11 +178,25 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre
} \
zobj = NULL; \
}
+#endif
+
+#if PHP_VERSION_ID >= 70000
+#define MAPSCRIPT_FREE_PARENT(parent) \
+ if (parent.child_ptr) \
+ ZVAL_UNDEF(parent.child_ptr); \
+ MAPSCRIPT_DELREF(parent.val);
+#define MAPSCRIPT_MAKE_PARENT(zobj, ptr) \
+ if(zobj == NULL) \
+ ZVAL_UNDEF(&parent.val); \
+ else \
+ ZVAL_COPY_VALUE(&parent.val, zobj); \
+ parent.child_ptr = ptr;
#define MAPSCRIPT_INIT_PARENT(parent) \
- parent.val = NULL; \
+ ZVAL_UNDEF(&parent.val); \
parent.child_ptr = NULL;
+#else
#define MAPSCRIPT_FREE_PARENT(parent) \
if (parent.child_ptr) \
@@ -170,12 +207,35 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre
parent.val = zobj; \
parent.child_ptr = ptr;
+#define MAPSCRIPT_INIT_PARENT(parent) \
+ parent.val = NULL; \
+ parent.child_ptr = NULL;
+#endif
+
+#if PHP_VERSION_ID >= 70000
+
+#define MAPSCRIPT_CALL_METHOD_1(zobj, function_name, retval, arg1) \
+ zend_call_method_with_1_params(&zobj, Z_OBJCE(zobj), NULL, function_name, &retval, arg1);
+
+#define MAPSCRIPT_CALL_METHOD_2(zobj, function_name, retval, arg1, arg2) \
+ zend_call_method_with_2_params(&zobj, Z_OBJCE(zobj), NULL, function_name, &retval, arg1, arg2);
+
+#define MAPSCRIPT_CALL_METHOD_2_P(zobj, function_name, retval, arg1, arg2) \
+ zend_call_method_with_2_params(zobj, Z_OBJCE_P(zobj), NULL, function_name, &retval, arg1, arg2);
+
+#else
+
#define MAPSCRIPT_CALL_METHOD_1(zobj, function_name, retval, arg1) \
zend_call_method_with_1_params(&zobj, Z_OBJCE_P(zobj), NULL, function_name, &retval, arg1);
#define MAPSCRIPT_CALL_METHOD_2(zobj, function_name, retval, arg1, arg2) \
zend_call_method_with_2_params(&zobj, Z_OBJCE_P(zobj), NULL, function_name, &retval, arg1, arg2);
+#define MAPSCRIPT_CALL_METHOD_2_P(zobj, function_name, retval, arg1, arg2) \
+ MAPSCRIPT_CALL_METHOD_2(zobj, function_name, retval, arg1, arg2)
+
+#endif /* PHP_VERSION_ID */
+
#define STRING_EQUAL(string1, string2) \
strcmp(string1, string2) == 0
@@ -183,7 +243,7 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre
#define IF_GET_STRING(property_name, value) \
if (strcmp(property, property_name)==0) \
{ \
- RETVAL_STRING( (value ? value:"") , 1); \
+ MAPSCRIPT_RETVAL_STRING( (value ? value:"") , 1); \
} \
#define IF_GET_LONG(property_name, value) \
@@ -198,6 +258,17 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre
RETVAL_DOUBLE(value); \
} \
+#if PHP_VERSION_ID >= 70000
+#define IF_GET_OBJECT(property_name, mapscript_ce, php_object_storage, internal_object) \
+ if (strcmp(property, property_name)==0) \
+ { \
+ if (Z_ISUNDEF(php_object_storage)) { \
+ mapscript_fetch_object(mapscript_ce, zobj, NULL, (void*)internal_object, \
+ &php_object_storage TSRMLS_CC); \
+ } \
+ RETURN_ZVAL(&php_object_storage, 1, 0); \
+ }
+#else
#define IF_GET_OBJECT(property_name, mapscript_ce, php_object_storage, internal_object) \
if (strcmp(property, property_name)==0) \
{ \
@@ -207,12 +278,21 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre
} \
RETURN_ZVAL(php_object_storage, 1, 0); \
}
+#endif
+#if PHP_VERSION_ID >= 70000
#define CHECK_OBJECT(mapscript_ce, php_object_storage, internal_object) \
- if (!php_object_storage) { \
+ if (Z_ISUNDEF(php_object_storage)) { \
mapscript_fetch_object(mapscript_ce, zobj, NULL, (void*)internal_object, \
&php_object_storage TSRMLS_CC); \
}
+#else
+#define CHECK_OBJECT(mapscript_ce, php_object_storage, internal_object) \
+ if (!php_object_storage) { \
+ mapscript_fetch_object(mapscript_ce, zobj, NULL, (void*)internal_object, \
+ &php_object_storage TSRMLS_CC); \
+ }
+#endif
/* helpers for setters */
#define IF_SET_STRING(property_name, internal, value) \
@@ -257,10 +337,11 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre
internal = Z_LVAL_P(value); \
}
-
+#if PHP_VERSION_ID < 70000
zend_object_value mapscript_object_new(zend_object *zobj,
zend_class_entry *ce,
void (*zend_objects_free_object) TSRMLS_DC);
+#endif /* PHP_VERSION_ID < 70000 */
int mapscript_extract_associative_array(HashTable *php, char **array);
diff --git a/mapscript/php/point.c b/mapscript/php/point.c
index 5e6299fa8..719ffd7ae 100644
--- a/mapscript/php/point.c
+++ b/mapscript/php/point.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_point;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_point_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(point___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -94,7 +97,7 @@ PHP_METHOD(pointObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, getThis());
if ((php_point->point = pointObj_new()) == NULL) {
mapscript_throw_exception("Unable to construct pointObj." TSRMLS_CC);
@@ -125,7 +128,7 @@ PHP_METHOD(pointObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
IF_GET_DOUBLE("x", php_point->point->x)
else IF_GET_DOUBLE("y", php_point->point->y)
@@ -154,7 +157,7 @@ PHP_METHOD(pointObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
IF_SET_DOUBLE("x", php_point->point->x, value)
else IF_SET_DOUBLE("y", php_point->point->y, value)
@@ -184,7 +187,7 @@ PHP_METHOD(pointObj, setXY)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
php_point->point->x = x;
php_point->point->y = y;
@@ -216,7 +219,7 @@ PHP_METHOD(pointObj, setXYZ)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
php_point->point->x = x;
php_point->point->y = y;
@@ -253,9 +256,9 @@ PHP_METHOD(pointObj, project)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_proj_in = (php_projection_object *) zend_object_store_get_object(zobj_proj_in TSRMLS_CC);
- php_proj_out = (php_projection_object *) zend_object_store_get_object(zobj_proj_out TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
+ php_proj_in = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_in);
+ php_proj_out = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_out);
status = pointObj_project(php_point->point, php_proj_in->projection, php_proj_out->projection);
if (status != MS_SUCCESS) {
@@ -283,8 +286,8 @@ PHP_METHOD(pointObj, distanceToPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point2 = (php_point_object *) zend_object_store_get_object(zobj_point2 TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
+ php_point2 = MAPSCRIPT_OBJ_P(php_point_object, zobj_point2);
distance = pointObj_distanceToPoint(php_point->point, php_point2->point);
@@ -311,9 +314,9 @@ PHP_METHOD(pointObj, distanceToLine)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_line_point = (php_point_object *) zend_object_store_get_object(zobj_line_point TSRMLS_CC);
- php_line_point2 = (php_point_object *) zend_object_store_get_object(zobj_line_point2 TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
+ php_line_point = MAPSCRIPT_OBJ_P(php_point_object, zobj_line_point);
+ php_line_point2 = MAPSCRIPT_OBJ_P(php_point_object, zobj_line_point2);
distance = pointObj_distanceToLine(php_point->point, php_line_point->point, php_line_point2->point);
@@ -339,8 +342,8 @@ PHP_METHOD(pointObj, distanceToShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
distance = pointObj_distanceToShape(php_point->point, php_shape->shape);
@@ -374,10 +377,10 @@ PHP_METHOD(pointObj, draw)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
if ((status = pointObj_draw(php_point->point, php_map->map, php_layer->layer, php_image->image,
classIndex, text)) != MS_SUCCESS) {
@@ -410,16 +413,91 @@ void mapscript_create_point(pointObj *point, parent_object parent, zval *return_
{
php_point_object * php_point;
object_init_ex(return_value, mapscript_ce_point);
- php_point = (php_point_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, return_value);
php_point->point = point;
- if (parent.val)
+ if (ZVAL_NOT_UNDEF(parent.val))
php_point->is_ref = 1;
php_point->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_point_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_point_object *php_point;
+
+ php_point = ecalloc(1, sizeof(*php_point) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_point->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_point->zobj, ce);
+
+ php_point->zobj.handlers = &mapscript_point_object_handlers;
+
+ php_point->is_ref = 0;
+ MAPSCRIPT_INIT_PARENT(php_point->parent);
+
+ return &php_point->zobj;
+}
+
+static void mapscript_point_free_object(zend_object *object)
+{
+ php_point_object *php_point;
+
+ php_point = (php_point_object *)((char *)object - XtOffsetOf(php_point_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_point->parent);
+
+ if (php_point->point && !php_point->is_ref) {
+ pointObj_destroy(php_point->point);
+ }
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_point_clone_object(zval *zobj)
+{
+ php_point_object *php_point_old, *php_point_new;
+ zend_object* zobj_new;
+
+ php_point_old = MAPSCRIPT_OBJ_P(php_point_object, zobj);
+
+ zobj_new = mapscript_point_create_object(mapscript_ce_point);
+ php_point_new = (php_point_object *)((char *)zobj_new - XtOffsetOf(php_point_object, zobj));
+
+ zend_objects_clone_members(&php_point_new->zobj, &php_point_old->zobj);
+
+ if ((php_point_new->point = pointObj_new()) == NULL) {
+ mapscript_throw_exception("Unable to construct pointObj." TSRMLS_CC);
+ return NULL;
+ }
+ memcpy(php_point_new->point, php_point_old->point, sizeof(pointObj));
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(point)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "pointObj", point_functions);
+ mapscript_ce_point = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_point->create_object = mapscript_point_create_object;
+ mapscript_ce_point->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_point_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_point_object_handlers));
+ mapscript_point_object_handlers.free_obj = mapscript_point_free_object;
+ mapscript_point_object_handlers.clone_obj = mapscript_point_clone_object;
+ mapscript_point_object_handlers.offset = XtOffsetOf(php_point_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
+
static void mapscript_point_object_destroy(void *object TSRMLS_DC)
{
php_point_object *php_point = (php_point_object *)object;
@@ -464,3 +542,4 @@ PHP_MINIT_FUNCTION(point)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/projection.c b/mapscript/php/projection.c
index 46b74c165..d7e9c1633 100644
--- a/mapscript/php/projection.c
+++ b/mapscript/php/projection.c
@@ -57,7 +57,7 @@ PHP_METHOD(projectionObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_projection = (php_projection_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_projection = MAPSCRIPT_OBJ_P(php_projection_object, getThis());
if ((php_projection->projection = projectionObj_new(projString)) == NULL) {
mapscript_throw_mapserver_exception("Unable to construct projectionObj." TSRMLS_CC);
@@ -82,7 +82,7 @@ PHP_METHOD(projectionObj, setWKTProjection)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_projection = (php_projection_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_projection = MAPSCRIPT_OBJ_P(php_projection_object, getThis());
RETURN_LONG(msOGCWKT2ProjectionObj(wkt, php_projection->projection, MS_FALSE));
}
@@ -101,7 +101,7 @@ PHP_METHOD(projectionObj, getUnits)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_projection = (php_projection_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_projection = MAPSCRIPT_OBJ_P(php_projection_object, getThis());
RETURN_LONG(projectionObj_getUnits(php_projection->projection));
}
@@ -120,16 +120,86 @@ void mapscript_create_projection(projectionObj *projection, parent_object parent
{
php_projection_object * php_projection;
object_init_ex(return_value, mapscript_ce_projection);
- php_projection = (php_projection_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_projection = MAPSCRIPT_OBJ_P(php_projection_object, return_value);
php_projection->projection = projection;
- if (parent.val)
+ if (ZVAL_NOT_UNDEF(parent.val))
php_projection->is_ref = 1;
php_projection->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_projection_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_projection_object *php_projection;
+
+ php_projection = ecalloc(1, sizeof(*php_projection) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_projection->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_projection->zobj, ce);
+
+ php_projection->zobj.handlers = &mapscript_projection_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_projection->parent);
+ php_projection->is_ref = 0;
+
+ return &php_projection->zobj;
+}
+
+static void mapscript_projection_free_object(zend_object *object)
+{
+ php_projection_object *php_projection;
+
+ php_projection = (php_projection_object *)((char *)object - XtOffsetOf(php_projection_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_projection->parent);
+
+ if (php_projection->projection && !php_projection->is_ref) {
+ projectionObj_destroy(php_projection->projection);
+ }
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_projection_clone_object(zval *zobj)
+{
+ php_projection_object *php_projection_old, *php_projection_new;
+ zend_object* zobj_new;
+
+ php_projection_old = MAPSCRIPT_OBJ_P(php_projection_object, zobj);
+
+ zobj_new = mapscript_projection_create_object(mapscript_ce_projection);
+ php_projection_new = (php_projection_object *)((char *)zobj_new - XtOffsetOf(php_projection_object, zobj));
+
+ zend_objects_clone_members(&php_projection_new->zobj, &php_projection_old->zobj);
+
+ php_projection_new->projection = projectionObj_clone(php_projection_old->projection);
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(projection)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "projectionObj", projection_functions);
+ mapscript_ce_projection = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_projection->create_object = mapscript_projection_create_object;
+ mapscript_ce_projection->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_projection_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_projection_object_handlers));
+ mapscript_projection_object_handlers.free_obj = mapscript_projection_free_object;
+ mapscript_projection_object_handlers.clone_obj = mapscript_projection_clone_object;
+ mapscript_projection_object_handlers.offset = XtOffsetOf(php_projection_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_projection_object_destroy(void *object TSRMLS_DC)
{
php_projection_object *php_projection = (php_projection_object *)object;
@@ -175,7 +245,7 @@ static zend_object_value mapscript_projection_object_clone(zval *zobj TSRMLS_DC)
php_projection_object *php_projection_old, *php_projection_new;
zend_object_value new_ov;
- php_projection_old = (php_projection_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_projection_old = MAPSCRIPT_OBJ_P(php_projection_object, zobj);
new_ov = mapscript_projection_object_new_ex(mapscript_ce_projection, &php_projection_new TSRMLS_CC);
zend_objects_clone_members(&php_projection_new->std, new_ov, &php_projection_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC);
@@ -201,3 +271,4 @@ PHP_MINIT_FUNCTION(projection)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/querymap.c b/mapscript/php/querymap.c
index a76962b98..bd29d2a8c 100644
--- a/mapscript/php/querymap.c
+++ b/mapscript/php/querymap.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_querymap;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_querymap_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(querymap___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -69,7 +72,7 @@ PHP_METHOD(queryMapObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj);
IF_GET_LONG("width", php_querymap->querymap->width)
else IF_GET_LONG("height", php_querymap->querymap->height)
@@ -97,7 +100,7 @@ PHP_METHOD(queryMapObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj);
IF_SET_LONG("width", php_querymap->querymap->width, value)
else IF_SET_LONG("height", php_querymap->querymap->height, value)
@@ -128,7 +131,7 @@ PHP_METHOD(queryMapObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj);
status = queryMapObj_updateFromString(php_querymap->querymap, snippet);
@@ -156,14 +159,14 @@ PHP_METHOD(queryMapObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj);
value = queryMapObj_convertToString(php_querymap->querymap);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -182,7 +185,7 @@ PHP_METHOD(queryMapObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj);
MAPSCRIPT_DELREF(php_querymap->color);
}
@@ -204,7 +207,7 @@ void mapscript_create_querymap(queryMapObj *querymap, parent_object parent, zval
{
php_querymap_object * php_querymap;
object_init_ex(return_value, mapscript_ce_querymap);
- php_querymap = (php_querymap_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, return_value);
php_querymap->querymap = querymap;
php_querymap->parent = parent;
@@ -212,6 +215,59 @@ void mapscript_create_querymap(queryMapObj *querymap, parent_object parent, zval
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_querymap_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_querymap_object *php_querymap;
+
+ php_querymap = ecalloc(1, sizeof(*php_querymap) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_querymap->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_querymap->zobj, ce);
+
+ php_querymap->zobj.handlers = &mapscript_querymap_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_querymap->parent);
+ ZVAL_UNDEF(&php_querymap->color);
+
+ return &php_querymap->zobj;
+}
+
+static void mapscript_querymap_free_object(zend_object *object)
+{
+ php_querymap_object *php_querymap;
+
+ php_querymap = (php_querymap_object *)((char *)object - XtOffsetOf(php_querymap_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_querymap->parent);
+
+ MAPSCRIPT_FREE_PARENT(php_querymap->parent);
+ MAPSCRIPT_DELREF(php_querymap->color);
+
+ /* We don't need to free the queryMapObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(querymap)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "queryMapObj", querymap_functions);
+ mapscript_ce_querymap = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_querymap->create_object = mapscript_querymap_create_object;
+ mapscript_ce_querymap->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_querymap_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_querymap_object_handlers));
+ mapscript_querymap_object_handlers.free_obj = mapscript_querymap_free_object;
+ mapscript_querymap_object_handlers.offset = XtOffsetOf(php_querymap_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_querymap_object_destroy(void *object TSRMLS_DC)
{
php_querymap_object *php_querymap = (php_querymap_object *)object;
@@ -255,3 +311,4 @@ PHP_MINIT_FUNCTION(querymap)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/rect.c b/mapscript/php/rect.c
index abf44dcfc..e72a86a89 100644
--- a/mapscript/php/rect.c
+++ b/mapscript/php/rect.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_rect;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_rect_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(rect___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -80,7 +83,7 @@ PHP_METHOD(rectObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_rect = (php_rect_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, getThis());
if ((php_rect->rect = rectObj_new()) == NULL) {
mapscript_throw_exception("Unable to construct rectObj." TSRMLS_CC);
@@ -104,7 +107,7 @@ PHP_METHOD(rectObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj);
IF_GET_DOUBLE("minx", php_rect->rect->minx)
else IF_GET_DOUBLE("miny", php_rect->rect->miny)
@@ -141,10 +144,10 @@ PHP_METHOD(rectObj, draw)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
if ((status = rectObj_draw(php_rect->rect, php_map->map, php_layer->layer, php_image->image,
classIndex, text)) != MS_SUCCESS) {
@@ -172,7 +175,7 @@ PHP_METHOD(rectObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj);
IF_SET_DOUBLE("minx", php_rect->rect->minx, value)
else IF_SET_DOUBLE("miny", php_rect->rect->miny, value)
@@ -202,9 +205,9 @@ PHP_METHOD(rectObj, project)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_proj_in = (php_projection_object *) zend_object_store_get_object(zobj_proj_in TSRMLS_CC);
- php_proj_out = (php_projection_object *) zend_object_store_get_object(zobj_proj_out TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj);
+ php_proj_in = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_in);
+ php_proj_out = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_out);
status = rectObj_project(php_rect->rect, php_proj_in->projection, php_proj_out->projection);
if (status != MS_SUCCESS) {
@@ -231,7 +234,7 @@ PHP_METHOD(rectObj, setExtent)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj);
php_rect->rect->minx = minx;
php_rect->rect->miny = miny;
@@ -259,7 +262,7 @@ PHP_METHOD(rectObj, fit)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj);
retval = rectObj_fit(php_rect->rect, width, height);
@@ -282,7 +285,7 @@ PHP_METHOD(rectObj, getCenter)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_rect = (php_rect_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, getThis());
center = (pointObj *)calloc(1, sizeof(pointObj));
if (!center) {
@@ -318,16 +321,90 @@ void mapscript_create_rect(rectObj *rect, parent_object parent, zval *return_val
{
php_rect_object * php_rect;
object_init_ex(return_value, mapscript_ce_rect);
- php_rect = (php_rect_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, return_value);
php_rect->rect = rect;
- if (parent.val)
+ if(ZVAL_NOT_UNDEF(parent.val))
php_rect->is_ref = 1;
php_rect->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_rect_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_rect_object *php_rect;
+
+ php_rect = ecalloc(1, sizeof(*php_rect) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_rect->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_rect->zobj, ce);
+
+ php_rect->zobj.handlers = &mapscript_rect_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_rect->parent);
+ php_rect->is_ref = 0;
+
+ return &php_rect->zobj;
+}
+
+static void mapscript_rect_free_object(zend_object *object)
+{
+ php_rect_object *php_rect;
+
+ php_rect = (php_rect_object *)((char *)object - XtOffsetOf(php_rect_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_rect->parent);
+
+ if (php_rect->rect && !php_rect->is_ref) {
+ rectObj_destroy(php_rect->rect);
+ }
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_rect_clone_object(zval *zobj)
+{
+ php_rect_object *php_rect_old, *php_rect_new;
+ zend_object* zobj_new;
+
+ php_rect_old = MAPSCRIPT_OBJ_P(php_rect_object, zobj);
+
+ zobj_new = mapscript_rect_create_object(mapscript_ce_rect);
+ php_rect_new = (php_rect_object *)((char *)zobj_new - XtOffsetOf(php_rect_object, zobj));
+
+ zend_objects_clone_members(&php_rect_new->zobj, &php_rect_old->zobj);
+
+ if ((php_rect_new->rect = rectObj_new()) == NULL) {
+ mapscript_throw_exception("Unable to construct rectObj." TSRMLS_CC);
+ return NULL;
+ }
+ memcpy(php_rect_new->rect, php_rect_old->rect, sizeof(rectObj));
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(rect)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "rectObj", rect_functions);
+ mapscript_ce_rect = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_rect->create_object = mapscript_rect_create_object;
+ mapscript_ce_rect->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_rect_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_rect_object_handlers));
+ mapscript_rect_object_handlers.free_obj = mapscript_rect_free_object;
+ mapscript_rect_object_handlers.clone_obj = mapscript_rect_clone_object;
+ mapscript_rect_object_handlers.offset = XtOffsetOf(php_rect_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_rect_object_destroy(void *object TSRMLS_DC)
{
php_rect_object *php_rect = (php_rect_object *)object;
@@ -372,3 +449,4 @@ PHP_MINIT_FUNCTION(rect)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/referencemap.c b/mapscript/php/referencemap.c
index bb0b7074b..86d0afebe 100644
--- a/mapscript/php/referencemap.c
+++ b/mapscript/php/referencemap.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_referencemap;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_referencemap_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(referenceMap___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -69,7 +72,7 @@ PHP_METHOD(referenceMapObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj);
IF_GET_STRING("image", php_referencemap->referencemap->image)
else IF_GET_LONG("width", php_referencemap->referencemap->width)
@@ -104,7 +107,7 @@ PHP_METHOD(referenceMapObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj);
IF_SET_STRING("image", php_referencemap->referencemap->image, value)
else IF_SET_LONG("width", php_referencemap->referencemap->width, value)
@@ -142,7 +145,7 @@ PHP_METHOD(referenceMapObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj);
status = referenceMapObj_updateFromString(php_referencemap->referencemap, snippet);
@@ -170,14 +173,14 @@ PHP_METHOD(referenceMapObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj);
value = referenceMapObj_convertToString(php_referencemap->referencemap);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -196,7 +199,7 @@ PHP_METHOD(referenceMapObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj);
MAPSCRIPT_DELREF(php_referencemap->extent);
MAPSCRIPT_DELREF(php_referencemap->color);
@@ -220,13 +223,68 @@ void mapscript_create_referencemap(referenceMapObj *referencemap, parent_object
{
php_referencemap_object * php_referencemap;
object_init_ex(return_value, mapscript_ce_referencemap);
- php_referencemap = (php_referencemap_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, return_value);
php_referencemap->referencemap = referencemap;
php_referencemap->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_referencemap_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_referencemap_object *php_referencemap;
+
+ php_referencemap = ecalloc(1, sizeof(*php_referencemap) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_referencemap->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_referencemap->zobj, ce);
+
+ php_referencemap->zobj.handlers = &mapscript_referencemap_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_referencemap->parent);
+ ZVAL_UNDEF(&php_referencemap->extent);
+ ZVAL_UNDEF(&php_referencemap->color);
+ ZVAL_UNDEF(&php_referencemap->outlinecolor);
+
+ return &php_referencemap->zobj;
+}
+
+static void mapscript_referencemap_free_object(zend_object *object)
+{
+ php_referencemap_object *php_referencemap;
+
+ php_referencemap = (php_referencemap_object *)((char *)object - XtOffsetOf(php_referencemap_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_referencemap->parent);
+ MAPSCRIPT_DELREF(php_referencemap->extent);
+ MAPSCRIPT_DELREF(php_referencemap->color);
+ MAPSCRIPT_DELREF(php_referencemap->outlinecolor);
+
+ /* We don't need to free the referenceMapObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(referencemap)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "referenceMapObj", referencemap_functions);
+ mapscript_ce_referencemap = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_referencemap->create_object = mapscript_referencemap_create_object;
+ mapscript_ce_referencemap->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_referencemap_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_referencemap_object_handlers));
+ mapscript_referencemap_object_handlers.free_obj = mapscript_referencemap_free_object;
+ mapscript_referencemap_object_handlers.offset = XtOffsetOf(php_referencemap_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_referencemap_object_destroy(void *object TSRMLS_DC)
{
php_referencemap_object *php_referencemap = (php_referencemap_object *)object;
@@ -274,3 +332,4 @@ PHP_MINIT_FUNCTION(referencemap)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/result.c b/mapscript/php/result.c
index 994b0596d..a0748b786 100644
--- a/mapscript/php/result.c
+++ b/mapscript/php/result.c
@@ -30,6 +30,9 @@
**********************************************************************/
#include "php_mapscript.h"
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_result_object_handlers;
+#endif
zend_class_entry *mapscript_ce_result;
@@ -62,7 +65,7 @@ PHP_METHOD(resultObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_result = (php_result_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ php_result = MAPSCRIPT_OBJ_P(php_result_object, getThis());
if ((php_result->result = resultObj_new()) == NULL) {
mapscript_throw_exception("Unable to construct resultObj." TSRMLS_CC);
@@ -88,7 +91,7 @@ PHP_METHOD(resultObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_result = (php_result_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_result = MAPSCRIPT_OBJ_P(php_result_object, zobj);
IF_GET_LONG("shapeindex", php_result->result->shapeindex)
else IF_GET_LONG("tileindex", php_result->result->tileindex)
@@ -136,13 +139,62 @@ void mapscript_create_result(resultObj *result, parent_object parent,
{
php_result_object * php_result;
object_init_ex(return_value, mapscript_ce_result);
- php_result = (php_result_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_result = MAPSCRIPT_OBJ_P(php_result_object, return_value);
php_result->result = result;
php_result->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_result_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_result_object *php_result;
+
+ php_result = ecalloc(1, sizeof(*php_result) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_result->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_result->zobj, ce);
+
+ php_result->zobj.handlers = &mapscript_result_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_result->parent);
+
+ return &php_result->zobj;
+}
+
+static void mapscript_result_free_object(zend_object *object)
+{
+ php_result_object *php_result;
+
+ php_result = (php_result_object *)((char *)object - XtOffsetOf(php_result_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_result->parent);
+
+ /* We don't need to free the resultObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(result)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "resultObj", result_functions);
+ mapscript_ce_result = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_result->create_object = mapscript_result_create_object;
+ mapscript_ce_result->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_result_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_result_object_handlers));
+ mapscript_result_object_handlers.free_obj = mapscript_result_free_object;
+ mapscript_result_object_handlers.offset = XtOffsetOf(php_result_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_result_object_destroy(void *object TSRMLS_DC)
{
php_result_object *php_result = (php_result_object *)object;
@@ -184,3 +236,4 @@ PHP_MINIT_FUNCTION(result)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/scalebar.c b/mapscript/php/scalebar.c
index 21b04664d..cb879266d 100644
--- a/mapscript/php/scalebar.c
+++ b/mapscript/php/scalebar.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_scalebar;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_scalebar_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(scalebar___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -75,7 +78,7 @@ PHP_METHOD(scalebarObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj);
IF_GET_LONG("height", php_scalebar->scalebar->height)
else IF_GET_LONG("width", php_scalebar->scalebar->width)
@@ -112,7 +115,7 @@ PHP_METHOD(scalebarObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj);
IF_SET_LONG("height", php_scalebar->scalebar->height, value)
else IF_SET_LONG("width", php_scalebar->scalebar->width, value)
@@ -152,7 +155,7 @@ PHP_METHOD(scalebarObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj);
status = scalebarObj_updateFromString(php_scalebar->scalebar, snippet);
@@ -180,14 +183,14 @@ PHP_METHOD(scalebarObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj);
value = scalebarObj_convertToString(php_scalebar->scalebar);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -208,7 +211,7 @@ PHP_METHOD(scalebarObj, setImageColor)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj);
if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255)
RETURN_LONG(MS_FAILURE);
@@ -235,7 +238,7 @@ PHP_METHOD(scalebarObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj);
MAPSCRIPT_DELREF(php_scalebar->color);
MAPSCRIPT_DELREF(php_scalebar->backgroundcolor);
@@ -262,13 +265,72 @@ void mapscript_create_scalebar(scalebarObj *scalebar, parent_object parent, zval
{
php_scalebar_object * php_scalebar;
object_init_ex(return_value, mapscript_ce_scalebar);
- php_scalebar = (php_scalebar_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, return_value);
php_scalebar->scalebar = scalebar;
php_scalebar->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_scalebar_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_scalebar_object *php_scalebar;
+
+ php_scalebar = ecalloc(1, sizeof(*php_scalebar) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_scalebar->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_scalebar->zobj, ce);
+
+ php_scalebar->zobj.handlers = &mapscript_scalebar_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_scalebar->parent);
+ ZVAL_UNDEF(&php_scalebar->color);
+ ZVAL_UNDEF(&php_scalebar->backgroundcolor);
+ ZVAL_UNDEF(&php_scalebar->outlinecolor);
+ ZVAL_UNDEF(&php_scalebar->imagecolor);
+ ZVAL_UNDEF(&php_scalebar->label);
+
+ return &php_scalebar->zobj;
+}
+
+static void mapscript_scalebar_free_object(zend_object *object)
+{
+ php_scalebar_object *php_scalebar;
+
+ php_scalebar = (php_scalebar_object *)((char *)object - XtOffsetOf(php_scalebar_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_scalebar->parent);
+ MAPSCRIPT_DELREF(php_scalebar->color);
+ MAPSCRIPT_DELREF(php_scalebar->backgroundcolor);
+ MAPSCRIPT_DELREF(php_scalebar->outlinecolor);
+ MAPSCRIPT_DELREF(php_scalebar->imagecolor);
+ MAPSCRIPT_DELREF(php_scalebar->label);
+
+ /* We don't need to free the scalebarObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(scalebar)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "scalebarObj", scalebar_functions);
+ mapscript_ce_scalebar = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_scalebar->create_object = mapscript_scalebar_create_object;
+ mapscript_ce_scalebar->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_scalebar_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_scalebar_object_handlers));
+ mapscript_scalebar_object_handlers.free_obj = mapscript_scalebar_free_object;
+ mapscript_scalebar_object_handlers.offset = XtOffsetOf(php_scalebar_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_scalebar_object_destroy(void *object TSRMLS_DC)
{
php_scalebar_object *php_scalebar = (php_scalebar_object *)object;
@@ -320,3 +382,4 @@ PHP_MINIT_FUNCTION(scalebar)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/shape.c b/mapscript/php/shape.c
index 7bf474bad..a2be5f94e 100644
--- a/mapscript/php/shape.c
+++ b/mapscript/php/shape.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_shape;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_shape_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(shape___construct_args, 0, 0, 1)
ZEND_ARG_INFO(0, type)
@@ -166,7 +169,7 @@ PHP_METHOD(shapeObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *)zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
if ((php_shape->shape = shapeObj_new(type)) == NULL) {
mapscript_throw_exception("Unable to construct shapeObj." TSRMLS_CC);
@@ -174,7 +177,7 @@ PHP_METHOD(shapeObj, __construct)
}
MAKE_STD_ZVAL(php_shape->values);
- array_init(php_shape->values);
+ mapscript_array_init(php_shape->values);
}
/* }}} */
@@ -193,7 +196,7 @@ PHP_METHOD(shapeObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
IF_GET_STRING("text", php_shape->shape->text)
else IF_GET_LONG("classindex", php_shape->shape->classindex)
@@ -226,7 +229,7 @@ PHP_METHOD(shapeObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
IF_SET_STRING("text", php_shape->shape->text, value)
else IF_SET_LONG("classindex", php_shape->shape->classindex, value)
@@ -262,8 +265,8 @@ PHP_METHOD(shapeObj, add)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_line = (php_line_object *) zend_object_store_get_object(zline TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zline);
retval = shapeObj_add(php_shape->shape, php_line->line);
@@ -288,7 +291,7 @@ PHP_METHOD(shapeObj, line)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
if (index < 0 || index >= php_shape->shape->numlines) {
@@ -318,8 +321,8 @@ PHP_METHOD(shapeObj, contains)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
if (!shapeObj_contains(php_shape->shape, php_point->point))
RETURN_FALSE;
@@ -344,8 +347,8 @@ PHP_METHOD(shapeObj, intersects)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
if (!shapeObj_intersects(php_shape->shape, php_shape2->shape))
RETURN_FALSE;
@@ -373,9 +376,9 @@ PHP_METHOD(shapeObj, project)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_proj_in = (php_projection_object *) zend_object_store_get_object(zobj_proj_in TSRMLS_CC);
- php_proj_out = (php_projection_object *) zend_object_store_get_object(zobj_proj_out TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_proj_in = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_in);
+ php_proj_out = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_out);
status = shapeObj_project(php_shape->shape, php_proj_in->projection, php_proj_out->projection);
if (status != MS_SUCCESS) {
@@ -405,7 +408,7 @@ PHP_METHOD(shapeObj, getPointUsingMeasure)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
point = shapeObj_getpointusingmeasure(php_shape->shape, measure);
if (point == NULL)
@@ -437,8 +440,8 @@ PHP_METHOD(shapeObj, getMeasureUsingPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
intersection = shapeObj_getmeasureusingpoint(php_shape->shape, php_point->point);
if (intersection == NULL)
@@ -470,15 +473,15 @@ PHP_METHOD(shapeObj, getValue)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
if (php_shape->shape->numvalues != php_layer->layer->numitems)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
for(i=0; i<php_layer->layer->numitems; i++) {
if (strcasecmp(php_layer->layer->items[i], fieldName)==0) {
- RETURN_STRING(php_shape->shape->values[i], 1);
+ MAPSCRIPT_RETURN_STRING(php_shape->shape->values[i], 1);
}
}
}
@@ -503,7 +506,7 @@ PHP_METHOD(shapeObj, buffer)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
shape = shapeObj_buffer(php_shape->shape, width);
if (shape == NULL)
@@ -531,7 +534,7 @@ PHP_METHOD(shapeObj, convexhull)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
shape = shapeObj_convexHull(php_shape->shape);
if (shape == NULL)
@@ -559,7 +562,7 @@ PHP_METHOD(shapeObj, boundary)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
shape = shapeObj_boundary(php_shape->shape);
if (shape == NULL)
@@ -587,8 +590,8 @@ PHP_METHOD(shapeObj, containsShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
if (shapeObj_contains_geos(php_shape->shape, php_shape2->shape)) {
RETURN_TRUE;
@@ -617,8 +620,8 @@ PHP_METHOD(shapeObj, union)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
shape = shapeObj_Union(php_shape->shape, php_shape2->shape);
@@ -649,8 +652,8 @@ PHP_METHOD(shapeObj, intersection)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
shape = shapeObj_intersection(php_shape->shape, php_shape2->shape);
@@ -681,8 +684,8 @@ PHP_METHOD(shapeObj, difference)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
shape = shapeObj_difference(php_shape->shape, php_shape2->shape);
@@ -713,8 +716,8 @@ PHP_METHOD(shapeObj, symdifference)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
shape = shapeObj_symdifference(php_shape->shape, php_shape2->shape);
@@ -743,8 +746,8 @@ PHP_METHOD(shapeObj, overlaps)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
if (shapeObj_overlaps(php_shape->shape, php_shape2->shape)) {
RETURN_TRUE;
@@ -770,8 +773,8 @@ PHP_METHOD(shapeObj, within)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
if (shapeObj_within(php_shape->shape, php_shape2->shape)) {
RETURN_TRUE;
@@ -798,8 +801,8 @@ PHP_METHOD(shapeObj, crosses)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
if (shapeObj_crosses(php_shape->shape, php_shape2->shape)) {
RETURN_TRUE;
@@ -825,8 +828,8 @@ PHP_METHOD(shapeObj, touches)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
if (shapeObj_touches(php_shape->shape, php_shape2->shape)) {
RETURN_TRUE;
@@ -852,8 +855,8 @@ PHP_METHOD(shapeObj, equals)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
if (shapeObj_equals(php_shape->shape, php_shape2->shape)) {
RETURN_TRUE;
@@ -879,8 +882,8 @@ PHP_METHOD(shapeObj, disjoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
if (shapeObj_disjoint(php_shape->shape, php_shape2->shape)) {
RETURN_TRUE;
@@ -905,7 +908,7 @@ PHP_METHOD(shapeObj, getCentroid)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
point = shapeObj_getcentroid(php_shape->shape);
@@ -932,7 +935,7 @@ PHP_METHOD(shapeObj, getArea)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
area = shapeObj_getarea(php_shape->shape);
@@ -955,7 +958,7 @@ PHP_METHOD(shapeObj, getLength)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
length = shapeObj_getlength(php_shape->shape);
@@ -979,7 +982,7 @@ PHP_METHOD(shapeObj, getLabelPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
point = shapeObj_getLabelPoint(php_shape->shape);
@@ -1006,16 +1009,16 @@ PHP_METHOD(shapeObj, toWkt)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
wkt = msShapeToWKT(php_shape->shape);
if (wkt) {
- RETVAL_STRING(wkt, 1);
+ MAPSCRIPT_RETVAL_STRING(wkt, 1);
msFree(wkt);
return;
}
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
}
/* }}} */
@@ -1035,7 +1038,7 @@ PHP_METHOD(shapeObj, setBounds)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
shapeObj_setBounds(php_shape->shape);
@@ -1062,7 +1065,7 @@ PHP_METHOD(shapeObj, simplify)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
shape = shapeObj_simplify(php_shape->shape, tolerance);
if (shape == NULL)
@@ -1092,7 +1095,7 @@ PHP_METHOD(shapeObj, topologyPreservingSimplify)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
shape = shapeObj_topologypreservingsimplify(php_shape->shape, tolerance);
if (shape == NULL)
@@ -1125,10 +1128,10 @@ PHP_METHOD(shapeObj, draw)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC);
- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC);
- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer);
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
if ((status = shapeObj_draw(php_shape->shape, php_map->map, php_layer->layer,
php_image->image)) != MS_SUCCESS) {
@@ -1154,7 +1157,7 @@ PHP_METHOD(shapeObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
MAPSCRIPT_DELREF(php_shape->bounds);
}
@@ -1177,8 +1180,8 @@ PHP_METHOD(shapeObj, distanceToPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
RETURN_DOUBLE(msDistancePointToShape(php_point->point, php_shape->shape));
}
@@ -1201,8 +1204,8 @@ PHP_METHOD(shapeObj, distanceToShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj);
+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
RETURN_DOUBLE(msGEOSDistance(php_shape->shape, php_shape2->shape));
}
@@ -1259,17 +1262,17 @@ void mapscript_create_shape(shapeObj *shape, parent_object parent, php_layer_obj
int i;
object_init_ex(return_value, mapscript_ce_shape);
- php_shape = (php_shape_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, return_value);
php_shape->shape = shape;
MAKE_STD_ZVAL(php_shape->values);
- array_init(php_shape->values);
+ mapscript_array_init(php_shape->values);
if (php_layer) {
if ((php_shape->shape->numvalues == php_layer->layer->numitems) ||
(php_shape->shape->numvalues == 0 && php_layer->layer->numitems == -1)) {
for(i=0; i<php_shape->shape->numvalues; i++) {
- add_assoc_string(php_shape->values, php_layer->layer->items[i], php_shape->shape->values[i], 1);
+ mapscript_add_assoc_string(php_shape->values, php_layer->layer->items[i], php_shape->shape->values[i], 1);
}
} else {
mapscript_throw_exception("Assertion failed, Could not set shape values: %d, %d" TSRMLS_CC,
@@ -1278,13 +1281,70 @@ void mapscript_create_shape(shapeObj *shape, parent_object parent, php_layer_obj
}
}
- if (parent.val)
+ if (ZVAL_NOT_UNDEF(parent.val))
php_shape->is_ref = 1;
php_shape->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_shape_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_shape_object *php_shape;
+
+ php_shape = ecalloc(1, sizeof(*php_shape) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_shape->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_shape->zobj, ce);
+
+ php_shape->zobj.handlers = &mapscript_shape_object_handlers;
+
+ php_shape->is_ref = 0;
+ MAPSCRIPT_INIT_PARENT(php_shape->parent);
+ ZVAL_UNDEF(&php_shape->bounds);
+ ZVAL_UNDEF(&php_shape->values);
+
+
+ return &php_shape->zobj;
+}
+
+static void mapscript_shape_free_object(zend_object *object)
+{
+ php_shape_object *php_shape;
+
+ php_shape = (php_shape_object *)((char *)object - XtOffsetOf(php_shape_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_shape->parent);
+ MAPSCRIPT_DELREF(php_shape->bounds);
+ MAPSCRIPT_DELREF(php_shape->values);
+
+ if (php_shape->shape && !php_shape->is_ref) {
+ shapeObj_destroy(php_shape->shape);
+ }
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(shape)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "shapeObj", shape_functions);
+ mapscript_ce_shape = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_shape->create_object = mapscript_shape_create_object;
+ mapscript_ce_shape->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_shape_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_shape_object_handlers));
+ mapscript_shape_object_handlers.free_obj = mapscript_shape_free_object;
+ mapscript_shape_object_handlers.offset = XtOffsetOf(php_shape_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_shape_object_destroy(void *object TSRMLS_DC)
{
php_shape_object *php_shape = (php_shape_object *)object;
@@ -1333,3 +1393,4 @@ PHP_MINIT_FUNCTION(shape)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/shapefile.c b/mapscript/php/shapefile.c
index 89aceff2a..233809840 100644
--- a/mapscript/php/shapefile.c
+++ b/mapscript/php/shapefile.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_shapefile;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_shapefile_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(shapefile___construct_args, 0, 0, 2)
ZEND_ARG_INFO(0, filename)
@@ -90,7 +93,7 @@ PHP_METHOD(shapeFileObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *)zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
php_shapefile->shapefile = shapefileObj_new(filename, type);
@@ -116,7 +119,7 @@ PHP_METHOD(shapeFileObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
IF_GET_LONG("numshapes", php_shapefile->shapefile->numshapes)
else IF_GET_LONG("type", php_shapefile->shapefile->type)
@@ -173,7 +176,7 @@ PHP_METHOD(shapeFileObj, getShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
/* Create a new shapeObj to hold the result
* Note that the type used to create the shape (MS_NULL) does not matter
@@ -213,7 +216,7 @@ PHP_METHOD(shapeFileObj, getPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
/* Create a new shapeObj to hold the result
* Note that the type used to create the shape (MS_NULL) does not matter
@@ -256,7 +259,7 @@ PHP_METHOD(shapeFileObj, getExtent)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
/* Create a new rectObj to hold the result */
if ((rect = rectObj_new()) == NULL) {
@@ -293,8 +296,8 @@ PHP_METHOD(shapeFileObj, addShape)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape);
retval = shapefileObj_add(php_shapefile->shapefile, php_shape->shape);
@@ -320,8 +323,8 @@ PHP_METHOD(shapeFileObj, addPoint)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint);
retval = shapefileObj_addPoint(php_shapefile->shapefile, php_point->point);
@@ -349,8 +352,8 @@ PHP_METHOD(shapeFileObj, getTransformed)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC);
- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
/* Create a new shapeObj to hold the result
* Note that the type used to create the shape (MS_NULL) does not matter
@@ -389,7 +392,7 @@ PHP_METHOD(shapeFileObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj);
MAPSCRIPT_DELREF(php_shapefile->bounds);
}
@@ -416,10 +419,59 @@ void mapscript_create_shapefile(shapefileObj *shapefile, zval *return_value TSRM
php_shapefile_object * php_shapefile;
object_init_ex(return_value, mapscript_ce_shapefile);
- php_shapefile = (php_shapefile_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, return_value);
php_shapefile->shapefile = shapefile;
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_shapefile_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_shapefile_object *php_shapefile;
+
+ php_shapefile = ecalloc(1, sizeof(*php_shapefile) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_shapefile->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_shapefile->zobj, ce);
+
+ php_shapefile->zobj.handlers = &mapscript_shapefile_object_handlers;
+
+ ZVAL_UNDEF(&php_shapefile->bounds);
+
+ return &php_shapefile->zobj;
+}
+
+static void mapscript_shapefile_free_object(zend_object *object)
+{
+ php_shapefile_object *php_shapefile;
+
+ php_shapefile = (php_shapefile_object *)((char *)object - XtOffsetOf(php_shapefile_object, zobj));
+
+ MAPSCRIPT_DELREF(php_shapefile->bounds);
+
+ shapefileObj_destroy(php_shapefile->shapefile);
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(shapefile)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "shapefileObj", shapefile_functions);
+ mapscript_ce_shapefile = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_shapefile->create_object = mapscript_shapefile_create_object;
+ mapscript_ce_shapefile->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_shapefile_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_shapefile_object_handlers));
+ mapscript_shapefile_object_handlers.free_obj = mapscript_shapefile_free_object;
+ mapscript_shapefile_object_handlers.offset = XtOffsetOf(php_shapefile_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_shapefile_object_destroy(void *object TSRMLS_DC)
{
php_shapefile_object *php_shapefile = (php_shapefile_object *)object;
@@ -461,3 +513,4 @@ PHP_MINIT_FUNCTION(shapefile)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/style.c b/mapscript/php/style.c
index b5a53f179..963718b9e 100644
--- a/mapscript/php/style.c
+++ b/mapscript/php/style.c
@@ -94,19 +94,19 @@ PHP_METHOD(styleObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *)zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
if (Z_TYPE_P(zparent) == IS_OBJECT && Z_OBJCE_P(zparent) == mapscript_ce_class)
- php_class = (php_class_object *)zend_object_store_get_object(zparent TSRMLS_CC);
+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zparent);
else if (Z_TYPE_P(zparent) == IS_OBJECT && Z_OBJCE_P(zparent) == mapscript_ce_label)
- php_label = (php_label_object *)zend_object_store_get_object(zparent TSRMLS_CC);
+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zparent);
else {
mapscript_throw_mapserver_exception("Invalid argument 1: should be a classObj or labelObj" TSRMLS_CC);
return;
}
if (zstyle)
- php_style2 = (php_style_object *)zend_object_store_get_object(zstyle TSRMLS_CC);
+ php_style2 = MAPSCRIPT_OBJ_P(php_style_object, zstyle);
if (php_class) {
if ((style = styleObj_new(php_class->class, (zstyle ? php_style2->style : NULL))) == NULL) {
@@ -124,7 +124,7 @@ PHP_METHOD(styleObj, __construct)
MAPSCRIPT_MAKE_PARENT(zparent, NULL);
php_style->parent = parent;
- MAPSCRIPT_ADDREF(zparent);
+ MAPSCRIPT_ADDREF_P(zparent);
}
/* }}} */
@@ -143,7 +143,7 @@ PHP_METHOD(styleObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
IF_GET_LONG("symbol", php_style->style->symbol)
else IF_GET_STRING("symbolname", php_style->style->symbolname)
@@ -207,7 +207,7 @@ PHP_METHOD(styleObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
IF_SET_LONG("symbol", php_style->style->symbol, value)
else IF_SET_DOUBLE("size", php_style->style->size, value)
@@ -259,24 +259,24 @@ PHP_METHOD(styleObj, __set)
php_style->style->symbolname = strdup(Z_STRVAL_P(value));
/* The parent can be a classObj or a labelCacheMemberObj */
- if (Z_OBJCE_P(php_style->parent.val) == mapscript_ce_class) {
- php_class = (php_class_object *) zend_object_store_get_object(php_style->parent.val TSRMLS_CC);
+ if (MAPSCRIPT_OBJCE(php_style->parent.val) == mapscript_ce_class) {
+ php_class = MAPSCRIPT_OBJ(php_class_object, php_style->parent.val);
/* Can a class have no layer object ? */
- php_layer = (php_layer_object *) zend_object_store_get_object(php_class->parent.val TSRMLS_CC);
- if (!php_layer->parent.val) {
+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class->parent.val);
+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) {
mapscript_throw_exception("No map object associated with this style object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val);
#ifdef disabled
- } else if (Z_OBJCE_P(php_style->parent.val) == mapscript_ce_labelcachemember) {
+ } else if (MAPSCRIPT_OBJCE(php_style->parent.val) == mapscript_ce_labelcachemember) {
/* The parent is always a map */
- php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(php_style->parent.val TSRMLS_CC);
- if (!php_labelcachemember->parent.val) {
+ php_labelcachemember = MAPSCRIPT_OBJ(php_labelcachemember_object, php_style->parent.val);
+ if (ZVAL_NOT_UNDEF(php_labelcachemember->parent.val)) {
mapscript_throw_exception("No map object associated with this style object." TSRMLS_CC);
return;
}
- php_map = (php_map_object *) zend_object_store_get_object(php_labelcachemember->parent.val TSRMLS_CC);
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_labelcachemember->parent.val);
#endif
}
@@ -308,7 +308,7 @@ PHP_METHOD(styleObj, updateFromString)
char *snippet;
long snippet_len = 0;
int status = MS_FAILURE;
- zval *retval;
+ MAPSCRIPT_ZVAL retval;
zval property_name, value;
php_style_object *php_style;
@@ -320,7 +320,7 @@ PHP_METHOD(styleObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
if ((status = styleObj_updateFromString(php_style->style, snippet)) != MS_SUCCESS) {
mapscript_throw_mapserver_exception("" TSRMLS_CC);
@@ -331,9 +331,9 @@ PHP_METHOD(styleObj, updateFromString)
if (php_style->style->symbolname) {
INIT_ZVAL(property_name);
INIT_ZVAL(value);
- ZVAL_STRING(&property_name, "symbolname", 1);
- ZVAL_STRING(&value, php_style->style->symbolname, 1);
- MAPSCRIPT_CALL_METHOD_2(zobj, "__set", retval, &property_name, &value);
+ MAPSCRIPT_ZVAL_STRING(&property_name, "symbolname", 1);
+ MAPSCRIPT_ZVAL_STRING(&value, php_style->style->symbolname, 1);
+ MAPSCRIPT_CALL_METHOD_2_P(zobj, "__set", retval, &property_name, &value);
}
RETURN_LONG(status);
@@ -355,14 +355,14 @@ PHP_METHOD(styleObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
value = styleObj_convertToString(php_style->style);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -385,7 +385,7 @@ PHP_METHOD(styleObj, setBinding)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
if (bindingId < 0 || bindingId > MS_STYLE_BINDING_LENGTH) {
mapscript_throw_exception("Invalid binding id." TSRMLS_CC);
@@ -428,7 +428,7 @@ PHP_METHOD(styleObj, getBinding)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
if (bindingId < 0 || bindingId > MS_STYLE_BINDING_LENGTH) {
mapscript_throw_exception("Invalid binding id." TSRMLS_CC);
@@ -436,7 +436,7 @@ PHP_METHOD(styleObj, getBinding)
}
if( (value = php_style->style->bindings[bindingId].item) != NULL) {
- RETURN_STRING(value, 1);
+ MAPSCRIPT_RETURN_STRING(value, 1);
}
RETURN_NULL();
@@ -460,7 +460,7 @@ PHP_METHOD(styleObj, removeBinding)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
if (bindingId < 0 || bindingId > MS_STYLE_BINDING_LENGTH) {
mapscript_throw_exception("Invalid binding id." TSRMLS_CC);
@@ -494,7 +494,7 @@ PHP_METHOD(styleObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
MAPSCRIPT_DELREF(php_style->color);
MAPSCRIPT_DELREF(php_style->outlinecolor);
@@ -516,13 +516,13 @@ PHP_METHOD(styleObj, getGeomTransform)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
if (php_style->style->_geomtransform.type == MS_GEOMTRANSFORM_NONE ||
!php_style->style->_geomtransform.string)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETURN_STRING(php_style->style->_geomtransform.string, 1);
+ MAPSCRIPT_RETURN_STRING(php_style->style->_geomtransform.string, 1);
}
/* }}} */
@@ -543,7 +543,7 @@ PHP_METHOD(styleObj, setGeomTransform)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
styleObj_setGeomTransform(php_style->style, transform);
}
@@ -553,7 +553,8 @@ PHP_METHOD(styleObj, setGeomTransform)
Set the pattern of the style ) */
PHP_METHOD(styleObj, setPattern)
{
- zval *zpattern, **ppzval;
+ zval *zpattern;
+ MAPSCRIPT_ZVAL_P ppzval;
HashTable *pattern_hash = NULL;
zval *zobj = getThis();
int index = 0, numelements = 0;
@@ -567,7 +568,7 @@ PHP_METHOD(styleObj, setPattern)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
pattern_hash = Z_ARRVAL_P(zpattern);
numelements = zend_hash_num_elements(pattern_hash);
@@ -581,9 +582,15 @@ PHP_METHOD(styleObj, setPattern)
zend_hash_has_more_elements(pattern_hash) == SUCCESS;
zend_hash_move_forward(pattern_hash)) {
+#if PHP_VERSION_ID < 70000
zend_hash_get_current_data(pattern_hash, (void **)&ppzval);
if (Z_TYPE_PP(ppzval) != IS_LONG)
convert_to_long(*ppzval);
+#else
+ ppzval = zend_hash_get_current_data(pattern_hash);
+ if (Z_TYPE_P(ppzval) != IS_DOUBLE)
+ convert_to_double(ppzval);
+#endif
php_style->style->pattern[index] = Z_LVAL_PP(ppzval);
index++;
@@ -610,7 +617,7 @@ PHP_METHOD(styleObj, getPatternArray)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj);
array_init(return_value);
@@ -646,7 +653,7 @@ void mapscript_create_style(styleObj *style, parent_object parent, zval *return_
{
php_style_object * php_style;
object_init_ex(return_value, mapscript_ce_style);
- php_style = (php_style_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_style = MAPSCRIPT_OBJ_P(php_style_object, return_value);
php_style->style = style;
php_style->parent = parent;
@@ -654,6 +661,79 @@ void mapscript_create_style(styleObj *style, parent_object parent, zval *return_
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_style_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_style_object *php_style;
+
+ php_style = ecalloc(1, sizeof(*php_style) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_style->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_style->zobj, ce);
+
+ php_style->zobj.handlers = &mapscript_style_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_style->parent);
+ ZVAL_UNDEF(&php_style->color);
+ ZVAL_UNDEF(&php_style->outlinecolor);
+ ZVAL_UNDEF(&php_style->backgroundcolor);
+
+ return &php_style->zobj;
+}
+
+static void mapscript_style_free_object(zend_object *object)
+{
+ php_style_object *php_style;
+
+ php_style = (php_style_object *)((char *)object - XtOffsetOf(php_style_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_style->parent);
+ MAPSCRIPT_DELREF(php_style->color);
+ MAPSCRIPT_DELREF(php_style->outlinecolor);
+ MAPSCRIPT_DELREF(php_style->backgroundcolor);
+
+ /* We don't need to free the styleObj, the mapObj will do it */
+
+ zend_object_std_dtor(object);
+}
+
+static zend_object* mapscript_style_clone_object(zval *zobj)
+{
+ php_style_object *php_style_old, *php_style_new;
+ zend_object* zobj_new;
+
+ php_style_old = MAPSCRIPT_OBJ_P(php_style_object, zobj);
+
+ zobj_new = mapscript_style_create_object(mapscript_ce_style);
+ php_style_new = (php_style_object *)((char *)zobj_new - XtOffsetOf(php_style_object, zobj));
+
+ zend_objects_clone_members(&php_style_new->zobj, &php_style_old->zobj);
+
+ php_style_new->style = styleObj_clone(php_style_old->style);
+
+ return zobj_new;
+}
+
+PHP_MINIT_FUNCTION(style)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "styleObj", style_functions);
+ mapscript_ce_style = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_style->create_object = mapscript_style_create_object;
+ mapscript_ce_style->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_style_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_style_object_handlers));
+ mapscript_style_object_handlers.free_obj = mapscript_style_free_object;
+ mapscript_style_object_handlers.clone_obj = mapscript_style_clone_object;
+ mapscript_style_object_handlers.offset = XtOffsetOf(php_style_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_style_object_destroy(void *object TSRMLS_DC)
{
php_style_object *php_style = (php_style_object *)object;
@@ -701,7 +781,7 @@ static zend_object_value mapscript_style_object_clone(zval *zobj TSRMLS_DC)
php_style_object *php_style_old, *php_style_new;
zend_object_value new_ov;
- php_style_old = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_style_old = MAPSCRIPT_OBJ_P(php_style_object, zobj);
new_ov = mapscript_style_object_new_ex(mapscript_ce_style, &php_style_new TSRMLS_CC);
zend_objects_clone_members(&php_style_new->std, new_ov, &php_style_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC);
@@ -727,4 +807,4 @@ PHP_MINIT_FUNCTION(style)
return SUCCESS;
}
-
+#endif
diff --git a/mapscript/php/symbol.c b/mapscript/php/symbol.c
index 8b53ec9b5..6928e1168 100644
--- a/mapscript/php/symbol.c
+++ b/mapscript/php/symbol.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_symbol;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_symbol_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(symbol___construct_args, 0, 0, 2)
ZEND_ARG_OBJ_INFO(0, map, mapObj, 0)
@@ -84,8 +87,8 @@ PHP_METHOD(symbolObj, __construct)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_symbol = (php_symbol_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
- php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, getThis());
+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap);
symbolId = msAddNewSymbol(php_map->map, symbolName);
@@ -98,7 +101,7 @@ PHP_METHOD(symbolObj, __construct)
MAPSCRIPT_MAKE_PARENT(zmap, NULL);
php_symbol->parent = parent;
- MAPSCRIPT_ADDREF(zmap);
+ MAPSCRIPT_ADDREF_P(zmap);
}
/* }}} */
@@ -117,7 +120,7 @@ PHP_METHOD(symbolObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj);
IF_GET_STRING("name", php_symbol->symbol->name)
else IF_GET_LONG("type", php_symbol->symbol->type)
@@ -158,7 +161,7 @@ PHP_METHOD(symbolObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj);
IF_SET_STRING("name", php_symbol->symbol->name, value)
else IF_SET_LONG("type", php_symbol->symbol->type, value)
@@ -188,7 +191,8 @@ PHP_METHOD(symbolObj, __set)
Set the points of the symbol ) */
PHP_METHOD(symbolObj, setPoints)
{
- zval *zpoints, **ppzval;
+ zval *zpoints;
+ MAPSCRIPT_ZVAL_P ppzval;
HashTable *points_hash = NULL;
zval *zobj = getThis();
int index = 0, flag = 0, numelements = 0;
@@ -202,7 +206,7 @@ PHP_METHOD(symbolObj, setPoints)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj);
points_hash = Z_ARRVAL_P(zpoints);
numelements = zend_hash_num_elements(points_hash);
@@ -217,9 +221,15 @@ PHP_METHOD(symbolObj, setPoints)
zend_hash_has_more_elements(points_hash) == SUCCESS;
zend_hash_move_forward(points_hash)) {
+#if PHP_VERSION_ID < 70000
zend_hash_get_current_data(points_hash, (void **)&ppzval);
if (Z_TYPE_PP(ppzval) != IS_DOUBLE)
convert_to_double(*ppzval);
+#else
+ ppzval = zend_hash_get_current_data(points_hash);
+ if (Z_TYPE_P(ppzval) != IS_DOUBLE)
+ convert_to_double(ppzval);
+#endif
if (!flag) {
php_symbol->symbol->points[index].x = Z_DVAL_PP(ppzval);
@@ -254,7 +264,7 @@ PHP_METHOD(symbolObj, getPointsArray)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj);
array_init(return_value);
@@ -287,7 +297,7 @@ PHP_METHOD(symbolObj, setImagePath)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj);
status = msLoadImageSymbol(php_symbol->symbol, filename);
@@ -316,8 +326,8 @@ PHP_METHOD(symbolObj, setImage)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_symbol = (php_symbol_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
- php_image = (php_image_object *)zend_object_store_get_object(zimage TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, getThis());
+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage);
RETURN_LONG(symbolObj_setImage(php_symbol->symbol, php_image->image));
}
@@ -341,9 +351,9 @@ PHP_METHOD(symbolObj, getImage)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_symbol = (php_symbol_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
- php_map = (php_map_object *) zend_object_store_get_object(php_symbol->parent.val TSRMLS_CC);
- php_outputformat = (php_outputformat_object *)zend_object_store_get_object(zoutputformat TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, getThis());
+ php_map = MAPSCRIPT_OBJ(php_map_object, php_symbol->parent.val);
+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zoutputformat);
image = symbolObj_getImage(php_symbol->symbol, php_outputformat->outputformat);
if (image == NULL) {
@@ -360,7 +370,7 @@ PHP_METHOD(symbolObj, getImage)
} /* }}} */
zend_function_entry symbol_functions[] = {
- PHP_ME(symbolObj, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
+ PHP_ME(symbolObj, __construct, symbol___construct_args, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
PHP_ME(symbolObj, __get, symbol___get_args, ZEND_ACC_PUBLIC)
PHP_ME(symbolObj, __set, symbol___set_args, ZEND_ACC_PUBLIC)
PHP_MALIAS(symbolObj, set, __set, NULL, ZEND_ACC_PUBLIC)
@@ -377,7 +387,7 @@ void mapscript_create_symbol(symbolObj *symbol, parent_object parent, zval *retu
{
php_symbol_object * php_symbol;
object_init_ex(return_value, mapscript_ce_symbol);
- php_symbol = (php_symbol_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, return_value);
php_symbol->symbol = symbol;
php_symbol->parent = parent;
@@ -385,6 +395,55 @@ void mapscript_create_symbol(symbolObj *symbol, parent_object parent, zval *retu
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_symbol_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_symbol_object *php_symbol;
+
+ php_symbol = ecalloc(1, sizeof(*php_symbol) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_symbol->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_symbol->zobj, ce);
+
+ php_symbol->zobj.handlers = &mapscript_symbol_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_symbol->parent);
+
+ return &php_symbol->zobj;
+}
+
+static void mapscript_symbol_free_object(zend_object *object)
+{
+ php_symbol_object *php_symbol;
+
+ php_symbol = (php_symbol_object *)((char *)object - XtOffsetOf(php_symbol_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_symbol->parent);
+
+ /* We don't need to free the symbolObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(symbol)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "symbolObj", symbol_functions);
+ mapscript_ce_symbol = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_symbol->create_object = mapscript_symbol_create_object;
+ mapscript_ce_symbol->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_symbol_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_symbol_object_handlers));
+ mapscript_symbol_object_handlers.free_obj = mapscript_symbol_free_object;
+ mapscript_symbol_object_handlers.offset = XtOffsetOf(php_symbol_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_symbol_object_destroy(void *object TSRMLS_DC)
{
php_symbol_object *php_symbol = (php_symbol_object *)object;
@@ -426,3 +485,4 @@ PHP_MINIT_FUNCTION(symbol)
return SUCCESS;
}
+#endif
diff --git a/mapscript/php/web.c b/mapscript/php/web.c
index 51ec72f36..41f7c7cff 100644
--- a/mapscript/php/web.c
+++ b/mapscript/php/web.c
@@ -32,6 +32,9 @@
#include "php_mapscript.h"
zend_class_entry *mapscript_ce_web;
+#if PHP_VERSION_ID >= 70000
+zend_object_handlers mapscript_web_object_handlers;
+#endif
ZEND_BEGIN_ARG_INFO_EX(web___get_args, 0, 0, 1)
ZEND_ARG_INFO(0, property)
@@ -69,7 +72,7 @@ PHP_METHOD(webObj, __get)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj);
IF_GET_STRING("log", php_web->web->log)
else IF_GET_STRING("imagepath", php_web->web->imagepath)
@@ -111,7 +114,7 @@ PHP_METHOD(webObj, __set)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj);
IF_SET_STRING("log", php_web->web->log, value)
else IF_SET_STRING("imagepath", php_web->web->imagepath, value)
@@ -157,7 +160,7 @@ PHP_METHOD(webObj, updateFromString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj);
status = webObj_updateFromString(php_web->web, snippet);
@@ -185,14 +188,14 @@ PHP_METHOD(webObj, convertToString)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj);
value = webObj_convertToString(php_web->web);
if (value == NULL)
- RETURN_STRING("", 1);
+ MAPSCRIPT_RETURN_STRING("", 1);
- RETVAL_STRING(value, 1);
+ MAPSCRIPT_RETVAL_STRING(value, 1);
free(value);
}
/* }}} */
@@ -211,7 +214,7 @@ PHP_METHOD(webObj, free)
}
PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE);
- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC);
+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj);
MAPSCRIPT_DELREF(php_web->extent);
MAPSCRIPT_DELREF(php_web->metadata);
@@ -235,13 +238,68 @@ void mapscript_create_web(webObj *web, parent_object parent, zval *return_value
{
php_web_object * php_web;
object_init_ex(return_value, mapscript_ce_web);
- php_web = (php_web_object *)zend_object_store_get_object(return_value TSRMLS_CC);
+ php_web = MAPSCRIPT_OBJ_P(php_web_object, return_value);
php_web->web = web;
php_web->parent = parent;
MAPSCRIPT_ADDREF(parent.val);
}
+#if PHP_VERSION_ID >= 70000
+/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
+static zend_object *mapscript_web_create_object(zend_class_entry *ce TSRMLS_DC)
+{
+ php_web_object *php_web;
+
+ php_web = ecalloc(1, sizeof(*php_web) + zend_object_properties_size(ce));
+
+ zend_object_std_init(&php_web->zobj, ce TSRMLS_CC);
+ object_properties_init(&php_web->zobj, ce);
+
+ php_web->zobj.handlers = &mapscript_web_object_handlers;
+
+ MAPSCRIPT_INIT_PARENT(php_web->parent);
+ ZVAL_UNDEF(&php_web->extent);
+ ZVAL_UNDEF(&php_web->metadata);
+ ZVAL_UNDEF(&php_web->validation);
+
+ return &php_web->zobj;
+}
+
+static void mapscript_web_free_object(zend_object *object)
+{
+ php_web_object *php_web;
+
+ php_web = (php_web_object *)((char *)object - XtOffsetOf(php_web_object, zobj));
+
+ MAPSCRIPT_FREE_PARENT(php_web->parent);
+ MAPSCRIPT_DELREF(php_web->extent);
+ MAPSCRIPT_DELREF(php_web->metadata);
+ MAPSCRIPT_DELREF(php_web->validation);
+
+ /* We don't need to free the webObj */
+
+ zend_object_std_dtor(object);
+}
+
+PHP_MINIT_FUNCTION(web)
+{
+ zend_class_entry ce;
+
+ INIT_CLASS_ENTRY(ce, "webObj", web_functions);
+ mapscript_ce_web = zend_register_internal_class(&ce TSRMLS_CC);
+
+ mapscript_ce_web->create_object = mapscript_web_create_object;
+ mapscript_ce_web->ce_flags |= ZEND_ACC_FINAL;
+
+ memcpy(&mapscript_web_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_web_object_handlers));
+ mapscript_web_object_handlers.free_obj = mapscript_web_free_object;
+ mapscript_web_object_handlers.offset = XtOffsetOf(php_web_object, zobj);
+
+ return SUCCESS;
+}
+#else
+/* PHP5 */
static void mapscript_web_object_destroy(void *object TSRMLS_DC)
{
php_web_object *php_web = (php_web_object *)object;
@@ -289,3 +347,4 @@ PHP_MINIT_FUNCTION(web)
return SUCCESS;
}
+#endif
From f54ce3a08f9a735b32b648b8be7dabd848965c88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Boldt?= <mapscript@pixaweb.net>
Date: Fri, 10 Nov 2017 14:43:20 +0100
Subject: [PATCH 2/5] Fix bug in msQueryByFilter()
Mapserver crashes in msQueryByFilter() if an error occurs (e.g. filteritem name is not a column name of the shape). We have to restore lp->filteritem and lp->filter. Why was this commented out?
---
mapquery.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mapquery.c b/mapquery.c
index a0766911d..3ff0ff6e1 100644
--- a/mapquery.c
+++ b/mapquery.c
@@ -864,10 +864,10 @@ int msQueryByFilter(mapObj *map)
query_error:
// msFree(lp->filteritem);
- // lp->filteritem = old_filteritem;
- // msCopyExpression(&lp->filter, &old_filter); /* restore old filter */
- // msFreeExpression(&old_filter);
- // msLayerClose(lp);
+ lp->filteritem = old_filteritem;
+ msCopyExpression(&lp->filter, &old_filter); /* restore old filter */
+ msFreeExpression(&old_filter);
+ msLayerClose(lp);
return MS_FAILURE;
}
From a5049b7ba8b2ab4c278cca1993566b3ef1b4cb9b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Boldt?= <mapscript@pixaweb.net>
Date: Fri, 10 Nov 2017 15:16:14 +0100
Subject: [PATCH 3/5] Update mapquery.c
---
mapquery.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mapquery.c b/mapquery.c
index 3ff0ff6e1..34b483221 100644
--- a/mapquery.c
+++ b/mapquery.c
@@ -736,7 +736,7 @@ int msQueryByFilter(mapObj *map)
paging = msLayerGetPaging(lp);
msLayerClose(lp); /* reset */
status = msLayerOpen(lp);
- if(status != MS_SUCCESS) goto query_error;
+ if(status != MS_SUCCESS) return MS_FAILURE;
msLayerEnablePaging(lp, paging);
/* disable driver paging */
From 54256aa1611a6c21e1a7e50ceaaaf9735bdbb7a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Boldt?= <mapscript@pixaweb.net>
Date: Tue, 27 Mar 2018 10:07:21 +0200
Subject: [PATCH 4/5] Moving function mapscript_create_legend
Fixing error "undefined symbol: mapscript_create_legend" in PHP7
---
mapscript/php/legend.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/mapscript/php/legend.c b/mapscript/php/legend.c
index 29e080df7..742cc0c00 100644
--- a/mapscript/php/legend.c
+++ b/mapscript/php/legend.c
@@ -220,6 +220,17 @@ zend_function_entry legend_functions[] = {
}
};
+void mapscript_create_legend(legendObj *legend, parent_object parent, zval *return_value TSRMLS_DC)
+{
+ php_legend_object * php_legend;
+ object_init_ex(return_value, mapscript_ce_legend);
+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, return_value);
+ php_legend->legend = legend;
+
+ php_legend->parent = parent;
+ MAPSCRIPT_ADDREF(parent.val);
+}
+
#if PHP_VERSION_ID >= 70000
/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
@@ -276,17 +287,6 @@ PHP_MINIT_FUNCTION(legend)
}
#else
/* PHP5 */
-void mapscript_create_legend(legendObj *legend, parent_object parent, zval *return_value TSRMLS_DC)
-{
- php_legend_object * php_legend;
- object_init_ex(return_value, mapscript_ce_legend);
- php_legend = MAPSCRIPT_OBJ_P(php_legend_object, return_value);
- php_legend->legend = legend;
-
- php_legend->parent = parent;
- MAPSCRIPT_ADDREF(parent.val);
-}
-
static void mapscript_legend_object_destroy(void *object TSRMLS_DC)
{
php_legend_object *php_legend = (php_legend_object *)object;
From fd3cbf6cb23c7a558893e7e11cde419049ea4fdf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Boldt?= <mapscript@pixaweb.net>
Date: Tue, 27 Mar 2018 15:24:51 +0200
Subject: [PATCH 5/5] Moving function void mapscript_create_grid
---
mapscript/php/grid.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/mapscript/php/grid.c b/mapscript/php/grid.c
index c13f54bc3..f57e91fe5 100644
--- a/mapscript/php/grid.c
+++ b/mapscript/php/grid.c
@@ -176,6 +176,17 @@ zend_function_entry grid_functions[] = {
}
};
+void mapscript_create_grid(graticuleObj *grid, parent_object parent, zval *return_value TSRMLS_DC)
+{
+ php_grid_object * php_grid;
+ object_init_ex(return_value, mapscript_ce_grid);
+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, return_value);
+ php_grid->grid = grid;
+
+ php_grid->parent = parent;
+ MAPSCRIPT_ADDREF(parent.val);
+}
+
#if PHP_VERSION_ID >= 70000
/* PHP7 - Modification by Bjoern Boldt <mapscript@pixaweb.net> */
static zend_object *mapscript_grid_create_object(zend_class_entry *ce TSRMLS_DC)
@@ -225,17 +236,6 @@ PHP_MINIT_FUNCTION(grid)
}
#else
/* PHP5 */
-void mapscript_create_grid(graticuleObj *grid, parent_object parent, zval *return_value TSRMLS_DC)
-{
- php_grid_object * php_grid;
- object_init_ex(return_value, mapscript_ce_grid);
- php_grid = MAPSCRIPT_OBJ_P(php_grid_object, return_value);
- php_grid->grid = grid;
-
- php_grid->parent = parent;
- MAPSCRIPT_ADDREF(parent.val);
-}
-
static void mapscript_grid_object_destroy(void *object TSRMLS_DC)
{
php_grid_object *php_grid = (php_grid_object *)object;
@@ -277,4 +277,4 @@ PHP_MINIT_FUNCTION(grid)
return SUCCESS;
}
-#endif
\ No newline at end of file
+#endif