Shifting ContentMenuItemPart

This commit is contained in:
Sebastien Ros
2013-10-30 12:44:06 -07:00
parent a99eec08b9
commit 81e5168fae
6 changed files with 78 additions and 49 deletions

View File

@@ -1,7 +1,6 @@
using JetBrains.Annotations;
using Orchard.ContentManagement;
using Orchard.ContentPicker.Models;
using Orchard.Core.Navigation.Models;
using Orchard.Data;
using Orchard.ContentManagement.Handlers;
@@ -16,8 +15,8 @@ namespace Orchard.ContentPicker.Handlers {
Filters.Add(StorageFilter.For(repository));
OnLoading<ContentMenuItemPart>((context, part) => part._content.Loader(p => {
if (part.Record.ContentMenuItemRecord != null) {
return contentManager.Get(part.Record.ContentMenuItemRecord.Id);
if (part.ContentItemId != null) {
return contentManager.Get(part.ContentItemId.Value);
}
return null;

View File

@@ -1,7 +1,6 @@
using JetBrains.Annotations;
using Orchard.ContentManagement;
using Orchard.ContentPicker.Models;
using Orchard.Core.Navigation.Models;
using Orchard.Data;
using Orchard.ContentManagement.Handlers;

View File

@@ -11,7 +11,13 @@ namespace Orchard.ContentPicker.Models {
set {
_content.Value = value;
Record.ContentMenuItemRecord = value == null ? null : value.Record;
ContentItemId = value == null ? (int?)null : value.Record.Id;
}
}
public int? ContentItemId {
get { return this.Retrieve(x => x.ContentItemId); }
set { this.Store(x => x.ContentItemId, value); }
}
}
}

View File

@@ -71,7 +71,7 @@ namespace Upgrade.Controllers {
// ThemeSiteSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Themes_ThemeSiteSettingsPartRecord"),
(reader, connection) => site.As<InfosetPart>().Set("ThemeSiteSettingsPart", "CurrentThemeName", (string)reader["CurrentThemeName"]));
(reader, connection) => site.As<InfosetPart>().Store("ThemeSiteSettingsPart", "CurrentThemeName", (string)reader["CurrentThemeName"]));
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Themes_ThemeSiteSettingsPartRecord"), null);
@@ -79,8 +79,8 @@ namespace Upgrade.Controllers {
// AkismetSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_AkismetSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Set("AkismetSettingsPart", "TrustAuthenticatedUsers", reader["TrustAuthenticatedUsers"].ToString());
site.As<InfosetPart>().Set("AkismetSettingsPart", "ApiKey", reader["ApiKey"].ToString());
site.As<InfosetPart>().Store("AkismetSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
site.As<InfosetPart>().Store("AkismetSettingsPart", "ApiKey", reader["ApiKey"].ToString());
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_AkismetSettingsPartRecord"), null);
@@ -88,9 +88,9 @@ namespace Upgrade.Controllers {
// ReCaptchaSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_ReCaptchaSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Set("ReCaptchaSettingsPart", "PublicKey", reader["PublicKey"].ToString());
site.As<InfosetPart>().Set("ReCaptchaSettingsPart", "PrivateKey", reader["PrivateKey"].ToString());
site.As<InfosetPart>().Set("ReCaptchaSettingsPart", "TrustAuthenticatedUsers", reader["TrustAuthenticatedUsers"].ToString());
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "PublicKey", reader["PublicKey"].ToString());
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "PrivateKey", reader["PrivateKey"].ToString());
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_ReCaptchaSettingsPartRecord"), null);
@@ -98,8 +98,8 @@ namespace Upgrade.Controllers {
// TypePadSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_TypePadSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Set("TypePadSettingsPart", "ApiKey", reader["ApiKey"].ToString());
site.As<InfosetPart>().Set("ReCaptchaSettingsPart", "TrustAuthenticatedUsers", reader["TrustAuthenticatedUsers"].ToString());
site.As<InfosetPart>().Store("TypePadSettingsPart", "ApiKey", reader["ApiKey"].ToString());
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_TypePadSettingsPartRecord"), null);
@@ -134,30 +134,48 @@ namespace Upgrade.Controllers {
if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner))
throw new AuthenticationException("");
var lastContentItemId = 0;
var lastContentItemId = id;
// TypePadSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_ContentPermissions_ContentPermissionsPartRecord" + " WHERE Id > " + id),
_upgradeService.ExecuteReader("SELECT TOP " + BATCH + " * FROM " + _upgradeService.GetPrefixedTableName("Orchard_ContentPermissions_ContentPermissionsPartRecord" + " WHERE Id > " + id),
(reader, connection) => {
lastContentItemId = (int) reader["Id"];
var contentPermissionPart = _orchardServices.ContentManager.Get(lastContentItemId);
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "Enabled", reader["Enabled"].ToString());
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "ViewContent", reader["ViewContent"].ToString());
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "ViewOwnContent", reader["ViewOwnContent"].ToString());
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "PublishContent", reader["PublishContent"].ToString());
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "PublishOwnContent", reader["PublishOwnContent"].ToString());
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "EditContent", reader["EditContent"].ToString());
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "EditOwnContent", reader["EditOwnContent"].ToString());
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "DeleteContent", reader["DeleteContent"].ToString());
contentPermissionPart.As<InfosetPart>().Set("ContentPermissionsPart", "DeleteOwnContent", reader["DeleteOwnContent"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "Enabled", reader["Enabled"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "ViewContent", reader["ViewContent"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "ViewOwnContent", reader["ViewOwnContent"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "PublishContent", reader["PublishContent"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "PublishOwnContent", reader["PublishOwnContent"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "EditContent", reader["EditContent"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "EditOwnContent", reader["EditOwnContent"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "DeleteContent", reader["DeleteContent"].ToString());
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "DeleteOwnContent", reader["DeleteOwnContent"].ToString());
});
if (lastContentItemId == 0) {
if (lastContentItemId == id) {
// delete the table only when there is no more content to process
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_ContentPermissions_ContentPermissionsPartRecord"), null);
}
return new JsonResult { Data = lastContentItemId };
}
[HttpPost]
public JsonResult MigrateContentMenuItemPart(int id) {
if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner))
throw new AuthenticationException("");
var lastContentItemId = id;
// TypePadSettingsPartRecord
_upgradeService.ExecuteReader("SELECT TOP " + BATCH + " * FROM " + _upgradeService.GetPrefixedTableName("Orchard_ContentPicker_ContentMenuItemPartRecord" + " WHERE Id > " + id),
(reader, connection) => {
lastContentItemId = (int)reader["Id"];
var contentPermissionPart = _orchardServices.ContentManager.Get(lastContentItemId);
contentPermissionPart.As<InfosetPart>().Store("ContentMenuItemPart", "ContentItemId", (int)reader["ContentMenuItemRecord_id"]);
});
return new JsonResult { Data = lastContentItemId };
}
}
}

View File

@@ -3,6 +3,8 @@
Layout.Title = T("Migrate Infosets").ToString();
}
<div class="message message-Warning" id="message-progress" style="display: none"></div>
@using (Html.BeginFormAntiForgeryPost(Url.Action("Index", "Infoset"))) {
<fieldset>
<legend>@T("Migrating Site Settings:")</legend>
@@ -16,22 +18,31 @@
<fieldset>
<legend>@T("Migrating Body Parts:")</legend>
<span class="hint">@T("This migration step will copy all Body Parts to Infosets.")</span>
<button type="button" class="button button-migrate" data-url="@Url.Action("MigrateBody", "Infoset")">@T("Migrate")</button>
</fieldset>
<fieldset>
<button type="button" class="button" id="button-migrate" data-url="@Url.Action("MigrateBody", "Infoset")">@T("Migrate")</button>
<div class="message message-Warning" id="message-progress" style="display: none"></div>
<legend>@T("Migrating Content Item Menu Parts:")</legend>
<span class="hint">@T("This migration step will copy all Content Item Permissions parts to Infosets.")</span>
<button type="button" class="button button-migrate" data-url="@Url.Action("MigrateContentPermissionsPart", "Infoset")">@T("Migrate")</button>
</fieldset>
<fieldset>
<legend>@T("Migrating Content Item Menu Parts:")</legend>
<span class="hint">@T("This migration step will copy all Content Item Menu parts to Infosets.")</span>
<button type="button" class="button button-migrate" data-url="@Url.Action("MigrateContentMenuItemPart", "Infoset")">@T("Migrate")</button>
</fieldset>
@using (Script.Foot()) {
<script type="text/javascript">
$(function() {
var antiForgeryToken = '@HttpUtility.JavaScriptStringEncode(Html.AntiForgeryTokenValueOrchard().ToString())';
var endMessage = '@HttpUtility.JavaScriptStringEncode(T("All content items have been processed").Text)';
var endMessage = '@HttpUtility.JavaScriptStringEncode(T("All items have been processed").Text)';
$('#button-migrate').click(function () {
$('.button-migrate').click(function () {
var importUrl = $(this).data('url');
var processed = 0;
var startId = 0;
$('#message-progress').show();
var iId = setInterval(function() {
@@ -40,25 +51,24 @@
url: importUrl,
async: false,
data: {
__RequestVerificationToken: antiForgeryToken
__RequestVerificationToken: antiForgeryToken,
id: startId // start at index 0
},
success: function(data) {
console.log('items remaining: ' + data);
processed += Number(data);
if (Number(data) == 0) {
success: function (data) {
if (Number(data) == startId) {
clearInterval(iId);
$('#message-progress').text(endMessage);
}
else {
startId = Number(data);
$('#message-progress').text('Processing content item ' + startId);
}
},
fail: function(result) {
processed = 0;
console.log("An error occured: " + result);
}
});
$('#message-progress').text(processed + ' documents processed ...');
}, 100);
});

View File

@@ -37,27 +37,24 @@ namespace Orchard.ContentManagement {
TProperty value, bool versioned = false) where TPart : ContentPart {
var partName = contentPart.GetType().Name;
var infosetPart = contentPart.As<InfosetPart>();
var infoset = (versioned ? infosetPart.VersionInfoset : infosetPart.Infoset);
var partElement = infoset.Element.Element(partName);
if (partElement == null) {
partElement = new XElement(partName);
infoset.Element.Add(partElement);
}
var propertyInfo = ReflectionHelper<TPart>.GetPropertyInfo(targetExpression);
var name = propertyInfo.Name;
partElement.Attr(name, value);
Store(infosetPart, partName, name, value, versioned);
}
public static void Store<TProperty>(this ContentPart contentPart, string name,
TProperty value, bool versioned = false) {
var partName = contentPart.GetType().Name;
var infosetPart = contentPart.As<InfosetPart>();
Store(infosetPart, partName, name, value, versioned);
}
public static void Store<TProperty>(this InfosetPart infosetPart, string partName, string name, TProperty value, bool versioned = false) {
var infoset = (versioned ? infosetPart.VersionInfoset : infosetPart.Infoset);
var partElement = infoset.Element.Element(partName);
if (partElement == null) {