Skip to content

Commit 2cf6c8d

Browse files
authored
Merge pull request #60 from epdubi/static-tags-list
Static Tags List
2 parents 06a155f + fc8772b commit 2cf6c8d

19 files changed

+931
-380
lines changed

App_LocalResources/ucSubmitNews.ascx.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,4 +459,10 @@
459459
<data name="plFolder.Text" xml:space="preserve">
460460
<value>Upload Folder:</value>
461461
</data>
462+
<data name="plAllTags.Help" xml:space="preserve">
463+
<value>Select all desired tags and add to Article Tags list.</value>
464+
</data>
465+
<data name="plArticleTags.Help" xml:space="preserve">
466+
<value>Re-order article tags for display, and remove existing article tags.</value>
467+
</data>
462468
</root>

App_LocalResources/ucViewOptions.ascx.resx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,9 @@
546546
<data name="CategorySettings.Text" xml:space="preserve">
547547
<value>Category Settings</value>
548548
</data>
549+
<data name="TagSettings.Text" xml:space="preserve">
550+
<value>Tag Settings</value>
551+
</data>
549552
<data name="DefaultCategories.Help" xml:space="preserve">
550553
<value>Check categories to auto-select them on the create article screen.</value>
551554
</data>
@@ -1134,6 +1137,12 @@
11341137
<data name="CategoryFilterSubmit.Text" xml:space="preserve">
11351138
<value>Filter Category Submit</value>
11361139
</data>
1140+
<data name="UseStaticTagsList.Text" xml:space="preserve">
1141+
<value>Use Static Tags List</value>
1142+
</data>
1143+
<data name="UseStaticTagsList.Help" xml:space="preserve">
1144+
<value>Check to only allow existing tags to be used on submit article screen, otherwise allow article authors to create new tags while authoring an article. When checked, a list box will be used to select existing tags (similar to categories), rather then the text box used when unchecked.</value>
1145+
</data>
11371146
<data name="AllGroups.Text" xml:space="preserve">
11381147
<value>-- All Groups -- </value>
11391148
</data>

Components/ArticleSettings.vb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,16 @@ Namespace Ventrian.NewsArticles
244244
End Get
245245
End Property
246246

247+
Public ReadOnly Property UseStaticTagsList() As Boolean
248+
Get
249+
If (Settings.Contains(ArticleConstants.USE_STATIC_TAGS_LIST_SETTING)) Then
250+
Return Convert.ToBoolean(Settings(ArticleConstants.USE_STATIC_TAGS_LIST_SETTING).ToString())
251+
Else
252+
Return ArticleConstants.USE_STATIC_TAGS_LIST_SETTING_DEFAULT
253+
End If
254+
End Get
255+
End Property
256+
247257
Public ReadOnly Property IncludeInPageName() As Boolean
248258
Get
249259
If (Settings.Contains(ArticleConstants.CATEGORY_NAME_SETTING)) Then
@@ -355,7 +365,7 @@ Namespace Ventrian.NewsArticles
355365
End If
356366
End Get
357367
End Property
358-
368+
359369
Public ReadOnly Property EnablePortalFiles() As Boolean
360370
Get
361371
If (Settings.Contains(ArticleConstants.ENABLE_PORTAL_FILES_SETTING)) Then

Components/Common/ArticleConstants.vb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ Namespace Ventrian.NewsArticles
113113
Public Const CATEGORY_FILTER_SUBMIT_SETTING_DEFAULT As Boolean = False
114114
Public Const CATEGORY_SORT_SETTING As String = "CategorySortType"
115115
Public Const CATEGORY_SORT_SETTING_DEFAULT As CategorySortType = CategorySortType.SortOrder
116+
Public Const USE_STATIC_TAGS_LIST_SETTING As String = "UseStaticTagsList"
117+
Public Const USE_STATIC_TAGS_LIST_SETTING_DEFAULT As Boolean = False
118+
116119

117120
' Category Security Settings
118121
Public Const PERMISSION_CATEGORY_VIEW_SETTING As String = "PermissionCategoryView"

Components/TagController.vb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ Namespace Ventrian.NewsArticles
9898

9999
End Sub
100100

101-
Public Sub Add(ByVal articleID As Integer, ByVal tagID As Integer)
101+
Public Sub Add(ByVal articleID As Integer, ByVal tagID As Integer, Optional ByVal displayOrder As Integer = 0)
102102

103103
RemoveCache(tagID)
104-
DataProvider.Instance().AddArticleTag(articleID, tagID)
104+
DataProvider.Instance().AddArticleTag(articleID, tagID, displayOrder)
105105

106106
End Sub
107107

LatestArticlesOptions.ascx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@
218218
<td>
219219
<asp:RadioButtonList ID="rdoTagsMatchOperator" Runat="server" CssClass="Normal" RepeatDirection="Horizontal" />
220220
<asp:textbox id="txtTags" cssclass="NormalTextBox" width="300" maxlength="255" runat="server" /><br />
221+
<asp:ListBox ID="lstTags" runat="server" CssClass="Normal" DataTextField="Name" DataValueField="Name" Width="300px" Height="150px" SelectionMode="Multiple" />
221222
<asp:Label ID="lblTags" ResourceKey="TagsHelp" runat="server" CssClass="Normal" />
222223
</td>
223224
</tr>

LatestArticlesOptions.ascx.designer.vb

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

LatestArticlesOptions.ascx.vb

Lines changed: 122 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ Namespace Ventrian.NewsArticles
153153
End If
154154

155155
If (drpModuleID.Items.Count > 0) Then
156+
BindTags()
156157
BindCategories()
157158
BindCustomFields()
158159
End If
@@ -174,12 +175,95 @@ Namespace Ventrian.NewsArticles
174175

175176
End Sub
176177

178+
Private Function UseStaticTagsList() As Boolean
179+
180+
If Not (drpModuleID.Items.Count > 0) Then
181+
Return ArticleConstants.USE_STATIC_TAGS_LIST_SETTING_DEFAULT
182+
End If
183+
184+
Dim selectedModuleValues As String() = drpModuleID.SelectedValue.Split(Convert.ToChar("-"))
185+
Dim objModuleController As New ModuleController
186+
Dim selectedArticlesModule As ModuleInfo = objModuleController.GetModule(Convert.ToInt32(selectedModuleValues(1)), Convert.ToInt32(selectedModuleValues(0)), False)
187+
188+
If Not selectedArticlesModule.ModuleSettings.Contains(ArticleConstants.USE_STATIC_TAGS_LIST_SETTING) Then
189+
Return ArticleConstants.USE_STATIC_TAGS_LIST_SETTING_DEFAULT
190+
End If
191+
192+
Return Convert.ToBoolean(selectedArticlesModule.ModuleSettings(ArticleConstants.USE_STATIC_TAGS_LIST_SETTING).ToString())
193+
194+
End Function
195+
196+
Private Sub SelectAllTags(ByVal tagIdList As String)
197+
198+
Dim objTagController As New TagController
199+
For Each tagId As String In tagIdList.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries)
200+
Dim objTag As TagInfo = objTagController.Get(Convert.ToInt32(tagId))
201+
202+
If objTag IsNot Nothing Then
203+
Dim li As ListItem = lstTags.Items.FindByValue(objTag.Name)
204+
If li IsNot Nothing Then
205+
li.Selected = True
206+
End If
207+
End If
208+
Next
209+
210+
End Sub
211+
212+
Private Sub BindTags()
213+
If UseStaticTagsList() Then
214+
lblTags.Visible = False
215+
txtTags.Visible = False
216+
217+
lstTags.Visible = True
218+
FillTagsList()
219+
Else
220+
lstTags.Visible = False
221+
222+
lblTags.Visible = True
223+
txtTags.Visible = True
224+
End If
225+
226+
If (Settings.Contains(ArticleConstants.LATEST_ARTICLES_TAGS)) Then
227+
Dim tags As String = Settings(ArticleConstants.LATEST_ARTICLES_TAGS).ToString()
228+
If (tags <> "" And drpModuleID.Items.Count > 0) Then
229+
If UseStaticTagsList() Then
230+
SelectAllTags(tags)
231+
Else
232+
Dim objTagController As New TagController()
233+
For Each tag As String In tags.Split(","c)
234+
Dim objTag As TagInfo = objTagController.Get(Convert.ToInt32(tag))
235+
If (objTag IsNot Nothing) Then
236+
If (txtTags.Text <> "") Then
237+
txtTags.Text = txtTags.Text + "," + objTag.Name
238+
Else
239+
txtTags.Text = objTag.Name
240+
End If
241+
End If
242+
Next
243+
End If
244+
End If
245+
End If
246+
End Sub
247+
248+
Private Sub FillTagsList()
249+
If (drpModuleID.Items.Count > 0) Then
250+
Dim objTagController As New TagController
251+
Dim objTags As ArrayList = objTagController.List(Convert.ToInt32(drpModuleID.SelectedValue.Split("-"c)(1)), Null.NullInteger)
252+
253+
objTags.Sort()
254+
lstTags.DataSource = objTags
255+
lstTags.DataBind()
256+
End If
257+
End Sub
258+
177259
Private Sub BindSettings()
178260

179261
If (Settings.Contains(ArticleConstants.LATEST_ARTICLES_MODULE_ID) And Settings.Contains(ArticleConstants.LATEST_ARTICLES_TAB_ID)) Then
180262
If Not (drpModuleID.Items.FindByValue(Settings(ArticleConstants.LATEST_ARTICLES_TAB_ID).ToString() & "-" & Settings(ArticleConstants.LATEST_ARTICLES_MODULE_ID).ToString()) Is Nothing) Then
181263
drpModuleID.SelectedValue = Settings(ArticleConstants.LATEST_ARTICLES_TAB_ID).ToString() & "-" & Settings(ArticleConstants.LATEST_ARTICLES_MODULE_ID).ToString()
182264
End If
265+
266+
BindTags()
183267
BindCategories()
184268
BindCustomFields()
185269
End If
@@ -241,23 +325,6 @@ Namespace Ventrian.NewsArticles
241325
End If
242326
End If
243327

244-
If (Settings.Contains(ArticleConstants.LATEST_ARTICLES_TAGS)) Then
245-
Dim objTagController As New TagController()
246-
Dim tags As String = Settings(ArticleConstants.LATEST_ARTICLES_TAGS).ToString()
247-
If (tags <> "" And drpModuleID.Items.Count > 0) Then
248-
For Each tag As String In tags.Split(","c)
249-
Dim objTag As TagInfo = objTagController.Get(Convert.ToInt32(tag))
250-
If (objTag IsNot Nothing) Then
251-
If (txtTags.Text <> "") Then
252-
txtTags.Text = txtTags.Text + "," + objTag.Name
253-
Else
254-
txtTags.Text = objTag.Name
255-
End If
256-
End If
257-
Next
258-
End If
259-
End If
260-
261328
If (rdoTagsMatchOperator.Items.Count > 0) Then
262329
rdoTagsMatchOperator.Items(0).Selected = True
263330
End If
@@ -599,31 +666,47 @@ Namespace Ventrian.NewsArticles
599666

600667
Dim tags As String = ""
601668
If (drpModuleID.Items.Count > 0) Then
602-
For Each tag As String In txtTags.Text.Split(","c)
603-
If (tag <> "") Then
604-
Dim objTagController As New TagController()
605-
Dim objTag As TagInfo = objTagController.Get(Convert.ToInt32(drpModuleID.SelectedValue.Split("-"c)(1)), tag.ToLower())
606-
If (objTag IsNot Nothing) Then
607-
If (tags = "") Then
608-
tags = objTag.TagID.ToString()
609-
Else
610-
tags = tags & "," & objTag.TagID.ToString()
669+
Dim objTagController As New TagController()
670+
671+
If UseStaticTagsList() Then
672+
For Each li As ListItem In lstTags.Items
673+
If li.Selected Then
674+
Dim objTag As TagInfo = objTagController.Get(Convert.ToInt32(drpModuleID.SelectedValue.Split("-"c)(1)), li.Value.ToLower())
675+
If (objTag IsNot Nothing) Then
676+
If (tags = "") Then
677+
tags = objTag.TagID.ToString()
678+
Else
679+
tags = tags & "," & objTag.TagID.ToString()
680+
End If
611681
End If
612-
Else
613-
objTag = New TagInfo()
614-
objTag.ModuleID = Convert.ToInt32(drpModuleID.SelectedValue.Split("-"c)(1))
615-
objTag.Name = tag
616-
objTag.NameLowered = tag.ToLower()
617-
objTag.Usages = 0
618-
objTag.TagID = objTagController.Add(objTag)
619-
If (tags = "") Then
620-
tags = objTag.TagID.ToString()
682+
End If
683+
Next
684+
Else
685+
For Each tag As String In txtTags.Text.Split(","c)
686+
If (tag <> "") Then
687+
Dim objTag As TagInfo = objTagController.Get(Convert.ToInt32(drpModuleID.SelectedValue.Split("-"c)(1)), tag.ToLower())
688+
If (objTag IsNot Nothing) Then
689+
If (tags = "") Then
690+
tags = objTag.TagID.ToString()
691+
Else
692+
tags = tags & "," & objTag.TagID.ToString()
693+
End If
621694
Else
622-
tags = tags & "," & objTag.TagID.ToString()
695+
objTag = New TagInfo()
696+
objTag.ModuleID = Convert.ToInt32(drpModuleID.SelectedValue.Split("-"c)(1))
697+
objTag.Name = tag
698+
objTag.NameLowered = tag.ToLower()
699+
objTag.Usages = 0
700+
objTag.TagID = objTagController.Add(objTag)
701+
If (tags = "") Then
702+
tags = objTag.TagID.ToString()
703+
Else
704+
tags = tags & "," & objTag.TagID.ToString()
705+
End If
623706
End If
624707
End If
625-
End If
626-
Next
708+
Next
709+
End If
627710
End If
628711
objModuleController.UpdateModuleSetting(ModuleId, ArticleConstants.LATEST_ARTICLES_TAGS, tags)
629712
objModuleController.UpdateModuleSetting(Me.ModuleId, ArticleConstants.LATEST_ARTICLES_TAGS_MATCH_OPERATOR, rdoTagsMatchOperator.SelectedValue)
@@ -714,6 +797,7 @@ Namespace Ventrian.NewsArticles
714797
Private Sub drpModuleID_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles drpModuleID.SelectedIndexChanged
715798

716799
Try
800+
BindTags()
717801
BindCategories()
718802
BindCustomFields()
719803
Catch exc As Exception 'Module failed to load

Providers/DataProvider/DataProvider.vb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ Namespace Ventrian.NewsArticles
133133
Public MustOverride Sub UpdateTag(ByVal tagID As Integer, ByVal moduleID As Integer, ByVal name As String, ByVal nameLowered As String, ByVal usages As Integer)
134134
Public MustOverride Sub DeleteTag(ByVal tagID As Integer)
135135

136-
Public MustOverride Sub AddArticleTag(ByVal articleID As Integer, ByVal tagID As Integer)
136+
Public MustOverride Sub AddArticleTag(ByVal articleID As Integer, ByVal tagID As Integer, Optional ByVal displayOrder As Integer = 0)
137137
Public MustOverride Sub DeleteArticleTag(ByVal articleID As Integer)
138138
Public MustOverride Sub DeleteArticleTagByTag(ByVal tagID As Integer)
139139

Providers/DataProvider/SqlDataProvider/SqlDataProvider.vb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -564,8 +564,8 @@ Namespace Ventrian.NewsArticles
564564
SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "DnnForge_NewsArticles_TagDelete", tagID)
565565
End Sub
566566

567-
Public Overrides Sub AddArticleTag(ByVal articleID As Integer, ByVal tagID As Integer)
568-
SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "DnnForge_NewsArticles_ArticleTagAdd", articleID, tagID)
567+
Public Overrides Sub AddArticleTag(ByVal articleID As Integer, ByVal tagID As Integer, Optional ByVal displayOrder As Integer = 0)
568+
SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "DnnForge_NewsArticles_ArticleTagAdd", articleID, tagID, displayOrder)
569569
End Sub
570570

571571
Public Overrides Sub DeleteArticleTag(ByVal articleID As Integer)

0 commit comments

Comments
 (0)