53 for (CalendarEventStore::iterator itr =
_events.begin(); itr !=
_events.end(); ++itr)
56 for (CalendarEventInviteStore::iterator itr =
_invites.begin(); itr !=
_invites.end(); ++itr)
57 for (CalendarInviteStore::iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2)
76 if (
QueryResult result =
CharacterDatabase.Query(
"SELECT EventID, Owner, Title, Description, EventType, TextureID, Date, Flags, LockDate FROM calendar_events"))
79 Field* fields = result->Fetch();
82 ObjectGuid ownerGUID = ObjectGuid::Create<HighGuid::Player>(fields[1].GetUInt64());
83 std::string title = fields[2].
GetString();
84 std::string description = fields[3].
GetString();
89 time_t lockDate = fields[8].
GetInt64();
102 while (result->NextRow());
109 if (
QueryResult result =
CharacterDatabase.Query(
"SELECT InviteID, EventID, Invitee, Sender, Status, ResponseTime, ModerationRank, Note FROM calendar_invites"))
112 Field* fields = result->Fetch();
116 ObjectGuid invitee = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt64());
117 ObjectGuid senderGUID = ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64());
119 time_t responseTime = fields[5].
GetInt64();
121 std::string note = fields[7].
GetString();
124 _invites[eventId].push_back(invite);
130 while (result->NextRow());
192 for (
size_t i = 0; i < eventInvites.size(); ++i)
218 delete calendarEvent;
228 CalendarInviteStore::iterator itr =
_invites[eventId].begin();
229 for (; itr !=
_invites[eventId].end(); ++itr)
230 if ((*itr)->GetInviteId() == inviteId)
238 stmt->
setUInt64(0, (*itr)->GetInviteId());
287 for (CalendarEventStore::const_iterator itr =
_events.begin(); itr !=
_events.end();)
291 if (event->GetOwnerGUID() == guid)
296 for (CalendarInviteStore::const_iterator itr = playerInvites.begin(); itr != playerInvites.end(); ++itr)
297 RemoveInvite((*itr)->GetInviteId(), (*itr)->GetEventId(), guid);
302 for (CalendarEventStore::const_iterator itr =
_events.begin(); itr !=
_events.end(); ++itr)
303 if ((*itr)->GetOwnerGUID() == guid && ((*itr)->IsGuildEvent() || (*itr)->IsGuildAnnouncement()))
307 for (CalendarInviteStore::const_iterator itr = playerInvites.begin(); itr != playerInvites.end(); ++itr)
309 if (calendarEvent->IsGuildEvent() && calendarEvent->GetGuildId() == guildId)
310 RemoveInvite((*itr)->GetInviteId(), (*itr)->GetEventId(), guid);
315 for (CalendarEventStore::const_iterator itr =
_events.begin(); itr !=
_events.end(); ++itr)
316 if ((*itr)->GetEventId() == eventId)
319 TC_LOG_DEBUG(
"calendar",
"CalendarMgr::GetEvent: [{}] not found!", eventId);
325 for (CalendarEventInviteStore::const_iterator itr =
_invites.begin(); itr !=
_invites.end(); ++itr)
326 for (CalendarInviteStore::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2)
327 if ((*itr2)->GetInviteId() == inviteId)
330 TC_LOG_DEBUG(
"calendar",
"CalendarMgr::GetInvite: [{}] not found!", inviteId);
374 for (CalendarEventStore::const_iterator itr =
_events.begin(); itr !=
_events.end();)
378 if (event->GetDate() < oldEventsTime)
386 for (CalendarEventStore::const_iterator itr =
_events.begin(); itr !=
_events.end(); ++itr)
387 if ((*itr)->GetOwnerGUID() == guid && (includeGuildEvents || (!(*itr)->IsGuildEvent() && !(*itr)->IsGuildAnnouncement())))
400 for (CalendarEventStore::const_iterator itr =
_events.begin(); itr !=
_events.end(); ++itr)
401 if ((*itr)->IsGuildEvent() || (*itr)->IsGuildAnnouncement())
402 if ((*itr)->GetGuildId() == guildId)
412 for (CalendarEventInviteStore::const_iterator itr =
_invites.begin(); itr !=
_invites.end(); ++itr)
413 for (CalendarInviteStore::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2)
414 if ((*itr2)->GetInviteeGUID() == guid)
416 events.insert(event);
419 if (player->GetGuildId())
420 for (CalendarEventStore::const_iterator itr =
_events.begin(); itr !=
_events.end(); ++itr)
421 if ((*itr)->GetGuildId() == player->GetGuildId())
431 invites = *invitesStore;
440 for (CalendarEventInviteStore::const_iterator itr =
_invites.begin(); itr !=
_invites.end(); ++itr)
441 for (CalendarInviteStore::const_iterator itr2 = itr->second.begin(); itr2 != itr->second.end(); ++itr2)
442 if ((*itr2)->GetInviteeGUID() == guid)
443 invites.push_back(*itr2);
453 for (CalendarInviteStore::const_iterator itr = invites.begin(); itr != invites.end(); ++itr)
455 switch ((*itr)->GetStatus())
494 auto packetBuilder = [&](
Player const* receiver)
500 packet.
Level = level;
502 packet.
ResponseTime += receiver->GetSession()->GetTimezoneOffset();
507 receiver->SendDirectMessage(packet.
Write());
513 packetBuilder(playerSender);
519 packetBuilder(receiver);
525 auto packetBuilder = [&](
Player const* receiver)
530 packet.
Date += receiver->GetSession()->GetTimezoneOffset();
539 packet.
LockDate += receiver->GetSession()->GetTimezoneOffset();
541 packet.
OriginalDate += receiver->GetSession()->GetTimezoneOffset();
544 receiver->SendDirectMessage(packet.
Write());
548 packetBuilder(receiver);
553 auto packetBuilder = [&](
Player const* receiver)
558 packet.
Date += receiver->GetSession()->GetTimezoneOffset();
563 packet.
ResponseTime += receiver->GetSession()->GetTimezoneOffset();
566 receiver->SendDirectMessage(packet.
Write());
570 packetBuilder(receiver);
575 auto packetBuilder = [&](
Player const* receiver)
580 packet.
Date += receiver->GetSession()->GetTimezoneOffset();
583 receiver->SendDirectMessage(packet.
Write());
587 packetBuilder(receiver);
614 auto packetBuilder = [&](
Player const* receiver)
618 packet.
Date += receiver->GetSession()->GetTimezoneOffset();
631 receiver->SendDirectMessage(packet.
Write());
637 guild->BroadcastWorker(packetBuilder);
640 packetBuilder(player);
669 ObjectGuid inviteeGuid = calendarInvite->GetInviteeGUID();
676 inviteInfo.
Guid = inviteeGuid;
677 inviteInfo.
Level = inviteeLevel;
678 inviteInfo.
Status = calendarInvite->GetStatus();
679 inviteInfo.
Moderator = calendarInvite->GetRank();
681 inviteInfo.
InviteID = calendarInvite->GetInviteId();
684 inviteInfo.
Notes = calendarInvite->GetNote();
686 packet.
Invites.push_back(inviteInfo);
699 packet.
Date += player->GetSession()->GetTimezoneOffset();
704 player->SendDirectMessage(packet.
Write());
733 player->SendDirectMessage(packet.
Write());
740 player->SendDirectMessage(packet);
745 std::vector<Player*> relatedPlayers;
752 auto memberCollector = [&](
Player* player) { relatedPlayers.push_back(player); };
753 guild->BroadcastWorker(memberCollector);
764 relatedPlayers.push_back(player);
767 return relatedPlayers;
std::set< CalendarEvent * > CalendarEventStore
@ CALENDAR_ERROR_OTHER_INVITES_EXCEEDED
@ CALENDAR_ERROR_ALREADY_INVITED_TO_EVENT_S
@ CALENDAR_ERROR_IGNORING_YOU_S
@ CALENDAR_ERROR_EVENT_INVALID
@ CALENDAR_FLAG_WITHOUT_INVITES
@ CALENDAR_FLAG_GUILD_EVENT
std::vector< CalendarInvite * > CalendarInviteStore
@ CALENDAR_STATUS_TENTATIVE
@ CALENDAR_STATUS_NOT_SIGNED_UP
@ CALENDAR_STATUS_INVITED
@ CALENDAR_STATUS_REMOVED
@ CALENDAR_OLD_EVENTS_DELETION_TIME
@ CHAR_REP_CALENDAR_EVENT
@ CHAR_DEL_CALENDAR_INVITE
@ CHAR_DEL_CALENDAR_EVENT
@ CHAR_REP_CALENDAR_INVITE
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define TC_LOG_DEBUG(filterType__, message__,...)
#define TC_LOG_INFO(filterType__, message__,...)
@ MAIL_CHECK_MASK_COPIED
This mail was returned. Do not allow returning mail back again.
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
void SendCalendarEvent(ObjectGuid guid, CalendarEvent const &calendarEvent, CalendarSendEventType sendType) const
void UpdateEvent(CalendarEvent *calendarEvent)
void SendCalendarEventInviteRemove(CalendarEvent const &calendarEvent, CalendarInvite const &invite, uint32 flags) const
void SendCalendarEventInviteRemoveAlert(ObjectGuid guid, CalendarEvent const &calendarEvent, CalendarInviteStatus status) const
void SendCalendarEventUpdateAlert(CalendarEvent const &calendarEvent, time_t originalDate) const
void FreeInviteId(uint64 id)
CalendarEventInviteStore _invites
void SendCalendarEventStatus(CalendarEvent const &calendarEvent, CalendarInvite const &invite) const
void UpdateInvite(CalendarInvite *invite, CharacterDatabaseTransaction trans=nullptr)
std::deque< uint64 > _freeEventIds
static CalendarMgr * instance()
uint32 GetPlayerNumPending(ObjectGuid guid)
std::vector< Player * > GetAllEventRelatives(CalendarEvent const &calendarEvent) const
void SendCalendarCommandResult(ObjectGuid guid, CalendarError err, char const *param=nullptr) const
void RemovePlayerGuildEventsAndSignups(ObjectGuid guid, ObjectGuid::LowType guildId)
void FreeEventId(uint64 id)
CalendarEventStore _events
CalendarInviteStore GetEventInvites(uint64 eventId) const
void AddInvite(CalendarEvent *calendarEvent, CalendarInvite *invite, CharacterDatabaseTransaction trans=nullptr)
void SendCalendarClearPendingAction(ObjectGuid guid) const
void RemoveInvite(uint64 inviteId, uint64 eventId, ObjectGuid remover)
void RemoveAllPlayerEventsAndInvites(ObjectGuid guid)
CalendarEventStore GetPlayerEvents(ObjectGuid guid) const
CalendarInvite * GetInvite(uint64 inviteId) const
void SendPacketToAllEventRelatives(WorldPacket const *packet, CalendarEvent const &calendarEvent) const
CalendarEventStore GetEventsCreatedBy(ObjectGuid guid, bool includeGuildEvents=false) const
std::deque< uint64 > _freeInviteIds
void SendCalendarEventInviteAlert(CalendarEvent const &calendarEvent, CalendarInvite const &invite) const
CalendarEvent * GetEvent(uint64 eventId) const
void AddEvent(CalendarEvent *calendarEvent, CalendarSendEventType sendType)
CalendarInviteStore GetPlayerInvites(ObjectGuid guid) const
void RemoveEvent(uint64 eventId, ObjectGuid remover)
void SendCalendarEventInvite(CalendarInvite const &invite) const
void SendCalendarEventRemovedAlert(CalendarEvent const &calendarEvent) const
void SendCalendarEventModeratorStatusAlert(CalendarEvent const &calendarEvent, CalendarInvite const &invite) const
CalendarEventStore GetGuildEvents(ObjectGuid::LowType guildId) const
Class used to access individual fields of database query result.
uint64 GetUInt64() const noexcept
uint32 GetUInt32() const noexcept
int32 GetInt32() const noexcept
std::string GetString() const noexcept
int64 GetInt64() const noexcept
void SendMailTo(CharacterDatabaseTransaction trans, MailReceiver const &receiver, MailSender const &sender, MailCheckMask checked=MAIL_CHECK_MASK_NONE, uint32 deliver_delay=0)
LowType GetCounter() const
static ObjectGuid const Empty
std::string ToString() const
void SendDirectMessage(WorldPacket const *data) const
WorldSession * GetSession() const
ObjectGuid::LowType GetGuildId() const
void setString(uint8 index, std::string &&value)
void setUInt32(uint8 index, uint32 value)
void setInt64(uint8 index, int64 value)
void setUInt64(uint8 index, uint64 value)
void setInt32(uint8 index, int32 value)
void setUInt8(uint8 index, uint8 value)
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< CalendarEventInviteInfo > Invites
WorldPacket const * Write() override
Minutes GetTimezoneOffset() const
uint32 GetPackedTime() const
void SetUtcTimeFromUnixTime(std::time_t unixTime)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
auto MapGetValuePtr(M &map, typename M::key_type const &key)
std::string ToString(Type &&val, Params &&... params)
std::string StringFormat(FormatString< Args... > fmt, Args &&... args) noexcept
Default TC string format function.
std::string BuildCalendarMailSubject(ObjectGuid remover) const
bool IsGuildAnnouncement() const
CalendarEventType GetType() const
ObjectGuid GetOwnerGUID() const
bool IsGuildEvent() const
uint64 GetEventId() const
ObjectGuid::LowType GetGuildId() const
int32 GetTextureId() const
time_t GetLockDate() const
std::string GetTitle() const
std::string GetDescription() const
std::string BuildCalendarMailBody(Player const *invitee) const
CalendarModerationRank GetRank() const
CalendarInviteStatus GetStatus() const
uint64 GetInviteId() const
std::string GetNote() const
time_t GetResponseTime() const
uint64 GetEventId() const
ObjectGuid GetSenderGUID() const
ObjectGuid GetInviteeGUID() const