/** * Do a role inherit from another existing role * * @param string $roleName * @param string $roleToInherit */ PHP_METHOD(Phalcon_Acl_Adapter_Memory, addInherit){ zval *role_name, *role_to_inherit, *roles_names; zval *exception_message = NULL, *role_inherit_name = NULL; zval *roles_inherits, *empty_arr, *_roleInherits; PHALCON_MM_GROW(); phalcon_fetch_params(1, 2, 0, &role_name, &role_to_inherit); PHALCON_OBS_VAR(roles_names); phalcon_read_property_this(&roles_names, this_ptr, SL("_rolesNames"), PH_NOISY TSRMLS_CC); if (!phalcon_array_isset(roles_names, role_name)) { PHALCON_INIT_VAR(exception_message); PHALCON_CONCAT_SVS(exception_message, "Role '", role_name, "' does not exist in the role list"); PHALCON_THROW_EXCEPTION_ZVAL(phalcon_acl_exception_ce, exception_message); return; } if (Z_TYPE_P(role_to_inherit) == IS_OBJECT) { PHALCON_CALL_METHOD(&role_inherit_name, role_to_inherit, "getname"); } else { PHALCON_CPY_WRT(role_inherit_name, role_to_inherit); } /** * Check if the role to inherit is valid */ if (!phalcon_array_isset(roles_names, role_inherit_name)) { PHALCON_INIT_NVAR(exception_message); PHALCON_CONCAT_SVS(exception_message, "Role '", role_inherit_name, "' (to inherit) does not exist in the role list"); PHALCON_THROW_EXCEPTION_ZVAL(phalcon_acl_exception_ce, exception_message); return; } if (PHALCON_IS_EQUAL(role_inherit_name, role_name)) { RETURN_MM_FALSE; } PHALCON_OBS_VAR(roles_inherits); phalcon_read_property_this(&roles_inherits, this_ptr, SL("_roleInherits"), PH_NOISY TSRMLS_CC); if (!phalcon_array_isset(roles_inherits, role_name)) { PHALCON_INIT_VAR(empty_arr); array_init(empty_arr); phalcon_update_property_array(this_ptr, SL("_roleInherits"), role_name, empty_arr TSRMLS_CC); } PHALCON_OBS_VAR(_roleInherits); phalcon_read_property_this(&_roleInherits, this_ptr, SL("_roleInherits"), PH_NOISY TSRMLS_CC); phalcon_array_append_multi_2(&_roleInherits, role_name, role_inherit_name, 0); phalcon_update_property_this(this_ptr, SL("_roleInherits"), _roleInherits TSRMLS_CC); RETURN_MM_TRUE; }
/** * Adds a message to the session flasher * * @param string $type * @param string $message */ PHP_METHOD(Phalcon_Flash_Session, message){ zval *type, *message, *messages = NULL; PHALCON_MM_GROW(); phalcon_fetch_params(1, 2, 0, &type, &message); PHALCON_CALL_METHOD(&messages, this_ptr, "_getsessionmessages", PHALCON_GLOBAL(z_false)); if (Z_TYPE_P(messages) != IS_ARRAY) { PHALCON_INIT_NVAR(messages); array_init(messages); } phalcon_array_append_multi_2(&messages, type, message, PH_COPY); PHALCON_CALL_METHOD(NULL, this_ptr, "_setsessionmessages", messages); PHALCON_MM_RESTORE(); }