diff --git a/lib/teiserver/account/libs/accolade_lib.ex b/lib/teiserver/account/libs/accolade_lib.ex index a26fe26ff..03d21b5b3 100644 --- a/lib/teiserver/account/libs/accolade_lib.ex +++ b/lib/teiserver/account/libs/accolade_lib.ex @@ -356,6 +356,33 @@ defmodule Teiserver.Account.AccoladeLib do end) end + @spec get_giveable_accolade_types(boolean()) :: [map()] + def get_giveable_accolade_types(is_ally?) do + restriction = + if is_ally? do + "Ally" + else + "Enemy" + end + + query = + "select id, name, icon, colour from teiserver_account_badge_types tabt + where (restriction in ($1) or restriction is null) and purpose = 'Accolade' +order by name;" + + results = Ecto.Adapters.SQL.query!(Repo, query, [restriction]) + + results.rows + |> Enum.map(fn [id, name, icon, colour] -> + %{ + id: id, + name: name, + icon: icon, + colour: colour + } + end) + end + @spec get_player_accolades(T.userid()) :: map() def get_player_accolades(userid) do Account.list_accolades(search: [recipient_id: userid, has_badge: true]) diff --git a/lib/teiserver/account/libs/badge_type_lib.ex b/lib/teiserver/account/libs/badge_type_lib.ex index 72d1f485a..5d048a5a8 100644 --- a/lib/teiserver/account/libs/badge_type_lib.ex +++ b/lib/teiserver/account/libs/badge_type_lib.ex @@ -28,6 +28,14 @@ defmodule Teiserver.Account.BadgeTypeLib do "Role" ] + @spec restriction_list() :: [String.t()] + def restriction_list(), + do: [ + nil, + "Ally", + "Enemy" + ] + @spec make_favourite(map()) :: map() def make_favourite(badge_type) do %{ diff --git a/lib/teiserver/account/schemas/badge_type.ex b/lib/teiserver/account/schemas/badge_type.ex index b8be49b0a..d1b458e56 100644 --- a/lib/teiserver/account/schemas/badge_type.ex +++ b/lib/teiserver/account/schemas/badge_type.ex @@ -6,8 +6,8 @@ defmodule Teiserver.Account.BadgeType do field :icon, :string field :colour, :string field :description, :string - field :purpose, :string + field :restriction, :string timestamps() end @@ -22,7 +22,7 @@ defmodule Teiserver.Account.BadgeType do |> trim_strings(~w(name description)a) struct - |> cast(params, ~w(name icon colour purpose description)a) + |> cast(params, ~w(name icon colour purpose description restriction)a) |> validate_required(~w(name icon colour purpose)a) end diff --git a/lib/teiserver_web/live/battles/match/show.ex b/lib/teiserver_web/live/battles/match/show.ex index 1acd625d4..24ea87b12 100644 --- a/lib/teiserver_web/live/battles/match/show.ex +++ b/lib/teiserver_web/live/battles/match/show.ex @@ -465,11 +465,18 @@ defmodule TeiserverWeb.Battle.MatchLive.Show do def handle_event( "give-accolade", - %{"recipient_id" => recipient_id, "recipient_name" => recipient_name}, + params, socket ) do + recipient_id = params["recipient_id"] + recipient_name = params["recipient_name"] + current_user_team_id = params["current_user_team_id"] + recipient_team_id = params["recipient_team_id"] + + is_ally? = current_user_team_id == recipient_team_id + badge_types = - Account.list_accolade_types() + AccoladeLib.get_giveable_accolade_types(is_ally?) gift_limit = Config.get_site_config_cache("teiserver.Accolade gift limit") gift_window = Config.get_site_config_cache("teiserver.Accolade gift window") @@ -637,6 +644,9 @@ defmodule TeiserverWeb.Battle.MatchLive.Show do <% end %> + + Cancel + diff --git a/lib/teiserver_web/live/battles/match/show.html.heex b/lib/teiserver_web/live/battles/match/show.html.heex index f7a6ba4e3..918b63a21 100644 --- a/lib/teiserver_web/live/battles/match/show.html.heex +++ b/lib/teiserver_web/live/battles/match/show.html.heex @@ -258,10 +258,10 @@ phx-click="give-accolade" phx-value-recipient_name={m.user.name} phx-value-recipient_id={m.user.id} + phx-value-current_user_team_id={@current_user_team_id} + phx-value-recipient_team_id={m.team_id} class={[ - "btn btn-sm btn-success", - @current_user_team_id && m.team_id != @current_user_team_id && - "invisible" + "btn btn-sm btn-success" ]} > diff --git a/lib/teiserver_web/templates/admin/badge_type/form.html.heex b/lib/teiserver_web/templates/admin/badge_type/form.html.heex index c89fb5071..1c9471aa3 100644 --- a/lib/teiserver_web/templates/admin/badge_type/form.html.heex +++ b/lib/teiserver_web/templates/admin/badge_type/form.html.heex @@ -44,6 +44,11 @@ <%= select(f, :purpose, purpose_list(), class: "form-control") %> + +