|
@@ -0,0 +1,826 @@
|
|
|
+/*
|
|
|
+ +----------------------------------------------------------------------+
|
|
|
+ | XlsWriter Extension |
|
|
|
+ +----------------------------------------------------------------------+
|
|
|
+ | Copyright (c) 2017-2018 The Viest |
|
|
|
+ +----------------------------------------------------------------------+
|
|
|
+ | http://www.viest.me |
|
|
|
+ +----------------------------------------------------------------------+
|
|
|
+ | Author: viest <[email protected]> |
|
|
|
+ +----------------------------------------------------------------------+
|
|
|
+*/
|
|
|
+
|
|
|
+#include "xlswriter.h"
|
|
|
+
|
|
|
+zend_class_entry *vtiful_validation_ce;
|
|
|
+
|
|
|
+/* {{{ validation_objects_new
|
|
|
+ */
|
|
|
+static zend_object_handlers validation_handlers;
|
|
|
+
|
|
|
+static zend_always_inline void *vtiful_validation_object_alloc(size_t obj_size, zend_class_entry *ce) {
|
|
|
+ void *obj = emalloc(obj_size);
|
|
|
+ memset(obj, 0, obj_size);
|
|
|
+ return obj;
|
|
|
+}
|
|
|
+
|
|
|
+PHP_VTIFUL_API zend_object *validation_objects_new(zend_class_entry *ce)
|
|
|
+{
|
|
|
+ validation_object *validation = vtiful_validation_object_alloc(sizeof(validation_object), ce);
|
|
|
+
|
|
|
+ zend_object_std_init(&validation->zo, ce);
|
|
|
+ object_properties_init(&validation->zo, ce);
|
|
|
+
|
|
|
+ validation->ptr.validation = NULL;
|
|
|
+
|
|
|
+ validation->zo.handlers = &validation_handlers;
|
|
|
+
|
|
|
+ return &validation->zo;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/* {{{ validation_objects_free
|
|
|
+ */
|
|
|
+static void validation_objects_free(zend_object *object)
|
|
|
+{
|
|
|
+ validation_object *intern = php_vtiful_validation_fetch_object(object);
|
|
|
+
|
|
|
+ if (intern->ptr.validation->value_list != NULL) {
|
|
|
+ int index = 0;
|
|
|
+
|
|
|
+ do {
|
|
|
+ if (intern->ptr.validation->value_list[index] == NULL) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ efree(intern->ptr.validation->value_list[index]);
|
|
|
+ index++;
|
|
|
+ } while (1);
|
|
|
+
|
|
|
+ efree(intern->ptr.validation->value_list);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (intern->ptr.validation != NULL) {
|
|
|
+ efree(intern->ptr.validation);
|
|
|
+ }
|
|
|
+
|
|
|
+ zend_object_std_dtor(&intern->zo);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/* {{{ ARG_INFO
|
|
|
+ */
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_construct_arginfo, 0, 0, 0)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_type_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, type)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_criteria_type_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, type)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_ignore_blank_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, ignore_blank)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_show_input_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, show_input)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_show_error_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, show_error)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_error_type_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, error_type)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_dropdown_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, dropdown)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_value_number_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, value_number)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_value_formula_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, value_formula)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_value_list_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, value_list)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_value_date_time_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, timestamp)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_minimum_number_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, minimum_number)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_minimum_formula_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, minimum_formula)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_minimum_datetime_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, timestamp)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_maximum_number_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, maximum_number)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_maximum_formula_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, maximum_formula)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_maximum_datetime_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, maximum_datetime)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_input_title_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, input_title)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_input_message_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, input_message)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_error_title_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, error_titile)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_error_message_arginfo, 0, 0, 1)
|
|
|
+ ZEND_ARG_INFO(0, error_message)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(validation_to_resource_arginfo, 0, 0, 1)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::__construct()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, __construct)
|
|
|
+{
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ obj->ptr.validation = ecalloc(1, sizeof(lxw_data_validation));
|
|
|
+ }
|
|
|
+
|
|
|
+ obj->ptr.validation->value_list = NULL;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::validationType()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, validationType)
|
|
|
+{
|
|
|
+ zend_long zl_validate_type = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_LONG(zl_validate_type)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (zl_validate_type < LXW_VALIDATION_TYPE_NONE || zl_validate_type > LXW_VALIDATION_TYPE_ANY) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->validate = zl_validate_type;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::criteriaType()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, criteriaType)
|
|
|
+{
|
|
|
+ zend_long zl_criteria_type = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_LONG(zl_criteria_type)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (zl_criteria_type < LXW_VALIDATION_CRITERIA_NONE || zl_criteria_type > LXW_VALIDATION_CRITERIA_LESS_THAN_OR_EQUAL_TO) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->criteria = zl_criteria_type;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::ignoreBlank()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, ignoreBlank)
|
|
|
+{
|
|
|
+ zend_bool zb_ignore_blank = 1;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
+ Z_PARAM_OPTIONAL
|
|
|
+ Z_PARAM_BOOL(zb_ignore_blank)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ if (zb_ignore_blank) {
|
|
|
+ obj->ptr.validation->ignore_blank = LXW_VALIDATION_ON;
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ obj->ptr.validation->ignore_blank = LXW_VALIDATION_OFF;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::showInput()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, showInput)
|
|
|
+{
|
|
|
+ zend_bool zb_show_input = 1;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
+ Z_PARAM_OPTIONAL
|
|
|
+ Z_PARAM_BOOL(zb_show_input)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ if (zb_show_input) {
|
|
|
+ obj->ptr.validation->show_input = LXW_VALIDATION_ON;
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ obj->ptr.validation->show_input = LXW_VALIDATION_OFF;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::showError()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, showError)
|
|
|
+{
|
|
|
+ zend_bool zb_show_error = 1;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
+ Z_PARAM_OPTIONAL
|
|
|
+ Z_PARAM_BOOL(zb_show_error)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ if (zb_show_error) {
|
|
|
+ obj->ptr.validation->show_error = LXW_VALIDATION_ON;
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ obj->ptr.validation->show_error = LXW_VALIDATION_OFF;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::errorType()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, errorType)
|
|
|
+{
|
|
|
+ zend_long zl_error_type = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_LONG(zl_error_type)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (zl_error_type < LXW_VALIDATION_ERROR_TYPE_STOP || zl_error_type > LXW_VALIDATION_ERROR_TYPE_INFORMATION) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->error_type = zl_error_type;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::dropdown()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, dropdown)
|
|
|
+{
|
|
|
+ zend_bool zb_dropdown = 1;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
+ Z_PARAM_OPTIONAL
|
|
|
+ Z_PARAM_BOOL(zb_dropdown)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ if (zb_dropdown) {
|
|
|
+ obj->ptr.validation->dropdown = LXW_VALIDATION_ON;
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ obj->ptr.validation->dropdown = LXW_VALIDATION_OFF;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::valueNumber()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, valueNumber)
|
|
|
+{
|
|
|
+ zend_long zl_value_number = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_LONG(zl_value_number)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->value_number = zl_value_number;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::valueFormula()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, valueFormula)
|
|
|
+{
|
|
|
+ zend_string *zs_value_formula = NULL;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_STR(zs_value_formula)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->value_formula = ZSTR_VAL(zs_value_formula);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::valueList()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, valueList)
|
|
|
+{
|
|
|
+ int index = 0;
|
|
|
+ char **list = NULL;
|
|
|
+
|
|
|
+ Bucket *bucket;
|
|
|
+ zval *zv_value_list = NULL;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_ARRAY(zv_value_list)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (obj->ptr.validation->value_list != NULL) {
|
|
|
+ do {
|
|
|
+ if (obj->ptr.validation->value_list[index] == NULL) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ efree(obj->ptr.validation->value_list[index]);
|
|
|
+ index++;
|
|
|
+ } while (1);
|
|
|
+
|
|
|
+ efree(obj->ptr.validation->value_list);
|
|
|
+ obj->ptr.validation->value_list = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ zend_array *za_value_list = Z_ARR_P(zv_value_list);
|
|
|
+
|
|
|
+ ZEND_HASH_FOREACH_BUCKET(za_value_list, bucket)
|
|
|
+ if (Z_TYPE(bucket->val) != IS_STRING) {
|
|
|
+ zend_throw_exception(vtiful_exception_ce, "Arrays can only consist of strings.", 300);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (ZSTR_LEN(bucket->val.value.str) == 0 ) {
|
|
|
+ zend_throw_exception(vtiful_exception_ce, "Array value is empty string.", 301);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ZEND_HASH_FOREACH_END();
|
|
|
+
|
|
|
+ index = 0;
|
|
|
+ list = ecalloc(za_value_list->nNumOfElements + 1, sizeof(char *));
|
|
|
+
|
|
|
+ ZEND_HASH_FOREACH_BUCKET(za_value_list, bucket)
|
|
|
+ list[index] = ecalloc(1, bucket->val.value.str->len + 1);
|
|
|
+ strcpy(list[index],bucket->val.value.str->val);
|
|
|
+ index++;
|
|
|
+ ZEND_HASH_FOREACH_END();
|
|
|
+
|
|
|
+ list[index] = NULL;
|
|
|
+
|
|
|
+ obj->ptr.validation->value_list = list;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::valueDatetime(int $timestamp)
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, valueDatetime)
|
|
|
+{
|
|
|
+ zend_long timestamp = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_LONG(timestamp)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ obj->ptr.validation->value_datetime = timestamp_to_datetime(timestamp);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::minimumNumber(double $minimumNumber)
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, minimumNumber)
|
|
|
+{
|
|
|
+ double minimum_number = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_DOUBLE(minimum_number)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->minimum_number = minimum_number;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::minimumFormula()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, minimumFormula)
|
|
|
+{
|
|
|
+ zend_string *zs_minimum_formula = NULL;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_STR(zs_minimum_formula)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->minimum_formula = ZSTR_VAL(zs_minimum_formula);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::minimumDatetime(int $timestamp)
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, minimumDatetime)
|
|
|
+{
|
|
|
+ zend_long timestamp = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_LONG(timestamp)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ obj->ptr.validation->minimum_datetime = timestamp_to_datetime(timestamp);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::maximumNumber(double $maximumNumber)
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, maximumNumber)
|
|
|
+{
|
|
|
+ double maximum_number = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_DOUBLE(maximum_number)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->maximum_number = maximum_number;
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::maximumFormula()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, maximumFormula)
|
|
|
+{
|
|
|
+ zend_string *zs_maximum_formula = NULL;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_STR(zs_maximum_formula)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->maximum_formula = ZSTR_VAL(zs_maximum_formula);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::maximumDatetime(int $timestamp)
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, maximumDatetime)
|
|
|
+{
|
|
|
+ zend_long timestamp = 0;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_LONG(timestamp)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ obj->ptr.validation->maximum_datetime = timestamp_to_datetime(timestamp);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::inputTitle()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, inputTitle)
|
|
|
+{
|
|
|
+ zend_string *zs_input_title = NULL;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_STR(zs_input_title)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->input_title = ZSTR_VAL(zs_input_title);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::inputMessage()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, inputMessage)
|
|
|
+{
|
|
|
+ zend_string *zs_input_message = NULL;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_STR(zs_input_message)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->input_message = ZSTR_VAL(zs_input_message);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::errorTitle()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, errorTitle)
|
|
|
+{
|
|
|
+ zend_string *zs_error_title = NULL;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_STR(zs_error_title)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->error_title = ZSTR_VAL(zs_error_title);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::errorMessage()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, errorMessage)
|
|
|
+{
|
|
|
+ zend_string *zs_error_message = NULL;
|
|
|
+ validation_object *obj = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
+ Z_PARAM_STR(zs_error_message)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ if (obj->ptr.validation == NULL) {
|
|
|
+ RETURN_NULL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ obj->ptr.validation->error_message = ZSTR_VAL(zs_error_message);
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\Validation::toResource()
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_validation, toResource)
|
|
|
+{
|
|
|
+ validation_object *obj = Z_VALIDATION_P(getThis());
|
|
|
+
|
|
|
+ RETURN_RES(zend_register_resource(obj->ptr.validation, le_xls_writer));
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ validation_methods
|
|
|
+*/
|
|
|
+zend_function_entry validation_methods[] = {
|
|
|
+ PHP_ME(vtiful_validation, __construct, validation_construct_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, validationType, validation_type_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, criteriaType, validation_criteria_type_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, ignoreBlank, validation_ignore_blank_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, showInput, validation_show_input_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, showError , validation_show_error_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, errorType , validation_error_type_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, dropdown , validation_dropdown_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, valueNumber, validation_value_number_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, valueFormula, validation_value_formula_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, valueList, validation_value_list_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, valueDatetime, validation_value_date_time_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, minimumNumber, validation_minimum_number_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, minimumFormula, validation_minimum_formula_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, minimumDatetime, validation_minimum_datetime_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, maximumNumber, validation_maximum_number_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, maximumFormula, validation_maximum_formula_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, maximumDatetime, validation_maximum_datetime_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, inputTitle, validation_input_title_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, inputMessage, validation_input_message_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, errorTitle, validation_error_title_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, errorMessage, validation_error_message_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_validation, toResource, validation_to_resource_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_FE_END
|
|
|
+};
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ VTIFUL_STARTUP_FUNCTION
|
|
|
+*/
|
|
|
+VTIFUL_STARTUP_FUNCTION(validation) {
|
|
|
+ zend_class_entry ce;
|
|
|
+
|
|
|
+ INIT_NS_CLASS_ENTRY(ce, "Vtiful\\Kernel", "Validation", validation_methods);
|
|
|
+ ce.create_object = validation_objects_new;
|
|
|
+ vtiful_validation_ce = zend_register_internal_class(&ce);
|
|
|
+
|
|
|
+ memcpy(&validation_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
|
|
|
+ validation_handlers.offset = XtOffsetOf(validation_object, zo);
|
|
|
+ validation_handlers.free_obj = validation_objects_free;
|
|
|
+
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_INTEGER", LXW_VALIDATION_TYPE_INTEGER)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_INTEGER_FORMULA", LXW_VALIDATION_TYPE_INTEGER_FORMULA)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DECIMAL", LXW_VALIDATION_TYPE_DECIMAL)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DECIMAL_FORMULA", LXW_VALIDATION_TYPE_DECIMAL_FORMULA)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_LIST", LXW_VALIDATION_TYPE_LIST)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_LIST_FORMULA", LXW_VALIDATION_TYPE_LIST_FORMULA)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DATE", LXW_VALIDATION_TYPE_DATE)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DATE_FORMULA", LXW_VALIDATION_TYPE_DATE_FORMULA)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DATE_NUMBER", LXW_VALIDATION_TYPE_DATE_NUMBER)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_TIME", LXW_VALIDATION_TYPE_TIME)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_TIME_FORMULA", LXW_VALIDATION_TYPE_TIME_FORMULA)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_TIME_NUMBER", LXW_VALIDATION_TYPE_TIME_NUMBER)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_LENGTH", LXW_VALIDATION_TYPE_LENGTH)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_LENGTH_FORMULA", LXW_VALIDATION_TYPE_LENGTH_FORMULA)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_CUSTOM_FORMULA", LXW_VALIDATION_TYPE_CUSTOM_FORMULA)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_ANY", LXW_VALIDATION_TYPE_ANY)
|
|
|
+
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_BETWEEN", LXW_VALIDATION_CRITERIA_BETWEEN)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_NOT_BETWEEN", LXW_VALIDATION_CRITERIA_NOT_BETWEEN)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_EQUAL_TO", LXW_VALIDATION_CRITERIA_EQUAL_TO)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_NOT_EQUAL_TO", LXW_VALIDATION_CRITERIA_NOT_EQUAL_TO)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_GREATER_THAN", LXW_VALIDATION_CRITERIA_GREATER_THAN)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_LESS_THAN", LXW_VALIDATION_CRITERIA_LESS_THAN)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_GREATER_THAN_OR_EQUAL_TO", LXW_VALIDATION_CRITERIA_GREATER_THAN_OR_EQUAL_TO)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_LESS_THAN_OR_EQUAL_TO", LXW_VALIDATION_CRITERIA_LESS_THAN_OR_EQUAL_TO)
|
|
|
+
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "ERROR_TYPE_STOP", LXW_VALIDATION_ERROR_TYPE_STOP)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "ERROR_TYPE_WARNING", LXW_VALIDATION_ERROR_TYPE_WARNING)
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "ERROR_TYPE_INFORMATION", LXW_VALIDATION_ERROR_TYPE_INFORMATION)
|
|
|
+
|
|
|
+ return SUCCESS;
|
|
|
+}
|
|
|
+/* }}} */
|