Ejemplo n.º 1
0
def search(meeting_id):
    meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)
    search = flask.request.args['search']

    results = (
        models.Person.select().join(models.PersonMeeting)
                     .where(meeting=meeting_id)
                     .limit(5))

    search = rescape(unidecode(search.lower()))
    results = results.where(sugar.data_like('_text_for_search', search,
                                            table='t1'))


    def table_row(person):
        c = sugar.get_person_category_or_404(meeting_id,
            category_id=person.category_id(meeting_id))
        representing = person.decoded_data['printout_representing']
        url = flask.url_for('participant.view', meeting_id=meeting_id,
                            person_id=person.id)

        if person.data.get('photo'):
            url_for_image = flask.url_for('participant.avatar',
                                           meeting_id=meeting_id,
                                           person_id=person.id)
        else:
            url_for_image = flask.url_for('static',
                                          filename="img/no-avatar.jpg")

        return {
            'name': person.name,
            'representing': representing[:40] + (representing[40:] and '..'),
            'url': url,
            'url_for_image': url_for_image,
            'url_for_registration': url_for_registration,
        }

    url_for_registration = flask.url_for('meeting.registration',
                                          meeting_id=meeting.id,
                                          query=search)
    return flask.jsonify({
        'results': [table_row(person) for person in results],
        'url_for_registration': url_for_registration,
    })
Ejemplo n.º 2
0
    def query(self, options, meeting_id):
        meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)
        search = options['search']
        order_by = options.get('order_by')

        fields = [R('t1.id', 'id'), R('t1.data','data'),
                  R('t2.category', 'category')]
        results = (models.MediaPerson.select().join(models.MediaMeeting)
                         .where(meeting=meeting_id)
                         .limit(options['limit'])
                         .offset(options['offset']))

        if order_by and not options['count']:
            order_by_column = self.COLUMNS.get(order_by[0], order_by[0])
            order_by_dir = order_by[1].upper()
            if order_by_column == 'category':
                results = results.order_by(("(t2.category)", order_by_dir))
            else:
                results = results.order_by(
                    ("(t1.data -> '%s')" % order_by_column, order_by_dir))

        if search:
            search = sugar.util.rescape(unidecode(search.lower()))
            results = results.where(sugar.data_like('_text_for_search',
                search, table='t1'))

        if options['count']:
            return results.count()

        def table_row(person, meeting):
            cat = sugar.get_person_category_or_404(meeting_id,
                category_id=person.category_id(meeting.id))
            url = flask.url_for('.view', meeting_id=meeting.id,
                                media_person_id=person.id)
            link = "<a href='%s'>%s</a>" % (jinja2.escape(url), person.name)
            return {
                'id': person.id,
                'name': link,
                'category': cat.data['name_E'],
                'media': person.decoded_data['media'],
            }
        return (table_row(person, meeting) for person in results)
Ejemplo n.º 3
0
    def query(self, options, meeting_id):

        meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)
        search = options['search']
        order_by = options.get('order_by')

        fields = [R('t1.id', 'id'), R('t1.data','data'),
                  R('t2.data', 'meeting_data')]
        results = (
            models.Person.select(fields).join(models.PersonMeeting)
                         .where(meeting=meeting_id)
                         .limit(options['limit'])
                         .offset(options['offset']))

        if order_by and not options['count']:
            order_by_column = self.COLUMNS.get(order_by[0], None)
            order_by_dir = order_by[1].upper()
            if order_by_column:
                results = results.order_by(
                    ("(t1.data -> '%s')" % order_by_column, order_by_dir)
                )
            if order_by[0] == 'id':
                results = results.order_by(("(t1.id )", order_by_dir))
            if order_by[0] == 'category':
                results = results.order_by(("(t2.category)", order_by_dir))
            if order_by[0] in ('attended', 'verified', 'credentials'):
                results = results.order_by(
                    ("(t2.data -> 'meeting_flags_%s')" % order_by[0],
                     order_by_dir))

        if search:
            search = rescape(unidecode(search.lower()))
            results = results.where(sugar.data_like('_text_for_search',
                                                    search, table='t1'))
        if options['count']:
            return results.count()

        def render_column(person, field):
            if field == 'attended':
                value = person.meeting_data['meeting_flags_attended']
                template = 'meeting/registration_attended_column.html'
            elif field == 'verified':
                value = person.meeting_data['meeting_flags_verified']
                template = 'meeting/registration_verified_column.html'
            elif field == 'credentials':
                value = person.meeting_data['meeting_flags_credentials']
                template = 'meeting/registration_credentials_column.html'

            return flask.render_template(template, **{
                'value': value,
                'person': person,
                'meeting': meeting,
            })

        def table_row(person, meeting):
            cat = sugar.get_person_category_or_404(meeting_id,
                category_id=person.category_id(meeting.id))
            url = flask.url_for('participant.view', meeting_id=meeting.id,
                                person_id=person.id)
            link = "<a href='%s'>%s %s</a>" % (
                jinja2.escape(url),
                person.decoded_data['personal_first_name'],
                person.decoded_data['personal_last_name'])

            return {
                'id': person.id,
                'name': link,
                'category': cat.data['name_E'],
                'representing': person.data['printout_representing'],
                'attended': render_column(person, 'attended'),
                'verified': render_column(person, 'verified'),
                'credentials': render_column(person, 'credentials'),
            }
        return (table_row(person, meeting) for person in results)