diff --git a/ruby/lib/jam_ruby/models/musician_search.rb b/ruby/lib/jam_ruby/models/musician_search.rb
index 24dd2ebb8..849ffbc2a 100644
--- a/ruby/lib/jam_ruby/models/musician_search.rb
+++ b/ruby/lib/jam_ruby/models/musician_search.rb
@@ -92,6 +92,13 @@ module JamRuby
KEY_AGES => [AGE_COUNTS[0]]
}
+ def self.user_search_filter(user)
+ unless ms = user.musician_search
+ ms = self.create_search(user)
+ end
+ ms.json
+ end
+
def self.create_search(user)
ms = self.new
ms.user = user
@@ -219,10 +226,15 @@ module JamRuby
rel = self._skills(rel)
rel = self._instruments(rel)
rel = self._interests(rel)
- rel, page = self.pagination(rel, params)
rel
end
+ def search_results_page(params={})
+ rel = do_search(params)
+ rel, page = self.pagination(rel, params)
+ rel.to_json
+ end
+
end
end
diff --git a/web/app/assets/javascripts/jam_rest.js b/web/app/assets/javascripts/jam_rest.js
index 29993f644..390aba7ac 100644
--- a/web/app/assets/javascripts/jam_rest.js
+++ b/web/app/assets/javascripts/jam_rest.js
@@ -1577,6 +1577,17 @@
});
}
+ function getMusicianSearchFilter() {
+ return $.get("/api/search/musicians.json");
+ }
+
+ function postMusicianSearchFilter(query) {
+ return $.ajax({
+ type: "POST",
+ url: "/api/search/musicians.json?" + $.param(query)
+ });
+ }
+
function getMount(options) {
var id = getId(options);
return $.ajax({
@@ -1760,6 +1771,8 @@
this.validateUrlSite = validateUrlSite;
this.markRecordedBackingTrackSilent = markRecordedBackingTrackSilent;
this.addRecordingTimeline = addRecordingTimeline;
+ this.getMusicianSearchFilter = getMusicianSearchFilter;
+ this.postMusicianSearchFilter = postMusicianSearchFilter;
return this;
};
diff --git a/web/app/assets/javascripts/musician_search_filter.js.coffee b/web/app/assets/javascripts/musician_search_filter.js.coffee
new file mode 100644
index 000000000..87622e681
--- /dev/null
+++ b/web/app/assets/javascripts/musician_search_filter.js.coffee
@@ -0,0 +1,61 @@
+$ = jQuery
+context = window
+context.JK ||= {};
+
+context.JK.MusicianSearchFilter = class MusicianSearchFilter
+
+ constructor: (app) ->
+ @rest = context.JK.Rest()
+ @logger = context.JK.logger
+ @userId = null
+ @searchFilter = null
+
+ init: () =>
+ @screenBindings = { 'beforeShow': this.beforeShow, 'afterShow': this.afterShow }
+
+ renderSearchFilter: () =>
+ @logger.debug("*** renderSearchFilter: ")
+ $.when(this.rest.getMusicianSearchFilter()).done (sFilter) =>
+ this.loadSearchFilter(sFilter)
+
+ beforeShow: (data) =>
+ userId = data.id
+
+ afterShow: () =>
+ this.renderSearchFilter()
+
+ loadSearchFilter: (sFilter) =>
+ @searchFilter = sFilter
+ args =
+ interests: @searchFilter.interests
+ status: @searchFilter.skill_level
+ studio_sessions: @searchFilter.studio_session_count
+ concert_gigs: @searchFilter.gig_count
+
+ template = context.JK.fillTemplate($('#template-musician-search-filter').html(), args)
+
+ content_root = $('#musician-search-filter-builder')
+ content_root.html template
+ this.loadGenres()
+ this.loadInstruments()
+
+ loadInstruments: () =>
+
+
+ loadGenres: () =>
+ $('#search-filter-genres').empty()
+ @rest.getGenres().done (genres) =>
+ $.each genres, (index, genre) =>
+ genreTemplate = $('#template-search-filter-setup-genres').html()
+ selected = ''
+ if 0 < @searchFilter.genres.length
+ genreMatch = $.grep(@searchFilter.genres, (n, i) ->
+ n.id == genre.id
+ )
+ if genreMatch.length > 0
+ selected = 'checked'
+ genreHtml = context.JK.fillTemplate(genreTemplate,
+ id: genre.id
+ description: genre.description
+ checked: selected)
+ $('#search-filter-genres').append genreHtml
diff --git a/web/app/controllers/api_search_controller.rb b/web/app/controllers/api_search_controller.rb
index dfe2fc322..e1ca4903c 100644
--- a/web/app/controllers/api_search_controller.rb
+++ b/web/app/controllers/api_search_controller.rb
@@ -21,4 +21,15 @@ class ApiSearchController < ApiController
@search = Search.text_search(params, current_user)
end
end
+
+ def musicians
+ if request.get?
+ render :json => MusicianSearch.user_search_filter(current_user), :status => 200
+
+ elsif request.post?
+ ms = MusicianSearch.user_search_filter(current_user)
+ render :json => ms.json_search_results(params), :status => 200
+ end
+ end
+
end
diff --git a/web/app/controllers/spikes_controller.rb b/web/app/controllers/spikes_controller.rb
index ab6da676d..a4fd2d10a 100644
--- a/web/app/controllers/spikes_controller.rb
+++ b/web/app/controllers/spikes_controller.rb
@@ -60,4 +60,9 @@ class SpikesController < ApplicationController
def recording_source
render :layout => 'web'
end
+
+ def musician_search_filter
+ render :layout => 'web'
+ end
+
end
diff --git a/web/app/views/clients/_musician_search_filter.html.slim b/web/app/views/clients/_musician_search_filter.html.slim
new file mode 100644
index 000000000..ccaacf18e
--- /dev/null
+++ b/web/app/views/clients/_musician_search_filter.html.slim
@@ -0,0 +1,51 @@
+div#musician-search-filter-builder
+
+script#template-musician-search-filter type="text/template"
+ .field
+ label Interests:
+ select.w80 disabled="disabled" name="interests"
+ option selected="selected" value="{interests}" {interests)
+
+ .field
+ label Status:
+ select.w80 disabled="disabled" name="status"
+ option selected="selected" value="{status}" {status)
+
+ .field
+ label Studio Sessions Played:
+ select.w80 disabled="disabled" name="studio_sessions"
+ option selected="selected" value="{studio_sessions}" {studio_sessions)
+
+ .field
+ label Concert Gigs Played:
+ select.w80 disabled="disabled" name="concert_gigs"
+ option selected="selected" value="{concert_gigs}" {concert_gigs)
+
+ .field
+ | What instruments can you play?
+ .profile-instrumentlist.w90
+ table.instrument_selector cellpadding="0" cellspacing="6" width="100%"
+
+ .field
+ label for="search-filter-genres" Genres:
+ .search-filter-setup-genres
+ table#search-filter-genres cellpadding="10" cellspacing="6" width="100%"
+
+ .field
+ label for="filter-ages" Ages:
+ .filter-setup-ages
+ table#filter-ages cellpadding="10" cellspacing="6" width="100%"
+
+
+script#musician-search-filter-instrument type="text/template"
+ tr data-instrument-id="{id}"
+ td {description
+ td align="right" width="50%"
+ select.proficiency_selector name="proficiency"
+ option value="1" Beginner
+ option value="2" Intermediate
+ option value="3" Expert
+
+script#template-search-filter-setup-genres type="text/template"
+ tr
+ td {description
diff --git a/web/app/views/spikes/musician_search_filter.html.slim b/web/app/views/spikes/musician_search_filter.html.slim
new file mode 100644
index 000000000..6244c4a70
--- /dev/null
+++ b/web/app/views/spikes/musician_search_filter.html.slim
@@ -0,0 +1,14 @@
+= javascript_include_tag "musician_search_filter"
+= stylesheet_link_tag "client/musician"
+#musician_search_spike
+= render "clients/musician_search_filter"
+
+javascript:
+ var initialized = false;
+ $(document).on('JAMKAZAM_READY', function(e, data) {
+ setTimeout(function() {
+ window.musician_search_filter = new JK.MusicianSearchFilter();
+ musician_search_filter.init();
+ musician_search_filter.afterShow();
+ }, 1)
+ });
diff --git a/web/config/routes.rb b/web/config/routes.rb
index e1030964a..cc456384a 100644
--- a/web/config/routes.rb
+++ b/web/config/routes.rb
@@ -97,6 +97,7 @@ SampleApp::Application.routes.draw do
match '/widgets/download_jam_track', to: 'spikes#download_jam_track'
match '/site_validate', to: 'spikes#site_validate'
match '/recording_source', to: 'spikes#recording_source'
+ match '/musician_search_filter', to: 'spikes#musician_search_filter'
# junk pages
match '/help', to: 'static_pages#help'
@@ -429,6 +430,7 @@ SampleApp::Application.routes.draw do
# search
match '/search' => 'api_search#index', :via => :get
+ match '/search/musicians' => 'api_search#musicians', :via => [:get, :post]
# join requests
match '/join_requests/:id' => 'api_join_requests#show', :via => :get, :as => 'api_join_request_detail'