Merge branch 'temp-U4-7748' into temp-U4-7747

This commit is contained in:
Shannon
2016-01-20 13:32:40 +01:00
16 changed files with 249 additions and 116 deletions

View File

@@ -634,14 +634,20 @@ namespace Umbraco.Core
}
#endregion
//TODO: This isn't very elegant, and will have issues since the AppDomain.CurrentDomain
// doesn't actualy load in all assemblies, only the types that have been referenced so far.
// However, in a web context, the BuildManager will have executed which will force all assemblies
// to be loaded so it's fine for now.
public static Type GetTypeByName(string typeName)
{
var type = Type.GetType(typeName);
var type = BuildManager.GetType(typeName, false);
if (type != null) return type;
//TODO: This isn't very elegant, and will have issues since the AppDomain.CurrentDomain
// doesn't actualy load in all assemblies, only the types that have been referenced so far.
// However, in a web context, the BuildManager will have executed which will force all assemblies
// to be loaded so it's fine for now.
//now try fall back procedures.
type = Type.GetType(typeName);
if (type != null) return type;
return AppDomain.CurrentDomain.GetAssemblies()
.Select(x => x.GetType(typeName))

View File

@@ -1,26 +0,0 @@
function modelsResource($q, $http, umbRequestHelper) {
// TODO - should use BackOfficeController to register urls? How can we extend it?
// TODO - this shouldn't exist in core!!
return {
getModelsOutOfDateStatus: function() {
return umbRequestHelper.resourcePromise(
$http.get(
/*umbRequestHelper.getApiUrl(
"modelsApiBaseUrl",
"GetModelsOutOfDateStatus")*/ "/Umbraco/BackOffice/ModelsBuilder/ModelsBuilder/GetModelsOutOfDateStatus"),
"Failed to get models out-of-date status");
},
buildModels: function() {
return umbRequestHelper.resourcePromise(
$http.get(
/*umbRequestHelper.getApiUrl(
"modelsApiBaseUrl",
"BuildModels")*/ "/Umbraco/BackOffice/ModelsBuilder/ModelsBuilder/BuildModels"),
"Failed to build models");
}
};
}
angular.module("umbraco.resources").factory("modelsResource", modelsResource);

View File

@@ -3,7 +3,7 @@
* @name umbraco.services.contentTypeHelper
* @description A helper service for the content type editor
**/
function contentTypeHelper(contentTypeResource, dataTypeResource, $filter) {
function contentTypeHelper(contentTypeResource, dataTypeResource, $filter, $injector, $q) {
var contentTypeHelperService = {
@@ -25,6 +25,44 @@ function contentTypeHelper(contentTypeResource, dataTypeResource, $filter) {
},
generateModels: function () {
var deferred = $q.defer();
var modelsResource = $injector.has("modelsBuilderResource") ? $injector.get("modelsBuilderResource") : null;
var modelsBuilderEnabled = Umbraco.Sys.ServerVariables.umbracoPlugins.modelsBuilder.enabled;
if (modelsBuilderEnabled && modelsResource) {
modelsResource.buildModels().then(function(result) {
deferred.resolve(result);
//just calling this to get the servar back to life
modelsResource.getModelsOutOfDateStatus();
}, function(e) {
deferred.reject(e);
});
}
else {
deferred.resolve(false);
}
return deferred.promise;
},
checkModelsBuilderStatus: function () {
var deferred = $q.defer();
var modelsResource = $injector.has("modelsBuilderResource") ? $injector.get("modelsBuilderResource") : null;
var modelsBuilderEnabled = Umbraco.Sys.ServerVariables.umbracoPlugins.modelsBuilder.enabled;
if (modelsBuilderEnabled && modelsResource) {
modelsResource.getModelsOutOfDateStatus().then(function(result) {
//Generate models buttons should be enabled if its not 100
deferred.resolve(result.status !== 100);
});
}
else {
deferred.resolve(false);
}
return deferred.promise;
},
makeObjectArrayFromId: function (idArray, objectArray) {
var newArray = [];

View File

@@ -9,7 +9,7 @@
(function () {
"use strict";
function DocumentTypesEditController($scope, $routeParams, modelsResource, contentTypeResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, notificationsService, $filter, $q, localizationService, overlayHelper) {
function DocumentTypesEditController($scope, $routeParams, $injector, contentTypeResource, dataTypeResource, editorState, contentEditingHelper, formHelper, navigationService, iconHelper, contentTypeHelper, notificationsService, $filter, $q, localizationService, overlayHelper) {
var vm = this;
var localizeSaving = localizationService.localize("general_saving");
@@ -46,49 +46,6 @@
}
];
//disable by default, turn on if detected correctly.
vm.page.modelsBuilder = false;
modelsResource.getModelsOutOfDateStatus().then(function () {
vm.page.modelsBuilder = true;
});
//Models builder mode:
vm.page.defaultButton = {
hotKey: "ctrl+s",
labelKey: "buttons_save",
letter: "S",
type: "submit",
handler: function () { vm.save(); }
};
vm.page.subButtons = [{
hotKey: "ctrl+g",
labelKey: "buttons_generateModels",
letter: "G",
handler: function(){
vm.page.saveButtonState = "busy";
notificationsService.info("Building models", "this can take abit of time, don't worry");
modelsResource.buildModels().then(function () {
vm.page.saveButtonState = "init";
//clear and add success
notificationsService.success("Models Generated");
//just calling this to get the servar back to life
modelsResource.getModelsOutOfDateStatus();
}, function () {
notificationsService.error("Models could not be generated");
vm.page.saveButtonState = "error";
});
}
}];
vm.page.keyboardShortcutsOverview = [
{
"name": localizationService.localize("main_sections"),
@@ -154,6 +111,39 @@
}
];
contentTypeHelper.checkModelsBuilderStatus().then(function (result) {
vm.page.modelsBuilder = result;
if (result) {
//Models builder mode:
vm.page.defaultButton = {
hotKey: "ctrl+s",
labelKey: "buttons_save",
letter: "S",
type: "submit",
handler: function () { vm.save(); }
};
vm.page.subButtons = [{
hotKey: "ctrl+g",
labelKey: "buttons_generateModels",
letter: "G",
handler: function () {
vm.page.saveButtonState = "busy";
notificationsService.info("Building models", "this can take abit of time, don't worry");
contentTypeHelper.generateModels().then(function (result) {
vm.page.saveButtonState = "init";
//clear and add success
notificationsService.success("Models Generated");
}, function () {
notificationsService.error("Models could not be generated");
vm.page.saveButtonState = "error";
});
}
}];
}
});
if ($routeParams.create) {
vm.page.loading = true;

View File

@@ -95,6 +95,39 @@
}
];
contentTypeHelper.checkModelsBuilderStatus().then(function (result) {
vm.page.modelsBuilder = result;
if (result) {
//Models builder mode:
vm.page.defaultButton = {
hotKey: "ctrl+s",
labelKey: "buttons_save",
letter: "S",
type: "submit",
handler: function () { vm.save(); }
};
vm.page.subButtons = [{
hotKey: "ctrl+g",
labelKey: "buttons_generateModels",
letter: "G",
handler: function () {
vm.page.saveButtonState = "busy";
notificationsService.info("Building models", "this can take abit of time, don't worry");
contentTypeHelper.generateModels().then(function(result) {
vm.page.saveButtonState = "init";
//clear and add success
notificationsService.success("Models Generated");
}, function() {
notificationsService.error("Models could not be generated");
vm.page.saveButtonState = "error";
});
}
}];
}
});
if ($routeParams.create) {
vm.page.loading = true;

View File

@@ -39,14 +39,23 @@
<umb-editor-footer-content-right>
<umb-button
type="submit"
state="vm.page.saveButtonState"
button-style="success"
shortcut="ctrl+s"
label="Save"
label-key="buttons_save">
</umb-button>
<umb-button ng-if="!vm.page.modelsBuilder"
type="submit"
state="vm.page.saveButtonState"
button-style="success"
shortcut="ctrl+s"
label="Save"
label-key="buttons_save">
</umb-button>
<umb-button-group ng-if="vm.page.modelsBuilder"
default-button="vm.page.defaultButton"
sub-buttons="vm.page.subButtons"
state="vm.page.saveButtonState"
direction="up"
float="right">
</umb-button-group>
</umb-editor-footer-content-right>

View File

@@ -9,7 +9,7 @@
(function () {
"use strict";
function MemberTypesEditController($scope, $rootScope, $routeParams, $log, $filter, memberTypeResource, dataTypeResource, editorState, iconHelper, formHelper, navigationService, contentEditingHelper, notificationsService, $q, localizationService, overlayHelper) {
function MemberTypesEditController($scope, $rootScope, $routeParams, $log, $filter, memberTypeResource, dataTypeResource, editorState, iconHelper, formHelper, navigationService, contentEditingHelper, notificationsService, $q, localizationService, overlayHelper, contentTypeHelper) {
var vm = this;
var localizeSaving = localizationService.localize("general_saving");
@@ -54,6 +54,39 @@
}
];
contentTypeHelper.checkModelsBuilderStatus().then(function (result) {
vm.page.modelsBuilder = result;
if (result) {
//Models builder mode:
vm.page.defaultButton = {
hotKey: "ctrl+s",
labelKey: "buttons_save",
letter: "S",
type: "submit",
handler: function () { vm.save(); }
};
vm.page.subButtons = [{
hotKey: "ctrl+g",
labelKey: "buttons_generateModels",
letter: "G",
handler: function () {
vm.page.saveButtonState = "busy";
notificationsService.info("Building models", "this can take abit of time, don't worry");
contentTypeHelper.generateModels().then(function (result) {
vm.page.saveButtonState = "init";
//clear and add success
notificationsService.success("Models Generated");
}, function () {
notificationsService.error("Models could not be generated");
vm.page.saveButtonState = "error";
});
}
}];
}
});
if ($routeParams.create) {
vm.page.loading = true;

View File

@@ -37,14 +37,23 @@
<umb-editor-footer-content-right>
<umb-button
type="submit"
state="vm.page.saveButtonState"
button-style="success"
shortcut="ctrl+s"
label="Save"
label-key="buttons_save">
</umb-button>
<umb-button ng-if="!vm.page.modelsBuilder"
type="submit"
state="vm.page.saveButtonState"
button-style="success"
shortcut="ctrl+s"
label="Save"
label-key="buttons_save">
</umb-button>
<umb-button-group ng-if="vm.page.modelsBuilder"
default-button="vm.page.defaultButton"
sub-buttons="vm.page.subButtons"
state="vm.page.saveButtonState"
direction="up"
float="right">
</umb-button-group>
</umb-editor-footer-content-right>

View File

@@ -1,9 +1,9 @@
function modelsBuilderController($scope, umbRequestHelper, $log, $http /*, $sce*/) {
function modelsBuilderController($scope, umbRequestHelper, $log, $http, modelsBuilderResource) {
$scope.generate = function() {
$scope.generating = true;
umbRequestHelper.resourcePromise(
$http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")),
$http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")),
'Failed to generate.')
.then(function (result) {
$scope.generating = false;
@@ -11,14 +11,10 @@
};
function init() {
umbRequestHelper.resourcePromise(
$http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetDashboard")),
'Failed to get dashboard.')
.then(function (result) {
//result.text = $sce.trustAsHtml(result.text); // accept html
$scope.dashboard = result;
$scope.ready = true;
});
modelsBuilderResource.getDashboard().then(function(result) {
$scope.dashboard = result;
$scope.ready = true;
});
}
init();

View File

@@ -1,6 +1,7 @@
{
//array of files we want to inject into the application on app_start
javascript: [
'~/App_Plugins/ModelsBuilder/modelsbuilder.controller.js'
'~/App_Plugins/ModelsBuilder/modelsbuilder.controller.js',
'~/App_Plugins/ModelsBuilder/modelsbuilder.resource.js'
]
}

View File

@@ -350,12 +350,12 @@
<Name>umbraco.providers</Name>
</ProjectReference>
<Reference Include="System.Xml.Linq" />
<Reference Include="Umbraco.ModelsBuilder, Version=2.2.0.70, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.ModelsBuilder.2.2.0-beta003\lib\Umbraco.ModelsBuilder.dll</HintPath>
<Reference Include="Umbraco.ModelsBuilder, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.ModelsBuilder.3.0.0-beta0001\lib\Umbraco.ModelsBuilder.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Umbraco.ModelsBuilder.AspNet, Version=2.2.0.70, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.ModelsBuilder.AspNet.2.2.0-beta003\lib\Umbraco.ModelsBuilder.AspNet.dll</HintPath>
<Reference Include="Umbraco.ModelsBuilder.AspNet, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.ModelsBuilder.AspNet.3.0.0-beta0001\lib\Umbraco.ModelsBuilder.AspNet.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="UrlRewritingNet.UrlRewriter, Version=2.0.7.0, Culture=neutral, processorArchitecture=MSIL">
@@ -582,8 +582,6 @@
<Compile Include="Umbraco\TreeInit.aspx.designer.cs">
<DependentUpon>treeInit.aspx</DependentUpon>
</Compile>
<Content Include="App_Plugins\ModelsBuilder\modelsbuilder.controller.js" />
<Content Include="App_Plugins\ModelsBuilder\modelsbuilder.htm" />
<Content Include="Config\grid.editors.config.js" />
<Content Include="Config\Lang\cs-CZ.user.xml" />
<Content Include="Config\Lang\da-DK.user.xml" />
@@ -642,7 +640,6 @@
</SubType>
</Content>
<Content Include="Umbraco\Install\Views\Web.config" />
<Content Include="App_Plugins\ModelsBuilder\package.manifest" />
<None Include="Config\404handlers.Release.config">
<DependentUpon>404handlers.config</DependentUpon>
</None>
@@ -2390,6 +2387,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="App_Data\" />
<Folder Include="App_Plugins\" />
<Folder Include="Media\" />
<Folder Include="Umbraco\preview\" />
<Folder Include="Umbraco_Client\FolderBrowser\Images\" />

View File

@@ -37,7 +37,7 @@
<package id="SqlServerCE" version="4.0.0.0" targetFramework="net45" />
<package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
<package id="System.Reflection.Metadata" version="1.0.21" targetFramework="net45" />
<package id="Umbraco.ModelsBuilder" version="2.2.0-beta003" targetFramework="net45" />
<package id="Umbraco.ModelsBuilder.AspNet" version="2.2.0-beta003" targetFramework="net45" />
<package id="Umbraco.ModelsBuilder" version="3.0.0-beta0001" targetFramework="net45" />
<package id="Umbraco.ModelsBuilder.AspNet" version="3.0.0-beta0001" targetFramework="net45" />
<package id="UrlRewritingNet.UrlRewriter" version="2.0.7" targetFramework="net45" />
</packages>

View File

@@ -95,6 +95,7 @@
<key alias="styleChoose">Choose style</key>
<key alias="styleShow">Show styles</key>
<key alias="tableInsert">Insert table</key>
<key alias="generateModels">Generate models</key>
</area>
<area alias="changeDocType">
<key alias="changeDocTypeInstruction">To change the document type for the selected content, first select from the list of valid types for this location.</key>

View File

@@ -26,6 +26,7 @@ using Umbraco.Core.Manifest;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Identity;
using Umbraco.Core.Security;
using Umbraco.ModelsBuilder.Configuration;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.PropertyEditors;
@@ -362,7 +363,8 @@ namespace Umbraco.Web.Editors
{
"umbracoPlugins", new Dictionary<string, object>
{
{"trees", GetTreePluginsMetaData()}
{"trees", GetTreePluginsMetaData()},
{"modelsBuilder", GetModelsBuilderSettings() }
}
},
{
@@ -403,7 +405,7 @@ namespace Umbraco.Web.Editors
return JavaScript(result);
}
[HttpPost]
public ActionResult ExternalLogin(string provider, string redirectUrl = null)
{
@@ -644,6 +646,20 @@ namespace Umbraco.Web.Editors
return app;
}
private Dictionary<string, object> GetModelsBuilderSettings()
{
if (ApplicationContext.IsConfigured == false)
return null;
var settings = new Dictionary<string, object>
{
{"enabled", UmbracoConfig.For.ModelsBuilder().Enable}
};
return settings;
}
private IEnumerable<Dictionary<string, string>> GetTreePluginsMetaData()
{
var treeTypes = PluginManager.Current.ResolveAttributedTreeControllers();

View File

@@ -144,6 +144,14 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.Identity.Owin.2.2.1\lib\net45\Microsoft.AspNet.Identity.Owin.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.1.0.0\lib\net45\Microsoft.CodeAnalysis.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.1.0.0\lib\net45\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Owin, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
@@ -188,6 +196,10 @@
<Reference Include="System">
<Name>System</Name>
</Reference>
<Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.configuration" />
<Reference Include="System.Data">
@@ -205,6 +217,10 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Metadata, Version=1.0.21.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.1.0.21\lib\portable-net45+win8\System.Reflection.Metadata.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Web" />
@@ -290,6 +306,10 @@
<Project>{D7636876-0756-43CB-A192-138C6F0D5E42}</Project>
<Name>umbraco.providers</Name>
</ProjectReference>
<Reference Include="Umbraco.ModelsBuilder, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.ModelsBuilder.3.0.0-beta0001\lib\Umbraco.ModelsBuilder.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="UrlRewritingNet.UrlRewriter, Version=2.0.7.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UrlRewritingNet.UrlRewriter.2.0.7\lib\UrlRewritingNet.UrlRewriter.dll</HintPath>
<Private>True</Private>
@@ -2162,7 +2182,10 @@
<CachedSettingsPropName>umbraco_org_umbraco_update_CheckForUpgrade</CachedSettingsPropName>
</WebReferenceUrl>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.1.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.1.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<VSToolsPath Condition="exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets')">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0</VSToolsPath>

View File

@@ -16,6 +16,9 @@
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net45" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.CodeAnalysis.Common" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.CodeAnalysis.CSharp" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="3.0.1" targetFramework="net45" />
@@ -27,6 +30,9 @@
<package id="Owin" version="1.0" targetFramework="net45" />
<package id="semver" version="1.1.2" targetFramework="net45" />
<package id="SharpZipLib" version="0.86.0" targetFramework="net45" />
<package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
<package id="System.Reflection.Metadata" version="1.0.21" targetFramework="net45" />
<package id="Umbraco.ModelsBuilder" version="3.0.0-beta0001" targetFramework="net45" />
<package id="UrlRewritingNet.UrlRewriter" version="2.0.7" targetFramework="net45" />
<package id="xmlrpcnet" version="2.5.0" targetFramework="net45" />
</packages>