Version 8 #43
|
@ -8,7 +8,7 @@ open PrayerTracker.ViewModels
|
||||||
let edit (m : EditChurch) ctx vi =
|
let edit (m : EditChurch) ctx vi =
|
||||||
let pageTitle = match m.IsNew with true -> "Add a New Church" | false -> "Edit Church"
|
let pageTitle = match m.IsNew with true -> "Add a New Church" | false -> "Edit Church"
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
[ form [ _action "/web/church/save"; _method "post"; _class "pt-center-columns" ] [
|
[ form [ _action "/church/save"; _method "post"; _class "pt-center-columns" ] [
|
||||||
style [ _scoped ] [
|
style [ _scoped ] [
|
||||||
rawText "#name { width: 20rem; } #city { width: 10rem; } #st { width: 3rem; } #interfaceAddress { width: 30rem; }"
|
rawText "#name { width: 20rem; } #city { width: 10rem; } #st { width: 3rem; } #interfaceAddress { width: 30rem; }"
|
||||||
]
|
]
|
||||||
|
@ -82,12 +82,12 @@ let maintain (churches : Church list) (stats : Map<string, ChurchStats>) ctx vi
|
||||||
churches
|
churches
|
||||||
|> List.map (fun ch ->
|
|> List.map (fun ch ->
|
||||||
let chId = flatGuid ch.churchId
|
let chId = flatGuid ch.churchId
|
||||||
let delAction = $"/web/church/{chId}/delete"
|
let delAction = $"/church/{chId}/delete"
|
||||||
let delPrompt = s["Are you sure you want to delete this {0}? This action cannot be undone.",
|
let delPrompt = s["Are you sure you want to delete this {0}? This action cannot be undone.",
|
||||||
$"""{s["Church"].Value.ToLower ()} ({ch.name})"""]
|
$"""{s["Church"].Value.ToLower ()} ({ch.name})"""]
|
||||||
tr [] [
|
tr [] [
|
||||||
td [] [
|
td [] [
|
||||||
a [ _href $"/web/church/{chId}/edit"; _title s["Edit This Church"].Value ] [ icon "edit" ]
|
a [ _href $"/church/{chId}/edit"; _title s["Edit This Church"].Value ] [ icon "edit" ]
|
||||||
a [ _href delAction
|
a [ _href delAction
|
||||||
_title s["Delete This Church"].Value
|
_title s["Delete This Church"].Value
|
||||||
_onclick $"return PT.confirmDelete('{delAction}','{delPrompt}')" ]
|
_onclick $"return PT.confirmDelete('{delAction}','{delPrompt}')" ]
|
||||||
|
@ -104,7 +104,7 @@ let maintain (churches : Church list) (stats : Map<string, ChurchStats>) ctx vi
|
||||||
]
|
]
|
||||||
[ div [ _class "pt-center-text" ] [
|
[ div [ _class "pt-center-text" ] [
|
||||||
br []
|
br []
|
||||||
a [ _href $"/web/church/{emptyGuid}/edit"; _title s["Add a New Church"].Value ]
|
a [ _href $"/church/{emptyGuid}/edit"; _title s["Add a New Church"].Value ]
|
||||||
[ icon "add_circle"; rawText " "; locStr s["Add a New Church"] ]
|
[ icon "add_circle"; rawText " "; locStr s["Add a New Church"] ]
|
||||||
br []
|
br []
|
||||||
br []
|
br []
|
||||||
|
|
|
@ -202,7 +202,7 @@ let termsOfService vi =
|
||||||
use sw = new StringWriter ()
|
use sw = new StringWriter ()
|
||||||
let raw = rawLocText sw
|
let raw = rawLocText sw
|
||||||
let ppLink =
|
let ppLink =
|
||||||
a [ _href "/web/legal/privacy-policy" ] [ str (s["Privacy Policy"].Value.ToLower ()) ]
|
a [ _href "/legal/privacy-policy" ] [ str (s["Privacy Policy"].Value.ToLower ()) ]
|
||||||
|> renderHtmlString
|
|> renderHtmlString
|
||||||
|
|
||||||
[ p [ _class "pt-right-text" ] [ small [] [ em [] [ raw l["(as of May 24, 2018)"] ] ] ]
|
[ p [ _class "pt-right-text" ] [ small [] [ em [] [ raw l["(as of May 24, 2018)"] ] ] ]
|
||||||
|
|
|
@ -23,22 +23,25 @@ module Navigation =
|
||||||
match m.User with
|
match m.User with
|
||||||
| Some u ->
|
| Some u ->
|
||||||
li [ _class "dropdown" ] [
|
li [ _class "dropdown" ] [
|
||||||
a [ _class "dropbtn"; _role "button"; _aria "label" s["Requests"].Value; _title s["Requests"].Value ]
|
a [ _class "dropbtn"
|
||||||
|
_role "button"
|
||||||
|
_aria "label" s["Requests"].Value
|
||||||
|
_title s["Requests"].Value ]
|
||||||
[ icon "question_answer"; space; locStr s["Requests"]; space; icon "keyboard_arrow_down" ]
|
[ icon "question_answer"; space; locStr s["Requests"]; space; icon "keyboard_arrow_down" ]
|
||||||
div [ _class "dropdown-content"; _role "menu" ] [
|
div [ _class "dropdown-content"; _role "menu" ] [
|
||||||
a [ _href "/web/prayer-requests" ] [ icon "compare_arrows"; menuSpacer; locStr s["Maintain"] ]
|
a [ _href "/prayer-requests" ] [ icon "compare_arrows"; menuSpacer; locStr s["Maintain"] ]
|
||||||
a [ _href "/web/prayer-requests/view" ] [ icon "list"; menuSpacer; locStr s["View List"] ]
|
a [ _href "/prayer-requests/view" ] [ icon "list"; menuSpacer; locStr s["View List"] ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
li [ _class "dropdown" ] [
|
li [ _class "dropdown" ] [
|
||||||
a [ _class "dropbtn"; _role "button"; _aria "label" s["Group"].Value; _title s["Group"].Value ]
|
a [ _class "dropbtn"; _role "button"; _aria "label" s["Group"].Value; _title s["Group"].Value ]
|
||||||
[ icon "group"; space; locStr s["Group"]; space; icon "keyboard_arrow_down" ]
|
[ icon "group"; space; locStr s["Group"]; space; icon "keyboard_arrow_down" ]
|
||||||
div [ _class "dropdown-content"; _role "menu" ] [
|
div [ _class "dropdown-content"; _role "menu" ] [
|
||||||
a [ _href "/web/small-group/members" ]
|
a [ _href "/small-group/members" ]
|
||||||
[ icon "email"; menuSpacer; locStr s["Maintain Group Members"] ]
|
[ icon "email"; menuSpacer; locStr s["Maintain Group Members"] ]
|
||||||
a [ _href "/web/small-group/announcement" ]
|
a [ _href "/small-group/announcement" ]
|
||||||
[ icon "send"; menuSpacer; locStr s["Send Announcement"] ]
|
[ icon "send"; menuSpacer; locStr s["Send Announcement"] ]
|
||||||
a [ _href "/web/small-group/preferences" ]
|
a [ _href "/small-group/preferences" ]
|
||||||
[ icon "build"; menuSpacer; locStr s["Change Preferences"] ]
|
[ icon "build"; menuSpacer; locStr s["Change Preferences"] ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
@ -50,16 +53,16 @@ module Navigation =
|
||||||
_title s["Administration"].Value
|
_title s["Administration"].Value
|
||||||
] [ icon "settings"; space; locStr s["Administration"]; space; icon "keyboard_arrow_down" ]
|
] [ icon "settings"; space; locStr s["Administration"]; space; icon "keyboard_arrow_down" ]
|
||||||
div [ _class "dropdown-content"; _role "menu" ] [
|
div [ _class "dropdown-content"; _role "menu" ] [
|
||||||
a [ _href "/web/churches" ] [ icon "home"; menuSpacer; locStr s["Churches"] ]
|
a [ _href "/churches" ] [ icon "home"; menuSpacer; locStr s["Churches"] ]
|
||||||
a [ _href "/web/small-groups" ] [ icon "send"; menuSpacer; locStr s["Groups"] ]
|
a [ _href "/small-groups" ] [ icon "send"; menuSpacer; locStr s["Groups"] ]
|
||||||
a [ _href "/web/users" ] [ icon "build"; menuSpacer; locStr s["Users"] ]
|
a [ _href "/users" ] [ icon "build"; menuSpacer; locStr s["Users"] ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
| None ->
|
| None ->
|
||||||
match m.Group with
|
match m.Group with
|
||||||
| Some _ ->
|
| Some _ ->
|
||||||
li [] [
|
li [] [
|
||||||
a [ _href "/web/prayer-requests/view"
|
a [ _href "/prayer-requests/view"
|
||||||
_aria "label" s["View Request List"].Value
|
_aria "label" s["View Request List"].Value
|
||||||
_title s["View Request List"].Value
|
_title s["View Request List"].Value
|
||||||
] [ icon "list"; space; locStr s["View Request List"] ]
|
] [ icon "list"; space; locStr s["View Request List"] ]
|
||||||
|
@ -72,12 +75,12 @@ module Navigation =
|
||||||
_title s["Log On"].Value
|
_title s["Log On"].Value
|
||||||
] [ icon "security"; space; locStr s["Log On"]; space; icon "keyboard_arrow_down" ]
|
] [ icon "security"; space; locStr s["Log On"]; space; icon "keyboard_arrow_down" ]
|
||||||
div [ _class "dropdown-content"; _role "menu" ] [
|
div [ _class "dropdown-content"; _role "menu" ] [
|
||||||
a [ _href "/web/user/log-on" ] [ icon "person"; menuSpacer; locStr s["User"] ]
|
a [ _href "/user/log-on" ] [ icon "person"; menuSpacer; locStr s["User"] ]
|
||||||
a [ _href "/web/small-group/log-on" ] [ icon "group"; menuSpacer; locStr s["Group"] ]
|
a [ _href "/small-group/log-on" ] [ icon "group"; menuSpacer; locStr s["Group"] ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
li [] [
|
li [] [
|
||||||
a [ _href "/web/prayer-requests/lists"
|
a [ _href "/prayer-requests/lists"
|
||||||
_aria "label" s["View Request List"].Value
|
_aria "label" s["View Request List"].Value
|
||||||
_title s["View Request List"].Value
|
_title s["View Request List"].Value
|
||||||
] [ icon "list"; space; locStr s["View Request List"] ]
|
] [ icon "list"; space; locStr s["View Request List"] ]
|
||||||
|
@ -96,14 +99,14 @@ module Navigation =
|
||||||
match m.User with
|
match m.User with
|
||||||
| Some _ ->
|
| Some _ ->
|
||||||
li [] [
|
li [] [
|
||||||
a [ _href "/web/user/password"
|
a [ _href "/user/password"
|
||||||
_aria "label" s["Change Your Password"].Value
|
_aria "label" s["Change Your Password"].Value
|
||||||
_title s["Change Your Password"].Value
|
_title s["Change Your Password"].Value
|
||||||
] [ icon "lock"; space; locStr s["Change Your Password"] ]
|
] [ icon "lock"; space; locStr s["Change Your Password"] ]
|
||||||
]
|
]
|
||||||
| None -> ()
|
| None -> ()
|
||||||
li [] [
|
li [] [
|
||||||
a [ _href "/web/log-off"; _aria "label" s["Log Off"].Value; _title s["Log Off"].Value ]
|
a [ _href "/log-off"; _aria "label" s["Log Off"].Value; _title s["Log Off"].Value ]
|
||||||
[ icon "power_settings_new"; space; locStr s["Log Off"] ]
|
[ icon "power_settings_new"; space; locStr s["Log Off"] ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
@ -111,7 +114,7 @@ module Navigation =
|
||||||
header [ _class "pt-title-bar" ] [
|
header [ _class "pt-title-bar" ] [
|
||||||
section [ _class "pt-title-bar-left" ] [
|
section [ _class "pt-title-bar-left" ] [
|
||||||
span [ _class "pt-title-bar-home" ] [
|
span [ _class "pt-title-bar-home" ] [
|
||||||
a [ _href "/web/"; _title s["Home"].Value ] [ locStr s["PrayerTracker"] ]
|
a [ _href "/"; _title s["Home"].Value ] [ locStr s["PrayerTracker"] ]
|
||||||
]
|
]
|
||||||
ul [] leftLinks
|
ul [] leftLinks
|
||||||
]
|
]
|
||||||
|
@ -131,11 +134,11 @@ module Navigation =
|
||||||
| "es" ->
|
| "es" ->
|
||||||
locStr s["Spanish"]
|
locStr s["Spanish"]
|
||||||
rawText " • "
|
rawText " • "
|
||||||
a [ _href "/web/language/en" ] [ locStr s["Change to English"] ]
|
a [ _href "/language/en" ] [ locStr s["Change to English"] ]
|
||||||
| _ ->
|
| _ ->
|
||||||
locStr s["English"]
|
locStr s["English"]
|
||||||
rawText " • "
|
rawText " • "
|
||||||
a [ _href "/web/language/es" ] [ locStr s["Cambie a Español"] ]
|
a [ _href "/language/es" ] [ locStr s["Cambie a Español"] ]
|
||||||
]
|
]
|
||||||
match m.Group with
|
match m.Group with
|
||||||
| Some g ->[
|
| Some g ->[
|
||||||
|
@ -152,7 +155,7 @@ module Navigation =
|
||||||
icon "group"
|
icon "group"
|
||||||
space
|
space
|
||||||
match m.User with
|
match m.User with
|
||||||
| Some _ -> a [ _href "/web/small-group" ] [ strong [] [ str g.name ] ]
|
| Some _ -> a [ _href "/small-group" ] [ strong [] [ str g.name ] ]
|
||||||
| None -> strong [] [ str g.name ]
|
| None -> strong [] [ str g.name ]
|
||||||
rawText " "
|
rawText " "
|
||||||
]
|
]
|
||||||
|
@ -241,9 +244,9 @@ let private htmlFooter m =
|
||||||
let resultTime = TimeSpan(DateTime.Now.Ticks - m.RequestStart).TotalSeconds
|
let resultTime = TimeSpan(DateTime.Now.Ticks - m.RequestStart).TotalSeconds
|
||||||
footer [] [
|
footer [] [
|
||||||
div [ _id "pt-legal" ] [
|
div [ _id "pt-legal" ] [
|
||||||
a [ _href "/web/legal/privacy-policy" ] [ locStr s["Privacy Policy"] ]
|
a [ _href "/legal/privacy-policy" ] [ locStr s["Privacy Policy"] ]
|
||||||
rawText " • "
|
rawText " • "
|
||||||
a [ _href "/web/legal/terms-of-service" ] [ locStr s["Terms of Service"] ]
|
a [ _href "/legal/terms-of-service" ] [ locStr s["Terms of Service"] ]
|
||||||
rawText " • "
|
rawText " • "
|
||||||
a [ _href "https://github.com/bit-badger/PrayerTracker"
|
a [ _href "https://github.com/bit-badger/PrayerTracker"
|
||||||
_title s["View source code and get technical support"].Value
|
_title s["View source code and get technical support"].Value
|
||||||
|
@ -253,7 +256,7 @@ let private htmlFooter m =
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
div [ _id "pt-footer" ] [
|
div [ _id "pt-footer" ] [
|
||||||
a [ _href "/web/"; _style "line-height:28px;" ]
|
a [ _href "/"; _style "line-height:28px;" ]
|
||||||
[ img [ _src $"""/img/%O{s["footer_en"]}.png"""; _alt imgText; _title imgText ] ]
|
[ img [ _src $"""/img/%O{s["footer_en"]}.png"""; _alt imgText; _title imgText ] ]
|
||||||
str m.Version
|
str m.Version
|
||||||
space
|
space
|
||||||
|
|
|
@ -14,7 +14,7 @@ open PrayerTracker.ViewModels
|
||||||
let edit (m : EditRequest) today ctx vi =
|
let edit (m : EditRequest) today ctx vi =
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
let pageTitle = if m.IsNew then "Add a New Request" else "Edit Request"
|
let pageTitle = if m.IsNew then "Add a New Request" else "Edit Request"
|
||||||
[ form [ _action "/web/prayer-request/save"; _method "post"; _class "pt-center-columns" ] [
|
[ form [ _action "/prayer-request/save"; _method "post"; _class "pt-center-columns" ] [
|
||||||
csrfToken ctx
|
csrfToken ctx
|
||||||
input [ _type "hidden"; _name (nameof m.RequestId); _value (flatGuid m.RequestId) ]
|
input [ _type "hidden"; _name (nameof m.RequestId); _value (flatGuid m.RequestId) ]
|
||||||
div [ _class "pt-field-row" ] [
|
div [ _class "pt-field-row" ] [
|
||||||
|
@ -137,10 +137,9 @@ let lists (groups : SmallGroup list) vi =
|
||||||
let grpId = flatGuid grp.smallGroupId
|
let grpId = flatGuid grp.smallGroupId
|
||||||
tr [] [
|
tr [] [
|
||||||
if grp.preferences.isPublic then
|
if grp.preferences.isPublic then
|
||||||
a [ _href $"/web/prayer-requests/{grpId}/list"; _title s["View"].Value ] [ icon "list" ]
|
a [ _href $"/prayer-requests/{grpId}/list"; _title s["View"].Value ] [ icon "list" ]
|
||||||
else
|
else
|
||||||
a [ _href $"/web/small-group/log-on/{grpId}"; _title s["Log On"].Value ]
|
a [ _href $"/small-group/log-on/{grpId}"; _title s["Log On"].Value ] [ icon "verified_user" ]
|
||||||
[ icon "verified_user" ]
|
|
||||||
|> List.singleton
|
|> List.singleton
|
||||||
|> td []
|
|> td []
|
||||||
td [] [ str grp.church.name ]
|
td [] [ str grp.church.name ]
|
||||||
|
@ -174,7 +173,7 @@ let maintain (m : MaintainRequests) (ctx : HttpContext) vi =
|
||||||
|> List.map (fun req ->
|
|> List.map (fun req ->
|
||||||
let reqId = flatGuid req.prayerRequestId
|
let reqId = flatGuid req.prayerRequestId
|
||||||
let reqText = htmlToPlainText req.text
|
let reqText = htmlToPlainText req.text
|
||||||
let delAction = $"/web/prayer-request/{reqId}/delete"
|
let delAction = $"/prayer-request/{reqId}/delete"
|
||||||
let delPrompt =
|
let delPrompt =
|
||||||
[ s["Are you sure you want to delete this {0}? This action cannot be undone.",
|
[ s["Are you sure you want to delete this {0}? This action cannot be undone.",
|
||||||
s["Prayer Request"].Value.ToLower() ].Value
|
s["Prayer Request"].Value.ToLower() ].Value
|
||||||
|
@ -185,14 +184,14 @@ let maintain (m : MaintainRequests) (ctx : HttpContext) vi =
|
||||||
|> String.concat ""
|
|> String.concat ""
|
||||||
tr [] [
|
tr [] [
|
||||||
td [] [
|
td [] [
|
||||||
a [ _href $"/web/prayer-request/{reqId}/edit"; _title l["Edit This Prayer Request"].Value ]
|
a [ _href $"/prayer-request/{reqId}/edit"; _title l["Edit This Prayer Request"].Value ]
|
||||||
[ icon "edit" ]
|
[ icon "edit" ]
|
||||||
if req.isExpired now m.SmallGroup.preferences.daysToExpire then
|
if req.isExpired now m.SmallGroup.preferences.daysToExpire then
|
||||||
a [ _href $"/web/prayer-request/{reqId}/restore"
|
a [ _href $"/prayer-request/{reqId}/restore"
|
||||||
_title l["Restore This Inactive Request"].Value ]
|
_title l["Restore This Inactive Request"].Value ]
|
||||||
[ icon "visibility" ]
|
[ icon "visibility" ]
|
||||||
else
|
else
|
||||||
a [ _href $"/web/prayer-request/{reqId}/expire"
|
a [ _href $"/prayer-request/{reqId}/expire"
|
||||||
_title l["Expire This Request Immediately"].Value ]
|
_title l["Expire This Request Immediately"].Value ]
|
||||||
[ icon "visibility_off" ]
|
[ icon "visibility_off" ]
|
||||||
a [ _href delAction; _title l["Delete This Request"].Value;
|
a [ _href delAction; _title l["Delete This Request"].Value;
|
||||||
|
@ -213,19 +212,19 @@ let maintain (m : MaintainRequests) (ctx : HttpContext) vi =
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
[ div [ _class "pt-center-text" ] [
|
[ div [ _class "pt-center-text" ] [
|
||||||
br []
|
br []
|
||||||
a [ _href $"/web/prayer-request/{emptyGuid}/edit"; _title s["Add a New Request"].Value ]
|
a [ _href $"/prayer-request/{emptyGuid}/edit"; _title s["Add a New Request"].Value ]
|
||||||
[ icon "add_circle"; rawText " "; locStr s["Add a New Request"] ]
|
[ icon "add_circle"; rawText " "; locStr s["Add a New Request"] ]
|
||||||
rawText " "
|
rawText " "
|
||||||
a [ _href "/web/prayer-requests/view"; _title s["View Prayer Request List"].Value ]
|
a [ _href "/prayer-requests/view"; _title s["View Prayer Request List"].Value ]
|
||||||
[ icon "list"; rawText " "; locStr s["View Prayer Request List"] ]
|
[ icon "list"; rawText " "; locStr s["View Prayer Request List"] ]
|
||||||
match m.SearchTerm with
|
match m.SearchTerm with
|
||||||
| Some _ ->
|
| Some _ ->
|
||||||
rawText " "
|
rawText " "
|
||||||
a [ _href "/web/prayer-requests"; _title l["Clear Search Criteria"].Value ]
|
a [ _href "/prayer-requests"; _title l["Clear Search Criteria"].Value ]
|
||||||
[ icon "highlight_off"; rawText " "; raw l["Clear Search Criteria"] ]
|
[ icon "highlight_off"; rawText " "; raw l["Clear Search Criteria"] ]
|
||||||
| None -> ()
|
| None -> ()
|
||||||
]
|
]
|
||||||
form [ _action "/web/prayer-requests"; _method "get"; _class "pt-center-text pt-search-form" ] [
|
form [ _action "/prayer-requests"; _method "get"; _class "pt-center-text pt-search-form" ] [
|
||||||
input [ _type "text"
|
input [ _type "text"
|
||||||
_name "search"
|
_name "search"
|
||||||
_placeholder l["Search requests..."].Value
|
_placeholder l["Search requests..."].Value
|
||||||
|
@ -257,18 +256,18 @@ let maintain (m : MaintainRequests) (ctx : HttpContext) vi =
|
||||||
| Some true ->
|
| Some true ->
|
||||||
raw l["Inactive requests are currently not shown"]
|
raw l["Inactive requests are currently not shown"]
|
||||||
br []
|
br []
|
||||||
a [ _href "/web/prayer-requests/inactive" ] [ raw l["Show Inactive Requests"] ]
|
a [ _href "/prayer-requests/inactive" ] [ raw l["Show Inactive Requests"] ]
|
||||||
| _ ->
|
| _ ->
|
||||||
if defaultArg m.OnlyActive false then
|
if defaultArg m.OnlyActive false then
|
||||||
raw l["Inactive requests are currently shown"]
|
raw l["Inactive requests are currently shown"]
|
||||||
br []
|
br []
|
||||||
a [ _href "/web/prayer-requests" ] [ raw l["Do Not Show Inactive Requests"] ]
|
a [ _href "/prayer-requests" ] [ raw l["Do Not Show Inactive Requests"] ]
|
||||||
br []
|
br []
|
||||||
br []
|
br []
|
||||||
let search = [ match m.SearchTerm with Some s -> "search", s | None -> () ]
|
let search = [ match m.SearchTerm with Some s -> "search", s | None -> () ]
|
||||||
let pg = defaultArg m.PageNbr 1
|
let pg = defaultArg m.PageNbr 1
|
||||||
let url =
|
let url =
|
||||||
match m.OnlyActive with Some true | None -> "" | _ -> "/inactive" |> sprintf "/web/prayer-requests%s"
|
match m.OnlyActive with Some true | None -> "" | _ -> "/inactive" |> sprintf "/prayer-requests%s"
|
||||||
match pg with
|
match pg with
|
||||||
| 1 -> ()
|
| 1 -> ()
|
||||||
| _ ->
|
| _ ->
|
||||||
|
@ -319,7 +318,7 @@ let view m vi =
|
||||||
[ div [ _class "pt-center-text" ] [
|
[ div [ _class "pt-center-text" ] [
|
||||||
br []
|
br []
|
||||||
a [ _class "pt-icon-link"
|
a [ _class "pt-icon-link"
|
||||||
_href $"/web/prayer-requests/print/{dtString}"
|
_href $"/prayer-requests/print/{dtString}"
|
||||||
_title s["View Printable"].Value
|
_title s["View Printable"].Value
|
||||||
] [ icon "print"; rawText " "; locStr s["View Printable"] ]
|
] [ icon "print"; rawText " "; locStr s["View Printable"] ]
|
||||||
if m.CanEmail then
|
if m.CanEmail then
|
||||||
|
@ -329,20 +328,20 @@ let view m vi =
|
||||||
if date.DayOfWeek = DayOfWeek.Sunday then date else findSunday (date.AddDays 1.)
|
if date.DayOfWeek = DayOfWeek.Sunday then date else findSunday (date.AddDays 1.)
|
||||||
let sunday = findSunday m.Date
|
let sunday = findSunday m.Date
|
||||||
a [ _class "pt-icon-link"
|
a [ _class "pt-icon-link"
|
||||||
_href $"""/web/prayer-requests/view/{sunday.ToString "yyyy-MM-dd"}"""
|
_href $"""/prayer-requests/view/{sunday.ToString "yyyy-MM-dd"}"""
|
||||||
_title s["List for Next Sunday"].Value ] [
|
_title s["List for Next Sunday"].Value ] [
|
||||||
icon "update"; rawText " "; locStr s["List for Next Sunday"]
|
icon "update"; rawText " "; locStr s["List for Next Sunday"]
|
||||||
]
|
]
|
||||||
spacer
|
spacer
|
||||||
let emailPrompt = s["This will e-mail the current list to every member of your group, without further prompting. Are you sure this is what you are ready to do?"].Value
|
let emailPrompt = s["This will e-mail the current list to every member of your group, without further prompting. Are you sure this is what you are ready to do?"].Value
|
||||||
a [ _class "pt-icon-link"
|
a [ _class "pt-icon-link"
|
||||||
_href $"/web/prayer-requests/email/{dtString}"
|
_href $"/prayer-requests/email/{dtString}"
|
||||||
_title s["Send via E-mail"].Value
|
_title s["Send via E-mail"].Value
|
||||||
_onclick $"return PT.requests.view.promptBeforeEmail('{emailPrompt}')" ] [
|
_onclick $"return PT.requests.view.promptBeforeEmail('{emailPrompt}')" ] [
|
||||||
icon "mail_outline"; rawText " "; locStr s["Send via E-mail"]
|
icon "mail_outline"; rawText " "; locStr s["Send via E-mail"]
|
||||||
]
|
]
|
||||||
spacer
|
spacer
|
||||||
a [ _class "pt-icon-link"; _href "/web/prayer-requests"; _title s["Maintain Prayer Requests"].Value ] [
|
a [ _class "pt-icon-link"; _href "/prayer-requests"; _title s["Maintain Prayer Requests"].Value ] [
|
||||||
icon "compare_arrows"; rawText " "; locStr s["Maintain Prayer Requests"]
|
icon "compare_arrows"; rawText " "; locStr s["Maintain Prayer Requests"]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
|
@ -12,7 +12,7 @@ let announcement isAdmin ctx vi =
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
let m = { SendToClass = ""; Text = ""; AddToRequestList = None; RequestType = None }
|
let m = { SendToClass = ""; Text = ""; AddToRequestList = None; RequestType = None }
|
||||||
let reqTypes = ReferenceList.requestTypeList s
|
let reqTypes = ReferenceList.requestTypeList s
|
||||||
[ form [ _action "/web/small-group/announcement/send"; _method "post"; _class "pt-center-columns" ] [
|
[ form [ _action "/small-group/announcement/send"; _method "post"; _class "pt-center-columns" ] [
|
||||||
csrfToken ctx
|
csrfToken ctx
|
||||||
div [ _class "pt-field-row" ] [
|
div [ _class "pt-field-row" ] [
|
||||||
div [ _class "pt-field pt-editor" ] [
|
div [ _class "pt-field pt-editor" ] [
|
||||||
|
@ -74,7 +74,7 @@ let announcementSent (m : Announcement) vi =
|
||||||
let edit (m : EditSmallGroup) (churches : Church list) ctx vi =
|
let edit (m : EditSmallGroup) (churches : Church list) ctx vi =
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
let pageTitle = if m.IsNew then "Add a New Group" else "Edit Group"
|
let pageTitle = if m.IsNew then "Add a New Group" else "Edit Group"
|
||||||
form [ _action "/web/small-group/save"; _method "post"; _class "pt-center-columns" ] [
|
form [ _action "/small-group/save"; _method "post"; _class "pt-center-columns" ] [
|
||||||
csrfToken ctx
|
csrfToken ctx
|
||||||
input [ _type "hidden"; _name (nameof m.SmallGroupId); _value (flatGuid m.SmallGroupId) ]
|
input [ _type "hidden"; _name (nameof m.SmallGroupId); _value (flatGuid m.SmallGroupId) ]
|
||||||
div [ _class "pt-field-row" ] [
|
div [ _class "pt-field-row" ] [
|
||||||
|
@ -104,7 +104,7 @@ let edit (m : EditSmallGroup) (churches : Church list) ctx vi =
|
||||||
let editMember (m : EditMember) (types : (string * LocalizedString) seq) ctx vi =
|
let editMember (m : EditMember) (types : (string * LocalizedString) seq) ctx vi =
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
let pageTitle = if m.IsNew then "Add a New Group Member" else "Edit Group Member"
|
let pageTitle = if m.IsNew then "Add a New Group Member" else "Edit Group Member"
|
||||||
form [ _action "/web/small-group/member/save"; _method "post"; _class "pt-center-columns" ] [
|
form [ _action "/small-group/member/save"; _method "post"; _class "pt-center-columns" ] [
|
||||||
style [ _scoped ] [ rawText "#name { width: 15rem; } #email { width: 20rem; }" ]
|
style [ _scoped ] [ rawText "#name { width: 15rem; } #email { width: 20rem; }" ]
|
||||||
csrfToken ctx
|
csrfToken ctx
|
||||||
input [ _type "hidden"; _name (nameof m.MemberId); _value (flatGuid m.MemberId) ]
|
input [ _type "hidden"; _name (nameof m.MemberId); _value (flatGuid m.MemberId) ]
|
||||||
|
@ -137,7 +137,7 @@ let editMember (m : EditMember) (types : (string * LocalizedString) seq) ctx vi
|
||||||
let logOn (groups : SmallGroup list) grpId ctx vi =
|
let logOn (groups : SmallGroup list) grpId ctx vi =
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
let m = { SmallGroupId = System.Guid.Empty; Password = ""; RememberMe = None }
|
let m = { SmallGroupId = System.Guid.Empty; Password = ""; RememberMe = None }
|
||||||
[ form [ _action "/web/small-group/log-on/submit"; _method "post"; _class "pt-center-columns" ] [
|
[ form [ _action "/small-group/log-on/submit"; _method "post"; _class "pt-center-columns" ] [
|
||||||
csrfToken ctx
|
csrfToken ctx
|
||||||
div [ _class "pt-field-row" ] [
|
div [ _class "pt-field-row" ] [
|
||||||
div [ _class "pt-field" ] [
|
div [ _class "pt-field" ] [
|
||||||
|
@ -195,12 +195,12 @@ let maintain (groups : SmallGroup list) ctx vi =
|
||||||
groups
|
groups
|
||||||
|> List.map (fun g ->
|
|> List.map (fun g ->
|
||||||
let grpId = flatGuid g.smallGroupId
|
let grpId = flatGuid g.smallGroupId
|
||||||
let delAction = $"/web/small-group/{grpId}/delete"
|
let delAction = $"/small-group/{grpId}/delete"
|
||||||
let delPrompt = s["Are you sure you want to delete this {0}? This action cannot be undone.",
|
let delPrompt = s["Are you sure you want to delete this {0}? This action cannot be undone.",
|
||||||
$"""{s["Small Group"].Value.ToLower ()} ({g.name})""" ].Value
|
$"""{s["Small Group"].Value.ToLower ()} ({g.name})""" ].Value
|
||||||
tr [] [
|
tr [] [
|
||||||
td [] [
|
td [] [
|
||||||
a [ _href $"/web/small-group/{grpId}/edit"; _title s["Edit This Group"].Value ]
|
a [ _href $"/small-group/{grpId}/edit"; _title s["Edit This Group"].Value ]
|
||||||
[ icon "edit" ]
|
[ icon "edit" ]
|
||||||
a [ _href delAction
|
a [ _href delAction
|
||||||
_title s["Delete This Group"].Value
|
_title s["Delete This Group"].Value
|
||||||
|
@ -215,7 +215,7 @@ let maintain (groups : SmallGroup list) ctx vi =
|
||||||
]
|
]
|
||||||
[ div [ _class "pt-center-text" ] [
|
[ div [ _class "pt-center-text" ] [
|
||||||
br []
|
br []
|
||||||
a [ _href $"/web/small-group/{emptyGuid}/edit"; _title s["Add a New Group"].Value ] [
|
a [ _href $"/small-group/{emptyGuid}/edit"; _title s["Add a New Group"].Value ] [
|
||||||
icon "add_circle"
|
icon "add_circle"
|
||||||
rawText " "
|
rawText " "
|
||||||
locStr s["Add a New Group"]
|
locStr s["Add a New Group"]
|
||||||
|
@ -250,13 +250,13 @@ let members (members : Member list) (emailTyps : Map<string, LocalizedString>) c
|
||||||
members
|
members
|
||||||
|> List.map (fun mbr ->
|
|> List.map (fun mbr ->
|
||||||
let mbrId = flatGuid mbr.memberId
|
let mbrId = flatGuid mbr.memberId
|
||||||
let delAction = $"/web/small-group/member/{mbrId}/delete"
|
let delAction = $"/small-group/member/{mbrId}/delete"
|
||||||
let delPrompt =
|
let delPrompt =
|
||||||
s["Are you sure you want to delete this {0}? This action cannot be undone.", s["group member"]]
|
s["Are you sure you want to delete this {0}? This action cannot be undone.", s["group member"]]
|
||||||
.Value.Replace("?", $" ({mbr.memberName})?")
|
.Value.Replace("?", $" ({mbr.memberName})?")
|
||||||
tr [] [
|
tr [] [
|
||||||
td [] [
|
td [] [
|
||||||
a [ _href $"/web/small-group/member/{mbrId}/edit"; _title s["Edit This Group Member"].Value ]
|
a [ _href $"/small-group/member/{mbrId}/edit"; _title s["Edit This Group Member"].Value ]
|
||||||
[ icon "edit" ]
|
[ icon "edit" ]
|
||||||
a [ _href delAction
|
a [ _href delAction
|
||||||
_title s["Delete This Group Member"].Value
|
_title s["Delete This Group Member"].Value
|
||||||
|
@ -271,7 +271,7 @@ let members (members : Member list) (emailTyps : Map<string, LocalizedString>) c
|
||||||
]
|
]
|
||||||
[ div [ _class"pt-center-text" ] [
|
[ div [ _class"pt-center-text" ] [
|
||||||
br []
|
br []
|
||||||
a [ _href $"/web/small-group/member/{emptyGuid}/edit"; _title s["Add a New Group Member"].Value ]
|
a [ _href $"/small-group/member/{emptyGuid}/edit"; _title s["Add a New Group Member"].Value ]
|
||||||
[ icon "add_circle"; rawText " "; locStr s["Add a New Group Member"] ]
|
[ icon "add_circle"; rawText " "; locStr s["Add a New Group Member"] ]
|
||||||
br []
|
br []
|
||||||
br []
|
br []
|
||||||
|
@ -296,12 +296,12 @@ let overview m vi =
|
||||||
locStr s["Quick Actions"]
|
locStr s["Quick Actions"]
|
||||||
]
|
]
|
||||||
div [] [
|
div [] [
|
||||||
a [ _href "/web/prayer-requests/view" ]
|
a [ _href "/prayer-requests/view" ]
|
||||||
[ icon "list"; linkSpacer; locStr s["View Prayer Request List"] ]
|
[ icon "list"; linkSpacer; locStr s["View Prayer Request List"] ]
|
||||||
hr []
|
hr []
|
||||||
a [ _href "/web/small-group/announcement" ] [ icon "send"; linkSpacer; locStr s["Send Announcement"] ]
|
a [ _href "/small-group/announcement" ] [ icon "send"; linkSpacer; locStr s["Send Announcement"] ]
|
||||||
hr []
|
hr []
|
||||||
a [ _href "/web/small-group/preferences" ] [ icon "build"; linkSpacer; locStr s["Change Preferences"] ]
|
a [ _href "/small-group/preferences" ] [ icon "build"; linkSpacer; locStr s["Change Preferences"] ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
section [] [
|
section [] [
|
||||||
|
@ -324,7 +324,7 @@ let overview m vi =
|
||||||
space
|
space
|
||||||
locStr s["Total Requests"]
|
locStr s["Total Requests"]
|
||||||
hr []
|
hr []
|
||||||
a [ _href "/web/prayer-requests/maintain" ] [
|
a [ _href "/prayer-requests/maintain" ] [
|
||||||
icon "compare_arrows"
|
icon "compare_arrows"
|
||||||
linkSpacer
|
linkSpacer
|
||||||
locStr s["Maintain Prayer Requests"]
|
locStr s["Maintain Prayer Requests"]
|
||||||
|
@ -339,7 +339,7 @@ let overview m vi =
|
||||||
div [ _class "pt-center-text" ] [
|
div [ _class "pt-center-text" ] [
|
||||||
strong [] [ str (m.TotalMembers.ToString "N0"); space; locStr s["Members"] ]
|
strong [] [ str (m.TotalMembers.ToString "N0"); space; locStr s["Members"] ]
|
||||||
hr []
|
hr []
|
||||||
a [ _href "/web/small-group/members" ] [ icon "email"; linkSpacer; locStr s["Maintain Group Members"] ]
|
a [ _href "/small-group/members" ] [ icon "email"; linkSpacer; locStr s["Maintain Group Members"] ]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
@ -354,7 +354,7 @@ let preferences (m : EditPreferences) (tzs : TimeZone list) ctx vi =
|
||||||
let l = I18N.forView "SmallGroup/Preferences"
|
let l = I18N.forView "SmallGroup/Preferences"
|
||||||
use sw = new StringWriter ()
|
use sw = new StringWriter ()
|
||||||
let raw = rawLocText sw
|
let raw = rawLocText sw
|
||||||
[ form [ _action "/web/small-group/preferences/save"; _method "post"; _class "pt-center-columns" ] [
|
[ form [ _action "/small-group/preferences/save"; _method "post"; _class "pt-center-columns" ] [
|
||||||
style [ _scoped ]
|
style [ _scoped ]
|
||||||
[ rawText "#expireDays, #daysToKeepNew, #longTermUpdateWeeks, #headingFontSize, #listFontSize, #pageSize { width: 3rem; } #emailFromAddress { width: 20rem; } #fonts { width: 40rem; } @media screen and (max-width: 40rem) { #fonts { width: 100%; } }" ]
|
[ rawText "#expireDays, #daysToKeepNew, #longTermUpdateWeeks, #headingFontSize, #listFontSize, #pageSize { width: 3rem; } #emailFromAddress { width: 20rem; } #fonts { width: 40rem; } @media screen and (max-width: 40rem) { #fonts { width: 100%; } }" ]
|
||||||
csrfToken ctx
|
csrfToken ctx
|
||||||
|
|
|
@ -8,7 +8,7 @@ open PrayerTracker.ViewModels
|
||||||
let assignGroups m groups curGroups ctx vi =
|
let assignGroups m groups curGroups ctx vi =
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
let pageTitle = sprintf "%s • %A" m.UserName s["Assign Groups"]
|
let pageTitle = sprintf "%s • %A" m.UserName s["Assign Groups"]
|
||||||
form [ _action "/web/user/small-groups/save"; _method "post"; _class "pt-center-columns" ] [
|
form [ _action "/user/small-groups/save"; _method "post"; _class "pt-center-columns" ] [
|
||||||
csrfToken ctx
|
csrfToken ctx
|
||||||
input [ _type "hidden"; _name (nameof m.UserId); _value (flatGuid m.UserId) ]
|
input [ _type "hidden"; _name (nameof m.UserId); _value (flatGuid m.UserId) ]
|
||||||
input [ _type "hidden"; _name (nameof m.UserName); _value m.UserName ]
|
input [ _type "hidden"; _name (nameof m.UserName); _value m.UserName ]
|
||||||
|
@ -48,7 +48,7 @@ let changePassword ctx vi =
|
||||||
[ p [ _class "pt-center-text" ] [
|
[ p [ _class "pt-center-text" ] [
|
||||||
locStr s["To change your password, enter your current password in the specified box below, then enter your new password twice."]
|
locStr s["To change your password, enter your current password in the specified box below, then enter your new password twice."]
|
||||||
]
|
]
|
||||||
form [ _action "/web/user/password/change"
|
form [ _action "/user/password/change"
|
||||||
_method "post"
|
_method "post"
|
||||||
_onsubmit $"""return PT.compareValidation('newPassword','newPasswordConfirm','%A{s["The passwords do not match"]}')""" ] [
|
_onsubmit $"""return PT.compareValidation('newPassword','newPasswordConfirm','%A{s["The passwords do not match"]}')""" ] [
|
||||||
style [ _scoped ] [ rawText "#oldPassword, #newPassword, #newPasswordConfirm { width: 10rem; } "]
|
style [ _scoped ] [ rawText "#oldPassword, #newPassword, #newPasswordConfirm { width: 10rem; } "]
|
||||||
|
@ -84,7 +84,7 @@ let edit (m : EditUser) ctx vi =
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
let pageTitle = if m.IsNew then "Add a New User" else "Edit User"
|
let pageTitle = if m.IsNew then "Add a New User" else "Edit User"
|
||||||
let pwPlaceholder = s[if m.IsNew then "" else "No change"].Value
|
let pwPlaceholder = s[if m.IsNew then "" else "No change"].Value
|
||||||
[ form [ _action "/web/user/edit/save"; _method "post"; _class "pt-center-columns"
|
[ form [ _action "/user/edit/save"; _method "post"; _class "pt-center-columns"
|
||||||
_onsubmit $"""return PT.compareValidation('password','passwordConfirm','%A{s["The passwords do not match"]}')""" ] [
|
_onsubmit $"""return PT.compareValidation('password','passwordConfirm','%A{s["The passwords do not match"]}')""" ] [
|
||||||
style [ _scoped ]
|
style [ _scoped ]
|
||||||
[ rawText "#firstName, #lastName, #password, #passwordConfirm { width: 10rem; } #email { width: 20rem; } " ]
|
[ rawText "#firstName, #lastName, #password, #passwordConfirm { width: 10rem; } #email { width: 20rem; } " ]
|
||||||
|
@ -141,7 +141,7 @@ let edit (m : EditUser) ctx vi =
|
||||||
/// View for the user log on page
|
/// View for the user log on page
|
||||||
let logOn (m : UserLogOn) groups ctx vi =
|
let logOn (m : UserLogOn) groups ctx vi =
|
||||||
let s = I18N.localizer.Force ()
|
let s = I18N.localizer.Force ()
|
||||||
form [ _action "/web/user/log-on"; _method "post"; _class "pt-center-columns" ] [
|
form [ _action "/user/log-on"; _method "post"; _class "pt-center-columns" ] [
|
||||||
style [ _scoped ] [ rawText "#email { width: 20rem; }" ]
|
style [ _scoped ] [ rawText "#email { width: 20rem; }" ]
|
||||||
csrfToken ctx
|
csrfToken ctx
|
||||||
input [ _type "hidden"; _name (nameof m.RedirectUrl); _value (defaultArg m.RedirectUrl "") ]
|
input [ _type "hidden"; _name (nameof m.RedirectUrl); _value (defaultArg m.RedirectUrl "") ]
|
||||||
|
@ -200,13 +200,13 @@ let maintain (users : User list) ctx vi =
|
||||||
users
|
users
|
||||||
|> List.map (fun user ->
|
|> List.map (fun user ->
|
||||||
let userId = flatGuid user.userId
|
let userId = flatGuid user.userId
|
||||||
let delAction = $"/web/user/{userId}/delete"
|
let delAction = $"/user/{userId}/delete"
|
||||||
let delPrompt = s["Are you sure you want to delete this {0}? This action cannot be undone.",
|
let delPrompt = s["Are you sure you want to delete this {0}? This action cannot be undone.",
|
||||||
$"""{s["User"].Value.ToLower ()} ({user.fullName})"""].Value
|
$"""{s["User"].Value.ToLower ()} ({user.fullName})"""].Value
|
||||||
tr [] [
|
tr [] [
|
||||||
td [] [
|
td [] [
|
||||||
a [ _href $"/web/user/{userId}/edit"; _title s["Edit This User"].Value ] [ icon "edit" ]
|
a [ _href $"/user/{userId}/edit"; _title s["Edit This User"].Value ] [ icon "edit" ]
|
||||||
a [ _href $"/web/user/{userId}/small-groups"; _title s["Assign Groups to This User"].Value ]
|
a [ _href $"/user/{userId}/small-groups"; _title s["Assign Groups to This User"].Value ]
|
||||||
[ icon "group" ]
|
[ icon "group" ]
|
||||||
a [ _href delAction
|
a [ _href delAction
|
||||||
_title s["Delete This User"].Value
|
_title s["Delete This User"].Value
|
||||||
|
@ -222,7 +222,7 @@ let maintain (users : User list) ctx vi =
|
||||||
]
|
]
|
||||||
[ div [ _class "pt-center-text" ] [
|
[ div [ _class "pt-center-text" ] [
|
||||||
br []
|
br []
|
||||||
a [ _href $"/web/user/{emptyGuid}/edit"; _title s["Add a New User"].Value ]
|
a [ _href $"/user/{emptyGuid}/edit"; _title s["Add a New User"].Value ]
|
||||||
[ icon "add_circle"; rawText " "; locStr s["Add a New User"] ]
|
[ icon "add_circle"; rawText " "; locStr s["Add a New User"] ]
|
||||||
br []
|
br []
|
||||||
br []
|
br []
|
||||||
|
|
|
@ -62,88 +62,88 @@ module Configure =
|
||||||
ServiceLifetime.Scoped, ServiceLifetime.Singleton)
|
ServiceLifetime.Scoped, ServiceLifetime.Singleton)
|
||||||
()
|
()
|
||||||
|
|
||||||
|
let noWeb : HttpHandler = fun next ctx ->
|
||||||
|
redirectTo true ($"""/{string ctx.Request.RouteValues["path"]}""") next ctx
|
||||||
|
|
||||||
/// Routes for PrayerTracker
|
/// Routes for PrayerTracker
|
||||||
let routes = [
|
let routes = [
|
||||||
subRoute "/web" [
|
route "/web/{**path}" noWeb
|
||||||
GET_HEAD [
|
GET_HEAD [
|
||||||
subRoute "/church" [
|
subRoute "/church" [
|
||||||
route "es" Handlers.Church.maintain
|
route "es" Handlers.Church.maintain
|
||||||
routef "/%O/edit" Handlers.Church.edit
|
routef "/%O/edit" Handlers.Church.edit
|
||||||
]
|
|
||||||
route "/class/logon" (redirectTo true "/web/small-group/log-on")
|
|
||||||
routef "/error/%s" Handlers.Home.error
|
|
||||||
routef "/language/%s" Handlers.Home.language
|
|
||||||
subRoute "/legal" [
|
|
||||||
route "/privacy-policy" Handlers.Home.privacyPolicy
|
|
||||||
route "/terms-of-service" Handlers.Home.tos
|
|
||||||
]
|
|
||||||
route "/log-off" Handlers.Home.logOff
|
|
||||||
subRoute "/prayer-request" [
|
|
||||||
route "s" (Handlers.PrayerRequest.maintain true)
|
|
||||||
routef "s/email/%s" Handlers.PrayerRequest.email
|
|
||||||
route "s/inactive" (Handlers.PrayerRequest.maintain false)
|
|
||||||
route "s/lists" Handlers.PrayerRequest.lists
|
|
||||||
routef "s/%O/list" Handlers.PrayerRequest.list
|
|
||||||
route "s/maintain" (redirectTo true "/web/prayer-requests")
|
|
||||||
routef "s/print/%s" Handlers.PrayerRequest.print
|
|
||||||
route "s/view" (Handlers.PrayerRequest.view None)
|
|
||||||
routef "s/view/%s" (Some >> Handlers.PrayerRequest.view)
|
|
||||||
routef "/%O/edit" Handlers.PrayerRequest.edit
|
|
||||||
routef "/%O/expire" Handlers.PrayerRequest.expire
|
|
||||||
routef "/%O/restore" Handlers.PrayerRequest.restore
|
|
||||||
]
|
|
||||||
subRoute "/small-group" [
|
|
||||||
route "" Handlers.SmallGroup.overview
|
|
||||||
route "s" Handlers.SmallGroup.maintain
|
|
||||||
route "/announcement" Handlers.SmallGroup.announcement
|
|
||||||
routef "/%O/edit" Handlers.SmallGroup.edit
|
|
||||||
route "/log-on" (Handlers.SmallGroup.logOn None)
|
|
||||||
routef "/log-on/%O" (Some >> Handlers.SmallGroup.logOn)
|
|
||||||
route "/logon" (redirectTo true "/web/small-group/log-on")
|
|
||||||
routef "/member/%O/edit" Handlers.SmallGroup.editMember
|
|
||||||
route "/members" Handlers.SmallGroup.members
|
|
||||||
route "/preferences" Handlers.SmallGroup.preferences
|
|
||||||
]
|
|
||||||
route "/unauthorized" Handlers.Home.unauthorized
|
|
||||||
subRoute "/user" [
|
|
||||||
route "s" Handlers.User.maintain
|
|
||||||
routef "/%O/edit" Handlers.User.edit
|
|
||||||
routef "/%O/small-groups" Handlers.User.smallGroups
|
|
||||||
route "/log-on" Handlers.User.logOn
|
|
||||||
route "/logon" (redirectTo true "/web/user/log-on")
|
|
||||||
route "/password" Handlers.User.password
|
|
||||||
]
|
|
||||||
route "/" Handlers.Home.homePage
|
|
||||||
]
|
]
|
||||||
POST [
|
route "/class/logon" (redirectTo true "/small-group/log-on")
|
||||||
subRoute "/church" [
|
routef "/error/%s" Handlers.Home.error
|
||||||
routef "/%O/delete" Handlers.Church.delete
|
routef "/language/%s" Handlers.Home.language
|
||||||
route "/save" Handlers.Church.save
|
subRoute "/legal" [
|
||||||
]
|
route "/privacy-policy" Handlers.Home.privacyPolicy
|
||||||
subRoute "/prayer-request" [
|
route "/terms-of-service" Handlers.Home.tos
|
||||||
routef "/%O/delete" Handlers.PrayerRequest.delete
|
]
|
||||||
route "/save" Handlers.PrayerRequest.save
|
route "/log-off" Handlers.Home.logOff
|
||||||
]
|
subRoute "/prayer-request" [
|
||||||
subRoute "/small-group" [
|
route "s" (Handlers.PrayerRequest.maintain true)
|
||||||
route "/announcement/send" Handlers.SmallGroup.sendAnnouncement
|
routef "s/email/%s" Handlers.PrayerRequest.email
|
||||||
routef "/%O/delete" Handlers.SmallGroup.delete
|
route "s/inactive" (Handlers.PrayerRequest.maintain false)
|
||||||
route "/log-on/submit" Handlers.SmallGroup.logOnSubmit
|
route "s/lists" Handlers.PrayerRequest.lists
|
||||||
routef "/member/%O/delete" Handlers.SmallGroup.deleteMember
|
routef "s/%O/list" Handlers.PrayerRequest.list
|
||||||
route "/member/save" Handlers.SmallGroup.saveMember
|
route "s/maintain" (redirectTo true "/prayer-requests")
|
||||||
route "/preferences/save" Handlers.SmallGroup.savePreferences
|
routef "s/print/%s" Handlers.PrayerRequest.print
|
||||||
route "/save" Handlers.SmallGroup.save
|
route "s/view" (Handlers.PrayerRequest.view None)
|
||||||
]
|
routef "s/view/%s" (Some >> Handlers.PrayerRequest.view)
|
||||||
subRoute "/user" [
|
routef "/%O/edit" Handlers.PrayerRequest.edit
|
||||||
routef "/%O/delete" Handlers.User.delete
|
routef "/%O/expire" Handlers.PrayerRequest.expire
|
||||||
route "/edit/save" Handlers.User.save
|
routef "/%O/restore" Handlers.PrayerRequest.restore
|
||||||
route "/log-on" Handlers.User.doLogOn
|
]
|
||||||
route "/password/change" Handlers.User.changePassword
|
subRoute "/small-group" [
|
||||||
route "/small-groups/save" Handlers.User.saveGroups
|
route "" Handlers.SmallGroup.overview
|
||||||
]
|
route "s" Handlers.SmallGroup.maintain
|
||||||
|
route "/announcement" Handlers.SmallGroup.announcement
|
||||||
|
routef "/%O/edit" Handlers.SmallGroup.edit
|
||||||
|
route "/log-on" (Handlers.SmallGroup.logOn None)
|
||||||
|
routef "/log-on/%O" (Some >> Handlers.SmallGroup.logOn)
|
||||||
|
route "/logon" (redirectTo true "/small-group/log-on")
|
||||||
|
routef "/member/%O/edit" Handlers.SmallGroup.editMember
|
||||||
|
route "/members" Handlers.SmallGroup.members
|
||||||
|
route "/preferences" Handlers.SmallGroup.preferences
|
||||||
|
]
|
||||||
|
route "/unauthorized" Handlers.Home.unauthorized
|
||||||
|
subRoute "/user" [
|
||||||
|
route "s" Handlers.User.maintain
|
||||||
|
routef "/%O/edit" Handlers.User.edit
|
||||||
|
routef "/%O/small-groups" Handlers.User.smallGroups
|
||||||
|
route "/log-on" Handlers.User.logOn
|
||||||
|
route "/logon" (redirectTo true "/user/log-on")
|
||||||
|
route "/password" Handlers.User.password
|
||||||
|
]
|
||||||
|
route "/" Handlers.Home.homePage
|
||||||
|
]
|
||||||
|
POST [
|
||||||
|
subRoute "/church" [
|
||||||
|
routef "/%O/delete" Handlers.Church.delete
|
||||||
|
route "/save" Handlers.Church.save
|
||||||
|
]
|
||||||
|
subRoute "/prayer-request" [
|
||||||
|
routef "/%O/delete" Handlers.PrayerRequest.delete
|
||||||
|
route "/save" Handlers.PrayerRequest.save
|
||||||
|
]
|
||||||
|
subRoute "/small-group" [
|
||||||
|
route "/announcement/send" Handlers.SmallGroup.sendAnnouncement
|
||||||
|
routef "/%O/delete" Handlers.SmallGroup.delete
|
||||||
|
route "/log-on/submit" Handlers.SmallGroup.logOnSubmit
|
||||||
|
routef "/member/%O/delete" Handlers.SmallGroup.deleteMember
|
||||||
|
route "/member/save" Handlers.SmallGroup.saveMember
|
||||||
|
route "/preferences/save" Handlers.SmallGroup.savePreferences
|
||||||
|
route "/save" Handlers.SmallGroup.save
|
||||||
|
]
|
||||||
|
subRoute "/user" [
|
||||||
|
routef "/%O/delete" Handlers.User.delete
|
||||||
|
route "/edit/save" Handlers.User.save
|
||||||
|
route "/log-on" Handlers.User.doLogOn
|
||||||
|
route "/password/change" Handlers.User.changePassword
|
||||||
|
route "/small-groups/save" Handlers.User.saveGroups
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
// Temp redirect to new URLs
|
|
||||||
route "/" (redirectTo false "/web/")
|
|
||||||
]
|
]
|
||||||
|
|
||||||
/// Giraffe error handler
|
/// Giraffe error handler
|
||||||
|
|
|
@ -28,7 +28,7 @@ let delete churchId : HttpHandler = requireAccess [ Admin ] >=> validateCSRF >=>
|
||||||
addInfo ctx
|
addInfo ctx
|
||||||
s["The church {0} and its {1} small groups (with {2} prayer request(s)) were deleted successfully; revoked access from {3} user(s)",
|
s["The church {0} and its {1} small groups (with {2} prayer request(s)) were deleted successfully; revoked access from {3} user(s)",
|
||||||
church.name, stats.smallGroups, stats.prayerRequests, stats.users]
|
church.name, stats.smallGroups, stats.prayerRequests, stats.users]
|
||||||
return! redirectTo false "/web/churches" next ctx
|
return! redirectTo false "/churches" next ctx
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ let save : HttpHandler = requireAccess [ Admin ] >=> validateCSRF >=> fun next c
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
let act = s[if m.IsNew then "Added" else "Updated"].Value.ToLower ()
|
let act = s[if m.IsNew then "Added" else "Updated"].Value.ToLower ()
|
||||||
addInfo ctx s["Successfully {0} church “{1}”", act, m.Name]
|
addInfo ctx s["Successfully {0} church “{1}”", act, m.Name]
|
||||||
return! redirectTo false "/web/churches" next ctx
|
return! redirectTo false "/churches" next ctx
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,17 +234,17 @@ let requireAccess level : HttpHandler =
|
||||||
| false ->
|
| false ->
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
addError ctx s["You are not authorized to view the requested page."]
|
addError ctx s["You are not authorized to view the requested page."]
|
||||||
return! redirectTo false "/web/unauthorized" next ctx
|
return! redirectTo false "/unauthorized" next ctx
|
||||||
| _ when level |> List.contains User ->
|
| _ when level |> List.contains User ->
|
||||||
// Redirect to the user log on page
|
// Redirect to the user log on page
|
||||||
ctx.Session.SetString (Key.Session.redirectUrl, ctx.Request.GetEncodedUrl ())
|
ctx.Session.SetString (Key.Session.redirectUrl, ctx.Request.GetEncodedUrl ())
|
||||||
return! redirectTo false "/web/user/log-on" next ctx
|
return! redirectTo false "/user/log-on" next ctx
|
||||||
| _ when level |> List.contains Group ->
|
| _ when level |> List.contains Group ->
|
||||||
// Redirect to the small group log on page
|
// Redirect to the small group log on page
|
||||||
ctx.Session.SetString (Key.Session.redirectUrl, ctx.Request.GetEncodedUrl ())
|
ctx.Session.SetString (Key.Session.redirectUrl, ctx.Request.GetEncodedUrl ())
|
||||||
return! redirectTo false "/web/small-group/log-on" next ctx
|
return! redirectTo false "/small-group/log-on" next ctx
|
||||||
| _ ->
|
| _ ->
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
addError ctx s["You are not authorized to view the requested page."]
|
addError ctx s["You are not authorized to view the requested page."]
|
||||||
return! redirectTo false "/web/unauthorized" next ctx
|
return! redirectTo false "/unauthorized" next ctx
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ let language culture : HttpHandler = requireAccess [ AccessLevel.Public ] >=> fu
|
||||||
CookieRequestCultureProvider.MakeCookieValue (RequestCulture c),
|
CookieRequestCultureProvider.MakeCookieValue (RequestCulture c),
|
||||||
CookieOptions (Expires = Nullable<DateTimeOffset> (DateTimeOffset (DateTime.Now.AddYears 1))))
|
CookieOptions (Expires = Nullable<DateTimeOffset> (DateTimeOffset (DateTime.Now.AddYears 1))))
|
||||||
| _ -> ()
|
| _ -> ()
|
||||||
let url = match string ctx.Request.Headers["Referer"] with null | "" -> "/web/" | r -> r
|
let url = match string ctx.Request.Headers["Referer"] with null | "" -> "/" | r -> r
|
||||||
redirectTo false url next ctx
|
redirectTo false url next ctx
|
||||||
|
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ let logOff : HttpHandler = requireAccess [ AccessLevel.Public ] >=> fun next ctx
|
||||||
Key.Cookie.logOffCookies |> List.iter ctx.Response.Cookies.Delete
|
Key.Cookie.logOffCookies |> List.iter ctx.Response.Cookies.Delete
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
addHtmlInfo ctx s["Log Off Successful • Have a nice day!"]
|
addHtmlInfo ctx s["Log Off Successful • Have a nice day!"]
|
||||||
redirectTo false "/web/" next ctx
|
redirectTo false "/" next ctx
|
||||||
|
|
||||||
|
|
||||||
/// GET /unauthorized
|
/// GET /unauthorized
|
||||||
|
|
|
@ -16,7 +16,7 @@ let private findRequest (ctx : HttpContext) reqId = task {
|
||||||
| Some _ ->
|
| Some _ ->
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
addError ctx s["The prayer request you tried to access is not assigned to your group"]
|
addError ctx s["The prayer request you tried to access is not assigned to your group"]
|
||||||
return Result.Error (redirectTo false "/web/unauthorized")
|
return Result.Error (redirectTo false "/unauthorized")
|
||||||
| None -> return Result.Error fourOhFour
|
| None -> return Result.Error fourOhFour
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ let delete reqId : HttpHandler = requireAccess [ User ] >=> validateCSRF >=> fun
|
||||||
ctx.db.PrayerRequests.Remove req |> ignore
|
ctx.db.PrayerRequests.Remove req |> ignore
|
||||||
let! _ = ctx.db.SaveChangesAsync ()
|
let! _ = ctx.db.SaveChangesAsync ()
|
||||||
addInfo ctx s["The prayer request was deleted successfully"]
|
addInfo ctx s["The prayer request was deleted successfully"]
|
||||||
return! redirectTo false "/web/prayer-requests" next ctx
|
return! redirectTo false "/prayer-requests" next ctx
|
||||||
| Result.Error e -> return! e next ctx
|
| Result.Error e -> return! e next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ let expire reqId : HttpHandler = requireAccess [ User ] >=> fun next ctx -> task
|
||||||
ctx.db.UpdateEntry { req with expiration = Forced }
|
ctx.db.UpdateEntry { req with expiration = Forced }
|
||||||
let! _ = ctx.db.SaveChangesAsync ()
|
let! _ = ctx.db.SaveChangesAsync ()
|
||||||
addInfo ctx s["Successfully {0} prayer request", s["Expired"].Value.ToLower ()]
|
addInfo ctx s["Successfully {0} prayer request", s["Expired"].Value.ToLower ()]
|
||||||
return! redirectTo false "/web/prayer-requests" next ctx
|
return! redirectTo false "/prayer-requests" next ctx
|
||||||
| Result.Error e -> return! e next ctx
|
| Result.Error e -> return! e next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ let list groupId : HttpHandler = requireAccess [ AccessLevel.Public ] >=> fun ne
|
||||||
| Some _ ->
|
| Some _ ->
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
addError ctx s["The request list for the group you tried to view is not public."]
|
addError ctx s["The request list for the group you tried to view is not public."]
|
||||||
return! redirectTo false "/web/unauthorized" next ctx
|
return! redirectTo false "/unauthorized" next ctx
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ let restore reqId : HttpHandler = requireAccess [ User ] >=> fun next ctx -> tas
|
||||||
ctx.db.UpdateEntry { req with expiration = Automatic; updatedDate = DateTime.Now }
|
ctx.db.UpdateEntry { req with expiration = Automatic; updatedDate = DateTime.Now }
|
||||||
let! _ = ctx.db.SaveChangesAsync ()
|
let! _ = ctx.db.SaveChangesAsync ()
|
||||||
addInfo ctx s["Successfully {0} prayer request", s["Restored"].Value.ToLower ()]
|
addInfo ctx s["Successfully {0} prayer request", s["Restored"].Value.ToLower ()]
|
||||||
return! redirectTo false "/web/prayer-requests" next ctx
|
return! redirectTo false "/prayer-requests" next ctx
|
||||||
| Result.Error e -> return! e next ctx
|
| Result.Error e -> return! e next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ let save : HttpHandler = requireAccess [ User ] >=> validateCSRF >=> fun next ct
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
let act = if m.IsNew then "Added" else "Updated"
|
let act = if m.IsNew then "Added" else "Updated"
|
||||||
addInfo ctx s["Successfully {0} prayer request", s[act].Value.ToLower ()]
|
addInfo ctx s["Successfully {0} prayer request", s[act].Value.ToLower ()]
|
||||||
return! redirectTo false "/web/prayer-requests" next ctx
|
return! redirectTo false "/prayer-requests" next ctx
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ let delete groupId : HttpHandler = requireAccess [ Admin ] >=> validateCSRF >=>
|
||||||
addInfo ctx
|
addInfo ctx
|
||||||
s["The group {0} and its {1} prayer request(s) were deleted successfully; revoked access from {2} user(s)",
|
s["The group {0} and its {1} prayer request(s) were deleted successfully; revoked access from {2} user(s)",
|
||||||
grp.name, reqs, users]
|
grp.name, reqs, users]
|
||||||
return! redirectTo false "/web/small-groups" next ctx
|
return! redirectTo false "/small-groups" next ctx
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ let deleteMember memberId : HttpHandler = requireAccess [ User ] >=> validateCSR
|
||||||
ctx.db.RemoveEntry mbr
|
ctx.db.RemoveEntry mbr
|
||||||
let! _ = ctx.db.SaveChangesAsync ()
|
let! _ = ctx.db.SaveChangesAsync ()
|
||||||
addHtmlInfo ctx s["The group member “{0}” was deleted successfully", mbr.memberName]
|
addHtmlInfo ctx s["The group member “{0}” was deleted successfully", mbr.memberName]
|
||||||
return! redirectTo false "/web/small-group/members" next ctx
|
return! redirectTo false "/small-group/members" next ctx
|
||||||
| Some _
|
| Some _
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
}
|
}
|
||||||
|
@ -122,10 +122,10 @@ let logOnSubmit : HttpHandler = requireAccess [ AccessLevel.Public ] >=> validat
|
||||||
ctx.Session.smallGroup <- Some grp
|
ctx.Session.smallGroup <- Some grp
|
||||||
if defaultArg m.RememberMe false then (setGroupCookie ctx << sha1Hash) m.Password
|
if defaultArg m.RememberMe false then (setGroupCookie ctx << sha1Hash) m.Password
|
||||||
addInfo ctx s["Log On Successful • Welcome to {0}", s["PrayerTracker"]]
|
addInfo ctx s["Log On Successful • Welcome to {0}", s["PrayerTracker"]]
|
||||||
return! redirectTo false "/web/prayer-requests/view" next ctx
|
return! redirectTo false "/prayer-requests/view" next ctx
|
||||||
| None ->
|
| None ->
|
||||||
addError ctx s["Password incorrect - login unsuccessful"]
|
addError ctx s["Password incorrect - login unsuccessful"]
|
||||||
return! redirectTo false $"/web/small-group/log-on/{flatGuid m.SmallGroupId}" next ctx
|
return! redirectTo false $"/small-group/log-on/{flatGuid m.SmallGroupId}" next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ let save : HttpHandler = requireAccess [ Admin ] >=> validateCSRF >=> fun next c
|
||||||
let! _ = ctx.db.SaveChangesAsync ()
|
let! _ = ctx.db.SaveChangesAsync ()
|
||||||
let act = s[if m.IsNew then "Added" else "Updated"].Value.ToLower ()
|
let act = s[if m.IsNew then "Added" else "Updated"].Value.ToLower ()
|
||||||
addHtmlInfo ctx s["Successfully {0} group “{1}”", act, m.Name]
|
addHtmlInfo ctx s["Successfully {0} group “{1}”", act, m.Name]
|
||||||
return! redirectTo false "/web/small-groups" next ctx
|
return! redirectTo false "/small-groups" next ctx
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,7 @@ let saveMember : HttpHandler = requireAccess [ User ] >=> validateCSRF >=> fun n
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
let act = s[if m.IsNew then "Added" else "Updated"].Value.ToLower ()
|
let act = s[if m.IsNew then "Added" else "Updated"].Value.ToLower ()
|
||||||
addInfo ctx s["Successfully {0} group member", act]
|
addInfo ctx s["Successfully {0} group member", act]
|
||||||
return! redirectTo false "/web/small-group/members" next ctx
|
return! redirectTo false "/small-group/members" next ctx
|
||||||
| Some _
|
| Some _
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
|
@ -261,7 +261,7 @@ let savePreferences : HttpHandler = requireAccess [ User ] >=> validateCSRF >=>
|
||||||
ctx.Session.smallGroup <- Some { grp with preferences = prefs }
|
ctx.Session.smallGroup <- Some { grp with preferences = prefs }
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
addInfo ctx s["Group preferences updated successfully"]
|
addInfo ctx s["Group preferences updated successfully"]
|
||||||
return! redirectTo false "/web/small-group/preferences" next ctx
|
return! redirectTo false "/small-group/preferences" next ctx
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,13 +69,13 @@ let changePassword : HttpHandler = requireAccess [ User ] >=> validateCSRF >=> f
|
||||||
if ctx.Request.Cookies.Keys.Contains Key.Cookie.user then setUserCookie ctx usr.passwordHash
|
if ctx.Request.Cookies.Keys.Contains Key.Cookie.user then setUserCookie ctx usr.passwordHash
|
||||||
addInfo ctx s["Your password was changed successfully"]
|
addInfo ctx s["Your password was changed successfully"]
|
||||||
| None -> addError ctx s["Unable to change password"]
|
| None -> addError ctx s["Unable to change password"]
|
||||||
return! redirectTo false "/web/" next ctx
|
return! redirectTo false "/" next ctx
|
||||||
| Some _ ->
|
| Some _ ->
|
||||||
addError ctx s["The new passwords did not match - your password was NOT changed"]
|
addError ctx s["The new passwords did not match - your password was NOT changed"]
|
||||||
return! redirectTo false "/web/user/password" next ctx
|
return! redirectTo false "/user/password" next ctx
|
||||||
| None ->
|
| None ->
|
||||||
addError ctx s["The old password was incorrect - your password was NOT changed"]
|
addError ctx s["The old password was incorrect - your password was NOT changed"]
|
||||||
return! redirectTo false "/web/user/password" next ctx
|
return! redirectTo false "/user/password" next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ let delete userId : HttpHandler = requireAccess [ Admin ] >=> validateCSRF >=> f
|
||||||
let! _ = ctx.db.SaveChangesAsync ()
|
let! _ = ctx.db.SaveChangesAsync ()
|
||||||
let s = Views.I18N.localizer.Force ()
|
let s = Views.I18N.localizer.Force ()
|
||||||
addInfo ctx s["Successfully deleted user {0}", user.fullName]
|
addInfo ctx s["Successfully deleted user {0}", user.fullName]
|
||||||
return! redirectTo false "/web/users" next ctx
|
return! redirectTo false "/users" next ctx
|
||||||
| _ -> return! fourOhFour next ctx
|
| _ -> return! fourOhFour next ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,8 +108,8 @@ let doLogOn : HttpHandler = requireAccess [ AccessLevel.Public ] >=> validateCSR
|
||||||
if defaultArg m.RememberMe false then setUserCookie ctx pwHash
|
if defaultArg m.RememberMe false then setUserCookie ctx pwHash
|
||||||
addHtmlInfo ctx s["Log On Successful • Welcome to {0}", s["PrayerTracker"]]
|
addHtmlInfo ctx s["Log On Successful • Welcome to {0}", s["PrayerTracker"]]
|
||||||
match m.RedirectUrl with
|
match m.RedirectUrl with
|
||||||
| None -> "/web/small-group"
|
| None -> "/small-group"
|
||||||
| Some x when x = "" -> "/web/small-group"
|
| Some x when x = "" -> "/small-group"
|
||||||
| Some x -> x
|
| Some x -> x
|
||||||
| _ ->
|
| _ ->
|
||||||
let grpName = match grp with Some g -> g.name | _ -> "N/A"
|
let grpName = match grp with Some g -> g.name | _ -> "N/A"
|
||||||
|
@ -130,7 +130,7 @@ let doLogOn : HttpHandler = requireAccess [ AccessLevel.Public ] >=> validateCSR
|
||||||
|> (HtmlString >> Some)
|
|> (HtmlString >> Some)
|
||||||
}
|
}
|
||||||
|> addUserMessage ctx
|
|> addUserMessage ctx
|
||||||
"/web/user/log-on"
|
"/user/log-on"
|
||||||
return! redirectTo false nextUrl next ctx
|
return! redirectTo false nextUrl next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
@ -225,10 +225,10 @@ let save : HttpHandler = requireAccess [ Admin ] >=> validateCSRF >=> fun next c
|
||||||
|> Some
|
|> Some
|
||||||
}
|
}
|
||||||
|> addUserMessage ctx
|
|> addUserMessage ctx
|
||||||
return! redirectTo false $"/web/user/{flatGuid u.userId}/small-groups" next ctx
|
return! redirectTo false $"/user/{flatGuid u.userId}/small-groups" next ctx
|
||||||
else
|
else
|
||||||
addInfo ctx s["Successfully {0} user", s["Updated"].Value.ToLower ()]
|
addInfo ctx s["Successfully {0} user", s["Updated"].Value.ToLower ()]
|
||||||
return! redirectTo false "/web/users" next ctx
|
return! redirectTo false "/users" next ctx
|
||||||
| None -> return! fourOhFour next ctx
|
| None -> return! fourOhFour next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
@ -242,7 +242,7 @@ let saveGroups : HttpHandler = requireAccess [ Admin ] >=> validateCSRF >=> fun
|
||||||
match Seq.length m.SmallGroups with
|
match Seq.length m.SmallGroups with
|
||||||
| 0 ->
|
| 0 ->
|
||||||
addError ctx s["You must select at least one group to assign"]
|
addError ctx s["You must select at least one group to assign"]
|
||||||
return! redirectTo false $"/web/user/{flatGuid m.UserId}/small-groups" next ctx
|
return! redirectTo false $"/user/{flatGuid m.UserId}/small-groups" next ctx
|
||||||
| _ ->
|
| _ ->
|
||||||
match! ctx.db.TryUserByIdWithGroups m.UserId with
|
match! ctx.db.TryUserByIdWithGroups m.UserId with
|
||||||
| Some user ->
|
| Some user ->
|
||||||
|
@ -261,7 +261,7 @@ let saveGroups : HttpHandler = requireAccess [ Admin ] >=> validateCSRF >=> fun
|
||||||
|> List.iter ctx.db.AddEntry
|
|> List.iter ctx.db.AddEntry
|
||||||
let! _ = ctx.db.SaveChangesAsync ()
|
let! _ = ctx.db.SaveChangesAsync ()
|
||||||
addInfo ctx s["Successfully updated group permissions for {0}", m.UserName]
|
addInfo ctx s["Successfully updated group permissions for {0}", m.UserName]
|
||||||
return! redirectTo false "/web/users" next ctx
|
return! redirectTo false "/users" next ctx
|
||||||
| _ -> return! fourOhFour next ctx
|
| _ -> return! fourOhFour next ctx
|
||||||
| Result.Error e -> return! bindError e next ctx
|
| Result.Error e -> return! bindError e next ctx
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user