using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace yaf.pages
{
///
/// Summary description for attachments.
///
public partial class attachments : ForumPage
{
private DataRow forum, topic;
public attachments()
: base( "ATTACHMENTS" )
{
}
protected void Page_Load( object sender, System.EventArgs e )
{
using ( DataTable dt = DB.forum_list( PageBoardID, PageForumID ) )
forum = dt.Rows [0];
topic = DB.topic_info( PageTopicID );
if ( !IsPostBack )
{
if ( !ForumModeratorAccess && !ForumUploadAccess )
Data.AccessDenied();
if ( !ForumReadAccess )
Data.AccessDenied();
if ( ( ( int ) topic ["Flags"] & ( int ) TopicFlags.Locked ) == ( int ) TopicFlags.Locked )
Data.AccessDenied(/*"The topic is closed."*/);
if ( ( ( int ) forum ["Flags"] & ( int ) ForumFlags.Locked ) == ( int ) ForumFlags.Locked )
Data.AccessDenied(/*"The forum is closed."*/);
// Check that non-moderators only edit messages they have written
if ( !ForumModeratorAccess )
using ( DataTable dt = DB.message_list( Request.QueryString ["m"] ) )
if ( ( int ) dt.Rows [0] ["UserID"] != PageUserID )
Data.AccessDenied(/*"You didn't post this message."*/);
if ( ForumControl.LockedForum == 0 )
{
PageLinks.AddLink( BoardSettings.Name, Forum.GetLink( Pages.forum ) );
PageLinks.AddLink( PageCategoryName, Forum.GetLink( Pages.forum, "c={0}", PageCategoryID ) );
}
PageLinks.AddForumLinks( PageForumID );
PageLinks.AddLink( PageTopicName, Forum.GetLink( Pages.posts, "t={0}", PageTopicID ) );
PageLinks.AddLink( GetText( "TITLE" ), "" );
Back.Text = GetText( "BACK" );
Upload.Text = GetText( "UPLOAD" );
BindData();
}
}
private void BindData()
{
DataTable dt = DB.attachment_list( Request.QueryString ["m"], null, null );
List.DataSource = dt;
List.Visible = ( dt.Rows.Count > 0 ) ? true : false;
DataBind();
}
protected void Delete_Load( object sender, System.EventArgs e )
{
( ( LinkButton ) sender ).Attributes ["onclick"] = String.Format( "return confirm('{0}')", GetText( "ASK_DELETE" ) );
}
private void Back_Click( object sender, System.EventArgs e )
{
Forum.Redirect( Pages.posts, "m={0}#{0}", Request.QueryString ["m"] );
}
private void List_ItemCommand( object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e )
{
switch ( e.CommandName )
{
case "delete":
DB.attachment_delete( e.CommandArgument );
BindData();
break;
}
}
private void Upload_Click( object sender, System.EventArgs e )
{
try
{
CheckValidFile( File );
SaveAttachment( Request.QueryString ["m"], File );
BindData();
}
catch ( Exception x )
{
DB.eventlog_create( PageUserID, this, x );
AddLoadMessage( x.Message );
return;
}
}
private void CheckValidFile( HtmlInputFile file )
{
if ( file.PostedFile == null || file.PostedFile.FileName.Trim().Length == 0 || file.PostedFile.ContentLength == 0 )
return;
string filename = file.PostedFile.FileName;
int pos = filename.LastIndexOfAny( new char [] { '/', '\\' } );
if ( pos >= 0 )
filename = filename.Substring( pos + 1 );
pos = filename.LastIndexOf( '.' );
if ( pos >= 0 )
{
switch ( filename.Substring( pos + 1 ).ToLower() )
{
default:
break;
case "asp":
case "aspx":
case "ascx":
case "config":
case "php":
case "php3":
case "js":
case "vb":
case "vbs":
throw new Exception( String.Format( GetText( "fileerror" ), filename ) );
}
}
}
private void SaveAttachment( object messageID, HtmlInputFile file )
{
if ( file.PostedFile == null || file.PostedFile.FileName.Trim().Length == 0 || file.PostedFile.ContentLength == 0 )
return;
string sUpDir = Request.MapPath(Config.UploadDir);
string filename = file.PostedFile.FileName;
int pos = filename.LastIndexOfAny( new char [] { '/', '\\' } );
if ( pos >= 0 ) filename = filename.Substring( pos + 1 );
// verify the size of the attachment
if ( BoardSettings.MaxFileSize > 0 && file.PostedFile.ContentLength > BoardSettings.MaxFileSize )
throw new Exception( GetText( "ERROR_TOOBIG" ) );
if ( BoardSettings.UseFileTable )
{
DB.attachment_save( messageID, filename, file.PostedFile.ContentLength, file.PostedFile.ContentType, file.PostedFile.InputStream );
}
else
{
file.PostedFile.SaveAs( String.Format( "{0}{1}.{2}", sUpDir, messageID, filename ) );
DB.attachment_save( messageID, filename, file.PostedFile.ContentLength, file.PostedFile.ContentType, null );
}
}
#region Web Form Designer generated code
override protected void OnInit( EventArgs e )
{
Back.Click += new EventHandler( Back_Click );
Upload.Click += new EventHandler( Upload_Click );
List.ItemCommand += new RepeaterCommandEventHandler( List_ItemCommand );
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit( e );
}
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
}
#endregion
}
}