using System;
using System.Data;
using System.Web.UI.WebControls;
using CMS.GlobalHelper;
using CMS.OnlineMarketing;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.WorkflowEngine;
using CMS.SiteProvider;
using CMS.CMSHelper;
public partial class CMSModules_ContactManagement_Controls_UI_Automation_PendingContacts : CMSAdminEditControl
{
#region "Public properties"
///
/// Gets or sets current site id.
///
public int SiteID
{
get;
set;
}
///
/// Indicates if control is used as widget.
///
public bool IsWidget
{
get;
set;
}
///
/// Gets or sets default page size of list control.
///
public int PageSize
{
get;
set;
}
#endregion
#region "Page events"
protected void Page_Load(object sender, EventArgs e)
{
if (!StopProcessing)
{
SetupControl();
}
else
{
listElem.StopProcessing = true;
listElem.Visible = false;
}
}
///
/// Setup control.
///
private void SetupControl()
{
if (!URLHelper.IsPostback() && (PageSize > 0))
{
listElem.Pager.DefaultPageSize = PageSize;
}
listElem.ZeroRowsText = GetString("ma.pendingcontacts.nowaitingcontacts");
// Hide site column for site records
if (SiteID != UniSelector.US_ALL_RECORDS)
{
// Site column
listElem.GridColumns.Columns[5].Visible = false;
}
listElem.EditActionUrl = "Process_Detail.aspx?stateid={0}&siteid=" + SiteID + (ContactHelper.IsSiteManager ? "&issitemanager=1" : String.Empty);
listElem.WhereCondition = "StateStatus = " + (int)ProcessStatusEnum.Pending + " ";
listElem.RememberStateByParam = String.Empty;
if (SiteID != 0)
{
// Prepare site filtering
string siteCondition = "AND (StateSiteID {0})";
switch (SiteID)
{
case UniSelector.US_GLOBAL_RECORD:
siteCondition = String.Format(siteCondition, "IS NULL");
break;
case UniSelector.US_ALL_RECORDS:
siteCondition = String.Empty;
break;
default:
siteCondition = String.Format(siteCondition, "= " + SiteID);
break;
}
// Append site condition
listElem.WhereCondition += siteCondition;
}
// Get complete where condition for pending steps
string where = WorkflowStepInfoProvider.GetAutomationPendingStepsWhereCondition(CurrentUser, SiteInfoProvider.GetSiteName(SiteID));
// If empty current user has Manage processes permissions and show all processes
if (!String.IsNullOrEmpty(where))
{
// Create query parameters
QueryDataParameters parameters = new QueryDataParameters();
parameters.Add("@SiteID", SiteID);
parameters.Add("@UserID", CurrentUser.UserID);
parameters.Add("@Now", DateTime.Now);
listElem.QueryParameters = parameters;
// Add pending steps where condition
listElem.WhereCondition = SqlHelperClass.AddWhereCondition(listElem.WhereCondition, where);
}
listElem.OnExternalDataBound += listElem_OnExternalDataBound;
// Register scripts for contact details dialog
ScriptHelper.RegisterDialogScript(Page);
ScriptHelper.RegisterWOpenerScript(Page);
ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "ViewContactDetails", ScriptHelper.GetScript(
"function Refresh() { \n " +
"window.location.href = window.location.href;\n" +
"}" +
"function viewContactDetails(contactId) {" +
" modalDialog('" + URLHelper.ResolveUrl("~/CMSModules/ContactManagement/Pages/Tools/Account/Contact_Detail.aspx") + "?isSiteManager=" + ContactHelper.IsSiteManager + "&contactId=' + contactId, 'ViewContactDetails', '1024', '700');" +
"}"));
// If widget register action for view process in dialog
if (IsWidget)
{
ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "ViewPendingContactProcess", ScriptHelper.GetScript(
"function viewPendingContactProcess(stateId) {" +
" modalDialog('" + URLHelper.ResolveUrl("~/CMSModules/ContactManagement/Pages/Tools/PendingContacts/Process_Detail_Frameset.aspx") + "?dialogmode=1&stateId=' + stateId, 'ViewPendingContactProcess', '1024', '700');" +
"}"));
}
}
protected object listElem_OnExternalDataBound(object sender, string sourceName, object parameter)
{
switch (sourceName.ToLowerCSafe())
{
// Set visibility for edit button
case "edit":
if (IsWidget)
{
ImageButton editbtn = sender as ImageButton;
if (editbtn != null)
{
editbtn.Visible = false;
}
}
break;
// Set visibility for dialog edit button
case "dialogedit":
ImageButton editdialogbtn = sender as ImageButton;
if (editdialogbtn != null)
{
editdialogbtn.Visible = IsWidget;
}
break;
// Delete action
case "delete":
int siteId = SiteID;
if (SiteID == UniSelector.US_GLOBAL_OR_SITE_RECORD)
{
DataRowView drv = (parameter as GridViewRow).DataItem as DataRowView;
int contactSiteId = ValidationHelper.GetInteger(drv["StateSiteID"], 0);
if (contactSiteId > 0)
{
siteId = contactSiteId;
}
}
ImageButton btn = (ImageButton)sender;
btn.OnClientClick = "if(!confirm(" + ScriptHelper.GetString(string.Format(ResHelper.GetString("autoMenu.RemoveStateConfirmation"), HTMLHelper.HTMLEncode(ResHelper.GetString(TypeHelper.GetObjectTypeResourceKey(PredefinedObjectType.CONTACT)).ToLowerCSafe()))) + ")) { return false; }";
if (!WorkflowStepInfoProvider.CanUserRemoveAutomationProcess(CurrentUser, SiteInfoProvider.GetSiteName(siteId)))
{
if (btn != null)
{
btn.Enabled = false;
btn.Attributes.Add("src", GetImageUrl("Design/Controls/UniGrid/Actions/DeleteDisabled.png"));
}
}
break;
// State created column
case "statecreated":
DateTime time = ValidationHelper.GetDateTime(parameter, DateTimeHelper.ZERO_TIME);
if (time == DateTimeHelper.ZERO_TIME)
{
return string.Empty;
}
else
{
return TimeZoneHelper.ConvertToUserTimeZone(time, false, CMSContext.CurrentUser, CMSContext.CurrentSite);
}
}
return null;
}
#endregion
}