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__,...)
#define TC_LOG_INFO(filterType__,...)
@ 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.
std::string GetString() const
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 setInt32(const uint8 index, const int32 value)
void setUInt8(const uint8 index, const uint8 value)
void setInt64(const uint8 index, const int64 value)
void setUInt32(const uint8 index, const uint32 value)
void setString(const uint8 index, const std::string &value)
void setUInt64(const uint8 index, const uint64 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)
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