/// <summary> /// Deletes document(s). /// </summary> private void Delete(object parameter) { if (parameter == null || nodeIds.Count < 1) { return; } if (!LicenseHelper.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Blogs, ObjectActionEnum.Edit)) { AddError(ResHelper.GetString("cmsdesk.blogdeletelicenselimitations", currentCulture)); return; } if (!LicenseHelper.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Documents, ObjectActionEnum.Edit)) { AddError(ResHelper.GetString("cmsdesk.documentdeletelicenselimitations", currentCulture)); return; } int refreshId = 0; TreeProvider tree = new TreeProvider(currentUser); tree.AllowAsyncActions = false; string[] parameters = ((string)parameter).Split(';'); bool allLevelsSelected = ValidationHelper.GetBoolean(parameters[3], false); try { string siteName = parameters[1]; bool isMultipleDelete = ValidationHelper.GetBoolean(parameters[2], false); // Prepare the where condition string where = new WhereCondition().WhereIn("NodeID", nodeIds).ToString(true); string columns = SqlHelper.MergeColumns(DocumentColumnLists.SELECTNODES_REQUIRED_COLUMNS, "NodeAliasPath, ClassName, DocumentCulture, NodeParentID"); bool combineWithDefaultCulture = false; string cultureCode = parameters[0]; switch (parameters[4]) { // Standard page deletion case "documentoptions": combineWithDefaultCulture = chkAllCultures.Checked; cultureCode = combineWithDefaultCulture ? TreeProvider.ALL_CULTURES : parameters[0]; break; // Root page deletion case "rootoptions": cultureCode = rblRoot.SelectedValue == "allpages" ? TreeProvider.ALL_CULTURES : parameters[0]; where = rblRoot.SelectedValue == "allculturepages" ? String.Empty : where; break; } // Begin log AddLog(ResHelper.GetString("ContentDelete.DeletingDocuments", currentCulture)); string orderBy = "NodeAliasPath DESC"; if (cultureCode == TreeProvider.ALL_CULTURES) { // Default culture has to be selected on last position string defaultCulture = CultureHelper.GetDefaultCultureCode(siteName); orderBy += ", CASE WHEN DocumentCulture = '" + SqlHelper.EscapeQuotes(defaultCulture) + "' THEN 1 ELSE 0 END"; } // Get the documents DataSet ds = tree.SelectNodes(siteName, "/%", cultureCode, combineWithDefaultCulture, null, where, orderBy, TreeProvider.ALL_LEVELS, false, 0, columns); if (!DataHelper.DataSourceIsEmpty(ds)) { string altPath = Convert.ToString(selAltPath.Value); TreeNode altNode = null; if (chkUseDeletedPath.Checked && !String.IsNullOrEmpty(altPath)) { NodeSelectionParameters nsp = new NodeSelectionParameters(); nsp.AliasPath = altPath; nsp.CultureCode = TreeProvider.ALL_CULTURES; nsp.ClassNames = TreeProvider.ALL_CLASSNAMES; nsp.CombineWithDefaultCulture = true; nsp.SiteName = siteName; nsp.MaxRelativeLevel = TreeProvider.ALL_LEVELS; nsp.TopN = 1; altNode = DocumentHelper.GetDocument(nsp, tree); // Check whether user is authorized to use alternating document if (altNode != null) { if (currentUser.IsAuthorizedPerDocument(altNode, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Denied) { throw new Exception(GetString("contentdelete.notallowedalternating")); } } else { // Do not allow to delete a page with specified redirection URL which is not valid throw new Exception(GetString("contentdelete.redirectionurlisnotvalid")); } } // Delete the documents foreach (DataRow nodeRow in ds.Tables[0].Rows) { // Get the current document string className = nodeRow["ClassName"].ToString(); string aliasPath = nodeRow["NodeAliasPath"].ToString(); string docCulture = nodeRow["DocumentCulture"].ToString(); refreshId = ValidationHelper.GetInteger(nodeRow["NodeParentID"], 0); if (refreshId == 0) { refreshId = ValidationHelper.GetInteger(nodeRow["NodeID"], 0); } TreeNode node = DocumentHelper.GetDocument(siteName, aliasPath, docCulture, false, className, null, null, TreeProvider.ALL_LEVELS, false, null, tree); if (node == null) { AddLog(string.Format(ResHelper.GetString("ContentRequest.DocumentNoLongerExists", currentCulture), HTMLHelper.HTMLEncode(aliasPath))); continue; } // Ensure current parent ID int parentId = node.NodeParentID; // Check if bound SKU can be deleted (if any) bool authorizedToDeleteSKU = !node.HasSKU || IsUserAuthorizedToModifySKU(node); // Check delete permissions if (IsUserAuthorizedToDeleteDocument(node) && (CanDestroy(node) || !chkDestroy.Checked) && authorizedToDeleteSKU) { // Delete the document if (parentId <= 0) { parentId = node.NodeID; } // Prepare settings for delete var settings = new DeleteDocumentSettings(node, chkAllCultures.Checked, chkDestroy.Checked, tree); bool skip = false; // Add additional settings if alternating document is specified if (altNode != null) { var nodeAliasPath = node.NodeAliasPath; var altNodeAliasPath = altNode.NodeAliasPath; // Skip deletion for pages which have alternative node as their child or itself if (altNodeAliasPath.EqualsCSafe(nodeAliasPath, true) || altNodeAliasPath.StartsWithCSafe(nodeAliasPath.TrimEnd('/') + "/", true)) { AddError(String.Format(GetString("contentdelete.redirectionurltosamepage"), HTMLHelper.HTMLEncode(node.NodeAliasPath))); skip = true; } else { settings.AlternatingDocument = altNode; settings.AlternatingDocumentCopyAllPaths = chkAltAliases.Checked; settings.AlternatingDocumentMaxLevel = chkAltSubNodes.Checked ? -1 : node.NodeLevel; } } // Delete document refreshId = !skip && DocumentHelper.DeleteDocument(settings) || isMultipleDelete ? parentId : node.NodeID; } // Access denied - not authorized to delete the document else { AddError(string.Format(ResHelper.GetString("cmsdesk.notauthorizedtodeletedocument", currentCulture), HTMLHelper.HTMLEncode(node.NodeAliasPath))); } } } else { AddError(ResHelper.GetString("DeleteDocument.CultureNotExists", currentCulture)); } } catch (ThreadAbortException ex) { if (CMSThread.Stopped(ex)) { // When canceled ShowError(ResHelper.GetString("DeleteDocument.DeletionCanceled", currentCulture)); } else { // Log error LogExceptionToEventLog(ex); } } catch (Exception ex) { // Log error LogExceptionToEventLog(ex); } finally { if (string.IsNullOrEmpty(CurrentError)) { // Overwrite refreshId variable if sub-levels are visible if (allLevelsSelected && Parameters.ContainsKey("refreshnodeid")) { refreshId = ValidationHelper.GetInteger(Parameters["refreshnodeid"], 0); } // Refresh tree or page (on-site editing) if (!RequiresDialog) { ctlAsyncLog.Parameter = "RefreshTree(" + refreshId + ", " + refreshId + "); \n" + "SelectNode(" + refreshId + ");"; } else { // Go to the root by default string url = URLHelper.ResolveUrl("~/"); // Update the refresh node id when set in the parent dialog if (Parameters != null) { int refreshNodeId = ValidationHelper.GetInteger(Parameters["refreshnodeid"], 0); if (refreshNodeId > 0) { refreshId = refreshNodeId; } } // Try go to the parent document if (refreshId > 0) { TreeProvider tp = new TreeProvider(MembershipContext.AuthenticatedUser); TreeNode tn = DocumentHelper.GetDocument(refreshId, TreeProvider.ALL_CULTURES, tp); if (tn != null) { url = URLHelper.ResolveUrl(DocumentURLProvider.GetUrl(tn)); } } ctlAsyncLog.Parameter = "window.refreshPageOnClose = true; window.reloadPageUrl = " + ScriptHelper.GetString(url) + "; CloseDialog();"; } } else { ctlAsyncLog.Parameter = "RefreshTree(null, null);"; } } }
/// <summary> /// Deletes document(s). /// </summary> private void Delete(object parameter) { if (parameter == null || nodeIds.Count < 1) { return; } if (!LicenseHelper.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Blogs, ObjectActionEnum.Edit)) { AddError(ResHelper.GetString("cmsdesk.blogdeletelicenselimitations", currentCulture)); return; } if (!LicenseHelper.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Documents, ObjectActionEnum.Edit)) { AddError(ResHelper.GetString("cmsdesk.documentdeletelicenselimitations", currentCulture)); return; } int refreshId = 0; TreeProvider tree = new TreeProvider(currentUser); tree.AllowAsyncActions = false; string[] parameters = ((string)parameter).Split(';'); bool allLevelsSelected = ValidationHelper.GetBoolean(parameters[3], false); try { string siteName = parameters[1]; bool isMultipleDelete = ValidationHelper.GetBoolean(parameters[2], false); // Prepare the where condition string where = new WhereCondition().WhereIn("NodeID", nodeIds).ToString(true); string columns = SqlHelper.MergeColumns(TreeProvider.SELECTNODES_REQUIRED_COLUMNS, "NodeAliasPath, ClassName, DocumentCulture, NodeParentID"); bool combineWithDefaultCulture = false; string cultureCode = parameters[0]; switch (parameters[4]) { // Normalne page deletion case "documentoptions": combineWithDefaultCulture = chkAllCultures.Checked; cultureCode = combineWithDefaultCulture ? TreeProvider.ALL_CULTURES : parameters[0]; break; // Root page deletion case "rootoptions": cultureCode = rblRoot.SelectedValue == "allpages" ? TreeProvider.ALL_CULTURES : parameters[0]; tree.DeleteChildNodes = rblRoot.SelectedValue != "current"; where = rblRoot.SelectedValue == "allculturepages" ? String.Empty : where; break; } // Begin log AddLog(ResHelper.GetString("ContentDelete.DeletingDocuments", currentCulture)); string orderBy = "NodeAliasPath DESC"; if (cultureCode == TreeProvider.ALL_CULTURES) { // Default culture has to be selected on last position string defaultCulture = CultureHelper.GetDefaultCultureCode(siteName); orderBy += ", CASE WHEN DocumentCulture = '" + SqlHelper.EscapeQuotes(defaultCulture) + "' THEN 1 ELSE 0 END"; } // Get the documents DataSet ds = tree.SelectNodes(siteName, "/%", cultureCode, combineWithDefaultCulture, null, where, orderBy, TreeProvider.ALL_LEVELS, false, 0, columns); if (!DataHelper.DataSourceIsEmpty(ds)) { string altPath = Convert.ToString(selAltPath.Value); TreeNode altNode = null; if (chkUseDeletedPath.Checked && !String.IsNullOrEmpty(altPath)) { NodeSelectionParameters nsp = new NodeSelectionParameters(); nsp.AliasPath = altPath; nsp.CultureCode = TreeProvider.ALL_CULTURES; nsp.ClassNames = TreeProvider.ALL_CLASSNAMES; nsp.CombineWithDefaultCulture = true; nsp.SiteName = siteName; nsp.MaxRelativeLevel = TreeProvider.ALL_LEVELS; nsp.TopN = 1; altNode = DocumentHelper.GetDocument(nsp, tree); // Check whether user is authorized to use alternating document if (altNode != null) { if (currentUser.IsAuthorizedPerDocument(altNode, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Denied) { throw new Exception(GetString("contentdelete.notallowedalternating")); } } } // Delete the documents foreach (DataRow nodeRow in ds.Tables[0].Rows) { // Get the current document string className = nodeRow["ClassName"].ToString(); string aliasPath = nodeRow["NodeAliasPath"].ToString(); string docCulture = nodeRow["DocumentCulture"].ToString(); refreshId = ValidationHelper.GetInteger(nodeRow["NodeParentID"], 0); if (refreshId == 0) { refreshId = ValidationHelper.GetInteger(nodeRow["NodeID"], 0); } TreeNode node = DocumentHelper.GetDocument(siteName, aliasPath, docCulture, false, className, null, null, TreeProvider.ALL_LEVELS, false, null, tree); if (node == null) { AddLog(string.Format(ResHelper.GetString("ContentRequest.DocumentNoLongerExists", currentCulture), HTMLHelper.HTMLEncode(aliasPath))); continue; } // Ensure current parent ID int parentId = node.NodeParentID; // Check if bound SKU can be deleted (if any) bool authorizedToDeleteSKU = !node.HasSKU || IsUserAuthorizedToModifySKU(node); // Check delete permissions if (IsUserAuthorizedToDeleteDocument(node) && (CanDestroy(node) || !chkDestroy.Checked) && authorizedToDeleteSKU) { // Delete the document if (parentId <= 0) { parentId = node.NodeID; } // Prepare action for affected products DeleteProductActionEnum deleteSKUsAction = DeleteProductActionEnum.NoAction; switch (rblSKUAction.SelectedValue) { case "delete": deleteSKUsAction = DeleteProductActionEnum.DeleteSKU; break; case "disable": deleteSKUsAction = DeleteProductActionEnum.DisableSKU; break; case "deleteordisable": deleteSKUsAction = DeleteProductActionEnum.DeleteOrDisableSKU; break; } // Prepare settings for delete DeleteDocumentSettings settings = new DeleteDocumentSettings(node, chkAllCultures.Checked, chkDestroy.Checked, tree) { DeleteProductAction = deleteSKUsAction }; // Add additional settings if alternating document is specified if (altNode != null) { settings.AlternatingDocument = altNode; settings.AlternatingDocumentCopyAllPaths = chkAltAliases.Checked; settings.AlternatingDocumentMaxLevel = chkAltSubNodes.Checked ? -1 : node.NodeLevel; } // Delete document refreshId = DocumentHelper.DeleteDocument(settings) || isMultipleDelete ? parentId : node.NodeID; } // Access denied - not authorized to delete the document else { AddError(string.Format(ResHelper.GetString("cmsdesk.notauthorizedtodeletedocument", currentCulture), HTMLHelper.HTMLEncode(node.NodeAliasPath))); } } } else { AddError(ResHelper.GetString("DeleteDocument.CultureNotExists", currentCulture)); } } catch (ThreadAbortException ex) { string state = ValidationHelper.GetString(ex.ExceptionState, string.Empty); if (state == CMSThread.ABORT_REASON_STOP) { // When canceled ShowError(ResHelper.GetString("DeleteDocument.DeletionCanceled", currentCulture)); } else { // Log error LogExceptionToEventLog(ex); } } catch (Exception ex) { // Log error LogExceptionToEventLog(ex); } finally { if (string.IsNullOrEmpty(CurrentError)) { // Overwrite refreshId variable if sub-levels are visible if (allLevelsSelected && Parameters.ContainsKey("refreshnodeid")) { refreshId = ValidationHelper.GetInteger(Parameters["refreshnodeid"], 0); } // Refresh tree or page (on-site editing) if (!RequiresDialog) { ctlAsync.Parameter = "RefreshTree(" + refreshId + ", " + refreshId + "); \n" + "SelectNode(" + refreshId + ");"; } else { // Go to the root by default string url = URLHelper.ResolveUrl("~/"); // Update the refresh node id when set in the parent dialog if (Parameters != null) { int refreshNodeId = ValidationHelper.GetInteger(Parameters["refreshnodeid"], 0); if (refreshNodeId > 0) { refreshId = refreshNodeId; } } // Try go to the parent document if (refreshId > 0) { TreeProvider tp = new TreeProvider(MembershipContext.AuthenticatedUser); TreeNode tn = DocumentHelper.GetDocument(refreshId, TreeProvider.ALL_CULTURES, tp); if (tn != null) { url = URLHelper.ResolveUrl(DocumentURLProvider.GetUrl(tn.NodeAliasPath)); } } ctlAsync.Parameter = "window.refreshPageOnClose = true; window.reloadPageUrl = " + ScriptHelper.GetString(url) + "; CloseDialog();"; } } else { ctlAsync.Parameter = "RefreshTree(null, null);"; } } }
/// <summary> /// Removes pages that uses wireframe page type. /// </summary> private static void RemoveWireFramePages82To90() { const string WIREFRAME_CLASS_NAME = "cms.wireframe"; // First, check whether wireframe data class exists and if it doesn't then skip removing wireframe pages. if (DataClassInfoProvider.GetDataClassInfo(WIREFRAME_CLASS_NAME) == null) { return; } // Select wireframe pages TreeProvider tp = new TreeProvider(); var wireframePages = tp.SelectNodes(WIREFRAME_CLASS_NAME) .All() .Path("/", PathTypeEnum.Children) .OrderByDescending("NodeAliasPath"); foreach (TreeNode node in wireframePages) { DeleteDocumentSettings dds = new DeleteDocumentSettings { DeleteAllCultures = true, DestroyHistory = true, Node = node, Tree = tp, }; try { // Delete wireframe page and all its depending objects DocumentHelper.DeleteDocument(dds); } catch (Exception ex) { EventLogProvider.LogException(EventLogSource, "DELETEWIREFRAMEPAGE", ex, node.NodeSiteID); } } // Delete pages in recycle bin which were deleted earlier var q = VersionHistoryInfoProvider.GetVersionHistories().WhereEquals("VersionClassID", DataClassInfoProvider.GetClasses().WhereEquals("ClassName", WIREFRAME_CLASS_NAME).AsSingleColumn().AsValue()); VersionManager vm = VersionManager.GetInstance(tp); q.ForEachObject(vhi => { try { vm.DestroyDocumentVersion(vhi.VersionHistoryID); } catch (Exception ex) { EventLogProvider.LogException(EventLogSource, "DELETEWIREFRAMEPAGEHISTORY", ex); } }); }
/// <summary> /// Deletes document(s). /// </summary> private void Delete(object parameter) { if (parameter == null || nodeIds.Count < 1) { return; } if (!LicenseHelper.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.Blogs, VersionActionEnum.Edit)) { AddError(ResHelper.GetString("cmsdesk.blogdeletelicenselimitations", currentCulture)); return; } if (!LicenseHelper.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.Documents, VersionActionEnum.Edit)) { AddError(ResHelper.GetString("cmsdesk.documentdeletelicenselimitations", currentCulture)); return; } int refreshId = 0; TreeProvider tree = new TreeProvider(currentUser); tree.AllowAsyncActions = false; try { string[] parameters = ((string)parameter).Split(';'); string siteName = parameters[1]; // Prepare the where condition string where = SqlHelperClass.GetWhereCondition("NodeID", (int[])nodeIds.ToArray(typeof(int))); string columns = SqlHelperClass.MergeColumns(TreeProvider.SELECTNODES_REQUIRED_COLUMNS, "NodeAliasPath, ClassName, DocumentCulture, NodeParentID"); bool combineWithDefaultCulture = chkAllCultures.Checked; string cultureCode = combineWithDefaultCulture ? TreeProvider.ALL_CULTURES : parameters[0]; // Begin log AddLog(ResHelper.GetString("ContentDelete.DeletingDocuments", currentCulture)); // Get the documents DataSet ds = tree.SelectNodes(siteName, "/%", cultureCode, combineWithDefaultCulture, null, where, "NodeAliasPath DESC", TreeProvider.ALL_LEVELS, false, 0, columns); if (!DataHelper.DataSourceIsEmpty(ds)) { string altPath = Convert.ToString(selAltPath.Value); TreeNode altNode = null; if (chkUseDeletedPath.Checked && !String.IsNullOrEmpty(altPath)) { NodeSelectionParameters nsp = new NodeSelectionParameters(); nsp.AliasPath = altPath; nsp.CultureCode = TreeProvider.ALL_CULTURES; nsp.ClassNames = TreeProvider.ALL_CLASSNAMES; nsp.CombineWithDefaultCulture = true; nsp.SiteName = siteName; nsp.MaxRelativeLevel = TreeProvider.ALL_LEVELS; nsp.TopN = 1; altNode = DocumentHelper.GetDocument(nsp, tree); // Check whether user is authorized to use alternating document if (altNode != null) { if (currentUser.IsAuthorizedPerDocument(altNode, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Denied) { throw new Exception(GetString("contentdelete.notallowedalternating")); } } } // Delete the documents foreach (DataRow nodeRow in ds.Tables[0].Rows) { // Get the current document string className = nodeRow["ClassName"].ToString(); string aliasPath = nodeRow["NodeAliasPath"].ToString(); string docCulture = nodeRow["DocumentCulture"].ToString(); refreshId = ValidationHelper.GetInteger(nodeRow["NodeParentID"], 0); if (refreshId == 0) { refreshId = ValidationHelper.GetInteger(nodeRow["NodeID"], 0); } TreeNode node = DocumentHelper.GetDocument(siteName, aliasPath, docCulture, false, className, null, null, TreeProvider.ALL_LEVELS, false, null, tree); if (node == null) { AddLog(string.Format(ResHelper.GetString("ContentRequest.DocumentNoLongerExists", currentCulture), HTMLHelper.HTMLEncode(aliasPath))); continue; } // Ensure current parent ID int parentId = node.NodeParentID; // Check if bound SKU can be deleted (if any) bool authorizedToDeleteSKU = !node.HasSKU || IsUserAuthorizedToModifySKU(node); // Check delete permissions if (IsUserAuthorizedToDeleteDocument(node) && (CanDestroy(node) || !chkDestroy.Checked) && authorizedToDeleteSKU) { // Delete the document if (parentId <= 0) { parentId = node.NodeID; } // Prepare action for affected products DeleteProductActionEnum deleteSKUsAction = DeleteProductActionEnum.NoAction; switch (rblSKUAction.SelectedValue) { case "delete": deleteSKUsAction = DeleteProductActionEnum.DeleteSKU; break; case "disable": deleteSKUsAction = DeleteProductActionEnum.DisableSKU; break; case "deleteordisable": deleteSKUsAction = DeleteProductActionEnum.DeleteOrDisableSKU; break; } // Prepare settings for delete DeleteDocumentSettings settings = new DeleteDocumentSettings(node, tree, chkAllCultures.Checked, chkDestroy.Checked, deleteSKUsAction); // Add additional settings if alternating document is specified if (altNode != null) { settings.AlternatingDocument = altNode; settings.AlternatingDocumentCopyAllPaths = chkAltAliases.Checked; settings.AlternatingDocumentMaxLevel = chkAltSubNodes.Checked ? -1 : node.NodeLevel; } // Delete document refreshId = DocumentHelper.DeleteDocument(settings) ? parentId : node.NodeID; } // Access denied - not authorized to delete the document else { AddError(string.Format(ResHelper.GetString("cmsdesk.notauthorizedtodeletedocument", currentCulture), HTMLHelper.HTMLEncode(node.NodeAliasPath))); } } } else { AddError(ResHelper.GetString("DeleteDocument.CultureNotExists", currentCulture)); } } catch (ThreadAbortException ex) { string state = ValidationHelper.GetString(ex.ExceptionState, string.Empty); if (state == CMSThread.ABORT_REASON_STOP) { // When canceled ShowError(ResHelper.GetString("DeleteDocument.DeletionCanceled", currentCulture)); } else { // Log error LogExceptionToEventLog(ex); } } catch (Exception ex) { // Log error LogExceptionToEventLog(ex); } finally { if (string.IsNullOrEmpty(CurrentError)) { // Refresh tree or page (on-site editing) if (!RequiresDialog) { ctlAsync.Parameter = "RefreshTree(" + refreshId + ", " + refreshId + "); \n" + "SelectNode(" + refreshId + ");"; } else { // Go to the root by default string url = URLHelper.ResolveUrl("~/"); // Update the refresh node id when set in the parent dialog if (Parameters != null) { int refreshNodeId = ValidationHelper.GetInteger(Parameters["refreshnodeid"], 0); if (refreshNodeId > 0) { refreshId = refreshNodeId; } } // Try go to the parent document if (refreshId > 0) { TreeProvider tp = new TreeProvider(CMSContext.CurrentUser); TreeNode tn = DocumentHelper.GetDocument(refreshId, TreeProvider.ALL_CULTURES, tp); if (tn != null) { url = URLHelper.ResolveUrl(DocumentURLProvider.GetUrl(tn.NodeAliasPath)); } } ctlAsync.Parameter = "window.refreshPageOnClose = true; window.reloadPageUrl = " + ScriptHelper.GetString(url) + "; CloseDialog();"; } } else { ctlAsync.Parameter = "RefreshTree(null, null);"; } } }
/// <summary> /// Deletes document(s). /// </summary> private void Delete(object parameter) { if (parameter == null || nodeIds.Count < 1) { return; } if (!LicenseHelper.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Documents, ObjectActionEnum.Edit)) { AddError(GetString("cmsdesk.documentdeletelicenselimitations", currentCulture)); return; } int refreshId = 0; TreeProvider tree = new TreeProvider(currentUser); tree.AllowAsyncActions = false; string[] parameters = ((string)parameter).Split(';'); bool allLevelsSelected = ValidationHelper.GetBoolean(parameters[3], false); try { string siteName = parameters[1]; bool isMultipleDelete = ValidationHelper.GetBoolean(parameters[2], false); // Prepare the where condition string where = new WhereCondition().WhereIn("NodeID", nodeIds).ToString(true); string columns = SqlHelper.MergeColumns(DocumentColumnLists.SELECTNODES_REQUIRED_COLUMNS, "NodeAliasPath, ClassName, DocumentCulture, NodeParentID"); bool combineWithDefaultCulture = false; string cultureCode = parameters[0]; switch (parameters[4]) { // Standard page deletion case "documentoptions": combineWithDefaultCulture = chkAllCultures.Checked; cultureCode = combineWithDefaultCulture ? TreeProvider.ALL_CULTURES : parameters[0]; break; // Root page deletion case "rootoptions": cultureCode = rblRoot.SelectedValue == "allpages" ? TreeProvider.ALL_CULTURES : parameters[0]; where = rblRoot.SelectedValue == "allculturepages" ? String.Empty : where; break; } // Begin log AddLog(GetString("ContentDelete.DeletingDocuments", currentCulture)); string orderBy = "NodeAliasPath DESC"; if (cultureCode == TreeProvider.ALL_CULTURES) { // Default culture has to be selected on last position string defaultCulture = CultureHelper.GetDefaultCultureCode(siteName); orderBy += ", CASE WHEN DocumentCulture = '" + SqlHelper.EscapeQuotes(defaultCulture) + "' THEN 1 ELSE 0 END"; } // Get the documents DataSet ds = tree.SelectNodes(siteName, "/%", cultureCode, combineWithDefaultCulture, null, where, orderBy, TreeProvider.ALL_LEVELS, false, 0, columns); if (!DataHelper.DataSourceIsEmpty(ds)) { // Delete the documents foreach (DataRow nodeRow in ds.Tables[0].Rows) { // Get the current document string className = nodeRow["ClassName"].ToString(); string aliasPath = nodeRow["NodeAliasPath"].ToString(); string docCulture = nodeRow["DocumentCulture"].ToString(); refreshId = ValidationHelper.GetInteger(nodeRow["NodeParentID"], 0); if (refreshId == 0) { refreshId = ValidationHelper.GetInteger(nodeRow["NodeID"], 0); } TreeNode node = DocumentHelper.GetDocument(siteName, aliasPath, docCulture, false, className, null, null, TreeProvider.ALL_LEVELS, false, null, tree); if (node == null) { AddLog(String.Format(GetString("ContentRequest.DocumentNoLongerExists", currentCulture), HTMLHelper.HTMLEncode(aliasPath))); continue; } // Ensure current parent ID int parentId = node.NodeParentID; // Check if bound SKU can be deleted (if any) bool authorizedToDeleteSKU = !node.HasSKU || IsUserAuthorizedToModifySKU(node); // Check delete permissions if (IsUserAuthorizedToDeleteDocument(node) && (CanDestroy(node) || !chkDestroy.Checked) && authorizedToDeleteSKU) { // Delete the document if (parentId <= 0) { parentId = node.NodeID; } // Prepare settings for delete var settings = new DeleteDocumentSettings(node, chkAllCultures.Checked, chkDestroy.Checked, tree); // Delete document refreshId = DocumentHelper.DeleteDocument(settings) || isMultipleDelete ? parentId : node.NodeID; } // Access denied - not authorized to delete the document else { AddError(String.Format(GetString("cmsdesk.notauthorizedtodeletedocument", currentCulture), HTMLHelper.HTMLEncode(node.GetDocumentName()))); } } } else { AddError(GetString("DeleteDocument.CultureNotExists", currentCulture)); } } catch (ThreadAbortException ex) { if (CMSThread.Stopped(ex)) { // When canceled base.ShowError(GetString("DeleteDocument.DeletionCanceled", currentCulture)); } else { // Log error LogExceptionToEventLog(ex); } } catch (Exception ex) { // Log error LogExceptionToEventLog(ex); } finally { if (String.IsNullOrEmpty(CurrentError)) { // Overwrite refreshId variable if sub-levels are visible if (allLevelsSelected && Parameters.ContainsKey("refreshnodeid")) { refreshId = ValidationHelper.GetInteger(Parameters["refreshnodeid"], 0); } // Refresh tree or page (on-site editing) if (!RequiresDialog) { ctlAsyncLog.Parameter = "RefreshTree(" + refreshId + ", " + refreshId + "); \n" + "SelectNode(" + refreshId + ");"; } else { // Go to the root by default string url = UrlResolver.ResolveUrl("~/"); // Update the refresh node id when set in the parent dialog if (Parameters != null) { int refreshNodeId = ValidationHelper.GetInteger(Parameters["refreshnodeid"], 0); if (refreshNodeId > 0) { refreshId = refreshNodeId; } } // Try go to the parent document if (refreshId > 0) { TreeProvider tp = new TreeProvider(MembershipContext.AuthenticatedUser); TreeNode tn = DocumentHelper.GetDocument(refreshId, TreeProvider.ALL_CULTURES, tp); if (tn != null) { url = UrlResolver.ResolveUrl(DocumentURLProvider.GetUrl(tn)); } } ctlAsyncLog.Parameter = "window.refreshPageOnClose = true; window.reloadPageUrl = " + ScriptHelper.GetString(url) + "; CloseDialog();"; } } else { ctlAsyncLog.Parameter = "RefreshTree(null, null);"; } } }