Skip to content

Commit

Permalink
Try to fix null reference exceptions fired when documents are not files
Browse files Browse the repository at this point in the history
  • Loading branch information
roman-yagodin committed May 19, 2021
1 parent 058b0c1 commit dbda722
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 27 deletions.
6 changes: 2 additions & 4 deletions R7.University.Divisions/ViewModels/DivisionViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,10 @@
using System.Web;
using DotNetNuke.Common;
using DotNetNuke.Entities.Content.Taxonomy;
using DotNetNuke.Entities.Icons;
using DotNetNuke.Entities.Portals;
using DotNetNuke.Entities.Tabs;
using DotNetNuke.Services.FileSystem;
using DotNetNuke.Services.Localization;
using R7.Dnn.Extensions.Text;
using R7.Dnn.Extensions.ViewModels;
using R7.University.Components;
using R7.University.Configuration;
using R7.University.Divisions.Models;
using R7.University.ModelExtensions;
Expand Down Expand Up @@ -143,6 +139,8 @@ public string DisplayTitle {
IFileInfo GetCachedDocumentFile () =>
_documentFile ?? (_documentFile = UniversityFileHelper.Instance.GetFileByUrl (Division.DocumentUrl));

public IFileInfo DocumentFile => GetCachedDocumentFile ();

public string DocumentSignatureFileUrl {
get {
var sigFile = UniversityFileHelper.Instance.GetSignatureFile (GetCachedDocumentFile ());
Expand Down
7 changes: 6 additions & 1 deletion R7.University.Divisions/ViewModels/DivisionViewModelBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,12 @@ string RenderDocumentLink (string documentUrl)
var fa = FontAwesomeHelper.Instance;
var documentFile = UniversityFileHelper.Instance.GetFileByUrl (documentUrl);

if (documentFile == null) {
return $" <a href=\"{UniversityUrlHelper.LinkClick (documentUrl, Dnn.Module.TabId, Dnn.Module.ModuleId)}\" "
+ "itemprop=\"divisionClauseDocLink\""
+ $" target=\"_blank\">{Dnn.LocalizeString ("Regulations.Text")}</a>";
}

var linkMarkup =
$"<i class=\"fas fa-file-{fa.GetBaseIconNameByExtension(documentFile.Extension)}\""
+ $"style=\"color:{fa.GetBrandColorByExtension(documentFile.Extension)}\"></i>"
Expand All @@ -143,7 +149,6 @@ string RenderDocumentLink (string documentUrl)
+ $" target=\"_blank\">{Dnn.LocalizeString ("Regulations.Text")}</a>";

var sigFile = UniversityFileHelper.Instance.GetSignatureFile (documentFile);

if (sigFile != null) {
linkMarkup += "<span> + </span>"
+ $"<a href=\"{UniversityUrlHelper.LinkClickFile (sigFile.FileId, Dnn.Module.TabId, Dnn.Module.ModuleId)}\" "
Expand Down
10 changes: 6 additions & 4 deletions R7.University.Divisions/Views/Division/Index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,14 @@
@if (!string.IsNullOrWhiteSpace (Model.DocumentUrl)) {
<div class="_section">
<a href="@Model.DocumentUrl" target="_blank">
@{ var fa = FontAwesomeHelper.Instance; }
<i class="fas fa-file-@fa.GetBaseIconNameByExtension(Model.DocumentFileExtension)"
style="color:@fa.GetBrandColorByExtension(Model.DocumentFileExtension)"></i>
@if (Model.DocumentFile != null) {
var fa = FontAwesomeHelper.Instance;
<i class="fas fa-file-@fa.GetBaseIconNameByExtension(Model.DocumentFileExtension)"
style="color:@fa.GetBrandColorByExtension(Model.DocumentFileExtension)"></i>
}
@Dnn.LocalizeString("DocumentUrl.Text")
</a>
@if (!string.IsNullOrEmpty (Model.DocumentSignatureFileUrl)) {
@if (Model.DocumentFile != null && !string.IsNullOrEmpty (Model.DocumentSignatureFileUrl)) {
<span> + </span>
<a href="@Model.DocumentSignatureFileUrl" title='@Dnn.LocalizeString("Signature.Text")'>
<i class="fas fa-signature"></i>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ protected IEnumerable<IDocument> GetDocuments (IEnumerable<IDocument> documents)
_signatureColumnHeader ?? (_signatureColumnHeader =
Localization.GetString ("DocumentSignature_Column.Text", Context.LocalResourceFile));

string FormatDocumentsLinkWithData (IEnumerable<IDocument> documents, string columnSlug, string microdata = "",
string RenderDocumentsLinkWithData (IEnumerable<IDocument> documents, string columnSlug, string microdata = "",
string noLinksText = "-")
{
var microdataAttrs = !string.IsNullOrEmpty (microdata) ? " " + microdata : string.Empty;
Expand All @@ -141,7 +141,7 @@ string FormatDocumentsLinkWithData (IEnumerable<IDocument> documents, string col
);

foreach (var document in documents) {
GenerateDocumentsTableRow (table, document);
RenderDocumentsTableRow (table, document);
}

table.Append ("</tbody></table></span>");
Expand All @@ -151,17 +151,18 @@ string FormatDocumentsLinkWithData (IEnumerable<IDocument> documents, string col
return $"<span{microdataAttrs}>{noLinksText}</span>";
}

void GenerateDocumentsTableRow (StringBuilder table, IDocument document)
void RenderDocumentsTableRow (StringBuilder table, IDocument document)
{
var docTitle = !string.IsNullOrEmpty (document.Title)
? document.Title
: Localization.GetString ("LinkOpen.Text", Context.LocalResourceFile);
var docUrl =
UniversityUrlHelper.LinkClick (document.Url, Context.Module.TabId, Context.Module.ModuleId);

var sigFile =
UniversityFileHelper.Instance.GetSignatureFile (
UniversityFileHelper.Instance.GetFileByUrl (document.Url));
var docUrl = UniversityUrlHelper.LinkClick (document.Url, Context.Module.TabId, Context.Module.ModuleId);

var docFile = UniversityFileHelper.Instance.GetFileByUrl (document.Url);

var sigFile = docFile != null? UniversityFileHelper.Instance.GetSignatureFile (docFile) : null;

var sigUrl = sigFile != null
? UniversityUrlHelper.LinkClickFile (sigFile.FileId, Context.Module.TabId,
Context.Module.ModuleId)
Expand All @@ -173,7 +174,7 @@ void GenerateDocumentsTableRow (StringBuilder table, IDocument document)

table.Append ($"<tr{rowCssClassAttr}>");
table.Append ($"<td><a href=\"{docUrl}\" target=\"_blank\">{docTitle}</a></td>");
if (sigFile != null) {
if (!string.IsNullOrEmpty (sigUrl)) {
table.Append ($"<td><a href=\"{sigUrl}\"><i class=\"fas fa-signature\" title=\"{Context.LocalizeString ("Signature.Text")}\"></i></a></td>");
}
else {
Expand All @@ -189,7 +190,7 @@ string GetEduProgramLinks ()
UniversityFormatHelper.FormatEduProfileTitle (EduProgram.Title, ProfileCode, ProfileTitle)
.Append (IsAdopted ? Context.LocalizeString ("IsAdopted.Text") : null, " - ")
+ " "
+ FormatDocumentsLinkWithData (
+ RenderDocumentsLinkWithData (
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.EduProgram)),
"oop",
IsAdopted ? "itemprop=\"adOpMain\"" : "itemprop=\"opMain\"",
Expand All @@ -199,7 +200,7 @@ string GetEduProgramLinks ()

string GetEduPlanLinks ()
{
return FormatDocumentsLinkWithData (
return RenderDocumentsLinkWithData (
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.EduPlan)),
"epl",
IsAdopted ? "itemprop=\"adEducationPlan\"" : "itemprop=\"educationPlan\""
Expand All @@ -208,7 +209,7 @@ string GetEduPlanLinks ()

string GetEduScheduleLinks ()
{
return FormatDocumentsLinkWithData (
return RenderDocumentsLinkWithData (
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.EduSchedule)),
"esh",
IsAdopted ? "itemprop=\"adEducationShedule\"" : "itemprop=\"educationShedule\""
Expand All @@ -217,7 +218,7 @@ string GetEduScheduleLinks ()

string GetWorkProgramAnnotationLinks ()
{
return FormatDocumentsLinkWithData (
return RenderDocumentsLinkWithData (
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.WorkProgramAnnotation)),
"wpa",
IsAdopted ? "itemprop=\"adEducationAnnotation\"" : "itemprop=\"educationAnnotation\""
Expand All @@ -226,7 +227,7 @@ string GetWorkProgramAnnotationLinks ()

string GetEduMaterialLinks ()
{
return FormatDocumentsLinkWithData (
return RenderDocumentsLinkWithData (
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.EduMaterial)),
"met",
IsAdopted ? "itemprop=\"adMethodology\"" : "itemprop=\"methodology\""
Expand All @@ -235,7 +236,7 @@ string GetEduMaterialLinks ()

string GetWorkProgramLinks ()
{
return FormatDocumentsLinkWithData (
return RenderDocumentsLinkWithData (
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.WorkProgram)),
"wp",
// TODO: This related to obsolete WorkProgramOfPractice document type
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ string RenderDocumentLink (IDocument document, string documentTitle,
var fa = FontAwesomeHelper.Instance;
var documentFile = UniversityFileHelper.Instance.GetFileByUrl (document.Url);

if (documentFile == null) {
return $" <a href=\"{UniversityUrlHelper.LinkClick (document.Url, Context.Module.TabId, Context.Module.ModuleId)}\" "
+ FormatHelper.JoinNotNullOrEmpty (" ", !document.IsPublished (now) ? "class=\"u8y-not-published-element\"" : string.Empty, microdata)
+ $" target=\"_blank\">{title}</a>";
}

var linkMarkup =
$"<i class=\"fas fa-file-{fa.GetBaseIconNameByExtension(documentFile.Extension)}\""
+ $"style=\"color:{fa.GetBrandColorByExtension(documentFile.Extension)}\"></i>"
Expand All @@ -78,13 +84,10 @@ string RenderDocumentLink (IDocument document, string documentTitle,
+ $" target=\"_blank\">{title}</a>";

var sigFile = UniversityFileHelper.Instance.GetSignatureFile (documentFile);

if (sigFile != null) {
linkMarkup += "<span> + </span>"
+ $"<a href=\"{UniversityUrlHelper.LinkClickFile (sigFile.FileId, Context.Module.TabId, Context.Module.ModuleId)}\" "
+ $"title=\"{Context.LocalizeString ("Signature.Text")}\"><i class=\"fas fa-signature\"></i></a>";


}

return linkMarkup;
Expand Down

0 comments on commit dbda722

Please sign in to comment.