Taylohtio/GeneralApi/GeneralApi.MOSS/Layouts/Taloyhtio/MDb/RelateCondo.aspx.cs

120 lines
4.6 KiB
C#

using System;
using System.Collections.Generic;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using GeneralApi.Core.Repositories;
using Microsoft.Practices.ServiceLocation;
using System.Drawing;
using System.Linq;
using System.Web.UI.WebControls;
using Microsoft.SharePoint.Utilities;
using NHibernate.Validator.Engine;
using Taloyhtio.GeneralApi.Common.Extensions;
using Taloyhtio.GeneralApi.Core.Entities;
namespace Taloyhtio.GeneralApi.MOSS
{
public partial class RelateCondo : LayoutsPageBase
{
private const int NO_CONDO_INDEX = -1;
public const string NO_SELECTION = "[No selection]";
protected void Page_Load(object sender, EventArgs e)
{
var currentWeb = SPContext.Current.Web;
if (!currentWeb.DoesUserHavePermissions(SPBasePermissions.ManageWeb))
{
SPUtility.TransferToErrorPage("You don't have necessary permissions to perform this operation",
currentWeb.Title, currentWeb.Url);
}
if (!this.IsPostBack)
{
var condoRepository = ServiceLocator.Current.GetInstance<ICondoRepository>();
var allCondos = condoRepository.GetAll();
var viewModelCondos = new List<object>();
if (!allCondos.IsNullOrEmpty())
{
viewModelCondos =
allCondos.Select(
c =>
(object)new { Id = c.Id, OfficialName = c.Deactivated ? string.Format("{0} (deactivated)", c.OfficialName) : c.OfficialName }).ToList();
}
viewModelCondos.Insert(0, new { Id = NO_CONDO_INDEX, OfficialName = NO_SELECTION });
this.ddlCondos.DataSource = viewModelCondos;
this.ddlCondos.DataBind();
var currentCondo = allCondos.FirstOrDefault(c => c.WebId == SPContext.Current.Web.ID);
if (currentCondo != null)
{
this.ddlCondos.SelectedValue = currentCondo.Id.ToString();
this.lblExistingCondo.Text = currentCondo.OfficialName;
this.pnlAlreadyRelated.Visible = true;
}
}
}
protected void SaveButtonClick(object sender, EventArgs e)
{
this.pnlAlreadyRelated.Visible = false;
var condoRepository = ServiceLocator.Current.GetInstance<ICondoRepository>();
// unrelate old condos first
var oldCondos = condoRepository.GetByWebId(SPContext.Current.Web.ID);
if (!oldCondos.IsNullOrEmpty())
{
foreach (Condo oldCondo in oldCondos)
{
oldCondo.WebAppId = null;
oldCondo.SiteId = null;
oldCondo.WebId = null;
}
}
if (this.ddlCondos.SelectedValue == NO_CONDO_INDEX.ToString())
{
this.showText("Current site is not assoiated with any Condo from master database now", Color.Green);
return;
}
// relate site with seleced condo
int id = int.Parse(this.ddlCondos.SelectedValue);
var condo = condoRepository.GetById(id);
if (condo == null)
{
this.showText(string.Format("Condo with id = '{0}' not found", id), Color.Red);
return;
}
condo.WebAppId = SPContext.Current.Site.WebApplication.Id;
condo.SiteId = SPContext.Current.Site.ID;
condo.WebId = SPContext.Current.Web.ID;
var validator = ServiceLocator.Current.GetInstance<ValidatorEngine>();
var errors = validator.Validate(condo);
if (!errors.IsNullOrEmpty())
{
this.showText(string.Join("<br />", errors.Select(c => c.ToString()).ToArray()), Color.Red);
return;
}
condo.LastUpdated = DateTime.Now;
condoRepository.Save(condo);
this.showText(string.Format("Condo '{0}' was sucessfully associated with site '{1}'",
this.ddlCondos.SelectedItem.Text, SPContext.Current.Web.Url), Color.Green);
}
private void showText(string text, Color c)
{
this.lblStatus.Text = text;
this.lblStatus.ForeColor = c;
}
protected void CancelButtonClick(object sender, EventArgs e)
{
SPUtility.Redirect(SPContext.Current.Web.Url, SPRedirectFlags.Default, Context);
}
}
}