initial route for ICS retrieval, no actual ICS data yet
This commit is contained in:
parent
873723d776
commit
8fe1bc6322
8 changed files with 44 additions and 41 deletions
|
@ -39,6 +39,10 @@ defmodule Shift73k.Accounts do
|
||||||
Repo.get_by(User, email: email)
|
Repo.get_by(User, email: email)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_user_by_calendar_slug(slug) when is_binary(slug) do
|
||||||
|
Repo.get_by(User, calendar_slug: slug)
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Gets a user by email and password.
|
Gets a user by email and password.
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ defmodule Shift73kWeb.UserShiftsCsvController do
|
||||||
alias Shift73k.Shifts.Shift
|
alias Shift73k.Shifts.Shift
|
||||||
|
|
||||||
def new(conn, _params) do
|
def new(conn, _params) do
|
||||||
render(conn, "new.html", error_message: nil)
|
render(conn, "new.html")
|
||||||
end
|
end
|
||||||
|
|
||||||
def export(conn, %{"csv_export" => request_params}) do
|
def export(conn, %{"csv_export" => request_params}) do
|
||||||
|
|
16
lib/shift73k_web/controllers/user_shifts_ics_controller.ex
Normal file
16
lib/shift73k_web/controllers/user_shifts_ics_controller.ex
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
defmodule Shift73kWeb.UserShiftsIcsController do
|
||||||
|
use Shift73kWeb, :controller
|
||||||
|
|
||||||
|
alias Shift73k.Accounts
|
||||||
|
alias Shift73k.Accounts.User
|
||||||
|
|
||||||
|
def index(conn, %{"slug" => slug}) do
|
||||||
|
case Accounts.get_user_by_calendar_slug(slug) do
|
||||||
|
%User{} = user ->
|
||||||
|
render(conn, "index.html", slug: slug, user: user)
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
send_resp(conn, 404, "Not found")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -9,24 +9,8 @@ defmodule Shift73kWeb.UserLive.Settings.CalendarUrl do
|
||||||
|> assign(id: assigns.id)
|
|> assign(id: assigns.id)
|
||||||
|> assign(current_user: user)
|
|> assign(current_user: user)
|
||||||
|> live_okreply()
|
|> live_okreply()
|
||||||
|
|
||||||
# |> assign(form_week_start_at: user.week_start_at)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# def week_start_options do
|
|
||||||
# week_start = Date.beginning_of_week(Date.utc_today(), hd(weekdays()))
|
|
||||||
|
|
||||||
# week_start
|
|
||||||
# |> Date.range(Date.add(week_start, 6))
|
|
||||||
# |> Enum.map(&Calendar.strftime(&1, "%A"))
|
|
||||||
# |> Enum.zip(weekdays())
|
|
||||||
# end
|
|
||||||
|
|
||||||
# @impl true
|
|
||||||
# def handle_event("changed", %{"calendar_view" => %{"week_start_at" => day}}, socket) do
|
|
||||||
# {:noreply, assign(socket, form_week_start_at: String.to_existing_atom(day))}
|
|
||||||
# end
|
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_event("save", _params, socket) do
|
def handle_event("save", _params, socket) do
|
||||||
Accounts.change_user_calendar_slug(socket.assigns.current_user.id)
|
Accounts.change_user_calendar_slug(socket.assigns.current_user.id)
|
||||||
|
|
|
@ -8,26 +8,4 @@
|
||||||
<%= submit "Generate new", class: "btn btn-primary" %>
|
<%= submit "Generate new", class: "btn btn-primary" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%#= form_for :calendar_view, "#", [phx_change: :changed, phx_submit: :save, phx_target: @myself], fn cvf -> %>
|
|
||||||
|
|
||||||
<%#= label cvf, :week_start_at, class: "form-label" %>
|
|
||||||
<%# <div class="inner-addon left-addon mb-3"> %>
|
|
||||||
<%#= icon_div @socket, "bi-calendar2-range", [class: "icon is-left text-muted fs-5"] %>
|
|
||||||
<%#= select cvf, :week_start_at, week_start_options(),
|
|
||||||
value: @current_user.week_start_at,
|
|
||||||
class: "form-select"
|
|
||||||
%>
|
|
||||||
<%# </div> %>
|
|
||||||
|
|
||||||
<%# <div class="mb-3"> %>
|
|
||||||
<%#= submit "Save",
|
|
||||||
class: "btn btn-primary",
|
|
||||||
disabled: @form_week_start_at == @current_user.week_start_at,
|
|
||||||
aria_disabled: (@form_week_start_at == @current_user.week_start_at) && "true" || false,
|
|
||||||
phx_disable_with: "Saving..."
|
|
||||||
%>
|
|
||||||
<%# </div> %>
|
|
||||||
|
|
||||||
<%# end %>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -59,6 +59,7 @@ defmodule Shift73kWeb.Router do
|
||||||
scope "/", Shift73kWeb do
|
scope "/", Shift73kWeb do
|
||||||
pipe_through([:browser, :redirect_if_user_is_authenticated])
|
pipe_through([:browser, :redirect_if_user_is_authenticated])
|
||||||
|
|
||||||
|
# session routes, irrelevant if user is authenticated
|
||||||
get("/users/register", UserRegistrationController, :new)
|
get("/users/register", UserRegistrationController, :new)
|
||||||
get("/users/log_in", UserSessionController, :new)
|
get("/users/log_in", UserSessionController, :new)
|
||||||
post("/users/log_in", UserSessionController, :create)
|
post("/users/log_in", UserSessionController, :create)
|
||||||
|
@ -70,21 +71,25 @@ defmodule Shift73kWeb.Router do
|
||||||
scope "/", Shift73kWeb do
|
scope "/", Shift73kWeb do
|
||||||
pipe_through([:browser, :require_authenticated_user])
|
pipe_through([:browser, :require_authenticated_user])
|
||||||
|
|
||||||
# # liveview user settings
|
# user settings (change email, password, calendar week start, etc)
|
||||||
live("/users/settings", UserLive.Settings, :edit)
|
live("/users/settings", UserLive.Settings, :edit)
|
||||||
|
|
||||||
# original user routes from phx.gen.auth
|
# confirm email by token
|
||||||
get("/users/settings/confirm_email/:token", UserSettingsController, :confirm_email)
|
get("/users/settings/confirm_email/:token", UserSettingsController, :confirm_email)
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/", Shift73kWeb do
|
scope "/", Shift73kWeb do
|
||||||
pipe_through([:browser])
|
pipe_through([:browser])
|
||||||
|
|
||||||
|
# session paths
|
||||||
delete("/users/log_out", UserSessionController, :delete)
|
delete("/users/log_out", UserSessionController, :delete)
|
||||||
get("/users/force_logout", UserSessionController, :force_logout)
|
get("/users/force_logout", UserSessionController, :force_logout)
|
||||||
get("/users/confirm", UserConfirmationController, :new)
|
get("/users/confirm", UserConfirmationController, :new)
|
||||||
post("/users/confirm", UserConfirmationController, :create)
|
post("/users/confirm", UserConfirmationController, :create)
|
||||||
get("/users/confirm/:token", UserConfirmationController, :confirm)
|
get("/users/confirm/:token", UserConfirmationController, :confirm)
|
||||||
|
|
||||||
|
# ics/ical route for user's shifts
|
||||||
|
get("/ics/:slug", UserShiftsIcsController, :index)
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/", Shift73kWeb do
|
scope "/", Shift73kWeb do
|
||||||
|
|
13
lib/shift73k_web/templates/user_shifts_ics/index.html.eex
Normal file
13
lib/shift73k_web/templates/user_shifts_ics/index.html.eex
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-12 col-md-10 col-xl-8">
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<%= icon_div @conn, "bi-calendar2", [class: "icon baseline"] %>
|
||||||
|
User Shifts ICS
|
||||||
|
</h2>
|
||||||
|
<p class="lead">Shifts for user: <%= @user.email %></p>
|
||||||
|
<p>Calendar slug: <%= @slug %></p>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
3
lib/shift73k_web/views/user_shifts_ics_view.ex
Normal file
3
lib/shift73k_web/views/user_shifts_ics_view.ex
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
defmodule Shift73kWeb.UserShiftsIcsView do
|
||||||
|
use Shift73kWeb, :view
|
||||||
|
end
|
Loading…
Reference in a new issue