/** * Add a route to the router * * @param string $pattern * @param string/array $paths */ PHP_METHOD(Phalcon_Mvc_Router, add){ zval *pattern = NULL, *paths = NULL, *parts = NULL, *route_paths = NULL, *pcre_pattern = NULL; zval *matches = NULL, *match = NULL, *n = NULL; zval *c0 = NULL, *c1 = NULL, *c2 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL, *r5 = NULL, *r6 = NULL; zval *r7 = NULL, *r8 = NULL, *r9 = NULL, *r10 = NULL, *r11 = NULL; zval *t0 = NULL, *t1 = NULL, *t2 = NULL; zval *a0 = NULL; zval *p0[] = { NULL, NULL, NULL, NULL }; HashTable *ah0; HashPosition hp0; zval **hd; char *hash_index; uint hash_index_len; ulong hash_num; int hash_type; int eval_int; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &pattern, &paths) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (Z_TYPE_P(paths) == IS_STRING) { PHALCON_INIT_VAR(c0); ZVAL_STRING(c0, "::", 1); PHALCON_INIT_VAR(parts); phalcon_fast_explode(parts, c0, paths TSRMLS_CC); PHALCON_INIT_VAR(route_paths); array_init(route_paths); PHALCON_ALLOC_ZVAL_MM(r0); phalcon_array_fetch_long(&r0, parts, 0, PH_NOISY_CC); PHALCON_ALLOC_ZVAL_MM(r1); PHALCON_CALL_FUNC_PARAMS_1(r1, "strtolower", r0); phalcon_array_update_string(&route_paths, SL("controller"), &r1, PH_COPY | PH_SEPARATE TSRMLS_CC); eval_int = phalcon_array_isset_long(parts, 1); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(r2); phalcon_array_fetch_long(&r2, parts, 1, PH_NOISY_CC); phalcon_array_update_string(&route_paths, SL("action"), &r2, PH_COPY | PH_SEPARATE TSRMLS_CC); } } else { PHALCON_CPY_WRT(route_paths, paths); } PHALCON_INIT_VAR(c1); ZVAL_STRING(c1, "#", 1); PHALCON_INIT_VAR(c2); ZVAL_STRING(c2, "\\#", 1); PHALCON_INIT_VAR(pcre_pattern); phalcon_fast_str_replace(pcre_pattern, c1, c2, pattern TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(r3); phalcon_fast_strpos_str(r3, pcre_pattern, SL("{") TSRMLS_CC); if (zend_is_true(r3)) { PHALCON_INIT_VAR(matches); array_init(matches); PHALCON_INIT_VAR(p0[0]); ZVAL_STRING(p0[0], "#{([a-zA-Z0-9\\_\\-]+):([^}]+)}#", 1); p0[1] = pcre_pattern; Z_SET_ISREF_P(matches); p0[2] = matches; PHALCON_INIT_VAR(t0); ZVAL_LONG(t0, 2); p0[3] = t0; PHALCON_ALLOC_ZVAL_MM(r4); PHALCON_CALL_FUNC_PARAMS(r4, "preg_match_all", 4, p0); Z_UNSET_ISREF_P(p0[2]); if (zend_is_true(r4)) { if (!phalcon_valid_foreach(matches TSRMLS_CC)) { return; } ah0 = Z_ARRVAL_P(matches); zend_hash_internal_pointer_reset_ex(ah0, &hp0); fes_c9ff_0: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto fee_c9ff_0; } PHALCON_INIT_VAR(n); PHALCON_GET_FOREACH_KEY(n, ah0, hp0); PHALCON_INIT_VAR(match); ZVAL_ZVAL(match, *hd, 1, 0); PHALCON_INIT_VAR(r5); phalcon_array_fetch_long(&r5, match, 0, PH_NOISY_CC); PHALCON_INIT_VAR(r6); phalcon_array_fetch_long(&r6, match, 2, PH_NOISY_CC); PHALCON_INIT_VAR(r7); PHALCON_CONCAT_SVS(r7, "(", r6, ")"); PHALCON_INIT_VAR(r8); phalcon_fast_str_replace(r8, r5, r7, pcre_pattern TSRMLS_CC); PHALCON_CPY_WRT(pcre_pattern, r8); PHALCON_INIT_VAR(t1); ZVAL_LONG(t1, 1); PHALCON_INIT_VAR(r9); phalcon_add_function(r9, n, t1 TSRMLS_CC); PHALCON_INIT_VAR(r10); phalcon_array_fetch_long(&r10, match, 1, PH_NOISY_CC); phalcon_array_update_zval(&route_paths, r10, &r9, PH_COPY | PH_SEPARATE TSRMLS_CC); zend_hash_move_forward_ex(ah0, &hp0); goto fes_c9ff_0; fee_c9ff_0: if(0){} } } PHALCON_ALLOC_ZVAL_MM(a0); array_init(a0); PHALCON_ALLOC_ZVAL_MM(r11); PHALCON_CALL_METHOD_PARAMS_1(r11, this_ptr, "compilepattern", pcre_pattern, PH_NO_CHECK); phalcon_array_update_string(&a0, SL("pattern"), &r11, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_string(&a0, SL("paths"), &route_paths, PH_COPY | PH_SEPARATE TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(t2); phalcon_read_property(&t2, this_ptr, SL("_routes"), PH_NOISY_CC); phalcon_array_append(&t2, a0, 0 TSRMLS_CC); phalcon_update_property_zval(this_ptr, SL("_routes"), t2 TSRMLS_CC); PHALCON_MM_RESTORE(); }
/** * This method is automatically called in Phalcon_Db_Mysql constructor. * Call it when you need to restore a database connection * * @param stdClass $descriptor * @return boolean */ PHP_METHOD(Phalcon_Db_Adapter_Mysql, connect){ zval *descriptor = NULL, *host = NULL, *username = NULL, *password = NULL, *port = NULL; zval *socket = NULL, *dbname = NULL, *client_flags = NULL, *persistent = NULL; zval *link = NULL, *autocommit = NULL, *success = NULL, *collation = NULL; zval *t0 = NULL, *t1 = NULL, *t2 = NULL, *t3 = NULL, *t4 = NULL, *t5 = NULL, *t6 = NULL; zval *t7 = NULL, *t8 = NULL, *t9 = NULL, *t10 = NULL, *t11 = NULL, *t12 = NULL, *t13 = NULL; zval *t14 = NULL, *t15 = NULL, *t16 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL, *r5 = NULL, *r6 = NULL; zval *p0[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; int eval_int; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z", &descriptor) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!descriptor) { PHALCON_INIT_VAR(descriptor); ZVAL_NULL(descriptor); } else { PHALCON_SEPARATE_PARAM(descriptor); } if (!zend_is_true(descriptor)) { PHALCON_ALLOC_ZVAL_MM(t0); phalcon_read_property(&t0, this_ptr, SL("_descriptor"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(descriptor, t0); } eval_int = phalcon_isset_property(descriptor, SL("host") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t1); phalcon_read_property(&t1, descriptor, SL("host"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(host, t1); } else { PHALCON_INIT_VAR(host); ZVAL_NULL(host); } eval_int = phalcon_isset_property(descriptor, SL("username") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t2); phalcon_read_property(&t2, descriptor, SL("username"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(username, t2); } else { PHALCON_INIT_VAR(username); ZVAL_NULL(username); } eval_int = phalcon_isset_property(descriptor, SL("password") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t3); phalcon_read_property(&t3, descriptor, SL("password"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(password, t3); } else { PHALCON_INIT_VAR(password); ZVAL_NULL(password); } eval_int = phalcon_isset_property(descriptor, SL("port") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t4); phalcon_read_property(&t4, descriptor, SL("port"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(port, t4); } else { PHALCON_INIT_VAR(port); ZVAL_NULL(port); } eval_int = phalcon_isset_property(descriptor, SL("socket") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t5); phalcon_read_property(&t5, descriptor, SL("socket"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(socket, t5); } else { PHALCON_INIT_VAR(socket); ZVAL_NULL(socket); } eval_int = phalcon_isset_property(descriptor, SL("name") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t6); phalcon_read_property(&t6, descriptor, SL("name"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(dbname, t6); } else { PHALCON_INIT_VAR(dbname); ZVAL_STRING(dbname, "", 1); } PHALCON_INIT_VAR(client_flags); ZVAL_NULL(client_flags); eval_int = phalcon_isset_property(descriptor, SL("compression") TSRMLS_CC); if (eval_int) { PHALCON_INIT_VAR(t7); ZVAL_LONG(t7, 32); PHALCON_CPY_WRT(client_flags, t7); } eval_int = phalcon_isset_property(descriptor, SL("ssl") TSRMLS_CC); if (eval_int) { if (!zend_is_true(client_flags)) { PHALCON_INIT_VAR(t8); ZVAL_LONG(t8, 2048); PHALCON_CPY_WRT(client_flags, t8); } else { PHALCON_INIT_VAR(t9); ZVAL_LONG(t9, 2048); PHALCON_ALLOC_ZVAL_MM(r0); bitwise_or_function(r0, client_flags, t9 TSRMLS_CC); PHALCON_CPY_WRT(client_flags, r0); } } eval_int = phalcon_isset_property(descriptor, SL("interactive") TSRMLS_CC); if (eval_int) { if (!zend_is_true(client_flags)) { PHALCON_INIT_VAR(t10); ZVAL_LONG(t10, 1024); PHALCON_CPY_WRT(client_flags, t10); } else { PHALCON_INIT_VAR(t11); ZVAL_LONG(t11, 1024); PHALCON_ALLOC_ZVAL_MM(r1); bitwise_or_function(r1, client_flags, t11 TSRMLS_CC); PHALCON_CPY_WRT(client_flags, r1); } } PHALCON_INIT_VAR(persistent); ZVAL_BOOL(persistent, 0); eval_int = phalcon_isset_property(descriptor, SL("persistent") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t12); phalcon_read_property(&t12, descriptor, SL("persistent"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(persistent, t12); } PHALCON_INIT_VAR(link); PHALCON_CALL_FUNC(link, "mysqli_init"); eval_int = phalcon_isset_property(descriptor, SL("autocommit") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t13); phalcon_read_property(&t13, descriptor, SL("autocommit"), PHALCON_NOISY TSRMLS_CC); PHALCON_INIT_VAR(autocommit); PHALCON_CALL_FUNC_PARAMS_1(autocommit, "intval", t13); phalcon_update_property_zval(this_ptr, SL("_autoCommit"), autocommit TSRMLS_CC); PHALCON_INIT_VAR(t14); ZVAL_LONG(t14, 3); PHALCON_ALLOC_ZVAL_MM(r2); PHALCON_CONCAT_SV(r2, "SET AUTOCOMMIT = ", autocommit); PHALCON_ALLOC_ZVAL_MM(r3); PHALCON_CALL_FUNC_PARAMS_3(r3, "mysqli_options", link, t14, r2); if (!zend_is_true(r3)) { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Setting MYSQLI_INIT_COMMAND failed"); return; } } p0[0] = link; p0[1] = host; p0[2] = username; p0[3] = password; p0[4] = dbname; p0[5] = port; p0[6] = socket; p0[7] = client_flags; PHALCON_ALLOC_ZVAL_MM(r4); PHALCON_CALL_FUNC_PARAMS(r4, "mysqli_real_connect", 8, p0); PHALCON_CPY_WRT(success, r4); if (zend_is_true(success)) { phalcon_update_property_zval(this_ptr, SL("_idConnection"), link TSRMLS_CC); PHALCON_CALL_PARENT_PARAMS_1_NORETURN(this_ptr, "Phalcon_Db_Adapter_Mysql", "__construct", descriptor); eval_int = phalcon_isset_property(descriptor, SL("charset") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t15); phalcon_read_property(&t15, descriptor, SL("charset"), PHALCON_NOISY TSRMLS_CC); PHALCON_CALL_FUNC_PARAMS_2_NORETURN("mysqli_set_charset", link, t15); } eval_int = phalcon_isset_property(descriptor, SL("collation") TSRMLS_CC); if (eval_int) { PHALCON_ALLOC_ZVAL_MM(t16); phalcon_read_property(&t16, descriptor, SL("collation"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(collation, t16); PHALCON_ALLOC_ZVAL_MM(r5); PHALCON_CONCAT_SV(r5, "SET collation_connection=", collation); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(this_ptr, "query", r5, PHALCON_NO_CHECK); PHALCON_ALLOC_ZVAL_MM(r6); PHALCON_CONCAT_SV(r6, "SET collation_database=", collation); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(this_ptr, "query", r6, PHALCON_NO_CHECK); } } else { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Connection to MySQL failed"); return; } PHALCON_MM_RESTORE(); }
/** * Generates a URL * * @param string|array $uri * @return string */ PHP_METHOD(Phalcon_Mvc_Url, get){ zval *uri = NULL, *base_uri = NULL, *dependency_injector = NULL, *service = NULL; zval *router = NULL, *route_name = NULL, *route = NULL, *exception_message = NULL; zval *exception = NULL, *pattern = NULL, *replaced_pattern = NULL; zval *controller_name = NULL, *wildcard = NULL, *action_name = NULL; zval *have_bracket = NULL, *matches = NULL, *match_position = NULL; zval *set_order = NULL, *names_pattern = NULL, *have_variables = NULL; zval *match = NULL, *match_zero = NULL, *match_one = NULL, *value = NULL, *new_pcre_pattern = NULL; zval *final_uri = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL; zval *t0 = NULL; zval *p0[] = { NULL, NULL, NULL, NULL }; HashTable *ah0; HashPosition hp0; zval **hd; int eval_int; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z", &uri) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!uri) { PHALCON_ALLOC_ZVAL_MM(uri); ZVAL_NULL(uri); } PHALCON_INIT_VAR(base_uri); PHALCON_CALL_METHOD(base_uri, this_ptr, "getbaseuri", PH_NO_CHECK); if (Z_TYPE_P(uri) == IS_ARRAY) { eval_int = phalcon_array_isset_string(uri, SL("for")+1); if (!eval_int) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_url_exception_ce, "It's necessary to define the route name with the parameter \"for\""); return; } PHALCON_INIT_VAR(dependency_injector); phalcon_read_property(&dependency_injector, this_ptr, SL("_dependencyInjector"), PH_NOISY_CC); if (!zend_is_true(dependency_injector)) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_url_exception_ce, "A dependency injector container is required to obtain the \"url\" service"); return; } PHALCON_INIT_VAR(service); ZVAL_STRING(service, "router", 1); PHALCON_INIT_VAR(router); PHALCON_CALL_METHOD_PARAMS_1(router, dependency_injector, "getshared", service, PH_NO_CHECK); PHALCON_INIT_VAR(route_name); phalcon_array_fetch_string(&route_name, uri, SL("for"), PH_NOISY_CC); PHALCON_INIT_VAR(route); PHALCON_CALL_METHOD_PARAMS_1(route, router, "getroutebyname", route_name, PH_NO_CHECK); if (Z_TYPE_P(route) != IS_OBJECT) { PHALCON_INIT_VAR(exception_message); PHALCON_CONCAT_SVS(exception_message, "Cannot obtain a route using the name \"", route_name, "\""); PHALCON_INIT_VAR(exception); object_init_ex(exception, phalcon_mvc_url_exception_ce); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(exception, "__construct", exception_message, PH_CHECK); phalcon_throw_exception(exception TSRMLS_CC); return; } PHALCON_INIT_VAR(pattern); PHALCON_CALL_METHOD(pattern, route, "getpattern", PH_NO_CHECK); PHALCON_CPY_WRT(replaced_pattern, pattern); eval_int = phalcon_array_isset_string(uri, SL("controller")+1); if (eval_int) { PHALCON_INIT_VAR(controller_name); phalcon_array_fetch_string(&controller_name, uri, SL("controller"), PH_NOISY_CC); PHALCON_INIT_VAR(wildcard); ZVAL_STRING(wildcard, ":controller", 1); PHALCON_ALLOC_ZVAL_MM(r0); phalcon_fast_str_replace(r0, wildcard, controller_name, replaced_pattern TSRMLS_CC); PHALCON_CPY_WRT(replaced_pattern, r0); } eval_int = phalcon_array_isset_string(uri, SL("action")+1); if (eval_int) { PHALCON_INIT_VAR(action_name); phalcon_array_fetch_string(&action_name, uri, SL("action"), PH_NOISY_CC); PHALCON_INIT_VAR(wildcard); ZVAL_STRING(wildcard, ":action", 1); PHALCON_ALLOC_ZVAL_MM(r1); phalcon_fast_str_replace(r1, wildcard, action_name, replaced_pattern TSRMLS_CC); PHALCON_CPY_WRT(replaced_pattern, r1); } PHALCON_INIT_VAR(have_bracket); phalcon_fast_strpos_str(have_bracket, replaced_pattern, SL("{") TSRMLS_CC); if (Z_TYPE_P(have_bracket) != IS_BOOL || (Z_TYPE_P(have_bracket) == IS_BOOL && Z_BVAL_P(have_bracket))) { PHALCON_INIT_VAR(matches); ZVAL_NULL(matches); PHALCON_INIT_VAR(match_position); ZVAL_LONG(match_position, 1); PHALCON_INIT_VAR(t0); ZVAL_LONG(t0, 2); PHALCON_CPY_WRT(set_order, t0); PHALCON_INIT_VAR(names_pattern); ZVAL_STRING(names_pattern, "#{([a-zA-Z][a-zA-Z0-9\\_\\-]+)(:([^}]+))*}#", 1); p0[0] = names_pattern; p0[1] = replaced_pattern; Z_SET_ISREF_P(matches); p0[2] = matches; p0[3] = set_order; PHALCON_ALLOC_ZVAL_MM(r2); PHALCON_CALL_FUNC_PARAMS(r2, "preg_match_all", 4, p0); Z_UNSET_ISREF_P(p0[2]); PHALCON_CPY_WRT(have_variables, r2); if (zend_is_true(have_variables)) { if (!phalcon_valid_foreach(matches TSRMLS_CC)) { return; } ah0 = Z_ARRVAL_P(matches); zend_hash_internal_pointer_reset_ex(ah0, &hp0); fes_0306_0: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto fee_0306_0; } PHALCON_INIT_VAR(match); ZVAL_ZVAL(match, *hd, 1, 0); PHALCON_INIT_VAR(match_zero); phalcon_array_fetch_long(&match_zero, match, 0, PH_NOISY_CC); PHALCON_INIT_VAR(match_one); phalcon_array_fetch_long(&match_one, match, 1, PH_NOISY_CC); eval_int = phalcon_array_isset(uri, match_one); if (eval_int) { PHALCON_INIT_VAR(value); phalcon_array_fetch(&value, uri, match_one, PH_NOISY_CC); PHALCON_INIT_VAR(new_pcre_pattern); phalcon_fast_str_replace(new_pcre_pattern, match_zero, value, replaced_pattern TSRMLS_CC); PHALCON_CPY_WRT(replaced_pattern, new_pcre_pattern); } zend_hash_move_forward_ex(ah0, &hp0); goto fes_0306_0; fee_0306_0: if(0){} } } RETURN_CCTOR(replaced_pattern); } else { PHALCON_INIT_VAR(final_uri); PHALCON_CONCAT_VV(final_uri, base_uri, uri); RETURN_CTOR(final_uri); } PHALCON_MM_RESTORE(); }
/** * Converts bound params like :name: or ?1 into ? bind params * * @param string $sql * @param array $params * @return array */ PHP_METHOD(Phalcon_Db_Adapter_Pdo, convertBoundParams){ zval *sql = NULL, *params = NULL, *query_params = NULL, *placeholders = NULL; zval *matches = NULL, *set_order = NULL, *bind_pattern = NULL, *status = NULL; zval *place_match = NULL, *numeric_place = NULL, *value = NULL, *str_place = NULL; zval *question = NULL, *bound_sql = NULL; zval *r0 = NULL; zval *p0[] = { NULL, NULL, NULL, NULL }; HashTable *ah0; HashPosition hp0; zval **hd; int eval_int; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &sql, ¶ms) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_INIT_VAR(query_params); array_init(query_params); PHALCON_INIT_VAR(placeholders); array_init(placeholders); PHALCON_INIT_VAR(matches); ZVAL_NULL(matches); PHALCON_INIT_VAR(set_order); ZVAL_LONG(set_order, 2); PHALCON_INIT_VAR(bind_pattern); ZVAL_STRING(bind_pattern, "/\\?([0-9]+)|:([a-zA-Z0-9_]+):/", 1); p0[0] = bind_pattern; p0[1] = sql; Z_SET_ISREF_P(matches); p0[2] = matches; p0[3] = set_order; PHALCON_ALLOC_ZVAL_MM(r0); PHALCON_CALL_FUNC_PARAMS(r0, "preg_match_all", 4, p0); Z_UNSET_ISREF_P(p0[2]); PHALCON_CPY_WRT(status, r0); if (zend_is_true(status)) { if (!phalcon_valid_foreach(matches TSRMLS_CC)) { return; } ah0 = Z_ARRVAL_P(matches); zend_hash_internal_pointer_reset_ex(ah0, &hp0); ph_cycle_start_0: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto ph_cycle_end_0; } PHALCON_GET_FOREACH_VALUE(place_match); PHALCON_INIT_VAR(numeric_place); phalcon_array_fetch_long(&numeric_place, place_match, 1, PH_NOISY_CC); eval_int = phalcon_array_isset(params, numeric_place); if (eval_int) { PHALCON_INIT_VAR(value); phalcon_array_fetch(&value, params, numeric_place, PH_NOISY_CC); } else { eval_int = phalcon_array_isset_long(place_match, 2); if (eval_int) { PHALCON_INIT_VAR(str_place); phalcon_array_fetch_long(&str_place, place_match, 2, PH_NOISY_CC); eval_int = phalcon_array_isset(params, str_place); if (eval_int) { PHALCON_INIT_VAR(value); phalcon_array_fetch(&value, params, str_place, PH_NOISY_CC); } else { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Matched parameter wasn't found in parameters list"); return; } } else { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Matched parameter wasn't found in parameters list"); return; } } phalcon_array_append(&placeholders, value, PH_SEPARATE TSRMLS_CC); zend_hash_move_forward_ex(ah0, &hp0); goto ph_cycle_start_0; ph_cycle_end_0: PHALCON_INIT_VAR(question); ZVAL_STRING(question, "?", 1); PHALCON_INIT_VAR(bound_sql); PHALCON_CALL_FUNC_PARAMS_3(bound_sql, "preg_replace", bind_pattern, question, sql); } else { PHALCON_CPY_WRT(bound_sql, sql); } PHALCON_INIT_VAR(query_params); array_init(query_params); phalcon_array_update_string(&query_params, SL("sql"), &bound_sql, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_string(&query_params, SL("params"), &placeholders, PH_COPY | PH_SEPARATE TSRMLS_CC); RETURN_CTOR(query_params); }
/** * Appends a message to the validator * * @param string $message * @param string $field * @param string $type */ PHP_METHOD(Phalcon_Model_Validator, appendMessage){ zval *v0 = NULL, *v1 = NULL, *v2 = NULL; zval *t0 = NULL, *t1 = NULL; zval *r0 = NULL, *r1 = NULL; zval *i0 = NULL; zval *p0[] = { NULL, NULL, NULL }, *p2[] = { NULL, NULL, NULL }; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|zz", &v0, &v1, &v2) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!v1) { PHALCON_INIT_VAR(v1); ZVAL_STRING(v1, "", 1); } else { PHALCON_SEPARATE_PARAM(v1); } if (!v2) { PHALCON_INIT_VAR(v2); ZVAL_STRING(v2, "", 1); } else { PHALCON_SEPARATE_PARAM(v2); } if (PHALCON_COMPARE_STRING(v1, "")) { PHALCON_ALLOC_ZVAL_MM(t0); phalcon_read_property(&t0, this_ptr, "_fieldName", sizeof("_fieldName")-1, PHALCON_NOISY_FETCH TSRMLS_CC); PHALCON_CPY_WRT(v1, t0); } if (PHALCON_COMPARE_STRING(v2, "")) { PHALCON_ALLOC_ZVAL_MM(r0); PHALCON_INIT_VAR(p0[0]); ZVAL_STRING(p0[0], "Validator", 1); PHALCON_INIT_VAR(p0[1]); ZVAL_STRING(p0[1], "", 1); PHALCON_ALLOC_ZVAL_MM(r1); PHALCON_CALL_FUNC_PARAMS_1(r1, "get_class", this_ptr, 0x049); p0[2] = r1; PHALCON_CALL_FUNC_PARAMS(r0, "str_replace", 3, p0, 0x01A); PHALCON_CPY_WRT(v2, r0); } PHALCON_ALLOC_ZVAL_MM(i0); object_init_ex(i0, phalcon_model_message_class_entry); Z_ADDREF_P(v0); p2[0] = v0; Z_ADDREF_P(v1); p2[1] = v1; Z_ADDREF_P(v2); p2[2] = v2; PHALCON_CALL_METHOD_PARAMS_NORETURN(i0, "__construct", 3, p2, PHALCON_CALL_CHECK); Z_DELREF_P(p2[0]); Z_DELREF_P(p2[1]); Z_DELREF_P(p2[2]); PHALCON_ALLOC_ZVAL_MM(t1); phalcon_read_property(&t1, this_ptr, "_messages", sizeof("_messages")-1, PHALCON_NOISY_FETCH TSRMLS_CC); Z_ADDREF_P(i0); phalcon_array_append(t1, i0 TSRMLS_CC); phalcon_update_property_zval(this_ptr, "_messages", strlen("_messages"), t1 TSRMLS_CC); PHALCON_MM_RESTORE(); RETURN_NULL(); }
/** * Converts bound parameters such as :name: or ?1 into PDO bind params ? * *<code> * print_r($connection->convertBoundParams('SELECT * FROM robots WHERE name = :name:', array('Bender'))); *</code> * * @param string $sql * @param array $params * @return array */ PHP_METHOD(Phalcon_Db_Adapter_Pdo, convertBoundParams){ zval *sql, *params, *query_params = NULL, *placeholders; zval *matches, *set_order, *bind_pattern, *status = NULL; zval *place_match = NULL, *numeric_place = NULL, *value = NULL, *str_place = NULL; zval *question, *bound_sql = NULL; zval *r0 = NULL; zval *p0[] = { NULL, NULL, NULL, NULL }; HashTable *ah0; HashPosition hp0; zval **hd; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &sql, ¶ms) == FAILURE) { RETURN_MM_NULL(); } PHALCON_INIT_VAR(query_params); array_init(query_params); PHALCON_INIT_VAR(placeholders); array_init(placeholders); PHALCON_INIT_VAR(matches); PHALCON_INIT_VAR(set_order); ZVAL_LONG(set_order, 2); PHALCON_INIT_VAR(bind_pattern); ZVAL_STRING(bind_pattern, "/\\?([0-9]+)|:([a-zA-Z0-9_]+):/", 1); p0[0] = bind_pattern; p0[1] = sql; Z_SET_ISREF_P(matches); p0[2] = matches; p0[3] = set_order; PHALCON_INIT_VAR(r0); PHALCON_CALL_FUNC_PARAMS(r0, "preg_match_all", 4, p0); Z_UNSET_ISREF_P(p0[2]); PHALCON_CPY_WRT(status, r0); if (zend_is_true(status)) { if (!phalcon_is_iterable(matches, &ah0, &hp0, 0, 0 TSRMLS_CC)) { return; } while (zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) == SUCCESS) { PHALCON_GET_FOREACH_VALUE(place_match); PHALCON_OBS_NVAR(numeric_place); phalcon_array_fetch_long(&numeric_place, place_match, 1, PH_NOISY_CC); if (phalcon_array_isset(params, numeric_place)) { PHALCON_OBS_NVAR(value); phalcon_array_fetch(&value, params, numeric_place, PH_NOISY_CC); } else { if (phalcon_array_isset_long(place_match, 2)) { PHALCON_OBS_NVAR(str_place); phalcon_array_fetch_long(&str_place, place_match, 2, PH_NOISY_CC); if (phalcon_array_isset(params, str_place)) { PHALCON_OBS_NVAR(value); phalcon_array_fetch(&value, params, str_place, PH_NOISY_CC); } else { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Matched parameter wasn't found in parameters list"); return; } } else { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Matched parameter wasn't found in parameters list"); return; } } phalcon_array_append(&placeholders, value, PH_SEPARATE TSRMLS_CC); zend_hash_move_forward_ex(ah0, &hp0); } PHALCON_INIT_VAR(question); ZVAL_STRING(question, "?", 1); PHALCON_INIT_VAR(bound_sql); PHALCON_CALL_FUNC_PARAMS_3(bound_sql, "preg_replace", bind_pattern, question, sql); } else { PHALCON_CPY_WRT(bound_sql, sql); } /** * Returns an array with the processed SQL and paramters */ PHALCON_INIT_NVAR(query_params); array_init_size(query_params, 2); phalcon_array_update_string(&query_params, SL("sql"), &bound_sql, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_string(&query_params, SL("params"), &placeholders, PH_COPY | PH_SEPARATE TSRMLS_CC); RETURN_CTOR(query_params); }
/** * Internal sanizite wrapper to filter_var * * @param mixed $value * @param mixed $filters * @param boolean $silent * @return mixed */ PHP_METHOD(Phalcon_Filter, _sanitize){ zval *v0 = NULL, *v1 = NULL, *v2 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL, *r5 = NULL, *r6 = NULL; zval *r7 = NULL, *r8 = NULL; zval *t0 = NULL, *t1 = NULL, *t2 = NULL, *t3 = NULL, *t4 = NULL, *t5 = NULL, *t6 = NULL; zval *t7 = NULL, *t8 = NULL; zval *c0 = NULL, *c1 = NULL, *c2 = NULL; zval *a0 = NULL; zval *i0 = NULL; zval *p3[] = { NULL, NULL, NULL }, *p4[] = { NULL }; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|z", &v0, &v1, &v2) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!v2) { PHALCON_INIT_VAR(v2); ZVAL_BOOL(v2, 0); } PHALCON_INIT_VAR(t0); ZVAL_STRING(t0, "email", 1); PHALCON_ALLOC_ZVAL_MM(r0); is_equal_function(r0, v1, t0 TSRMLS_CC); if (zend_is_true(r0)) { PHALCON_ALLOC_ZVAL_MM(r1); PHALCON_INIT_VAR(t1); ZVAL_LONG(t1, 517); PHALCON_CALL_FUNC_PARAMS_2(r1, "filter_var", v0, t1, 0x03D); PHALCON_RETURN_DZVAL(r1); } PHALCON_INIT_VAR(t2); ZVAL_STRING(t2, "int", 1); PHALCON_ALLOC_ZVAL_MM(r2); is_equal_function(r2, v1, t2 TSRMLS_CC); if (zend_is_true(r2)) { PHALCON_ALLOC_ZVAL_MM(r3); PHALCON_INIT_VAR(t3); ZVAL_LONG(t3, 519); PHALCON_CALL_FUNC_PARAMS_2(r3, "filter_var", v0, t3, 0x03D); PHALCON_RETURN_DZVAL(r3); } PHALCON_INIT_VAR(t4); ZVAL_STRING(t4, "string", 1); PHALCON_ALLOC_ZVAL_MM(r4); is_equal_function(r4, v1, t4 TSRMLS_CC); if (zend_is_true(r4)) { PHALCON_ALLOC_ZVAL_MM(r5); PHALCON_INIT_VAR(t5); ZVAL_LONG(t5, 513); PHALCON_CALL_FUNC_PARAMS_2(r5, "filter_var", v0, t5, 0x03D); PHALCON_RETURN_DZVAL(r5); } PHALCON_INIT_VAR(t6); ZVAL_STRING(t6, "float", 1); PHALCON_ALLOC_ZVAL_MM(r6); is_equal_function(r6, v1, t6 TSRMLS_CC); if (zend_is_true(r6)) { PHALCON_ALLOC_ZVAL_MM(r7); p3[0] = v0; PHALCON_INIT_VAR(t7); ZVAL_LONG(t7, 520); p3[1] = t7; PHALCON_INIT_VAR(a0); array_init(a0); PHALCON_INIT_VAR(t8); ZVAL_LONG(t8, 4096); Z_ADDREF_P(t8); PHALCON_SEPARATE_ARRAY(a0); add_assoc_zval(a0, "flags", t8); p3[2] = a0; PHALCON_CALL_FUNC_PARAMS(r7, "filter_var", 3, p3, 0x03D); PHALCON_RETURN_DZVAL(r7); } if (!zend_is_true(v2)) { PHALCON_ALLOC_ZVAL_MM(i0); object_init_ex(i0, phalcon_exception_class_entry); PHALCON_ALLOC_ZVAL_MM(r8); PHALCON_CONCAT_BOTH(r8, "Sanitize filter ", v1, " is not supported"); Z_ADDREF_P(r8); p4[0] = r8; PHALCON_CALL_METHOD_PARAMS_NORETURN(i0, "__construct", 1, p4, PHALCON_CALL_CHECK); Z_DELREF_P(p4[0]); zend_throw_exception_object(i0 TSRMLS_CC); Z_ADDREF_P(i0); PHALCON_MM_RESTORE(); return; } else { PHALCON_RETURN_CHECK_CTOR(v0); } se_e618_2: if(0) { }; PHALCON_MM_RESTORE(); RETURN_NULL(); }