- •Оглавление
- •Введение
- •Общая характеристика работы
- •Глава 1 построение логической модели
- •1.1 Постановка задачи
- •1.2 Описание предметной области
- •1.3 Описание логической структуры таблиц базы данных
- •1.4.Связи в таблицах
- •1.5 Описание программного обеспечения, используемого в работе
- •1.6 Система меню
- •Глава 2 состав отдельных модулей
- •2.1 Хранимые процедуры
- •2.2 Класс связующий информацию сайта с базой данной
- •2.3 Класс, выполняющий операции над данными в базе
- •2.4 Страница сайта, отображающая информацию с базы данных Newsletters.Aspx:
- •2.5 Страница сайта, отображающая информацию с базы данных Newsletters.Cs
- •2.6 Страница добавления (изменения) информации из базы данных AddEditNewsletters.Cs.
- •Заключение
- •Список использованных источников
- •Приложения:
- •Приложение a.
2.5 Страница сайта, отображающая информацию с базы данных Newsletters.Cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.Profile;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using MB.AppliedMathematics.DAL.Details;
using MB.AppliedMathematics.DAL.SqlClient;
using System.IO;
using System.Net.Mail;
using System.Net;
using System.Text;
using System.Net.Mime;
using System.Web.Configuration;
using System.Net.Configuration;
using System.Collections.Generic;
namespace MB.AppliedMathematics.UI
{
public partial class Newsletters : BasePage
{
private bool _userCanEdit = false;
protected bool UserCanEdit
{
get { return _userCanEdit; }
set { _userCanEdit = value; }
}
protected void Page_Init(object sender, EventArgs e)
{
UserCanEdit = (this.User.Identity.IsAuthenticated &&
(this.User.IsInRole("Administrators") || this.User.IsInRole("Editors")));
}
protected void Page_Load(object sender, EventArgs e)
{
// панели для редактирования новости видны только администраторам и редакторам
if (!this.IsPostBack)
{ if (this.User.Identity.IsAuthenticated &&
(this.User.IsInRole("Administrators") || this.User.IsInRole("Editors")))
{ panAdd.Visible = true;
AddNews.Visible = true; }
Data(TextBoxSearch.Text); }
ImageSendGreed();
}
// показываем в ввиде картинки состояние новости, разослана она или нет подписчикам
protected void ImageSendGreed()
{ for (int i = 0; i < ListView1.Items.Count; i++)
{ Image ImageNewsletter = (Image)ListView1.Items[i].FindControl("ImageNewsletter");
Label LabelNewsletter = (Label)ListView1.Items[i].FindControl("LabelNewsletter");
if (LabelNewsletter.Text == "False")
{ImageNewsletter.ToolTip = "Новость еще не разослана";
ImageNewsletter.ImageUrl = "~/Images/Envelope.png";}
else
{ImageNewsletter.ToolTip = "Новость разослана";
ImageNewsletter.ImageUrl = "~/Images/OpenEnvelope.png";}
} }
// формируем DataSet с именами и e-mail подписчиков
protected DataSet Addresset()
{
DataSet Address = new DataSet();
Address.Tables.Add("Table");
Address.Tables["Table"].Columns.Add("User");
Address.Tables["Table"].Columns.Add("eMail");
MembershipUserCollection allUsers = Membership.GetAllUsers();
foreach (MembershipUser user in allUsers)
{ProfileCommon profile = new ProfileCommon();
profile = Profile.GetProfile(user.UserName);
if (profile.Preferences.Newsletter == "Да")
{DataRow dr = Address.Tables["Table"].NewRow();
dr["User"] = user.UserName;
dr["eMail"] = user.Email;
Address.Tables["Table"].Rows.Add(dr);
}}
return Address;
}
// процедура отправки письма с новостью
protected int SendMail(string user, string email, string subject, string bodyText)
{try
{Configuration config = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
MailSettingsSectionGroup settings = (MailSettingsSectionGroup)config.GetSectionGroup("system.net/mailSettings");
SmtpClient Smtp = new SmtpClient(settings.Smtp.Network.Host, settings.Smtp.Network.Port);
Smtp.Credentials = new NetworkCredential(settings.Smtp.From, settings.Smtp.Network.Password);
// оправляем сообщение
MailMessage msg = new MailMessage();
msg.IsBodyHtml = false;
msg.From = new MailAddress(settings.Smtp.From);
msg.To.Add(new MailAddress(email, ""));
msg.IsBodyHtml = true;
msg.Subject = string.Format(Globals.Settings.ContactForm.MailSubject, subject);
string body = "Здравствуйте " + user + "!"+"\n";
body = body + bodyText;
msg.Body = body;
Smtp.Send(msg);
return 1;
}
catch (Exception ex)
{ return 0; }
}
// отправка писем происходит в событии таймера
protected void Timer1_Tick(object sender, EventArgs e)
{DataSet Addres = (DataSet)Application["Address"];
int index = (int)Application["index"];
NewsletterDetails zap = (NewsletterDetails)Application["Newsletter"];
if (index < Addres.Tables[0].Rows.Count)
{DataRow dr = Addres.Tables[0].Rows[index];
LabelSendCurrent.Text = (index + 1).ToString();
Application["LetterSend"] = (int)Application["LetterSend"] + SendMail(dr["User"].ToString(), dr["eMail"].ToString(), "Новости", "\n"+"Тема новости: "+zap.Subject+"\n"+zap.HtmlBody);
Application["index"] = (int)Application["index"] + 1;
}
else
{SQLNewsletterProvider MyDb = new SQLNewsletterProvider();
MyDb.UpdateNewsletterSend(zap.ID);
Timer1.Enabled = false;
int LetterSend = (int)Application["LetterSend"];
int LetterNoSend = Addres.Tables[0].Rows.Count - LetterSend;
LabelLetterSendL.Visible = true;
LabelLetterNoSendL.Visible = true;
LabelLetterSend.Text = LetterSend.ToString();
LabelLetterNoSend.Text = LetterNoSend.ToString();
PanelAnim.Visible = false;
ButtonOK.Visible = true;
Data(TextBoxSearch.Text);
ImageSendGreed();
}}
protected void clear()
{LabelLetterSendL.Visible = false;
LabelLetterNoSendL.Visible = false;
LabelLetterSend.Text = "";
LabelLetterNoSend.Text = "";
LabelSendCurrent.Text = "0"; }
protected void ButtonOK_Click(object sender, EventArgs e)
{PanelSendEmail.Visible = false;}
//кнопка поиска
protected void ImageButtonSearch_Click(object sender, ImageClickEventArgs e)
{Data(TextBoxSearch.Text);}
//заполнение данными ListView с новостями
protected void Data(string param)
{SQLNewsletterProvider myDB = new SQLNewsletterProvider();
List<NewsletterDetails> zaps = new List<NewsletterDetails>();
zaps = myDB.GetNewsletters(param);
ObjectDataSource1.SelectParameters["param"] = new Parameter("param", TypeCode.String, TextBoxSearch.Text);
ListView1.DataBind();
LabelCount.Text = zaps.Count.ToString();
TextBoxSearch.Text = "";
}
// команды в записях ListView
protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
{ if (e.CommandName == "Send")
{
clear();
SQLNewsletterProvider MyDb = new SQLNewsletterProvider();
NewsletterDetails zap = new NewsletterDetails();
int id = Convert.ToInt32(e.CommandArgument.ToString());
zap = MyDb.GetNewsletterByID(id);
Application["Newsletter"] = zap;
DataSet Address = new DataSet();
Address = Addresset();
Application["Address"] = Address;
Application["index"] = 0;
Application["LetterSend"] = 0;
Application["LetternoSend"] = 0;
LabelCountAddress.Text = Address.Tables["Table"].Rows.Count.ToString();
PanelSendEmail.Visible = true;
Timer1.Enabled = true;
PanelAnim.Visible = true;
}
if (e.CommandName == "Del")
{
SQLNewsletterProvider MyDb = new SQLNewsletterProvider();
MyDb.DeleteNewsletter(Convert.ToInt32(e.CommandArgument.ToString()));
Data(TextBoxSearch.Text);
ImageSendGreed();
}}}}