UNPKG

8.46 kBJavaScriptView Raw
1const fs = require('fs'),
2 path = require('path');
3
4module.exports = {
5 requirements(we, done) {
6 done();
7 },
8 /**
9 * Install function run in we.js install.
10 *
11 * @param {Object} we we.js object
12 * @param {Function} done callback
13 */
14 install(we, done) {
15 done();
16 },
17
18 /**
19 * Return a list of updates
20 *
21 * @param {Object} we we.js object
22 * @return {Array} a list of update objects
23 */
24 updates() {
25 return [{
26 version: '0.3.69', // your plugin version
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 // done();
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 // add new role if not exists
186 we.acl.roles[results[i].name] = {
187 name: results[i].name,
188 permissions: []
189 };
190 }
191 // export old permissions to new permission structure
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 // old we.js is plugin function to check is one npm module is plugin
275 function oldIsPlugin (nodeModulePath) {
276 // then check if the npm module is one plugin
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