📄 editarticle.ascx.vb
字号:
Imports System
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports Microsoft.VisualBasic
Imports DotNetNuke.Security
Imports EfficionConsulting.Categories
Imports DotNetNuke
Imports DotNetNuke.Services.Localization
Namespace EfficionConsulting.Articles
Public Class EditArticle
Inherits DotNetNuke.Entities.Modules.PortalModuleBase
#Region "Members"
Protected WithEvents lblMessage As System.Web.UI.WebControls.Label
Protected WithEvents txtTitle As System.Web.UI.WebControls.TextBox
Protected WithEvents valTitle As System.Web.UI.WebControls.RequiredFieldValidator
Protected trCategories As System.Web.UI.HtmlControls.HtmlTableRow
Protected WithEvents lblNoCategories As System.Web.UI.WebControls.Label
Protected WithEvents ctlCategories As DotNetNuke.UI.UserControls.DualListControl
Protected WithEvents teDescription As DotNetNuke.UI.UserControls.TextEditor
Protected WithEvents valDescription As System.Web.UI.WebControls.RequiredFieldValidator
Protected WithEvents txtKeywords As System.Web.UI.WebControls.TextBox
Protected WithEvents ctlImage As DotNetNuke.UI.UserControls.UrlControl
Protected WithEvents rblDetailType As System.Web.UI.WebControls.RadioButtonList
Protected WithEvents plDetails As DotNetNuke.UI.UserControls.LabelControl
Protected WithEvents txtExternal As System.Web.UI.WebControls.TextBox
Protected WithEvents cboInternal As System.Web.UI.WebControls.DropDownList
Protected WithEvents teDetails As DotNetNuke.UI.UserControls.TextEditor
Protected WithEvents chkApproved As System.Web.UI.WebControls.CheckBox
Protected trApproval As System.Web.UI.HtmlControls.HtmlTableRow
Protected WithEvents txtPublishDate As System.Web.UI.WebControls.TextBox
Protected WithEvents cmdCalendar As System.Web.UI.WebControls.HyperLink
Protected WithEvents txtExpireDate As System.Web.UI.WebControls.TextBox
Protected WithEvents cmdCalendar2 As System.Web.UI.WebControls.HyperLink
Protected WithEvents chkFeatured As System.Web.UI.WebControls.CheckBox
Protected WithEvents cmdEditCategories As System.Web.UI.WebControls.HyperLink
Protected WithEvents cmdUpdate As System.Web.UI.WebControls.LinkButton
Protected WithEvents cmdCancel As System.Web.UI.WebControls.LinkButton
Protected WithEvents cmdDelete As System.Web.UI.WebControls.LinkButton
Protected WithEvents ctlAudit As DotNetNuke.UI.UserControls.ModuleAuditControl
Private sCategories As String
Private itemId As Integer = -1
Private bRequireApproval as Boolean = False
Private bCategoriesInstalled As Boolean = True
#End Region
#Region "Event Handlers"
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
try
' Determine ItemId of Article to Update
If Not (Request.Params("ItemId") Is Nothing) Then
itemId = Int32.Parse(Request.Params("ItemId"))
End If
bRequireApproval = CType(Settings("RequireApproval"), Boolean)
If Not IsPostBack Then
cmdDelete.Attributes.Add("onClick", "javascript:return confirm('Are You Sure You Wish To Delete This Item ?');")
cmdCalendar.NavigateUrl = DotNetNuke.Common.Utilities.Calendar.InvokePopupCal(txtPublishDate)
cmdCalendar2.NavigateUrl = DotNetNuke.Common.Utilities.Calendar.InvokePopupCal(txtExpireDate)
cboInternal.DataSource = GetPortalTabs(PortalSettings.DesktopTabs, True, True)
cboInternal.DataBind()
trApproval.Visible = bRequireApproval
chkApproved.Enabled = PortalSecurity.IsInRoles(PortalSettings.AdministratorRoleName) 'PortalSecurity.IsInRoles(PortalSettings.AdministratorRoleId.ToString)
ctlImage.FileFilter = glbImageFileTypes
If itemId = -1 Then
' Add Mode
rblDetailType.SelectedValue = "NoLink"
ctlAudit.Visible = False
cmdDelete.Visible = False
Else
' Edit Mode
BindArticle()
End If
Try
LoadCategories()
Catch
Throw New Exception("You must have Efficion's Categories Module installed and at least one Category added in order to use the Articles module. <a href='http://www.efficionconsulting.com/Default.aspx?tabid=352' Target='new'>Learn More</a>.")
End Try
lblNoCategories.Visible = not bCategoriesInstalled
End If
EnableControls()
Catch ex As Exception
ProcessModuleLoadException("Error Adding or Editing Article", me, ex, True)
End Try
End Sub
Private Sub cmdUpdate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdUpdate.Click
If Page.IsValid = True Then
Dim objArticle As New ArticleInfo
objArticle = CType(CBO.InitializeObject(objArticle, GetType(ArticleInfo)), ArticleInfo)
objArticle.ItemId = itemId
objArticle.PortalId = PortalId
objArticle.ModuleId = ModuleId
objArticle.UserId = UserInfo.UserID
ObjArticle.Title = txtTitle.Text
objArticle.Description = teDescription.Text
objArticle.Keywords = txtKeywords.Text
If txtPublishDate.Text = "" Then
objArticle.PublishDate = Today
Else
objArticle.PublishDate = Convert.ToDateTime(txtPublishDate.Text)
End If
If txtExpireDate.Text <> "" Then objArticle.ExpireDate = Convert.ToDateTime(txtExpireDate.Text)
objArticle.Featured = chkFeatured.Checked
objArticle.ImageFile = ctlImage.Url
If bRequireApproval Then
objArticle.Authed = chkApproved.Checked
Else
objArticle.Authed = True
End if
If rblDetailType.SelectedValue = "HTML" then
objArticle.Article = teDetails.Text
ElseIf rblDetailType.SelectedValue = "Internal" Then
objArticle.Article = "internal:" & cboInternal.SelectedValue.ToString
ElseIf rblDetailType.SelectedValue = "External" Then
objArticle.Article = "external:" & txtExternal.Text
Else 'optNoLink
objArticle.Article = "nolink:"
End if
'Add Categories
Dim objListItem As ListItem
If bCategoriesInstalled Then
Dim sCategories as String = ""
For Each objListItem In ctlCategories.Assigned
sCategories += objListItem.Value.ToString & ","
Next
'Remove the last comma
if sCategories.EndsWith(",") then sCategories = sCategories.Remove(sCategories.Length-1,1)
objArticle.Categories = sCategories
End If
'Update the Record
Dim objArticles as new ArticleController
If itemId = -1 Then
objArticles.AddArticle(objArticle)
Else
objArticles.UpdateArticle(objArticle)
End If
Response.Redirect(NavigateURL(), True)
End If
End Sub
Private Sub cmdDelete_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdDelete.Click
Try
If itemId <> -1 Then
Dim objArticles As New ArticleController()
objArticles.DeleteArticle(itemId)
End If
' Redirect back to the portal home page
Response.Redirect(NavigateURL(), True)
Catch exc As Exception 'Module failed to load
ProcessModuleLoadException(Me, exc)
End Try
End Sub
Private Sub cmdCancel_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdCancel.Click
Response.Redirect(NavigateURL(), True)
End Sub
#End Region
#Region "Private Methods"
Private Sub BindArticle()
' Obtain a single row of Article information
Dim objArticles As New ArticleController()
Dim objArticle As ArticleInfo = objArticles.GetArticle(itemId)
SetEditMode(Convert.ToString(objArticle.Article))
txtTitle.Text = objArticle.Title.ToString
teDescription.Text = Convert.ToString(objArticle.Description)
sCategories = Convert.ToString(objArticle.Categories)
txtKeywords.Text = objArticle.Keywords.ToString
if not Null.IsNull(objArticle.PublishDate) then txtPublishDate.Text = objArticle.PublishDate.ToShortDateString
if not Null.IsNull(objArticle.ExpireDate) then txtExpireDate.Text = objArticle.ExpireDate.ToShortDateString
chkFeatured.Checked = objArticle.Featured
chkApproved.Checked = objArticle.Authed
If Not objArticle.ImageFile = "" Then
Dim fc As New dotnetnuke.Services.FileSystem.FileController
Dim fi As DotNetNuke.Services.FileSystem.FileInfo
If objArticle.ImageFile.StartsWith("FileID=") Then
fi = fc.GetFileById(objArticle.ImageFile.Substring(7), PortalID)
Else
fi = fc.GetFile(objArticle.ImageFile, PortalID, "")
End If
if not fi is nothing then ctlImage.Url = fi.Folder & fi.FileName
End If
ctlAudit.CreatedByUser = objArticle.Username.ToString
ctlAudit.CreatedDate = CType(objArticle.CreatedDate, DateTime).ToString("g")
teDetails.Text = CType(objArticle.Article, String)
End Sub
Private Sub SetEditMode(articleText as String)
If articleText.StartsWith("external:") Then
rblDetailType.SelectedValue = "External"
txtExternal.Text = articleText.Substring(9)
ElseIf articleText.StartsWith("internal:") Then
rblDetailType.SelectedValue = "Internal"
If Not cboInternal.Items.FindByValue(articleText.Substring(9)) Is Nothing Then
cboInternal.Items.FindByValue(articleText.Substring(9)).Selected = True
End If
ElseIf articleText.StartsWith("nolink:") Then
rblDetailType.SelectedValue = "NoLink"
Else ' HTML
teDetails.ChooseMode = False
teDescription.ChooseMode = False
rblDetailType.SelectedValue = "HTML"
if RTBSupport() then
teDetails.Mode = "Rich"
teDescription.Mode = "Rich"
Else
teDetails.Mode = "Basic"
teDescription.Mode = "Basic"
End If
End If
End Sub
Private Sub EnableControls()
txtExternal.Visible = False
cboInternal.Visible = False
teDetails.Visible = False
plDetails.Visible = True
If rblDetailType.SelectedValue = "External" Then
txtExternal.Visible = True
'FIXME: Changing the text based on Detail Type isn't working
plDetails.Text = Localization.GetString("Details.External.Text")
elseif rblDetailType.SelectedValue = "Internal" Then
cboInternal.Visible = True
plDetails.Text = Localization.GetString("Details.Internal.Text")
elseif rblDetailType.SelectedValue = "HTML" Then
teDetails.Visible = True
plDetails.Text = Localization.GetString("Details.HTML.Text")
Else
plDetails.Visible = False
End If
End Sub
Private Sub LoadCategories()
Dim arCategories as ArrayList
Dim objCategories As New CategoryController
arCategories = objCategories.GetCategories(PortalId)
Dim arAvailableCategories as new ArrayList
Dim arAssignedCategories as new ArrayList
Dim ci As CategoryInfo
Dim bAssigned As Boolean
Dim sCategory As String
For Each ci In arCategories
bAssigned = False
If sCategories = "" Then
arAvailableCategories.Add(ci)
else
for each sCategory in sCategories.Split(",")
If sCategory <> "" Then
If sCategory = ci.CategoryId.ToString Then
arAssignedCategories.Add(ci)
bAssigned = True
End If
End If
Next
If not bAssigned Then arAvailableCategories.Add(ci)
End If
Next
ctlCategories.Assigned = arAssignedCategories
ctlCategories.Available = arAvailableCategories
'Successfully retrieved Categories
bCategoriesInstalled = True
End Sub
'Returns true if the users Browser supports RichTextBox
Private Function RTBSupport() as Boolean
'For FreeTextBox 3.0, Gecko Works on all platforms, IE 5+ only works under windows
if (Request.UserAgent.IndexOf("Gecko") <> -1) OR ((Request.UserAgent.IndexOf("MSIE 5") <> -1) OR (Request.UserAgent.IndexOf("MSIE 6") <> -1) OR (Request.UserAgent.IndexOf("MSIE 7") <> -1) AND (Request.UserAgent.IndexOf("Windows") <> -1)) then
return True
else
return False
end if
End Function
#End Region
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
End Class
End Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -