/** * Removes an access from a resource * * @param string $resourceName * @param mixed $accessList */ PHP_METHOD(Phalcon_Acl_Adapter_Memory, dropResourceAccess){ zval *resource_name, *access_list, *access_name = NULL; zval *t0 = NULL, *t1 = NULL; zval *r0 = NULL, *r1 = NULL; HashTable *ah0; HashPosition hp0; zval **hd; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &resource_name, &access_list) == FAILURE) { RETURN_MM_NULL(); } if (Z_TYPE_P(access_list) == IS_ARRAY) { if (!phalcon_is_iterable(access_list, &ah0, &hp0, 0, 0 TSRMLS_CC)) { return; } while (zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) == SUCCESS) { PHALCON_GET_FOREACH_VALUE(access_name); PHALCON_OBS_NVAR(t0); phalcon_read_property(&t0, this_ptr, SL("_accessList"), PH_NOISY_CC); PHALCON_OBS_NVAR(r0); phalcon_array_fetch(&r0, t0, resource_name, PH_NOISY_CC); phalcon_array_unset(&r0, access_name, PH_SEPARATE); zend_hash_move_forward_ex(ah0, &hp0); } } else { if (zend_is_true(access_list)) { PHALCON_OBS_VAR(t1); phalcon_read_property(&t1, this_ptr, SL("_accessList"), PH_NOISY_CC); PHALCON_OBS_VAR(r1); phalcon_array_fetch(&r1, t1, resource_name, PH_NOISY_CC); phalcon_array_unset(&r1, access_list, PH_SEPARATE); } } PHALCON_CALL_METHOD_NORETURN(this_ptr, "_rebuildaccesslist"); PHALCON_MM_RESTORE(); }
PHP_METHOD(Phalcon_Mvc_Model_MetaData_Session, reset) { zval prefix_key, *_SESSION; zval *prefix = phalcon_read_property(getThis(), SL("_prefix"), PH_NOISY); phalcon_concat_sv(&prefix_key, SL("$PMM$"), prefix, 0); _SESSION = phalcon_get_global(SL("_SESSION")); phalcon_array_unset(_SESSION, &prefix_key, 0); zval_dtor(&prefix_key); PHALCON_CALL_PARENTW(NULL, phalcon_mvc_model_metadata_session_ce, getThis(), "reset"); }
PHP_METHOD(Phalcon_Mvc_Model_MetaData_Session, reset) { zval prefix_key = zval_used_for_init, *pprefix = &prefix_key, *_SESSION; zval *prefix = phalcon_fetch_nproperty_this(this_ptr, SL("_prefix"), PH_NOISY TSRMLS_CC); phalcon_concat_sv(&pprefix, SL("$PMM$"), prefix, 0 TSRMLS_CC); _SESSION = phalcon_get_global(SS("_SESSION") TSRMLS_CC); phalcon_array_unset(&_SESSION, &prefix_key, 0); zval_dtor(&prefix_key); PHALCON_CALL_PARENTW(NULL, phalcon_mvc_model_metadata_session_ce, getThis(), "reset"); }
/** * Returns the messages in the session flasher * * @param string $type * @param boolean $remove * @return array */ PHP_METHOD(Phalcon_Flash_Session, getMessages){ zval *type = NULL, *remove = NULL, *messages, *return_messages; zval *do_remove; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 2, &type, &remove); if (!type) { PHALCON_INIT_VAR(type); } if (!remove) { PHALCON_INIT_VAR(remove); ZVAL_BOOL(remove, 1); } if (Z_TYPE_P(type) != IS_NULL) { PHALCON_INIT_VAR(do_remove); ZVAL_FALSE(do_remove); } else { do_remove = remove; } PHALCON_INIT_VAR(messages); phalcon_call_method_p1(messages, this_ptr, "_getsessionmessages", do_remove); if (Z_TYPE_P(messages) == IS_ARRAY) { if (likely(Z_TYPE_P(type) != IS_NULL)) { if (phalcon_array_isset(messages, type)) { PHALCON_OBS_VAR(return_messages); phalcon_array_fetch(&return_messages, messages, type, PH_NOISY); RETVAL_ZVAL(return_messages, 1, 0); if (zend_is_true(remove)) { phalcon_array_unset(&messages, type, 0); phalcon_call_method_p1_noret(this_ptr, "_setsessionmessages", messages); } PHALCON_MM_RESTORE(); return; } RETURN_MM_EMPTY_ARRAY(); } RETURN_CCTOR(messages); } RETURN_MM_EMPTY_ARRAY(); }
PHP_METHOD(Phalcon_Http_Client_Header, remove){ zval *name, *fields; PHALCON_MM_GROW(); phalcon_fetch_params(1, 1, 0, &name); fields = phalcon_fetch_nproperty_this(this_ptr, SL("_fields"), PH_NOISY TSRMLS_CC); phalcon_array_unset(&fields, name, 0); phalcon_update_property_this(this_ptr, SL("_fields"), fields TSRMLS_CC); PHALCON_MM_RESTORE(); }
/** * Returns the messages in the session flasher * * @param string $type * @param boolean $remove * @return array */ PHP_METHOD(Phalcon_Flash_Session, getMessages){ zval *type = NULL, *remove = NULL, *messages = NULL, *return_messages; zval *do_remove; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 2, &type, &remove); if (!type) { type = PHALCON_GLOBAL(z_null); } if (!remove) { remove = PHALCON_GLOBAL(z_true); } if (Z_TYPE_P(type) != IS_NULL) { do_remove = PHALCON_GLOBAL(z_false); } else { do_remove = remove; } PHALCON_CALL_METHOD(&messages, this_ptr, "_getsessionmessages", do_remove); if (Z_TYPE_P(messages) == IS_ARRAY) { if (likely(Z_TYPE_P(type) != IS_NULL)) { if (phalcon_array_isset_fetch(&return_messages, messages, type)) { RETVAL_ZVAL(return_messages, 1, 0); if (zend_is_true(remove)) { phalcon_array_unset(&messages, type, 0); PHALCON_CALL_METHOD(NULL, this_ptr, "_setsessionmessages", messages); } PHALCON_MM_RESTORE(); return; } RETURN_MM_EMPTY_ARRAY(); } RETURN_CCTOR(messages); } RETURN_MM_EMPTY_ARRAY(); }
/** * Resets the request and internal values to avoid those fields will have any default value */ PHP_METHOD(Phalcon_Tag, resetInput){ zval *value = NULL, *key = NULL; zval *a0 = NULL; zval *g0 = NULL; HashTable *ah0; HashPosition hp0; zval **hd; char *hash_index; uint hash_index_len; ulong hash_num; int hash_type; PHALCON_MM_GROW(); PHALCON_ALLOC_ZVAL_MM(a0); array_init(a0); phalcon_update_static_property(SL("phalcon\\tag"), SL("_displayValues"), a0 TSRMLS_CC); phalcon_get_global(&g0, SL("_POST")+1 TSRMLS_CC); if (!phalcon_valid_foreach(g0 TSRMLS_CC)) { return; } ALLOC_HASHTABLE(ah0); zend_hash_init(ah0, 0, NULL, NULL, 0); zend_hash_copy(ah0, Z_ARRVAL_P(g0), NULL, NULL, sizeof(zval*)); zend_hash_internal_pointer_reset_ex(ah0, &hp0); fes_9b93_0: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto fee_9b93_0; } PHALCON_INIT_VAR(key); PHALCON_GET_FOREACH_KEY(key, ah0, hp0); PHALCON_INIT_VAR(value); ZVAL_ZVAL(value, *hd, 1, 0); phalcon_array_unset(g0, key); zend_hash_move_forward_ex(ah0, &hp0); goto fes_9b93_0; fee_9b93_0: zend_hash_destroy(ah0); efree(ah0); PHALCON_MM_RESTORE(); }
/** * Removes a session variable from an application context * *<code> * $session->remove('auth'); *</code> * * @param string $index */ PHP_METHOD(Phalcon_Session_Adapter, remove){ zval *index, *unique_id, *key, *_SESSION; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &index) == FAILURE) { RETURN_MM_NULL(); } PHALCON_OBS_VAR(unique_id); phalcon_read_property(&unique_id, this_ptr, SL("_uniqueId"), PH_NOISY_CC); PHALCON_INIT_VAR(key); PHALCON_CONCAT_VV(key, unique_id, index); phalcon_get_global(&_SESSION, SS("_SESSION") TSRMLS_CC); phalcon_array_unset(&_SESSION, key, 0); PHALCON_MM_RESTORE(); }
/** * Removes a session variable from an application context * * @param string $index */ PHP_METHOD(Phalcon_Session, remove){ zval *index = NULL, *unique_id = NULL, *key = NULL; zval *g0 = NULL; PHALCON_MM_GROW(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &index) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_INIT_VAR(unique_id); phalcon_read_property(&unique_id, this_ptr, SL("_uniqueId"), PH_NOISY_CC); PHALCON_INIT_VAR(key); PHALCON_CONCAT_VV(key, unique_id, index); phalcon_get_global(&g0, SL("_SESSION")+1 TSRMLS_CC); phalcon_array_unset(g0, key); PHALCON_MM_RESTORE(); }
/** * Removes all events from the EventsManager * * @param string $type */ PHP_METHOD(Phalcon_Events_Manager, detachAll){ zval *type = NULL, *events = NULL; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 1, &type); if (!type) { PHALCON_INIT_VAR(type); } PHALCON_OBS_VAR(events); phalcon_read_property_this(&events, this_ptr, SL("_events"), PH_NOISY_CC); if (Z_TYPE_P(type) == IS_NULL) { PHALCON_INIT_NVAR(events); } else { phalcon_array_unset(&events, type, PH_SEPARATE); } phalcon_update_property_this(this_ptr, SL("_events"), events TSRMLS_CC); PHALCON_MM_RESTORE(); }
/** * Updates data on a table using custom RBDM SQL syntax * * @param string $table * @param array $fields * @param array $values * @param string $whereCondition * @return boolean */ PHP_METHOD(Phalcon_Db, update){ zval *table = NULL, *fields = NULL, *values = NULL, *where_condition = NULL; zval *placeholders = NULL, *value = NULL, *position = NULL, *field = NULL, *set_clause_part = NULL; zval *comma = NULL, *set_clause = NULL, *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|z", &table, &fields, &values, &where_condition) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_SEPARATE_PARAM(values); if (!where_condition) { PHALCON_ALLOC_ZVAL_MM(where_condition); ZVAL_NULL(where_condition); } PHALCON_INIT_VAR(placeholders); array_init(placeholders); if (!phalcon_valid_foreach(values TSRMLS_CC)) { return; } ALLOC_HASHTABLE(ah0); zend_hash_init(ah0, 0, NULL, NULL, 0); zend_hash_copy(ah0, Z_ARRVAL_P(values), NULL, NULL, sizeof(zval*)); 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); PHALCON_SEPARATE_PARAM(values); phalcon_array_unset(values, position); } else { if (Z_TYPE_P(value) == IS_NULL) { PHALCON_INIT_VAR(set_clause_part); PHALCON_CONCAT_VS(set_clause_part, field, " = null"); PHALCON_SEPARATE_PARAM(values); phalcon_array_unset(values, position); } else { PHALCON_INIT_VAR(set_clause_part); PHALCON_CONCAT_VS(set_clause_part, field, " = ?"); } 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: zend_hash_destroy(ah0); efree(ah0); 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_2(success, this_ptr, "execute", update_sql, values, PH_NO_CHECK); RETURN_CCTOR(success); }
/** * Inserts data into a table using custom RBDM SQL syntax * * @param string $table * @param array $values * @param array $fields * @return boolean */ PHP_METHOD(Phalcon_Db, insert){ zval *table = NULL, *values = NULL, *fields = NULL, *number_values = NULL, *exception_message = NULL; zval *exception = NULL, *placeholders = NULL, *value = NULL, *position = NULL; zval *str_value = NULL, *comma = NULL, *joined_values = NULL, *joined_fields = NULL; zval *insert_sql = NULL, *success = NULL; HashTable *ah0; HashPosition hp0; 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, "zz|z", &table, &values, &fields) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_SEPARATE_PARAM(values); if (!fields) { PHALCON_ALLOC_ZVAL_MM(fields); ZVAL_NULL(fields); } if (Z_TYPE_P(values) == IS_ARRAY) { 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); if (!phalcon_valid_foreach(values TSRMLS_CC)) { return; } ALLOC_HASHTABLE(ah0); zend_hash_init(ah0, 0, NULL, NULL, 0); zend_hash_copy(ah0, Z_ARRVAL_P(values), NULL, NULL, sizeof(zval*)); 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); PHALCON_SEPARATE_PARAM(values); phalcon_array_unset(values, position); } else { if (Z_TYPE_P(value) == IS_NULL) { phalcon_array_append_string(&placeholders, SL("null"), PH_SEPARATE TSRMLS_CC); PHALCON_SEPARATE_PARAM(values); phalcon_array_unset(values, position); } else { phalcon_array_append_string(&placeholders, SL("?"), PH_SEPARATE TSRMLS_CC); } } zend_hash_move_forward_ex(ah0, &hp0); goto ph_cycle_start_0; ph_cycle_end_0: zend_hash_destroy(ah0); efree(ah0); 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_2(success, this_ptr, "execute", insert_sql, values, PH_NO_CHECK); RETURN_CCTOR(success); } PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "The second parameter for insert isn't an Array"); return; }
/** * Inserts data into a table using custom RBDM SQL syntax * * @param string $table * @param array $values * @param array $fields * @return boolean */ PHP_METHOD(Phalcon_Db, insert){ zval *table = NULL, *values = NULL, *fields = NULL, *placeholders = NULL, *value = NULL; zval *n = NULL, *comma = NULL, *joined_values = NULL, *insert_sql = NULL; zval *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *r4 = NULL; zval *i0 = NULL; HashTable *ah0; HashPosition hp0; 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, "zz|z", &table, &values, &fields) == FAILURE) { PHALCON_MM_RESTORE(); RETURN_NULL(); } PHALCON_SEPARATE_PARAM(values); if (!fields) { PHALCON_ALLOC_ZVAL_MM(fields); ZVAL_NULL(fields); } if (Z_TYPE_P(values) == IS_ARRAY) { PHALCON_ALLOC_ZVAL_MM(r0); phalcon_fast_count(r0, values TSRMLS_CC); if (!zend_is_true(r0)) { PHALCON_ALLOC_ZVAL_MM(i0); object_init_ex(i0, phalcon_db_exception_ce); PHALCON_ALLOC_ZVAL_MM(r1); PHALCON_CONCAT_SVS(r1, "Unable to insert into ", table, " without data"); PHALCON_CALL_METHOD_PARAMS_1_NORETURN(i0, "__construct", r1, PH_CHECK); phalcon_throw_exception(i0 TSRMLS_CC); return; } PHALCON_INIT_VAR(placeholders); array_init(placeholders); if (!phalcon_valid_foreach(values TSRMLS_CC)) { return; } ALLOC_HASHTABLE(ah0); zend_hash_init(ah0, 0, NULL, NULL, 0); zend_hash_copy(ah0, Z_ARRVAL_P(values), NULL, NULL, sizeof(zval*)); zend_hash_internal_pointer_reset_ex(ah0, &hp0); fes_e7f0_1: if(zend_hash_get_current_data_ex(ah0, (void**) &hd, &hp0) != SUCCESS){ goto fee_e7f0_1; } PHALCON_INIT_VAR(n); PHALCON_GET_FOREACH_KEY(n, ah0, hp0); PHALCON_INIT_VAR(value); ZVAL_ZVAL(value, *hd, 1, 0); if (Z_TYPE_P(value) == IS_OBJECT) { PHALCON_INIT_VAR(r2); PHALCON_CALL_FUNC_PARAMS_1(r2, "strval", value); phalcon_array_append(&placeholders, r2, PH_SEPARATE TSRMLS_CC); PHALCON_SEPARATE_PARAM(values); phalcon_array_unset(values, n); } else { phalcon_array_append_string(&placeholders, SL("?"), PH_SEPARATE TSRMLS_CC); } zend_hash_move_forward_ex(ah0, &hp0); goto fes_e7f0_1; fee_e7f0_1: zend_hash_destroy(ah0); efree(ah0); 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_ALLOC_ZVAL_MM(r3); phalcon_fast_join(r3, comma, fields TSRMLS_CC); PHALCON_INIT_VAR(insert_sql); PHALCON_CONCAT_SVSVSVS(insert_sql, "INSERT INTO ", table, " (", r3, ") VALUES (", joined_values, ")"); } else { PHALCON_INIT_VAR(insert_sql); PHALCON_CONCAT_SVSVS(insert_sql, "INSERT INTO ", table, " VALUES (", joined_values, ")"); } PHALCON_ALLOC_ZVAL_MM(r4); PHALCON_CALL_METHOD_PARAMS_2(r4, this_ptr, "execute", insert_sql, values, PH_NO_CHECK); RETURN_CTOR(r4); } PHALCON_THROW_EXCEPTION_STR(phalcon_db_exception_ce, "The second parameter for insert isn't an Array"); return; }
/** * Detach a listener from the events manager * * @param object|callable $handler */ PHP_METHOD(Phalcon_Events_Manager, detach){ zval *type, *handler, events = {}, queue = {}, priority_queue = {}, *listener; zend_string *str_key; ulong idx; phalcon_fetch_params(0, 2, 0, &type, &handler); if (Z_TYPE_P(handler) != IS_OBJECT && !phalcon_is_callable(handler)) { PHALCON_THROW_EXCEPTION_STRW(phalcon_events_exception_ce, "Event handler must be an object or callable"); return; } phalcon_return_property(&events, getThis(), SL("_events")); if (Z_TYPE(events) != IS_ARRAY) { RETURN_FALSE; } if (!phalcon_array_isset_fetch(&queue, &events, type)) { RETURN_FALSE; } if (Z_TYPE(queue) == IS_OBJECT) { object_init_ex(&priority_queue, spl_ce_SplPriorityQueue); if (phalcon_has_constructor(&priority_queue)) { PHALCON_CALL_METHODW(NULL, &priority_queue, "__construct"); } PHALCON_CALL_METHODW(NULL, &queue, "top"); while (1) { zval r0 = {}, listener0 = {}, handler_embeded = {}, priority = {}; PHALCON_CALL_METHODW(&r0, &queue, "valid"); if (!zend_is_true(&r0)) { break; } PHALCON_CALL_METHODW(&listener0, &queue, "current"); PHALCON_CALL_METHODW(&handler_embeded, &listener0, "getlistener"); if (!phalcon_is_equal(&handler_embeded, handler)) { PHALCON_CALL_METHODW(&priority, &listener0, "getpriority"); PHALCON_CALL_METHODW(NULL, &priority_queue, "insert", &listener0, &priority); } PHALCON_CALL_METHODW(NULL, &queue, "next"); } } else { PHALCON_CPY_WRT_CTOR(&priority_queue, &queue); ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL(queue), idx, str_key, listener) { zval key = {}, handler_embeded = {}; if (str_key) { ZVAL_STR(&key, str_key); } else { ZVAL_LONG(&key, idx); } PHALCON_CALL_METHODW(&handler_embeded, listener, "getlistener"); if (phalcon_is_equal_object(&handler_embeded, handler)) { phalcon_array_unset(&priority_queue, &key, PH_COPY); } } ZEND_HASH_FOREACH_END(); }