using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.WebAnalytics;
[EditedObject(AnalyticsObjectType.CAMPAIGN, "campaignId")]
public partial class CMSModules_WebAnalytics_Pages_Tools_Campaign_Tab_Conversions : CMSCampaignAndConversionPage
{
#region "Variables"
private string currentValues = string.Empty;
private int campaignID = 0;
private CampaignInfo ci = null;
#endregion
protected void Page_Load(object sender, EventArgs e)
{
ci = EditedObject as CampaignInfo;
if (!RequestHelper.IsPostBack())
{
if (ci != null)
{
rbAllConversions.Checked = ci.CampaignUseAllConversions;
rbSelectedConversions.Checked = !ci.CampaignUseAllConversions;
}
}
// Validate SiteID for non administrators
if ((ci != null) && (!CMSContext.CurrentUser.IsGlobalAdministrator))
{
if (ci.CampaignSiteID != CMSContext.CurrentSiteID)
{
RedirectToAccessDenied(GetString("cmsmessages.accessdenied"));
}
}
plcTable.Visible = !rbAllConversions.Checked;
lblAvialable.Text = GetString("campaign.availableconversions");
campaignID = QueryHelper.GetInteger("campaignid", 0);
// Get the conversions
currentValues = GetConversions();
if (!RequestHelper.IsPostBack())
{
usConversions.Value = currentValues;
}
usConversions.WhereCondition = "ConversionSiteID = " + CMSContext.CurrentSiteID;
usConversions.OnSelectionChanged += usConversions_OnSelectionChanged;
rbAllConversions.CheckedChanged += ConversionsSelection_changed;
rbSelectedConversions.CheckedChanged += ConversionsSelection_changed;
}
protected void ConversionsSelection_changed(object sender, EventArgs ea)
{
// Check "modify" permission
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.WebAnalytics", "ManageCampaigns"))
{
RedirectToAccessDenied("CMS.WebAnalytics", "Manage campaigns");
}
if (ci != null)
{
ci.CampaignUseAllConversions = rbAllConversions.Checked;
if (ci.CampaignUseAllConversions)
{
CampaignInfoProvider.RemoveAllConversionsFromCampaign(campaignID);
}
CampaignInfoProvider.SetCampaignInfo(ci);
ShowChangesSaved();
}
}
///
/// Returns string with conversions ids
///
private string GetConversions()
{
DataSet ds = ConversionCampaignInfoProvider.GetConversionCampaigns("CampaignID = " + campaignID, null, 0, "ConversionID");
if (!DataHelper.DataSourceIsEmpty(ds))
{
return TextHelper.Join(";", SystemDataHelper.GetStringValues(ds.Tables[0], "ConversionID"));
}
return String.Empty;
}
protected void usConversions_OnSelectionChanged(object sender, EventArgs e)
{
SaveConversions();
}
///
/// Saves the changes in conversions
///
protected void SaveConversions()
{
// Check permissions
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.WebAnalytics", "ManageConversions"))
{
RedirectToAccessDenied("CMS.WebAnalytics", "Manage conversions");
}
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.WebAnalytics", "ManageCampaigns"))
{
RedirectToAccessDenied("CMS.WebAnalytics", "Manage campaigns");
}
// Remove old items
string newValues = ValidationHelper.GetString(usConversions.Value, null);
string items = DataHelper.GetNewItemsInList(newValues, currentValues);
if (!String.IsNullOrEmpty(items))
{
string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
if (newItems != null)
{
// Add all new items to site
foreach (string item in newItems)
{
int conversionID = ValidationHelper.GetInteger(item, 0);
// remove conversion
ConversionCampaignInfoProvider.RemoveConversionFromCampaign(conversionID, campaignID);
}
}
}
// Add new items
items = DataHelper.GetNewItemsInList(currentValues, newValues);
if (!String.IsNullOrEmpty(items))
{
string[] newItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
if (newItems != null)
{
bool falseValues = false;
// Add all new items to site
foreach (string item in newItems)
{
int conversionID = ValidationHelper.GetInteger(item, 0);
ConversionCampaignInfoProvider.AddConversionToCampaign(conversionID, campaignID);
}
// If some of sites could not be assigned reload selector value
if (falseValues)
{
usConversions.Value = GetConversions();
usConversions.Reload(true);
}
}
}
ShowChangesSaved();
}
}