Ticket #2011 (closed defeito: invalid)
Preferências do jabberit_messenger
Reported by: | guilherme.silva | Owned by: | rafaelraymundo |
---|---|---|---|
Priority: | normal | Milestone: | Expresso 2.2.0.1 |
Component: | ExpressoMessenger | Version: | branch 2.2 |
Severity: | média | Keywords: | |
Cc: | WorkGroup: |
Description
Ocorre um erro no Expresso quando determinado usuário tenta mudar uma preferência após ter alterado as preferências do jabberit_messenger. Tal erro está apresentado no quadro abaixo:
Database error: Invalid SQL: INSERT INTO phpgw_preferences (preference_owner,preference_app,preference_value) VALUES (777771172,'jabberit_messenger','a:1:{s:11:"preferences";s:66:"openWindowJabberit:true;openWindowJabberitPopUp:false;flagAwayIM:7";}') pgsql Error: -1 (ERRO: duplicar valor da chave viola a restrição de unicidade "phpgw_preferences_pkey")
File: /var/www/expressov2-mp/phpgwapi/inc/class.preferences.inc.php Line: 573 Function: preferences::save_repository / process_array
Session halted.
Database error: Invalid SQL: select * from phpgw_config where config_app='contactcenter' pgsql Error: -1 (ERRO: transação atual foi interrompida, comandos ignorados até o fim do bloco de transação)
File: /var/www/expressov2-mp/phpgwapi/inc/class.config.inc.php Line: 51 Function: config::read_repository / bo_ldap_manager::bo_ldap_manager / CreateObject? / require_once / include / common::phpgw_footer / common::phpgw_exit / db::halt / db::query / preferences::save_repository / process_array
Session halted.
*
Já foi aberto um bug (14/06/2011) para que o pessoal do desenvolvimento corrija tal problema. Por enquanto, estamos corrigindo esse erro adicionando à seguinte trigger ao banco de dados:
### no banco de dados do expresso executar a criação da procedure
CREATE or replace FUNCTION phpgw_preferences_proc() RETURNS trigger AS $$ declare
numero int;
BEGIN select count(*) into numero from phpgw_preferences where preference_owner = new.preference_owner and preference_app = 'jabberit_messenger' and new.preference_app = 'jabberit_messenger';
if numero >=1 then
delete from phpgw_preferences where preference_owner = new.preference_owner and preference_app ='jabberit_messenger';
end if;
return new; END; $$ LANGUAGE plpgsql;
*
Para criar tal trigger, siga os procedimentos abaixo:
#### criar a trigger
CREATE TRIGGER tg_phpgw_preferences before INSERT ON phpgw_preferences FOR EACH ROW
EXECUTE PROCEDURE phpgw_preferences_proc();
*
Em caso de qualquer problema, para desabilitá-la basta digitar o seguinte sql no pgpool ou diretamente no Postgres:
### Excluir a trigger se ocorrer qualquer problema.
DROP TRIGGER tg_phpgw_preferences on phpgw_preferences;