/** * Returns the string meaning of a logger constant * * @param integer $type * @return string */ PHP_METHOD(Phalcon_Logger_Adapter_File, getTypeString){ zval *type = NULL; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &type) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_SEPARATE_PARAM(type); if (phalcon_compare_strict_long(type, 7 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "DEBUG", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 3 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "ERROR", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 4 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "WARNING", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 1 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "CRITICAL", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 8 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "CUSTOM", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 2 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "ALERT", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 5 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "NOTICE", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 6 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "INFO", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 0 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "EMERGENCE", 1); goto se_654f_0; } if (phalcon_compare_strict_long(type, 9 TSRMLS_CC)) { PHALCON_INIT_VAR(type); ZVAL_STRING(type, "SPECIAL", 1); goto se_654f_0; } PHALCON_INIT_VAR(type); ZVAL_STRING(type, "CUSTOM", 1); se_654f_0: RETURN_CCTOR(type); }
PHP_METHOD(Phalcon_Http_Client_Header, parse){ zval *content, *content_parts = NULL, *key = NULL, *header = NULL, *header_parts = NULL, *name = NULL, *value = NULL, *trimmed = NULL; HashTable *ah0; HashPosition hp0; zval **hd; PHALCON_MM_GROW(); phalcon_fetch_params(1, 1, 0, &content); if (PHALCON_IS_EMPTY(content)) { RETURN_MM_FALSE; } if (Z_TYPE_P(content) == IS_STRING) { PHALCON_INIT_VAR(content_parts); phalcon_fast_explode_str(content_parts, SL("\r\n"), content); } else if (Z_TYPE_P(content) == IS_ARRAY) { PHALCON_CPY_WRT_CTOR(content_parts, content); } else { RETURN_MM_FALSE; } phalcon_is_iterable(content_parts, &ah0, &hp0, 0, 0); while (zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) == SUCCESS) { PHALCON_GET_HKEY(key, ah0, hp0); PHALCON_GET_HVALUE(header); if (Z_TYPE_P(header) == IS_STRING) { PHALCON_INIT_NVAR(header_parts); if (phalcon_memnstr_str(header , SL(":"))) { phalcon_fast_explode_str(header_parts, SL(":"), header); } else { if (phalcon_start_with_str(header , SL("HTTP/"))) { phalcon_fast_explode_str(header_parts, SL(" "), header); if (Z_TYPE_P(header_parts) == IS_ARRAY && phalcon_array_isset_long(header_parts, 1) && phalcon_array_isset_long(header_parts, 2)) { PHALCON_OBS_NVAR(value); phalcon_array_fetch_long(&value, header_parts, 1, PH_NOISY); phalcon_update_property_this(this_ptr, SL("_status_code"), value TSRMLS_CC); PHALCON_OBS_NVAR(value); phalcon_array_fetch_long(&value, header_parts, 2, PH_NOISY); phalcon_update_property_this(this_ptr, SL("_status_message"), value TSRMLS_CC); } } zend_hash_move_forward_ex(ah0, &hp0); continue; } } else { PHALCON_CPY_WRT_CTOR(header_parts, header); } if (Z_TYPE_P(header_parts) == IS_ARRAY && phalcon_array_isset_long(header_parts, 0) && phalcon_array_isset_long(header_parts, 1)) { PHALCON_OBS_NVAR(name); phalcon_array_fetch_long(&name, header_parts, 0, PH_NOISY); PHALCON_OBS_NVAR(value); phalcon_array_fetch_long(&value, header_parts, 1, PH_NOISY); PHALCON_INIT_NVAR(trimmed); phalcon_fast_trim(trimmed, value, NULL, PHALCON_TRIM_BOTH TSRMLS_CC); PHALCON_CALL_METHOD(NULL, this_ptr, "set", name, trimmed); } zend_hash_move_forward_ex(ah0, &hp0); } PHALCON_MM_RESTORE(); }
/** * Initialize the metadata for certain table * * @param Phalcon\Mvc\Model $model * @param string $table * @param string $schema */ PHP_METHOD(Phalcon_Mvc_Model_MetaData, _initializeMetaData){ zval *model = NULL, *table = NULL, *schema = NULL, *key = NULL, *connection = NULL, *exists = NULL; zval *complete_table = NULL, *attributes = NULL, *primary_keys = NULL; zval *non_primary_keys = NULL, *numeric_typed = NULL, *not_null = NULL; zval *field_types = NULL, *identity_field = NULL, *columns = NULL; zval *column = NULL, *field_name = NULL, *table_metadata = NULL; zval *t0 = NULL, *t1 = NULL, *t2 = NULL; zval *i0 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL, *r5 = NULL, *r6 = NULL; zval *a0 = NULL; HashTable *ah0; HashPosition hp0; zval **hd; int eval_int; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zzz", &model, &table, &schema) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_INIT_VAR(key); PHALCON_CONCAT_VV(key, schema, table); PHALCON_ALLOC_ZVAL_MM(t0); phalcon_read_property(&t0, this_ptr, SL("_metaData"), PH_NOISY_CC); eval_int = phalcon_array_isset(t0, key); if (!eval_int) { PHALCON_INIT_VAR(connection); PHALCON_CALL_METHOD(connection, model, "getconnection", PH_NO_CHECK); PHALCON_INIT_VAR(exists); PHALCON_CALL_METHOD_PARAMS_2(exists, connection, "tableexists", table, schema, PH_NO_CHECK); if (!zend_is_true(exists)) { if (zend_is_true(schema)) { PHALCON_INIT_VAR(complete_table); PHALCON_CONCAT_VSV(complete_table, schema, "\".\"", table); } else { PHALCON_CPY_WRT(complete_table, table); } PHALCON_ALLOC_ZVAL_MM(i0); object_init_ex(i0, phalcon_mvc_model_exception_ce); PHALCON_ALLOC_ZVAL_MM(r0); phalcon_get_class(r0, model TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(r1); PHALCON_CONCAT_SVSV(r1, "Table \"", complete_table, "\" doesn't exist on database when dumping meta-data for ", r0); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(i0, "__construct", r1, PH_CHECK); phalcon_throw_exception(i0 TSRMLS_CC); return; } PHALCON_INIT_VAR(attributes); array_init(attributes); PHALCON_INIT_VAR(primary_keys); array_init(primary_keys); PHALCON_INIT_VAR(non_primary_keys); array_init(non_primary_keys); PHALCON_INIT_VAR(numeric_typed); array_init(numeric_typed); PHALCON_INIT_VAR(not_null); array_init(not_null); PHALCON_INIT_VAR(field_types); array_init(field_types); PHALCON_INIT_VAR(identity_field); ZVAL_BOOL(identity_field, 0); PHALCON_INIT_VAR(columns); PHALCON_CALL_METHOD_PARAMS_2(columns, connection, "describecolumns", table, schema, PH_NO_CHECK); if (!phalcon_valid_foreach(columns TSRMLS_CC)) { return; } ah0 = Z_ARRVAL_P(columns); zend_hash_internal_pointer_reset_ex(ah0, &hp0); fes_c40c_0: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto fee_c40c_0; } PHALCON_INIT_VAR(column); ZVAL_ZVAL(column, *hd, 1, 0); PHALCON_INIT_VAR(field_name); PHALCON_CALL_METHOD(field_name, column, "getname", PH_NO_CHECK); phalcon_array_append(&attributes, field_name, PH_SEPARATE TSRMLS_CC); PHALCON_INIT_VAR(r2); PHALCON_CALL_METHOD(r2, column, "isprimary", PH_NO_CHECK); if (zend_is_true(r2)) { phalcon_array_append(&primary_keys, field_name, PH_SEPARATE TSRMLS_CC); } else { phalcon_array_append(&non_primary_keys, field_name, PH_SEPARATE TSRMLS_CC); } PHALCON_INIT_VAR(r3); PHALCON_CALL_METHOD(r3, column, "isnumeric", PH_NO_CHECK); if (zend_is_true(r3)) { phalcon_array_update_zval_bool(&numeric_typed, field_name, 1, PH_SEPARATE TSRMLS_CC); } PHALCON_INIT_VAR(r4); PHALCON_CALL_METHOD(r4, column, "isnotnull", PH_NO_CHECK); if (zend_is_true(r4)) { phalcon_array_append(¬_null, field_name, PH_SEPARATE TSRMLS_CC); } PHALCON_INIT_VAR(r5); PHALCON_CALL_METHOD(r5, column, "isautoincrement", PH_NO_CHECK); if (zend_is_true(r5)) { PHALCON_CPY_WRT(identity_field, field_name); } PHALCON_INIT_VAR(r6); PHALCON_CALL_METHOD(r6, column, "gettype", PH_NO_CHECK); phalcon_array_update_zval(&field_types, field_name, &r6, PH_COPY | PH_SEPARATE TSRMLS_CC); zend_hash_move_forward_ex(ah0, &hp0); goto fes_c40c_0; fee_c40c_0: if(0){} PHALCON_INIT_VAR(table_metadata); array_init(table_metadata); phalcon_array_update_long(&table_metadata, 0, &attributes, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_long(&table_metadata, 1, &primary_keys, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_long(&table_metadata, 2, &non_primary_keys, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_long(&table_metadata, 3, ¬_null, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_long(&table_metadata, 4, &field_types, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_long(&table_metadata, 5, &numeric_typed, PH_COPY | PH_SEPARATE TSRMLS_CC); phalcon_array_update_long(&table_metadata, 8, &identity_field, PH_COPY | PH_SEPARATE TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(t1); phalcon_read_property(&t1, this_ptr, SL("_metaData"), PH_NOISY_CC); phalcon_array_update_zval(&t1, key, &table_metadata, PH_COPY TSRMLS_CC); phalcon_update_property_zval(this_ptr, SL("_metaData"), t1 TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(t2); phalcon_read_property(&t2, this_ptr, SL("_changed"), PH_NOISY_CC); if (!zend_is_true(t2)) { PHALCON_ALLOC_ZVAL_MM(a0); array_init(a0); phalcon_array_append(&a0, this_ptr, PH_SEPARATE TSRMLS_CC); add_next_index_stringl(a0, SL("storeMetaData"), 1); PHALCON_CALL_FUNC_PARAMS_1_NORETURN("register_shutdown_function", a0); phalcon_update_property_bool(this_ptr, SL("_changed"), 1 TSRMLS_CC); } } PHALCON_MM_RESTORE(); }
/** * Moves internal resulset cursor to another position letting us to fetch a certain row * *<code> * $result = $connection->query("SELECT * FROM robots ORDER BY name"); * $result->dataSeek(2); // Move to third row on result * $row = $result->fetch(); // Fetch third row *</code> * * @param int $number */ PHP_METHOD(Phalcon_Db_Result_Pdo, dataSeek){ long number = 0, n; zval *connection, *pdo = NULL, *sql_statement; zval *bind_params, *bind_types, *statement = NULL; zval *temp_statement = NULL; pdo_stmt_t *stmt; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &number) == FAILURE) { RETURN_MM_NULL(); } PHALCON_OBS_VAR(connection); phalcon_read_property(&connection, this_ptr, SL("_connection"), PH_NOISY TSRMLS_CC); PHALCON_CALL_METHOD(&pdo, connection, "getinternalhandler"); PHALCON_OBS_VAR(sql_statement); phalcon_read_property(&sql_statement, this_ptr, SL("_sqlStatement"), PH_NOISY TSRMLS_CC); PHALCON_OBS_VAR(bind_params); phalcon_read_property(&bind_params, this_ptr, SL("_bindParams"), PH_NOISY TSRMLS_CC); /** * PDO doesn't support scrollable cursors, so we need to re-execute the statement again */ if (Z_TYPE_P(bind_params) == IS_ARRAY) { PHALCON_OBS_VAR(bind_types); phalcon_read_property(&bind_types, this_ptr, SL("_bindTypes"), PH_NOISY TSRMLS_CC); PHALCON_CALL_METHOD(&statement, pdo, "prepare", sql_statement); if (Z_TYPE_P(statement) == IS_OBJECT) { PHALCON_CALL_METHOD(&temp_statement, connection, "executeprepared", statement, bind_params, bind_types); PHALCON_CPY_WRT(statement, temp_statement); } } else { PHALCON_CALL_METHOD(&statement, pdo, "query", sql_statement); } phalcon_update_property_zval(this_ptr, SL("_pdoStatement"), statement TSRMLS_CC); /** * This a fetch scroll to reach the desired position, however with a big number of records * maybe it may be very slow */ stmt = (pdo_stmt_t*) zend_object_store_get_object(statement TSRMLS_CC); if (!stmt->dbh) { PHALCON_MM_RESTORE(); RETURN_FALSE; } n = -1; number--; while (n != number) { if(!stmt->methods->fetcher(stmt, PDO_FETCH_ORI_NEXT, 0 TSRMLS_CC)) { PHALCON_MM_RESTORE(); RETURN_NULL(); } n++; } PHALCON_MM_RESTORE(); }
/** * Stores cached content into the Memcached backend and stops the frontend * * @param int|string $keyName * @param string $content * @param long $lifetime * @param boolean $stopBuffer */ PHP_METHOD(Phalcon_Cache_Backend_Memcache, save){ zval *key_name = NULL, *content = NULL, *lifetime = NULL, *stop_buffer = NULL; zval *cached_content = NULL, *prepared_content = NULL, *ttl = NULL, *flags, *success = NULL; zval *keys = NULL, *is_buffering = NULL; zval *last_key, *frontend, *memcache, *options, *special_key; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 4, &key_name, &content, &lifetime, &stop_buffer); if (!key_name || Z_TYPE_P(key_name) == IS_NULL) { last_key = phalcon_fetch_nproperty_this(this_ptr, SL("_lastKey"), PH_NOISY TSRMLS_CC); } else { zval *prefix = phalcon_fetch_nproperty_this(this_ptr, SL("_prefix"), PH_NOISY TSRMLS_CC); PHALCON_INIT_VAR(last_key); PHALCON_CONCAT_VV(last_key, prefix, key_name); } if (!zend_is_true(last_key)) { PHALCON_THROW_EXCEPTION_STR(phalcon_cache_exception_ce, "The cache must be started first"); return; } frontend = phalcon_fetch_nproperty_this(this_ptr, SL("_frontend"), PH_NOISY TSRMLS_CC); /** * Check if a connection is created or make a new one */ memcache = phalcon_fetch_nproperty_this(this_ptr, SL("_memcache"), PH_NOISY TSRMLS_CC); if (Z_TYPE_P(memcache) != IS_OBJECT) { memcache = NULL; PHALCON_CALL_METHOD(&memcache, this_ptr, "_connect"); } if (!content || Z_TYPE_P(content) == IS_NULL) { PHALCON_CALL_METHOD(&cached_content, frontend, "getcontent"); } else { cached_content = content; } /** * Prepare the content in the frontend */ PHALCON_CALL_METHOD(&prepared_content, frontend, "beforestore", cached_content); if (!lifetime || Z_TYPE_P(lifetime) == IS_NULL) { zval *tmp = phalcon_fetch_nproperty_this(this_ptr, SL("_lastLifetime"), PH_NOISY TSRMLS_CC); if (Z_TYPE_P(tmp) == IS_NULL) { PHALCON_CALL_METHOD(&ttl, frontend, "getlifetime"); } else { ttl = tmp; } } else { ttl = lifetime; } PHALCON_INIT_VAR(flags); ZVAL_LONG(flags, 0); /** * We store without flags */ if (phalcon_is_numeric(cached_content)) { PHALCON_CALL_METHOD(&success, memcache, "set", last_key, cached_content, flags, ttl); } else { PHALCON_CALL_METHOD(&success, memcache, "set", last_key, prepared_content, flags, ttl); } if (!zend_is_true(success)) { PHALCON_THROW_EXCEPTION_STR(phalcon_cache_exception_ce, "Failed to store data in memcached"); return; } options = phalcon_fetch_nproperty_this(this_ptr, SL("_options"), PH_NOISY TSRMLS_CC); if (unlikely(!phalcon_array_isset_string_fetch(&special_key, options, SS("statsKey")))) { PHALCON_THROW_EXCEPTION_STR(phalcon_cache_exception_ce, "Unexpected inconsistency in options"); return; } if (Z_TYPE_P(special_key) != IS_NULL) { /* Update the stats key */ PHALCON_CALL_METHOD(&keys, memcache, "get", special_key); if (Z_TYPE_P(keys) != IS_ARRAY) { PHALCON_INIT_NVAR(keys); array_init(keys); } if (!phalcon_array_isset(keys, last_key)) { phalcon_array_update_zval(&keys, last_key, ttl, PH_COPY); PHALCON_CALL_METHOD(NULL, memcache, "set", special_key, keys); } } PHALCON_CALL_METHOD(&is_buffering, frontend, "isbuffering"); if (!stop_buffer || PHALCON_IS_TRUE(stop_buffer)) { PHALCON_CALL_METHOD(NULL, frontend, "stop"); } if (PHALCON_IS_TRUE(is_buffering)) { zend_print_zval(cached_content, 0); } phalcon_update_property_bool(this_ptr, SL("_started"), 0 TSRMLS_CC); PHALCON_MM_RESTORE(); }
/** * Initialize the metadata for certain table * * @param Phalcon\Mvc\ModelInterface $model * @param string $key * @param string $table * @param string $schema */ PHP_METHOD(Phalcon_Mvc_Model_MetaData, _initialize) { zval *model, *key, *table, *schema, *strategy = NULL, *class_name; zval *meta_data = NULL, *prefix_key = NULL, *data = NULL, *model_metadata = NULL; zval *exception_message, *dependency_injector = NULL; zval *key_name, *column_map = NULL, *model_column_map; PHALCON_MM_GROW(); phalcon_fetch_params(1, 4, 0, &model, &key, &table, &schema); PHALCON_INIT_VAR(strategy); PHALCON_INIT_VAR(class_name); phalcon_get_class(class_name, model, 0 TSRMLS_CC); if (Z_TYPE_P(key) != IS_NULL) { PHALCON_OBS_VAR(meta_data); phalcon_read_property_this(&meta_data, this_ptr, SL("_metaData"), PH_NOISY_CC); if (!phalcon_array_isset(meta_data, key)) { PHALCON_INIT_VAR(prefix_key); PHALCON_CONCAT_SV(prefix_key, "meta-", key); /** * The meta-data is read from the adapter always */ PHALCON_INIT_VAR(data); phalcon_call_method_p1(data, this_ptr, "read", prefix_key); if (Z_TYPE_P(data) != IS_NULL) { if (Z_TYPE_P(meta_data) != IS_ARRAY) { PHALCON_INIT_NVAR(meta_data); array_init(meta_data); } phalcon_array_update_zval(&meta_data, key, &data, PH_COPY | PH_SEPARATE); phalcon_update_property_this(this_ptr, SL("_metaData"), meta_data TSRMLS_CC); } else { /** * Check if there is a method 'metaData' in the model to retrieve meta-data from it */ if (phalcon_method_exists_ex(model, SS("metadata") TSRMLS_CC) == SUCCESS) { PHALCON_INIT_VAR(model_metadata); phalcon_call_method(model_metadata, model, "metadata"); if (Z_TYPE_P(model_metadata) != IS_ARRAY) { PHALCON_INIT_VAR(exception_message); PHALCON_CONCAT_SV(exception_message, "Invalid meta-data for model ", class_name); PHALCON_THROW_EXCEPTION_ZVAL(phalcon_mvc_model_exception_ce, exception_message); return; } } else { PHALCON_OBS_VAR(dependency_injector); phalcon_read_property_this(&dependency_injector, this_ptr, SL("_dependencyInjector"), PH_NOISY_CC); /** * Get the meta-data extraction strategy */ phalcon_call_method(strategy, this_ptr, "getstrategy"); /** * Get the meta-data */ PHALCON_INIT_NVAR(model_metadata); phalcon_call_method_p2(model_metadata, strategy, "getmetadata", model, dependency_injector); } /** * Store the meta-data locally */ phalcon_update_property_array(this_ptr, SL("_metaData"), key, model_metadata TSRMLS_CC); /** * Store the meta-data in the adapter */ phalcon_call_method_p2_noret(this_ptr, "write", prefix_key, model_metadata); } } } /** * Check for a column map, store in _columnMap in order and reversed order */ if (!PHALCON_GLOBAL(orm).column_renaming) { RETURN_MM_NULL(); } PHALCON_INIT_VAR(key_name); phalcon_fast_strtolower(key_name, class_name); PHALCON_OBS_VAR(column_map); phalcon_read_property_this(&column_map, this_ptr, SL("_columnMap"), PH_NOISY_CC); if (phalcon_array_isset(column_map, key_name)) { RETURN_MM_NULL(); } if (Z_TYPE_P(column_map) != IS_ARRAY) { PHALCON_INIT_NVAR(column_map); array_init(column_map); } /** * Create the map key name */ PHALCON_INIT_NVAR(prefix_key); PHALCON_CONCAT_SV(prefix_key, "map-", key_name); /** * Check if the meta-data is already in the adapter */ PHALCON_INIT_NVAR(data); phalcon_call_method_p1(data, this_ptr, "read", prefix_key); if (Z_TYPE_P(data) != IS_NULL) { phalcon_array_update_zval(&column_map, key_name, &data, PH_COPY | PH_SEPARATE); phalcon_update_property_this(this_ptr, SL("_columnMap"), column_map TSRMLS_CC); RETURN_MM_NULL(); } /** * Get the meta-data extraction strategy */ if (Z_TYPE_P(strategy) != IS_OBJECT) { PHALCON_OBS_NVAR(dependency_injector); phalcon_read_property_this(&dependency_injector, this_ptr, SL("_dependencyInjector"), PH_NOISY_CC); PHALCON_INIT_NVAR(strategy); phalcon_call_method(strategy, this_ptr, "getstrategy"); } /** * Get the meta-data */ PHALCON_INIT_VAR(model_column_map); phalcon_call_method_p2(model_column_map, strategy, "getcolumnmaps", model, dependency_injector); /** * Update the column map locally */ phalcon_update_property_array(this_ptr, SL("_columnMap"), key_name, model_column_map TSRMLS_CC); /** * Write the data to the adapter */ phalcon_call_method_p2_noret(this_ptr, "write", prefix_key, model_column_map); PHALCON_MM_RESTORE(); }
PHP_METHOD(Phalcon_Flash, _showMessage){ zval *v0 = NULL, *v1 = NULL, *v2 = NULL, *v3 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL, *r5 = NULL, *r6 = NULL; zval *c0 = NULL; zval *t0 = NULL, *t1 = NULL; HashTable *ah0; HashPosition hp0; zval **hd; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &v0, &v1) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (Z_TYPE_P(v1) == IS_ARRAY) { PHALCON_ALLOC_ZVAL_MM(r0); PHALCON_INIT_VAR(c0); ZVAL_STRING(c0, " ", 1); PHALCON_CALL_FUNC_PARAMS_2(r0, "join", c0, v1, 0x00F); PHALCON_CPY_WRT(v2, r0); } else { PHALCON_CPY_WRT(v2, v1); } if (Z_TYPE_P(v0) == IS_ARRAY) { if (Z_TYPE_P(v0) != IS_ARRAY) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid argument supplied for foreach()"); } else { ah0 = Z_ARRVAL_P(v0); zend_hash_internal_pointer_reset_ex(ah0, &hp0); fes_3b3c_0: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto fee_3b3c_0; } PHALCON_INIT_VAR(v3); ZVAL_ZVAL(v3, *hd, 1, 0); PHALCON_INIT_VAR(r3); PHALCON_CONCAT_LEFT(r3, "<div class=\"", v2); PHALCON_INIT_VAR(r2); PHALCON_CONCAT_VBOTH(r2, r3, "\">", v3); PHALCON_INIT_VAR(t0); zend_get_constant("PHP_EOL", strlen("PHP_EOL"), t0 TSRMLS_CC); PHALCON_INIT_VAR(r1); PHALCON_CONCAT_VBOTH(r1, r2, "</div>", t0); zend_print_zval(r1, 0); zend_hash_move_forward_ex(ah0, &hp0); goto fes_3b3c_0; fee_3b3c_0: if(0){ }; } } else { PHALCON_ALLOC_ZVAL_MM(r6); PHALCON_CONCAT_LEFT(r6, "<div class=\"", v2); PHALCON_ALLOC_ZVAL_MM(r5); PHALCON_CONCAT_VBOTH(r5, r6, "\">", v0); PHALCON_ALLOC_ZVAL_MM(t1); zend_get_constant("PHP_EOL", strlen("PHP_EOL"), t1 TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(r4); PHALCON_CONCAT_VBOTH(r4, r5, "</div>", t1); zend_print_zval(r4, 0); } PHALCON_MM_RESTORE(); RETURN_NULL(); }
/** * Generates a URL * * @param string|array $uri * @return string */ PHP_METHOD(Phalcon_Mvc_Url, get){ zval *uri = NULL, *base_uri, *dependency_injector, *service; zval *router, *route_name, *route, *exception_message; zval *pattern, *paths, *processed_uri, *final_uri = NULL; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 1, &uri); if (!uri) { PHALCON_INIT_VAR(uri); } PHALCON_INIT_VAR(base_uri); PHALCON_CALL_METHOD(base_uri, this_ptr, "getbaseuri"); if (Z_TYPE_P(uri) == IS_ARRAY) { if (!phalcon_array_isset_string(uri, SS("for"))) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_url_exception_ce, "It's necessary to define the route name with the parameter \"for\""); return; } PHALCON_OBS_VAR(dependency_injector); phalcon_read_property_this(&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); PHALCON_OBS_VAR(route_name); phalcon_array_fetch_string(&route_name, uri, SL("for"), PH_NOISY_CC); /** * Every route is uniquely differenced by a name */ PHALCON_INIT_VAR(route); PHALCON_CALL_METHOD_PARAMS_1(route, router, "getroutebyname", route_name); 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_THROW_EXCEPTION_ZVAL(phalcon_mvc_url_exception_ce, exception_message); return; } PHALCON_INIT_VAR(pattern); PHALCON_CALL_METHOD(pattern, route, "getpattern"); /** * Return the reversed paths */ PHALCON_INIT_VAR(paths); PHALCON_CALL_METHOD(paths, route, "getreversedpaths"); /** * Replace the patterns by its variables */ PHALCON_INIT_VAR(processed_uri); phalcon_replace_paths(processed_uri, pattern, paths, uri TSRMLS_CC); PHALCON_INIT_VAR(final_uri); PHALCON_CONCAT_VV(final_uri, base_uri, processed_uri); RETURN_CTOR(final_uri); } PHALCON_INIT_NVAR(final_uri); PHALCON_CONCAT_VV(final_uri, base_uri, uri); RETURN_CTOR(final_uri); }
/** * Gets information about schema, host and port used by the request * * @return string */ PHP_METHOD(Phalcon_Http_Request, getHttpHost){ zval *scheme, *server_name, *name, *server_port; zval *port, *http, *standard_port, *is_std_name; zval *is_std_port, *is_std_http, *https, *secure_port; zval *is_secure_scheme, *is_secure_port, *is_secure_http; zval *name_port; PHALCON_MM_GROW(); PHALCON_INIT_VAR(scheme); PHALCON_CALL_METHOD(scheme, this_ptr, "getscheme"); /** * Get the server name from _SERVER['SERVER_NAME'] */ PHALCON_INIT_VAR(server_name); ZVAL_STRING(server_name, "SERVER_NAME", 1); PHALCON_INIT_VAR(name); PHALCON_CALL_METHOD_PARAMS_1(name, this_ptr, "getserver", server_name); /** * Get the server port from _SERVER['SERVER_PORT'] */ PHALCON_INIT_VAR(server_port); ZVAL_STRING(server_port, "SERVER_PORT", 1); PHALCON_INIT_VAR(port); PHALCON_CALL_METHOD_PARAMS_1(port, this_ptr, "getserver", server_port); PHALCON_INIT_VAR(http); ZVAL_STRING(http, "http", 1); PHALCON_INIT_VAR(standard_port); ZVAL_LONG(standard_port, 80); /** * Check if the request is a standard http */ PHALCON_INIT_VAR(is_std_name); is_equal_function(is_std_name, scheme, http TSRMLS_CC); PHALCON_INIT_VAR(is_std_port); is_equal_function(is_std_port, port, standard_port TSRMLS_CC); PHALCON_INIT_VAR(is_std_http); phalcon_and_function(is_std_http, is_std_name, is_std_port); PHALCON_INIT_VAR(https); ZVAL_STRING(https, "https", 1); PHALCON_INIT_VAR(secure_port); ZVAL_LONG(secure_port, 443); /** * Check if the request is a secure http request */ PHALCON_INIT_VAR(is_secure_scheme); is_equal_function(is_secure_scheme, scheme, https TSRMLS_CC); PHALCON_INIT_VAR(is_secure_port); is_equal_function(is_secure_port, port, secure_port TSRMLS_CC); PHALCON_INIT_VAR(is_secure_http); phalcon_and_function(is_secure_http, is_secure_scheme, is_secure_port); /** * If is standard http we return the server name only */ if (PHALCON_IS_TRUE(is_std_http)) { RETURN_CCTOR(name); } /** * If is standard secure http we return the server name only */ if (PHALCON_IS_TRUE(is_secure_http)) { RETURN_CCTOR(name); } PHALCON_INIT_VAR(name_port); PHALCON_CONCAT_VSV(name_port, name, ":", port); RETURN_CTOR(name_port); }
/** * Appends an IN condition to the current conditions * *<code> * $builder->inWhere('id', [1, 2, 3]); *</code> * * @param string $expr * @param array $values * @return Phalcon\Mvc\Model\Query\Builder */ PHP_METHOD(Phalcon_Mvc_Model_Query_Builder, inWhere){ zval *expr, *values, *hidden_param, *bind_params; zval *bind_keys, *value = NULL, *key = NULL, *query_key = NULL, *joined_keys; zval *conditions; HashTable *ah0; HashPosition hp0; zval **hd; PHALCON_MM_GROW(); phalcon_fetch_params(1, 2, 0, &expr, &values); if (Z_TYPE_P(values) != IS_ARRAY) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "Values must be an array"); return; } PHALCON_OBS_VAR(hidden_param); phalcon_read_property_this(&hidden_param, this_ptr, SL("_hiddenParamNumber"), PH_NOISY_CC); SEPARATE_ZVAL(&hidden_param); PHALCON_INIT_VAR(bind_params); array_init(bind_params); PHALCON_INIT_VAR(bind_keys); array_init(bind_keys); phalcon_is_iterable(values, &ah0, &hp0, 0, 0); while (zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) == SUCCESS) { PHALCON_GET_HVALUE(value); /** * Key with auto bind-params */ PHALCON_INIT_NVAR(key); PHALCON_CONCAT_SV(key, "phi", hidden_param); PHALCON_INIT_NVAR(query_key); PHALCON_CONCAT_SVS(query_key, ":", key, ":"); phalcon_array_append(&bind_keys, query_key, PH_SEPARATE); phalcon_array_update_zval(&bind_params, key, &value, PH_COPY | PH_SEPARATE); phalcon_increment(hidden_param); zend_hash_move_forward_ex(ah0, &hp0); } PHALCON_INIT_VAR(joined_keys); phalcon_fast_join_str(joined_keys, SL(", "), bind_keys TSRMLS_CC); /** * Create a standard IN condition with bind params */ PHALCON_INIT_VAR(conditions); PHALCON_CONCAT_VSVS(conditions, expr, " IN (", joined_keys, ")"); /** * Append the IN to the current conditions using and 'and' */ phalcon_call_method_p2_noret(this_ptr, "andwhere", conditions, bind_params); phalcon_update_property_this(this_ptr, SL("_hiddenParamNumber"), hidden_param TSRMLS_CC); RETURN_THIS(); }
/** * Executes validator * * @return boolean */ PHP_METHOD(Phalcon_Mvc_Model_Validator_Exclusionin, validate){ zval *record = NULL, *field_name = NULL, *domain = NULL, *value = NULL; zval *c0 = NULL, *c1 = NULL, *c2 = NULL, *c3 = NULL, *c4 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &record) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_INIT_VAR(c0); ZVAL_STRING(c0, "field", 1); PHALCON_INIT_VAR(field_name); PHALCON_CALL_METHOD_PARAMS_1(field_name, this_ptr, "getoption", c0, PH_NO_CHECK); if (Z_TYPE_P(field_name) != IS_STRING) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "Field name must be a string"); return; } PHALCON_INIT_VAR(c1); ZVAL_STRING(c1, "domain", 1); PHALCON_ALLOC_ZVAL_MM(r0); PHALCON_CALL_METHOD_PARAMS_1(r0, this_ptr, "issetoption", c1, PH_NO_CHECK); if (!zend_is_true(r0)) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "The option 'domain' is required for this validator"); return; } PHALCON_INIT_VAR(c2); ZVAL_STRING(c2, "domain", 1); PHALCON_INIT_VAR(domain); PHALCON_CALL_METHOD_PARAMS_1(domain, this_ptr, "getoption", c2, PH_NO_CHECK); if (Z_TYPE_P(domain) != IS_ARRAY) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "Option 'domain' must be an array"); return; } PHALCON_INIT_VAR(value); PHALCON_CALL_METHOD_PARAMS_1(value, record, "readattribute", field_name, PH_NO_CHECK); PHALCON_ALLOC_ZVAL_MM(r1); PHALCON_CALL_FUNC_PARAMS_2(r1, "in_array", value, domain); if (zend_is_true(r1)) { PHALCON_INIT_VAR(c3); ZVAL_STRING(c3, ", ", 1); PHALCON_ALLOC_ZVAL_MM(r2); phalcon_fast_join(r2, c3, domain TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(r3); PHALCON_CONCAT_SVSV(r3, "Value of field '", field_name, "' must not be part of list: ", r2); PHALCON_INIT_VAR(c4); ZVAL_STRING(c4, "exclusion", 1); PHALCON_CALL_METHOD_PARAMS_3_NORETURN(this_ptr, "appendmessage", r3, field_name, c4, PH_NO_CHECK); PHALCON_MM_RESTORE(); RETURN_FALSE; } PHALCON_MM_RESTORE(); RETURN_TRUE; }
/** * Appends a condition to the current conditions using a OR operator * *<code> * $builder->orWhere('name = "Peter"'); * $builder->orWhere('name = :name: AND id > :id:', array('name' => 'Peter', 'id' => 100)); *</code> * * @param string $conditions * @param array $bindParams * @param array $bindTypes * @return Phalcon\Mvc\Model\Query\Builder */ PHP_METHOD(Phalcon_Mvc_Model_Query_Builder, orWhere){ zval *conditions, *bind_params = NULL, *bind_types = NULL; zval *current_conditions, *new_conditions = NULL; zval *current_bind_params, *merged_params = NULL; zval *current_bind_types, *merged_types = NULL; PHALCON_MM_GROW(); phalcon_fetch_params(1, 1, 2, &conditions, &bind_params, &bind_types); if (!bind_params) { PHALCON_INIT_VAR(bind_params); } if (!bind_types) { PHALCON_INIT_VAR(bind_types); } PHALCON_OBS_VAR(current_conditions); phalcon_read_property_this(¤t_conditions, this_ptr, SL("_conditions"), PH_NOISY_CC); /** * Nest the condition to current ones or set as unique */ if (zend_is_true(current_conditions)) { PHALCON_INIT_VAR(new_conditions); PHALCON_CONCAT_SVSVS(new_conditions, "(", current_conditions, ") OR (", conditions, ")"); } else { PHALCON_CPY_WRT(new_conditions, conditions); } phalcon_update_property_this(this_ptr, SL("_conditions"), new_conditions TSRMLS_CC); /** * Merge the bind params to the current ones */ if (Z_TYPE_P(bind_params) == IS_ARRAY) { PHALCON_OBS_VAR(current_bind_params); phalcon_read_property_this(¤t_bind_params, this_ptr, SL("_bindParams"), PH_NOISY_CC); if (Z_TYPE_P(current_bind_params) == IS_ARRAY) { PHALCON_INIT_VAR(merged_params); phalcon_add_function(merged_params, bind_params, current_bind_params TSRMLS_CC); } else { PHALCON_CPY_WRT(merged_params, bind_params); } phalcon_update_property_this(this_ptr, SL("_bindParams"), merged_params TSRMLS_CC); } /** * Merge the bind types to the current ones */ if (Z_TYPE_P(bind_types) == IS_ARRAY) { PHALCON_OBS_VAR(current_bind_types); phalcon_read_property_this(¤t_bind_types, this_ptr, SL("_bindTypes"), PH_NOISY_CC); if (Z_TYPE_P(current_bind_types) == IS_ARRAY) { PHALCON_INIT_VAR(merged_types); phalcon_add_function(merged_types, bind_types, current_bind_types TSRMLS_CC); } else { PHALCON_CPY_WRT(merged_types, bind_types); } phalcon_update_property_this(this_ptr, SL("_bindTypes"), merged_types TSRMLS_CC); } RETURN_THIS(); }
/** * Phalcon\Mvc\Model\Query\Builder constructor * *<code> * $params = array( * 'models' => array('Users'), * 'columns' => array('id', 'name', 'status'), * 'conditions' => "created > '2013-01-01' AND created < '2014-01-01'", * 'group' => array('id', 'name'), * 'having' => "name = 'Kamil'", * 'order' => array('name', 'id'), * 'limit' => 20, * 'offset' => 20, *); *$queryBuilder = new Phalcon\Mvc\Model\Query\Builder($params); *</code> * * @param array $params * @param Phalcon\DI $dependencyInjector */ PHP_METHOD(Phalcon_Mvc_Model_Query_Builder, __construct){ zval *params = NULL, *dependency_injector = NULL, *conditions = NULL; zval *models, *columns, *group_clause, *joins; zval *having_clause, *order_clause, *limit_clause; zval *offset_clause, *for_update, *shared_lock; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 2, ¶ms, &dependency_injector); if (!params) { PHALCON_INIT_VAR(params); } if (!dependency_injector) { PHALCON_INIT_VAR(dependency_injector); } if (Z_TYPE_P(params) == IS_ARRAY) { /** * Process conditions */ if (phalcon_array_isset_long(params, 0)) { PHALCON_OBS_VAR(conditions); phalcon_array_fetch_long(&conditions, params, 0, PH_NOISY); phalcon_update_property_this(this_ptr, SL("_conditions"), conditions TSRMLS_CC); } else { if (phalcon_array_isset_string(params, SS("conditions"))) { PHALCON_OBS_NVAR(conditions); phalcon_array_fetch_string(&conditions, params, SL("conditions"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_conditions"), conditions TSRMLS_CC); } } /** * Assign 'FROM' clause */ if (phalcon_array_isset_string(params, SS("models"))) { PHALCON_OBS_VAR(models); phalcon_array_fetch_string(&models, params, SL("models"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_models"), models TSRMLS_CC); } /** * Assign COLUMNS clause */ if (phalcon_array_isset_string(params, SS("columns"))) { PHALCON_OBS_VAR(columns); phalcon_array_fetch_string(&columns, params, SL("columns"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_columns"), columns TSRMLS_CC); } /** * Assign JOIN clause */ if (phalcon_array_isset_string(params, SS("joins"))) { PHALCON_OBS_VAR(joins); phalcon_array_fetch_string(&joins, params, SL("joins"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_joins"), joins TSRMLS_CC); } /** * Assign GROUP clause */ if (phalcon_array_isset_string(params, SS("group"))) { PHALCON_OBS_VAR(group_clause); phalcon_array_fetch_string(&group_clause, params, SL("group"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_group"), group_clause TSRMLS_CC); } /** * Assign HAVING clause */ if (phalcon_array_isset_string(params, SS("having"))) { PHALCON_OBS_VAR(having_clause); phalcon_array_fetch_string(&having_clause, params, SL("having"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_having"), having_clause TSRMLS_CC); } /** * Assign ORDER clause */ if (phalcon_array_isset_string(params, SS("order"))) { PHALCON_OBS_VAR(order_clause); phalcon_array_fetch_string(&order_clause, params, SL("order"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_order"), order_clause TSRMLS_CC); } /** * Assign LIMIT clause */ if (phalcon_array_isset_string(params, SS("limit"))) { PHALCON_OBS_VAR(limit_clause); phalcon_array_fetch_string(&limit_clause, params, SL("limit"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_limit"), limit_clause TSRMLS_CC); } /** * Assign OFFSET clause */ if (phalcon_array_isset_string(params, SS("offset"))) { PHALCON_OBS_VAR(offset_clause); phalcon_array_fetch_string(&offset_clause, params, SL("offset"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_offset"), offset_clause TSRMLS_CC); } /** * Assign FOR UPDATE clause */ if (phalcon_array_isset_string(params, SS("for_update"))) { PHALCON_OBS_VAR(for_update); phalcon_array_fetch_string(&for_update, params, SL("for_update"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_forUpdate"), for_update TSRMLS_CC); } /** * Assign SHARED LOCK clause */ if (phalcon_array_isset_string(params, SS("shared_lock"))) { PHALCON_OBS_VAR(shared_lock); phalcon_array_fetch_string(&shared_lock, params, SL("shared_lock"), PH_NOISY); phalcon_update_property_this(this_ptr, SL("_sharedLock"), shared_lock TSRMLS_CC); } } /** * Update the dependency injector if any */ if (Z_TYPE_P(dependency_injector) == IS_OBJECT) { phalcon_update_property_this(this_ptr, SL("_dependencyInjector"), dependency_injector TSRMLS_CC); } PHALCON_MM_RESTORE(); }
/** * Commits the internal transaction * */ PHP_METHOD(Phalcon_Logger_Adapter_File, commit){ zval *transaction = NULL, *file_handler = NULL, *quenue = NULL, *message = NULL; zval *message_str = NULL, *type = NULL, *time = NULL, *applied_format = NULL; zval *applied_eol = NULL; zval *t0 = NULL; HashTable *ah0; HashPosition hp0; zval **hd; PHALCON_MM_GROW(); PHALCON_INIT_VAR(transaction); phalcon_read_property(&transaction, this_ptr, SL("_transaction"), PH_NOISY_CC); if (!zend_is_true(transaction)) { PHALCON_THROW_EXCEPTION_STR(phalcon_logger_exception_ce, "There is no active transaction"); return; } phalcon_update_property_bool(this_ptr, SL("_transaction"), 0 TSRMLS_CC); PHALCON_INIT_VAR(file_handler); phalcon_read_property(&file_handler, this_ptr, SL("_fileHandler"), PH_NOISY_CC); PHALCON_INIT_VAR(quenue); phalcon_read_property(&quenue, this_ptr, SL("_quenue"), PH_NOISY_CC); if (!phalcon_valid_foreach(quenue TSRMLS_CC)) { return; } ah0 = Z_ARRVAL_P(quenue); zend_hash_internal_pointer_reset_ex(ah0, &hp0); fes_654f_1: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto fee_654f_1; } PHALCON_INIT_VAR(message); ZVAL_ZVAL(message, *hd, 1, 0); PHALCON_INIT_VAR(message_str); PHALCON_CALL_METHOD(message_str, message, "getmessage", PH_NO_CHECK); PHALCON_INIT_VAR(type); PHALCON_CALL_METHOD(type, message, "gettype", PH_NO_CHECK); PHALCON_INIT_VAR(time); PHALCON_CALL_METHOD(time, message, "gettime", PH_NO_CHECK); PHALCON_INIT_VAR(applied_format); PHALCON_CALL_METHOD_PARAMS_3(applied_format, this_ptr, "_applyformat", message_str, type, time, PH_NO_CHECK); PHALCON_INIT_VAR(t0); zend_get_constant(SL("PHP_EOL"), t0 TSRMLS_CC); PHALCON_INIT_VAR(applied_eol); PHALCON_CONCAT_VV(applied_eol, applied_format, t0); PHALCON_CALL_FUNC_PARAMS_2_NORETURN("fputs", file_handler, applied_eol); zend_hash_move_forward_ex(ah0, &hp0); goto fes_654f_1; fee_654f_1: if(0){} PHALCON_MM_RESTORE(); }
/** * Returns a cached content * * @param string $keyName * @return mixed */ PHP_METHOD(Phalcon_Cache_Backend_File, get){ zval *key_name = NULL, *backend = NULL, *front_end = NULL, *sanitize_key = NULL; zval *cache_file = NULL, *time = NULL, *lifetime = NULL, *cached_content = NULL; zval *t0 = NULL, *t1 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL, *r5 = NULL, *r6 = NULL; zval *r7 = NULL, *r8 = NULL, *r9 = NULL; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &key_name) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_ALLOC_ZVAL_MM(t0); phalcon_read_property(&t0, this_ptr, "_backendOptions", sizeof("_backendOptions")-1, PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(backend, t0); PHALCON_ALLOC_ZVAL_MM(t1); phalcon_read_property(&t1, this_ptr, "_frontendObject", sizeof("_frontendObject")-1, PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(front_end, t1); PHALCON_ALLOC_ZVAL_MM(r0); phalcon_filter_alphanum(r0, key_name); PHALCON_CPY_WRT(sanitize_key, r0); phalcon_update_property_zval(this_ptr, "_lastKey", strlen("_lastKey"), sanitize_key TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(r1); phalcon_array_fetch_string(&r1, backend, "cacheDir", strlen("cacheDir"), PHALCON_NOISY TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(r2); concat_function(r2, r1, sanitize_key TSRMLS_CC); PHALCON_CPY_WRT(cache_file, r2); if (phalcon_file_exists(cache_file TSRMLS_CC) == SUCCESS) { PHALCON_ALLOC_ZVAL_MM(r3); PHALCON_CALL_FUNC(r3, "time", 0x018); PHALCON_CPY_WRT(time, r3); PHALCON_ALLOC_ZVAL_MM(r4); PHALCON_CALL_METHOD(r4, front_end, "getlifetime", PHALCON_NO_CHECK); PHALCON_CPY_WRT(lifetime, r4); PHALCON_ALLOC_ZVAL_MM(r5); sub_function(r5, time, lifetime TSRMLS_CC); PHALCON_ALLOC_ZVAL_MM(r6); PHALCON_CALL_FUNC_PARAMS_1(r6, "filemtime", cache_file, 0x019); PHALCON_INIT_VAR(r7); is_smaller_function(r7, r5, r6 TSRMLS_CC); if (zend_is_true(r7)) { PHALCON_ALLOC_ZVAL_MM(r8); PHALCON_CALL_FUNC_PARAMS_1(r8, "file_get_contents", cache_file, 0x01A); PHALCON_CPY_WRT(cached_content, r8); PHALCON_ALLOC_ZVAL_MM(r9); PHALCON_CALL_METHOD_PARAMS_1(r9, front_end, "afterretrieve", cached_content, PHALCON_NO_CHECK); PHALCON_RETURN_DZVAL(r9); } } PHALCON_MM_RESTORE(); RETURN_NULL(); }
/** * Fires a event in the events manager causing that the acive listeners will be notified about it * * @param string $eventType * @param object $source * @param mixed $data * @return mixed */ PHP_METHOD(Phalcon_Events_Manager, fire){ zval *event_type, *source, *data = NULL, *events, *exception_message; zval *colon, *event_parts, *type, *event_name, *status = NULL; zval *fire_events = NULL, *handler = NULL, *event = NULL, *arguments = NULL; HashTable *ah0, *ah1; HashPosition hp0, hp1; zval **hd; int eval_int; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|z", &event_type, &source, &data) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!data) { PHALCON_INIT_NVAR(data); } if (Z_TYPE_P(event_type) != IS_STRING) { PHALCON_THROW_EXCEPTION_STR(phalcon_events_exception_ce, "Event type must be a string"); return; } PHALCON_INIT_VAR(events); phalcon_read_property(&events, this_ptr, SL("_events"), PH_NOISY_CC); if (Z_TYPE_P(events) != IS_ARRAY) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!phalcon_memnstr_str(event_type, SL(":") TSRMLS_CC)) { PHALCON_INIT_VAR(exception_message); PHALCON_CONCAT_SV(exception_message, "Invalid event type ", event_type); PHALCON_THROW_EXCEPTION_ZVAL(phalcon_events_exception_ce, exception_message); return; } PHALCON_INIT_VAR(colon); ZVAL_STRING(colon, ":", 1); PHALCON_INIT_VAR(event_parts); phalcon_fast_explode(event_parts, colon, event_type TSRMLS_CC); PHALCON_INIT_VAR(type); phalcon_array_fetch_long(&type, event_parts, 0, PH_NOISY_CC); PHALCON_INIT_VAR(event_name); phalcon_array_fetch_long(&event_name, event_parts, 1, PH_NOISY_CC); PHALCON_INIT_VAR(status); eval_int = phalcon_array_isset(events, type); if (eval_int) { PHALCON_INIT_VAR(fire_events); phalcon_array_fetch(&fire_events, events, type, PH_NOISY_CC); if (Z_TYPE_P(fire_events) == IS_ARRAY) { if (!phalcon_valid_foreach(fire_events TSRMLS_CC)) { return; } ah0 = Z_ARRVAL_P(fire_events); 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(handler); if (Z_TYPE_P(handler) == IS_OBJECT) { if (phalcon_is_instance_of(handler, SL("Closure") TSRMLS_CC)) { PHALCON_INIT_NVAR(event); object_init_ex(event, phalcon_events_event_ce); PHALCON_CALL_METHOD_PARAMS_3_NORETURN(event, "__construct", event_name, source, data, PH_CHECK); PHALCON_INIT_NVAR(arguments); array_init(arguments); phalcon_array_append(&arguments, event, PH_SEPARATE TSRMLS_CC); phalcon_array_append(&arguments, source, PH_SEPARATE TSRMLS_CC); phalcon_array_append(&arguments, data, PH_SEPARATE TSRMLS_CC); PHALCON_INIT_NVAR(status); PHALCON_CALL_USER_FUNC_ARRAY(status, handler, arguments); } else { if (phalcon_method_exists(handler, event_name TSRMLS_CC) == SUCCESS) { PHALCON_INIT_NVAR(event); object_init_ex(event, phalcon_events_event_ce); PHALCON_CALL_METHOD_PARAMS_3_NORETURN(event, "__construct", event_name, source, data, PH_CHECK); PHALCON_INIT_NVAR(status); PHALCON_CALL_METHOD_PARAMS_3(status, handler, Z_STRVAL_P(event_name), event, source, data, PH_NO_CHECK); } } } zend_hash_move_forward_ex(ah0, &hp0); goto ph_cycle_start_0; ph_cycle_end_0: if(0){} } } eval_int = phalcon_array_isset(events, event_type); if (eval_int) { PHALCON_INIT_NVAR(fire_events); phalcon_array_fetch(&fire_events, events, event_type, PH_NOISY_CC); if (Z_TYPE_P(fire_events) == IS_ARRAY) { if (!phalcon_valid_foreach(fire_events TSRMLS_CC)) { return; } ah1 = Z_ARRVAL_P(fire_events); zend_hash_internal_pointer_reset_ex(ah1, &hp1); ph_cycle_start_1: if (zend_hash_get_current_data_ex(ah1, (void**) &hd, &hp1) != SUCCESS) { goto ph_cycle_end_1; } PHALCON_GET_FOREACH_VALUE(handler); if (Z_TYPE_P(handler) == IS_OBJECT) { if (phalcon_is_instance_of(handler, SL("Closure") TSRMLS_CC)) { PHALCON_INIT_NVAR(event); object_init_ex(event, phalcon_events_event_ce); PHALCON_CALL_METHOD_PARAMS_3_NORETURN(event, "__construct", event_name, source, data, PH_CHECK); PHALCON_INIT_NVAR(arguments); array_init(arguments); phalcon_array_append(&arguments, event, PH_SEPARATE TSRMLS_CC); phalcon_array_append(&arguments, source, PH_SEPARATE TSRMLS_CC); phalcon_array_append(&arguments, data, PH_SEPARATE TSRMLS_CC); PHALCON_INIT_NVAR(status); PHALCON_CALL_USER_FUNC_ARRAY(status, handler, arguments); } else { if (phalcon_method_exists(handler, event_name TSRMLS_CC) == SUCCESS) { PHALCON_INIT_NVAR(event); object_init_ex(event, phalcon_events_event_ce); PHALCON_CALL_METHOD_PARAMS_3_NORETURN(event, "__construct", event_name, source, data, PH_CHECK); PHALCON_INIT_NVAR(status); PHALCON_CALL_METHOD_PARAMS_3(status, handler, Z_STRVAL_P(event_name), event, source, data, PH_NO_CHECK); } } } zend_hash_move_forward_ex(ah1, &hp1); goto ph_cycle_start_1; ph_cycle_end_1: if(0){} } } RETURN_CCTOR(status); }
/** * Stores cached content into the file backend * * @param string $keyName * @param string $content * @param boolean $stopBuffer */ PHP_METHOD(Phalcon_Cache_Backend_File, save){ zval *key_name = NULL, *content = NULL, *stop_buffer = NULL, *last_key = NULL; zval *front_end = NULL, *backend = NULL, *cache_dir = NULL, *cache_file = NULL; zval *cached_content = NULL, *prepared_content = NULL, *is_buffering = NULL; zval *t0 = NULL, *t1 = NULL, *t2 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL, *r5 = NULL, *r6 = NULL; zval *i0 = NULL, *i1 = NULL; zval *c0 = NULL, *c1 = NULL; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|zzz", &key_name, &content, &stop_buffer) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!key_name) { PHALCON_INIT_VAR(key_name); ZVAL_NULL(key_name); } if (!content) { PHALCON_INIT_VAR(content); ZVAL_NULL(content); } if (!stop_buffer) { PHALCON_INIT_VAR(stop_buffer); ZVAL_BOOL(stop_buffer, 1); } if (Z_TYPE_P(key_name) == IS_NULL) { PHALCON_ALLOC_ZVAL_MM(t0); phalcon_read_property(&t0, this_ptr, "_lastKey", sizeof("_lastKey")-1, PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(last_key, t0); } else { PHALCON_ALLOC_ZVAL_MM(r0); phalcon_filter_alphanum(r0, key_name); PHALCON_CPY_WRT(last_key, r0); } if (!zend_is_true(last_key)) { PHALCON_ALLOC_ZVAL_MM(i0); object_init_ex(i0, phalcon_cache_exception_ce); PHALCON_INIT_VAR(c0); ZVAL_STRING(c0, "The cache must be started first", 1); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(i0, "__construct", c0, PHALCON_CHECK); phalcon_throw_exception(i0 TSRMLS_CC); return; } PHALCON_ALLOC_ZVAL_MM(t1); phalcon_read_property(&t1, this_ptr, "_frontendObject", sizeof("_frontendObject")-1, PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(front_end, t1); PHALCON_ALLOC_ZVAL_MM(t2); phalcon_read_property(&t2, this_ptr, "_backendOptions", sizeof("_backendOptions")-1, PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(backend, t2); PHALCON_ALLOC_ZVAL_MM(r1); phalcon_array_fetch_string(&r1, backend, "cacheDir", strlen("cacheDir"), PHALCON_NOISY TSRMLS_CC); PHALCON_CPY_WRT(cache_dir, r1); PHALCON_ALLOC_ZVAL_MM(r2); PHALCON_CALL_FUNC_PARAMS_1(r2, "is_writable", cache_dir, 0x017); if (!zend_is_true(r2)) { PHALCON_ALLOC_ZVAL_MM(i1); object_init_ex(i1, phalcon_cache_exception_ce); PHALCON_INIT_VAR(c1); ZVAL_STRING(c1, "The cache file is not writable", 1); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(i1, "__construct", c1, PHALCON_CHECK); phalcon_throw_exception(i1 TSRMLS_CC); return; } PHALCON_ALLOC_ZVAL_MM(r3); concat_function(r3, cache_dir, last_key TSRMLS_CC); PHALCON_CPY_WRT(cache_file, r3); if (!zend_is_true(content)) { PHALCON_ALLOC_ZVAL_MM(r4); PHALCON_CALL_METHOD(r4, front_end, "getcontent", PHALCON_NO_CHECK); PHALCON_CPY_WRT(cached_content, r4); } else { PHALCON_CPY_WRT(cached_content, content); } PHALCON_ALLOC_ZVAL_MM(r5); PHALCON_CALL_METHOD_PARAMS_1(r5, front_end, "beforestore", cached_content, PHALCON_NO_CHECK); PHALCON_CPY_WRT(prepared_content, r5); PHALCON_CALL_FUNC_PARAMS_2_NORETURN("file_put_contents", cache_file, prepared_content, 0x01B); PHALCON_ALLOC_ZVAL_MM(r6); PHALCON_CALL_METHOD(r6, front_end, "isbuffering", PHALCON_NO_CHECK); PHALCON_CPY_WRT(is_buffering, r6); if (zend_is_true(stop_buffer)) { PHALCON_CALL_METHOD_NORETURN(front_end, "stop", PHALCON_NO_CHECK); } if (zend_is_true(is_buffering)) { zend_print_zval(cached_content, 1); } PHALCON_MM_RESTORE(); }
/** * Restores the internal state of a Phalcon\Db\Column object * * @param array $data * @return \Phalcon\Db\Column */ PHP_METHOD(Phalcon_Db_Column, __set_state){ zval *data, *definition, *column_name, *column_type = NULL; zval *not_null, *primary, *size, *scale, *dunsigned, *after; zval *is_numeric, *first, *bind_type, *default_value; PHALCON_MM_GROW(); phalcon_fetch_params(1, 1, 0, &data); if (Z_TYPE_P(data) != IS_ARRAY) { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Column state must be an array"); return; } if (!phalcon_array_isset_string_fetch(&column_name, data, SS("_columnName"))) { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Column name is required"); return; } PHALCON_INIT_VAR(definition); array_init(definition); if (phalcon_array_isset_string_fetch(&column_type, data, SS("_type"))) { phalcon_array_update_string(&definition, SL("type"), column_type, PH_COPY); } if (phalcon_array_isset_string_fetch(¬_null, data, SS("_notNull"))) { phalcon_array_update_string(&definition, SL("notNull"), not_null, PH_COPY); } if (phalcon_array_isset_string_fetch(&primary, data, SS("_primary"))) { phalcon_array_update_string(&definition, SL("primary"), primary, PH_COPY); } if (phalcon_array_isset_string_fetch(&size, data, SS("_size"))) { phalcon_array_update_string(&definition, SL("size"), size, PH_COPY); } if (phalcon_array_isset_string_fetch(&scale, data, SS("_scale"))) { phalcon_array_update_string(&definition, SL("scale"), scale, PH_COPY); } if (phalcon_array_isset_string_fetch(&dunsigned, data, SS("_unsigned"))) { phalcon_array_update_string(&definition, SL("unsigned"), dunsigned, PH_COPY); } if (phalcon_array_isset_string_fetch(&after, data, SS("_after"))) { phalcon_array_update_string(&definition, SL("after"), after, PH_COPY); } if (phalcon_array_isset_string_fetch(&is_numeric, data, SS("_isNumeric"))) { phalcon_array_update_string(&definition, SL("isNumeric"), is_numeric, PH_COPY); } if (phalcon_array_isset_string_fetch(&first, data, SS("_first"))) { phalcon_array_update_string(&definition, SL("first"), first, PH_COPY); } if (phalcon_array_isset_string_fetch(&bind_type, data, SS("_bindType"))) { phalcon_array_update_string(&definition, SL("bindType"), bind_type, PH_COPY); } if (phalcon_array_isset_string_fetch(&default_value, data, SS("_default"))) { phalcon_array_update_string(&definition, SL("default"), default_value, PH_COPY); } object_init_ex(return_value, phalcon_db_column_ce); PHALCON_CALL_METHOD(NULL, return_value, "__construct", column_name, definition); RETURN_MM(); }
/** * Writes meta-data for certain model using a MODEL_* constant * *<code> * print_r($metaData->writeColumnMapIndex(new Robots(), MetaData::MODELS_REVERSE_COLUMN_MAP, array('leName' => 'name'))); *</code> * * @param Phalcon\Mvc\ModelInterface $model * @param int $index * @param mixed $data */ PHP_METHOD(Phalcon_Mvc_Model_MetaData, writeMetaDataIndex) { zval *model, *index, *data, *replace, *table, *schema, *class_name; zval *key, *meta_data = NULL, *arr, *value; HashTable *ah2; HashPosition hp2; zval **hd; PHALCON_MM_GROW(); phalcon_fetch_params(1, 4, 0, &model, &index, &data, &replace); if (Z_TYPE_P(model) != IS_OBJECT) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "A model instance is required to retrieve the meta-data"); return; } if (Z_TYPE_P(index) != IS_LONG) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "Index must be a valid integer constant"); return; } if (Z_TYPE_P(data) != IS_ARRAY) { if (Z_TYPE_P(data) != IS_STRING) { if (Z_TYPE_P(data) != IS_BOOL) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "Invalid data for index"); return; } } } PHALCON_INIT_VAR(table); phalcon_call_method(table, model, "getsource"); PHALCON_INIT_VAR(schema); phalcon_call_method(schema, model, "getschema"); PHALCON_INIT_VAR(class_name); phalcon_get_class(class_name, model, 1 TSRMLS_CC); /** * Unique key for meta-data is created using class-name-schema-table */ PHALCON_INIT_VAR(key); PHALCON_CONCAT_VSVV(key, class_name, "-", schema, table); PHALCON_OBS_VAR(meta_data); phalcon_read_property_this(&meta_data, this_ptr, SL("_metaData"), PH_NOISY_CC); if (!phalcon_array_isset(meta_data, key)) { phalcon_call_method_p4_noret(this_ptr, "_initialize", model, key, table, schema); PHALCON_OBS_NVAR(meta_data); phalcon_read_property_this(&meta_data, this_ptr, SL("_metaData"), PH_NOISY_CC); } else if (!zend_is_true(replace)) { PHALCON_OBS_VAR(arr); phalcon_array_fetch(&arr, meta_data, key, PH_NOISY); PHALCON_OBS_VAR(value); phalcon_array_fetch(&value, arr, index, PH_NOISY); PHALCON_SEPARATE_PARAM(data); phalcon_is_iterable(value, &ah2, &hp2, 0, 0); while (zend_hash_get_current_data_ex(ah2, (void**) &hd, &hp2) == SUCCESS) { zval key2 = phalcon_get_current_key_w(ah2, &hp2); if (!phalcon_array_isset(data, &key2)) { phalcon_array_update_zval(&data, &key2, hd, PH_COPY | PH_SEPARATE); } zend_hash_move_forward_ex(ah2, &hp2); } } phalcon_array_update_multi_2(&meta_data, key, index, &data, 0); phalcon_update_property_this(this_ptr, SL("_metaData"), meta_data TSRMLS_CC); PHALCON_MM_RESTORE(); }
/** * Inserts data into a table using custom RBDM SQL syntax * * <code> * //Inserting a new robot * $success = $connection->insert( * "robots", * array("Astro Boy", 1952), * array("name", "year") * ); * * //Next SQL sentence is sent to the database system * INSERT INTO `robots` (`name`, `year`) VALUES ("Astro boy", 1952); * </code> * * @param string $table * @param array $values * @param array $fields * @param array $dataTypes * @return boolean */ PHP_METHOD(Phalcon_Db, insert){ zval *table = NULL, *values = NULL, *fields = NULL, *data_types = NULL, *number_values = NULL; zval *exception_message = NULL, *exception = NULL, *placeholders = NULL; zval *insert_values = NULL, *bind_data_types = NULL, *value = NULL; zval *position = NULL, *str_value = NULL, *bind_type = NULL, *comma = NULL; zval *joined_values = NULL, *joined_fields = NULL, *insert_sql = NULL; zval *success = 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|zz", &table, &values, &fields, &data_types) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!fields) { PHALCON_ALLOC_ZVAL_MM(fields); ZVAL_NULL(fields); } if (!data_types) { PHALCON_ALLOC_ZVAL_MM(data_types); ZVAL_NULL(data_types); } if (Z_TYPE_P(values) != IS_ARRAY) { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "The second parameter for insert isn't an Array"); return; } PHALCON_INIT_VAR(number_values); phalcon_fast_count(number_values, values TSRMLS_CC); if (phalcon_compare_strict_long(number_values, 0 TSRMLS_CC)) { PHALCON_INIT_VAR(exception_message); PHALCON_CONCAT_SVS(exception_message, "Unable to insert into ", table, " without data"); PHALCON_INIT_VAR(exception); object_init_ex(exception, phalcon_db_exception_ce); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(exception, "__construct", exception_message, PH_CHECK); phalcon_throw_exception(exception TSRMLS_CC); return; } PHALCON_INIT_VAR(placeholders); array_init(placeholders); PHALCON_INIT_VAR(insert_values); array_init(insert_values); if (Z_TYPE_P(data_types) == IS_ARRAY) { PHALCON_INIT_VAR(bind_data_types); array_init(bind_data_types); } else { PHALCON_CPY_WRT(bind_data_types, data_types); } if (!phalcon_valid_foreach(values TSRMLS_CC)) { return; } ah0 = Z_ARRVAL_P(values); 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_INIT_VAR(position); PHALCON_GET_FOREACH_KEY(position, ah0, hp0); PHALCON_GET_FOREACH_VALUE(value); if (Z_TYPE_P(value) == IS_OBJECT) { PHALCON_INIT_VAR(str_value); PHALCON_CALL_FUNC_PARAMS_1(str_value, "strval", value); phalcon_array_append(&placeholders, str_value, PH_SEPARATE TSRMLS_CC); } else { if (Z_TYPE_P(value) == IS_NULL) { phalcon_array_append_string(&placeholders, SL("null"), PH_SEPARATE TSRMLS_CC); } else { phalcon_array_append_string(&placeholders, SL("?"), PH_SEPARATE TSRMLS_CC); phalcon_array_append(&insert_values, value, PH_SEPARATE TSRMLS_CC); if (Z_TYPE_P(data_types) == IS_ARRAY) { eval_int = phalcon_array_isset(data_types, position); if (!eval_int) { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Incomplete number of bind types"); return; } PHALCON_INIT_VAR(bind_type); phalcon_array_fetch(&bind_type, data_types, position, PH_NOISY_CC); phalcon_array_append(&bind_data_types, bind_type, PH_SEPARATE TSRMLS_CC); } } } zend_hash_move_forward_ex(ah0, &hp0); goto ph_cycle_start_0; ph_cycle_end_0: PHALCON_INIT_VAR(comma); ZVAL_STRING(comma, ", ", 1); PHALCON_INIT_VAR(joined_values); phalcon_fast_join(joined_values, comma, placeholders TSRMLS_CC); if (Z_TYPE_P(fields) == IS_ARRAY) { PHALCON_INIT_VAR(joined_fields); phalcon_fast_join(joined_fields, comma, fields TSRMLS_CC); PHALCON_INIT_VAR(insert_sql); PHALCON_CONCAT_SVSVSVS(insert_sql, "INSERT INTO ", table, " (", joined_fields, ") VALUES (", joined_values, ")"); } else { PHALCON_INIT_VAR(insert_sql); PHALCON_CONCAT_SVSVS(insert_sql, "INSERT INTO ", table, " VALUES (", joined_values, ")"); } PHALCON_INIT_VAR(success); PHALCON_CALL_METHOD_PARAMS_3(success, this_ptr, "execute", insert_sql, insert_values, bind_data_types, PH_NO_CHECK); RETURN_CCTOR(success); }
/** * Gets number of rows returned by a resulset * *<code> * $result = $connection->query("SELECT * FROM robots ORDER BY name"); * echo 'There are ', $result->numRows(), ' rows in the resulset'; *</code> * * @return int */ PHP_METHOD(Phalcon_Db_Result_Pdo, numRows){ zval *row_count = NULL, *connection, *type = NULL, *pdo_statement = NULL; zval *sql_statement, *bind_params, *bind_types; zval *matches, *pattern, *match, *else_clauses; zval *sql, *result = NULL, *row = NULL; PHALCON_MM_GROW(); PHALCON_OBS_VAR(row_count); phalcon_read_property_this(&row_count, this_ptr, SL("_rowCount"), PH_NOISY TSRMLS_CC); if (PHALCON_IS_FALSE(row_count)) { PHALCON_OBS_VAR(connection); phalcon_read_property_this(&connection, this_ptr, SL("_connection"), PH_NOISY TSRMLS_CC); PHALCON_CALL_METHOD(&type, connection, "gettype"); /** * MySQL/PostgreSQL library property returns the number of records */ if (PHALCON_IS_STRING(type, "mysql") || PHALCON_IS_STRING(type, "pgsql")) { PHALCON_OBS_VAR(pdo_statement); phalcon_read_property_this(&pdo_statement, this_ptr, SL("_pdoStatement"), PH_NOISY TSRMLS_CC); PHALCON_CALL_METHOD(&row_count, pdo_statement, "rowcount"); } /** * We should get the count using a new statement :( */ if (PHALCON_IS_FALSE(row_count)) { /** * SQLite/Oracle/SQLServer returns resultsets that to the client eyes (PDO) has an * arbitrary number of rows, so we need to perform an extra count to know that */ PHALCON_OBS_VAR(sql_statement); phalcon_read_property_this(&sql_statement, this_ptr, SL("_sqlStatement"), PH_NOISY TSRMLS_CC); /** * If the sql_statement starts with SELECT COUNT(*) we don't make the count */ if (!phalcon_start_with_str(sql_statement, SL("SELECT COUNT(*) "))) { PHALCON_OBS_VAR(bind_params); phalcon_read_property_this(&bind_params, this_ptr, SL("_bindParams"), PH_NOISY TSRMLS_CC); PHALCON_OBS_VAR(bind_types); phalcon_read_property_this(&bind_types, this_ptr, SL("_bindTypes"), PH_NOISY TSRMLS_CC); PHALCON_INIT_VAR(matches); PHALCON_INIT_VAR(pattern); ZVAL_STRING(pattern, "/^SELECT\\s+(.*)$/i", 1); PHALCON_INIT_VAR(match); RETURN_MM_ON_FAILURE(phalcon_preg_match(match, pattern, sql_statement, matches TSRMLS_CC)); if (zend_is_true(match)) { PHALCON_OBS_VAR(else_clauses); phalcon_array_fetch_long(&else_clauses, matches, 1, PH_NOISY); PHALCON_INIT_VAR(sql); PHALCON_CONCAT_SVS(sql, "SELECT COUNT(*) \"numrows\" FROM (SELECT ", else_clauses, ")"); PHALCON_CALL_METHOD(&result, connection, "query", sql, bind_params, bind_types); PHALCON_CALL_METHOD(&row, result, "fetch"); PHALCON_OBS_NVAR(row_count); phalcon_array_fetch_string(&row_count, row, SL("numrows"), PH_NOISY); } } else { PHALCON_INIT_NVAR(row_count); ZVAL_LONG(row_count, 1); } } /** * Update the value to avoid further calculations */ phalcon_update_property_this(this_ptr, SL("_rowCount"), row_count TSRMLS_CC); } RETURN_CCTOR(row_count); }
/** * Updates data on a table using custom RBDM SQL syntax * * <code> * //Updating existing robot * $success = $connection->update( * "robots", * array("name") * array("New Astro Boy"), * "id = 101" * ); * * //Next SQL sentence is sent to the database system * UPDATE `robots` SET `name` = "Astro boy" WHERE id = 101 * </code> * * @param string $table * @param array $fields * @param array $values * @param string $whereCondition * @param array $dataTypes * @return boolean */ PHP_METHOD(Phalcon_Db, update){ zval *table = NULL, *fields = NULL, *values = NULL, *where_condition = NULL; zval *data_types = NULL, *placeholders = NULL, *update_values = NULL; zval *bind_data_types = NULL, *value = NULL, *position = NULL, *field = NULL; zval *set_clause_part = NULL, *bind_type = NULL, *comma = NULL, *set_clause = NULL; zval *update_sql = NULL, *success = 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, "zzz|zz", &table, &fields, &values, &where_condition, &data_types) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!where_condition) { PHALCON_ALLOC_ZVAL_MM(where_condition); ZVAL_NULL(where_condition); } if (!data_types) { PHALCON_ALLOC_ZVAL_MM(data_types); ZVAL_NULL(data_types); } PHALCON_INIT_VAR(placeholders); array_init(placeholders); PHALCON_INIT_VAR(update_values); array_init(update_values); if (Z_TYPE_P(data_types) == IS_ARRAY) { PHALCON_INIT_VAR(bind_data_types); array_init(bind_data_types); } else { PHALCON_CPY_WRT(bind_data_types, data_types); } if (!phalcon_valid_foreach(values TSRMLS_CC)) { return; } ah0 = Z_ARRVAL_P(values); 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_INIT_VAR(position); PHALCON_GET_FOREACH_KEY(position, ah0, hp0); PHALCON_GET_FOREACH_VALUE(value); eval_int = phalcon_array_isset(fields, position); if (eval_int) { PHALCON_INIT_VAR(field); phalcon_array_fetch(&field, fields, position, PH_NOISY_CC); if (Z_TYPE_P(value) == IS_OBJECT) { PHALCON_INIT_VAR(set_clause_part); PHALCON_CONCAT_VSV(set_clause_part, field, " = ", value); phalcon_array_append(&placeholders, set_clause_part, PH_SEPARATE TSRMLS_CC); } else { if (Z_TYPE_P(value) == IS_NULL) { PHALCON_INIT_VAR(set_clause_part); PHALCON_CONCAT_VS(set_clause_part, field, " = null"); } else { PHALCON_INIT_VAR(set_clause_part); PHALCON_CONCAT_VS(set_clause_part, field, " = ?"); phalcon_array_append(&update_values, value, PH_SEPARATE TSRMLS_CC); if (Z_TYPE_P(data_types) == IS_ARRAY) { eval_int = phalcon_array_isset(data_types, position); if (!eval_int) { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "Incomplete number of bind types"); return; } PHALCON_INIT_VAR(bind_type); phalcon_array_fetch(&bind_type, data_types, position, PH_NOISY_CC); phalcon_array_append(&bind_data_types, bind_type, PH_SEPARATE TSRMLS_CC); } } phalcon_array_append(&placeholders, set_clause_part, PH_SEPARATE TSRMLS_CC); } } else { PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "The number of values in the update is not the same as fields"); return; } zend_hash_move_forward_ex(ah0, &hp0); goto ph_cycle_start_0; ph_cycle_end_0: PHALCON_INIT_VAR(comma); ZVAL_STRING(comma, ", ", 1); PHALCON_INIT_VAR(set_clause); phalcon_fast_join(set_clause, comma, placeholders TSRMLS_CC); if (Z_TYPE_P(where_condition) != IS_NULL) { PHALCON_INIT_VAR(update_sql); PHALCON_CONCAT_SVSVSV(update_sql, "UPDATE ", table, " SET ", set_clause, " WHERE ", where_condition); } else { PHALCON_INIT_VAR(update_sql); PHALCON_CONCAT_SVSV(update_sql, "UPDATE ", table, " SET ", set_clause); } PHALCON_INIT_VAR(success); PHALCON_CALL_METHOD_PARAMS_3(success, this_ptr, "execute", update_sql, update_values, bind_data_types, PH_NO_CHECK); RETURN_CCTOR(success); }
/** * Rollbacks the transaction * * @param string $rollbackMessage * @param Phalcon\Mvc\Model $rollbackRecord * @return boolean */ PHP_METHOD(Phalcon_Mvc_Model_Transaction, rollback){ zval *rollback_message = NULL, *rollback_record = NULL; zval *manager = NULL, *connection = NULL, *success = NULL; zval *a0 = NULL, *a1 = NULL; zval *i0 = NULL; zval *t0 = NULL; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|zz", &rollback_message, &rollback_record) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } if (!rollback_message) { PHALCON_ALLOC_ZVAL_MM(rollback_message); ZVAL_NULL(rollback_message); } else { PHALCON_SEPARATE_PARAM(rollback_message); } if (!rollback_record) { PHALCON_ALLOC_ZVAL_MM(rollback_record); ZVAL_NULL(rollback_record); } PHALCON_INIT_VAR(manager); phalcon_read_property(&manager, this_ptr, SL("_manager"), PH_NOISY_CC); if (zend_is_true(manager)) { PHALCON_ALLOC_ZVAL_MM(a0); array_init(a0); phalcon_array_append(&a0, manager, PH_SEPARATE TSRMLS_CC); add_next_index_stringl(a0, SL("notifyRollback"), 1); PHALCON_ALLOC_ZVAL_MM(a1); array_init(a1); phalcon_array_append(&a1, this_ptr, PH_SEPARATE TSRMLS_CC); PHALCON_CALL_FUNC_PARAMS_2_NORETURN("call_user_func_array", a0, a1); } PHALCON_INIT_VAR(connection); phalcon_read_property(&connection, this_ptr, SL("_connection"), PH_NOISY_CC); PHALCON_INIT_VAR(success); PHALCON_CALL_METHOD(success, connection, "rollback", PH_NO_CHECK); if (zend_is_true(success)) { if (!zend_is_true(rollback_message)) { PHALCON_INIT_VAR(rollback_message); ZVAL_STRING(rollback_message, "Transaction aborted", 1); } if (zend_is_true(rollback_record)) { phalcon_update_property_zval(this_ptr, SL("_rollbackRecord"), rollback_record TSRMLS_CC); } PHALCON_ALLOC_ZVAL_MM(i0); object_init_ex(i0, phalcon_mvc_model_transaction_failed_ce); PHALCON_ALLOC_ZVAL_MM(t0); phalcon_read_property(&t0, this_ptr, SL("_rollbackRecord"), PH_NOISY_CC); PHALCON_CALL_METHOD_PARAMS_2_NORETURN(i0, "__construct", rollback_message, t0, PH_CHECK); phalcon_throw_exception(i0 TSRMLS_CC); return; } PHALCON_MM_RESTORE(); }
/** * Stores cached content into the Memcached backend and stops the frontend * * @param int|string $keyName * @param string $content * @param long $lifetime * @param boolean $stopBuffer */ PHP_METHOD(Phalcon_Cache_Backend_Memcache, save){ zval *key_name = NULL, *content = NULL, *lifetime = NULL, *stop_buffer = NULL; zval *last_key = NULL, *prefix, *frontend, *memcache = NULL, *cached_content = NULL; zval *prepared_content, *ttl = NULL, *flags, *success; zval *options, *special_key, *keys = NULL, *is_buffering; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 4, &key_name, &content, &lifetime, &stop_buffer); if (!key_name) { PHALCON_INIT_VAR(key_name); } if (!content) { PHALCON_INIT_VAR(content); } if (!lifetime) { PHALCON_INIT_VAR(lifetime); } if (!stop_buffer) { PHALCON_INIT_VAR(stop_buffer); ZVAL_BOOL(stop_buffer, 1); } if (Z_TYPE_P(key_name) == IS_NULL) { PHALCON_OBS_VAR(last_key); phalcon_read_property_this(&last_key, this_ptr, SL("_lastKey"), PH_NOISY_CC); } else { PHALCON_OBS_VAR(prefix); phalcon_read_property_this(&prefix, this_ptr, SL("_prefix"), PH_NOISY_CC); PHALCON_INIT_NVAR(last_key); PHALCON_CONCAT_VV(last_key, prefix, key_name); } if (!zend_is_true(last_key)) { PHALCON_THROW_EXCEPTION_STR(phalcon_cache_exception_ce, "The cache must be started first"); return; } PHALCON_OBS_VAR(frontend); phalcon_read_property_this(&frontend, this_ptr, SL("_frontend"), PH_NOISY_CC); /** * Check if a connection is created or make a new one */ PHALCON_OBS_VAR(memcache); phalcon_read_property_this(&memcache, this_ptr, SL("_memcache"), PH_NOISY_CC); if (Z_TYPE_P(memcache) != IS_OBJECT) { phalcon_call_method_noret(this_ptr, "_connect"); PHALCON_OBS_NVAR(memcache); phalcon_read_property_this(&memcache, this_ptr, SL("_memcache"), PH_NOISY_CC); } if (Z_TYPE_P(content) == IS_NULL) { PHALCON_INIT_VAR(cached_content); phalcon_call_method(cached_content, frontend, "getcontent"); } else { PHALCON_CPY_WRT(cached_content, content); } /** * Prepare the content in the frontend */ PHALCON_INIT_VAR(prepared_content); phalcon_call_method_p1(prepared_content, frontend, "beforestore", cached_content); if (Z_TYPE_P(lifetime) == IS_NULL) { PHALCON_INIT_VAR(ttl); phalcon_call_method(ttl, frontend, "getlifetime"); } else { PHALCON_CPY_WRT(ttl, lifetime); } PHALCON_INIT_VAR(flags); ZVAL_LONG(flags, 0); /** * We store without flags */ PHALCON_INIT_VAR(success); phalcon_call_method_p4(success, memcache, "set", last_key, prepared_content, flags, ttl); if (!zend_is_true(success)) { PHALCON_THROW_EXCEPTION_STR(phalcon_cache_exception_ce, "Failed storing data in memcached"); return; } PHALCON_OBS_VAR(options); phalcon_read_property_this(&options, this_ptr, SL("_options"), PH_NOISY_CC); PHALCON_OBS_VAR(special_key); phalcon_array_fetch_string(&special_key, options, SL("statsKey"), PH_NOISY); /** * Update the stats key */ PHALCON_INIT_VAR(keys); phalcon_call_method_p1(keys, memcache, "get", special_key); if (Z_TYPE_P(keys) != IS_ARRAY) { PHALCON_INIT_NVAR(keys); array_init(keys); } if (!phalcon_array_isset(keys, last_key)) { phalcon_array_update_zval(&keys, last_key, &ttl, PH_COPY | PH_SEPARATE); phalcon_call_method_p2_noret(memcache, "set", special_key, keys); } PHALCON_INIT_VAR(is_buffering); phalcon_call_method(is_buffering, frontend, "isbuffering"); if (PHALCON_IS_TRUE(stop_buffer)) { phalcon_call_method_noret(frontend, "stop"); } if (PHALCON_IS_TRUE(is_buffering)) { zend_print_zval(cached_content, 0); } phalcon_update_property_bool(this_ptr, SL("_started"), 0 TSRMLS_CC); PHALCON_MM_RESTORE(); }
/** * Phalcon\Http\Client\Header constructor */ PHP_METHOD(Phalcon_Http_Client_Header, __construct){ zval *messages; PHALCON_MM_GROW(); PHALCON_INIT_VAR(messages); array_init(messages); phalcon_array_update_long_string(&messages, 100, SL("Continue"), PH_COPY); phalcon_array_update_long_string(&messages, 101, SL("Switching Protocols"), PH_COPY); phalcon_array_update_long_string(&messages, 200, SL("OK"), PH_COPY); phalcon_array_update_long_string(&messages, 201, SL("Created"), PH_COPY); phalcon_array_update_long_string(&messages, 202, SL("Accepted"), PH_COPY); phalcon_array_update_long_string(&messages, 203, SL("Non-Authoritative Information"), PH_COPY); phalcon_array_update_long_string(&messages, 204, SL("No Content"), PH_COPY); phalcon_array_update_long_string(&messages, 205, SL("Reset Content"), PH_COPY); phalcon_array_update_long_string(&messages, 206, SL("Partial Content"), PH_COPY); phalcon_array_update_long_string(&messages, 300, SL("Multiple Choices"), PH_COPY); phalcon_array_update_long_string(&messages, 301, SL("Moved Permanently"), PH_COPY); phalcon_array_update_long_string(&messages, 302, SL("Found"), PH_COPY); phalcon_array_update_long_string(&messages, 303, SL("See Other"), PH_COPY); phalcon_array_update_long_string(&messages, 304, SL("Not Modified"), PH_COPY); phalcon_array_update_long_string(&messages, 305, SL("Use Proxy"), PH_COPY); phalcon_array_update_long_string(&messages, 306, SL("(Unused)"), PH_COPY); phalcon_array_update_long_string(&messages, 307, SL("Temporary Redirect"), PH_COPY); phalcon_array_update_long_string(&messages, 400, SL("Bad Request"), PH_COPY); phalcon_array_update_long_string(&messages, 401, SL("Unauthorized"), PH_COPY); phalcon_array_update_long_string(&messages, 402, SL("Payment Required"), PH_COPY); phalcon_array_update_long_string(&messages, 403, SL("Forbidden"), PH_COPY); phalcon_array_update_long_string(&messages, 404, SL("Not Found"), PH_COPY); phalcon_array_update_long_string(&messages, 405, SL("Method Not Allowed"), PH_COPY); phalcon_array_update_long_string(&messages, 406, SL("Not Acceptable"), PH_COPY); phalcon_array_update_long_string(&messages, 407, SL("Proxy Authentication Required"), PH_COPY); phalcon_array_update_long_string(&messages, 408, SL("Request Timeout"), PH_COPY); phalcon_array_update_long_string(&messages, 409, SL("Conflict"), PH_COPY); phalcon_array_update_long_string(&messages, 410, SL("Gone"), PH_COPY); phalcon_array_update_long_string(&messages, 411, SL("Length Required"), PH_COPY); phalcon_array_update_long_string(&messages, 412, SL("Precondition Failed"), PH_COPY); phalcon_array_update_long_string(&messages, 413, SL("Request Entity Too Large"), PH_COPY); phalcon_array_update_long_string(&messages, 414, SL("Request-URI Too Long"), PH_COPY); phalcon_array_update_long_string(&messages, 415, SL("Unsupported Media Type"), PH_COPY); phalcon_array_update_long_string(&messages, 416, SL("Requested Range Not Satisfiable"), PH_COPY); phalcon_array_update_long_string(&messages, 417, SL("Expectation Failed"), PH_COPY); phalcon_array_update_long_string(&messages, 500, SL("Internal Server Error"), PH_COPY); phalcon_array_update_long_string(&messages, 501, SL("Not Implemented"), PH_COPY); phalcon_array_update_long_string(&messages, 502, SL("Bad Gateway"), PH_COPY); phalcon_array_update_long_string(&messages, 503, SL("Service Unavailable"), PH_COPY); phalcon_array_update_long_string(&messages, 504, SL("Gateway Timeout"), PH_COPY); phalcon_array_update_long_string(&messages, 505, SL("HTTP Version Not Supported"), PH_COPY); phalcon_array_update_long_string(&messages, 506, SL("Bandwidth Limit Exceeded"), PH_COPY); phalcon_update_static_property_ce(phalcon_http_client_header_ce, SL("_messages"), messages TSRMLS_CC); phalcon_update_property_empty_array(this_ptr, SL("_fields") TSRMLS_CC); PHALCON_MM_RESTORE(); }
/** * Phalcon_Config_Adapter_Ini constructor * * @param string $filePath * @return Phalcon_Config_Adapter_Ini * */ PHP_METHOD(Phalcon_Config_Adapter_Ini, __construct){ zval *file_path = NULL, *config = NULL, *ini_config = NULL, *directives = NULL; zval *section = NULL, *value = NULL, *key = NULL, *directive_parts = NULL; zval *a0 = NULL; zval *c0 = NULL, *c1 = NULL, *c2 = NULL; zval *i0 = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL, *r5 = NULL; zval *t0 = NULL, *t1 = NULL; HashTable *ah0, *ah1; HashPosition hp0, hp1; zval **hd; char *hash_index; uint hash_index_len; ulong hash_num; int hash_type; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &file_path) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_INIT_VAR(a0); array_init(a0); PHALCON_CPY_WRT(config, a0); PHALCON_INIT_VAR(c0); ZVAL_BOOL(c0, 1); PHALCON_INIT_VAR(ini_config); PHALCON_CALL_FUNC_PARAMS_2(ini_config, "parse_ini_file", file_path, c0); if (Z_TYPE_P(ini_config) == IS_BOOL && !Z_BVAL_P(ini_config)) { PHALCON_ALLOC_ZVAL_MM(i0); object_init_ex(i0, phalcon_config_exception_ce); PHALCON_ALLOC_ZVAL_MM(r0); PHALCON_ALLOC_ZVAL_MM(r1); PHALCON_CALL_FUNC_PARAMS_1(r1, "basename", file_path); PHALCON_CONCAT_SVS(r0, "Configuration file ", r1, " can't be loaded"); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(i0, "__construct", r0, PHALCON_CHECK); phalcon_throw_exception(i0 TSRMLS_CC); return; } if (phalcon_valid_foreach(ini_config TSRMLS_CC)) { ah0 = Z_ARRVAL_P(ini_config); zend_hash_internal_pointer_reset_ex(ah0, &hp0); fes_b840_0: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto fee_b840_0; } else { PHALCON_INIT_VAR(section); PHALCON_GET_FOREACH_KEY(section, ah0, hp0); } PHALCON_INIT_VAR(directives); ZVAL_ZVAL(directives, *hd, 1, 0); if (phalcon_valid_foreach(directives TSRMLS_CC)) { ah1 = Z_ARRVAL_P(directives); zend_hash_internal_pointer_reset_ex(ah1, &hp1); fes_b840_1: if(zend_hash_get_current_data_ex(ah1, (void**) &hd, &hp1) != SUCCESS){ goto fee_b840_1; } else { PHALCON_INIT_VAR(key); PHALCON_GET_FOREACH_KEY(key, ah1, hp1); } PHALCON_INIT_VAR(value); ZVAL_ZVAL(value, *hd, 1, 0); PHALCON_INIT_VAR(c1); ZVAL_STRING(c1, ".", 1); PHALCON_INIT_VAR(r2); phalcon_fast_strpos(r2, key, c1 TSRMLS_CC); if (Z_TYPE_P(r2) != IS_BOOL || (Z_TYPE_P(r2) == IS_BOOL && Z_BVAL_P(r2))) { PHALCON_INIT_VAR(c2); ZVAL_STRING(c2, ".", 1); PHALCON_INIT_VAR(r3); phalcon_fast_explode(r3, c2, key TSRMLS_CC); PHALCON_CPY_WRT(directive_parts, r3); if (Z_TYPE_P(config) == IS_ARRAY) { PHALCON_INIT_VAR(t0); phalcon_array_fetch(&t0, config, section, PHALCON_SILENT TSRMLS_CC); } if (Z_REFCOUNT_P(t0) > 1) { phalcon_array_update(&config, section, &t0, PHALCON_NO_SEPARATE_THX, PHALCON_COPY, PHALCON_CTOR TSRMLS_CC); } if (Z_TYPE_P(t0) != IS_ARRAY) { convert_to_array(t0); phalcon_array_update(&config, section, &t0, PHALCON_NO_SEPARATE_THX, PHALCON_COPY, PHALCON_NO_CTOR TSRMLS_CC); } PHALCON_INIT_VAR(r4); phalcon_array_fetch_long(&r4, directive_parts, 0, PHALCON_NOISY TSRMLS_CC); if (Z_TYPE_P(t0) == IS_ARRAY) { PHALCON_INIT_VAR(t1); phalcon_array_fetch(&t1, t0, r4, PHALCON_SILENT TSRMLS_CC); } if (Z_REFCOUNT_P(t1) > 1) { phalcon_array_update(&t0, r4, &t1, PHALCON_NO_SEPARATE_THX, PHALCON_COPY, PHALCON_CTOR TSRMLS_CC); } if (Z_TYPE_P(t1) != IS_ARRAY) { convert_to_array(t1); phalcon_array_update(&t0, r4, &t1, PHALCON_NO_SEPARATE_THX, PHALCON_COPY, PHALCON_NO_CTOR TSRMLS_CC); } PHALCON_INIT_VAR(r5); phalcon_array_fetch_long(&r5, directive_parts, 1, PHALCON_NOISY TSRMLS_CC); phalcon_array_update(&t1, r5, &value, PHALCON_NO_SEPARATE_THX, PHALCON_COPY, PHALCON_NO_CTOR TSRMLS_CC); } else { phalcon_array_update_multi_2(&config, section, key, &value, PHALCON_NO_SEPARATE_THX TSRMLS_CC); } zend_hash_move_forward_ex(ah1, &hp1); goto fes_b840_1; fee_b840_1: if(0){} } else { return; } zend_hash_move_forward_ex(ah0, &hp0); goto fes_b840_0; fee_b840_0: if(0){} } else { return; } PHALCON_CALL_PARENT_PARAMS_1_NORETURN(this_ptr, "Phalcon_Config_Adapter_Ini", "__construct", config); PHALCON_MM_RESTORE(); }
PHP_METHOD(Phalcon_Http_Client_Header, build){ zval *flags = NULL, *messages, *status_code, *message = NULL, *version, *lines, *line = NULL; zval *fields, *filed = NULL, *value = NULL, *join_filed; HashTable *ah0; HashPosition hp0; zval **hd; int f = 0; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 1, &flags); if (flags) { f = phalcon_get_intval(flags); } PHALCON_INIT_VAR(lines); array_init(lines); PHALCON_OBS_VAR(messages); phalcon_read_static_property_ce(&messages, phalcon_http_client_header_ce, SL("_messages") TSRMLS_CC); status_code = phalcon_fetch_nproperty_this(this_ptr, SL("_status_code"), PH_NOISY TSRMLS_CC); if ((f & PHALCON_HTTP_CLIENT_HEADER_BUILD_STATUS) && phalcon_array_isset_fetch(&message, messages, status_code)) { version = phalcon_fetch_nproperty_this(this_ptr, SL("_version "), PH_NOISY TSRMLS_CC); PHALCON_INIT_NVAR(line); PHALCON_CONCAT_SVS(line, "HTTP/", version, " "); PHALCON_SCONCAT_VSV(line, status_code, " ", message); phalcon_merge_append(lines, line); } fields = phalcon_fetch_nproperty_this(this_ptr, SL("_fields"), PH_NOISY TSRMLS_CC); phalcon_is_iterable(fields, &ah0, &hp0, 0, 0); while (zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) == SUCCESS) { PHALCON_GET_HKEY(filed, ah0, hp0); PHALCON_GET_HVALUE(value); PHALCON_INIT_NVAR(line); PHALCON_CONCAT_VSV(line, filed, ": ", value); phalcon_merge_append(lines, line); zend_hash_move_forward_ex(ah0, &hp0); } if (f & PHALCON_HTTP_CLIENT_HEADER_BUILD_FIELDS) { PHALCON_INIT_VAR(join_filed); phalcon_fast_join_str(join_filed, SL("\r\n"), lines TSRMLS_CC); RETURN_CCTOR(join_filed); } RETURN_CCTOR(lines); }
/** * Executes the validation * * @param Phalcon\Validation $validator * @param string $attribute * @return boolean */ PHP_METHOD(Phalcon_Validation_Validator_InclusionIn, validate){ zval *validator, *attribute, *value = NULL, *allow_empty, *valid = NULL; zval *label, *domain, *joined_domain, *pairs, *message_str, *message, *code; zval *prepared = NULL; zend_class_entry *ce = Z_OBJCE_P(getThis()); PHALCON_MM_GROW(); phalcon_fetch_params(1, 2, 0, &validator, &attribute); PHALCON_VERIFY_CLASS_EX(validator, phalcon_validation_ce, phalcon_validation_exception_ce, 1); PHALCON_CALL_METHOD(&value, validator, "getvalue", attribute); PHALCON_OBS_VAR(allow_empty); RETURN_MM_ON_FAILURE(phalcon_validation_validator_getoption_helper(ce, &allow_empty, getThis(), ISV(allowEmpty))); if (zend_is_true(allow_empty) && phalcon_validation_validator_isempty_helper(value)) { RETURN_MM_TRUE; } /* A domain is an array with a list of valid values */ PHALCON_OBS_VAR(domain); RETURN_MM_ON_FAILURE(phalcon_validation_validator_getoption_helper(ce, &domain, getThis(), ISV(domain))); if (Z_TYPE_P(domain) != IS_ARRAY) { PHALCON_THROW_EXCEPTION_STR(phalcon_validation_exception_ce, "Option 'domain' must be an array"); return; } PHALCON_CALL_SELF(&valid, "valid", value, domain); if (PHALCON_IS_FALSE(valid)) { PHALCON_OBS_VAR(label); RETURN_MM_ON_FAILURE(phalcon_validation_validator_getoption_helper(ce, &label, getThis(), ISV(label))); if (!zend_is_true(label)) { PHALCON_CALL_METHOD(&label, validator, "getlabel", attribute); if (!zend_is_true(label)) { PHALCON_CPY_WRT(label, attribute); } } PHALCON_ALLOC_INIT_ZVAL(joined_domain); phalcon_fast_join_str(joined_domain, SL(", "), domain); PHALCON_ALLOC_INIT_ZVAL(pairs); array_init_size(pairs, 2); Z_TRY_ADDREF_P(label); add_assoc_zval_ex(pairs, SL(":field"), label); add_assoc_zval_ex(pairs, SL(":domain"), joined_domain); PHALCON_OBS_VAR(message_str); RETURN_MM_ON_FAILURE(phalcon_validation_validator_getoption_helper(ce, &message_str, getThis(), ISV(message))); if (!zend_is_true(message_str)) { PHALCON_OBSERVE_OR_NULLIFY_VAR(message_str); RETURN_MM_ON_FAILURE(phalcon_validation_getdefaultmessage_helper(Z_OBJCE_P(validator), message_str, validator, "InclusionIn")); } PHALCON_OBS_VAR(code); RETURN_MM_ON_FAILURE(phalcon_validation_validator_getoption_helper(ce, &code, getThis(), ISV(code))); if (Z_TYPE_P(code) == IS_NULL) { ZVAL_LONG(code, 0); } PHALCON_CALL_FUNCTION(&prepared, "strtr", message_str, pairs); message = phalcon_validation_message_construct_helper(prepared, attribute, "InclusionIn", code); Z_TRY_DELREF_P(message); PHALCON_CALL_METHOD(NULL, validator, "appendmessage", message); RETURN_MM_FALSE; } RETURN_MM_TRUE; }
/** * Returns a PHQL statement built based on the builder parameters * * @return string */ PHP_METHOD(Phalcon_Mvc_Model_Query_Builder, getPhql){ zval *dependency_injector = NULL, *models, *conditions = NULL; zval *one, *number_models, *invalid_condition; zval *model = NULL, *service_name, *meta_data, *model_instance; zval *no_primary = NULL, *primary_keys, *first_primary_key; zval *column_map = NULL, *attribute_field = NULL, *exception_message; zval *primary_key_condition, *phql, *columns; zval *selected_columns = NULL, *column = NULL, *column_alias = NULL; zval *aliased_column = NULL, *joined_columns = NULL, *model_column_alias = NULL; zval *selected_column = NULL, *selected_models, *model_alias = NULL; zval *selected_model = NULL, *joined_models, *joins; zval *join = NULL, *join_model = NULL, *join_conditions = NULL, *join_alias = NULL; zval *join_type = NULL, *group, *group_items, *group_item = NULL; zval *escaped_item = NULL, *joined_items = NULL, *having, *order; zval *order_items, *order_item = NULL, *limit, *number; zval *offset = NULL; HashTable *ah0, *ah1, *ah2, *ah3, *ah4, *ah5; HashPosition hp0, hp1, hp2, hp3, hp4, hp5; zval **hd; zend_class_entry *ce0; PHALCON_MM_GROW(); PHALCON_OBS_VAR(dependency_injector); phalcon_read_property_this(&dependency_injector, this_ptr, SL("_dependencyInjector"), PH_NOISY_CC); if (Z_TYPE_P(dependency_injector) != IS_OBJECT) { PHALCON_INIT_NVAR(dependency_injector); PHALCON_CALL_STATIC(dependency_injector, "phalcon\\di", "getdefault"); phalcon_update_property_this(this_ptr, SL("_dependencyInjector"), dependency_injector TSRMLS_CC); } PHALCON_OBS_VAR(models); phalcon_read_property_this(&models, this_ptr, SL("_models"), PH_NOISY_CC); if (Z_TYPE_P(models) == IS_ARRAY) { if (!phalcon_fast_count_ev(models TSRMLS_CC)) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "At least one model is required to build the query"); return; } } else { if (!zend_is_true(models)) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "At least one model is required to build the query"); return; } } PHALCON_OBS_VAR(conditions); phalcon_read_property_this(&conditions, this_ptr, SL("_conditions"), PH_NOISY_CC); if (phalcon_is_numeric(conditions)) { /** * If the conditions is a single numeric field. We internally create a condition * using the related primary key */ if (Z_TYPE_P(models) == IS_ARRAY) { PHALCON_INIT_VAR(one); ZVAL_LONG(one, 1); PHALCON_INIT_VAR(number_models); phalcon_fast_count(number_models, models TSRMLS_CC); PHALCON_INIT_VAR(invalid_condition); is_smaller_function(invalid_condition, one, number_models TSRMLS_CC); if (PHALCON_IS_TRUE(invalid_condition)) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "Cannot build the query. Invalid condition"); return; } PHALCON_OBS_VAR(model); phalcon_array_fetch_long(&model, models, 0, PH_NOISY); } else { PHALCON_CPY_WRT(model, models); } PHALCON_INIT_VAR(service_name); ZVAL_STRING(service_name, "modelsMetadata", 1); /** * Get the models metadata service to obtain the column names, column map and * primary key */ PHALCON_INIT_VAR(meta_data); phalcon_call_method_p1(meta_data, dependency_injector, "getshared", service_name); ce0 = phalcon_fetch_class(model TSRMLS_CC); PHALCON_INIT_VAR(model_instance); object_init_ex(model_instance, ce0); if (phalcon_has_constructor(model_instance TSRMLS_CC)) { phalcon_call_method_p1_noret(model_instance, "__construct", dependency_injector); } PHALCON_INIT_VAR(no_primary); ZVAL_BOOL(no_primary, 1); PHALCON_INIT_VAR(primary_keys); phalcon_call_method_p1(primary_keys, meta_data, "getprimarykeyattributes", model_instance); if (phalcon_fast_count_ev(primary_keys TSRMLS_CC)) { if (phalcon_array_isset_long(primary_keys, 0)) { PHALCON_OBS_VAR(first_primary_key); phalcon_array_fetch_long(&first_primary_key, primary_keys, 0, PH_NOISY); /** * The PHQL contains the renamed columns if available */ if (PHALCON_GLOBAL(orm).column_renaming) { PHALCON_INIT_VAR(column_map); phalcon_call_method_p1(column_map, meta_data, "getcolumnmap", model_instance); } else { PHALCON_INIT_NVAR(column_map); } if (Z_TYPE_P(column_map) == IS_ARRAY) { if (phalcon_array_isset(column_map, first_primary_key)) { PHALCON_OBS_VAR(attribute_field); phalcon_array_fetch(&attribute_field, column_map, first_primary_key, PH_NOISY); } else { PHALCON_INIT_VAR(exception_message); PHALCON_CONCAT_SVS(exception_message, "Column '", first_primary_key, "\" isn't part of the column map"); PHALCON_THROW_EXCEPTION_ZVAL(phalcon_mvc_model_exception_ce, exception_message); return; } } else { PHALCON_CPY_WRT(attribute_field, first_primary_key); } PHALCON_INIT_VAR(primary_key_condition); PHALCON_CONCAT_SVSVSV(primary_key_condition, "[", model, "].[", attribute_field, "] = ", conditions); PHALCON_CPY_WRT(conditions, primary_key_condition); ZVAL_BOOL(no_primary, 0); } } /** * A primary key is mandatory in these cases */ if (PHALCON_IS_TRUE(no_primary)) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_model_exception_ce, "Source related to this model does not have a primary key defined"); return; } } PHALCON_INIT_VAR(phql); ZVAL_STRING(phql, "SELECT ", 1); PHALCON_OBS_VAR(columns); phalcon_read_property_this(&columns, this_ptr, SL("_columns"), PH_NOISY_CC); if (Z_TYPE_P(columns) != IS_NULL) { /** * Generate PHQL for columns */ if (Z_TYPE_P(columns) == IS_ARRAY) { PHALCON_INIT_VAR(selected_columns); array_init(selected_columns); phalcon_is_iterable(columns, &ah0, &hp0, 0, 0); while (zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) == SUCCESS) { PHALCON_GET_HKEY(column_alias, ah0, hp0); PHALCON_GET_HVALUE(column); if (Z_TYPE_P(column_alias) == IS_LONG) { phalcon_array_append(&selected_columns, column, PH_SEPARATE); } else { PHALCON_INIT_NVAR(aliased_column); PHALCON_CONCAT_VSV(aliased_column, column, " AS ", column_alias); phalcon_array_append(&selected_columns, aliased_column, PH_SEPARATE); } zend_hash_move_forward_ex(ah0, &hp0); } PHALCON_INIT_VAR(joined_columns); phalcon_fast_join_str(joined_columns, SL(", "), selected_columns TSRMLS_CC); phalcon_concat_self(&phql, joined_columns TSRMLS_CC); } else { phalcon_concat_self(&phql, columns TSRMLS_CC); } } else { /** * Automatically generate an array of models */ if (Z_TYPE_P(models) == IS_ARRAY) { PHALCON_INIT_NVAR(selected_columns); array_init(selected_columns); phalcon_is_iterable(models, &ah1, &hp1, 0, 0); while (zend_hash_get_current_data_ex(ah1, (void**) &hd, &hp1) == SUCCESS) { PHALCON_GET_HKEY(model_column_alias, ah1, hp1); PHALCON_GET_HVALUE(model); if (Z_TYPE_P(model_column_alias) == IS_LONG) { PHALCON_INIT_NVAR(selected_column); PHALCON_CONCAT_SVS(selected_column, "[", model, "].*"); } else { PHALCON_INIT_NVAR(selected_column); PHALCON_CONCAT_SVS(selected_column, "[", model_column_alias, "].*"); } phalcon_array_append(&selected_columns, selected_column, PH_SEPARATE); zend_hash_move_forward_ex(ah1, &hp1); } PHALCON_INIT_NVAR(joined_columns); phalcon_fast_join_str(joined_columns, SL(", "), selected_columns TSRMLS_CC); phalcon_concat_self(&phql, joined_columns TSRMLS_CC); } else { PHALCON_SCONCAT_SVS(phql, "[", models, "].*"); } } /** * Join multiple models or use a single one if it is a string */ if (Z_TYPE_P(models) == IS_ARRAY) { PHALCON_INIT_VAR(selected_models); array_init(selected_models); phalcon_is_iterable(models, &ah2, &hp2, 0, 0); while (zend_hash_get_current_data_ex(ah2, (void**) &hd, &hp2) == SUCCESS) { PHALCON_GET_HKEY(model_alias, ah2, hp2); PHALCON_GET_HVALUE(model); if (Z_TYPE_P(model_alias) == IS_STRING) { PHALCON_INIT_NVAR(selected_model); PHALCON_CONCAT_SVSVS(selected_model, "[", model, "] AS [", model_alias, "]"); } else { PHALCON_INIT_NVAR(selected_model); PHALCON_CONCAT_SVS(selected_model, "[", model, "]"); } phalcon_array_append(&selected_models, selected_model, PH_SEPARATE); zend_hash_move_forward_ex(ah2, &hp2); } PHALCON_INIT_VAR(joined_models); phalcon_fast_join_str(joined_models, SL(", "), selected_models TSRMLS_CC); PHALCON_SCONCAT_SV(phql, " FROM ", joined_models); } else { PHALCON_SCONCAT_SVS(phql, " FROM [", models, "]"); } /** * Check if joins were passed to the builders */ PHALCON_OBS_VAR(joins); phalcon_read_property_this(&joins, this_ptr, SL("_joins"), PH_NOISY_CC); if (Z_TYPE_P(joins) == IS_ARRAY) { phalcon_is_iterable(joins, &ah3, &hp3, 0, 0); while (zend_hash_get_current_data_ex(ah3, (void**) &hd, &hp3) == SUCCESS) { PHALCON_GET_HVALUE(join); /** * The joined table is in the first place of the array */ PHALCON_OBS_NVAR(join_model); phalcon_array_fetch_long(&join_model, join, 0, PH_NOISY); /** * The join conditions are in the second place of the array */ PHALCON_OBS_NVAR(join_conditions); phalcon_array_fetch_long(&join_conditions, join, 1, PH_NOISY); /** * The join alias is in the second place of the array */ PHALCON_OBS_NVAR(join_alias); phalcon_array_fetch_long(&join_alias, join, 2, PH_NOISY); /** * Join type */ PHALCON_OBS_NVAR(join_type); phalcon_array_fetch_long(&join_type, join, 3, PH_NOISY); /** * Create the join according to the type */ if (zend_is_true(join_type)) { PHALCON_SCONCAT_SVSVS(phql, " ", join_type, " JOIN [", join_model, "]"); } else { PHALCON_SCONCAT_SVS(phql, " JOIN [", join_model, "]"); } /** * Alias comes first */ if (zend_is_true(join_alias)) { PHALCON_SCONCAT_SVS(phql, " AS [", join_alias, "]"); } /** * Conditions then */ if (zend_is_true(join_conditions)) { PHALCON_SCONCAT_SV(phql, " ON ", join_conditions); } zend_hash_move_forward_ex(ah3, &hp3); } } /** * Only append conditions if it's string */ if (Z_TYPE_P(conditions) == IS_STRING) { if (PHALCON_IS_NOT_EMPTY(conditions)) { PHALCON_SCONCAT_SV(phql, " WHERE ", conditions); } } /** * Process group parameters */ PHALCON_OBS_VAR(group); phalcon_read_property_this(&group, this_ptr, SL("_group"), PH_NOISY_CC); if (Z_TYPE_P(group) != IS_NULL) { if (Z_TYPE_P(group) == IS_ARRAY) { PHALCON_INIT_VAR(group_items); array_init(group_items); phalcon_is_iterable(group, &ah4, &hp4, 0, 0); while (zend_hash_get_current_data_ex(ah4, (void**) &hd, &hp4) == SUCCESS) { PHALCON_GET_HVALUE(group_item); if (phalcon_is_numeric(group_item)) { phalcon_array_append(&group_items, group_item, PH_SEPARATE); } else { if (phalcon_memnstr_str(group_item, SL("."))) { phalcon_array_append(&group_items, group_item, PH_SEPARATE); } else { PHALCON_INIT_NVAR(escaped_item); PHALCON_CONCAT_SVS(escaped_item, "[", group_item, "]"); phalcon_array_append(&group_items, escaped_item, PH_SEPARATE); } } zend_hash_move_forward_ex(ah4, &hp4); } PHALCON_INIT_VAR(joined_items); phalcon_fast_join_str(joined_items, SL(", "), group_items TSRMLS_CC); PHALCON_SCONCAT_SV(phql, " GROUP BY ", joined_items); } else { if (phalcon_is_numeric(group)) { PHALCON_SCONCAT_SV(phql, " GROUP BY ", group); } else { if (phalcon_memnstr_str(group, SL("."))) { PHALCON_SCONCAT_SV(phql, " GROUP BY ", group); } else { PHALCON_SCONCAT_SVS(phql, " GROUP BY [", group, "]"); } } } PHALCON_OBS_VAR(having); phalcon_read_property_this(&having, this_ptr, SL("_having"), PH_NOISY_CC); if (Z_TYPE_P(having) != IS_NULL) { if (PHALCON_IS_NOT_EMPTY(having)) { PHALCON_SCONCAT_SV(phql, " HAVING ", having); } } } /** * Process order clause */ PHALCON_OBS_VAR(order); phalcon_read_property_this(&order, this_ptr, SL("_order"), PH_NOISY_CC); if (Z_TYPE_P(order) != IS_NULL) { if (Z_TYPE_P(order) == IS_ARRAY) { PHALCON_INIT_VAR(order_items); array_init(order_items); phalcon_is_iterable(order, &ah5, &hp5, 0, 0); while (zend_hash_get_current_data_ex(ah5, (void**) &hd, &hp5) == SUCCESS) { PHALCON_GET_HVALUE(order_item); if (phalcon_is_numeric(order_item)) { phalcon_array_append(&order_items, order_item, PH_SEPARATE); } else { if (phalcon_memnstr_str(order_item, SL("."))) { phalcon_array_append(&order_items, order_item, PH_SEPARATE); } else { PHALCON_INIT_NVAR(escaped_item); PHALCON_CONCAT_SVS(escaped_item, "[", order_item, "]"); phalcon_array_append(&order_items, escaped_item, PH_SEPARATE); } } zend_hash_move_forward_ex(ah5, &hp5); } PHALCON_INIT_NVAR(joined_items); phalcon_fast_join_str(joined_items, SL(", "), order_items TSRMLS_CC); PHALCON_SCONCAT_SV(phql, " ORDER BY ", joined_items); } else { PHALCON_SCONCAT_SV(phql, " ORDER BY ", order); } } /** * Process limit parameters */ PHALCON_OBS_VAR(limit); phalcon_read_property_this(&limit, this_ptr, SL("_limit"), PH_NOISY_CC); if (Z_TYPE_P(limit) != IS_NULL) { if (Z_TYPE_P(limit) == IS_ARRAY) { PHALCON_OBS_VAR(number); phalcon_array_fetch_string(&number, limit, SL("number"), PH_NOISY); if (phalcon_array_isset_string(limit, SS("offset"))) { PHALCON_OBS_VAR(offset); phalcon_array_fetch_string(&offset, limit, SL("offset"), PH_NOISY); if (phalcon_is_numeric(offset)) { PHALCON_SCONCAT_SVSV(phql, " LIMIT ", number, " OFFSET ", offset); } else { PHALCON_SCONCAT_SVS(phql, " LIMIT ", number, " OFFSET 0"); } } else { PHALCON_SCONCAT_SV(phql, " LIMIT ", number); } } else { if (phalcon_is_numeric(limit)) { PHALCON_SCONCAT_SV(phql, " LIMIT ", limit); PHALCON_OBS_NVAR(offset); phalcon_read_property_this(&offset, this_ptr, SL("_offset"), PH_NOISY_CC); if (Z_TYPE_P(offset) != IS_NULL) { if (phalcon_is_numeric(offset)) { PHALCON_SCONCAT_SV(phql, " OFFSET ", offset); } else { phalcon_concat_self_str(&phql, SL(" OFFSET 0") TSRMLS_CC); } } } } } RETURN_CTOR(phql); }
/** * Generates a URL * *<code> * * //Generate a URL appending the URI to the base URI * echo $url->get('products/edit/1'); * * //Generate a URL for a predefined route * echo $url->get(array('for' => 'blog-post', 'title' => 'some-cool-stuff', 'year' => '2012')); * echo $url->get(array('for' => 'blog-post', 'hostname' => true, 'title' => 'some-cool-stuff', 'year' => '2012')); * *</code> * * @param string|array $uri * @param array|object args Optional arguments to be appended to the query string * @param bool|null $local * @return string */ PHP_METHOD(Phalcon_Mvc_Url, get){ zval *uri = NULL, *args = NULL, *local = NULL, *base_uri = NULL, *router = NULL, *dependency_injector; zval *service, *route_name, *hostname, *route = NULL, *exception_message; zval *pattern = NULL, *paths = NULL, *processed_uri = NULL, *query_string; zval *matched, *regexp; zval *generator = NULL, *arguments; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 3, &uri, &args, &local); if (!uri) { uri = &PHALCON_GLOBAL(z_null); } if (!args) { args = &PHALCON_GLOBAL(z_null); } if (!local) { local = &PHALCON_GLOBAL(z_null); } else { PHALCON_SEPARATE_PARAM(local); } PHALCON_CALL_METHOD(&base_uri, getThis(), "getbaseuri"); if (Z_TYPE_P(uri) == IS_STRING) { if (strstr(Z_STRVAL_P(uri), ":")) { PHALCON_INIT_VAR(matched); PHALCON_INIT_VAR(regexp); ZVAL_STRING(regexp, "/^[^:\\/?#]++:/"); RETURN_MM_ON_FAILURE(phalcon_preg_match(matched, regexp, uri, NULL)); if (zend_is_true(matched)) { PHALCON_INIT_NVAR(local); ZVAL_FALSE(local); } } if (Z_TYPE_P(local) == IS_NULL || zend_is_true(local)) { PHALCON_CONCAT_VV(return_value, base_uri, uri); } else { ZVAL_ZVAL(return_value, uri, 1, 0); } } else if (Z_TYPE_P(uri) == IS_ARRAY) { if (!phalcon_array_isset_str_fetch(&route_name, uri, SL("for"))) { PHALCON_THROW_EXCEPTION_STR(phalcon_mvc_url_exception_ce, "It's necessary to define the route name with the parameter \"for\""); return; } router = phalcon_read_property(getThis(), SL("_router"), PH_NOISY); /** * Check if the router has not previously set */ if (Z_TYPE_P(router) != IS_OBJECT) { dependency_injector = phalcon_read_property(getThis(), SL("_dependencyInjector"), PH_NOISY); 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_STR(service, IS(router)); router = NULL; PHALCON_CALL_METHOD(&router, dependency_injector, "getshared", service); PHALCON_VERIFY_INTERFACE(router, phalcon_mvc_routerinterface_ce); phalcon_update_property_this(getThis(), SL("_router"), router); } /** * Every route is uniquely identified by a name */ PHALCON_CALL_METHOD(&route, router, "getroutebyname", route_name); 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_THROW_EXCEPTION_ZVAL(phalcon_mvc_url_exception_ce, exception_message); return; } PHALCON_CALL_METHOD(&pattern, route, "getpattern"); /** * Return the reversed paths */ PHALCON_CALL_METHOD(&paths, route, "getreversedpaths"); /** * Return the Url Generator */ PHALCON_CALL_METHOD(&generator, route, "geturlgenerator"); if (phalcon_is_callable(generator) || (Z_TYPE_P(generator) == IS_OBJECT && instanceof_function(Z_OBJCE_P(generator), zend_ce_closure))) { PHALCON_INIT_VAR(arguments); array_init_size(arguments, 3); phalcon_array_append(arguments, base_uri, PH_COPY); phalcon_array_append(arguments, paths, PH_COPY); phalcon_array_append(arguments, uri, PH_COPY); PHALCON_CALL_USER_FUNC_ARRAY(&return_value, generator, arguments); } else { /** * Replace the patterns by its variables */ PHALCON_INIT_NVAR(processed_uri); phalcon_replace_paths(processed_uri, pattern, paths, uri); PHALCON_CONCAT_VV(return_value, base_uri, processed_uri); if (phalcon_array_isset_str_fetch(&hostname, uri, SL("hostname"))) { if (zend_is_true(hostname)) { PHALCON_CALL_METHOD(&hostname, route, "gethostname"); PHALCON_INIT_NVAR(processed_uri); PHALCON_CONCAT_VV(processed_uri, hostname, return_value); ZVAL_ZVAL(return_value, processed_uri, 1, 0); } } } } if (zend_is_true(args)) { PHALCON_INIT_VAR(query_string); phalcon_http_build_query(query_string, args, "&"); if (Z_TYPE_P(query_string) == IS_STRING && Z_STRLEN_P(query_string)) { if (phalcon_memnstr_str(return_value, "?", 1)) { PHALCON_SCONCAT_SV(return_value, "&", query_string); } else { PHALCON_SCONCAT_SV(return_value, "?", query_string); } } } RETURN_MM(); }