Hallo Allerseits,
meine Tests haben folgendes ergeben:
- 1. Die Extensions werden in der Reihenfolge ihrer Registrierung abgearbeitet
2. duch den 4. Parameter bei der Registrierung kann die Reihenfolge beeinflusst werden
3. die Extensions beeinflussen sich gegenseitig
Folgendes Testszenario:
1.) hier werden zwei EPs registriert
Code: Alles auswählen
function deleteUser($id)
{
$delete = TRUE;
$delete = rex_register_extension_point("COM_AUTH_USER_DELETE", $delete, array('id'=>$id));
if(!$delete) { return FALSE; }
$id = (int) $id;
$gu = rex_sql::factory();
$gu->setQuery('delete from rex_com_user where id='.$id);
rex_register_extension_point("COM_AUTH_USER_DELETED", "", array('id'=>$id));
return TRUE;
}
2.) hier wird die 1. Extension registriert
Code: Alles auswählen
rex_register_extension('COM_AUTH_USER_DELETE','first_un_register_request');
rex_register_extension('COM_AUTH_USER_DELETED','first_un_register');
2.) hier wird die 2. Extension registriert
Code: Alles auswählen
rex_register_extension('COM_AUTH_USER_DELETE','second_un_register_request');
rex_register_extension('COM_AUTH_USER_DELETED','second_un_register');
hier die registrierten functionen:
Code: Alles auswählen
function first_un_register_request($params) {
// EP: "COM_AUTH_USER_DELETE" aus der Klasse "rex_com_auth" ausgelöst durch die Klasse "rex_xform_action_com_member_db"
log_msg("EP:".$params['extension_point']." via ".__FUNCTION__.": Delete Attempt rejected");
return FALSE;
}
Code: Alles auswählen
function first_un_register($params) {
// EP: "COM_AUTH_USER_DELETED" aus der Klasse "rex_com_auth"
log_msg("EP:".$params['extension_point']." via ".__FUNCTION__.": Deletion of Member ".$params['id']);
}
Code: Alles auswählen
function second_un_register_request($params) {
// EP: "COM_AUTH_USER_DELETE" aus der Klasse "rex_com_auth" ausgelöst durch die Klasse "rex_xform_action_com_member_db"
log_msg("EP:".$params['extension_point']." via ".__FUNCTION__.": Delete Attempt accepted");
return TRUE;
}
Code: Alles auswählen
function second_un_register($params) {
// EP: "COM_AUTH_USER_DELETED" aus der Klasse "rex_com_auth"
log_msg("EP:".$params['extension_point']." via ".__FUNCTION__.": Deletion of Member ".$params['id']);
}
Die Funktion log_msg(…) trägt die Messages in eine Log-Datei ein und die sieht jetzt so aus:
Code: Alles auswählen
EP:COM_AUTH_USER_DELETE via first_un_register_request: Delete Attempt rejected
EP:COM_AUTH_USER_DELETE via second_un_register_request: Delete Attempt accepted
EP:COM_AUTH_USER_DELETED via first_un_register: Deletion of Member 6
EP:COM_AUTH_USER_DELETED via second_un_register: Deletion of Member 6
Dies zeigt, dass sich die 2. Extension eine Negativ-Entscheidung der 1. Extension aufheben kann.
Tausche ich nun die Reihenfolge der Extensions sieht das Ganze (Log-File Einträge) anders aus:
Code: Alles auswählen
EP:COM_AUTH_USER_DELETE via second_un_register_request: Delete Attempt accepted
EP:COM_AUTH_USER_DELETE via first_un_register_request: Delete Attempt rejected
Das Löschen des Users unterbleibt!
Wie ich damit umgehen werde/muss weiß ich noch nicht.
LG
Gunter