Skip to content

Commit dbda722

Browse files
committed
Try to fix null reference exceptions fired when documents are not files #412
1 parent 058b0c1 commit dbda722

File tree

5 files changed

+36
-27
lines changed

5 files changed

+36
-27
lines changed

Diff for: R7.University.Divisions/ViewModels/DivisionViewModel.cs

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@
44
using System.Web;
55
using DotNetNuke.Common;
66
using DotNetNuke.Entities.Content.Taxonomy;
7-
using DotNetNuke.Entities.Icons;
87
using DotNetNuke.Entities.Portals;
9-
using DotNetNuke.Entities.Tabs;
108
using DotNetNuke.Services.FileSystem;
119
using DotNetNuke.Services.Localization;
12-
using R7.Dnn.Extensions.Text;
1310
using R7.Dnn.Extensions.ViewModels;
14-
using R7.University.Components;
1511
using R7.University.Configuration;
1612
using R7.University.Divisions.Models;
1713
using R7.University.ModelExtensions;
@@ -143,6 +139,8 @@ public string DisplayTitle {
143139
IFileInfo GetCachedDocumentFile () =>
144140
_documentFile ?? (_documentFile = UniversityFileHelper.Instance.GetFileByUrl (Division.DocumentUrl));
145141

142+
public IFileInfo DocumentFile => GetCachedDocumentFile ();
143+
146144
public string DocumentSignatureFileUrl {
147145
get {
148146
var sigFile = UniversityFileHelper.Instance.GetSignatureFile (GetCachedDocumentFile ());

Diff for: R7.University.Divisions/ViewModels/DivisionViewModelBase.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ string RenderDocumentLink (string documentUrl)
135135
var fa = FontAwesomeHelper.Instance;
136136
var documentFile = UniversityFileHelper.Instance.GetFileByUrl (documentUrl);
137137

138+
if (documentFile == null) {
139+
return $" <a href=\"{UniversityUrlHelper.LinkClick (documentUrl, Dnn.Module.TabId, Dnn.Module.ModuleId)}\" "
140+
+ "itemprop=\"divisionClauseDocLink\""
141+
+ $" target=\"_blank\">{Dnn.LocalizeString ("Regulations.Text")}</a>";
142+
}
143+
138144
var linkMarkup =
139145
$"<i class=\"fas fa-file-{fa.GetBaseIconNameByExtension(documentFile.Extension)}\""
140146
+ $"style=\"color:{fa.GetBrandColorByExtension(documentFile.Extension)}\"></i>"
@@ -143,7 +149,6 @@ string RenderDocumentLink (string documentUrl)
143149
+ $" target=\"_blank\">{Dnn.LocalizeString ("Regulations.Text")}</a>";
144150

145151
var sigFile = UniversityFileHelper.Instance.GetSignatureFile (documentFile);
146-
147152
if (sigFile != null) {
148153
linkMarkup += "<span> + </span>"
149154
+ $"<a href=\"{UniversityUrlHelper.LinkClickFile (sigFile.FileId, Dnn.Module.TabId, Dnn.Module.ModuleId)}\" "

Diff for: R7.University.Divisions/Views/Division/Index.cshtml

+6-4
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@
4545
@if (!string.IsNullOrWhiteSpace (Model.DocumentUrl)) {
4646
<div class="_section">
4747
<a href="@Model.DocumentUrl" target="_blank">
48-
@{ var fa = FontAwesomeHelper.Instance; }
49-
<i class="fas fa-file-@fa.GetBaseIconNameByExtension(Model.DocumentFileExtension)"
50-
style="color:@fa.GetBrandColorByExtension(Model.DocumentFileExtension)"></i>
48+
@if (Model.DocumentFile != null) {
49+
var fa = FontAwesomeHelper.Instance;
50+
<i class="fas fa-file-@fa.GetBaseIconNameByExtension(Model.DocumentFileExtension)"
51+
style="color:@fa.GetBrandColorByExtension(Model.DocumentFileExtension)"></i>
52+
}
5153
@Dnn.LocalizeString("DocumentUrl.Text")
5254
</a>
53-
@if (!string.IsNullOrEmpty (Model.DocumentSignatureFileUrl)) {
55+
@if (Model.DocumentFile != null && !string.IsNullOrEmpty (Model.DocumentSignatureFileUrl)) {
5456
<span> + </span>
5557
<a href="@Model.DocumentSignatureFileUrl" title='@Dnn.LocalizeString("Signature.Text")'>
5658
<i class="fas fa-signature"></i>

Diff for: R7.University.EduProgramProfiles/ViewModels/EduProfileDocumentsViewModel.cs

+16-15
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ protected IEnumerable<IDocument> GetDocuments (IEnumerable<IDocument> documents)
126126
_signatureColumnHeader ?? (_signatureColumnHeader =
127127
Localization.GetString ("DocumentSignature_Column.Text", Context.LocalResourceFile));
128128

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

143143
foreach (var document in documents) {
144-
GenerateDocumentsTableRow (table, document);
144+
RenderDocumentsTableRow (table, document);
145145
}
146146

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

154-
void GenerateDocumentsTableRow (StringBuilder table, IDocument document)
154+
void RenderDocumentsTableRow (StringBuilder table, IDocument document)
155155
{
156156
var docTitle = !string.IsNullOrEmpty (document.Title)
157157
? document.Title
158158
: Localization.GetString ("LinkOpen.Text", Context.LocalResourceFile);
159-
var docUrl =
160-
UniversityUrlHelper.LinkClick (document.Url, Context.Module.TabId, Context.Module.ModuleId);
161159

162-
var sigFile =
163-
UniversityFileHelper.Instance.GetSignatureFile (
164-
UniversityFileHelper.Instance.GetFileByUrl (document.Url));
160+
var docUrl = UniversityUrlHelper.LinkClick (document.Url, Context.Module.TabId, Context.Module.ModuleId);
161+
162+
var docFile = UniversityFileHelper.Instance.GetFileByUrl (document.Url);
163+
164+
var sigFile = docFile != null? UniversityFileHelper.Instance.GetSignatureFile (docFile) : null;
165+
165166
var sigUrl = sigFile != null
166167
? UniversityUrlHelper.LinkClickFile (sigFile.FileId, Context.Module.TabId,
167168
Context.Module.ModuleId)
@@ -173,7 +174,7 @@ void GenerateDocumentsTableRow (StringBuilder table, IDocument document)
173174

174175
table.Append ($"<tr{rowCssClassAttr}>");
175176
table.Append ($"<td><a href=\"{docUrl}\" target=\"_blank\">{docTitle}</a></td>");
176-
if (sigFile != null) {
177+
if (!string.IsNullOrEmpty (sigUrl)) {
177178
table.Append ($"<td><a href=\"{sigUrl}\"><i class=\"fas fa-signature\" title=\"{Context.LocalizeString ("Signature.Text")}\"></i></a></td>");
178179
}
179180
else {
@@ -189,7 +190,7 @@ string GetEduProgramLinks ()
189190
UniversityFormatHelper.FormatEduProfileTitle (EduProgram.Title, ProfileCode, ProfileTitle)
190191
.Append (IsAdopted ? Context.LocalizeString ("IsAdopted.Text") : null, " - ")
191192
+ " "
192-
+ FormatDocumentsLinkWithData (
193+
+ RenderDocumentsLinkWithData (
193194
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.EduProgram)),
194195
"oop",
195196
IsAdopted ? "itemprop=\"adOpMain\"" : "itemprop=\"opMain\"",
@@ -199,7 +200,7 @@ string GetEduProgramLinks ()
199200

200201
string GetEduPlanLinks ()
201202
{
202-
return FormatDocumentsLinkWithData (
203+
return RenderDocumentsLinkWithData (
203204
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.EduPlan)),
204205
"epl",
205206
IsAdopted ? "itemprop=\"adEducationPlan\"" : "itemprop=\"educationPlan\""
@@ -208,7 +209,7 @@ string GetEduPlanLinks ()
208209

209210
string GetEduScheduleLinks ()
210211
{
211-
return FormatDocumentsLinkWithData (
212+
return RenderDocumentsLinkWithData (
212213
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.EduSchedule)),
213214
"esh",
214215
IsAdopted ? "itemprop=\"adEducationShedule\"" : "itemprop=\"educationShedule\""
@@ -217,7 +218,7 @@ string GetEduScheduleLinks ()
217218

218219
string GetWorkProgramAnnotationLinks ()
219220
{
220-
return FormatDocumentsLinkWithData (
221+
return RenderDocumentsLinkWithData (
221222
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.WorkProgramAnnotation)),
222223
"wpa",
223224
IsAdopted ? "itemprop=\"adEducationAnnotation\"" : "itemprop=\"educationAnnotation\""
@@ -226,7 +227,7 @@ string GetWorkProgramAnnotationLinks ()
226227

227228
string GetEduMaterialLinks ()
228229
{
229-
return FormatDocumentsLinkWithData (
230+
return RenderDocumentsLinkWithData (
230231
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.EduMaterial)),
231232
"met",
232233
IsAdopted ? "itemprop=\"adMethodology\"" : "itemprop=\"methodology\""
@@ -235,7 +236,7 @@ string GetEduMaterialLinks ()
235236

236237
string GetWorkProgramLinks ()
237238
{
238-
return FormatDocumentsLinkWithData (
239+
return RenderDocumentsLinkWithData (
239240
GetDocuments (EduProfile.GetDocumentsOfType (SystemDocumentType.WorkProgram)),
240241
"wp",
241242
// TODO: This related to obsolete WorkProgramOfPractice document type

Diff for: R7.University.EduPrograms/ViewModels/EduProgramWithDocumentsViewModelBase.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ string RenderDocumentLink (IDocument document, string documentTitle,
7070
var fa = FontAwesomeHelper.Instance;
7171
var documentFile = UniversityFileHelper.Instance.GetFileByUrl (document.Url);
7272

73+
if (documentFile == null) {
74+
return $" <a href=\"{UniversityUrlHelper.LinkClick (document.Url, Context.Module.TabId, Context.Module.ModuleId)}\" "
75+
+ FormatHelper.JoinNotNullOrEmpty (" ", !document.IsPublished (now) ? "class=\"u8y-not-published-element\"" : string.Empty, microdata)
76+
+ $" target=\"_blank\">{title}</a>";
77+
}
78+
7379
var linkMarkup =
7480
$"<i class=\"fas fa-file-{fa.GetBaseIconNameByExtension(documentFile.Extension)}\""
7581
+ $"style=\"color:{fa.GetBrandColorByExtension(documentFile.Extension)}\"></i>"
@@ -78,13 +84,10 @@ string RenderDocumentLink (IDocument document, string documentTitle,
7884
+ $" target=\"_blank\">{title}</a>";
7985

8086
var sigFile = UniversityFileHelper.Instance.GetSignatureFile (documentFile);
81-
8287
if (sigFile != null) {
8388
linkMarkup += "<span> + </span>"
8489
+ $"<a href=\"{UniversityUrlHelper.LinkClickFile (sigFile.FileId, Context.Module.TabId, Context.Module.ModuleId)}\" "
8590
+ $"title=\"{Context.LocalizeString ("Signature.Text")}\"><i class=\"fas fa-signature\"></i></a>";
86-
87-
8891
}
8992

9093
return linkMarkup;

0 commit comments

Comments
 (0)