Skip to content

Commit

Permalink
Merge pull request #671 from DFE-Digital/bug-title-subpage
Browse files Browse the repository at this point in the history
Add sub page/tab to browser title and standardise browser title construction
  • Loading branch information
dynamictulip authored Dec 18, 2024
2 parents 5a30c6e + 617d8fa commit d8b5b5f
Show file tree
Hide file tree
Showing 70 changed files with 802 additions and 442 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

- Added download for Ofsted specific data to Ofsted pages

### Changed

- Fixed browser titles so they include the name of the sub page and are all formatted in a consistent way

## [Release-16][release-16] (production-2024-12-13.4477)

### Changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,37 @@
using DfE.FindInformationAcademiesTrusts.Services.Trust;
using Microsoft.AspNetCore.Mvc;

namespace DfE.FindInformationAcademiesTrusts.Pages.Trusts.Academies
{
public abstract class AcademiesPageModel(
IDataSourceService dataSourceService,
ITrustService trustService,
IExportService exportService,
ILogger<AcademiesPageModel> logger,
IDateTimeProvider dateTimeProvider
) : TrustsAreaModel(dataSourceService, trustService, logger, "Academies")
{
protected IExportService ExportService { get; } = exportService;
public IDateTimeProvider DateTimeProvider { get; } = dateTimeProvider;
public string? TabName { get; init; }
public virtual async Task<IActionResult> OnGetExportAsync(string uid)
{
TrustSummaryServiceModel? trustSummary = await TrustService.GetTrustSummaryAsync(uid);

if (trustSummary == null)
{
return new NotFoundResult();
}
namespace DfE.FindInformationAcademiesTrusts.Pages.Trusts.Academies;

// Sanitize the trust name to remove any illegal characters
string sanitizedTrustName = string.Concat(trustSummary.Name.Where(c => !Path.GetInvalidFileNameChars().Contains(c)));
public abstract class AcademiesPageModel(
IDataSourceService dataSourceService,
ITrustService trustService,
IExportService exportService,
ILogger<AcademiesPageModel> logger,
IDateTimeProvider dateTimeProvider
) : TrustsAreaModel(dataSourceService, trustService, logger)
{
public override TrustPageMetadata TrustPageMetadata => base.TrustPageMetadata with { PageName = "Academies" };
protected IExportService ExportService { get; } = exportService;
public IDateTimeProvider DateTimeProvider { get; } = dateTimeProvider;

var fileContents = await ExportService.ExportAcademiesToSpreadsheetAsync(uid);
string fileName = $"{sanitizedTrustName}-{DateTimeProvider.Now:yyyy-MM-dd}.xlsx";
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
public virtual async Task<IActionResult> OnGetExportAsync(string uid)
{
var trustSummary = await TrustService.GetTrustSummaryAsync(uid);

return File(fileContents, contentType, fileName);
if (trustSummary == null)
{
return new NotFoundResult();
}

// Sanitize the trust name to remove any illegal characters
var sanitizedTrustName =
string.Concat(trustSummary.Name.Where(c => !Path.GetInvalidFileNameChars().Contains(c)));

var fileContents = await ExportService.ExportAcademiesToSpreadsheetAsync(uid);
var fileName = $"{sanitizedTrustName}-{DateTimeProvider.Now:yyyy-MM-dd}.xlsx";
var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

return File(fileContents, contentType, fileName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,34 +8,31 @@

namespace DfE.FindInformationAcademiesTrusts.Pages.Trusts.Academies;

public class AcademiesDetailsModel : AcademiesPageModel
public class AcademiesDetailsModel(
IDataSourceService dataSourceService,
IOtherServicesLinkBuilder linkBuilder,
ILogger<AcademiesDetailsModel> logger,
ITrustService trustService,
IAcademyService academyService,
IExportService exportService,
IDateTimeProvider dateTimeProvider)
: AcademiesPageModel(dataSourceService, trustService, exportService, logger,
dateTimeProvider)
{
public override TrustPageMetadata TrustPageMetadata => base.TrustPageMetadata with { TabName = "Details" };
public AcademyDetailsServiceModel[] Academies { get; set; } = default!;
public IOtherServicesLinkBuilder LinkBuilder { get; }
private IAcademyService AcademyService { get; }

public AcademiesDetailsModel(IDataSourceService dataSourceService,
IOtherServicesLinkBuilder linkBuilder, ILogger<AcademiesDetailsModel> logger,
ITrustService trustService, IAcademyService academyService, IExportService exportService, IDateTimeProvider dateTimeProvider) : base(dataSourceService, trustService, exportService, logger, dateTimeProvider)
{
PageTitle = "Academies details";
TabName = "Details";
LinkBuilder = linkBuilder;
AcademyService = academyService;
}
public IOtherServicesLinkBuilder LinkBuilder { get; } = linkBuilder;

public override async Task<IActionResult> OnGetAsync()
{
var pageResult = await base.OnGetAsync();

if (pageResult.GetType() == typeof(NotFoundResult)) return pageResult;

Academies = await AcademyService.GetAcademiesInTrustDetailsAsync(Uid);
Academies = await academyService.GetAcademiesInTrustDetailsAsync(Uid);

DataSources.Add(new DataSourceListEntry(await DataSourceService.GetAsync(Source.Gias),
new List<string> { "Details" }));
DataSources.Add(new DataSourceListEntry(await DataSourceService.GetAsync(Source.Gias), ["Details"]));

return pageResult;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,33 @@

namespace DfE.FindInformationAcademiesTrusts.Pages.Trusts.Academies;

public class FreeSchoolMealsModel : AcademiesPageModel
public class FreeSchoolMealsModel(
IDataSourceService dataSourceService,
ILogger<FreeSchoolMealsModel> logger,
ITrustService trustService,
IAcademyService academyService,
IExportService exportService,
IDateTimeProvider dateTimeProvider)
: AcademiesPageModel(dataSourceService, trustService, exportService, logger, dateTimeProvider)
{
public IAcademyService AcademyService { get; }
public AcademyFreeSchoolMealsServiceModel[] Academies { get; set; } = default!;
public override TrustPageMetadata TrustPageMetadata =>
base.TrustPageMetadata with { TabName = "Free school meals" };

public FreeSchoolMealsModel(IDataSourceService dataSourceService,
ILogger<FreeSchoolMealsModel> logger, ITrustService trustService, IAcademyService academyService,
IExportService exportService, IDateTimeProvider dateTimeProvider) :
base(dataSourceService, trustService, exportService, logger, dateTimeProvider)
{
PageTitle = "Academies free school meals";
TabName = "Free school meals";
AcademyService = academyService;
}
public AcademyFreeSchoolMealsServiceModel[] Academies { get; set; } = default!;

public override async Task<IActionResult> OnGetAsync()
{
var pageResult = await base.OnGetAsync();

if (pageResult.GetType() == typeof(NotFoundResult)) return pageResult;

Academies = await AcademyService.GetAcademiesInTrustFreeSchoolMealsAsync(Uid);
Academies = await academyService.GetAcademiesInTrustFreeSchoolMealsAsync(Uid);

DataSources.Add(new DataSourceListEntry(await DataSourceService.GetAsync(Source.Gias),
new[]
{
"Pupils eligible for free school meals"
}));
["Pupils eligible for free school meals"]));

DataSources.Add(new DataSourceListEntry(await DataSourceService.GetAsync(Source.ExploreEducationStatistics),
new[]
{
"Local authority average 2023/24", "National average 2023/24"
}));
["Local authority average 2023/24", "National average 2023/24"]));

return pageResult;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,27 @@

namespace DfE.FindInformationAcademiesTrusts.Pages.Trusts.Academies;

public class PupilNumbersModel : AcademiesPageModel
public class PupilNumbersModel(
IDataSourceService dataSourceService,
ILogger<PupilNumbersModel> logger,
ITrustService trustService,
IAcademyService academyService,
IExportService exportService,
IDateTimeProvider dateTimeProvider)
: AcademiesPageModel(dataSourceService, trustService, exportService, logger, dateTimeProvider)
{
public IAcademyService AcademyService { get; }
public override TrustPageMetadata TrustPageMetadata => base.TrustPageMetadata with { TabName = "Pupil numbers" };
public AcademyPupilNumbersServiceModel[] Academies { get; set; } = default!;

public PupilNumbersModel(IDataSourceService dataSourceService,
ILogger<PupilNumbersModel> logger, ITrustService trustService, IAcademyService academyService, IExportService exportService, IDateTimeProvider dateTimeProvider)
: base(dataSourceService, trustService, exportService, logger, dateTimeProvider)
{
AcademyService = academyService;
PageTitle = "Academies pupil numbers";
TabName = "Pupil numbers";
}

public override async Task<IActionResult> OnGetAsync()
{
var pageResult = await base.OnGetAsync();

if (pageResult.GetType() == typeof(NotFoundResult)) return pageResult;

Academies = await AcademyService.GetAcademiesInTrustPupilNumbersAsync(Uid);
Academies = await academyService.GetAcademiesInTrustPupilNumbersAsync(Uid);

DataSources.Add(new DataSourceListEntry(await DataSourceService.GetAsync(Source.Gias),
new List<string> { "Pupil numbers" }));
DataSources.Add(new DataSourceListEntry(await DataSourceService.GetAsync(Source.Gias), ["Pupil numbers"]));

return pageResult;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
private string GetCurrentlySelectedClassIf(string linkName)
{
var selectedClass = "govuk-tabs__list-item--selected";
return Model.TabName == linkName ? selectedClass : string.Empty;
return Model.TrustPageMetadata.TabName == linkName ? selectedClass : string.Empty;
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@

namespace DfE.FindInformationAcademiesTrusts.Pages.Trusts.Contacts;

public class ContactAreaModel(
public class ContactsAreaModel(
IDataSourceService dataSourceService,
ITrustService trustService,
ILogger<ContactAreaModel> logger
ILogger<ContactsAreaModel> logger
)
: TrustsAreaModel(dataSourceService, trustService, logger, "Contacts")
: TrustsAreaModel(dataSourceService, trustService, logger)
{
public override TrustPageMetadata TrustPageMetadata => base.TrustPageMetadata with { PageName = "Contacts" };
public Person? ChairOfTrustees { get; set; }
public Person? AccountingOfficer { get; set; }
public Person? ChiefFinancialOfficer { get; set; }
Expand All @@ -28,8 +29,9 @@ public override async Task<IActionResult> OnGetAsync()

SubNavigationLinks =
[
new TrustSubNavigationLinkModel("In DfE", "./InDfE", Uid, PageName, this is InDfeModel),
new TrustSubNavigationLinkModel("In the trust", "./InTrust", Uid, PageName, this is InTrustModel)
new TrustSubNavigationLinkModel("In DfE", "./InDfE", Uid, TrustPageMetadata.PageName!, this is InDfeModel),
new TrustSubNavigationLinkModel("In the trust", "./InTrust", Uid, TrustPageMetadata.PageName!,
this is InTrustModel)
];

(TrustRelationshipManager, SfsoLead, AccountingOfficer, ChairOfTrustees, ChiefFinancialOfficer) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,14 @@ public abstract class EditContactModel(
ILogger<EditContactModel> logger,
ContactRole role)
: TrustsAreaModel(dataSourceService, trustService,
logger, $"Edit {role.MapRoleToViewString()} details")
logger)
{
public override TrustPageMetadata TrustPageMetadata => base.TrustPageMetadata with
{
SubPageName = $"Edit {role.MapRoleToViewString()} details",
PageName = "Contacts"
};

public const string NameField = "Name";
public const string EmailField = "Email";

Expand Down Expand Up @@ -94,9 +100,4 @@ public string GenerateErrorAriaDescribedBy(string key)

return [];
}

public string GeneratePageTitle()
{
return $"{(ModelState.IsValid ? string.Empty : "Error: ")}{PageTitle ?? PageName} - {TrustSummary.Name}";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

@{
Layout = "_Layout";
ViewData["Title"] = Model.GeneratePageTitle();
ViewData["Title"] = Model.TrustPageMetadata.BrowserTitle;
}

<partial name="_EditContactsForm" model="@Model"/>
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

@{
Layout = "_Layout";
ViewData["Title"] = Model.GeneratePageTitle();
ViewData["Title"] = Model.TrustPageMetadata.BrowserTitle;
}

<partial name="_EditContactsForm" model="@Model"/>
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@ public class InDfeModel(
IDataSourceService dataSourceService,
ITrustService trustService,
ILogger<InDfeModel> logger)
: ContactAreaModel(dataSourceService, trustService, logger);
: ContactsAreaModel(dataSourceService, trustService, logger)
{
public override TrustPageMetadata TrustPageMetadata =>
base.TrustPageMetadata with { SubPageName = "In DfE" };
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@ public class InTrustModel(
IDataSourceService dataSourceService,
ITrustService trustService,
ILogger<InTrustModel> logger)
: ContactAreaModel(dataSourceService, trustService, logger);
: ContactsAreaModel(dataSourceService, trustService, logger)
{
public override TrustPageMetadata TrustPageMetadata =>
base.TrustPageMetadata with { SubPageName = "In the trust" };
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<fieldset class="govuk-fieldset">
<div>
<legend class="govuk-!-padding-0">
<h1 class="govuk-heading-l">@Model.PageName</h1>
<h1 class="govuk-heading-l">@Model.TrustPageMetadata.PageName</h1>
</legend>
</div>
<partial name="Shared/_ErrorSummary" model="@Model"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@ public class GovernanceAreaModel(
IDataSourceService dataSourceService,
ITrustService trustService,
ILogger<GovernanceAreaModel> logger)
: TrustsAreaModel(dataSourceService, trustService, logger, "Governance")
: TrustsAreaModel(dataSourceService, trustService, logger)
{
public override TrustPageMetadata TrustPageMetadata =>
base.TrustPageMetadata with { PageName = "Governance" };

public TrustGovernanceServiceModel TrustGovernance { get; set; } = default!;

public override async Task<IActionResult> OnGetAsync()
Expand All @@ -24,13 +27,13 @@ public override async Task<IActionResult> OnGetAsync()
SubNavigationLinks =
[
new TrustSubNavigationLinkModel($"Trust leadership ({TrustGovernance.CurrentTrustLeadership.Length})",
"./TrustLeadership", Uid, PageName, this is TrustLeadershipModel),
"./TrustLeadership", Uid, TrustPageMetadata.PageName!, this is TrustLeadershipModel),
new TrustSubNavigationLinkModel($"Trustees ({TrustGovernance.CurrentTrustees.Length})", "./Trustees", Uid,
PageName, this is TrusteesModel),
TrustPageMetadata.PageName!, this is TrusteesModel),
new TrustSubNavigationLinkModel($"Members ({TrustGovernance.CurrentMembers.Length})", "./Members", Uid,
PageName, this is MembersModel),
TrustPageMetadata.PageName!, this is MembersModel),
new TrustSubNavigationLinkModel($"Historic members ({TrustGovernance.HistoricMembers.Length})",
"./HistoricMembers", Uid, PageName, this is HistoricMembersModel)
"./HistoricMembers", Uid, TrustPageMetadata.PageName!, this is HistoricMembersModel)
];

DataSources.Add(new DataSourceListEntry(await DataSourceService.GetAsync(Source.Gias),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@ public class HistoricMembersModel(
IDataSourceService dataSourceService,
ILogger<HistoricMembersModel> logger,
ITrustService trustService)
: GovernanceAreaModel(dataSourceService, trustService, logger);
: GovernanceAreaModel(dataSourceService, trustService, logger)
{
public override TrustPageMetadata TrustPageMetadata =>
base.TrustPageMetadata with { SubPageName = "Historic members" };
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@ public class MembersModel(
IDataSourceService dataSourceService,
ILogger<MembersModel> logger,
ITrustService trustService)
: GovernanceAreaModel(dataSourceService, trustService, logger);
: GovernanceAreaModel(dataSourceService, trustService, logger)
{
public override TrustPageMetadata TrustPageMetadata =>
base.TrustPageMetadata with { SubPageName = "Members" };
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@ public class TrustLeadershipModel(
IDataSourceService dataSourceService,
ILogger<TrustLeadershipModel> logger,
ITrustService trustService)
: GovernanceAreaModel(dataSourceService, trustService, logger);
: GovernanceAreaModel(dataSourceService, trustService, logger)
{
public override TrustPageMetadata TrustPageMetadata =>
base.TrustPageMetadata with { SubPageName = "Trust leadership" };
}
Loading

0 comments on commit d8b5b5f

Please sign in to comment.