using System; using System.Text; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.PortalEngine; using CMS.SiteProvider; using CMS.DocumentEngine; using CMS.UIControls; using CMS.TranslationServices; using CMS.SettingsProvider; using TreeNode = CMS.DocumentEngine.TreeNode; public partial class CMSModules_Content_CMSDesk_New_NewCultureVersion : CMSContentPage { #region "Variables" TreeNode node = null; #endregion #region "Properties" /// /// Gets the target culture code /// protected string RequiredCulture { get { return QueryHelper.GetString("culture", CMSContext.PreferredCultureCode); } } /// /// Gets a value that indicates if the page is loaded inside a split view. /// public bool IsInCompare { get { return QueryHelper.GetBoolean("compare", false); } } #endregion #region "Page events" /// /// Adds the script to the page /// /// JavaScript code public override void AddScript(string script) { ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "NewCultureVersionScript", script, true); } protected override void OnInit(EventArgs e) { // Do not check changes DocumentManager.RegisterSaveChangesScript = false; // Do not redirect for non-existing document DocumentManager.RedirectForNonExistingDocument = false; base.OnInit(e); } protected void Page_Load(object sender, EventArgs e) { // Register progress script ScriptHelper.RegisterProgress(Page); string culture = RequiredCulture; // Check if the culture is valid CheckPreferredCulture(true, culture); StringBuilder sb = new StringBuilder(); sb.Append("var radCopyElem = document.getElementById('", radCopy.ClientID, "');\n", "var radTranslations = document.getElementById('", radTranslate.ClientID, "');\n", "function FramesRefresh(selectNodeId) { parent.RefreshTree(selectNodeId, selectNodeId); parent.SelectNode(selectNodeId); }"); ltlScript.Text += ScriptHelper.GetScript(sb.ToString()); // Setup page title text and image CultureInfo ci = CultureInfoProvider.GetCultureInfo(culture); string cult = (ci == null) ? null : " (" + HTMLHelper.HTMLEncode(ci.CultureName) + ")"; CurrentMaster.Title.TitleText = GetString("Content.NewCultureVersionTitle") + cult; CurrentMaster.Title.TitleImage = UIHelper.GetFlagIconUrl(this, culture, "48x48"); CurrentMaster.Title.HelpTopicName = "cms_content_newculture"; lblInfo.Text = GetString("ContentNewCultureVersion.Info"); radCopy.Text = GetString("ContentNewCultureVersion.Copy"); radEmpty.Text = GetString("ContentNewCultureVersion.Empty"); radTranslate.Text = GetString("ContentNewCultureVersion.Translate"); radCopy.Attributes.Add("onclick", "ShowSelection();"); radEmpty.Attributes.Add("onclick", "ShowSelection()"); radTranslate.Attributes.Add("onclick", "ShowSelection()"); btnCreateDocument.Text = GetString("ContentNewCultureVersion.Create"); btnTranslate.Text = GetString("ContentNewCultureVersion.TranslateButton"); btnTranslate.Click += btnTranslate_Click; btnCreateDocument.Click += btnCreateDocument_Click; if (NodeID > 0) { // Fill in the existing culture versions node = Tree.SelectSingleNode(NodeID, TreeProvider.ALL_CULTURES); if (node != null) { bool translationAllowed = SettingsKeyProvider.GetBoolValue(node.NodeSiteName + ".CMSEnableTranslations"); if (translationAllowed) { translationElem.TranslationSettings = new TranslationSettings { TargetLanguage = culture }; translationElem.NodeID = node.NodeID; } else { translationElem.StopProcessing = true; plcTranslationServices.Visible = false; } if (!CMSContext.CurrentUser.IsAuthorizedToCreateNewDocument(node.NodeParentID, node.NodeClassName)) { pnlNewVersion.Visible = false; lblInfo.Visible = false; ShowError(GetString("accessdenied.notallowedtocreatenewcultureversion")); } else { SiteInfo si = SiteInfoProvider.GetSiteInfo(node.NodeSiteID); if (si != null) { TreeNode originalNode = Tree.GetOriginalNode(node); copyCulturesElem.UniSelector.DisplayNameFormat = "{% CultureName %}{% if (CultureCode == \"" + CultureHelper.GetDefaultCulture(si.SiteName) + "\") { \" \" +\"" + GetString("general.defaultchoice") + "\" } %}"; copyCulturesElem.AdditionalWhereCondition = "CultureCode IN (SELECT DocumentCulture FROM CMS_Document WHERE DocumentNodeID = " + originalNode.NodeID + ")"; if (!CMSContext.CurrentUser.IsCultureAllowed(culture, si.SiteName)) { pnlNewVersion.Visible = false; lblInfo.Visible = false; ShowError(GetString("transman.notallowedcreate")); } } } } else { RedirectToInformation("editeddocument.notexists"); } } ScriptHelper.RegisterStartupScript(Page, typeof(string), "ShowSelection", "ShowSelection();", true); // Set title for new culture version in dialog mode if (RequiresDialog) { SetTitle("CMSModules/CMS_Content/Menu/New.png", GetString("content.newcultureversiontitle"), null, null); } } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Hide translations if no service is available if (!translationElem.AnyServiceAvailable) { plcTranslationServices.Visible = false; } } #endregion #region "Control events" protected void btnCreateDocument_Click(object sender, EventArgs e) { if (radCopy.Checked) { string sourceCulture = copyCulturesElem.Value.ToString(); TreeNode actualSourceNode = DocumentHelper.GetDocument(NodeID, sourceCulture, Tree); TreeNode sourceNode = actualSourceNode.IsLink ? DocumentHelper.GetDocument(Tree.GetOriginalNode(actualSourceNode), Tree) : actualSourceNode; if (sourceNode != null) { if (chkSaveBeforeEditing.Checked && (node != null)) { // Create the version first TreeNode newCulture = TreeNode.New(node.ClassName); DocumentHelper.CopyNodeData(sourceNode, newCulture, new CopyNodeDataSettings(true, null)); NewCultureDocumentSettings settings = new NewCultureDocumentSettings { Node = newCulture, CultureCode = RequiredCulture, CopyAttachments = true, CopyCategories = true }; DocumentHelper.InsertNewCultureVersion(settings); // Make sure document is published when versioning without workflow is applied var workflow = newCulture.GetWorkflow(); if ((workflow != null) && workflow.WorkflowAutoPublishChanges && !workflow.UseCheckInCheckOut(CMSContext.CurrentSiteName)) { Node.MoveToPublishedStep(null); } // Refresh page if (RequiresDialog) { string url = URLHelper.ResolveUrl(DocumentURLProvider.GetUrl(newCulture.NodeAliasPath) + "?" + URLHelper.LanguageParameterName + "=" + RequiredCulture); ScriptHelper.RegisterStartupScript(this, typeof(string), "NewCultureRefreshAction", ScriptHelper.GetScript(" wopener.location = " + ScriptHelper.GetString(url) + "; CloseDialog();")); } else { ViewModeEnum mode = ViewModeEnum.Edit; if (!TreePathUtils.IsMenuItemType(node.NodeClassName) && (CMSContext.ViewMode != ViewModeEnum.EditLive)) { mode = ViewModeEnum.EditForm; } ScriptHelper.RegisterStartupScript(this, typeof(string), "NewCultureRefreshAction", ScriptHelper.GetScript("if (FramesRefresh) { FramesRefresh(" + node.NodeID + ", '" + mode + "'); }")); } } else { var url = GetEditUrl(node); url = URLHelper.AddParameterToUrl(url, "sourcedocumentid", sourceNode.DocumentID.ToString()); // Provide information about actual node if ((actualSourceNode != null) && actualSourceNode.IsLink) { url = URLHelper.AddParameterToUrl(url, "sourcenodeid", actualSourceNode.NodeID.ToString()); } Response.Redirect(url); } } else { ShowError(GetString("transman.notallowedcreate")); } } else { var url = GetEditUrl(node); Response.Redirect(url); } } protected void btnTranslate_Click(object sender, EventArgs e) { if (TranslationServiceHelper.IsAuthorizedToTranslateDocument(node, CMSContext.CurrentUser)) { try { // Submits the document to translation service string err = translationElem.SubmitToTranslation(); if (string.IsNullOrEmpty(err)) { // Refresh page if (RequiresDialog) { string url = URLHelper.ResolveUrl(DocumentURLProvider.GetUrl(node.NodeAliasPath) + "?" + URLHelper.LanguageParameterName + "=" + RequiredCulture); ScriptHelper.RegisterStartupScript(this, typeof(string), "NewCultureRefreshAction", ScriptHelper.GetScript(" window.top.location = " + ScriptHelper.GetString(url))); } else { ViewModeEnum mode = ViewModeEnum.Edit; if (!TreePathUtils.IsMenuItemType(node.NodeClassName) && (CMSContext.ViewMode != ViewModeEnum.EditLive)) { mode = ViewModeEnum.EditForm; } ScriptHelper.RegisterStartupScript(this, typeof(string), "NewCultureRefreshAction", ScriptHelper.GetScript("if (FramesRefresh) { FramesRefresh(" + node.NodeID + ", '" + mode + "'); }")); } } else { ShowError(err); } } catch (Exception ex) { ShowError(GetString("ContentRequest.TranslationFailed"), ex.Message, null); TranslationServiceHelper.LogEvent(ex); } } else { RedirectToCMSDeskAccessDenied("CMS.Content", "SubmitForTranslation"); } } #endregion #region "Methods" private string GetEditUrl(TreeNode currentNode) { string url; if (currentNode.HasSKU && ModuleEntry.IsModuleLoaded(ModuleEntry.ECOMMERCE)) { url = "~/CMSModules/Ecommerce/Pages/Content/Product/Product_Edit_General.aspx"; } else { url = "~/CMSModules/Content/CMSDesk/Edit/Edit.aspx"; } url = URLHelper.AddParameterToUrl(url, "nodeid", NodeID.ToString()); url = URLHelper.AddParameterToUrl(url, "action", "newculture"); url = URLHelper.AddParameterToUrl(url, "mode", Mode); url = URLHelper.AddParameterToUrl(url, "parentculture", RequiredCulture); url = URLHelper.AddParameterToUrl(url, "parentnodeid", currentNode.NodeParentID.ToString()); if (IsInCompare) { url = URLHelper.AddParameterToUrl(url, "compare", "1"); } if (RequiresDialog) { url = URLHelper.AddParameterToUrl(url, "dialog", "1"); } return url; } #endregion }