/// <summary> /// Submits the node for translation. Does not check the permissions, you need to check it before calling this method. /// </summary> public string SubmitToTranslation() { string err = ValidateData(); if (!string.IsNullOrEmpty(err)) { return(err); } var settings = TranslationSettings ?? new TranslationSettings(); if (settings.TargetLanguages.Count == 0) { settings.TargetLanguages.Add(currentCulture); } settings.TranslateWebpartProperties = SettingsKeyInfoProvider.GetBoolValue(SiteContext.CurrentSiteName + ".CMSTranslateWebpartProperties"); settings.SourceLanguage = FromLanguage; settings.Instructions = Instructions; settings.Priority = Priority; settings.ProcessBinary = ProcessBinary; settings.TranslateAttachments = ProcessBinary; settings.TranslationDeadline = Deadline; settings.TranslationServiceName = SelectedService; var node = TreeProvider.GetOriginalNode(DocumentHelper.GetDocument(NodeID, settings.SourceLanguage, true, TreeProvider)); TranslationSubmissionInfo submissionInfo; return(TranslationServiceHelper.SubmitToTranslation(settings, node, out submissionInfo)); }
/// <summary> /// Submits the node for translation. Does not check the permissions, you need to chek it before calling this method. /// </summary> public string SubmitToTranslation() { string err = ValidateData(); if (!string.IsNullOrEmpty(err)) { return(err); } TranslationSettings settings = TranslationSettings ?? new TranslationSettings(); if (string.IsNullOrEmpty(settings.TargetLanguage)) { settings.TargetLanguage = LocalizationContext.PreferredCultureCode; } settings.TranslateWebpartProperties = SettingsKeyInfoProvider.GetBoolValue(SiteContext.CurrentSiteName + ".CMSTranslateWebpartProperties"); settings.SourceLanguage = FromLanguage; settings.Instructions = Instructions; settings.Priority = Priority; settings.ProcessBinary = ProcessBinary; settings.TranslateAttachments = ProcessBinary; settings.TranslationDeadline = Deadline; settings.TranslationServiceName = hdnSelectedName.Value; TreeProvider tree = TreeProvider ?? new TreeProvider(); TreeNode node = DocumentHelper.GetDocument(NodeID, settings.SourceLanguage, true, tree); TranslationSubmissionInfo submissionInfo; return(TranslationServiceHelper.SubmitToTranslation(settings, node, out submissionInfo)); }
/// <summary> /// Processes action /// </summary> /// <param name="parameters">Parameter</param> private void ProcessAction(Tuple <string, TranslationSubmissionInfo> parameters) { if (parameters == null || parameters.Item1 == null) { return; } var commandName = parameters.Item1.ToLowerInvariant(); var submissionInfo = parameters.Item2; var error = String.Empty; switch (commandName) { case RESUBMIT_ACTION: error = TranslationServiceHelper.ResubmitSubmission(submissionInfo); break; case PROCESS_ACTION: error = TranslationServiceHelper.ProcessSubmission(submissionInfo); break; } // Set result of the action ctlAsync.Parameter = GetParameter(commandName, error, submissionInfo); }
/// <summary> /// Processes action /// </summary> /// <param name="siteName">Site name</param> private void UpdateStatuses(string siteName) { var error = TranslationServiceHelper.CheckAndDownloadTranslations(siteName); // Set result of the action ctlAsync.Parameter = GetParameter(UPDATE_STATUSES_ACTION, error, null); }
private static async Task TranslateVision(ImageInsights result) { result.ArabicVisionInsights = new VisionInsights { Caption = await TranslationServiceHelper.TranslateString(result.VisionInsights.Caption), Tags = await TranslationServiceHelper.TranslateArray(result.VisionInsights.Tags) }; }
protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e) { CheckModifyPermissions(true); switch (e.CommandName) { case ComponentEvents.SAVE: if (!editElem.UIFormControl.SaveData(null)) { ShowError(GetString("translationservice.savesubmissionfailed")); } break; case "resubmit": string errResubmit = TranslationServiceHelper.ResubmitSubmission(SubmissionInfo); if (string.IsNullOrEmpty(errResubmit)) { ShowInformation(GetString("translationservice.translationresubmitted")); } else { ShowError(errResubmit); } editElem.UIFormControl.ReloadData(); break; case "update": if (editElem.UIFormControl.SaveData(null)) { string errUpdate = TranslationServiceHelper.ResubmitSubmission(SubmissionInfo); if (string.IsNullOrEmpty(errUpdate)) { ShowInformation(GetString("translationservice.translationupdatedandresubmitted")); } else { ShowError(errUpdate); } } editElem.UIFormControl.ReloadData(); break; case "cancel": string errCancel = TranslationServiceHelper.CancelSubmission(SubmissionInfo); if (string.IsNullOrEmpty(errCancel)) { ShowInformation(GetString("translationservice.submissioncanceled")); } else { ShowError(errCancel); } editElem.UIFormControl.ReloadData(); break; } }
/// <summary> /// Returns true if there is at least one translation submission item with target XLIFF. /// </summary> /// <param name="document">Document to check</param> public static bool IsTranslationReady(object document) { TreeNode doc = document as TreeNode; if (doc != null) { return(TranslationServiceHelper.IsTranslationReady(doc)); } return(false); }
protected void btnTranslate_Click(object sender, EventArgs e) { // Check if data are correct var error = translationElem.ValidateData(); if (!String.IsNullOrEmpty(error) || !allowTranslate) { plcMessages.AddError(error); return; } if (isSelect) { // If in select mode, prepare node IDs now TreeProvider tree = new TreeProvider(); DataSet ds = tree.SelectNodes(CurrentSiteName, pathElem.Value.ToString(), TreeProvider.ALL_CULTURES, true, TreeProvider.ALL_CLASSNAMES, null, null, TreeProvider.ALL_LEVELS, false, 0, DocumentColumnLists.SELECTNODES_REQUIRED_COLUMNS + ",DocumentName,NodeParentID,NodeSiteID,NodeAliasPath"); if (!DataHelper.DataSourceIsEmpty(ds)) { foreach (DataTable table in ds.Tables) { foreach (DataRow dr in table.Rows) { TreeNode node = TreeNode.New(ValidationHelper.GetString(dr["ClassName"], string.Empty), dr); if (TranslationServiceHelper.IsAuthorizedToTranslateDocument(node, currentUser, translationElem.TargetLanguages)) { nodeIds.Add(ValidationHelper.GetInteger(dr["NodeID"], 0)); } else { HideUI(); plcMessages.AddError(String.Format(GetString("cmsdesk.notauthorizedtotranslatedocument"), HTMLHelper.HTMLEncode(node.NodeAliasPath))); return; } } } } else { ShowError(GetString("translationservice.nodocumentstotranslate")); return; } targetCultures = translationElem.TargetLanguages; } pnlLog.Visible = true; pnlContent.Visible = false; CurrentError = string.Empty; ctlAsyncLog.RunAsync(p => Translate(AllLevels), WindowsIdentity.GetCurrent()); }
protected void gridElem_OnAction(string actionName, object actionArgument) { string err = null; string info = null; // Check modify permission for all actions except for download ZIP if (!actionName.EqualsCSafe("downloadzip", true)) { if (!modifyAllowed) { RedirectToAccessDenied("CMS.TranslationServices", "Modify"); } } TranslationSubmissionInfo submissionInfo = TranslationSubmissionInfoProvider.GetTranslationSubmissionInfo(ValidationHelper.GetInteger(actionArgument, 0)); if (submissionInfo != null) { switch (actionName.ToLowerCSafe()) { case "downloadzip": TranslationServiceHelper.DownloadXLIFFinZIP(submissionInfo, Page.Response); break; case "resubmit": err = TranslationServiceHelper.ResubmitSubmission(submissionInfo); info = GetString("translationservice.translationresubmitted"); break; case "process": err = TranslationServiceHelper.ProcessSubmission(submissionInfo); info = GetString("translationservice.translationsimported"); break; case "cancel": err = TranslationServiceHelper.CancelSubmission(submissionInfo); info = GetString("translationservice.submissioncanceled"); break; case "delete": TranslationServiceHelper.CancelSubmission(submissionInfo); submissionInfo.Delete(); info = GetString("translationservice.submissiondeleted"); break; } if (!string.IsNullOrEmpty(err)) { ShowError(err); } else if (!string.IsNullOrEmpty(info)) { ShowConfirmation(info); } } }
/// <summary> /// Returns translation priority text. /// </summary> /// <param name="parameters">Priority integer constant</param> public static string GetTranslationPriority(params object[] parameters) { switch (parameters.Length) { case 1: return(TranslationServiceHelper.GetPriorityText(ValidationHelper.GetInteger(parameters[0], 0))); default: throw new NotSupportedException(); } }
protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "resubmitaction": case "processaction": case "cancelaction": ImageButton img = sender as CMSImageButton; if (img != null) { img.Enabled = modifyAllowed; GridViewRow gvr = parameter as GridViewRow; if (gvr != null) { DataRowView drv = gvr.DataItem as DataRowView; if (drv != null) { TranslationStatusEnum status = (TranslationStatusEnum)ValidationHelper.GetInteger(drv["SubmissionStatus"], 0); switch (sourceName.ToLowerCSafe()) { case "resubmitaction": img.Enabled = modifyAllowed && (status == TranslationStatusEnum.WaitingForTranslation) || (status == TranslationStatusEnum.SubmissionError); break; case "processaction": img.Enabled = modifyAllowed && (status == TranslationStatusEnum.TranslationReady) || (status == TranslationStatusEnum.TranslationCompleted) || (status == TranslationStatusEnum.ProcessingError); break; case "cancelaction": img.Enabled = modifyAllowed && (status == TranslationStatusEnum.WaitingForTranslation); break; } } } } return(img); case "submissionstatus": TranslationStatusEnum submissionstatus = (TranslationStatusEnum)ValidationHelper.GetInteger(parameter, 0); return(TranslationServiceHelper.GetFormattedStatusString(submissionstatus)); case "submissionprice": string price = GetString("general.notavailable"); double priceVal = ValidationHelper.GetDouble(parameter, -1); if (priceVal >= 0) { price = priceVal.ToString(); } return(price); } return(parameter); }
private void ShowWarning() { TranslationServiceInfo info = (TranslationServiceInfo)EditForm.EditedObject; if ((info != null) && info.TranslationServiceEnabled) { if (!TranslationServiceHelper.IsServiceAvailable(info.TranslationServiceName, SiteContext.CurrentSiteName)) { ShowWarning(GetString("translationservice.notavailable"), null, null); } } }
/// <summary> /// Enable or disable field for translation according to actual Attribute Type (from DropDown list) /// </summary> private void SetFieldForTranslations() { if (TranslationServiceHelper.IsFieldForTranslation(AttributeType) && !IsDummyField && !IsExtraField) { plcTranslation.Visible = true; } else { plcTranslation.Visible = false; chkTranslateField.Checked = false; } }
protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e) { // There is already a running thread if (IsRunningThread()) { return; } CheckModifyPermissions(true); switch (e.CommandName) { case ComponentEvents.SAVE: if (!editElem.UIFormControl.SaveData(null)) { ShowError(GetString("translationservice.savesubmissionfailed")); } break; case RESUBMIT_ACTION: ProcessActionAsync(e.CommandName); break; case "updateandresubmit": if (!editElem.UIFormControl.SaveData(null)) { ShowError(GetString("translationservice.savesubmissionfailed")); } else { ProcessActionAsync("resubmit"); } break; case "cancel": string errCancel = TranslationServiceHelper.CancelSubmission(SubmissionInfo); if (string.IsNullOrEmpty(errCancel)) { ShowConfirmation(GetString("translationservice.submissioncanceled")); } else { ShowError(errCancel); } editElem.UIFormControl.ReloadData(); break; case PROCESS_ACTION: ProcessActionAsync(e.CommandName); break; } }
/// <summary> /// Returns rendered panel with translation services /// </summary> public void RegisterTranslationServicesActions() { string currentSiteName = SiteContext.CurrentSiteName; if (TranslationServiceHelper.IsTranslationAllowed(currentSiteName)) { string where = "TranslationServiceEnabled = 1 AND TranslationServiceIsMachine = 1"; foreach (TranslationServiceInfo tsi in TranslationServiceInfoProvider.GetTranslationServices(where, "TranslationServiceDisplayName", 0, "TranslationServiceDisplayName, TranslationServiceName")) { AddTranslationControl(tsi, currentSiteName); } } }
protected void btnUpdateStatuses_Click(object sender, EventArgs e) { if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.TranslationServices", "Modify")) { RedirectToAccessDenied("CMS.TranslationServices", "Modify"); } string err = TranslationServiceHelper.CheckAndDownloadTranslations(CMSContext.CurrentSiteName); if (!string.IsNullOrEmpty(err)) { ShowError(err); } }
/// <summary> /// Enable or disable field for translation according to actual Attribute Type (from DropDown list) /// </summary> private void SetFieldForTranslations() { FormFieldDataTypeEnum dataType = FormHelper.GetFormFieldDataType(AttributeType); if (TranslationServiceHelper.IsFieldForTranslation(dataType)) { plcTranslation.Visible = true; } else { plcTranslation.Visible = false; chkTranslateField.Checked = false; } }
protected void btnImportTranslations_Click(object sender, EventArgs e) { string err = TranslationServiceHelper.ProcessSubmission(SubmissionInfo); if (string.IsNullOrEmpty(err)) { ShowInformation(GetString("translationservice.translationsimported")); } else { ShowError(err); } editElem.UIFormControl.ReloadData(); }
protected override void CreateChildControls() { base.CreateChildControls(); if (!StopProcessing) { if (drpPriority.Items.Count == 0) { ListItem normalPriority = new ListItem(TranslationServiceHelper.GetPriorityText(1), "1"); normalPriority.Selected = true; drpPriority.Items.Add(new ListItem(TranslationServiceHelper.GetPriorityText(0), "0")); drpPriority.Items.Add(normalPriority); drpPriority.Items.Add(new ListItem(TranslationServiceHelper.GetPriorityText(2), "2")); } } }
/// <summary> /// Add translation control to the list of action buttons /// </summary> /// <param name="tsi">Translation service object used to initialize the control</param> /// <param name="siteName">Site name to check for service availability</param> private void AddTranslationControl(TranslationServiceInfo tsi, string siteName) { string arg = "'##SERVICE##|' + document.getElementById('" + (TranslationElementClientID ?? InputClientID) + @"').value"; if (TranslationServiceHelper.IsServiceAvailable(tsi.TranslationServiceName, siteName)) { var ctrl = new CMSAccessibleButton(); cntElem.ActionsContainer.Controls.Add(ctrl); ctrl.IconCssClass = "icon-" + tsi.TranslationServiceName.ToLowerCSafe(); ctrl.ToolTip = string.Format("{0} {1}", ResHelper.GetString("translations.translateusing"), tsi.TranslationServiceDisplayName); // Get callback reference for translation string cbRef = Page.ClientScript.GetCallbackEventReference(this, arg.Replace("##SERVICE##", tsi.TranslationServiceName), "SetValueToTextBox", "'" + InputClientID + ";" + ctrl.ClientID + "_icon;" + ctrl.IconCssClass + "'", true); ctrl.OnClientClick = "StartProgress('" + ctrl.ClientID + "_icon'); " + cbRef + ";return false;"; } }
/// <summary> /// Translates object to new culture. /// </summary> protected void btnTranslate_Click(object sender, EventArgs e) { if (TranslationServiceHelper.IsAuthorizedToTranslateDocument(Node, MembershipContext.AuthenticatedUser)) { try { // Submits the document to translation service string err = translationElem.SubmitToTranslation(); if (string.IsNullOrEmpty(err)) { // Refresh page string script; if (RequiresDialog) { string url = UrlResolver.ResolveUrl(DocumentURLProvider.GetUrl(Node) + "?" + URLHelper.LanguageParameterName + "=" + RequiredCulture); script = "window.top.location = " + ScriptHelper.GetString(url) + ";"; } else { ViewModeEnum mode = ViewModeEnum.Edit; if (!TreePathUtils.IsMenuItemType(Node.NodeClassName) && (PortalContext.ViewMode != ViewModeEnum.EditLive)) { mode = ViewModeEnum.EditForm; } script = "if (FramesRefresh) { FramesRefresh(" + Node.NodeID + ", '" + mode + "'); }"; } ScriptHelper.RegisterStartupScript(this, typeof(string), "NewCultureRefreshAction", ScriptHelper.GetScript(script)); } else { ShowError(err); } } catch (Exception ex) { ShowError(GetString("ContentRequest.TranslationFailed"), ex.Message); TranslationServiceHelper.LogEvent(ex); } } else { RedirectToAccessDenied("CMS.Content", "SubmitForTranslation"); } }
protected void Page_Load(object sender, EventArgs e) { int submissionId = QueryHelper.GetInteger("submissionid", 0); int itemId = QueryHelper.GetInteger("itemid", 0); if (submissionId > 0) { TranslationSubmissionInfo info = TranslationSubmissionInfoProvider.GetTranslationSubmissionInfo(submissionId); if (info != null) { TranslationServiceHelper.DownloadXLIFFinZIP(info, HttpContext.Current.Response); } } else if (itemId > 0) { TranslationSubmissionItemInfo info = TranslationSubmissionItemInfoProvider.GetTranslationSubmissionItemInfo(itemId); if (info != null) { TranslationServiceHelper.DownloadXLIFF(info, Response); } } }
/// <summary> /// Submits the node for translation. Does not check the permissions, you need to chek it before calling this method. /// </summary> public string SubmitToTranslation() { string err = ValidateData(); if (!string.IsNullOrEmpty(err)) { return(err); } TranslationSettings settings = TranslationSettings ?? new TranslationSettings(); if (string.IsNullOrEmpty(settings.TargetLanguage)) { settings.TargetLanguage = CMSContext.PreferredCultureCode; } settings.TranslateWebpartProperties = SettingsKeyProvider.GetBoolValue(CMSContext.CurrentSiteName + ".CMSTranslateWebpartProperties"); settings.SourceLanguage = FromLanguage; settings.Instructions = Instructions; settings.Priority = Priority; settings.ProcessBinary = ProcessBinary; settings.TranslateAttachments = ProcessBinary; settings.TranslationDeadline = Deadline; settings.TranslationServiceName = hdnSelectedName.Value; settings.GenerateTargetTag = ValidationHelper.GetBoolean(hdnGenerateTarget.Value, false); TreeProvider tree = TreeProvider; if (tree == null) { tree = new TreeProvider(); } TreeNode node = DocumentHelper.GetDocument(NodeID, settings.SourceLanguage, true, tree); //tree.SelectSingleNode(NodeID, settings.SourceLanguage, true, settings.TranslateDocCoupledData); TranslationSubmissionInfo submissionInfo = null; return(TranslationServiceHelper.SubmitToTranslation(settings, node, out submissionInfo)); }
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 { ScriptHelper.RegisterStartupScript(this, typeof(string), "NewCultureRefreshAction", ScriptHelper.GetScript("if (FramesRefresh) { FramesRefresh(" + node.NodeID + "); }")); } } else { ShowError(err); } } catch (Exception ex) { ShowError(GetString("ContentRequest.TranslationFailed"), ex.Message, null); TranslationServiceHelper.LogEvent(ex); } } else { RedirectToCMSDeskAccessDenied("CMS.Content", "SubmitForTranslation"); } }
/// <summary> /// Translates document(s). /// </summary> private void Translate(object parameter) { var parameters = parameter as AsyncParameters; if ((parameters == null) || nodeIds.Count < 1) { return; } AbstractMachineTranslationService machineService = null; AbstractHumanTranslationService humanService = null; TranslationSubmissionInfo submission = null; string submissionFileName = ""; int charCount = 0; int wordCount = 0; int refreshId = 0; int itemCount = 0; int pageCount = 0; bool oneSubmission = translationElem.CreateSeparateSubmission; bool success = false; bool separateSubmissionCreated = false; TreeProvider tree = new TreeProvider(); tree.AllowAsyncActions = false; try { // Begin log AddLog(ResHelper.GetString("contentrequest.starttranslate", parameters.UICulture)); // Prepare translation settings var settings = PrepareTranslationSettings(); // Check selected service var service = TranslationServiceInfoProvider.GetTranslationServiceInfo(translationElem.SelectedService); if (service == null) { return; } // Set if we need target tag (Translations.com workaround) settings.GenerateTargetTag = service.TranslationServiceGenerateTargetTag; if (service.TranslationServiceIsMachine) { machineService = AbstractMachineTranslationService.GetTranslationService(service, CurrentSiteName); } else { humanService = AbstractHumanTranslationService.GetTranslationService(service, CurrentSiteName); } bool langSupported = (humanService == null) || CheckLanguageSupport(humanService, settings); if (!langSupported) { return; } if ((machineService != null) || (humanService != null)) { var data = tree.SelectNodes() .CombineWithDefaultCulture(false) .Published(false) .Culture(settings.SourceLanguage) .WhereIn("NodeID", nodeIds) .OnSite(CurrentSiteName) .OrderBy("NodeLevel, NodeAliasPath") .Column("NodeID"); if (!DataHelper.DataSourceIsEmpty(data)) { var processedNodes = new List <int>(); // Translate the documents foreach (DataRow dr in data.Tables[0].Rows) { int nodeId = ValidationHelper.GetInteger(dr["NodeID"], 0); // Get document in source language var node = DocumentHelper.GetDocument(nodeId, settings.SourceLanguage, false, tree); if (node == null) { // Document doesn't exist in source culture, skip it continue; } var targetLanguages = GetTargetLanguages(settings.TargetLanguages, node).ToList(); if (!targetLanguages.Any()) { continue; } if ((submission == null) && (humanService != null)) { // Create new submission if not exists for human translation service submission = TranslationServiceHelper.CreateSubmissionInfo(settings, service, MembershipContext.AuthenticatedUser.UserID, SiteInfoProvider.GetSiteID(CurrentSiteName), node.GetDocumentName()); } // Handle duplicities if (processedNodes.Contains(nodeId)) { continue; } processedNodes.Add(nodeId); bool targetLanguageVersionCreated = false; bool logged = false; string encodedPath = HTMLHelper.HTMLEncode(node.NodeAliasPath); foreach (var targetLanguage in targetLanguages) { // Log only once per document if (!logged) { AddLog(String.Format(ResHelper.GetString("content.translating"), encodedPath, settings.SourceLanguage)); logged = true; } itemCount++; targetLanguageVersionCreated = true; if (humanService != null) { if (String.IsNullOrEmpty(submissionFileName)) { submissionFileName = node.NodeAlias; } var targetNode = TranslationServiceHelper.CreateTargetCultureNode(node, targetLanguage, true, false, !settings.TranslateAttachments); TranslationSubmissionItemInfo submissionItem; using (new CMSActionContext { TouchParent = false }) { // Do not touch parent because all updated information are saved after last item submissionItem = TranslationServiceHelper.CreateSubmissionItemInfo(settings, submission, node, targetNode.DocumentID, targetLanguage); } charCount += submissionItem.SubmissionItemCharCount; wordCount += submissionItem.SubmissionItemWordCount; } else { // Prepare local settings to translate per one target language var localSettings = settings.Clone(); localSettings.TargetLanguages.Clear(); localSettings.TargetLanguages.Add(targetLanguage); // Translate page via machine translator TranslationServiceHelper.Translate(machineService, localSettings, node); } } // Each page has own submission if human service is used if (!oneSubmission && (humanService != null)) { if (itemCount > 0) { SubmitSubmissionToService(itemCount, submission, charCount, wordCount, submissionFileName, humanService, true); // Reset counters itemCount = 0; charCount = 0; wordCount = 0; // Reset submission file name submissionFileName = null; // At least one submission was created separateSubmissionCreated = true; } else { // No documents were submitted to translation delete empty submission TranslationSubmissionInfoProvider.DeleteTranslationSubmissionInfo(submission); } // Reset submission to create new for next page submission = null; } if (targetLanguageVersionCreated) { // Check if at least one target language version was created pageCount++; } // Store parent ID to refresh UI refreshId = node.NodeParentID; } success = true; } else { AddError(ResHelper.GetString("TranslateDocument.NoSourceDocuments", parameters.UICulture)); } } else { AddError(ResHelper.GetString("TranslateDocument.TranslationServiceNotFound", parameters.UICulture)); } } catch (ThreadAbortException ex) { if (CMSThread.Stopped(ex)) { // When canceled AddError(ResHelper.GetString("TranslateDocument.TranslationCanceled", parameters.UICulture)); } else { // Log error LogExceptionToEventLog(ex, parameters.UICulture); } } catch (Exception ex) { // Log error LogExceptionToEventLog(ex, parameters.UICulture); } finally { var showAllAlreadyTranslatedError = false; if (itemCount > 0) { // All pages are submitted via only one submission or using machine service if ((humanService != null) && (submission != null)) { // Set submission name if more pages are translated if (pageCount > 1) { submission.SubmissionName += " " + string.Format(GetString("translationservices.submissionnamesuffix"), pageCount - 1); // Do not localize the file name submissionFileName += string.Format(" (and {0} more)", pageCount - 1); } SubmitSubmissionToService(itemCount, submission, charCount, wordCount, submissionFileName, humanService, success); } } else if (oneSubmission) { TranslationSubmissionInfoProvider.DeleteTranslationSubmissionInfo(submission); // Log error only if the translation was successfully processed if (success) { showAllAlreadyTranslatedError = true; } } else if (!separateSubmissionCreated) { // Separate submissions were used and no one was created showAllAlreadyTranslatedError = true; } if (showAllAlreadyTranslatedError) { AddError(ResHelper.GetString("TranslateDocument.DocumentsAlreadyTranslated", parameters.UICulture)); } if (parameters.IsDialog) { ctlAsyncLog.Parameter = "wopener.location.replace(wopener.location); CloseDialog(); if (wopener.RefreshTree) { wopener.RefreshTree(null, null);}"; } else { if (string.IsNullOrEmpty(CurrentError)) { // Overwrite refreshId variable if sub-levels are visible if (parameters.AllLevels && Parameters.ContainsKey("refreshnodeid")) { refreshId = ValidationHelper.GetInteger(Parameters["refreshnodeid"], 0); } // Refresh tree ctlAsyncLog.Parameter = "RefreshTree(" + refreshId + ", " + refreshId + "); \n" + "SelectNode(" + refreshId + ");"; } else { ctlAsyncLog.Parameter = "RefreshTree(null, null);"; } } } }
protected void Page_Load(object sender, EventArgs e) { // Register script files ScriptHelper.RegisterCMS(this); ScriptHelper.RegisterScriptFile(this, "~/CMSModules/Content/CMSDesk/Operation.js"); if (!QueryHelper.ValidateHash("hash")) { pnlContent.Visible = false; ShowError(GetString("dialogs.badhashtext")); return; } // Setup page title text and image PageTitle.TitleText = GetString("Content.TranslateTitle"); EnsureDocumentBreadcrumbs(PageBreadcrumbs, action: PageTitle.TitleText); if (IsDialog) { RegisterModalPageScripts(); RegisterEscScript(); plcInfo.Visible = false; pnlButtons.Visible = false; } if (!TranslationServiceHelper.IsTranslationAllowed(CurrentSiteName)) { pnlContent.Visible = false; ShowError(GetString("translations.translationnotallowed")); return; } // Initialize current user currentUser = MembershipContext.AuthenticatedUser; // Initialize events ctlAsyncLog.OnFinished += ctlAsyncLog_OnFinished; ctlAsyncLog.OnError += ctlAsyncLog_OnError; ctlAsyncLog.OnCancel += ctlAsyncLog_OnCancel; isSelect = QueryHelper.GetBoolean("select", false); if (isSelect) { pnlDocList.Visible = false; pnlDocSelector.Visible = true; translationElem.DisplayMachineServices = false; } var currentCulture = LocalizationContext.CurrentCulture.CultureCode; var displayTargetLanguage = !IsDialog || isSelect; translationElem.DisplayTargetlanguage = displayTargetLanguage; // Get target culture(s) targetCultures = displayTargetLanguage ? translationElem.TargetLanguages : new HashSet <string>(new[] { QueryHelper.GetString("targetculture", currentCulture) }); // Set the target settings var settings = new TranslationSettings(); settings.TargetLanguages.AddRange(targetCultures); var useCurrentAsDefault = QueryHelper.GetBoolean("currentastargetdefault", false); if (!currentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.Admin) && currentUser.UserHasAllowedCultures && !currentUser.IsCultureAllowed(currentCulture, CurrentSiteName)) { // Do not use current culture as default if user has no permissions to edit it useCurrentAsDefault = false; } translationElem.UseCurrentCultureAsDefaultTarget = useCurrentAsDefault; // Do not include default culture if it is current one string defaultCulture = CultureHelper.GetDefaultCultureCode(CurrentSiteName); if (useCurrentAsDefault && !string.Equals(currentCulture, defaultCulture, StringComparison.InvariantCultureIgnoreCase) && !RequestHelper.IsPostBack()) { settings.TargetLanguages.Add(currentCulture); } translationElem.TranslationSettings = settings; allowTranslate = true; if (RequestHelper.IsCallback()) { return; } // If not in select mode, load all the document IDs and check permissions // In select mode, documents are checked when the button is clicked if (!isSelect) { DataSet allDocs = null; TreeProvider tree = new TreeProvider(); // Current Node ID to translate string parentAliasPath = string.Empty; if (Parameters != null) { parentAliasPath = ValidationHelper.GetString(Parameters["parentaliaspath"], string.Empty); nodeIdsArr = ValidationHelper.GetString(Parameters["nodeids"], string.Empty).Trim('|').Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); } if (string.IsNullOrEmpty(parentAliasPath)) { if (nodeIdsArr == null) { // One document translation is requested string nodeIdQuery = QueryHelper.GetString("nodeid", ""); if (nodeIdQuery != "") { // Mode of single node translation pnlList.Visible = false; chkSkipTranslated.Checked = false; translationElem.NodeID = ValidationHelper.GetInteger(nodeIdQuery, 0); nodeIdsArr = new[] { nodeIdQuery }; } else { nodeIdsArr = new string[] { }; } } foreach (string nodeId in nodeIdsArr) { int id = ValidationHelper.GetInteger(nodeId, 0); if (id != 0) { nodeIds.Add(id); } } } else { // Exclude root of the website from multiple translation requested by document listing bulk action var where = new WhereCondition(WhereCondition) .WhereNotEquals("ClassName", SystemDocumentTypes.Root); allDocs = tree.SelectNodes(CurrentSiteName, parentAliasPath.TrimEnd(new[] { '/' }) + "/%", TreeProvider.ALL_CULTURES, true, ClassID > 0 ? DataClassInfoProvider.GetClassName(ClassID) : TreeProvider.ALL_CLASSNAMES, where.ToString(true), "DocumentName", AllLevels ? TreeProvider.ALL_LEVELS : 1, false, 0, DocumentColumnLists.SELECTNODES_REQUIRED_COLUMNS + ",DocumentName,NodeParentID,NodeSiteID,NodeAliasPath"); if (!DataHelper.DataSourceIsEmpty(allDocs)) { foreach (DataTable table in allDocs.Tables) { foreach (DataRow row in table.Rows) { nodeIds.Add(ValidationHelper.GetInteger(row["NodeID"], 0)); } } } } if (nodeIds.Count > 0) { var where = new WhereCondition().WhereIn("NodeID", nodeIds).ToString(true); DataSet ds = allDocs ?? tree.SelectNodes(CurrentSiteName, "/%", TreeProvider.ALL_CULTURES, true, null, where, "DocumentName", TreeProvider.ALL_LEVELS, false); if (!DataHelper.DataSourceIsEmpty(ds)) { string docList = null; cancelNodeId = string.IsNullOrEmpty(parentAliasPath) ? DataHelper.GetIntValue(ds.Tables[0].Rows[0], "NodeParentID") : TreePathUtils.GetNodeIdByAliasPath(CurrentSiteName, parentAliasPath); foreach (DataTable table in ds.Tables) { foreach (DataRow dr in table.Rows) { bool isLink = (dr["NodeLinkedNodeID"] != DBNull.Value); string name = (string)dr["DocumentName"]; docList += HTMLHelper.HTMLEncode(name); if (isLink) { docList += DocumentUIHelper.GetDocumentMarkImage(Page, DocumentMarkEnum.Link); } docList += "<br />"; lblDocuments.Text = docList; // Set visibility of checkboxes TreeNode node = TreeNode.New(ValidationHelper.GetString(dr["ClassName"], string.Empty), dr); if (!TranslationServiceHelper.IsAuthorizedToTranslateDocument(node, currentUser, targetCultures)) { allowTranslate = false; plcMessages.AddError(String.Format(GetString("cmsdesk.notauthorizedtotranslatedocument"), HTMLHelper.HTMLEncode(node.NodeAliasPath))); } } } if (!allowTranslate && !RequestHelper.IsPostBack()) { // Hide UI only when security check is performed within first load, if postback used user may loose some setting HideUI(); } } // Display check box for separate submissions for each document if there is more than one document translationElem.DisplaySeparateSubmissionOption = (nodeIds.Count > 1); } else { // Hide everything pnlContent.Visible = false; } } // Register the dialog script ScriptHelper.RegisterDialogScript(this); ctlAsyncLog.TitleText = GetString("contentrequest.starttranslate"); // Set visibility of panels pnlContent.Visible = true; pnlLog.Visible = false; }
/// <summary> /// Creates buttons in header actions /// </summary> private void CreateButtons() { var updateAction = new HeaderAction { ButtonStyle = ButtonStyle.Default, CommandName = UPDATE_STATUSES_ACTION, Tooltip = GetString("translationservice.updatestatusestooltip"), Text = GetString("translationservice.updatestatuses"), Enabled = MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.TranslationServices", "Modify") && !Grid.IsEmpty }; string translateUrl = ApplicationUrlHelper.ResolveDialogUrl("~/CMSModules/Translations/Pages/TranslateDocuments.aspx") + "?select=1&dialog=1"; translateUrl = URLHelper.AddParameterToUrl(translateUrl, "hash", QueryHelper.GetHash(URLHelper.GetQuery(translateUrl))); // Check if any human translation is enabled bool enabled = TranslationServiceInfoProvider.GetTranslationServices("(TranslationServiceEnabled = 1) AND (TranslationServiceIsMachine = 0)", null, 0, "TranslationServiceID, TranslationServiceName").Any(t => TranslationServiceHelper.IsServiceAvailable(t.TranslationServiceName, SiteContext.CurrentSiteName)); var submitAction = new HeaderAction { OnClientClick = "modalDialog('" + translateUrl + "', 'SubmitTranslation', 988, 640);", Tooltip = GetString(enabled ? "translationservice.submittranslationtooltip" : "translationservice.noenabledservices"), Text = GetString("translationservice.submittranslation"), Enabled = enabled && MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.Content", "SubmitForTranslation") }; AddHeaderAction(submitAction); AddHeaderAction(updateAction); HeaderActions.ReloadData(); }
protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter) { // For all actions if (sourceName.EndsWith("action", StringComparison.OrdinalIgnoreCase)) { var img = sender as CMSGridActionButton; if (img != null) { img.Enabled = !IsRunningThread(); } } switch (sourceName.ToLowerInvariant()) { case "resubmitaction": case "processaction": case "cancelaction": var img = sender as CMSGridActionButton; if (img != null) { img.Enabled &= modifyAllowed; var gvr = parameter as GridViewRow; if (gvr == null) { return(img); } var drv = gvr.DataItem as DataRowView; if (drv == null) { return(img); } var status = (TranslationStatusEnum)ValidationHelper.GetInteger(drv["SubmissionStatus"], 0); switch (sourceName.ToLowerInvariant()) { case "resubmitaction": img.Enabled &= modifyAllowed && ((status == TranslationStatusEnum.WaitingForTranslation) || (status == TranslationStatusEnum.SubmissionError)); break; case "processaction": img.Enabled &= modifyAllowed && ((status == TranslationStatusEnum.TranslationReady) || (status == TranslationStatusEnum.TranslationCompleted) || (status == TranslationStatusEnum.ProcessingError)); break; case "cancelaction": var service = TranslationServiceInfoProvider.GetTranslationServiceInfo(ValidationHelper.GetInteger(drv["SubmissionServiceID"], 0)); if (service != null) { bool serviceSupportsCancel = service.TranslationServiceSupportsCancel; img.Enabled &= modifyAllowed && (status == TranslationStatusEnum.WaitingForTranslation) && serviceSupportsCancel; if (!serviceSupportsCancel) { // Display tooltip for disabled cancel img.ToolTip = String.Format(GetString("translationservice.cancelnotsupported"), service.TranslationServiceDisplayName); } } break; } } return(img); case "submissionstatus": TranslationStatusEnum submissionstatus = (TranslationStatusEnum)ValidationHelper.GetInteger(parameter, 0); return(TranslationServiceHelper.GetFormattedStatusString(submissionstatus)); case "submissionprice": string price = GetString("general.notavailable"); double priceVal = ValidationHelper.GetDouble(parameter, -1); if (priceVal >= 0) { price = priceVal.ToString(); } return(price); case "submissiontargetculture": { string[] cultureCodes = ValidationHelper.GetString(parameter, "").Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); StringBuilder sb = new StringBuilder(); int count = cultureCodes.Length; int counter = 0; foreach (var cultureCode in cultureCodes) { // Limit cultures list if (counter == 5) { sb.Append(" "); sb.AppendFormat(ResHelper.GetString("translationservices.submissionnamesuffix"), count - 5); break; } // Separate cultures by comma if (counter > 0) { sb.Append(", "); } var culture = CultureInfoProvider.GetCultureInfo(cultureCode); if (culture == null) { continue; } sb.AppendFormat("<span title=\"{0}\"><img class=\"cms-icon-80\" src=\"{1}\" alt=\"{2}\" /> {3}</span>", HTMLHelper.EncodeForHtmlAttribute(culture.CultureName), UIHelper.GetFlagIconUrl(null, culture.CultureCode, "16x16"), HTMLHelper.EncodeForHtmlAttribute(culture.CultureName), HTMLHelper.HTMLEncode(culture.CultureShortName)); ++counter; } return(sb.ToString()); } } return(parameter); }
protected void gridElem_OnAction(string actionName, object actionArgument) { // There is already a running thread if (IsRunningThread()) { return; } string err = null; string info = null; // Check modify permission for all actions except for download ZIP if (!string.Equals(actionName, "downloadzip", StringComparison.OrdinalIgnoreCase)) { if (!modifyAllowed) { RedirectToAccessDenied("CMS.TranslationServices", "Modify"); } } // Get submission var submissionInfo = TranslationSubmissionInfoProvider.GetTranslationSubmissionInfo(ValidationHelper.GetInteger(actionArgument, 0)); if (submissionInfo == null) { return; } switch (actionName.ToLowerInvariant()) { case "downloadzip": TranslationServiceHelper.DownloadXLIFFinZIP(submissionInfo, Page.Response); break; case RESUBMIT_ACTION: ProcessActionAsync(actionName, submissionInfo); break; case PROCESS_ACTION: ProcessActionAsync(actionName, submissionInfo); break; case "cancel": err = TranslationServiceHelper.CancelSubmission(submissionInfo); info = GetString("translationservice.submissioncanceled"); break; case "delete": var serviceInfo = TranslationServiceInfoProvider.GetTranslationServiceInfo(submissionInfo.SubmissionServiceID); if (serviceInfo.TranslationServiceSupportsCancel) { err = TranslationServiceHelper.CancelSubmission(submissionInfo); } if (String.IsNullOrEmpty(err)) { submissionInfo.Delete(); } info = GetString("translationservice.submissiondeleted"); break; } if (!string.IsNullOrEmpty(err)) { ShowError(err); } else if (!string.IsNullOrEmpty(info)) { ShowConfirmation(info); } }
protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "resubmitaction": case "processaction": case "cancelaction": CMSGridActionButton img = sender as CMSGridActionButton; if (img != null) { img.Enabled = modifyAllowed; GridViewRow gvr = parameter as GridViewRow; if (gvr == null) { return(img); } DataRowView drv = gvr.DataItem as DataRowView; if (drv == null) { return(img); } TranslationStatusEnum status = (TranslationStatusEnum)ValidationHelper.GetInteger(drv["SubmissionStatus"], 0); switch (sourceName.ToLowerCSafe()) { case "resubmitaction": img.Enabled = modifyAllowed && ((status == TranslationStatusEnum.WaitingForTranslation) || (status == TranslationStatusEnum.SubmissionError)); break; case "processaction": img.Enabled = modifyAllowed && ((status == TranslationStatusEnum.TranslationReady) || (status == TranslationStatusEnum.TranslationCompleted) || (status == TranslationStatusEnum.ProcessingError)); break; case "cancelaction": TranslationServiceInfo service = TranslationServiceInfoProvider.GetTranslationServiceInfo(ValidationHelper.GetInteger(drv["SubmissionServiceID"], 0)); if (service != null) { bool serviceSupportsCancel = service.TranslationServiceSupportsCancel; img.Enabled = modifyAllowed && (status == TranslationStatusEnum.WaitingForTranslation) && serviceSupportsCancel; if (!serviceSupportsCancel) { // Display tooltip for disabled cancel img.ToolTip = String.Format(GetString("translationservice.cancelnotsupported"), service.TranslationServiceDisplayName); } } break; } } return(img); case "submissionstatus": TranslationStatusEnum submissionstatus = (TranslationStatusEnum)ValidationHelper.GetInteger(parameter, 0); return(TranslationServiceHelper.GetFormattedStatusString(submissionstatus)); case "submissionprice": string price = GetString("general.notavailable"); double priceVal = ValidationHelper.GetDouble(parameter, -1); if (priceVal >= 0) { price = priceVal.ToString(); } return(price); } return(parameter); }