Skip to content

Commit

Permalink
R1.979_Release
Browse files Browse the repository at this point in the history
Bug fixes, some QOL improvements
  • Loading branch information
TheGeneticsGuy committed Jul 22, 2023
1 parent a7e26c6 commit 6984896
Show file tree
Hide file tree
Showing 23 changed files with 946 additions and 291 deletions.
30 changes: 30 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,34 @@

## **VERSION 1.979 RELEASE - July 22nd 2023**

***QUALITY OF LIFE***

* You can now mass verify Unverified Join dates and rank promotion dates. You will notice these as when you mouse over the player, or look at them in the audit you will see a "!!" tag on the date. This can happen from a couple of ways. First, there was a bug recently that left some dates unverified that is resolved in this update. Second, the guild event log on Blizz's server only stores the last 100 events from within the guild. If you are in a highly active guild and 100 events have already occurred since you last logged in, GRM will not know what happened, so GRM will find a change, like someone joined while you were offline, but not be able to verify exactly when. And third, if you are on Classic Era Vanilla WOW, since there is no guild event log yet in the game (it wasn't introduced until patch 2.3), then GRM is unable to query the server for the info.

![Mass Confirm Unverified Dates](https://i.imgur.com/OKr6tJg.jpg)

* The GRM_Tool macro now has a default message stored inside it explaining why the macro exists with a request not to delete it. This is a necessary placeholder macro GRM uses for the GRM Macro Tool. When not in use the text used to be blank, which has caused some confusion why it gets deleted and GRM recreates it next time you login or reload.

* The Mythic+ rating that shows on the player mouseover now scales dozens of colors to match the [RAIDER.IO color scale](https://raiderio-color.wisak.me/). I will be doing more with M+ rating soon, but I need to wrap up a few more things first.

* For people with MASSIVE Logs, the search on the log could end up freezing up your game or it would timeout. This search is very detailed and it normalizes special characters so you can easily find hard to type names, but since that requires a few extra conversion steps the actual search of logs in the tens of thousands of lines can be a little laggy. As such, I added a preventative measure to prevent the lockup. I even tested it on a log > 100,000 lines long just to be sure it works. To prevent any confusion, I also added a new message "Searching Log" for people. This will not even be noticeable to people until you have > 10,000 log entries, and even then it is very minimal, like 1 sec delay per 10k lines.

![Delayed Search to prevent Lockups](https://i.imgur.com/RfLN3GF.jpg)

***BUG FIXES***

* Fixed an issue where for some who updated to 1.978, it would update the settings DB properly, but then faily to load the DB that session. A simple /reload would resolve the issue, but this should no longer occur anymore and the update should be more seemless for most.

* Fixed a small issue where the "FRIEND" tag would show on the players logging on when it shouldn't.

* Removed the old macro that doesn't need to exist anymore that was used to Ctrl-J access the old guild roster, since it is no longer necessary after Blizz removed it.

* I THINK I added a fix for the issue with GRM failing to auto-verify the dates when doing a scan of the log. With that being said, be aware that the built-in guild log only shows the last 100 events in the guild, be it invites, promotes, demotions, joins, kicks, leaves. If you are in a highly active guild and you have been offline for a longer time, maybe even just a whole day in one of these mega guilds, 100 events may have already occurred so GRM is unable to verify the exact date say someone joined, but GRM can determine someone joined. With that being said, GRM should show the promotion dates as verified now consistently if it can find them.

* Mythic+ rating was not showing the correct number for some people. Be warned, this is sometimes an oudated number as if a player is inactive and hasn't logged in in a long time, it may still show a previous season's rating. Unfortunately this info is pulled directly from Warcraft's servers. GRM should only now reflect what the servers give us.

* Fixed an issue that plagued non-English clients saying missing key.


## **VERSION 1.978 RELEASE - July 11th, 2023**

Expand Down
818 changes: 538 additions & 280 deletions GRM_Core.lua

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions GRM_Macro_Tool.lua
Original file line number Diff line number Diff line change
Expand Up @@ -454,13 +454,12 @@ GRM_UI.LoadToolFrames = function ( isManual )

GRM_UI.GRM_ToolCoreFrame:SetScript ( "OnHide" , function()
-- Clear the macro!
GRM.CreateMacro ( "" , "GRM_Tool" , "INV_MISC_QUESTIONMARK" , GRM_G.MacroHotKey );
GRM.CreateMacro ( "/run GRM.Report(\"" .. GRM.L ( "Reserved for GRM Macro Tool Usage. Please do not delete.\"" ) ..")" , "GRM_Tool" , "INV_MISC_QUESTIONMARK" , "CTRL-SHIFT-K" , true );
GRM_G.MacroInProgress = false;
GRM_UI.GRM_ToolCoreFrame.GRM_ToolIgnoreListFrame:Hide();
GRM_UI.GRM_ToolCoreFrame.GRM_ToolCustomRulesFrame:Hide();
GRM_UI.GRM_ToolCoreFrame.GRM_ToolContextMenu:Hide();
GRM.ScanRecommendationsList();

end);

-- Text
Expand Down Expand Up @@ -5789,7 +5788,7 @@ end
-- What it Does: Resets Macro
-- Purpose: Clear the macro after each use so it can be rebuilt - prevents double use of macro by spam clicking.
GRM.RMM = function()
GRM.CreateMacro ( "" , "GRM_Tool" , "INV_MISC_QUESTIONMARK" , GRM_G.MacroHotKey );
GRM.CreateMacro ( "" , "GRM_Tool" , "INV_MISC_QUESTIONMARK" , "CTRL-SHIFT-K" , true );
GRM_G.HK = true;
end

Expand All @@ -5815,7 +5814,8 @@ GRM.BuildMacrodScrollFrame = function ( showAll , fullRefresh )
end

elseif not fullRefresh then
GRM.CreateMacro ( "" , "GRM_Tool" , "INV_MISC_QUESTIONMARK" , GRM_G.MacroHotKey ); -- Clear the macro
-- Clear the macro
GRM.CreateMacro ( "" , "GRM_Tool" , "INV_MISC_QUESTIONMARK" , "CTRL-SHIFT-K" , true );
end


Expand Down
45 changes: 42 additions & 3 deletions GRM_Patches.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
GRM_Patch = {};
local patchNeeded = false;
local DBGuildNames = {};
local totalPatches = 113;
local totalPatches = 114;
local startTime = 0;
local FID = 0;
local PID = 0;
Expand Down Expand Up @@ -1292,8 +1292,8 @@ GRM_Patch.SettingsCheck = function ( numericV , count , patch )
patchNum = patchNum + 1;
if numericV < 1.972 and baseValue < 1.972 then

if GRM_G.BuildVersion >= 90000 then
GRM_Patch.AddMemberSpecificData ( "MythicScore" , { GRM_G.MythicSeasonInfo[1] , GRM_G.MythicSeasonInfo[2] , 0 } );
if GRM_G.BuildVersion >= 80000 then
GRM_Patch.AddMemberSpecificData ( "MythicScore" , 0 );
end
GRM_Patch.AddNewSetting ( "showLevel" , true );
GRM_Patch.AddNewSetting ( "showMythicRating" , true );
Expand Down Expand Up @@ -1347,6 +1347,21 @@ GRM_Patch.SettingsCheck = function ( numericV , count , patch )
end
end

-- patch 114
patchNum = patchNum + 1;
if numericV < 1.979 and baseValue < 1.979 then

GRM_Patch.DeleteLegacyMacro();
if GRM_G.BuildVersion >= 80000 then
GRM_Patch.AddMemberSpecificData ( "MythicScore" , 0 );
end


if loopCheck ( 1.979 ) then
return;
end
end

GRM_Patch.FinalizeReportPatches( patchNeeded , numActions );
end

Expand Down Expand Up @@ -1376,6 +1391,19 @@ GRM_Patch.FinalizeReportPatches = function ( patchNeeded , numActions )
GRM.ConfigureMiscForPlayer( GRM_G.addonUser );
end

-- Add new guild
if IsInGuild() and not GRM_AddonSettings_Save[GRM_G.guildName] then
GRM_AddonSettings_Save[GRM_G.guildName] = {};

-- Load the Default Settings
for i = 0 , GRM_G.SettingsPages do
GRM.SetDefaultAddonSettings ( GRM_AddonSettings_Save[GRM_G.guildName] , i , false );
end
end

-- Forcing core log window/options frame to load on the first load ever as well
GRM_G.ChangesFoundOnLoad = true;

C_Timer.After ( 1 , GRM.FinalSettingsConfigurations );
end

Expand Down Expand Up @@ -7707,4 +7735,15 @@ GRM_Patch.ConvertSettingsToNewFormat = function()
end

end
end

-- R1.979
-- Method: GRM_Patch.DeleteLegacyMacro()
-- What it Does: Deletes this old macro that doesn't need to exist anymore
-- Purpose: After removal of the old roster, this macro no longer needs to exist.
GRM_Patch.DeleteLegacyMacro = function()

if GetMacroIndexByName ( "GRM_Roster" ) ~= 0 then
DeleteMacro ( "GRM_Roster" );
end
end
104 changes: 104 additions & 0 deletions GRM_UI.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6001,6 +6001,10 @@ GRM_UI.MetaDataInitializeUIrosterLog1 = function( isManualUpdate )
end
end);

-- Search indicator for delayed searching
GRM_UI.CreateString ( "GRM_LogSearchPendingText" , GRM_UI.GRM_RosterChangeLogFrame.GRM_LogFrame.GRM_LogEditBox , "GameFontNormal" , GRM.L ( "Searching Log..." ) , 16 , { "BOTTOM" , GRM_UI.GRM_RosterChangeLogFrame.GRM_LogFrame.GRM_LogEditBox , "TOP" , 0 , 35 } , nil , { 0 , 0.8 , 1 } , "CENTER" , false );
GRM_UI.GRM_RosterChangeLogFrame.GRM_LogFrame.GRM_LogEditBox.GRM_LogSearchPendingText:Hide();

-- LOG TOOLS
GRM_UI.GRM_RosterChangeLogFrame.GRM_LogFrame.GRM_LogExtraOptionsFrame:Hide();
GRM_UI.GRM_RosterChangeLogFrame.GRM_LogFrame.GRM_LogExtraOptionsFrame:SetPoint ( "TOP" , GRM_UI.GRM_RosterChangeLogFrame.GRM_LogFrame , "BOTTOM" , 0 , -1 );
Expand Down Expand Up @@ -11805,6 +11809,105 @@ GRM_UI.MetaDataInitializeUIrosterLog2 = function( isManualUpdate )
end
end);

-- VERIFY ALL WINDOW ON AUDIT
GRM_UI.VerifyRankDatesScript = function()
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame:Show();
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyFrameText1:SetText ( GRM.L ( "Number of Unverified Promotion Dates: {num}" , nil , nil , "|CFF00CCFF" .. tostring ( GRM.GetNumUnverifiedPromoDates() ) .. "|r" ) );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyFrameEditBox1:SetText("");
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyAllConfirmButton.GRM_VerifyAllConfirmButtonText:SetText ( GRM.L ( "Confirm All" ) );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.Join = false;
end

-- Verify All for Ran changes -- any with "!!"
GRM_UI.VerifyJoinDatesScript = function()
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame:Show();
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyFrameText1:SetText ( GRM.L ( "Number of Unverified Join Dates: {num}" , nil , nil , "|CFF00CCFF" .. tostring ( GRM.GetNumUnverifiedJoinDates() ) .. "|r") );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyFrameEditBox1:SetText("");
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyAllConfirmButton.GRM_VerifyAllConfirmButtonText:SetText ( GRM.L ( "Confirm All" ) );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.Join = true;
end

-- Logic to update the button as you type in the edit box
GRM_UI.VerifyDateTextChanged = function()
local num = GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyFrameEditBox1:GetText();

if num ~= nil and num ~= "" then
num = tonumber( num );

GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyAllConfirmButton.GRM_VerifyAllConfirmButtonText:SetText ( GRM.L ( "Only Confirm Dates Within {num} Days" , nil , nil , num ) );
else
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyAllConfirmButton.GRM_VerifyAllConfirmButtonText:SetText ( GRM.L ( "Confirm All" ) );
end
end

-- Cofirmation
GRM_UI.ConfirmVerifyOfDates = function()

local days = GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyFrameEditBox1:GetText();

if days ~= nil and days ~= "" then
days = tonumber( days );
else
days = nil;
end

if GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.Join then
GRM.VerifyAllJoinDates ( days );
else
GRM.VerifyAllRankDates ( days );
end

GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame:Hide();

GRM.RefreshAuditFrames ( true , true );
if GRM_UI.GRM_MemberDetailMetaData:IsVisible() then
GRM.PopulateMemberDetails ( GRM_G.currentName );
end
if GRM_UI.GRM_RosterFrame ~= nil and GRM_UI.GRM_RosterFrame:IsVisible() then
GRM_R.RefreshRosterName();
end
end

GRM_UI.CreateButton ( "GRM_VerifyAllRankButton" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame , "UIPanelButtonTemplate" , GRM.L ( "Verify Promotion Dates" ) , 100 , 45 , { "TOP" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_SetPromoUnkownButton , "BOTTOM" , 0 , -410 } , GRM_UI.VerifyRankDatesScript , "GameFontWhite" , 10 , "CENTER" , 2 , 0 );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_VerifyAllRankButton.GRM_VerifyAllRankButtonText:SetWordWrap ( true );

GRM_UI.CreateButton ( "GRM_VerifyAllJoinButton" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame , "UIPanelButtonTemplate" , GRM.L ( "Verify Join Dates" ) , 100 , 45 , { "TOP" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_SetJoinUnkownButton , "BOTTOM" , 0 , -410 } , GRM_UI.VerifyJoinDatesScript , "GameFontWhite" , 10 , "CENTER" , 2 , 0 );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_VerifyAllJoinButton.GRM_VerifyAllJoinButtonText:SetWordWrap ( true );

GRM_UI.CreateCoreFrame ( "GRM_AuditVerifyAllFrame" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame , nil , 400 , 130 , "TranslucentFrameTemplate" , true , { "CENTER" , UIParent , "CENTER" , 0 , 0 } , "TOOLTIP" , true , true );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame:Hide();

GRM_UI.CreateString ( "GRM_VerifyFrameText1" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame , "GameFontNormal" , "" , 12 , { "TOPLEFT" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame , "TOPLEFT" , 25 , -25 } , nil , nil , "LEFT" , true );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.Join = false;

GRM_UI.CreateString ( "GRM_VerifyFrameText2" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame , "GameFontNormal" , GRM.L ( "Verify Only if Within Number of Days:" ) , 12 , { "TOPLEFT" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyFrameText1 , "BOTTOMLEFT" , 0 , -15 } , nil , nil , "LEFT" , false );

GRM_UI.CreateEditBox ( "GRM_VerifyFrameEditBox1" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame , "InputBoxTemplate" , 50 , 15 , { "LEFT" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame.GRM_VerifyFrameText2 , "RIGHT" , 10 , 0 } , "CENTER" , nil , 3 , true , nil , nil , GRM_UI.VerifyDateTextChanged )

GRM_UI.CreateButton ( "GRM_VerifyAllConfirmButton" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame , "UIPanelButtonTemplate" , "" , 300 , 35 , { "BOTTOM" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame , "BOTTOM" , 0 , 12 } , GRM_UI.ConfirmVerifyOfDates , "GameFontWhite" , 12 , "CENTER" , 0 , 0 );

GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_VerifyAllRankButton:SetScript ( "OnEnter" , function ( self )
GRM_UI.SetTooltipScale();
GameTooltip:SetOwner ( self , "ANCHOR_CURSOR" );
GameTooltip:AddLine( GRM.L ( "Number of Unverified Promotion Dates: {num}" , nil , nil , "|CFF00CCFF" .. tostring ( GRM.GetNumUnverifiedPromoDates() ) .. "|r" ) );
GameTooltip:Show();
end);
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_VerifyAllRankButton:SetScript ( "OnLeave" , function ()
GRM.RestoreTooltip()
end);

GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_VerifyAllJoinButton:SetScript ( "OnEnter" , function ( self )
GRM_UI.SetTooltipScale();
GameTooltip:SetOwner ( self , "ANCHOR_CURSOR" );
GameTooltip:AddLine( GRM.L ( "Number of Unverified Join Dates: {num}" , nil , nil , "|CFF00CCFF" .. tostring ( GRM.GetNumUnverifiedJoinDates() ) .. "|r" ) );
GameTooltip:Show();
end);
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_VerifyAllJoinButton:SetScript ( "OnLeave" , function ()
GRM.RestoreTooltip()
end);

-- END VERIFICATION

-- Player Search
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_PlayerSearchAuditEditBoxText:SetPoint ( "BOTTOM" , GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_PlayerSearchAuditEditBox , "TOP" , 0 , 0 );
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_PlayerSearchAuditEditBoxText:SetTextColor ( 1 , 0.82 , 0 );
Expand Down Expand Up @@ -11933,6 +12036,7 @@ GRM_UI.MetaDataInitializeUIrosterLog2 = function( isManualUpdate )
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame:SetScript ( "OnHide" , function()
GRM.RestoreTooltip()
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditWindowDropDownFrame:Hide();
GRM_UI.GRM_RosterChangeLogFrame.GRM_AuditFrame.GRM_AuditVerifyAllFrame:Hide();
end);

-- For tooltip on the audit frame...
Expand Down
1 change: 1 addition & 0 deletions GRM_UI_API.lua
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ GRM_UI.CreateButton = function ( name , parentFrame , template , text , width ,
parentFrame[name][fontStringText] = parentFrame[name]:CreateFontString ( nil , "OVERLAY" , textTemplate );
parentFrame[name][fontStringText]:SetPoint ( "LEFT" , parentFrame[name] , "LEFT" , indent , heightM );
parentFrame[name][fontStringText]:SetWidth ( width - 5 );
parentFrame[name][fontStringText]:SetSpacing ( 1 );
parentFrame[name][fontStringText]:SetWordWrap ( false );
if alignment then
parentFrame[name][fontStringText]:SetJustifyH ( alignment );
Expand Down
2 changes: 1 addition & 1 deletion Guild_Roster_Manager_Classic.toc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

## Interface: 11403
## Author: Arkaan
## Version: 1.978
## Version: 1.979
## Title: Guild Roster Manager
## Notes: Manage Guild Roster Changes, Events, with Alt/Main tagging, for ALL guildies
## X-Website: https://www.curseforge.com/wow/addons/guild-roster-manager
Expand Down
2 changes: 1 addition & 1 deletion Guild_Roster_Manager_Mainline.toc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

## Interface: 100105
## Author: Arkaan
## Version: 1.978
## Version: 1.979
## Title: Guild Roster Manager
## Notes: Manage Guild Roster Changes, Events, with Alt/Main tagging, for ALL guildies
## X-Website: https://www.curseforge.com/wow/addons/guild-roster-manager
Expand Down
2 changes: 1 addition & 1 deletion Guild_Roster_Manager_Wrath.toc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

## Interface: 30402
## Author: Arkaan
## Version: 1.978
## Version: 1.979
## Title: Guild Roster Manager
## Notes: Manage Guild Roster Changes, Events, with Alt/Main tagging, for ALL guildies
## X-Website: https://www.curseforge.com/wow/addons/guild-roster-manager
Expand Down
16 changes: 16 additions & 0 deletions locales/Danish.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1654,4 +1654,20 @@ GRML.Danish = function()
GRM_L["Whisper"] = true
GRM_L["{custom1} to Whisper"] = true

-- R1.979
GRM_L["{name}'s Settings"] = true
GRM_L["Reserved for GRM Macro Tool Usage. Please do not delete."] = true
GRM_L["Verify Promotion Dates"] = true
GRM_L["Verify Join Dates"] = true
GRM_L["Number of Unverified Promotion Dates: {num}"] = true
GRM_L["Number of Unverified Join Dates: {num}"] = true
GRM_L["Verify Only if Within Number of Days:"] = true
GRM_L["Confirm All"] = true
GRM_L["Only Confirm Dates Within {num} Days"] = true
GRM_L["1 Promotion Date Has Been Confirmed."] = true;
GRM_L["{num} Promotion Dates Have Been Confirmed."] = true
GRM_L["1 Join Date Has Been Confirmed."] = true;
GRM_L["{num} Join Dates Have Been Confirmed."] = true
GRM_L["Searching Log..."] = true

end
Loading

0 comments on commit 6984896

Please sign in to comment.