1 var Exporter = {} 2 3 Exporter.run = function() { 4 var exportXml = function(object, fname) { 5 var result = new HopObject; 6 for (var key in object) { 7 result.version = Root.VERSION; 8 result.origin = object.href(); 9 result.origin_id = object._id; 10 var value = object[key]; 11 if (!value || (value._id && value.constructor !== User)) { 12 continue; 13 } 14 if (value.constructor === User) { 15 result[key] = value.name; 16 } else { 17 result[key] = value; 18 } 19 } 20 Xml.write(result, new java.io.File(dir, fname || object._id + ".xml")); 21 return; 22 } 23 24 var item; 25 while (item = app.data.exports.shift()) { 26 var site = Site.getById(item.site); 27 delete app.data.exports[site.name]; 28 29 var baseDir = site.getStaticFile(); 30 var dir = exportDir = new helma.File(baseDir, "export.temp"); 31 32 var log = new helma.File(exportDir, "error.log"); 33 log.open(); 34 35 exportDir.makeDirectory(); 36 exportXml(site, "site.xml"); 37 38 var zip = new helma.Zip(); 39 40 dir = new java.io.File(exportDir, "stories"); 41 dir.mkdirs(); 42 site.stories.forEach(function() { 43 exportXml(this); 44 }); 45 46 dir = new java.io.File(exportDir, "files"); 47 dir.mkdirs(); 48 site.files.forEach(function() { 49 exportXml(this); 50 try { 51 zip.add(this.getFile(), "files"); 52 } catch (ex) { 53 log.writeln(ex); 54 } 55 }); 56 57 dir = new java.io.File(exportDir, "images"); 58 dir.mkdirs(); 59 site.images.forEach(function() { 60 exportXml(this); 61 try { 62 zip.add(this.getFile(), "images"); 63 zip.add(this.getThumbnailFile(), "images"); 64 } catch (ex) { 65 log.writeln(ex); 66 } 67 }); 68 69 log.close(); 70 71 zip.add(exportDir); 72 zip.save(new java.io.File(baseDir, site.name + "-export.zip")); 73 exportDir.removeDirectory(); 74 return; 75 } 76 77 return; 78 } 79 80 Exporter.add = function(site) { 81 if (!app.data.exports[site.name]) { 82 app.data.exports.push({ 83 site: site._id, 84 status: "queued" 85 }); 86 return app.data.exports[site.name] = true; 87 } 88 return false; 89 } 90