1 | const fs = require('fs'),
|
2 | path = require('path');
|
3 |
|
4 | module.exports = {
|
5 | requirements(we, done) {
|
6 | done();
|
7 | },
|
8 | |
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | install(we, done) {
|
15 | done();
|
16 | },
|
17 |
|
18 | |
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | updates() {
|
25 | return [{
|
26 | version: '0.3.69',
|
27 | update(we, done) {
|
28 | const sql = 'ALTER TABLE `widgets` ADD '+
|
29 | ' COLUMN `inRecord` TINYINT(1) DEFAULT NULL;';
|
30 | we.db.defaultConnection
|
31 | .query(sql)
|
32 | .then( ()=> {
|
33 | done();
|
34 | return null;
|
35 | })
|
36 | .catch(done);
|
37 | }
|
38 | } , {
|
39 | version: '0.3.120',
|
40 | update(we, done) {
|
41 |
|
42 | we.utils.async.series([
|
43 | function changeWidgetTableThemeField(done) {
|
44 | const sql = 'ALTER TABLE `widgets` '+
|
45 | 'CHANGE COLUMN `theme` `theme` VARCHAR(255) NULL ;';
|
46 | we.db.defaultConnection
|
47 | .query(sql)
|
48 | .then( ()=> {
|
49 | done();
|
50 | return null;
|
51 | })
|
52 | .catch(done);
|
53 | },
|
54 | function addRoleIsSystemField(done) {
|
55 | const sql = 'ALTER TABLE `roles` ' +
|
56 | 'ADD COLUMN `isSystemRole` TINYINT(1) NULL DEFAULT 0 AFTER `updatedAt`;';
|
57 | we.db.defaultConnection
|
58 | .query(sql)
|
59 | .then( ()=> {
|
60 | done();
|
61 | return null;
|
62 | })
|
63 | .catch( (err)=> {
|
64 | if (err != 'SequelizeDatabaseError') {
|
65 | return done(err);
|
66 | } else {
|
67 | we.log.error(err);
|
68 | }
|
69 |
|
70 | done();
|
71 | return null;
|
72 | });
|
73 | }
|
74 | ], done);
|
75 | }
|
76 | },
|
77 | {
|
78 | version: '1.0.2',
|
79 | update(we, done) {
|
80 | we.utils.async.series([
|
81 | function addWidgetTablURLField(done) {
|
82 | var sql = 'ALTER TABLE `widgets` '+
|
83 | ' ADD COLUMN `path` TEXT NULL; ';
|
84 | we.db.defaultConnection
|
85 | .query(sql)
|
86 | .then( ()=> {
|
87 | done();
|
88 | return null;
|
89 | })
|
90 | .catch( (err)=> {
|
91 | if (err != 'SequelizeDatabaseError') {
|
92 | return done(err);
|
93 | } else {
|
94 | we.log.error(err);
|
95 | }
|
96 | done();
|
97 | return null;
|
98 | });
|
99 | }
|
100 | ], done);
|
101 | }
|
102 | },
|
103 | {
|
104 | version: '1.1.4',
|
105 | update(we, done) {
|
106 | we.utils.async.series([
|
107 | function updateUserTable(done) {
|
108 | var sql = 'ALTER TABLE `users` '+
|
109 | ' ADD COLUMN `roles` TEXT NULL; ';
|
110 | we.db.defaultConnection
|
111 | .query(sql)
|
112 | .then( ()=> {
|
113 | done();
|
114 | })
|
115 | .catch( (err)=> {
|
116 | if (err) {
|
117 | we.log.error(err);
|
118 | }
|
119 |
|
120 | done();
|
121 | return null;
|
122 | });
|
123 | },
|
124 |
|
125 | function migrateRolesField(done) {
|
126 | var sql = ' SELECT users_roles.userId, roles.name FROM users_roles '+
|
127 | ' LEFT JOIN roles ON roles.id=users_roles.roleId;';
|
128 | we.db.defaultConnection
|
129 | .query(sql)
|
130 | .spread( (results)=> {
|
131 | var users = {};
|
132 |
|
133 | we.utils.async.eachSeries(results, function onEachResult(r, next){
|
134 | if (!users[r.userId]) {
|
135 | users[r.userId] = {
|
136 | id: r.userId,
|
137 | roles: []
|
138 | };
|
139 | }
|
140 |
|
141 | users[r.userId].roles.push(r.name);
|
142 | next();
|
143 | }, function afterEachResult(){
|
144 | we.utils.async.eachSeries(users, function onUpdateEachUser(user, next){
|
145 |
|
146 | we.db.models.user
|
147 | .update(user, {
|
148 | where: {
|
149 | id: user.id
|
150 | }
|
151 | })
|
152 | .then(function afterUpdateAllUsers(r) {
|
153 | we.log.info('install.js:Update user data:', r);
|
154 | next();
|
155 | return null;
|
156 | })
|
157 | .catch(next);
|
158 | }, ()=> {
|
159 | done();
|
160 | });
|
161 | });
|
162 |
|
163 | })
|
164 | .catch( (err)=> {
|
165 | if (err) {
|
166 | we.log.warn(err);
|
167 | }
|
168 | done();
|
169 | return null;
|
170 | });
|
171 | },
|
172 | function exportRoles(done) {
|
173 | fs.lstat(we.projectPath+'/config/roles.js', function afterCheckRolesFile(err) {
|
174 | if (err) {
|
175 |
|
176 | if (err.code == 'ENOENT') {
|
177 | const sql = 'SELECT name, permissions FROM roles;';
|
178 | we.db.defaultConnection.query(sql)
|
179 | .spread( (results)=> {
|
180 |
|
181 | for (let i = 0; i < results.length; i++) {
|
182 | if (results[i].permissions) {
|
183 |
|
184 | if (!we.acl.roles[results[i].name]) {
|
185 |
|
186 | we.acl.roles[results[i].name] = {
|
187 | name: results[i].name,
|
188 | permissions: []
|
189 | };
|
190 | }
|
191 |
|
192 | let permissions = results[i].permissions.split(';');
|
193 | we.acl.roles[results[i].name].permissions = permissions;
|
194 | }
|
195 | }
|
196 |
|
197 | we.acl.writeRolesToConfigFile(done);
|
198 | }).catch( (err)=> {
|
199 | if (err) {
|
200 | we.log.error(err);
|
201 | }
|
202 | done();
|
203 | });
|
204 | } else {
|
205 | we.log.error('we-core:update:1.1.3: unknow error on find roles.js file');
|
206 | done(err);
|
207 | }
|
208 | } else {
|
209 | we.log.info('we-core:update:1.1.3: found foles.js file in your project, skiping exportRoles');
|
210 | done();
|
211 | }
|
212 | });
|
213 |
|
214 | }
|
215 | ], done);
|
216 | }
|
217 | },
|
218 | {
|
219 | version: '1.2.6',
|
220 | update(we, done) {
|
221 | we.log.info(
|
222 | 'instaling we-plugin-editor-summernote in this project, editor feature now are in diferent npm modules'
|
223 | );
|
224 |
|
225 | let exec = require('child_process').exec, child;
|
226 | child = exec('npm install --save we-plugin-editor-summernote',
|
227 | function afterInstall(error) {
|
228 | we.log.info('DONE we-plugin-editor-summernote install');
|
229 | done(error);
|
230 | });
|
231 | }
|
232 | },
|
233 | {
|
234 | version: '1.8.0',
|
235 | update(we, done) {
|
236 | we.log.info(
|
237 | 'registering all installed plugins to work with new we.js plugin manager'
|
238 | );
|
239 |
|
240 | const pkg = require( path.resolve(we.projectPath, 'package.json') ),
|
241 | nodeModulesPath = path.resolve(we.projectPath, 'node_modules');
|
242 |
|
243 | if (!pkg.wejs) pkg.wejs = {};
|
244 | if (!pkg.wejs.plugins) pkg.wejs.plugins = {};
|
245 |
|
246 | for (let n in pkg.dependencies) {
|
247 | if (n != 'we-core' &&
|
248 | oldIsPlugin( path.resolve(nodeModulesPath, n))
|
249 | ) {
|
250 | pkg.wejs.plugins[n] = true;
|
251 | }
|
252 | }
|
253 |
|
254 | fs.writeFile(
|
255 | path.resolve(we.projectPath, 'package.json'),
|
256 | JSON.stringify(pkg, null, 2),
|
257 | { flags: 'w' },
|
258 | function (err) {
|
259 | if (err) return done(err);
|
260 |
|
261 | let We = require('./src/index.js'),
|
262 | weUp = new We({
|
263 | bootstrapMode: 'install'
|
264 | });
|
265 |
|
266 | weUp.bootstrap( (err)=> {
|
267 | if (err) return done(err);
|
268 | done();
|
269 | return null;
|
270 | });
|
271 | }
|
272 | );
|
273 |
|
274 |
|
275 | function oldIsPlugin (nodeModulePath) {
|
276 |
|
277 | try {
|
278 | if (fs.statSync( path.resolve( nodeModulePath, 'plugin.js' ) )) {
|
279 | return true;
|
280 | } else {
|
281 | return false;
|
282 | }
|
283 | } catch (e) {
|
284 | return false;
|
285 | }
|
286 | }
|
287 | }
|
288 | }
|
289 | ];
|
290 | }
|
291 | }; |
\ | No newline at end of file |