@@ -587,6 +587,7 @@ def adj():
587587 ## TODO: Base this off EventMetadata for now. Eventually, we want to get rid of this.
588588 filter_fields = EventMetadata .__table__ .columns .keys ()
589589 filter_fields .remove ('id' )
590+ filter_fields .append ('flag' )
590591
591592 ## TODO: Do some checks in the template which don't force us to enter in empty variables
592593 ## which will be initialized by load_adj_grid
@@ -657,25 +658,27 @@ def do_search():
657658 filter_compare = request .form ['adj_filter_compare_{}' .format (i )]
658659
659660 if filter_field and filter_value and filter_compare :
661+ _model = EventMetadata if filter_field != 'flag' else EventFlag
662+ 660663 ## Translate the filter compare to a SQLAlchemy expression.
661664 if filter_compare == 'eq' :
662- _filter = getattr (getattr (EventMetadata , filter_field ), '__eq__' )(filter_value )
665+ _filter = getattr (getattr (_model , filter_field ), '__eq__' )(filter_value )
663666 elif filter_compare == 'ne' :
664- _filter = getattr (getattr (EventMetadata , filter_field ), '__ne__' )(filter_value )
667+ _filter = getattr (getattr (_model , filter_field ), '__ne__' )(filter_value )
665668 elif filter_compare == 'lt' :
666- _filter = getattr (getattr (EventMetadata , filter_field ), '__lt__' )(filter_value )
669+ _filter = getattr (getattr (_model , filter_field ), '__lt__' )(filter_value )
667670 elif filter_compare == 'le' :
668- _filter = getattr (getattr (EventMetadata , filter_field ), '__le__' )(filter_value )
671+ _filter = getattr (getattr (_model , filter_field ), '__le__' )(filter_value )
669672 elif filter_compare == 'gt' :
670- _filter = getattr (getattr (EventMetadata , filter_field ), '__gt__' )(filter_value )
673+ _filter = getattr (getattr (_model , filter_field ), '__gt__' )(filter_value )
671674 elif filter_compare == 'ge' :
672- _filter = getattr (getattr (EventMetadata , filter_field ), '__ge__' )(filter_value )
675+ _filter = getattr (getattr (_model , filter_field ), '__ge__' )(filter_value )
673676 elif filter_compare == 'contains' :
674- _filter = getattr (getattr (EventMetadata , filter_field ), 'like' )(u'%{}%' .format (filter_value ))
677+ _filter = getattr (getattr (_model , filter_field ), 'like' )(u'%{}%' .format (filter_value ))
675678 elif filter_compare == 'startswith' :
676- _filter = getattr (getattr (EventMetadata , filter_field ), 'like' )(u'{}%' .format (filter_value ))
679+ _filter = getattr (getattr (_model , filter_field ), 'like' )(u'{}%' .format (filter_value ))
677680 elif filter_compare == 'endswith' :
678- _filter = getattr (getattr (EventMetadata , filter_field ), 'like' )(u'%{}' .format (filter_value ))
681+ _filter = getattr (getattr (_model , filter_field ), 'like' )(u'%{}' .format (filter_value ))
679682 else :
680683 raise Exception ('Invalid filter compare: {}' .format (filter_compare ))
681684
@@ -686,7 +689,9 @@ def do_search():
686689
687690 ## Sort by the specified field.
688691 if sort_field and sort_order :
689- _sort = getattr (getattr (EventMetadata , sort_field ), sort_order )()
692+ _model = EventMetadata if sort_field != 'flag' else EventFlag
693+ 694+ _sort = getattr (getattr (_model , sort_field ), sort_order )()
690695 sorts .append (_sort )
691696
692697 ## AND all the filters together
@@ -733,19 +738,24 @@ def do_search():
733738 else :
734739 return make_response ("Please enter a search term or a filter." , 400 )
735740
741+ ## Perform the search on a left join to get all the candidate events.
736742 search_events = db_session .query (EventMetadata ).\
743+ join (EventFlag , EventMetadata .event_id == EventFlag .event_id , isouter = True ).\
737744 filter (a_filter_expr ).\
738745 order_by (sort_expr ).all ()
739746
747+ ## get all flags for these events
748+ flags = _load_event_flags ([x .event_id for x in search_events ])
749+ 740750 ## TODO: Eventually need to load current candidate events.
741751 ## Will probably end up doing this in JavaScript with the button initializers.
742752 response = make_response (
743753 render_template ('adj-search-block.html' ,
744- search_events = search_events ,
754+ events = search_events ,
755+ flags = flags ,
745756 cand_events = {})
746757 )
747758
748- ## TODO: eventually can add multiple values for the same key by coercing to dict.
749759 url_params = {k : v for k , v in request .form .iteritems ()}
750760
751761 ## make and return results. add in the number of results to update the button.
0 commit comments