⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editarticle.ascx.vb

📁 Module articles for Dot Net Nuke 3.x.x , 4.x.x
💻 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 + -