diff --git a/esoui/ingame/help/keyboard/helpaskforhelp_keyboard.lua b/esoui/ingame/help/keyboard/helpaskforhelp_keyboard.lua
new file mode 100644
index 0000000..92e8b1d
--- /dev/null
+++ b/esoui/ingame/help/keyboard/helpaskforhelp_keyboard.lua
@@ -0,0 +1,417 @@
+local HELP_ASK_FOR_HELP_CATEGORY_INFO =
+{
+ [CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_CHARACTER_ISSUE] =
+ {
+ ticketCategory = TICKET_CATEGORY_CHARACTER_ISSUE,
+ },
+ [CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_QUEST_ISSUE] =
+ {
+ ticketCategory = TICKET_CATEGORY_QUEST_ISSUE,
+ detailsTitle = GetString(SI_CUSTOMER_SERVICE_QUEST_NAME),
+ detailsRegistrationFunction = SetCustomerServiceTicketQuestTarget,
+ extraInfo = zo_strformat(SI_CUSTOMER_SERVICE_ASK_FOR_HELP_NO_QUEST_HINT, ZO_LinkHandler_CreateURLLink("", GetString("SI_APPROVEDURLTYPE", APPROVED_URL_ESO_FORUMS))),
+ },
+ [CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_ITEM_ISSUE] =
+ {
+ ticketCategory = TICKET_CATEGORY_ITEM_ISSUE,
+ detailsTitle = GetString(SI_CUSTOMER_SERVICE_ITEM_NAME),
+ detailsRegistrationFunction = SetCustomerServiceTicketItemTarget,
+ },
+ [CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_REPORT_PLAYER] =
+ {
+ detailsTitle = GetString(SI_CUSTOMER_SERVICE_ASK_FOR_HELP_PLAYER_NAME),
+ detailsRegistrationFunction = SetCustomerServiceTicketPlayerTarget,
+ detailsFormatText = ZO_FormatManualNameEntry,
+ subcategoryStringName = "SI_CUSTOMERSERVICEASKFORHELPREPORTPLAYERSUBCATEGORY",
+ subcategories =
+ {
+ {
+ value = CUSTOMER_SERVICE_ASK_FOR_HELP_REPORT_PLAYER_SUBCATEGORY_NONE,
+ },
+ {
+ value = CUSTOMER_SERVICE_ASK_FOR_HELP_REPORT_PLAYER_SUBCATEGORY_INAPPROPRIATE_NAME,
+ ticketCategory = TICKET_CATEGORY_REPORT_BAD_NAME,
+ },
+ {
+ value = CUSTOMER_SERVICE_ASK_FOR_HELP_REPORT_PLAYER_SUBCATEGORY_HARASSMENT,
+ ticketCategory = TICKET_CATEGORY_REPORT_HARASSMENT,
+ },
+ {
+ value = CUSTOMER_SERVICE_ASK_FOR_HELP_REPORT_PLAYER_SUBCATEGORY_CHEATING,
+ ticketCategory = TICKET_CATEGORY_REPORT_CHEATING,
+ },
+ {
+ value = CUSTOMER_SERVICE_ASK_FOR_HELP_REPORT_PLAYER_SUBCATEGORY_OTHER,
+ ticketCategory = TICKET_CATEGORY_REPORT_OTHER,
+ },
+ },
+ },
+}
+
+local ESO_FORUMS_URL_TYPE = {urlType = APPROVED_URL_ESO_FORUMS}
+local ESO_FORUMS_FRONT_FACING_ADDRESS = {mainTextParams = {GetString(SI_CUSTOMER_SERVICE_ESO_FORUMS_LINK_TEXT), GetString(SI_URL_APPLICATION_WEB)}}
+
+local HelpAskForHelp_Keyboard = ZO_HelpScreenTemplate_Keyboard:Subclass()
+
+function HelpAskForHelp_Keyboard:New(...)
+ return ZO_HelpScreenTemplate_Keyboard.New(self, ...)
+end
+
+function HelpAskForHelp_Keyboard:Initialize(control)
+ HELP_CUSTOMER_SERVICE_ASK_FOR_HELP_KEYBOARD_FRAGMENT = ZO_FadeSceneFragment:New(control)
+
+ local iconData =
+ {
+ name = GetString(SI_CUSTOMER_SERVICE_ASK_FOR_HELP),
+ categoryFragment = HELP_CUSTOMER_SERVICE_ASK_FOR_HELP_KEYBOARD_FRAGMENT,
+ up = "EsoUI/Art/Help/help_tabIcon_CS_up.dds",
+ down = "EsoUI/Art/Help/help_tabIcon_CS_down.dds",
+ over = "EsoUI/Art/Help/help_tabIcon_CS_over.dds",
+ }
+ ZO_HelpScreenTemplate_Keyboard.Initialize(self, control, iconData)
+
+ self.helpCategoryTitle = control:GetNamedChild("CategoryTitle")
+ self.helpSubcategoryTitle = control:GetNamedChild("SubcategoryTitle")
+ self.helpDetailsTitle = control:GetNamedChild("DetailsTitle")
+ self.helpExtraInfoTitle = control:GetNamedChild("ExtraInfoTitle")
+ self.helpDescriptionTitle = control:GetNamedChild("DescriptionTitle")
+ self.helpDetailsTextControl = control:GetNamedChild("DetailsTextLine")
+
+ self.helpSubcategoryContainer = control:GetNamedChild("SubcategoryContainer")
+ self.helpDetailsContainer = control:GetNamedChild("DetailsContainer")
+ self.helpExtraInfoContainer = control:GetNamedChild("ExtraInfoContainer")
+
+ self.helpCategoryComboBoxControl = control:GetNamedChild("CategoryComboBox")
+ self.helpSubcategoryComboBoxControl = control:GetNamedChild("SubcategoryComboBox")
+
+ self.helpSubmitButton = control:GetNamedChild("SubmitButton")
+
+ control:RegisterForEvent(EVENT_CUSTOMER_SERVICE_TICKET_SUBMITTED, function (...) self:OnCustomerServiceTicketSubmitted(...) end)
+
+ self:InitializeTextBoxes()
+ self:InitializeComboBoxes()
+ self:InitializeDialogs()
+end
+
+function HelpAskForHelp_Keyboard:InitializeComboBoxes()
+
+ local function CreateComboBox(childName)
+ local combo = ZO_ComboBox_ObjectFromContainer(self.control:GetNamedChild(childName))
+ combo:SetSortsItems(false)
+ combo:SetFont("ZoFontWinT1")
+ combo:SetSpacing(4)
+ return combo
+ end
+
+ self.helpCategoryComboBox = CreateComboBox("CategoryComboBox")
+ self.helpSubcategoryComboBox = CreateComboBox("SubcategoryComboBox")
+
+ local function OnCategoryChanged(comboBox, entryText, entry)
+ self:UpdateSubcategories()
+ self:UpdateDetailsComponents()
+ self:UpdateExtraInfo()
+ self:UpdateSubmitButton()
+ end
+
+ for i = CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_MIN_VALUE, CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_MAX_VALUE do
+ local name = GetString("SI_CUSTOMERSERVICEASKFORHELPCATEGORIES", i)
+ if name ~= nil then
+ local entry = ZO_ComboBox:CreateItemEntry(name, OnCategoryChanged)
+ entry.index = i
+ self.helpCategoryComboBox:AddItem(entry, ZO_COMBOBOX_SUPRESS_UPDATE)
+ end
+ end
+
+ self.helpCategoryComboBox:SelectItemByIndex(1)
+end
+
+function HelpAskForHelp_Keyboard:InitializeTextBoxes()
+ self.details = self.control:GetNamedChild("DetailsTextLineField")
+ self.details:SetMaxInputChars(MAX_HELP_DETAILS_TEXT)
+ ZO_EditDefaultText_Initialize(self.details, GetString(SI_CUSTOMER_SERVICE_ENTER_NAME))
+
+ --Storing the text field and adding handlers to the visibility events so the Submit Button can be enabled/disabled when the player has typed something in
+ --The Submit Button is disabled when the details text is empty (and the details text is visible)
+ self.detailsDefaultTextField = self.details:GetNamedChild("Text")
+ self.detailsDefaultTextField:SetHandler("OnEffectivelyShown",function() self:UpdateSubmitButton() end)
+ self.detailsDefaultTextField:SetHandler("OnEffectivelyHidden",function() self:UpdateSubmitButton() end)
+
+ self.description = self.control:GetNamedChild("DescriptionBodyField")
+ self.description:SetMaxInputChars(MAX_HELP_DESCRIPTION_BODY)
+ ZO_EditDefaultText_Initialize(self.description, GetString(SI_CUSTOMER_SERVICE_DEFAULT_DESCRIPTION_TEXT_ASK_FOR_HELP))
+
+ --The Submit Button is disabled if the description text is empty
+ self.descriptionDefaultTextField = self.description:GetNamedChild("Text")
+ self.descriptionDefaultTextField:SetHandler("OnEffectivelyShown",function() self:UpdateSubmitButton() end)
+ self.descriptionDefaultTextField:SetHandler("OnEffectivelyHidden",function() self:UpdateSubmitButton() end)
+
+ self.description:SetText("")
+ self.details:SetText("")
+end
+
+function HelpAskForHelp_Keyboard:InitializeDialogs()
+ ZO_Dialogs_RegisterCustomDialog("HELP_ASK_FOR_HELP_SUBMIT_TICKET_SUCCESSFUL_DIALOG",
+ {
+ canQueue = true,
+ mustChoose = true,
+ title =
+ {
+ text = GetString(SI_CUSTOMER_SERVICE_SUBMIT_CONFIRMATION),
+ },
+ mainText =
+ {
+ text = GetString(SI_CUSTOMER_SERVICE_ASK_FOR_HELP_SUBMIT_TICKET_CONFIRMATION),
+ },
+
+ buttons =
+ {
+ {
+ keybind = "DIALOG_NEGATIVE",
+ text = SI_DIALOG_EXIT,
+ },
+ },
+ })
+end
+
+function HelpAskForHelp_Keyboard:UpdateSubcategories()
+ self.helpSubcategoryComboBox:ClearItems()
+
+ local categoryIndex = self.helpCategoryComboBox:GetSelectedItemData().index
+
+ local mainArray = HELP_ASK_FOR_HELP_CATEGORY_INFO[categoryIndex]
+
+ if mainArray == nil then
+ self:SetSubcategoryContentHidden(true)
+ else
+ self.subcategoryArray = mainArray.subcategories
+
+ if self.subcategoryArray == nil then
+ self:SetSubcategoryContentHidden(true)
+ else
+ self:SetSubcategoryContentHidden(false)
+
+ for i, subcategoryId in ipairs(self.subcategoryArray) do
+ local entry = ZO_ComboBox:CreateItemEntry(GetString(mainArray.subcategoryStringName, subcategoryId.value), function() self:UpdateSubmitButton() end)
+ entry.index = i
+ self.helpSubcategoryComboBox:AddItem(entry, ZO_COMBOBOX_UPDATE_NOW)
+ end
+
+ self.helpSubcategoryComboBox:SelectItemByIndex(1)
+ end
+ end
+end
+
+function HelpAskForHelp_Keyboard:UpdateDetailsComponents()
+ self.details:SetText("")
+
+ local categoryIndex = self.helpCategoryComboBox:GetSelectedItemData().index
+
+ local mainArray = HELP_ASK_FOR_HELP_CATEGORY_INFO[categoryIndex]
+
+ if mainArray == nil then
+ self:SetDetailsContentHidden(true)
+ else
+ local title = mainArray.detailsTitle
+ if title == nil then
+ self:SetDetailsContentHidden(true)
+ else
+ self:SetDetailsContentHidden(false)
+ self.helpDetailsTitle:SetText(title)
+ end
+ end
+end
+
+function HelpAskForHelp_Keyboard:UpdateExtraInfo()
+ self.helpExtraInfoTitle:SetText("")
+
+ self:SetExtraInfoContentHidden(true)
+
+ local categoryIndex = self.helpCategoryComboBox:GetSelectedItemData().index
+
+ local mainArray = HELP_ASK_FOR_HELP_CATEGORY_INFO[categoryIndex]
+
+ if mainArray then
+ local title = mainArray.extraInfo
+ if title then
+ self.helpExtraInfoTitle:SetText(title)
+
+ self:SetExtraInfoContentHidden(false)
+ end
+ end
+
+end
+
+function HelpAskForHelp_Keyboard:SetSubcategoryContentHidden(shouldHide)
+ self.helpSubcategoryComboBoxControl:SetHidden(shouldHide)
+ self.helpSubcategoryTitle:SetHidden(shouldHide)
+
+ local offsetY = 0
+ if not shouldHide then
+ offsetY = 20
+ end
+ self.helpSubcategoryContainer:SetAnchor(TOPLEFT, self.helpCategoryComboBoxControl, BOTTOMLEFT, 0, offsetY)
+end
+
+function HelpAskForHelp_Keyboard:SetDetailsContentHidden(shouldHide)
+ self.helpDetailsTextControl:SetHidden(shouldHide)
+ self.helpDetailsTitle:SetHidden(shouldHide)
+
+ local offsetY = 0
+ if not shouldHide then
+ offsetY = 20
+ end
+ self.helpDetailsContainer:SetAnchor(TOPLEFT, self.helpSubcategoryContainer, BOTTOMLEFT, 0, offsetY)
+end
+
+function HelpAskForHelp_Keyboard:SetExtraInfoContentHidden(shouldHide)
+ self.helpExtraInfoTitle:SetHidden(shouldHide)
+
+ local offsetY = 0
+ if not shouldHide then
+ offsetY = 20
+ end
+ self.helpExtraInfoContainer:SetAnchor(TOPLEFT, self.helpDetailsContainer, BOTTOMLEFT, 0, offsetY)
+end
+
+function HelpAskForHelp_Keyboard:UpdateSubmitButton()
+ local enableSubmitButton = true
+
+ if self.helpCategoryComboBox == nil or self.helpSubcategoryComboBox == nil or self.descriptionDefaultTextField == nil or self.details == nil then
+ enableSubmitButton = false
+ elseif self.helpCategoryComboBox:GetSelectedItemData().index <= CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_MIN_VALUE then
+ enableSubmitButton = false
+ elseif not self.helpSubcategoryComboBoxControl:IsHidden() and self.helpSubcategoryComboBox:GetSelectedItemData().index <= 0 then
+ enableSubmitButton = false
+ elseif not self.helpDetailsTextControl:IsHidden() and not self.detailsDefaultTextField:IsHidden() then
+ enableSubmitButton = false
+ elseif not self.descriptionDefaultTextField:IsHidden() then
+ enableSubmitButton = false
+ end
+
+ self.helpSubmitButton:SetEnabled(enableSubmitButton)
+end
+
+function HelpAskForHelp_Keyboard:ClearFields()
+
+ self.helpCategoryComboBox:SelectItemByIndex(1)
+ self.description:SetText("")
+
+ ResetCustomerServiceTicket()
+end
+
+function HelpAskForHelp_Keyboard:SelectCategory(category)
+ local categories = self.helpCategoryComboBox:GetItems()
+
+ for i, categoryId in ipairs(categories) do
+ if categoryId.index == category then
+ local PERFORM_CALLBACK = false
+ self.helpCategoryComboBox:SelectItemByIndex(i, PERFORM_CALLBACK)
+ break
+ end
+ end
+end
+
+function HelpAskForHelp_Keyboard:SelectSubcategory(subcategory)
+ local categoryIndex = self.helpCategoryComboBox:GetSelectedItemData().index
+
+ local mainArray = HELP_ASK_FOR_HELP_CATEGORY_INFO[categoryIndex]
+ if mainArray and mainArray.subcategories then
+ for i, subcategoryId in ipairs(mainArray.subcategories) do
+ if subcategoryId.value == subcategory then
+ local PERFORM_CALLBACK = false
+ self.helpSubcategoryComboBox:SelectItemByIndex(i, PERFORM_CALLBACK)
+ break
+ end
+ end
+ end
+end
+
+function HelpAskForHelp_Keyboard:SetDetailsText(text)
+ self.details:SetText(text)
+end
+
+function HelpAskForHelp_Keyboard:SetDetailsFromItemLink(itemLink)
+ self:ClearFields()
+ self:SelectCategory(CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_ITEM_ISSUE)
+ self:SetDetailsText(zo_strformat(SI_TOOLTIP_ITEM_NAME, GetItemLinkName(itemLink)))
+end
+
+function HelpAskForHelp_Keyboard:SetDetailsFromQuestName(questName)
+ self:ClearFields()
+ self:SelectCategory(CUSTOMER_SERVICE_ASK_FOR_HELP_CATEGORY_QUEST_ISSUE)
+ self:SetDetailsText(questName)
+end
+
+function HelpAskForHelp_Keyboard:OpenAskForHelp(category, subcategory)
+ HELP_CUSTOMER_SUPPORT_KEYBOARD:OpenScreen(HELP_CUSTOMER_SERVICE_ASK_FOR_HELP_KEYBOARD_FRAGMENT)
+ self:ClearFields()
+
+ if category then
+ self:SelectCategory(category)
+
+ if subcategory then
+ self:SelectSubcategory(subcategory)
+ end
+ end
+end
+
+function HelpAskForHelp_Keyboard:AttemptToSendTicket()
+ ResetCustomerServiceTicket()
+
+ --Populate the ticket fields
+ SetCustomerServiceTicketContactEmail(GetActiveUserEmailAddress())
+
+ --Category and subcategory values must be valid as they enable the submit button to be clicked On
+ local categoryIndex = self.helpCategoryComboBox:GetSelectedItemData().index
+ local mainArray = HELP_ASK_FOR_HELP_CATEGORY_INFO[categoryIndex]
+ local ticketCategory = TICKET_CATEGORY_OTHER
+
+ if mainArray.subcategories then
+ local subcategory = self.helpSubcategoryComboBox:GetSelectedItemData().index
+ ticketCategory = mainArray.subcategories[subcategory].ticketCategory
+ else
+ ticketCategory = mainArray.ticketCategory
+ end
+
+ SetCustomerServiceTicketCategory(ticketCategory)
+
+ if mainArray.detailsRegistrationFunction then
+ local text = self.details:GetText()
+ if mainArray.detailsFormatText then
+ text = mainArray.detailsFormatText(text)
+ end
+ mainArray.detailsRegistrationFunction(text)
+ end
+
+ SetCustomerServiceTicketBody(self.description:GetText())
+
+ ZO_Dialogs_ShowDialog("HELP_CUSTOMER_SERVICE_SUBMITTING_TICKET_DIALOG")
+
+ SubmitCustomerServiceTicket()
+end
+
+function HelpAskForHelp_Keyboard:OnCustomerServiceTicketSubmitted(eventCode, response, success)
+ ZO_Dialogs_ReleaseDialog("HELP_CUSTOMER_SERVICE_SUBMITTING_TICKET_DIALOG")
+
+ if success then
+ ZO_Dialogs_ShowDialog("HELP_ASK_FOR_HELP_SUBMIT_TICKET_SUCCESSFUL_DIALOG", nil, {mainTextParams = {response}})
+
+ self:ClearFields()
+ else
+ ZO_Dialogs_ShowDialog("HELP_CUSTOMER_SERVICE_SUBMIT_TICKET_ERROR_DIALOG", nil, {mainTextParams = {response}})
+ end
+end
+
+--Global XML
+
+function ZO_HelpAskForHelp_Keyboard_OnInitialized(self)
+ HELP_CUSTOMER_SERVICE_ASK_FOR_HELP_KEYBOARD = HelpAskForHelp_Keyboard:New(self)
+end
+
+function ZO_HelpAskForHelp_Keyboard_AttemptToSendTicket()
+ HELP_CUSTOMER_SERVICE_ASK_FOR_HELP_KEYBOARD:AttemptToSendTicket()
+end
+
+function ZO_HelpAskForHelp_OnForumLinkClicked()
+ ZO_Dialogs_ShowDialog("CONFIRM_OPEN_URL_BY_TYPE", ESO_FORUMS_URL_TYPE, ESO_FORUMS_FRONT_FACING_ADDRESS)
+end
\ No newline at end of file