// Script for changing prepaid start/end dates and propagating them to users. /* * Usage * --------------- * In mongo shell * * > db.loadServerScripts(); * > var prepaids = getPrepaidsFor('some@email.com'); // prints basic stats for prepaids found * > prepaids.models // Raw prepaid data * > prepaids.setStart(2001,1,1) // Set start date * > prepaids.setEnd(2100,1,1) // Set end date */ function getPrepaidsFor(email) { var user = db.users.findOne({emailLower: email.toLowerCase()}); if (!user) { print('User not found'); return; } var result = {}; result.models = db.prepaids.find({creator: user._id}).toArray(); result.setStart = function(year, month, day) { var startDate = new Date(Date.UTC(year, month-1, day)).toISOString(); print('setting to', startDate); for (var i in this.models) { var prepaid = this.models[i]; print('Prepaid update', db.prepaids.update({_id: prepaid._id}, {$set: {startDate: startDate}})); print('User update', db.users.update({'coursePrepaid._id': prepaid._id}, {$set: {'coursePrepaid.startDate': startDate}}, {multi: true})); } }; result.setEnd = function(year, month, day) { var endDate = new Date(Date.UTC(year, month-1, day)).toISOString(); print('setting to', endDate); for (var i in this.models) { var prepaid = this.models[i]; print('Prepaid update', db.prepaids.update({_id: prepaid._id}, {$set: {endDate: endDate}})); print('User update', db.users.update({'coursePrepaid._id': prepaid._id}, {$set: {'coursePrepaid.endDate': endDate}}, {multi: true})); } }; for (var i in result.models) { var prepaid = result.models[i]; print('Prepaid:', prepaid.startDate, 'to', prepaid.endDate, 'with', prepaid.redeemers.length, '/', prepaid.maxRedeemers, 'uses'); } return result; } db.system.js.save( { _id: 'getPrepaidsFor', value: getPrepaidsFor } );