aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Calendar/CalendarMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Calendar/CalendarMgr.cpp')
-rw-r--r--src/server/game/Calendar/CalendarMgr.cpp81
1 files changed, 57 insertions, 24 deletions
diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp
index e49976a48a1..aac26578c3e 100644
--- a/src/server/game/Calendar/CalendarMgr.cpp
+++ b/src/server/game/Calendar/CalendarMgr.cpp
@@ -180,17 +180,44 @@ void CalendarMgr::LoadFromDB()
*/
}
-CalendarEvent* CalendarMgr::CheckPermisions(uint64 eventId, uint64 guid, uint64 inviteId, CalendarRanks minRank)
+CalendarEvent* CalendarMgr::CheckPermisions(uint64 eventId, Player* player, uint64 inviteId, CalendarRanks minRank)
{
- if (CalendarEvent* calendarEvent = GetEvent(eventId))
- if (CalendarInvite* invite = GetInvite(inviteId))
- if (calendarEvent->HasInvite(inviteId)
- && invite->GetEventId() == calendarEvent->GetEventId()
- && invite->GetInvitee() == guid
- && invite->GetRank() >= minRank)
- return calendarEvent;
+ if (!player)
+ return NULL; // CALENDAR_ERROR_INTERNAL
- return NULL;
+ CalendarEvent* calendarEvent = GetEvent(eventId);
+ if (!calendarEvent)
+ {
+ player->GetSession()->SendCalendarCommandResult(CALENDAR_ERROR_EVENT_INVALID);
+ return NULL;
+ }
+
+ CalendarInvite* invite = GetInvite(inviteId);
+ if (!invite)
+ {
+ player->GetSession()->SendCalendarCommandResult(CALENDAR_ERROR_NO_INVITE);
+ return NULL;
+ }
+
+ if (!calendarEvent->HasInvite(inviteId))
+ {
+ player->GetSession()->SendCalendarCommandResult(CALENDAR_ERROR_NOT_INVITED);
+ return NULL;
+ }
+
+ if (invite->GetEventId() != calendarEvent->GetEventId() || invite->GetInvitee() != player->GetGUID())
+ {
+ player->GetSession()->SendCalendarCommandResult(CALENDAR_ERROR_INTERNAL);
+ return NULL;
+ }
+
+ if (invite->GetRank() < minRank)
+ {
+ player->GetSession()->SendCalendarCommandResult(CALENDAR_ERROR_PERMISSIONS);
+ return NULL;
+ }
+
+ return calendarEvent;
}
void CalendarMgr::AddAction(CalendarAction const& action)
@@ -209,8 +236,7 @@ void CalendarMgr::AddAction(CalendarAction const& action)
case CALENDAR_ACTION_MODIFY_EVENT:
{
uint64 eventId = action.Event.GetEventId();
- CalendarEvent* calendarEvent = CheckPermisions(eventId, action.GetGUID(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
-
+ CalendarEvent* calendarEvent = CheckPermisions(eventId, action.GetPlayer(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
if (!calendarEvent)
return;
@@ -234,7 +260,7 @@ void CalendarMgr::AddAction(CalendarAction const& action)
}
case CALENDAR_ACTION_COPY_EVENT:
{
- CalendarEvent* calendarEvent = CheckPermisions(action.Event.GetEventId(), action.GetGUID(), action.GetInviteId(), CALENDAR_RANK_OWNER);
+ CalendarEvent* calendarEvent = CheckPermisions(action.Event.GetEventId(), action.GetPlayer(), action.GetInviteId(), CALENDAR_RANK_OWNER);
if (!calendarEvent)
return;
@@ -261,7 +287,7 @@ void CalendarMgr::AddAction(CalendarAction const& action)
uint64 inviteId = GetFreeInviteId();
CalendarInvite newInvite(inviteId);
newInvite.SetEventId(eventId);
- newInvite.SetSenderGUID(action.GetGUID());
+ newInvite.SetSenderGUID(action.GetPlayer()->GetGUID());
newInvite.SetInvitee(invite->GetInvitee());
newInvite.SetStatus(invite->GetStatus());
newInvite.SetStatusTime(invite->GetStatusTime());
@@ -286,8 +312,7 @@ void CalendarMgr::AddAction(CalendarAction const& action)
uint32 flags = action.Event.GetFlags();
// FIXME - Use of Flags here!
- CalendarEvent* calendarEvent = CheckPermisions(eventId, action.GetGUID(), action.GetInviteId(), CALENDAR_RANK_OWNER);
-
+ CalendarEvent* calendarEvent = CheckPermisions(eventId, action.GetPlayer(), action.GetInviteId(), CALENDAR_RANK_OWNER);
if (!calendarEvent)
return;
@@ -302,7 +327,7 @@ void CalendarMgr::AddAction(CalendarAction const& action)
case CALENDAR_ACTION_ADD_EVENT_INVITE:
{
uint64 eventId = action.Invite.GetEventId();
- CalendarEvent* calendarEvent = CheckPermisions(eventId, action.GetGUID(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
+ CalendarEvent* calendarEvent = CheckPermisions(eventId, action.GetPlayer(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
if (!calendarEvent)
return;
@@ -320,7 +345,7 @@ void CalendarMgr::AddAction(CalendarAction const& action)
{
uint64 eventId = action.Event.GetEventId();
CalendarEvent* calendarEvent = GetEvent(eventId);
- CheckPermisions(eventId, action.GetGUID(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
+ CheckPermisions(eventId, action.GetPlayer(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
if (!calendarEvent || !(calendarEvent->GetFlags() & CALENDAR_FLAG_GUILD_ONLY)
|| !calendarEvent->GetGuildId() || calendarEvent->GetGuildId() != action.GetExtraData())
@@ -332,12 +357,13 @@ void CalendarMgr::AddAction(CalendarAction const& action)
status = CALENDAR_STATUS_CONFIRMED;
else if (status == CALENDAR_STATUS_ACCEPTED)
status = CALENDAR_STATUS_8;
+
CalendarInvite newInvite(GetFreeInviteId());
newInvite.SetStatus(status);
newInvite.SetStatusTime(uint32(time(NULL)));
newInvite.SetEventId(eventId);
- newInvite.SetInvitee(action.GetGUID());
- newInvite.SetSenderGUID(action.GetGUID());
+ newInvite.SetInvitee(action.GetPlayer()->GetGUID());
+ newInvite.SetSenderGUID(action.GetPlayer()->GetGUID());
if (AddInvite(newInvite))
SendCalendarEventInvite(newInvite, false);
@@ -351,7 +377,7 @@ void CalendarMgr::AddAction(CalendarAction const& action)
CalendarEvent* calendarEvent;
if (action.GetInviteId() != action.Invite.GetInviteId())
- calendarEvent = CheckPermisions(eventId, action.GetGUID(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
+ calendarEvent = CheckPermisions(eventId, action.GetPlayer(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
else
calendarEvent = GetEvent(eventId);
@@ -371,7 +397,7 @@ void CalendarMgr::AddAction(CalendarAction const& action)
CalendarEvent* calendarEvent;
if (action.GetInviteId() != action.Invite.GetInviteId())
- calendarEvent = CheckPermisions(eventId, action.GetGUID(), action.GetInviteId(), CALENDAR_RANK_OWNER);
+ calendarEvent = CheckPermisions(eventId, action.GetPlayer(), action.GetInviteId(), CALENDAR_RANK_OWNER);
else
calendarEvent = GetEvent(eventId);
@@ -388,15 +414,22 @@ void CalendarMgr::AddAction(CalendarAction const& action)
{
uint64 eventId = action.Invite.GetEventId();
uint64 inviteId = action.Invite.GetInviteId();
- CalendarEvent* calendarEvent = CheckPermisions(eventId, action.GetGUID(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
-
+ CalendarEvent* calendarEvent = CheckPermisions(eventId, action.GetPlayer(), action.GetInviteId(), CALENDAR_RANK_MODERATOR);
if (!calendarEvent)
return;
+ // already checked in CheckPermisions
+ CalendarInvite* invite = GetInvite(inviteId);
+ if (calendarEvent->GetCreatorGUID() == invite->GetInvitee())
+ {
+ action.GetPlayer()->GetSession()->SendCalendarCommandResult(CALENDAR_ERROR_DELETE_CREATOR_FAILED);
+ return;
+ }
+
if (uint64 invitee = RemoveInvite(inviteId))
{
SendCalendarEventInviteRemoveAlert(invitee, *calendarEvent, CALENDAR_STATUS_9);
- SendCalendarEventInviteRemove(action.GetGUID(), action.Invite, calendarEvent->GetFlags());
+ SendCalendarEventInviteRemove(action.GetPlayer()->GetGUID(), action.Invite, calendarEvent->GetFlags());
}
break;
}