FeedbackUI.js 7.96 KB
/**
  * Project      :  AMDA-NG
  * Name         : FeedbackUI.js
  * @plugin 	  amdaUI.FeedbackUI
  * @extends 	  Ext.panel.Panel
  * @brief		 Feedback view
  * @author Benjamin
  * @version $Id: FeedbackUI.js 2031 2014-01-22 11:28:34Z elena $
  ********************************************************************************
  *    FT Id     :   Date   : Name - Description
  *******************************************************************************
  *  :          
  */

Ext.define('amdaUI.FeedbackUI', {
    extend: 'Ext.form.Panel',
    alias: 'widget.panelFeedback',
    
    constructor: function(config) {			
		this.init(config);
		this.callParent(arguments);
	},
    
    getInfoMsg : function()
    {
  	  return '<h2>Welcome,</h2>' +
             'You have problems/comments</br>'+
             'Please select an item[s] from a list below and describe the problem...</br></br>';
    },
  	
    getBrowserInfo : function()
    {
  	  return Ext.browser.name+' - '+Ext.browser.engineName+' - '+Ext.browser.engineVersion;
    },
    
    getUser : function()
    {
      return sessionID;
    },
    
    getInterfaceList : function()
    {
      return [
              ['General','General'],
              ['Plot_Data','Plot Data'],
              ['Data_mining','Data mining'],
              ['My_Parameters','Parameters'],
              ['My_Time_Tables','Time Tables'],
              ['Download_Data','Download Data'],
              ['Upload_Data','Upload Data'],
              ['Interoperability','Interoperability'],
              ['Add_External_Data','External Data']
            ];
    },
    
    onSendFinish : function(result, e){	
	    var t = e.getTransaction();
		if (e.status) 
		{	
		  if (result && result == 'none')
		  {
			// SUCCESS  
			var win = myDesktopApp.desktop.getWindow(myDesktopApp.dynamicModules.feedback.id);
			Ext.MessageBox.show({
		      title: 'Feedback sended',
		      msg: 'Thanks for your feedback',
		      buttons: Ext.MessageBox.OK,
		      icon: Ext.MessageBox.INFO,
		      fn: function (btn){
				win.close();
			  }
		    });
		  }
		  else
		  {
			  //ERROR
			  var msgErr = 'Unknown error';
			  switch (result)
			  {
			  	case 'err_user' :
			  		msgErr = 'User not defined';
			  		break;
			  	case 'err_file' :
			  		msgErr = 'Feedback file error';
			  		break;	
			  }
			  Ext.Msg.show({title:'Error', msg: msgErr, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
		  }
		}
		else
		{
		  // FAILURE
	      Ext.Msg.show({title:'Error System', msg: e.message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
		}   
    },
    
    onSendIssue : function(b,e){
	  //get links to components
      var fieldset = this.getComponent('feedback_fieldset');
      var fieldsubject = fieldset.getComponent('subject_checkboxgroup');
      var fielduser = fieldset.getComponent('user_displayfield');
      var fieldbrowser = fieldset.getComponent('browser_displayfield');
      var fieldattach = fieldset.getComponent('attach_filefield');
      var fieldinterface = fieldset.getComponent('interface_combo');
      var fielddes = fieldset.getComponent('desc_textarea');
      
      //test if some fields are valid
	  if (!fieldsubject.isValid() || !fielddes.isValid())
		  {
		  	Ext.Msg.show({title:'Error', msg: 'Some field are required', icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
		  	return;
		  }
	  
	  //generate subject message (a list of all checked boxes)
	  var subjectMsg = '';
	  fieldsubject.items.each(function (item){
		  if (!item.checked)
		    return;
		  if (subjectMsg != '')
		    subjectMsg += ' - ';
		  subjectMsg += item.boxLabel;
	  },this);
	  
	  //make the object to send
      var feed = {user : fielduser.getValue(), 
    		      interface : fieldinterface.getValue(), 
    		      subject : subjectMsg, 
    		      userText : fielddes.getValue(), 
    		      userAgent : fieldbrowser.getValue(),
    		      attach : fieldattach.getValue()};
      
      if (feed.attach != '')
      {
    	  this.submit({
    		  	scope : this,
    		    url: 'php/uploadFile.php',
			    waitMsg: 'Uploading your file...',
    		    success: function(form, o)
    		    {
    		  		feed.attach = o.result.file;
    		  		//call action
        	  		AmdaAction.sendFeedback(feed,this.onSendFinish,this);
    		    },
    		    failure: function(form, o) 
    		    {
    		    	Ext.Msg.show( {
		  				title : 'Feedback - Upload attachment',
		  				msg : 'Error '+o.result.error,
		  				modal : true,
		  				icon : Ext.Msg.ERROR,
		  				buttons : Ext.Msg.OK
		  			});
				}
    		});
      }
      else
    	  //call action
    	  AmdaAction.sendFeedback(feed,this.onSendFinish,this);
    },
    
    init : function(config)	
    {
      var myConf = {
        layout: 'fit',
        bodyStyle: { background: '#ddecfe'},
	    items : [
	    	{
	          xtype: 'fieldset',
	          itemId: 'feedback_fieldset',
	          layout: 'anchor',
	          anchor: '100%',
	          items : [
                {
                  xtype: 'displayfield',
                  itemId: 'info_displayfield',
                  name: 'information',
                  fieldLabel: '',
                  anchor: '100%',
                  value: this.getInfoMsg()
                },
                {
                  xtype: 'checkboxgroup',
                  itemId: 'subject_checkboxgroup',
                  fieldLabel: 'Subject',
                  anchor: '100%',
                  columns : 3,
                  vertical: true,
                  allowBlank: false,
                  items: [
                    {boxLabel: 'Bug', inputValue: 'bug', checked: true},
                    {boxLabel: 'Question', inputValue: 'question'},
                    {boxLabel: 'Data', inputValue: 'data'},
                    {boxLabel: 'Comment', inputValue: 'comment'},
                    {boxLabel: 'Other', inputValue: 'other'}
                  ]
                },
                {
                  xtype: 'displayfield',
                  itemId: 'user_displayfield',
                  fieldLabel: 'User',
                  anchor: '100%',
                  name: 'user',
                  value: this.getUser()
                },
                {
                  xtype: 'displayfield',
                  itemId: 'browser_displayfield',
                  fieldLabel: 'Browser',
                  anchor: '100%',
                  name: 'browser',
                  value: this.getBrowserInfo()
                },
                {
                  xtype: 'filefield',
                  itemId: 'attach_filefield',
                  anchor: '100%',
                  name: 'attachment',
                  fieldLabel: 'Attachment',
                  buttonText: 'Select File...',
                  emptyText : 'none'
                },
                {
                  xtype: 'combo',
                  itemId: 'interface_combo',
                  fieldLabel: 'Interface',
                  name: 'interface',
                  store: this.getInterfaceList(),
                  value: 'General',
                  forceSelection: true,
                  anchor: '100%',
                  autoSelect: true,
                  allowBlanck: false
                },
                {
                  xtype : 'textareafield',
                  itemId: 'desc_textarea',
                  anchor: '100%',
                  height : 200,
                  name: 'description',
                  fieldLabel: 'Description',
                  allowBlank: false
                },
                {  
				  xtype : 'hiddenfield',
				  name: 'MAX_FILE_SIZE',
				  value: '3000000' // 3MB				      
				}
              ]
	    	}],
	    	dockedItems: [{
	          xtype: 'toolbar', 
	          dock: 'bottom',
	          items: [
	             '->',
	            {
	              iconCls: 'icon-feedback',
	              text: 'Send',
	              scope: this,
	              tooltip: 'Send feeback',
	              handler: this.onSendIssue
	          }]
	          
	    	}
	      
	    ]
      }
      Ext.apply (this , Ext.apply (arguments, myConf));
    }
});