we-plugin-migrate-cdp
Version:
We.js plugin we-plugin-migrate-cdp
228 lines (190 loc) • 8.99 kB
JavaScript
/**
* How to use
* 1.: enter in project folder
* 2.: run in terminal:
* node node_modules/we-plugin-migrate-cdp/bin/7-experiencia-fix-data-creator-sql.js
*/
var cwd = process.cwd();
var moment = require('moment');
var crypto = require('crypto');
var loadSails = require(cwd + '/bin/loadSails.js');
var fs = require('fs');
var async = require('async');
var _ = require('lodash');
var getRelatoTema = require('./utils/getRelatoTema.js');
var downloadImageWithFID = require('./utils/downloadImageWithFID.js');
var getAltorEAtor = require('./utils/getAltorEAtor.js');
var temas = {};
function updateRelatoExperienciaRecord(record, done) {
var creator;
var relato_migrate;
var autores = [];
var atores = [];
async.parallel([
function getDbUser(cb) {
DrupalMigrate.findOne({
uid_usuario_drupal: record.uid,
modelName: 'user'
}).exec(function(err, u) {
if(err) return cb(err);
creator = u;
cb();
})
},
function getDbRelato(cb) {
DrupalMigrate.findOne({
uid_conteudo_drupal: record.nid,
modelName: 'relato'
}).exec(function(err, r) {
if(err) return cb(err);
relato_migrate = r;
cb();
})
},
function getPeople(cb) {
getAltorEAtor(record.nid , function (err, au, at){
if(err) return cb(err);
autores = au;
atores = at;
cb();
})
}
], function(err) {
if(err) return doneAll(err);
if(!creator || !relato_migrate) {
sails.log.warn('Creator or relato not found: ', record.uid, record.nid, creator, relato_migrate);
return done();
}
Relato.findOneById(relato_migrate.modelId)
.populate('images')
.exec(function (err, relato) {
if(err) return done(err);
if(!relato) {
return done('Relato not found: ' + relato_migrate.modelId);
}
var fid = record.field_escolher_fotografia_imagem;
if (relato.imagemDestaque) {
fid = null; // set to null for skip image download if already has this image
}
downloadImageWithFID(fid, creator.modelId, function(err, image) {
if (err) {
sails.log.error('Error on download image for relato_de_curadoria');
return done();
}
if (image && image.id) {
relato.imagemDestaque = image.id;
}
var nid = record.nid;
if ( relato.images && relato.images.length) {
nid = null; // skip if already has images
}
getGaleriaImages(nid, creator.modelId, function(err, images) {
if(err) sails.log.error('Error on get geleria images', record);
if (images) {
images.forEach(function(i){
relato.images.add(i);
});
}
if (record.title_field_value) relato.titulo = record.title_field_value;
if ( record.field_experiencia_catespecificas ) {
relato.categorias = [getRelatoTema(record, temas)];
}
relato.atoresExt = atores;
relato.autoresExt = autores;
relato.descricao = formatBody(record);
relato.creator = creator.modelId;
relato.updatedAt = moment.unix(record.changed).toDate();
relato.createdAt = moment.unix(record.created).toDate();
relato.save(function(err){
if( err ) sails.log.error('Error on save relato_de_curadoria', err);
done();
})
})
})
});
})
};
function getGaleriaImages(nid, nodeCreatorId, cb) {
if(!nid) return cb();
var sql = "SELECT field.`entity_id` AS nid, field.`field_imagem_curadoria_fid` AS fid, file.`uri` AS uri FROM `field_data_field_imagem_curadoria` AS field LEFT JOIN `file_managed` AS file ON file.fid = field.`field_imagem_curadoria_fid` WHERE field.`entity_id`=" + nid + " AND field.`bundle`='relato_de_curadoria'";
Drupal.query(sql, function(err, recordFiles) {
if (err) return cb(err);
if (_.isEmpty(recordFiles)) return cb();
var images = [];
async.each(recordFiles, function(drupalFile, next) {
downloadImageWithFID(drupalFile.fid, nodeCreatorId, function(err, image) {
if (err) {
sails.log.error('Error on download image for relato_de_curadoria');
return next();
}
images.push(image);
next();
});
}, function(err) {
if(err) {
sails.log.error('Error on get galeria files', err);
return cb(err);
}
cb(null, images);
});
})
}
function formatBody(record) {
var body = '';
if (record.field_resumo_do_relato) {
body += record.field_resumo_do_relato;
}
if (record.field_2_conte_a_sua_hist_ria_500) {
body += formatBodyTitle('Conte a sua história');
body += record.field_2_conte_a_sua_hist_ria_500 ;
}
if (record.field_como_funcionou_a_experi_nc) {
body += formatBodyTitle('Tem alguma música, cordel, objeto ou poesia que você poderia compartilhar e que seja importante nessa sua experiência?');
body += record.field_como_funcionou_a_experi_nc;
}
if (record.field_4_tem_alguma_musica_objeto) {
body += formatBodyTitle('Efeitos da Curadoria: O que você aprendeu com essa experiência?');
body += record.field_4_tem_alguma_musica_objeto;
}
if (record.field_5_o_que_voc_acha_que_apren) {
body += formatBodyTitle('Das Fragilidades às Potencialidades do Processo de Curadoria');
body += record.field_5_o_que_voc_acha_que_apren;
}
if (record.field_6_outras_observa_es_campo_) {
body += formatBodyTitle('Outras Observações/Campo Livre');
body += record.field_6_outras_observa_es_campo_;
}
return body;
}
function formatBodyTitle(text) {
return '<h3>' + text + '</h3>';
}
function init() {
return loadSails(function afterLoadSails(err, sails) {
sails.log.warn('Plugin migrate CdP...');
sails.log.debug('Path cwd: ',cwd);
// preload terms
Term.find().exec(function(err, terms) {
if(err) return doneAll(err);
if( _.isEmpty(terms) ) return doneAll('Nenhum tema encontrado');
terms.forEach(function(t){
temas[t.text] = t;
});
var sql = "SELECT n.`nid`, n.`type`, n.`uid`, n.`status`, n.`created`, n.`changed`, n.`tnid`, title_field.`title_field_value` AS title, field_resumo_do_relato.`field_resumo_do_relato_value` AS field_resumo_do_relato, field_2_conte_a_sua_hist_ria_500.`field_2_conte_a_sua_hist_ria_500_value` AS field_2_conte_a_sua_hist_ria_500, field_como_funcionou_a_experi_nc.`field_como_funcionou_a_experi_nc_value` AS field_como_funcionou_a_experi_nc, field_4_tem_alguma_musica_objeto.`field_4_tem_alguma_musica_objeto_value` AS field_4_tem_alguma_musica_objeto, field_5_o_que_voc_acha_que_apren.`field_5_o_que_voc_acha_que_apren_value` AS field_5_o_que_voc_acha_que_apren, field_6_outras_observa_es_campo_.`field_6_outras_observa_es_campo__value` AS field_6_outras_observa_es_campo_, field_premiado_na_v_mostra.`field_premiado_na_v_mostra_value` AS field_premiado_na_v_mostra, field_experiencia_catespecificas.`field_experiencia_catespecificas_tid` AS field_experiencia_catespecificas, field_escolher_fotografia_imagem.`field_escolher_fotografia_imagem_fid` AS field_escolher_fotografia_imagem FROM `node` AS n LEFT JOIN `field_data_field_escolher_fotografia_imagem` AS field_escolher_fotografia_imagem ON field_escolher_fotografia_imagem.entity_id=n.nid LEFT JOIN `field_data_field_experiencia_catespecificas` AS field_experiencia_catespecificas ON field_experiencia_catespecificas.entity_id=n.nid LEFT JOIN `field_data_title_field` AS title_field ON title_field.entity_id=n.nid LEFT JOIN `field_data_field_resumo_do_relato` AS field_resumo_do_relato ON field_resumo_do_relato.entity_id=n.nid LEFT JOIN `field_data_field_2_conte_a_sua_hist_ria_500` AS field_2_conte_a_sua_hist_ria_500 ON field_2_conte_a_sua_hist_ria_500.entity_id=n.nid LEFT JOIN `field_data_field_como_funcionou_a_experi_nc` AS field_como_funcionou_a_experi_nc ON field_como_funcionou_a_experi_nc.entity_id=n.nid LEFT JOIN `field_data_field_4_tem_alguma_musica_objeto` AS field_4_tem_alguma_musica_objeto ON field_4_tem_alguma_musica_objeto.entity_id=n.nid LEFT JOIN `field_data_field_5_o_que_voc_acha_que_apren` AS field_5_o_que_voc_acha_que_apren ON field_5_o_que_voc_acha_que_apren.entity_id=n.nid LEFT JOIN `field_data_field_6_outras_observa_es_campo_` AS field_6_outras_observa_es_campo_ ON field_6_outras_observa_es_campo_.entity_id=n.nid LEFT JOIN `field_data_field_premiado_na_v_mostra` AS field_premiado_na_v_mostra ON field_premiado_na_v_mostra.entity_id=n.nid WHERE `status`=1 AND `type`='relato_de_curadoria'";
Drupal.query(sql, function (err, records) {
if(err) return doneAll(err);
async.eachSeries(records, updateRelatoExperienciaRecord, doneAll);
})
}) // end preload terms
})
}
function doneAll(err) {
if ( err ) {
sails.log.error('Error migrate relato_de_curadoria in cdp', err);
}
sails.log.info('DONE ALL');
//sails.load();
// end / exit
process.exit();
}
init();