示例#1
0
    def list(self):  #{

        # helper: just print out the values passed in, just direct the forms action to forms/list
        c.query = {}
        c.query['type'] = 'normal'
        c.query['baseurl'] = self.base_url_advanced

        c.query['request'] = request.params

        return render('/main/results/list.mako')
示例#2
0
    def institutions(self):
        c.current_letter = letter = request.params.get('letter', 'a')

        # select stuff with no alpha letter
        # -browse:a* AND -browse:b* -browse:c* AND -browse:d* AND -browse:e* AND -browse:f* AND -browse:g* AND -browse:h* -browse:i* AND -browse:j* AND -browse:k* AND -browse:l* AND -browse:m* AND -browse:n* -browse:o* AND -browse:p* AND -browse:q* AND -browse:r* AND -browse:s* AND -browse:t* -browse:u* AND -browse:v* AND -browse:w* AND -browse:x* AND -browse:y* AND -browse:z*

        q = "browse:" + letter + "*"

        c.browse = self.browse(q, 'institutions')
        c.browsing = "institutions"

        return render('/main/browse.mako')
示例#3
0
    def locations(self):
        c.current_letter = letter = request.params.get('letter', 'a')

        q = "browse:" + letter + "* AND (" + \
            fn.get_total_works_sent_from_place_fieldname() + ":[1 TO *] OR " + \
            fn.get_total_works_sent_to_place_fieldname() + ":[1 TO *] OR " + \
            fn.get_total_works_mentioning_place_fieldname() + ":[1 TO *])"

        c.browse = self.browse(q, 'locations')
        c.browsing = "locations"

        return render('/main/browse.mako')
示例#4
0
    def organisations(self):
        c.current_letter = letter = request.params.get('letter', 'a')

        is_org_field = escape_colons(fn.get_is_organisation_fieldname())
        q = is_org_field + ":true AND browse:" + letter + "* AND (" + \
            fn.get_total_works_written_by_agent_fieldname() + ":[1 TO *] OR " + \
            fn.get_total_works_recd_by_agent_fieldname() + ":[1 TO *] OR " + \
            fn.get_total_works_mentioning_agent_fieldname() + ":[1 TO *])"

        c.browse = self.browse(q, 'people', real_object='organisations')
        c.browsing = "organisations"

        return render('/main/browse.mako')
示例#5
0
    def works(self):

        default_year = get_default_year_for_browse()

        c.current_year = year = request.params.get('year', default_year)

        q = '(' + escape_colons( fn.get_start_year_fieldname()) + ':(' + year + ')' \
          + ' OR ' \
          + escape_colons( fn.get_end_year_fieldname()) + ':(' + year + '))'

        c.browse = self.browse(q, 'works', sortfield='started_date_sort asc')
        c.browsing = "works"

        return render('/main/browse.mako')
示例#6
0
    def document(self):
        """Render the error document"""
        icode = 404
        code = "404"
        status = "Not Found"
        resp = request.environ.get('pylons.original_response')
        if resp and resp.body:
            content = literal(resp.body)
        else:
            content = request.GET.get('message', '')
            if content:
                content = cgi.escape(content)
        if resp and resp.status_int:
            icode = resp.status_int
            code = str(resp.status_int)
        elif request.GET.get('code', ''):
            code = request.GET.get('code')
            if code:
                code = cgi.escape(code)
            else:
                code = 404
        if resp and resp.status:
            status = resp.status
        c.message = request.GET.get('message', '')
        if c.message:
            c.message = cgi.escape(c.message)
        else:
            c.message = content

        print code
        if code == "404":
            return render('/main/Four0Four.mako')
        else:
            return render('/main/error.mako')
        """Render the error document"""
        """
示例#7
0
    def index(self):
        requests = request.params

        if 'id' in requests:
            c.id = requests['id']

            sol = solr.SolrConnection(solrconfig.solr_urls['all'])
            sol_response = sol.query("id:uuid_" + c.id,
                                     score=False,
                                     rows=1,
                                     start=0)

            if len(sol_response.results) == 1:
                obj = sol_response.results[0]
                if obj:
                    c.record = obj
                    return render('/main/thanks.mako')

        return redirect(url(controller='home'))
示例#8
0
    def i(self, id):

        uuid = self._decodeId(id)

        if len(uuid) == 36:

            sol = solr.SolrConnection(solrconfig.solr_urls['all'])
            sol_response = sol.query("uuid:" + uuid,
                                     fields=['object_type'],
                                     score=False,
                                     rows=1,
                                     start=0)

            if sol_response.numFound > 0:

                return redirect(url(
                    controller='profile',
                    action=sol_response.results[0]['object_type'],
                    id=uuid),
                                code=301)

        c.profile = {}
        return render('/main/profile.mako')
示例#9
0
    def index(self):
        iworkid = request.params.get('iwork_id', None)

        if iworkid:
            return redirect(url(controller='profile', action='w', iworkid=id))

        profile_type = request.params.get('type', None)
        emlo_edit_id = request.params.get('id', None)

        if profile_type and emlo_edit_id:

            if profile_type == "person" or profile_type == "people" or profile_type == "persons":
                return redirect(
                    url(controller='profile',
                        action='p',
                        ipersonid=emlo_edit_id))

            if profile_type == "work" or profile_type == "works":
                return redirect(
                    url(controller='profile', action='w',
                        iworkid=emlo_edit_id))

            if profile_type == "institution" or profile_type == "repository":
                return redirect(
                    url(controller='profile',
                        action='r',
                        institutionid=emlo_edit_id))

            if profile_type == "location" or profile_type == "locations":
                return redirect(
                    url(controller='profile',
                        action='l',
                        locationid=emlo_edit_id))

        c.profile = {}

        return render('/main/profile.mako')
示例#10
0
    def index(self):
        requests = request.params
        #if len( requests ) > 0: # a form has been submitted
        #    return self.send()

        c.http_host = ""

        if 'id' in requests:
            c.id = requests['id']

            sol = solr.SolrConnection(solrconfig.solr_urls['all'])
            sol_response = sol.query("id:uuid_" + c.id,
                                     score=False,
                                     rows=1,
                                     start=0)

            if len(sol_response.results) == 1:
                manuscript = None

                obj = sol_response.results[0]
                manuscript = sol_response.results[0]

                if manuscript:

                    c.record = manuscript
                    c.repository = None

                    c.comment = ''
                    c.messages = {}
                    c.name = ''
                    c.email = ''
                    c.http_host = request.url

                    return render('/main/comment.mako')

        return redirect(url(controller='home'))
示例#11
0
    def index(self):
        c.browse = None
        c.browsing = 'browse'

        return render('/main/browse.mako')
示例#12
0
    def index(self):

        #
        # Get main stats
        #
        sol_all = solr.SolrConnection(solrconfig.solr_urls["all"])

        catalogue_fn = fn.get_catalogue_fieldname()
        organisation_fn = fn.get_is_organisation_fieldname()

        facet_fields = ['object_type', catalogue_fn, organisation_fn]

        sol_response_all = sol_all.query("*:*",
                                         rows=0,
                                         fl="-",
                                         score=False,
                                         facet='true',
                                         facet_limit=1000,
                                         facet_field=facet_fields)
        sol_all.close()

        c.stats = {
            'works': {
                'number': 0
            },
            'people': {
                'number': 0,
                'url': '/browse/people'
            },
            'locations': {
                'number': 0,
                'url': '/browse/locations'
            },
            'organisations': {
                'number': 0,
                'url': '/browse/organisations'
            },
            'repositories': {
                'number': 0,
                'url': '/browse/institutions'
            },
            'manifestations': {
                'number': 0
            },
            'images': {
                'number': 0
            },
            'comments': {
                'number': 0
            },
            'related resources': {
                'number': 0
            },
            'catalogues': {
                'number':
                0,
                'url':
                'http://emlo-portal.bodleian.ox.ac.uk/collections/?page_id=480'
            }
        }

        for stat, num in sol_response_all.facet_counts['facet_fields'][
                'object_type'].iteritems():

            if stat == 'institution':
                c.stats['repositories']['number'] = max(0, num)
            elif stat == 'comment':
                c.stats['comments']['number'] = num
            elif stat == 'image':
                c.stats['images']['number'] = num
            elif stat == 'location':
                c.stats['locations']['number'] = num
            elif stat == 'manifestation':
                c.stats['manifestations']['number'] = num
            elif stat == 'resource':
                c.stats['related resources']['number'] = num
            elif stat == 'work':
                c.stats['works']['number'] = num

        if "true" in sol_response_all.facet_counts['facet_fields'][
                organisation_fn]:
            c.stats['organisations']['number'] = sol_response_all.facet_counts[
                'facet_fields'][organisation_fn]['true']
        else:
            c.stats['organisations']['number'] = 0

        if 'person' in sol_response_all.facet_counts['facet_fields'][
                'object_type']:
            c.stats['people']['number'] = sol_response_all.facet_counts[
                'facet_fields']['object_type']['person'] - c.stats[
                    'organisations']['number']

        catalogue_dict = sol_response_all.facet_counts['facet_fields'][
            catalogue_fn]
        if 'No catalogue specified' not in catalogue_dict.keys():
            c.stats['catalogues']['number'] = len(catalogue_dict)
        else:
            c.stats['catalogues']['number'] = len(catalogue_dict) - 1

        # tweak numbers - none of these numbers will change frequently, if ever. ("Number of everything" minus "Number of ones we want")

        if config['project'] == "EMLO":
            if c.stats['people']['number'] >= 21985:
                c.stats['people']['number'] -= (
                    21985 - 20097
                )  # Remove people who have no connection to a letter
            if c.stats['organisations']['number'] >= 948:
                c.stats['organisations']['number'] -= (
                    948 - 806
                )  # Remove orginisations who have no connection to a letter
            if c.stats['images']['number'] >= 48661:
                c.stats['images']['number'] -= (
                    48661)  # Remove images of the bodleian card catalogue
            if c.stats['locations']['number'] > 5931:
                c.stats['locations']['number'] -= (
                    5931 - 5190
                )  # Remove locations which have no connection to a letter

        return render('/main/home.mako')
示例#13
0
    def advanced(self):  #{

        global queries
        queries = []

        default_facet_values = {
            get_author_uri_fieldname(): "aut",
            get_addressee_uri_fieldname(): "rec",
            get_origin_uri_fieldname(): "pla_ori_name",
            get_destination_uri_fieldname(): "pla_des_name",
            get_catalogue_fieldname(): "col_cat",
            get_start_year_fieldname(): "dat_sin_year"
        }

        facet_values = {}

        for facname, facval in default_facet_values.iteritems():  #{

            # Check if we are querying on a URI field or catalogue via facet.
            # Don't try further faceting if so (no further drilldown is possible within this field).

            if facname in request.params.keys():  #{
                if facname == get_catalogue_fieldname():  #{
                    continue
                #}

                requestval = request.params[facname]
                if requestval.startswith(
                        'http'):  #{  # we are already querying on a URI field
                    continue
                #}
            #}

            # Similarly if we are querying on a year or catalogue via dropdown list,
            # don't try further faceting (no further drilldown possible).
            elif (facval == 'dat_sin_year' or facval
                  == 'col_cat') and facval in request.params.keys():  #{
                continue
            #}

            facet_values[facname] = default_facet_values[facname]
        #}

        requests = request.params.copy()

        for name, value in request.params.iteritems():
            if value and name in facet_values:
                requests[facet_values[name]] = value
                del requests[name]
            #endif
        #endfor

        #highlight = {}
        c.query = {}
        c.query['type'] = 'advanced'
        c.query['baseurl'] = self.base_url_advanced
        c.query['fields'] = {}
        c.query['rows'] = str(get_default_rows_per_page())
        c.query['start'] = '0'

        if 'rows' in requests:
            c.query['rows'] = requests['rows']
        #endif

        if 'start' in requests:
            c.query['start'] = requests['start']
        #endif

        #
        # Build query
        #
        facet_fields = facet_values.keys()

        facet_queries = []

        query_full = build_advanced_query(requests)

        ##print '-------------- query_full ----------------------'
        ##print query_full
        ##print '------------------------------------------------'

        c.solr = {}
        c.solr['numFound'] = 0
        c.solr['results'] = []
        c.solr['facets'] = {}

        sol = solr.SolrConnection(solrconfig.solr_urls["works"])

        c.query['sort'], sort = get_field_to_sort_by(
            requests.get("sort", False))

        #Query with highlighting
        sol_response = sol.query( query_full.encode( 'utf-8' ), start=c.query['start'], rows=c.query['rows'], \
                        sort=sort,
                        facet='true', facet_sort="count", facet_mincount='1',
                        facet_limit=str( self.get_max_number_of_facet_entries() ),
                        facet_query=facet_queries, facet_field=facet_fields,
                        hl="true",
                        hl_fl=get_content_fields(),
                        hl_simple_pre="""<span class="highlight">""", hl_simple_post="</span>" )

        #print '-------------- query_response ----------------------'
        #print sol_response.highlighting
        #print '----------------------------------------------------'

        c.solr['highlights'] = sol_response.highlighting

        for result in sol_response.results:
            result['uuid'] = uuid_from_id(
                result['id'])  #result['id'].split(":")[1]
            c.solr['results'].append(result)
        #endfor

        c.solr['numFound'] = sol_response.numFound

        fields = {}
        for field, value in requests.iteritems():
            fields[field] = {'name': field.capitalize(), 'value': value}
        #endfor

        if requests.get("sort", False):
            fields['sort'] = {
                'name': 'Sort',
                'value': requests['sort'],
                'for_current': False
            }
        #endif

        c.query['fields'] = fields

        c.solr['facets'] = {}
        if sol_response.facet_counts.get('facet_fields', None):
            c.solr['facets'] = sol_response.facet_counts['facet_fields']

            # Get the objects which the facets point to.
            facets_relations = []
            for facet, counts in c.solr['facets'].iteritems():
                for item, count in counts.iteritems():
                    if item.find("http://") != -1:
                        facets_relations.append(item)
                    #endif
                #endfor
            #endfor

            c.solr['facets_relations'] = get_records_from_solr(
                facets_relations)
        #endif

        return render('/main/results/advanced.mako')
示例#14
0
    def index(self):

        #
        # Get main stats
        #
        sol_all = solr.SolrConnection(solrconfig.solr_urls["all"])

        catalogue_fn = fn.get_catalogue_fieldname()
        organisation_fn = fn.get_is_organisation_fieldname()

        facet_fields = ['object_type', catalogue_fn, organisation_fn]

        sol_response_all = sol_all.query("*:*",
                                         rows=0,
                                         fl="-",
                                         score=False,
                                         facet='true',
                                         facet_limit=1000,
                                         facet_field=facet_fields)
        sol_all.close()

        c.stats = {
            'works': 0,
            'people and organisations': 0,
            'people': 0,
            'locations': 0,
            'organisations': 0,
            'repositories': 0,
            'manifestations': 0,
            'images': 0,
            'comments': 0,
            'related resources': 0,
            'catalogues': 0
        }

        for stat, num in sol_response_all.facet_counts['facet_fields'][
                'object_type'].iteritems():

            if stat == 'institution':
                c.stats['repositories'] = num
            elif stat == 'comment':
                c.stats['comments'] = num
            elif stat == 'image':
                c.stats['images'] = num
            elif stat == 'location':
                c.stats['locations'] = num
            elif stat == 'manifestation':
                c.stats['manifestations'] = num
            elif stat == 'resource':
                c.stats['related resources'] = num
            elif stat == 'work':
                c.stats['works'] = num
            elif stat == 'person':
                c.stats['people and organisations'] = num

        c.stats['all'] = sol_response_all.numFound

        if "true" in sol_response_all.facet_counts['facet_fields'][
                organisation_fn]:
            c.stats['organisations'] = sol_response_all.facet_counts[
                'facet_fields'][organisation_fn]['true']
        else:
            c.stats['organisations'] = 0

        if 'person' in sol_response_all.facet_counts['facet_fields'][
                'object_type']:
            c.stats['people'] = sol_response_all.facet_counts['facet_fields'][
                'object_type']['person'] - c.stats['organisations']

        catalogue_dict = sol_response_all.facet_counts['facet_fields'][
            catalogue_fn]
        c.stats['catalogues'] = len(catalogue_dict)

        sol_all = solr.SolrConnection(solrconfig.solr_urls["works"])

        sol_response = sol_all.query("*:*",
                                     rows=20,
                                     fl="*",
                                     score=False,
                                     sort='ox_internalModified desc')
        sol_all.close()

        c.indexedTime = 'unknown'
        c.changedLast = []
        if sol_response.numFound:
            c.indexedTime = sol_response.results[0]['ox_internalAdded']
            for result in sol_response.results:
                c.changedLast.append({
                    'changed':
                    result['ox_internalModified'],
                    'description':
                    result['dcterms_description'],
                    'url':
                    result['uri']
                })

        return render('/main/status.mako')
示例#15
0
 def resource(self, id='0'):
     c.profile, c.relations, c.further_relations, template = self.profile(
         id, 'resources', 'resource')
     return render(template)
示例#16
0
 def person(self, id='0'):
     c.profile, c.relations, c.further_relations, template = self.profile(
         id, 'people', 'person')
     return render(template)
示例#17
0
 def manifestation(self, id='0'):
     c.profile, c.relations, c.further_relations, template = self.profile(
         id, 'manifestations', 'manifestation')
     return render(template)
示例#18
0
 def work(self, id='0'):
     c.profile, c.relations, c.further_relations, template = self.profile(
         id, 'works', 'work')
     return render(template)
示例#19
0
 def index(self):
     return render('/main/rsstest.mako')
示例#20
0
    def send(self):
        requests = request.params

        if 'id' in requests and requests['id'] != '':

            records = get_records_from_solr([requests['id']])
            if len(records) > 0:

                record = records[requests['id']]

                name_good = CommentController._name_good(requests)
                email_good = CommentController._email_good(requests)
                comment_good = CommentController._comment_good(requests)
                captcha_good = CommentController._captcha_good(requests)

                if email_good and comment_good and name_good and captcha_good:

                    email_body = ''
                    email_body += "Email via EMLO website\n"
                    email_body += "======================\n"
                    email_body += "\n"
                    email_body += "Comment on record: "
                    email_body += " http://emlo.bodleian.ox.ac.uk/profile/" + record[
                        'object_type'] + "/" + record['id'].replace(
                            "uuid_", '') + '\n'
                    email_body += "\n"
                    email_body += "From: " + requests['name'] + "\n"
                    email_body += "Email: " + requests['email'] + "\n"
                    email_body += "Message follows:\n" + requests[
                        'comment'] + "\n\n"

                    #self._sendmail( '*****@*****.**', email_body )

                    return redirect(
                        url(controller='thanks', action='index') + '?id=' +
                        record['id'].replace("uuid_", ''))

                else:

                    c.record = record
                    c.comment = requests.get('comment', '')
                    c.name = requests.get('name', '')
                    c.email = requests.get('email', '')

                    messages = {}

                    if not name_good:
                        messages['name'] = 'Please enter your name.'

                    if not email_good:

                        if not CommentController._have("email", requests):
                            messages[
                                'email'] = 'Please enter an email address.'
                        elif not CommentController._email_valid(requests):
                            messages[
                                'email'] = "Sorry, that doesn't appear to be a valid email address."

                    if not comment_good:
                        messages['comment'] = 'Please enter a comment.'

                    if not captcha_good:

                        if not CommentController._have("g-recaptcha-response",
                                                       requests):
                            messages[
                                'captcha'] = "Sorry, the Captcha input failed to load, Please can you try again later."
                        else:
                            messages[
                                'captcha'] = "Please complete the captcha."

                    if len(messages) == 0:
                        messages[
                            'general'] = "Sorry, there was unknown error and we couldn't send your comment. Please check your details."

                    c.messages = messages

                    return render('/main/comment.mako'
                                  )  #?id=' + record['id'].replace('uuid_',''))

        return redirect(url(controller='home'))
示例#21
0
 def index(self):
     return render('/main/technical.mako')
示例#22
0
	def geography(self):
		return render( '/main/vis/map.mako' )
示例#23
0
    def quick(self):  #{

        # only single field "everything"
        # Search in default search field in solr.
        default_values = {"everything": "all data"}

        default_facet_fields = ['object_type', get_catalogue_fieldname()]
        facet_fields = []
        for default_facet_field in default_facet_fields:  #{
            if default_facet_field in request.params:  #{  # cannot drill down any further
                continue
            #}
            facet_fields.append(default_facet_field)
        #}

        c.query = {'type': 'quick', 'baseurl': self.base_url_quick}

        rows = request.params.get('rows', get_default_rows_per_page())
        start = request.params.get('start', 0)

        everything = request.params.get('everything', None)
        object_type = request.params.get('object_type', None)
        catalogue = request.params.get(get_catalogue_fieldname(), None)

        highlight = True
        default_value = default_values.get('everything', None)
        if default_value and everything and everything.lower(
        ) == default_value.lower():
            highlight = False
            everything = '*'
        #endif

        c.query['fields'] = {}
        c.query['start'] = start
        c.query['rows'] = rows

        query_retvals = build_quick_query(everything, object_type, catalogue)

        q = query_retvals['the_query']
        c.query['fields'] = query_retvals['fields']

        sort = "score desc"
        c.query['sort'] = 'score-d'

        ##print q

        sol = solr.SolrConnection(solrconfig.solr_urls["all"])
        sol_response = sol.query(q.encode('utf-8'),
                                 start=start,
                                 sort=sort,
                                 rows=rows,
                                 facet='true',
                                 facet_mincount='1',
                                 facet_sort="count",
                                 facet_limit=1000,
                                 facet_field=facet_fields,
                                 hl="true",
                                 hl_fl="*",
                                 hl_simple_pre='<span class="highlight">',
                                 hl_simple_post="</span>")

        c.solr = {}
        c.solr['numFound'] = sol_response.numFound
        c.solr['results'] = []
        for result in sol_response.results:
            uuid_fieldname = get_uuid_fieldname()
            raw_uuid = result[uuid_fieldname]
            processed_uuid = uuid_from_id(
                raw_uuid
            )  #raw_uuid.split("_")[1]  # strip off 'uuid:' prefix from value of field
            result['uuid'] = processed_uuid
            c.solr['results'].append(result)
        #endfor

        #c.solr['facets'] = {}
        c.solr['facets'] = sol_response.facet_counts['facet_fields']

        if highlight:
            c.solr['highlights'] = sol_response.highlighting
        else:
            c.solr['highlights'] = {}
        #endif

        return render('/main/results/quick.mako')
示例#24
0
	def chronology(self):
		return render( '/main/vis/chronology.mako' )
示例#25
0
 def comment(self, id='0'):
     c.profile, c.relations, c.further_relations, template = self.profile(
         id, 'comments', 'comment')
     return render(template)
示例#26
0
 def institution(self, id='0'):
     c.profile, c.relations, c.further_relations, template = self.profile(
         id, 'institutions', 'institution')
     return render(template)
示例#27
0
 def image(self, id='0'):
     c.profile, c.relations, c.further_relations, template = self.profile(
         id, 'images', 'image')
     return render(template)
示例#28
0
 def index(self):
     return render('/main/search.mako')
示例#29
0
    def index(self):

        return render('/main/Four0Four.mako')