diff options
Diffstat (limited to 'src/js/models/report.js')
-rw-r--r-- | src/js/models/report.js | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/src/js/models/report.js b/src/js/models/report.js new file mode 100644 index 0000000..85d6e93 --- /dev/null +++ b/src/js/models/report.js @@ -0,0 +1,168 @@ +(function(FMS, Backbone, _, $) { + _.extend( FMS, { + Report: Backbone.Model.extend({ + urlRoot: CONFIG.FMS_URL + 'report/ajax', + + defaults: { + lat: 0, + lon: 0, + title: '', + details: '', + may_show_name: '', + category: '', + phone: '', + pc: '', + file: '' + }, + + sync: function(method, model, options) { + switch (method) { + case 'update': + case 'create': + this.post(model,options); + break; + case 'read': + Backbone.ajaxSync(method, model, options); + break; + default: + return true; + } + }, + + parse: function(res) { + if ( res.report && res.report.latitude ) { + return { + lat: res.report.latitude, + lon: res.report.longitude, + title: res.report.title, + details: res.report.detail, + photo: res.report.photo && res.report.photo.url ? CONFIG.FMS_URL + res.report.photo.url : null, + meta: res.report.meta, + confirmed_pp: res.report.confirmed_pp, + created_pp: res.report.created_pp, + category: res.report.category, + state: res.report.state, + state_t: res.report.state_t, + is_fixed: res.report.is_fixed, + used_map: res.report.used_map, + update_time: res.updates ? res.updates.update_pp : null, + update: res.updates ? res.updates.details : null + }; + } + return false; + }, + + post: function(model,options) { + + var params = { + service: device.platform, + title: model.get('title'), + detail: model.get('details'), + category: model.get('category'), + lat: model.get('lat'), + lon: model.get('lon'), + pc: model.get('pc'), + may_show_name: model.get('may_show_name'), + used_map: 1, + name: model.get('name') || model.get('user').get('name'), + email: model.get('email') || model.get('user').get('email'), + phone: model.get('phone'), + fms_extra_title: model.get('user').get('title') + }; + + var extra_fields = model.get('extra_details'); + if ( extra_fields && extra_fields.length > 0 ) { + for ( var i = 0; i < extra_fields.length; i++ ) { + params[extra_fields[i]] = model.get(extra_fields[i]); + } + } + + if ( model.get('submit_clicked') == 'submit_sign_in' ) { + params.submit_sign_in = 1; + params.password_sign_in = model.get('user').get('password'); + params.remember_me = 1; + } else { + params.password_register = model.get('user').get('password') || ''; + params.submit_register = 1; + } + + var that = this; + if ( model.get('file') && model.get('file') !== '' ) { + var fileUploadSuccess = function(r) { + $.mobile.loading('hide'); + if ( r.response ) { + var data; + try { + data = JSON.parse( decodeURIComponent(r.response) ); + } + catch(err) { + data = {}; + } + if ( data.success ) { + that.trigger('sync', that, data, options); + } else { + that.trigger('invalid', that, data, options); + } + } else { + that.trigger('error', that, FMS.strings.report_send_error, options); + } + }; + + var fileUploadFail = function() { + $.mobile.loading('hide'); + that.trigger('error', that, FMS.strings.report_send_error, options); + }; + + fileURI = model.get('file'); + + var fileOptions = new FileUploadOptions(); + fileOptions.fileKey="photo"; + fileOptions.fileName=fileURI.substr(fileURI.lastIndexOf('/')+1); + fileOptions.mimeType="image/jpeg"; + fileOptions.params = params; + fileOptions.chunkedMode = false; + + var ft = new FileTransfer(); + $.mobile.loading('show'); + ft.upload(fileURI, CONFIG.FMS_URL + "report/new/mobile", fileUploadSuccess, fileUploadFail, fileOptions); + } else { + $.ajax( { + url: CONFIG.FMS_URL + "report/new/mobile", + type: 'POST', + data: params, + dataType: 'json', + timeout: 30000, + success: function(data) { + if ( data.success ) { + that.trigger('sync', that, data, options); + } else { + that.trigger('invalid', that, data, options); + } + }, + error: function (data, status, errorThrown ) { + console.log(FMS.strings.report_send_error); + options.error( data, status, errorThrown ); + } + } ); + } + }, + + getLastUpdate: function(time) { + if ( time ) { + props.time = time; + } + + if ( !props.time ) { + return ''; + } + + var t; + if ( typeof props.time === 'String' ) { + t = new Date( parseInt(props.time, 10) ); + } else { + t = props.time; + } + } + }) + }); +})(FMS, Backbone, _, $); |