validation.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. /*
  2. +----------------------------------------------------------------------+
  3. | XlsWriter Extension |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 2017-2018 The Viest |
  6. +----------------------------------------------------------------------+
  7. | http://www.viest.me |
  8. +----------------------------------------------------------------------+
  9. | Author: viest <[email protected]> |
  10. +----------------------------------------------------------------------+
  11. */
  12. #include "xlswriter.h"
  13. zend_class_entry *vtiful_validation_ce;
  14. /* {{{ validation_objects_new
  15. */
  16. static zend_object_handlers validation_handlers;
  17. static zend_always_inline void *vtiful_validation_object_alloc(size_t obj_size, zend_class_entry *ce) {
  18. void *obj = emalloc(obj_size);
  19. memset(obj, 0, obj_size);
  20. return obj;
  21. }
  22. PHP_VTIFUL_API zend_object *validation_objects_new(zend_class_entry *ce)
  23. {
  24. validation_object *validation = vtiful_validation_object_alloc(sizeof(validation_object), ce);
  25. zend_object_std_init(&validation->zo, ce);
  26. object_properties_init(&validation->zo, ce);
  27. validation->ptr.validation = NULL;
  28. validation->zo.handlers = &validation_handlers;
  29. return &validation->zo;
  30. }
  31. /* }}} */
  32. /* {{{ validation_objects_free
  33. */
  34. static void validation_objects_free(zend_object *object)
  35. {
  36. validation_object *intern = php_vtiful_validation_fetch_object(object);
  37. if (intern->ptr.validation->value_list != NULL) {
  38. int index = 0;
  39. do {
  40. if (intern->ptr.validation->value_list[index] == NULL) {
  41. break;
  42. }
  43. efree(intern->ptr.validation->value_list[index]);
  44. index++;
  45. } while (1);
  46. efree(intern->ptr.validation->value_list);
  47. }
  48. if (intern->ptr.validation != NULL) {
  49. efree(intern->ptr.validation);
  50. }
  51. zend_object_std_dtor(&intern->zo);
  52. }
  53. /* }}} */
  54. /* {{{ ARG_INFO
  55. */
  56. ZEND_BEGIN_ARG_INFO_EX(validation_construct_arginfo, 0, 0, 0)
  57. ZEND_END_ARG_INFO()
  58. ZEND_BEGIN_ARG_INFO_EX(validation_type_arginfo, 0, 0, 1)
  59. ZEND_ARG_INFO(0, type)
  60. ZEND_END_ARG_INFO()
  61. ZEND_BEGIN_ARG_INFO_EX(validation_criteria_type_arginfo, 0, 0, 1)
  62. ZEND_ARG_INFO(0, type)
  63. ZEND_END_ARG_INFO()
  64. ZEND_BEGIN_ARG_INFO_EX(validation_ignore_blank_arginfo, 0, 0, 1)
  65. ZEND_ARG_INFO(0, ignore_blank)
  66. ZEND_END_ARG_INFO()
  67. ZEND_BEGIN_ARG_INFO_EX(validation_show_input_arginfo, 0, 0, 1)
  68. ZEND_ARG_INFO(0, show_input)
  69. ZEND_END_ARG_INFO()
  70. ZEND_BEGIN_ARG_INFO_EX(validation_show_error_arginfo, 0, 0, 1)
  71. ZEND_ARG_INFO(0, show_error)
  72. ZEND_END_ARG_INFO()
  73. ZEND_BEGIN_ARG_INFO_EX(validation_error_type_arginfo, 0, 0, 1)
  74. ZEND_ARG_INFO(0, error_type)
  75. ZEND_END_ARG_INFO()
  76. ZEND_BEGIN_ARG_INFO_EX(validation_dropdown_arginfo, 0, 0, 1)
  77. ZEND_ARG_INFO(0, dropdown)
  78. ZEND_END_ARG_INFO()
  79. ZEND_BEGIN_ARG_INFO_EX(validation_value_number_arginfo, 0, 0, 1)
  80. ZEND_ARG_INFO(0, value_number)
  81. ZEND_END_ARG_INFO()
  82. ZEND_BEGIN_ARG_INFO_EX(validation_value_formula_arginfo, 0, 0, 1)
  83. ZEND_ARG_INFO(0, value_formula)
  84. ZEND_END_ARG_INFO()
  85. ZEND_BEGIN_ARG_INFO_EX(validation_value_list_arginfo, 0, 0, 1)
  86. ZEND_ARG_INFO(0, value_list)
  87. ZEND_END_ARG_INFO()
  88. ZEND_BEGIN_ARG_INFO_EX(validation_value_date_time_arginfo, 0, 0, 1)
  89. ZEND_ARG_INFO(0, timestamp)
  90. ZEND_END_ARG_INFO()
  91. ZEND_BEGIN_ARG_INFO_EX(validation_minimum_number_arginfo, 0, 0, 1)
  92. ZEND_ARG_INFO(0, minimum_number)
  93. ZEND_END_ARG_INFO()
  94. ZEND_BEGIN_ARG_INFO_EX(validation_minimum_formula_arginfo, 0, 0, 1)
  95. ZEND_ARG_INFO(0, minimum_formula)
  96. ZEND_END_ARG_INFO()
  97. ZEND_BEGIN_ARG_INFO_EX(validation_minimum_datetime_arginfo, 0, 0, 1)
  98. ZEND_ARG_INFO(0, timestamp)
  99. ZEND_END_ARG_INFO()
  100. ZEND_BEGIN_ARG_INFO_EX(validation_maximum_number_arginfo, 0, 0, 1)
  101. ZEND_ARG_INFO(0, maximum_number)
  102. ZEND_END_ARG_INFO()
  103. ZEND_BEGIN_ARG_INFO_EX(validation_maximum_formula_arginfo, 0, 0, 1)
  104. ZEND_ARG_INFO(0, maximum_formula)
  105. ZEND_END_ARG_INFO()
  106. ZEND_BEGIN_ARG_INFO_EX(validation_maximum_datetime_arginfo, 0, 0, 1)
  107. ZEND_ARG_INFO(0, maximum_datetime)
  108. ZEND_END_ARG_INFO()
  109. ZEND_BEGIN_ARG_INFO_EX(validation_input_title_arginfo, 0, 0, 1)
  110. ZEND_ARG_INFO(0, input_title)
  111. ZEND_END_ARG_INFO()
  112. ZEND_BEGIN_ARG_INFO_EX(validation_input_message_arginfo, 0, 0, 1)
  113. ZEND_ARG_INFO(0, input_message)
  114. ZEND_END_ARG_INFO()
  115. ZEND_BEGIN_ARG_INFO_EX(validation_error_title_arginfo, 0, 0, 1)
  116. ZEND_ARG_INFO(0, error_titile)
  117. ZEND_END_ARG_INFO()
  118. ZEND_BEGIN_ARG_INFO_EX(validation_error_message_arginfo, 0, 0, 1)
  119. ZEND_ARG_INFO(0, error_message)
  120. ZEND_END_ARG_INFO()
  121. ZEND_BEGIN_ARG_INFO_EX(validation_to_resource_arginfo, 0, 0, 1)
  122. ZEND_END_ARG_INFO()
  123. /* }}} */
  124. /** {{{ \Vtiful\Kernel\Validation::__construct()
  125. */
  126. PHP_METHOD(vtiful_validation, __construct)
  127. {
  128. validation_object *obj = NULL;
  129. ZVAL_COPY(return_value, getThis());
  130. obj = Z_VALIDATION_P(getThis());
  131. if (obj->ptr.validation == NULL) {
  132. obj->ptr.validation = ecalloc(1, sizeof(lxw_data_validation));
  133. }
  134. obj->ptr.validation->value_list = NULL;
  135. }
  136. /* }}} */
  137. /** {{{ \Vtiful\Kernel\Validation::validationType()
  138. */
  139. PHP_METHOD(vtiful_validation, validationType)
  140. {
  141. zend_long zl_validate_type = 0;
  142. validation_object *obj = NULL;
  143. ZEND_PARSE_PARAMETERS_START(1, 1)
  144. Z_PARAM_LONG(zl_validate_type)
  145. ZEND_PARSE_PARAMETERS_END();
  146. obj = Z_VALIDATION_P(getThis());
  147. if (obj->ptr.validation == NULL) {
  148. RETURN_NULL();
  149. }
  150. if (zl_validate_type < LXW_VALIDATION_TYPE_NONE || zl_validate_type > LXW_VALIDATION_TYPE_ANY) {
  151. RETURN_NULL();
  152. }
  153. ZVAL_COPY(return_value, getThis());
  154. obj->ptr.validation->validate = zl_validate_type;
  155. }
  156. /* }}} */
  157. /** {{{ \Vtiful\Kernel\Validation::criteriaType()
  158. */
  159. PHP_METHOD(vtiful_validation, criteriaType)
  160. {
  161. zend_long zl_criteria_type = 0;
  162. validation_object *obj = NULL;
  163. ZEND_PARSE_PARAMETERS_START(1, 1)
  164. Z_PARAM_LONG(zl_criteria_type)
  165. ZEND_PARSE_PARAMETERS_END();
  166. obj = Z_VALIDATION_P(getThis());
  167. if (obj->ptr.validation == NULL) {
  168. RETURN_NULL();
  169. }
  170. if (zl_criteria_type < LXW_VALIDATION_CRITERIA_NONE || zl_criteria_type > LXW_VALIDATION_CRITERIA_LESS_THAN_OR_EQUAL_TO) {
  171. RETURN_NULL();
  172. }
  173. ZVAL_COPY(return_value, getThis());
  174. obj->ptr.validation->criteria = zl_criteria_type;
  175. }
  176. /* }}} */
  177. /** {{{ \Vtiful\Kernel\Validation::ignoreBlank()
  178. */
  179. PHP_METHOD(vtiful_validation, ignoreBlank)
  180. {
  181. zend_bool zb_ignore_blank = 1;
  182. validation_object *obj = NULL;
  183. ZEND_PARSE_PARAMETERS_START(0, 1)
  184. Z_PARAM_OPTIONAL
  185. Z_PARAM_BOOL(zb_ignore_blank)
  186. ZEND_PARSE_PARAMETERS_END();
  187. obj = Z_VALIDATION_P(getThis());
  188. if (obj->ptr.validation == NULL) {
  189. RETURN_NULL();
  190. }
  191. ZVAL_COPY(return_value, getThis());
  192. if (zb_ignore_blank) {
  193. obj->ptr.validation->ignore_blank = LXW_VALIDATION_ON;
  194. return;
  195. }
  196. obj->ptr.validation->ignore_blank = LXW_VALIDATION_OFF;
  197. }
  198. /* }}} */
  199. /** {{{ \Vtiful\Kernel\Validation::showInput()
  200. */
  201. PHP_METHOD(vtiful_validation, showInput)
  202. {
  203. zend_bool zb_show_input = 1;
  204. validation_object *obj = NULL;
  205. ZEND_PARSE_PARAMETERS_START(0, 1)
  206. Z_PARAM_OPTIONAL
  207. Z_PARAM_BOOL(zb_show_input)
  208. ZEND_PARSE_PARAMETERS_END();
  209. obj = Z_VALIDATION_P(getThis());
  210. if (obj->ptr.validation == NULL) {
  211. RETURN_NULL();
  212. }
  213. ZVAL_COPY(return_value, getThis());
  214. if (zb_show_input) {
  215. obj->ptr.validation->show_input = LXW_VALIDATION_ON;
  216. return;
  217. }
  218. obj->ptr.validation->show_input = LXW_VALIDATION_OFF;
  219. }
  220. /* }}} */
  221. /** {{{ \Vtiful\Kernel\Validation::showError()
  222. */
  223. PHP_METHOD(vtiful_validation, showError)
  224. {
  225. zend_bool zb_show_error = 1;
  226. validation_object *obj = NULL;
  227. ZEND_PARSE_PARAMETERS_START(0, 1)
  228. Z_PARAM_OPTIONAL
  229. Z_PARAM_BOOL(zb_show_error)
  230. ZEND_PARSE_PARAMETERS_END();
  231. obj = Z_VALIDATION_P(getThis());
  232. if (obj->ptr.validation == NULL) {
  233. RETURN_NULL();
  234. }
  235. ZVAL_COPY(return_value, getThis());
  236. if (zb_show_error) {
  237. obj->ptr.validation->show_error = LXW_VALIDATION_ON;
  238. return;
  239. }
  240. obj->ptr.validation->show_error = LXW_VALIDATION_OFF;
  241. }
  242. /* }}} */
  243. /** {{{ \Vtiful\Kernel\Validation::errorType()
  244. */
  245. PHP_METHOD(vtiful_validation, errorType)
  246. {
  247. zend_long zl_error_type = 0;
  248. validation_object *obj = NULL;
  249. ZEND_PARSE_PARAMETERS_START(1, 1)
  250. Z_PARAM_LONG(zl_error_type)
  251. ZEND_PARSE_PARAMETERS_END();
  252. obj = Z_VALIDATION_P(getThis());
  253. if (obj->ptr.validation == NULL) {
  254. RETURN_NULL();
  255. }
  256. if (zl_error_type < LXW_VALIDATION_ERROR_TYPE_STOP || zl_error_type > LXW_VALIDATION_ERROR_TYPE_INFORMATION) {
  257. RETURN_NULL();
  258. }
  259. ZVAL_COPY(return_value, getThis());
  260. obj->ptr.validation->error_type = zl_error_type;
  261. }
  262. /* }}} */
  263. /** {{{ \Vtiful\Kernel\Validation::dropdown()
  264. */
  265. PHP_METHOD(vtiful_validation, dropdown)
  266. {
  267. zend_bool zb_dropdown = 1;
  268. validation_object *obj = NULL;
  269. ZEND_PARSE_PARAMETERS_START(0, 1)
  270. Z_PARAM_OPTIONAL
  271. Z_PARAM_BOOL(zb_dropdown)
  272. ZEND_PARSE_PARAMETERS_END();
  273. obj = Z_VALIDATION_P(getThis());
  274. if (obj->ptr.validation == NULL) {
  275. RETURN_NULL();
  276. }
  277. ZVAL_COPY(return_value, getThis());
  278. if (zb_dropdown) {
  279. obj->ptr.validation->dropdown = LXW_VALIDATION_ON;
  280. return;
  281. }
  282. obj->ptr.validation->dropdown = LXW_VALIDATION_OFF;
  283. }
  284. /* }}} */
  285. /** {{{ \Vtiful\Kernel\Validation::valueNumber()
  286. */
  287. PHP_METHOD(vtiful_validation, valueNumber)
  288. {
  289. zend_long zl_value_number = 0;
  290. validation_object *obj = NULL;
  291. ZEND_PARSE_PARAMETERS_START(1, 1)
  292. Z_PARAM_LONG(zl_value_number)
  293. ZEND_PARSE_PARAMETERS_END();
  294. obj = Z_VALIDATION_P(getThis());
  295. if (obj->ptr.validation == NULL) {
  296. RETURN_NULL();
  297. }
  298. ZVAL_COPY(return_value, getThis());
  299. obj->ptr.validation->value_number = zl_value_number;
  300. }
  301. /* }}} */
  302. /** {{{ \Vtiful\Kernel\Validation::valueFormula()
  303. */
  304. PHP_METHOD(vtiful_validation, valueFormula)
  305. {
  306. zend_string *zs_value_formula = NULL;
  307. validation_object *obj = NULL;
  308. ZEND_PARSE_PARAMETERS_START(1, 1)
  309. Z_PARAM_STR(zs_value_formula)
  310. ZEND_PARSE_PARAMETERS_END();
  311. obj = Z_VALIDATION_P(getThis());
  312. if (obj->ptr.validation == NULL) {
  313. RETURN_NULL();
  314. }
  315. ZVAL_COPY(return_value, getThis());
  316. obj->ptr.validation->value_formula = ZSTR_VAL(zs_value_formula);
  317. }
  318. /* }}} */
  319. /** {{{ \Vtiful\Kernel\Validation::valueList()
  320. */
  321. PHP_METHOD(vtiful_validation, valueList)
  322. {
  323. int index = 0;
  324. char **list = NULL;
  325. zval *data;
  326. zval *zv_value_list = NULL;
  327. validation_object *obj = NULL;
  328. ZEND_PARSE_PARAMETERS_START(1, 1)
  329. Z_PARAM_ARRAY(zv_value_list)
  330. ZEND_PARSE_PARAMETERS_END();
  331. obj = Z_VALIDATION_P(getThis());
  332. if (obj->ptr.validation == NULL) {
  333. RETURN_NULL();
  334. }
  335. if (obj->ptr.validation->value_list != NULL) {
  336. do {
  337. if (obj->ptr.validation->value_list[index] == NULL) {
  338. break;
  339. }
  340. efree(obj->ptr.validation->value_list[index]);
  341. index++;
  342. } while (1);
  343. efree(obj->ptr.validation->value_list);
  344. obj->ptr.validation->value_list = NULL;
  345. }
  346. ZVAL_COPY(return_value, getThis());
  347. zend_array *za_value_list = Z_ARR_P(zv_value_list);
  348. ZEND_HASH_FOREACH_VAL(za_value_list, data) {
  349. if (Z_TYPE_P(data) != IS_STRING) {
  350. zend_throw_exception(vtiful_exception_ce, "Arrays can only consist of strings.", 300);
  351. return;
  352. }
  353. if (Z_STRLEN_P(data) == 0 ) {
  354. zend_throw_exception(vtiful_exception_ce, "Array value is empty string.", 301);
  355. return;
  356. }
  357. } ZEND_HASH_FOREACH_END();
  358. index = 0;
  359. list = ecalloc(za_value_list->nNumOfElements + 1, sizeof(char *));
  360. ZEND_HASH_FOREACH_VAL(za_value_list, data) {
  361. list[index] = ecalloc(1, Z_STRLEN_P(data) + 1);
  362. strcpy(list[index], Z_STRVAL_P(data));
  363. index++;
  364. } ZEND_HASH_FOREACH_END();
  365. list[index] = NULL;
  366. obj->ptr.validation->value_list = list;
  367. }
  368. /* }}} */
  369. /** {{{ \Vtiful\Kernel\Validation::valueDatetime(int $timestamp)
  370. */
  371. PHP_METHOD(vtiful_validation, valueDatetime)
  372. {
  373. zend_long timestamp = 0;
  374. validation_object *obj = NULL;
  375. ZEND_PARSE_PARAMETERS_START(1, 1)
  376. Z_PARAM_LONG(timestamp)
  377. ZEND_PARSE_PARAMETERS_END();
  378. obj = Z_VALIDATION_P(getThis());
  379. if (obj->ptr.validation == NULL) {
  380. RETURN_NULL();
  381. }
  382. obj->ptr.validation->value_datetime = timestamp_to_datetime(timestamp);
  383. }
  384. /* }}} */
  385. /** {{{ \Vtiful\Kernel\Validation::minimumNumber(double $minimumNumber)
  386. */
  387. PHP_METHOD(vtiful_validation, minimumNumber)
  388. {
  389. double minimum_number = 0;
  390. validation_object *obj = NULL;
  391. ZEND_PARSE_PARAMETERS_START(1, 1)
  392. Z_PARAM_DOUBLE(minimum_number)
  393. ZEND_PARSE_PARAMETERS_END();
  394. obj = Z_VALIDATION_P(getThis());
  395. if (obj->ptr.validation == NULL) {
  396. RETURN_NULL();
  397. }
  398. ZVAL_COPY(return_value, getThis());
  399. obj->ptr.validation->minimum_number = minimum_number;
  400. }
  401. /* }}} */
  402. /** {{{ \Vtiful\Kernel\Validation::minimumFormula()
  403. */
  404. PHP_METHOD(vtiful_validation, minimumFormula)
  405. {
  406. zend_string *zs_minimum_formula = NULL;
  407. validation_object *obj = NULL;
  408. ZEND_PARSE_PARAMETERS_START(1, 1)
  409. Z_PARAM_STR(zs_minimum_formula)
  410. ZEND_PARSE_PARAMETERS_END();
  411. obj = Z_VALIDATION_P(getThis());
  412. if (obj->ptr.validation == NULL) {
  413. RETURN_NULL();
  414. }
  415. ZVAL_COPY(return_value, getThis());
  416. obj->ptr.validation->minimum_formula = ZSTR_VAL(zs_minimum_formula);
  417. }
  418. /* }}} */
  419. /** {{{ \Vtiful\Kernel\Validation::minimumDatetime(int $timestamp)
  420. */
  421. PHP_METHOD(vtiful_validation, minimumDatetime)
  422. {
  423. zend_long timestamp = 0;
  424. validation_object *obj = NULL;
  425. ZEND_PARSE_PARAMETERS_START(1, 1)
  426. Z_PARAM_LONG(timestamp)
  427. ZEND_PARSE_PARAMETERS_END();
  428. obj = Z_VALIDATION_P(getThis());
  429. if (obj->ptr.validation == NULL) {
  430. RETURN_NULL();
  431. }
  432. obj->ptr.validation->minimum_datetime = timestamp_to_datetime(timestamp);
  433. }
  434. /* }}} */
  435. /** {{{ \Vtiful\Kernel\Validation::maximumNumber(double $maximumNumber)
  436. */
  437. PHP_METHOD(vtiful_validation, maximumNumber)
  438. {
  439. double maximum_number = 0;
  440. validation_object *obj = NULL;
  441. ZEND_PARSE_PARAMETERS_START(1, 1)
  442. Z_PARAM_DOUBLE(maximum_number)
  443. ZEND_PARSE_PARAMETERS_END();
  444. obj = Z_VALIDATION_P(getThis());
  445. if (obj->ptr.validation == NULL) {
  446. RETURN_NULL();
  447. }
  448. ZVAL_COPY(return_value, getThis());
  449. obj->ptr.validation->maximum_number = maximum_number;
  450. }
  451. /* }}} */
  452. /** {{{ \Vtiful\Kernel\Validation::maximumFormula()
  453. */
  454. PHP_METHOD(vtiful_validation, maximumFormula)
  455. {
  456. zend_string *zs_maximum_formula = NULL;
  457. validation_object *obj = NULL;
  458. ZEND_PARSE_PARAMETERS_START(1, 1)
  459. Z_PARAM_STR(zs_maximum_formula)
  460. ZEND_PARSE_PARAMETERS_END();
  461. obj = Z_VALIDATION_P(getThis());
  462. if (obj->ptr.validation == NULL) {
  463. RETURN_NULL();
  464. }
  465. ZVAL_COPY(return_value, getThis());
  466. obj->ptr.validation->maximum_formula = ZSTR_VAL(zs_maximum_formula);
  467. }
  468. /* }}} */
  469. /** {{{ \Vtiful\Kernel\Validation::maximumDatetime(int $timestamp)
  470. */
  471. PHP_METHOD(vtiful_validation, maximumDatetime)
  472. {
  473. zend_long timestamp = 0;
  474. validation_object *obj = NULL;
  475. ZEND_PARSE_PARAMETERS_START(1, 1)
  476. Z_PARAM_LONG(timestamp)
  477. ZEND_PARSE_PARAMETERS_END();
  478. obj = Z_VALIDATION_P(getThis());
  479. if (obj->ptr.validation == NULL) {
  480. RETURN_NULL();
  481. }
  482. obj->ptr.validation->maximum_datetime = timestamp_to_datetime(timestamp);
  483. }
  484. /* }}} */
  485. /** {{{ \Vtiful\Kernel\Validation::inputTitle()
  486. */
  487. PHP_METHOD(vtiful_validation, inputTitle)
  488. {
  489. zend_string *zs_input_title = NULL;
  490. validation_object *obj = NULL;
  491. ZEND_PARSE_PARAMETERS_START(1, 1)
  492. Z_PARAM_STR(zs_input_title)
  493. ZEND_PARSE_PARAMETERS_END();
  494. obj = Z_VALIDATION_P(getThis());
  495. if (obj->ptr.validation == NULL) {
  496. RETURN_NULL();
  497. }
  498. ZVAL_COPY(return_value, getThis());
  499. obj->ptr.validation->input_title = ZSTR_VAL(zs_input_title);
  500. }
  501. /* }}} */
  502. /** {{{ \Vtiful\Kernel\Validation::inputMessage()
  503. */
  504. PHP_METHOD(vtiful_validation, inputMessage)
  505. {
  506. zend_string *zs_input_message = NULL;
  507. validation_object *obj = NULL;
  508. ZEND_PARSE_PARAMETERS_START(1, 1)
  509. Z_PARAM_STR(zs_input_message)
  510. ZEND_PARSE_PARAMETERS_END();
  511. obj = Z_VALIDATION_P(getThis());
  512. if (obj->ptr.validation == NULL) {
  513. RETURN_NULL();
  514. }
  515. ZVAL_COPY(return_value, getThis());
  516. obj->ptr.validation->input_message = ZSTR_VAL(zs_input_message);
  517. }
  518. /* }}} */
  519. /** {{{ \Vtiful\Kernel\Validation::errorTitle()
  520. */
  521. PHP_METHOD(vtiful_validation, errorTitle)
  522. {
  523. zend_string *zs_error_title = NULL;
  524. validation_object *obj = NULL;
  525. ZEND_PARSE_PARAMETERS_START(1, 1)
  526. Z_PARAM_STR(zs_error_title)
  527. ZEND_PARSE_PARAMETERS_END();
  528. obj = Z_VALIDATION_P(getThis());
  529. if (obj->ptr.validation == NULL) {
  530. RETURN_NULL();
  531. }
  532. ZVAL_COPY(return_value, getThis());
  533. obj->ptr.validation->error_title = ZSTR_VAL(zs_error_title);
  534. }
  535. /* }}} */
  536. /** {{{ \Vtiful\Kernel\Validation::errorMessage()
  537. */
  538. PHP_METHOD(vtiful_validation, errorMessage)
  539. {
  540. zend_string *zs_error_message = NULL;
  541. validation_object *obj = NULL;
  542. ZEND_PARSE_PARAMETERS_START(1, 1)
  543. Z_PARAM_STR(zs_error_message)
  544. ZEND_PARSE_PARAMETERS_END();
  545. obj = Z_VALIDATION_P(getThis());
  546. if (obj->ptr.validation == NULL) {
  547. RETURN_NULL();
  548. }
  549. ZVAL_COPY(return_value, getThis());
  550. obj->ptr.validation->error_message = ZSTR_VAL(zs_error_message);
  551. }
  552. /* }}} */
  553. /** {{{ \Vtiful\Kernel\Validation::toResource()
  554. */
  555. PHP_METHOD(vtiful_validation, toResource)
  556. {
  557. validation_object *obj = Z_VALIDATION_P(getThis());
  558. RETURN_RES(zend_register_resource(obj->ptr.validation, le_xls_writer));
  559. }
  560. /* }}} */
  561. /** {{{ validation_methods
  562. */
  563. zend_function_entry validation_methods[] = {
  564. PHP_ME(vtiful_validation, __construct, validation_construct_arginfo, ZEND_ACC_PUBLIC)
  565. PHP_ME(vtiful_validation, validationType, validation_type_arginfo, ZEND_ACC_PUBLIC)
  566. PHP_ME(vtiful_validation, criteriaType, validation_criteria_type_arginfo, ZEND_ACC_PUBLIC)
  567. PHP_ME(vtiful_validation, ignoreBlank, validation_ignore_blank_arginfo, ZEND_ACC_PUBLIC)
  568. PHP_ME(vtiful_validation, showInput, validation_show_input_arginfo, ZEND_ACC_PUBLIC)
  569. PHP_ME(vtiful_validation, showError , validation_show_error_arginfo, ZEND_ACC_PUBLIC)
  570. PHP_ME(vtiful_validation, errorType , validation_error_type_arginfo, ZEND_ACC_PUBLIC)
  571. PHP_ME(vtiful_validation, dropdown , validation_dropdown_arginfo, ZEND_ACC_PUBLIC)
  572. PHP_ME(vtiful_validation, valueNumber, validation_value_number_arginfo, ZEND_ACC_PUBLIC)
  573. PHP_ME(vtiful_validation, valueFormula, validation_value_formula_arginfo, ZEND_ACC_PUBLIC)
  574. PHP_ME(vtiful_validation, valueList, validation_value_list_arginfo, ZEND_ACC_PUBLIC)
  575. PHP_ME(vtiful_validation, valueDatetime, validation_value_date_time_arginfo, ZEND_ACC_PUBLIC)
  576. PHP_ME(vtiful_validation, minimumNumber, validation_minimum_number_arginfo, ZEND_ACC_PUBLIC)
  577. PHP_ME(vtiful_validation, minimumFormula, validation_minimum_formula_arginfo, ZEND_ACC_PUBLIC)
  578. PHP_ME(vtiful_validation, minimumDatetime, validation_minimum_datetime_arginfo, ZEND_ACC_PUBLIC)
  579. PHP_ME(vtiful_validation, maximumNumber, validation_maximum_number_arginfo, ZEND_ACC_PUBLIC)
  580. PHP_ME(vtiful_validation, maximumFormula, validation_maximum_formula_arginfo, ZEND_ACC_PUBLIC)
  581. PHP_ME(vtiful_validation, maximumDatetime, validation_maximum_datetime_arginfo, ZEND_ACC_PUBLIC)
  582. PHP_ME(vtiful_validation, inputTitle, validation_input_title_arginfo, ZEND_ACC_PUBLIC)
  583. PHP_ME(vtiful_validation, inputMessage, validation_input_message_arginfo, ZEND_ACC_PUBLIC)
  584. PHP_ME(vtiful_validation, errorTitle, validation_error_title_arginfo, ZEND_ACC_PUBLIC)
  585. PHP_ME(vtiful_validation, errorMessage, validation_error_message_arginfo, ZEND_ACC_PUBLIC)
  586. PHP_ME(vtiful_validation, toResource, validation_to_resource_arginfo, ZEND_ACC_PUBLIC)
  587. PHP_FE_END
  588. };
  589. /* }}} */
  590. /** {{{ VTIFUL_STARTUP_FUNCTION
  591. */
  592. VTIFUL_STARTUP_FUNCTION(validation) {
  593. zend_class_entry ce;
  594. INIT_NS_CLASS_ENTRY(ce, "Vtiful\\Kernel", "Validation", validation_methods);
  595. ce.create_object = validation_objects_new;
  596. vtiful_validation_ce = zend_register_internal_class(&ce);
  597. memcpy(&validation_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
  598. validation_handlers.offset = XtOffsetOf(validation_object, zo);
  599. validation_handlers.free_obj = validation_objects_free;
  600. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_INTEGER", LXW_VALIDATION_TYPE_INTEGER)
  601. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_INTEGER_FORMULA", LXW_VALIDATION_TYPE_INTEGER_FORMULA)
  602. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DECIMAL", LXW_VALIDATION_TYPE_DECIMAL)
  603. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DECIMAL_FORMULA", LXW_VALIDATION_TYPE_DECIMAL_FORMULA)
  604. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_LIST", LXW_VALIDATION_TYPE_LIST)
  605. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_LIST_FORMULA", LXW_VALIDATION_TYPE_LIST_FORMULA)
  606. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DATE", LXW_VALIDATION_TYPE_DATE)
  607. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DATE_FORMULA", LXW_VALIDATION_TYPE_DATE_FORMULA)
  608. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_DATE_NUMBER", LXW_VALIDATION_TYPE_DATE_NUMBER)
  609. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_TIME", LXW_VALIDATION_TYPE_TIME)
  610. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_TIME_FORMULA", LXW_VALIDATION_TYPE_TIME_FORMULA)
  611. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_TIME_NUMBER", LXW_VALIDATION_TYPE_TIME_NUMBER)
  612. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_LENGTH", LXW_VALIDATION_TYPE_LENGTH)
  613. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_LENGTH_FORMULA", LXW_VALIDATION_TYPE_LENGTH_FORMULA)
  614. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_CUSTOM_FORMULA", LXW_VALIDATION_TYPE_CUSTOM_FORMULA)
  615. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "TYPE_ANY", LXW_VALIDATION_TYPE_ANY)
  616. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_BETWEEN", LXW_VALIDATION_CRITERIA_BETWEEN)
  617. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_NOT_BETWEEN", LXW_VALIDATION_CRITERIA_NOT_BETWEEN)
  618. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_EQUAL_TO", LXW_VALIDATION_CRITERIA_EQUAL_TO)
  619. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_NOT_EQUAL_TO", LXW_VALIDATION_CRITERIA_NOT_EQUAL_TO)
  620. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_GREATER_THAN", LXW_VALIDATION_CRITERIA_GREATER_THAN)
  621. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_LESS_THAN", LXW_VALIDATION_CRITERIA_LESS_THAN)
  622. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_GREATER_THAN_OR_EQUAL_TO", LXW_VALIDATION_CRITERIA_GREATER_THAN_OR_EQUAL_TO)
  623. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "CRITERIA_LESS_THAN_OR_EQUAL_TO", LXW_VALIDATION_CRITERIA_LESS_THAN_OR_EQUAL_TO)
  624. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "ERROR_TYPE_STOP", LXW_VALIDATION_ERROR_TYPE_STOP)
  625. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "ERROR_TYPE_WARNING", LXW_VALIDATION_ERROR_TYPE_WARNING)
  626. REGISTER_CLASS_CONST_LONG(vtiful_validation_ce, "ERROR_TYPE_INFORMATION", LXW_VALIDATION_ERROR_TYPE_INFORMATION)
  627. return SUCCESS;
  628. }
  629. /* }}} */