Skip to content

Commit

Permalink
Merging the api calls for user info into one api call
Browse files Browse the repository at this point in the history
  • Loading branch information
anuprulez committed Sep 20, 2016
1 parent 3b59059 commit dc80c89
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 97 deletions.
17 changes: 9 additions & 8 deletions client/galaxy/scripts/mvc/user/add-edit-address.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,31 +46,32 @@ define( [ 'mvc/form/form-view', 'mvc/ui/ui-misc' ], function( Form, Ui ) {
$el.append( self.addressform.$el );
},

/** save the address */
/** Save the address */
_saveAddress: function( self, app, options ) {
var url = "",
data = {};
// save the address after edit
url = Galaxy.root + 'api/user_preferences/manage_user_info/';
// Save the address after edit
if( options ) {
url = Galaxy.root + 'api/user_preferences/edit_address/';
data = self.addressform.data.create();
data.edit_address_button = true;
data.edit_address = true;
data.address_id = options.address_id;
data.call = 'edit_address';
}
else { // saves new address
url = Galaxy.root + 'api/user_preferences/new_address/';
else { // Save new address
data = self.addressform.data.create();
data.call = 'add_address';
}
$.getJSON( url, data, function( response ) {
// show error in the same form
// Show error in the same form
if( response.status === 'error' ) {
self.addressform.message.update({
message : response.message,
status : response.status === 'error' ? 'danger' : 'success',
});
}
else {
// if success, redirect to manage user information page
// If api call succeeds, redirect to manage user information page
self.addressform.$el.remove();
app.callManageInfo( { message: response.message, status: response.status } );
}
Expand Down
53 changes: 26 additions & 27 deletions client/galaxy/scripts/mvc/user/manage-user-information.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/** Edits user information */
/** Show and edit user information */
define( [ 'mvc/form/form-view',
'mvc/ui/ui-misc',
'mvc/user/add-edit-address' ],
Expand Down Expand Up @@ -35,10 +35,10 @@ function( Form, Ui, Address ) {
}
});
$el.append( this.loginform.$el );
// address display form
// Address display form
this.addressform = self._buildAddressForm( self, options, app, $el );
$el.append( self.addressform.$el );
// show message if an address is added or updated
// Show message if an address is added or updated
if( address_message ) {
self.addressform.message.update({
message : address_message.message,
Expand All @@ -47,7 +47,7 @@ function( Form, Ui, Address ) {
}
},

/** build form for user addresses */
/** Build form for user addresses */
_buildAddressForm: function( self, options, app, $el ) {
return new Form({
title : 'User Addresses',
Expand All @@ -70,13 +70,13 @@ function( Form, Ui, Address ) {
});
},

// find the right operation on address id
// Find the right operation on address id
_addressOperations: function( app, $el, self ) {
var changed_collection = self.addressform.data.create(),
operation_type = "",
id = "",
eachitem = null;
// find the first non-null item
// Find the first non-null item
for( var item in changed_collection ) {
eachitem = changed_collection[item];
if( eachitem !== null ) {
Expand All @@ -85,7 +85,7 @@ function( Form, Ui, Address ) {
break;
}
}
// apply right operation using the address id
// Apply the right operation using the address id
switch ( operation_type ) {
case 'edit':
self._editAddress( self, $el, app, address_id );
Expand All @@ -99,40 +99,40 @@ function( Form, Ui, Address ) {
}
},

/** apply address filter */
/** Apply address filter */
_applyAddressFilter: function( app, $el, self ) {
var field = null,
active_filter = "";
active_filter = self.addressform.data.create()["address_filters"];
// fetch the addresses based on the selected filter
// Fetch the addresses based on the selected filter
$.getJSON( Galaxy.root + 'api/user_preferences/manage_user_info/', { 'show_filter': active_filter }, function( response ) {
self._updateAddressForm( app, $el, self, response );
// get and set the active filter's value
// Get and set the active filter's value
field = self.addressform.field_list[ self.addressform.data.match( 'address_filters' ) ];
field.value( active_filter );
});
},

/** update address form with new data */
/** Update address form with new data */
_updateAddressForm: function( app, $el, self, response ) {
self.addressform.$el.remove();
self.addressform = self._buildAddressForm( self, response, app, $el );
$el.append( self.addressform.$el );
},

/** edit address */
/** Edit address */
_editAddress: function( self, $el, app, address_id ) {
self.loginform.$el.remove();
self.addressform.$el.remove();
$.getJSON( Galaxy.root + 'api/user_preferences/edit_address/', {'address_id': address_id }, function( response ) {
address = new Address.AddEditAddress( $el, app, response );
$.getJSON( Galaxy.root + 'api/user_preferences/manage_user_info/', {'address_id': address_id, 'call': 'edit_address' }, function( response ) {
address = new Address.AddEditAddress( $el, app, response );
});
},

/** delete address */
/** Delete address */
_deleteAddress: function( self, $el, app, address_id ) {
var active_filter = self.addressform.data.create()["address_filters"];
$.getJSON( Galaxy.root + 'api/user_preferences/delete_address/', { 'address_id': address_id }, function( response ) {
$.getJSON( Galaxy.root + 'api/user_preferences/manage_user_info/',{ 'address_id': address_id, 'call': 'delete_address'}, function( response ) {
self._updateAddressForm( app, $el, self, response );
self.addressform.message.update({
message : response.message,
Expand All @@ -141,9 +141,9 @@ function( Form, Ui, Address ) {
});
},

/** revert the delete status */
/** Revert the delete status */
_undeleteAddress: function( self, $el, app, address_id ) {
$.getJSON( Galaxy.root + 'api/user_preferences/undelete_address/', { 'address_id': address_id }, function( response ) {
$.getJSON( Galaxy.root + 'api/user_preferences/manage_user_info/', { 'address_id': address_id, 'call': 'undelete_address' }, function( response ) {
self._updateAddressForm( app, $el, self, response );
self.addressform.message.update({
message : response.message,
Expand All @@ -152,23 +152,23 @@ function( Form, Ui, Address ) {
});
},

/** add new address */
/** Add new address */
_addAddress: function( self, $el, app ) {
var address;
self.loginform.$el.remove();
self.addressform.$el.remove();
address = new Address.AddEditAddress( $el, app );
},

/** renders message */
/** Render message */
_renderMessage: function( form, message, status ) {
form.message.update({
message : message,
status : status
});
},

/** validates email and username */
/** Validate email and username */
_validateString: function( test_string, type ) {
var mail_re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
username_re = /^[a-z0-9\-]{3,255}$/;
Expand All @@ -180,9 +180,9 @@ function( Form, Ui, Address ) {
}
},

/** saves login information */
/** Save login information */
_saveEmailName: function( data, self ) {
var url = Galaxy.root + 'api/user_preferences/edit_info',
var url = Galaxy.root + 'api/user_preferences/manage_user_info',
data = {},
error_text_email= 'Please enter your valid email address.',
error_text_email_long= 'Email cannot be more than 255 characters in length.',
Expand All @@ -193,10 +193,9 @@ function( Form, Ui, Address ) {
name = formdata[ "username" ],
validForm = true,
nothing_changed = ( data["email"] === email && data["username"] === name );
// client side validations
// Client side validations
if ( data["email"] !== email ) {
if ( email.length > 255 ) {
//self.renderError( error_text_email_long );
self._renderMessage( self.loginform, error_text_email_long, 'danger' );
validForm = false;
}
Expand All @@ -215,9 +214,9 @@ function( Form, Ui, Address ) {
self._renderMessage( self.loginform, "Nothing has changed.", 'success' );
return;
}
// if values are changed and the form is valid
// If values are changed and the form is valid
if ( !nothing_changed && validForm ) {
data = { 'email': email, 'username': name, 'button_name': 'login_info_button' };
data = { 'email': email, 'username': name, 'save_type': 'login_info', 'call': 'edit_info' };
$.getJSON( url, data, function( response ) {
// renders the user info again with the messages and updated data
self.original_email = email;
Expand Down
68 changes: 47 additions & 21 deletions lib/galaxy/webapps/galaxy/api/user_preferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def index( self, trans, cntrller='user_preferences', **kwd ):
'quota': trans.app.quota_agent.get_quota( trans.user, nice_size=True ),
}


def __get_user_type_form_definition( self, trans, user=None, **kwd ):
#params = util.Params( kwd )
if user and user.values:
Expand All @@ -59,6 +60,7 @@ def __get_user_type_form_definition( self, trans, user=None, **kwd ):
user_type_form_definition = None
return user_type_form_definition


# ===== Methods for building SelectFields ================================
def __build_user_type_fd_id_select_field( self, trans, selected_value ):
# Get all the user information forms
Expand All @@ -73,6 +75,7 @@ def __build_user_type_fd_id_select_field( self, trans, selected_value ):
selected_value=selected_value,
refresh_on_change=True )


def __get_widgets( self, trans, user_type_form_definition, user=None, **kwd ):
widgets = []
if user_type_form_definition:
Expand All @@ -87,6 +90,7 @@ def __get_widgets( self, trans, user_type_form_definition, user=None, **kwd ):
widgets = user_type_form_definition.get_widgets( None, contents={}, **kwd )
return widgets


def user_info(self, cntrller, trans, kwd):
'''Manage a user's login, password, public username, type, addresses, etc.'''
#params = util.Params( kwd )
Expand Down Expand Up @@ -140,7 +144,7 @@ def user_info(self, cntrller, trans, kwd):
user_address_list.append( dict( id=address_id, title='', type='hidden', help=( item.desc + ': <br>' + item.get_html() ) ) )
if ( item.deleted ):
address_data.append( dict( label='Undelete', value=( 'undelete_' + address_id ) ) )
user_address_list.append( dict( name=( 'undelete_button_' + address_id ), label='Actions', type='select', unchecked=True, display='radio', data=address_data ) )
user_address_list.append( dict( name=( 'undelete_button_' + address_id ), label='Actions', type='select', optional=True, display='radio', data=address_data ) )
else:
address_data.append( dict( label='Edit', value=( 'edit_' + address_id ) ) )
address_data.append( dict( label='Delete', value=( 'delete_' + address_id ) ) )
Expand Down Expand Up @@ -203,19 +207,33 @@ def user_info(self, cntrller, trans, kwd):
@expose_api
def manage_user_info( self, trans, cntrller='user_preferences', **kwd ):
""" Manage User Info API call """
return self.user_info(cntrller, trans, kwd)
params = util.Params( kwd )
call_type = params.get( 'call', 'None' )
# Redirect to different method based on the operation
if ( call_type == 'edit_info' ):
return self.edit_info( trans, cntrller, kwd )
elif ( call_type == 'add_address' ):
return self.new_address( trans, cntrller, kwd )
elif ( call_type == 'edit_address' ):
return self.edit_address( trans, cntrller, kwd )
elif ( call_type == 'undelete_address' ):
return self.undelete_address( trans, cntrller, kwd )
elif( call_type == 'delete_address' ):
return self.delete_address( trans, cntrller, kwd )
else:
return self.user_info( cntrller, trans, kwd )

@expose_api
def edit_info( self, trans, cntrller='user_preferences', **kwd ):

def edit_info( self, trans, cntrller, kwd ):
"""
API call for Edit user information = username, email or password.
Save user information like email and public name
"""
params = util.Params( kwd )
is_admin = cntrller == 'admin' and trans.user_is_admin()
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
user_id = params.get( 'id', None )
button_type = params.get( 'button_name', None )
save_type = params.get( 'save_type', None )

if user_id and is_admin:
user = trans.sa_session.query( trans.app.model.User ).get( trans.security.decode_id( user_id ) )
Expand All @@ -225,7 +243,7 @@ def edit_info( self, trans, cntrller='user_preferences', **kwd ):
user = None
else:
user = trans.user
if user and (button_type == 'login_info_button'):
if user and (save_type == 'login_info'):
# Editing email and username
email = util.restore_text( params.get( 'email', '' ) )
username = util.restore_text( params.get( 'username', '' ) ).lower()
Expand Down Expand Up @@ -262,7 +280,7 @@ def edit_info( self, trans, cntrller='user_preferences', **kwd ):
trans.sa_session.add( user )
trans.sa_session.flush()
message = 'The login information has been updated with the changes.'
elif user and (button_type == 'edit_user_info_button'):
elif user and (save_type == 'edit_user_info'):
# Edit user information - webapp MUST BE 'galaxy'
user_type_fd_id = params.get( 'user_type_fd_id', 'none' )
if user_type_fd_id not in [ 'none' ]:
Expand Down Expand Up @@ -299,11 +317,12 @@ def edit_info( self, trans, cntrller='user_preferences', **kwd ):
if status:
kwd[ 'status' ] = status
print(kwd)
# makes a call to manage user info method
# Return all data for user information page
return self.user_info(cntrller, trans, kwd)

@expose_api
def edit_address( self, trans, cntrller='user_preferences', **kwd ):

def edit_address( self, trans, cntrller, kwd ):
""" Allow user to edit the saved address """
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
Expand All @@ -321,7 +340,7 @@ def edit_address( self, trans, cntrller='user_preferences', **kwd ):
address_obj = trans.sa_session.query( trans.app.model.UserAddress ).get( trans.security.decode_id( address_id ) )
if address_obj.user_id != user.id:
return trans.show_error_message( "Invalid address id." )
if params.get( 'edit_address_button', False ):
if params.get( 'edit_address', False ):
short_desc = util.restore_text( params.get( 'short_desc', '' ) )
name = util.restore_text( params.get( 'name', '' ) )
institution = util.restore_text( params.get( 'institution', '' ) )
Expand Down Expand Up @@ -397,15 +416,21 @@ def edit_address( self, trans, cntrller='user_preferences', **kwd ):
'status': status
}

@expose_api
def delete_address( self, trans, cntrller='user_preferences', address_id=None, **kwd ):
return self.__delete_undelete_address( trans, cntrller, 'delete', address_id=address_id, **kwd )

@expose_api
def undelete_address( self, trans, cntrller='user_preferences', address_id=None, **kwd ):
return self.__delete_undelete_address( trans, cntrller, 'undelete', address_id=address_id, **kwd )
def delete_address( self, trans, cntrller, kwd ):
""" Delete an address """
address_id = kwd.get( 'address_id', None )
return self.__delete_undelete_address( trans, cntrller, 'delete', address_id, kwd )


def __delete_undelete_address( self, trans, cntrller, op, address_id=None, **kwd ):
def undelete_address( self, trans, cntrller, kwd ):
""" Undelete an address """
address_id = kwd.get( 'address_id', None )
return self.__delete_undelete_address( trans, cntrller, 'undelete', address_id, kwd )


def __delete_undelete_address( self, trans, cntrller, op, address_id, kwd ):
""" Delete or undelete an address based on parameter op """
is_admin = cntrller == 'admin' and trans.user_is_admin()
user_id = kwd.get( 'id', False )
if is_admin:
Expand Down Expand Up @@ -435,8 +460,9 @@ def __delete_undelete_address( self, trans, cntrller, op, address_id=None, **kwd

return self.user_info(cntrller, trans, kwd)

@expose_api
def new_address( self, trans, cntrller='user_preferences', **kwd ):

def new_address( self, trans, cntrller, kwd ):
""" Add new user address """
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
Expand Down
Loading

0 comments on commit dc80c89

Please sign in to comment.