aboutsummaryrefslogtreecommitdiffstats
path: root/www/js/models/report.js
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2013-03-01 10:52:55 +0000
committerStruan Donald <struan@exo.org.uk>2013-03-01 10:52:55 +0000
commit18df1a462e57419854ac66111b931b6f17db7b9e (patch)
tree823ae65d756bb9ca166a502607d8e3d27f0f1edd /www/js/models/report.js
parentd9ac9c1ac9dd8c491a40ae403d80e8cc5d5c78ba (diff)
add report model and use it to store and fetch categories for details template
Diffstat (limited to 'www/js/models/report.js')
-rw-r--r--www/js/models/report.js157
1 files changed, 157 insertions, 0 deletions
diff --git a/www/js/models/report.js b/www/js/models/report.js
new file mode 100644
index 0000000..6fd48f9
--- /dev/null
+++ b/www/js/models/report.js
@@ -0,0 +1,157 @@
+;(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: ''
+ },
+
+ sync: function(method, model, options) {
+ switch (method) {
+ 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: modek.get('title'),
+ detail: model.get('details'),
+ category: model.get('category'),
+ lat: model.get('lat'),
+ lon: model.get('lon'),
+ pc: model.get('pc'),
+ used_map: 1
+ };
+
+ if ( FMS.currentUser ) {
+ params.name = FMS.currentUser.get('name');
+ params.email = FMS.currentUser.get('email');
+ params.phone = FMS.currentUser.get('phone');
+ } else {
+ params.name = $('#form_name').val();
+ params.email = $('#form_email').val();
+ params.phone = $('#form_phone').val();
+
+ FMS.currentUser = new FMS.User( {
+ name: params.name,
+ email: params.email,
+ phone: params.phone
+ });
+ }
+
+ if ( model.get('file') && model.get('file') !== '' ) {
+ var handlers = options;
+ var fileUploadSuccess = function(r) {
+ $('#ajaxOverlay').hide();
+ if ( r.response ) {
+ var data;
+ try {
+ data = JSON.parse( decodeURIComponent(r.response) );
+ }
+ catch(err) {
+ data = {};
+ }
+ handlers.success(data);
+ } else {
+ handlers.error(STRINGS.report_send_error);
+ }
+ };
+
+ var fileUploadFail = function() {
+ $('#ajaxOverlay').hide();
+ handlers.error(STRINGS.report_send_error);
+ };
+
+ fileURI = model.get('file');
+
+ var options = new FileUploadOptions();
+ options.fileKey="photo";
+ options.fileName=fileURI.substr(fileURI.lastIndexOf('/')+1);
+ options.mimeType="image/jpeg";
+ options.params = params;
+ options.chunkedMode = false;
+
+ $('#ajaxOverlay').show();
+ var ft = new FileTransfer();
+ ft.upload(fileURI, CONFIG.FMS_URL + "report/new/mobile", fileUploadSuccess, fileUploadFail, options);
+ } else {
+ $.ajax( {
+ url: CONFIG.FMS_URL + "report/new/mobile",
+ type: 'POST',
+ data: params,
+ dataType: 'json',
+ timeout: 30000,
+ success: function(data) {
+ if ( data.success ) {
+ options.success( data );
+ } else {
+ options.error( data );
+ }
+ },
+ error: function (data, status, errorThrown ) {
+ console.log(STRINGS.report_send_error);
+ options.error( data );
+ }
+ } );
+ }
+ },
+
+ 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, _, $);