Browse Source

Merge branch 'dev' of https://github.com/abpframework/abp into dev

pull/1600/head
mehmet-erim 7 years ago
parent
commit
0145e4a7d9
  1. 2
      build-all.ps1
  2. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs
  3. 16
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppProTemplate.cs
  4. 115
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplate.cs
  5. 124
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
  6. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/TemplateRandomSslPortStep.cs
  7. 10
      npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html
  8. 12
      npm/ng-packs/packages/identity/src/lib/components/users/users.component.html
  9. 2
      npm/ng-packs/packages/identity/src/lib/services/identity.service.ts
  10. 10
      npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html
  11. 21
      npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html
  12. 7
      npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts
  13. 6
      npm/ng-packs/packages/tenant-management/src/lib/services/tenant-management.service.ts
  14. 10
      npm/ng-packs/packages/theme-basic/src/lib/components/change-password/change-password.component.html
  15. 12
      npm/ng-packs/packages/theme-basic/src/lib/components/profile/profile.component.html

2
build-all.ps1

@ -19,7 +19,7 @@ $solutionPaths = (
"modules/audit-logging",
"modules/background-jobs",
"modules/client-simulation",
"templates/mvc-module",
"templates/module/aspnet-core",
"templates/app/aspnet-core",
"samples/MicroserviceDemo",
"abp_io/AbpIoLocalization"

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs

@ -19,6 +19,8 @@ namespace Volo.Abp.Cli.ProjectBuilding
{
case AppTemplate.TemplateName:
return new AppTemplate();
case AppProTemplate.TemplateName:
return new AppProTemplate();
case ModuleTemplate.TemplateName:
return new ModuleTemplate();
default:

16
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppProTemplate.cs

@ -0,0 +1,16 @@
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{
public class AppProTemplate : AppTemplateBase
{
/// <summary>
/// "app-pro".
/// </summary>
public const string TemplateName = "app-pro";
public AppProTemplate()
: base(TemplateName)
{
}
}
}

115
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplate.cs

@ -1,123 +1,16 @@
using System.Collections.Generic;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building.Steps;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{
public class AppTemplate : TemplateInfo
public class AppTemplate : AppTemplateBase
{
/// <summary>
/// "app".
/// </summary>
public const string TemplateName = "app";
public AppTemplate()
: base(TemplateName, DatabaseProvider.EntityFrameworkCore, UiFramework.Mvc)
{
DocumentUrl = "https://docs.abp.io/en/abp/latest/Startup-Templates/Application";
}
public override IEnumerable<ProjectBuildPipelineStep> GetCustomSteps(ProjectBuildContext context)
{
var steps = new List<ProjectBuildPipelineStep>();
SwitchDatabaseProvider(context, steps);
DeleteUnrelatedProjects(context, steps);
RandomizeSslPorts(context, steps);
CleanupFolderHierarchy(context, steps);
return steps;
}
private static void SwitchDatabaseProvider(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
public AppTemplate()
: base(TemplateName)
{
if (context.BuildArgs.DatabaseProvider == DatabaseProvider.MongoDb)
{
steps.Add(new AppTemplateSwitchEntityFrameworkCoreToMongoDbStep());
}
if (context.BuildArgs.DatabaseProvider != DatabaseProvider.EntityFrameworkCore)
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests"));
}
if (context.BuildArgs.DatabaseProvider != DatabaseProvider.MongoDb)
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.MongoDB"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.MongoDB.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests"));
}
}
private void DeleteUnrelatedProjects(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (context.BuildArgs.UiFramework == UiFramework.Mvc)
{
if (context.BuildArgs.ExtraProperties.ContainsKey("tiered"))
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests"));
steps.Add(new AppTemplateProjectRenameStep("MyCompanyName.MyProjectName.Web.Host", "MyCompanyName.MyProjectName.Web"));
}
else
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.IdentityServer"));
steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44303"));
}
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds"));
}
if (context.BuildArgs.UiFramework != UiFramework.Mvc)
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests"));
if (context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server"))
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds"));
steps.Add(new AngularEnvironmentFilePortChangeForSeparatedIdentityServersStep());
}
else
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.IdentityServer"));
steps.Add(new AppTemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305"));
}
}
if (context.BuildArgs.UiFramework != UiFramework.Angular)
{
steps.Add(new RemoveFolderStep("/angular"));
}
}
private static void RandomizeSslPorts(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
steps.Add(new TemplateRandomSslPortStep(
new List<string>
{
"https://localhost:44300",
"https://localhost:44301",
"https://localhost:44302",
"https://localhost:44303",
"https://localhost:44305"
}
)
);
}
private void CleanupFolderHierarchy(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (context.BuildArgs.UiFramework == UiFramework.Mvc)
{
steps.Add(new MoveFolderStep("/aspnet-core/", "/"));
}
}
}
}

124
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

@ -0,0 +1,124 @@
using System.Collections.Generic;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building.Steps;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{
public abstract class AppTemplateBase : TemplateInfo
{
protected AppTemplateBase(string templateName)
: base(templateName, DatabaseProvider.EntityFrameworkCore, UiFramework.Mvc)
{
DocumentUrl = "https://docs.abp.io/en/abp/latest/Startup-Templates/Application";
}
public static bool IsAppTemplate(string templateName)
{
return templateName == AppTemplate.TemplateName ||
templateName == AppProTemplate.TemplateName;
}
public override IEnumerable<ProjectBuildPipelineStep> GetCustomSteps(ProjectBuildContext context)
{
var steps = new List<ProjectBuildPipelineStep>();
SwitchDatabaseProvider(context, steps);
DeleteUnrelatedProjects(context, steps);
RandomizeSslPorts(context, steps);
CleanupFolderHierarchy(context, steps);
return steps;
}
private static void SwitchDatabaseProvider(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (context.BuildArgs.DatabaseProvider == DatabaseProvider.MongoDb)
{
steps.Add(new AppTemplateSwitchEntityFrameworkCoreToMongoDbStep());
}
if (context.BuildArgs.DatabaseProvider != DatabaseProvider.EntityFrameworkCore)
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests"));
}
if (context.BuildArgs.DatabaseProvider != DatabaseProvider.MongoDb)
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.MongoDB"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.MongoDB.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests"));
}
}
private void DeleteUnrelatedProjects(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (context.BuildArgs.UiFramework == UiFramework.Mvc)
{
if (context.BuildArgs.ExtraProperties.ContainsKey("tiered"))
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests"));
steps.Add(new AppTemplateProjectRenameStep("MyCompanyName.MyProjectName.Web.Host", "MyCompanyName.MyProjectName.Web"));
}
else
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.IdentityServer"));
steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44303"));
}
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds"));
}
if (context.BuildArgs.UiFramework != UiFramework.Mvc)
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests"));
if (context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server"))
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds"));
steps.Add(new AngularEnvironmentFilePortChangeForSeparatedIdentityServersStep());
}
else
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.IdentityServer"));
steps.Add(new AppTemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305"));
}
}
if (context.BuildArgs.UiFramework != UiFramework.Angular)
{
steps.Add(new RemoveFolderStep("/angular"));
}
}
private static void RandomizeSslPorts(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
steps.Add(new TemplateRandomSslPortStep(
new List<string>
{
"https://localhost:44300",
"https://localhost:44301",
"https://localhost:44302",
"https://localhost:44303",
"https://localhost:44305"
}
)
);
}
private void CleanupFolderHierarchy(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (context.BuildArgs.UiFramework == UiFramework.Mvc)
{
steps.Add(new MoveFolderStep("/aspnet-core/", "/"));
}
}
}
}

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/TemplateRandomSslPortStep.cs

@ -44,7 +44,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates
)
.ToList();
if (context.Template.Name == AppTemplate.TemplateName)
if (AppTemplateBase.IsAppTemplate(context.Template.Name))
{
// no tiered
if (launchSettings.Count == 1 &&

10
npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html

@ -100,9 +100,13 @@
<button type="button" class="btn btn-secondary" #abpClose>
{{ 'AbpIdentity::Cancel' | abpLocalization }}
</button>
<button type="button" class="btn btn-primary" (click)="save()">
<i class="fa fa-check mr-1"></i> <span>{{ 'AbpIdentity::Save' | abpLocalization }}</span>
</button>
<abp-button
[requestType]="['POST', 'PUT']"
requestURLContainSearchValue="roles"
iconClass="fa fa-check"
(click)="save()"
>{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button
>
</ng-template>
</abp-modal>

12
npm/ng-packs/packages/identity/src/lib/components/users/users.component.html

@ -84,7 +84,7 @@
<ng-template #abpBody>
<perfect-scrollbar class="ps-show-always" style="max-height: 70vh;">
<form [formGroup]="form">
<form [formGroup]="form" validateOnSubmit>
<ngb-tabset>
<ngb-tab [title]="'AbpIdentity::UserInformations' | abpLocalization">
<ng-template ngbTabContent>
@ -183,9 +183,13 @@
<button type="button" class="btn btn-secondary" #abpClose>
{{ 'AbpIdentity::Cancel' | abpLocalization }}
</button>
<button type="button" class="btn btn-primary" (click)="save()">
<i class="fa fa-check mr-1"></i> <span>{{ 'AbpIdentity::Save' | abpLocalization }}</span>
</button>
<abp-button
[requestType]="['POST', 'PUT']"
requestURLContainSearchValue="users"
iconClass="fa fa-check"
(click)="save()"
>{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button
>
</ng-template>
</abp-modal>

2
npm/ng-packs/packages/identity/src/lib/services/identity.service.ts

@ -108,7 +108,7 @@ export class IdentityService {
}
updateUser(body: Identity.UserItem): Observable<Identity.UserItem> {
const url = `/identity/users/${body.id}`;
const url = `/api/identity/users/${body.id}`;
delete body.id;
const request: Rest.Request<Identity.UserItem> = {

10
npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html

@ -82,9 +82,13 @@
<button type="button" class="btn btn-secondary" #abpClose>
{{ 'AbpIdentity::Cancel' | abpLocalization }}
</button>
<button type="submit" class="btn btn-primary" (click)="onSubmit()">
<i class="fa fa-check mr-1"></i> <span>{{ 'AbpIdentity::Save' | abpLocalization }}</span>
</button>
<abp-button
[requestType]="['PUT']"
requestURLContainSearchValue="permissions"
iconClass="fa fa-check"
(click)="onSubmit()"
>{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button
>
</ng-template>
</ng-container>
</abp-modal>

21
npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html

@ -73,13 +73,6 @@
>
{{ 'AbpTenantManagement::ConnectionStrings' | abpLocalization }}
</button>
<button
[abpPermission]="'AbpTenantManagement.Tenants.ManageFeatures'"
ngbDropdownItem
(click)="onManageFeatures(data.id)"
>
{{ 'AbpTenantManagement::Features' | abpLocalization }}
</button>
<button
[abpPermission]="'AbpTenantManagement.Tenants.Delete'"
ngbDropdownItem
@ -110,9 +103,13 @@
<button #abpClose type="button" class="btn btn-secondary">
{{ 'AbpTenantManagement::Cancel' | abpLocalization }}
</button>
<button class="btn btn-primary" type="button" (click)="save()">
{{ 'AbpTenantManagement::Save' | abpLocalization }}
</button>
<abp-button
[requestType]="['POST', 'PUT', 'DELETE']"
requestURLContainSearchValue="change-password"
iconClass="fa fa-check"
(click)="save()"
>{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button
>
</ng-template>
</abp-modal>
@ -158,7 +155,3 @@
</div>
</form>
</ng-template>
<ng-template #featuresModalTemplate>
Manage Features
</ng-template>

7
npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts

@ -68,9 +68,6 @@ export class TenantsComponent implements OnInit {
@ViewChild('connectionStringModalTemplate', { static: false })
connectionStringModalTemplate: TemplateRef<any>;
@ViewChild('featuresModalTemplate', { static: false })
featuresModalTemplate: TemplateRef<any>;
constructor(
private confirmationService: ConfirmationService,
private tenantService: TenantManagementService,
@ -126,10 +123,6 @@ export class TenantsComponent implements OnInit {
});
}
onManageFeatures(id: string) {
this.openModal('AbpTenantManagement::Features', this.featuresModalTemplate, 'saveFeatures');
}
onAddTenant() {
this.selected = {} as ABP.BasicItem;
this.createTenantForm();

6
npm/ng-packs/packages/tenant-management/src/lib/services/tenant-management.service.ts

@ -61,7 +61,7 @@ export class TenantManagementService {
}
getDefaultConnectionString(id: string): Observable<string> {
const url = `/api/multi-tenancy/tenants/${id}/defaultConnectionString`;
const url = `/api/multi-tenancy/tenants/${id}/default-connection-string`;
const request: Rest.Request<TenantManagement.DefaultConnectionStringRequest> = {
method: 'GET',
@ -72,7 +72,7 @@ export class TenantManagementService {
}
updateDefaultConnectionString(payload: TenantManagement.DefaultConnectionStringRequest): Observable<any> {
const url = `/api/multi-tenancy/tenants/${payload.id}/defaultConnectionString`;
const url = `/api/multi-tenancy/tenants/${payload.id}/default-connection-string`;
const request: Rest.Request<TenantManagement.DefaultConnectionStringRequest> = {
method: 'PUT',
@ -83,7 +83,7 @@ export class TenantManagementService {
}
deleteDefaultConnectionString(id: string): Observable<string> {
const url = `/api/multi-tenancy/tenant/${id}/defaultConnectionString`;
const url = `/api/multi-tenancy/tenant/${id}/default-connection-string`;
const request: Rest.Request<TenantManagement.DefaultConnectionStringRequest> = {
method: 'DELETE',

10
npm/ng-packs/packages/theme-basic/src/lib/components/change-password/change-password.component.html

@ -27,8 +27,12 @@
<button type="button" class="btn btn-secondary" #abpClose>
{{ 'AbpIdentity::Cancel' | abpLocalization }}
</button>
<button type="button" class="btn btn-primary" (click)="onSubmit()">
<i class="fa fa-check mr-1"></i> <span>{{ 'AbpIdentity::Save' | abpLocalization }}</span>
</button>
<abp-button
[requestType]="['POST']"
requestURLContainSearchValue="change-password"
iconClass="fa fa-check"
(click)="onSubmit()"
>{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button
>
</ng-template>
</abp-modal>

12
npm/ng-packs/packages/theme-basic/src/lib/components/profile/profile.component.html

@ -6,7 +6,7 @@
<form *ngIf="form" [formGroup]="form" novalidate>
<div class="form-group">
<label for="username">{{ 'AbpIdentity::DisplayName:UserName' | abpLocalization }}</label
><span> * </span><input type="text" id="username" class="form-control" formControlName="userName" autofocus/>
><span> * </span><input type="text" id="username" class="form-control" formControlName="userName" autofocus />
</div>
<div class="row">
<div class="col col-md-6">
@ -36,8 +36,12 @@
<button #abpClose type="button" class="btn btn-secondary">
{{ 'AbpIdentity::Cancel' | abpLocalization }}
</button>
<button type="button" class="btn btn-primary" (click)="onSubmit()">
<i class="fa fa-check mr-1"></i> <span>{{ 'AbpIdentity::Save' | abpLocalization }}</span>
</button>
<abp-button
[requestType]="['PUT']"
requestURLContainSearchValue="my-profile"
iconClass="fa fa-check"
(click)="onSubmit()"
>{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button
>
</ng-template>
</abp-modal>

Loading…
Cancel
Save