using System; using System.Globalization; using System.Threading; using System.Web; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.PortalEngine; using CMS.SettingsProvider; using CMS.UIControls; using CMS.DocumentEngine; using CMS.ExtendedControls; public partial class CMSModules_Widgets_Controls_Dashboard : CMSUserControl { #region "Variables" private bool mHighlightDropableAreas = true; private bool mActivateZoneBorder = false; #endregion #region "Properties" /// /// Gets or sets the dashboard site name. /// public string DashboardSiteName { get { return PortalContext.DashboardSiteName; } set { PortalContext.DashboardSiteName = value; } } /// /// Gets or sets the portal page instance. /// public PortalPage PortalPageInstance { get; set; } /// /// Gets or sets the literal control. /// public Literal TagsLiteral { get; set; } /// /// Gets or sets the element name. /// public string ResourceName { get; set; } /// /// Gets or sets the element name. /// public string ElementName { get; set; } /// /// Dropable areas are highlighted when widget dragged. /// public bool HighlightDropableAreas { get { return mHighlightDropableAreas; } set { mHighlightDropableAreas = value; } } /// /// If true zone border can be activated (+add widget button). /// public bool ActivateZoneBorder { get { return mActivateZoneBorder; } set { mActivateZoneBorder = value; } } #endregion #region "Page events" protected override void OnInit(EventArgs e) { base.OnInit(e); // Disable callback for webpart movement // Validation viewstate may cause errors when changing DOM of page and callback event afterwards (typically drag&drop widget(webpart)manipulation) String target = ValidationHelper.GetString(Request.Form["__CALLBACKID"], String.Empty); String argument = ValidationHelper.GetString(Request.Form["__CALLBACKPARAM"], String.Empty); string[] argumentParts = argument.Split('\n'); if (argumentParts.Length > 0) { if ((target == manPortal.UniqueID) && (argumentParts[0].ToLowerCSafe() == "movewebpartasync")) { EnableViewState = false; } } } /// /// Check security. /// protected void Page_Load(object sender, EventArgs e) { ScriptHelper.RegisterTitleScript(Page, GetString("mydesk.ui.mydashboard")); if (!String.IsNullOrEmpty(ResourceName) && !String.IsNullOrEmpty(ElementName)) { // Check UIProfile if ((CMSContext.CurrentUser == null) || (!CMSContext.CurrentUser.IsAuthorizedPerUIElement(ResourceName, ElementName))) { URLHelper.Redirect(UIHelper.GetInformationUrl("uiprofile.uinotavailable")); } } if (!CheckHashCode()) { RedirectToAccessDenied(GetString("dashboard.invalidparameters")); } } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Init the header tags TagsLiteral.Text = PortalPageInstance.HeaderTags; } #endregion #region "Methods" /// /// Ensures dashboard initialization. /// public void SetupDashboard() { // Register placeholder for context menu ICMSPage page = Page as ICMSPage; if (page != null) { page.ContextMenuContainer = plcCtx; } if (PortalPageInstance == null) { throw new Exception("[DashboardControl.SetupDashboard] Portal page instance must be set."); } // Default settings for drag and drop for dashboard manPortal.HighlightDropableAreas = HighlightDropableAreas; manPortal.ActivateZoneBorder = ActivateZoneBorder; string dashboardName = QueryHelper.GetString("DashboardName", PersonalizationInfoProvider.UNDEFINEDDASHBOARD); // Set culture CultureInfo ci = CultureHelper.PreferredUICultureInfo; Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; // Init the page components PortalPageInstance.PageManager = manPortal; manPortal.SetMainPagePlaceholder(plc); string templateName = QueryHelper.GetString("templatename", String.Empty); PageTemplateInfo pti = PageTemplateInfoProvider.GetPageTemplateInfo(templateName); if (pti != null) { if (pti.PageTemplateType != PageTemplateTypeEnum.Dashboard) { RedirectToAccessDenied("dashboard.invalidpagetemplate"); } // Prepare virtual page info PageInfo pi = PageInfoProvider.GetVirtualPageInfo(pti.PageTemplateId); pi.DocumentNamePath = "/" + templateName; CMSContext.CurrentPageInfo = pi; // Set the design mode PortalContext.SetRequestViewMode(ViewModeEnum.DashboardWidgets); PortalContext.DashboardName = dashboardName; ContextHelper.Add("DisplayContentInDesignMode", "0", true, false, false, DateTime.MinValue); PortalPageInstance.ManagersContainer = plcManagers; PortalPageInstance.ScriptManagerControl = manScript; } else { RedirectToInformation(GetString("dashboard.notemplate")); } } /// /// Checks whether url parameters are valid. /// protected bool CheckHashCode() { // Get hashcode from querystring string hash = QueryHelper.GetString("hash", String.Empty); // Check whether url contains all reuired values if (QueryHelper.Contains("dashboardname") && !String.IsNullOrEmpty(hash)) { // Try get custom hash values string hashValues = QueryHelper.GetString("hashvalues", String.Empty); string hashString = String.Empty; // Use default hash values if (String.IsNullOrEmpty(hashValues)) { hashString = QueryHelper.GetString("dashboardname", String.Empty) + "|" + QueryHelper.GetString("templatename", String.Empty); } // Use custom hash values else { string[] values = hashValues.Split(';'); foreach (string value in values) { hashString += QueryHelper.GetString(value, String.Empty) + "|"; } hashString = hashString.TrimEnd('|'); } // Compare url hash with current hash return ((CMSString.Compare(hash, ValidationHelper.GetHashString(hashString), false) == 0)); } return false; } #endregion }