@social-mail/social-mail-web-server 1.7.147 → 1.7.149
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/model/entities/User.d.ts +1 -0
- package/dist/server/model/entities/User.d.ts.map +1 -1
- package/dist/server/model/entities/User.js +4 -0
- package/dist/server/model/entities/User.js.map +1 -1
- package/dist/server/model/entities/WebSite.d.ts +1 -0
- package/dist/server/model/entities/WebSite.d.ts.map +1 -1
- package/dist/server/model/entities/WebSite.js +4 -0
- package/dist/server/model/entities/WebSite.js.map +1 -1
- package/dist/server/model/events/UserEvents.d.ts.map +1 -1
- package/dist/server/model/events/UserEvents.js +2 -1
- package/dist/server/model/events/UserEvents.js.map +1 -1
- package/dist/server/seed/ui/seed-ui.js +1 -1
- package/dist/server/workflows/site/CopyTemplateWorkflow.d.ts +6 -1
- package/dist/server/workflows/site/CopyTemplateWorkflow.d.ts.map +1 -1
- package/dist/server/workflows/site/CopyTemplateWorkflow.js +50 -2
- package/dist/server/workflows/site/CopyTemplateWorkflow.js.map +1 -1
- package/dist/server/workflows/site/CreateSocialSiteWorkflow.d.ts +1 -0
- package/dist/server/workflows/site/CreateSocialSiteWorkflow.d.ts.map +1 -1
- package/dist/server/workflows/site/CreateSocialSiteWorkflow.js +4 -1
- package/dist/server/workflows/site/CreateSocialSiteWorkflow.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/server/model/entities/User.ts +3 -0
- package/src/server/model/entities/WebSite.ts +3 -0
- package/src/server/model/events/UserEvents.ts +2 -1
- package/src/server/seed/ui/seed-ui.ts +1 -1
- package/src/server/workflows/site/CopyTemplateWorkflow.ts +55 -2
- package/src/server/workflows/site/CreateSocialSiteWorkflow.ts +5 -2
package/package.json
CHANGED
|
@@ -96,6 +96,9 @@ export class User {
|
|
|
96
96
|
@IgnoreJsonProperty
|
|
97
97
|
public uniquePhoneNumber: string;
|
|
98
98
|
|
|
99
|
+
@Column({ dataType: "Char", length: 200, nullable: true })
|
|
100
|
+
public contactEmail: string;
|
|
101
|
+
|
|
99
102
|
@Column({ dataType: "BigInt", default: () => 0 })
|
|
100
103
|
public maxStorage: number;
|
|
101
104
|
|
|
@@ -49,6 +49,9 @@ export default class WebSite {
|
|
|
49
49
|
@Column({ dataType: "Boolean", default:() => false })
|
|
50
50
|
public isTemplate: boolean;
|
|
51
51
|
|
|
52
|
+
@Column({ dataType: "Char", length: 200, nullable: true })
|
|
53
|
+
public title: string;
|
|
54
|
+
|
|
52
55
|
@Column({ dataType: "Boolean", default:() => false})
|
|
53
56
|
@ReadOnlyJsonProperty
|
|
54
57
|
public storeEnabled: boolean;
|
|
@@ -131,7 +131,8 @@ export default class UserEvents extends AuthenticatedEvents<User> {
|
|
|
131
131
|
await context.queue(CreateSocialSiteWorkflow, {
|
|
132
132
|
userID,
|
|
133
133
|
domainName: entity.domainName,
|
|
134
|
-
templateID: entity.createWebSiteTemplateID
|
|
134
|
+
templateID: entity.createWebSiteTemplateID,
|
|
135
|
+
name: entity.displayName
|
|
135
136
|
});
|
|
136
137
|
}
|
|
137
138
|
}
|
|
@@ -2,16 +2,27 @@ import Inject from "@entity-access/entity-access/dist/di/di.js";
|
|
|
2
2
|
import Workflow, { UniqueActivity } from "@entity-access/entity-access/dist/workflows/Workflow.js";
|
|
3
3
|
import SocialMailContext from "../../model/SocialMailContext.js";
|
|
4
4
|
import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
|
|
5
|
+
import AppFile from "../../model/entities/AppFile.js";
|
|
6
|
+
import TempFileService from "../../storage/TempFileService.js";
|
|
7
|
+
import { JSDOM } from 'jsdom';
|
|
8
|
+
import BaseStorage from "../../storage/BaseStorage.js";
|
|
9
|
+
import SnapshotService from "../../services/files/SnapshotService.js";
|
|
10
|
+
|
|
5
11
|
|
|
6
12
|
export default class CopyTemplateWorkflow extends Workflow<{ folderID, templateID }> {
|
|
7
13
|
|
|
14
|
+
set = new Set<AppFile>();
|
|
15
|
+
|
|
8
16
|
async run() {
|
|
9
17
|
return this.copy();
|
|
10
18
|
}
|
|
11
19
|
|
|
12
20
|
@UniqueActivity
|
|
13
21
|
async copy(
|
|
14
|
-
@Inject db?: SocialMailContext
|
|
22
|
+
@Inject db?: SocialMailContext,
|
|
23
|
+
@Inject tfs?: TempFileService,
|
|
24
|
+
@Inject storage?: BaseStorage,
|
|
25
|
+
@Inject ss?: SnapshotService
|
|
15
26
|
) {
|
|
16
27
|
// delete all files from current folder ..
|
|
17
28
|
|
|
@@ -19,6 +30,8 @@ export default class CopyTemplateWorkflow extends Workflow<{ folderID, templateI
|
|
|
19
30
|
|
|
20
31
|
const currentPath = `${folderID}/%`;
|
|
21
32
|
|
|
33
|
+
const site = await db.websiteFolders.where(this.input, (p) => (x) => x.folderID === p.folderID).first();
|
|
34
|
+
|
|
22
35
|
await using tx = await db.connection.createTransaction();
|
|
23
36
|
|
|
24
37
|
await db.appFiles
|
|
@@ -27,8 +40,44 @@ export default class CopyTemplateWorkflow extends Workflow<{ folderID, templateI
|
|
|
27
40
|
|
|
28
41
|
await this.copyFolder(db, folderID, templateID);
|
|
29
42
|
|
|
30
|
-
|
|
31
43
|
await tx.commit();
|
|
44
|
+
|
|
45
|
+
const { title } = site;
|
|
46
|
+
|
|
47
|
+
// change template content...
|
|
48
|
+
for (const htmlFile of this.set) {
|
|
49
|
+
const file = await tfs.downloadAppFile(htmlFile);
|
|
50
|
+
|
|
51
|
+
const text = await file.readAsText();
|
|
52
|
+
if (!/data\-template\-/.test(text)) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
let modified = false;
|
|
57
|
+
|
|
58
|
+
// replace template-part...
|
|
59
|
+
const window = new JSDOM(text);
|
|
60
|
+
for(const e of window.window.document.documentElement.querySelectorAll("*")) {
|
|
61
|
+
for(const k of e.getAttributeNames()) {
|
|
62
|
+
switch(k) {
|
|
63
|
+
case "data-template-name":
|
|
64
|
+
e.setAttribute(k, title);
|
|
65
|
+
modified = true;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (modified) {
|
|
72
|
+
|
|
73
|
+
const savedFile = await tfs.createTempFile(".html", htmlFile.name, htmlFile.contentType);
|
|
74
|
+
|
|
75
|
+
await storage.saveFile(savedFile, htmlFile);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// publish a snapshot...
|
|
80
|
+
await ss.createSnapshot(folderID);
|
|
32
81
|
}
|
|
33
82
|
|
|
34
83
|
async copyFolder(db: SocialMailContext, destFolderID: any, srcFolderID: any) {
|
|
@@ -77,6 +126,10 @@ export default class CopyTemplateWorkflow extends Workflow<{ folderID, templateI
|
|
|
77
126
|
|
|
78
127
|
if (existing.isFolder) {
|
|
79
128
|
await this.copyFolder(db, existing.appFileID, element.appFileID);
|
|
129
|
+
} else {
|
|
130
|
+
if (/^text\/html$/i.test(existing.contentType)) {
|
|
131
|
+
this.set.add(existing);
|
|
132
|
+
}
|
|
80
133
|
}
|
|
81
134
|
|
|
82
135
|
}
|
|
@@ -7,7 +7,7 @@ import { WebSiteHost } from "../../model/entities/WebSiteHost.js";
|
|
|
7
7
|
import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
|
|
8
8
|
import EmailAddressService from "../../services/EmailAddressService.js";
|
|
9
9
|
|
|
10
|
-
export default class CreateSocialSiteWorkflow extends Workflow<{ userID: number, domainName: string, templateID?: any }> {
|
|
10
|
+
export default class CreateSocialSiteWorkflow extends Workflow<{ userID: number, domainName: string, templateID?: any, name?: string }> {
|
|
11
11
|
|
|
12
12
|
run() {
|
|
13
13
|
return this.createSite();
|
|
@@ -28,7 +28,7 @@ export default class CreateSocialSiteWorkflow extends Workflow<{ userID: number,
|
|
|
28
28
|
const now = DateTime.now;
|
|
29
29
|
const hosts = [] as WebSiteHost[];
|
|
30
30
|
|
|
31
|
-
const { userID, domainName, templateID } = this.input;
|
|
31
|
+
const { userID, domainName, templateID, name } = this.input;
|
|
32
32
|
|
|
33
33
|
// add a hosting domain..
|
|
34
34
|
|
|
@@ -99,6 +99,9 @@ export default class CreateSocialSiteWorkflow extends Workflow<{ userID: number,
|
|
|
99
99
|
isStatic: true,
|
|
100
100
|
hosts,
|
|
101
101
|
templateID,
|
|
102
|
+
fromEmail: user.contactEmail,
|
|
103
|
+
supportEmail: user.contactEmail,
|
|
104
|
+
title: name,
|
|
102
105
|
channelDomains
|
|
103
106
|
}),
|
|
104
107
|
});
|