Am Samstag, 3. März 2007 07:42 schrieb Martin Preuss:
> > Nach etwas Durchgucken vom Code müsste das doch für User und Account
> > ungefähr so aussehen wie im angehängten patch. @Martin: Soll das so ins
> > SVN? Würd ich nach Rückmeldung dann machen.
>
> Ich denke, dass genuegt so nicht: Damit die Settings konsistent sind,
> muesste beim Loeschen eines Benutzers auch nachgeschaut werden, ob es
> Konten gibt, die diesem Benutzer zugeordnet sind...
Ok, danke der Rückmeldung. Hab's nochmal versucht: Das DeleteAccount müsste
wie im vorigen Vorschlag schon korrekt sein, oder? Für DeleteUser wird nun
ein Fehler zurückgegeben, sofern der noch zu einem Account gehört. Die
richtige Reihenfolge bei einem gewünschten Löschen wäre also, zuerst den
AB_Account zu löschen und dann den AB_User.
Diesmal wohl korrekt?
Gruß
Christian
Index: src/libs/aqbanking/banking.c
===================================================================
--- src/libs/aqbanking/banking.c (Revision 1188)
+++ src/libs/aqbanking/banking.c (Arbeitskopie)
@@ -1422,8 +1422,53 @@
return u;
}
+static AB_USER *checkusers_fn(AB_USER *item, void *user_data) {
+ AB_USER *u = user_data;
+ return (item == u) ? item : NULL;
+}
+static AB_ACCOUNT *checkaccounts_fn(AB_ACCOUNT *item, void *user_data) {
+ AB_USER_LIST2 *userlist = AB_Account_GetUsers(item);
+ AB_USER *u = AB_User_List2_ForEach(userlist, checkusers_fn, user_data);
+ AB_User_List2_free(userlist);
+ return u ? item : NULL;
+}
+int AB_Banking_DeleteUser(AB_BANKING *ab, AB_USER *u) {
+ int rv;
+ AB_ACCOUNT_LIST2 *acclist;
+ AB_ACCOUNT *acc_rv;
+ assert(ab);
+ assert(u);
+
+ acclist = AB_Banking_GetAccounts(ab);
+ acc_rv = AB_Account_List2_ForEach(acclist, checkaccounts_fn, u);
+ AB_Account_List2_free(acclist);
+ if (acc_rv) {
+ DBG_ERROR(AQBANKING_LOGDOMAIN, "Error on removing user: Still belongs to an account (bankcode %s, accountnumber %s). Delete the account first.",
+ AB_Account_GetBankCode(acc_rv),
+ AB_Account_GetAccountNumber(acc_rv));
+ return -1;
+ }
+
+ rv = AB_User_List_Del(u);
+ if (rv) {
+ DBG_ERROR(AQBANKING_LOGDOMAIN, "Error on removing user from list (%d)", rv);
+ return rv;
+ }
+
+ rv = AB_Provider_ExtendUser(AB_User_GetProvider(u), u,
+ AB_ProviderExtendMode_Remove);
+ if (rv) {
+ DBG_ERROR(AQBANKING_LOGDOMAIN, "Error on remove extension of user (%d)", rv);
+ return rv;
+ }
+
+ AB_User_free(u);
+ return 0;
+}
+
+
int AB_Banking_AddUser(AB_BANKING *ab, AB_USER *u) {
int rv;
@@ -1482,8 +1527,30 @@
return 0;
}
+int AB_Banking_DeleteAccount(AB_BANKING *ab, AB_ACCOUNT *a) {
+ int rv;
+ assert(ab);
+ assert(a);
+ rv = AB_Account_List_Del(a);
+ if (rv) {
+ DBG_ERROR(AQBANKING_LOGDOMAIN, "Error on removing account from list (%d)", rv);
+ return rv;
+ }
+
+ rv = AB_Provider_ExtendAccount(AB_Account_GetProvider(a), a,
+ AB_ProviderExtendMode_Remove);
+ if (rv) {
+ DBG_ERROR(AQBANKING_LOGDOMAIN, "Error on remove extension of account (%d)", rv);
+ return rv;
+ }
+
+ AB_Account_free(a);
+ return 0;
+}
+
+
GWEN_TYPE_UINT64 AB_Banking__char2uint64(const char *accountId) {
GWEN_TYPE_UINT64 res=0;
const char *s;
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Aqbanking-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/aqbanking-devel