diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/ms_cancel.c | 1 | ||||
| -rw-r--r-- | src/core/ms_del.c | 32 | ||||
| -rw-r--r-- | src/core/os_akill.c | 12 | ||||
| -rw-r--r-- | src/core/os_session.c | 8 | ||||
| -rw-r--r-- | src/core/os_sgline.c | 11 | ||||
| -rw-r--r-- | src/core/os_sqline.c | 11 | ||||
| -rw-r--r-- | src/core/os_szline.c | 11 |
7 files changed, 76 insertions, 10 deletions
diff --git a/src/core/ms_cancel.c b/src/core/ms_cancel.c index 2a2f67b4d..0c5458647 100644 --- a/src/core/ms_cancel.c +++ b/src/core/ms_cancel.c @@ -48,6 +48,7 @@ class CommandMSCancel : public Command { if ((mi->memos[i]->HasFlag(MF_UNREAD)) && !stricmp(mi->memos[i]->sender.c_str(), u->Account()->display) && !mi->memos[i]->HasFlag(MF_NOTIFYS)) { + FOREACH_MOD(I_OnMemoDel, OnMemoDel(findnick(name)->nc, mi, mi->memos[i]->number)) delmemo(mi, mi->memos[i]->number); notice_lang(Config.s_MemoServ, u, MEMO_CANCELLED, name); return MOD_CONT; diff --git a/src/core/ms_del.c b/src/core/ms_del.c index e13732f88..9b48ae856 100644 --- a/src/core/ms_del.c +++ b/src/core/ms_del.c @@ -27,9 +27,10 @@ class CommandMSDel : public Command CommandReturn Execute(User *u, const std::vector<ci::string> ¶ms) { MemoInfo *mi; - ChannelInfo *ci; + ChannelInfo *ci = NULL; ci::string numstr = params.size() ? params[0] : "", chan; - int last, last0, i; + int last, last0; + unsigned i; char buf[BUFSIZE], *end; int delcount, count, left; @@ -77,7 +78,7 @@ class CommandMSDel : public Command last0 = -1; /* Beginning of range of last memos deleted */ end = buf; left = sizeof(buf); - delcount = process_numlist(numstr.c_str(), &count, del_memo_callback, u, mi, &last, &last0, &end, &left); + delcount = process_numlist(numstr.c_str(), &count, del_memo_callback, u, mi, &last, &last0, &end, &left, ci); if (last != -1) { /* Some memos got deleted; tell them which ones. */ @@ -107,11 +108,27 @@ class CommandMSDel : public Command /* Delete last memo. */ for (i = 0; i < mi->memos.size(); ++i) last = mi->memos[i]->number; + if (ci) + { + FOREACH_MOD(I_OnMemoDel, OnMemoDel(ci, mi, last)); + } + else + { + FOREACH_MOD(I_OnMemoDel, OnMemoDel(u->Account(), mi, last)) + } delmemo(mi, last); notice_lang(Config.s_MemoServ, u, MEMO_DELETED_ONE, last); } else { + if (ci) + { + FOREACH_MOD(I_OnMemoDel, OnMemoDel(ci, mi, 0)); + } + else + { + FOREACH_MOD(I_OnMemoDel, OnMemoDel(u->Account(), mi, 0)); + } /* Delete all memos. */ for (i = 0; i < mi->memos.size(); ++i) { @@ -176,7 +193,16 @@ int del_memo_callback(User *u, int num, va_list args) int *last0 = va_arg(args, int *); char **end = va_arg(args, char **); int *left = va_arg(args, int *); + ChannelInfo *ci = va_arg(args, ChannelInfo *); + if (ci) + { + FOREACH_MOD(I_OnMemoDel, OnMemoDel(ci, mi, num)); + } + else + { + FOREACH_MOD(I_OnMemoDel, OnMemoDel(u->Account(), mi, num)); + } if (delmemo(mi, num)) { if (num != (*last) + 1) diff --git a/src/core/os_akill.c b/src/core/os_akill.c index a045e2bae..5b987b7c3 100644 --- a/src/core/os_akill.c +++ b/src/core/os_akill.c @@ -20,6 +20,13 @@ int akill_list_callback(SList *slist, int number, void *item, va_list args); int akill_view(int number, Akill *ak, User *u, int *sent_header); int akill_list(int number, Akill *ak, User *u, int *sent_header); +static int akill_del_callback(SList *slist, void *item, va_list args) +{ + User *u = va_arg(args, User *); + FOREACH_MOD(I_OnDelAkill, OnDelAkill(u, static_cast<Akill *>(item))); + return 1; +} + class CommandOSAKill : public Command { private: @@ -159,7 +166,7 @@ class CommandOSAKill : public Command if (isdigit(*mask) && strspn(mask, "1234567890,-") == strlen(mask)) { /* Deleting a range */ - res = slist_delete_range(&akills, mask, NULL); + res = slist_delete_range(&akills, mask, akill_del_callback, u); if (!res) { notice_lang(Config.s_OperServ, u, OPER_AKILL_NO_MATCH); @@ -178,6 +185,8 @@ class CommandOSAKill : public Command return MOD_CONT; } + FOREACH_MOD(I_OnDelAkill, OnDelAkill(u, static_cast<Akill *>(akills.list[res]))); + slist_delete(&akills, res); notice_lang(Config.s_OperServ, u, OPER_AKILL_DELETED, mask); } @@ -276,6 +285,7 @@ class CommandOSAKill : public Command CommandReturn DoClear(User *u) { + FOREACH_MOD(I_OnDelAkill, OnDelAkill(u, NULL)); slist_clear(&akills, 1); notice_lang(Config.s_OperServ, u, OPER_AKILL_CLEAR); diff --git a/src/core/os_session.c b/src/core/os_session.c index 98087aaad..5df784dd7 100644 --- a/src/core/os_session.c +++ b/src/core/os_session.c @@ -93,10 +93,12 @@ class CommandOSSession : public Command } }; -static int exception_del(const int index) +static int exception_del(User *u, const int index) { if (index < 0 || index >= nexceptions) return 0; + + FOREACH_MOD(I_OnExceptionDel, OnExceptionDel(u, &exceptions[index])); delete [] exceptions[index].mask; delete [] exceptions[index].reason; @@ -124,7 +126,7 @@ static int exception_del_callback(User *u, int num, va_list args) break; if (i < nexceptions) - return exception_del(i); + return exception_del(u, i); else return 0; } @@ -290,7 +292,7 @@ class CommandOSException : public Command { if (!stricmp(mask, exceptions[i].mask)) { - exception_del(i); + exception_del(u, i); notice_lang(Config.s_OperServ, u, OPER_EXCEPTION_DELETED, mask); deleted = 1; break; diff --git a/src/core/os_sgline.c b/src/core/os_sgline.c index 81d228c00..39f62c16d 100644 --- a/src/core/os_sgline.c +++ b/src/core/os_sgline.c @@ -21,6 +21,13 @@ int sgline_list_callback(SList *slist, int number, void *item, va_list args); int sgline_view(int number, SXLine *sx, User *u, int *sent_header); int sgline_list(int number, SXLine *sx, User *u, int *sent_header); +static int sxline_del_callback(SList *slist, void *item, va_list args) +{ + User *u = va_arg(args, User *); + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, static_cast<SXLine *>(item), SX_SGLINE)); + return 1; +} + class CommandOSSGLine : public Command { private: @@ -164,7 +171,7 @@ class CommandOSSGLine : public Command if (isdigit(*mask) && strspn(mask, "1234567890,-") == strlen(mask)) { /* Deleting a range */ - res = slist_delete_range(&sglines, mask, NULL); + res = slist_delete_range(&sglines, mask, sxline_del_callback); if (!res) { notice_lang(Config.s_OperServ, u, OPER_SGLINE_NO_MATCH); @@ -182,6 +189,7 @@ class CommandOSSGLine : public Command return MOD_CONT; } + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, static_cast<SXLine *>(sglines.list[res]), SX_SGLINE)); slist_delete(&sglines, res); notice_lang(Config.s_OperServ, u, OPER_SGLINE_DELETED, mask); } @@ -277,6 +285,7 @@ class CommandOSSGLine : public Command CommandReturn OnClear(User *u) { + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, NULL, SX_SGLINE)); slist_clear(&sglines, 1); notice_lang(Config.s_OperServ, u, OPER_SGLINE_CLEAR); diff --git a/src/core/os_sqline.c b/src/core/os_sqline.c index 8c3beb9ba..2a1dc91f5 100644 --- a/src/core/os_sqline.c +++ b/src/core/os_sqline.c @@ -20,6 +20,13 @@ int sqline_list_callback(SList *slist, int number, void *item, va_list args); int sqline_view(int number, SXLine *sx, User *u, int *sent_header); int sqline_list(int number, SXLine *sx, User *u, int *sent_header); +static int sxline_del_callback(SList *slist, void *item, va_list args) +{ + User *u = va_arg(args, User *); + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, static_cast<SXLine *>(item), SX_SQLINE)); + return 1; +} + class CommandOSSQLine : public Command { private: @@ -150,7 +157,7 @@ class CommandOSSQLine : public Command if (isdigit(*mask) && strspn(mask, "1234567890,-") == strlen(mask)) { /* Deleting a range */ - res = slist_delete_range(&sqlines, mask, NULL); + res = slist_delete_range(&sqlines, mask, sxline_del_callback); if (!res) { notice_lang(Config.s_OperServ, u, OPER_SQLINE_NO_MATCH); @@ -168,6 +175,7 @@ class CommandOSSQLine : public Command return MOD_CONT; } + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, static_cast<SXLine *>(sglines.list[res]), SX_SQLINE)); slist_delete(&sqlines, res); notice_lang(Config.s_OperServ, u, OPER_SQLINE_DELETED, mask); } @@ -264,6 +272,7 @@ class CommandOSSQLine : public Command CommandReturn DoClear(User *u) { + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, NULL, SX_SQLINE)); slist_clear(&sqlines, 1); notice_lang(Config.s_OperServ, u, OPER_SQLINE_CLEAR); diff --git a/src/core/os_szline.c b/src/core/os_szline.c index 02b864e95..b5946150b 100644 --- a/src/core/os_szline.c +++ b/src/core/os_szline.c @@ -20,6 +20,13 @@ int szline_list_callback(SList *slist, int number, void *item, va_list args); int szline_view(int number, SXLine *sx, User *u, int *sent_header); int szline_list(int number, SXLine *sx, User *u, int *sent_header); +static int sxline_del_callback(SList *slist, void *item, va_list args) +{ + User *u = va_arg(args, User *); + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, static_cast<SXLine *>(item), SX_SZLINE)); + return 1; +} + class CommandOSSZLine : public Command { private: @@ -150,7 +157,7 @@ class CommandOSSZLine : public Command if (isdigit(*mask) && strspn(mask, "1234567890,-") == strlen(mask)) { /* Deleting a range */ - res = slist_delete_range(&szlines, mask, NULL); + res = slist_delete_range(&szlines, mask, sxline_del_callback); if (!res) { notice_lang(Config.s_OperServ, u, OPER_SZLINE_NO_MATCH); @@ -169,6 +176,7 @@ class CommandOSSZLine : public Command return MOD_CONT; } + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, static_cast<SXLine *>(sglines.list[res]), SX_SZLINE)); slist_delete(&szlines, res); notice_lang(Config.s_OperServ, u, OPER_SZLINE_DELETED, mask); } @@ -263,6 +271,7 @@ class CommandOSSZLine : public Command CommandReturn DoClear(User *u) { + FOREACH_MOD(I_OnDelSXLine, OnDelSXLine(u, NULL, SX_SZLINE)); slist_clear(&szlines, 1); notice_lang(Config.s_OperServ, u, OPER_SZLINE_CLEAR); |
