summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ms_cancel.c1
-rw-r--r--src/core/ms_del.c32
-rw-r--r--src/core/os_akill.c12
-rw-r--r--src/core/os_session.c8
-rw-r--r--src/core/os_sgline.c11
-rw-r--r--src/core/os_sqline.c11
-rw-r--r--src/core/os_szline.c11
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> &params)
{
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);