mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Added person search through opensearch
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@7518 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1609,6 +1609,7 @@ opensearch_desc=Provides ability to search across multiple OpenSearch supported
|
||||
search_in=Search In
|
||||
no_engines_registered=Failed to find any registered OpenSearch engines!
|
||||
current_repo=Current Alfresco Repository
|
||||
current_repo_people=Current Alfresco People
|
||||
toggle_options=Toggle Options
|
||||
no_results=No results
|
||||
of=of
|
||||
|
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:relevance="http://a9.com/-/opensearch/extensions/relevance/1.0/" xmlns:alf="http://www.alfresco.org/opensearch/1.0/">
|
||||
<generator version="${server.version}">Alfresco (${server.edition})</generator>
|
||||
<title>Alfresco Person Search: ${search.searchTerms}</title>
|
||||
<updated>${xmldate(date)}</updated>
|
||||
<icon>${absurl(url.context)}/images/logo/AlfrescoLogo16.ico</icon>
|
||||
<author>
|
||||
<name><#if person??>${person.properties.userName}<#else>unknown</#if></name>
|
||||
</author>
|
||||
<id>urn:uuid:${search.id}</id>
|
||||
<opensearch:totalResults>${search.totalResults}</opensearch:totalResults>
|
||||
<opensearch:startIndex>${search.startIndex}</opensearch:startIndex>
|
||||
<opensearch:itemsPerPage>${search.itemsPerPage}</opensearch:itemsPerPage>
|
||||
<opensearch:Query role="request" searchTerms="${search.searchTerms}" startPage="${search.startPage}" count="${search.itemsPerPage}" language="${search.localeId}"/>
|
||||
<link rel="alternate" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.startPage}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="text/html"/>
|
||||
<link rel="self" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.startPage}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
<#if search.startPage > 1>
|
||||
<link rel="first" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=1&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
<link rel="previous" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.startPage - 1}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
</#if>
|
||||
<#if search.startPage < search.totalPages>
|
||||
<link rel="next" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.startPage + 1}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
<link rel="last" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.totalPages}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
</#if>
|
||||
<link rel="search" type="application/opensearchdescription+xml" href="${absurl(url.serviceContext)}/api/search/person/description.xml"/>
|
||||
<#list search.results as row>
|
||||
<entry>
|
||||
<title>${row.properties.firstName} ${row.properties.lastName}</title>
|
||||
<link rel="alternate" href="${absurl(url.serviceContext)}"/>
|
||||
<#if row.assocs["cm:avatar"]?exists>
|
||||
<icon>${absurl(url.context)}${row.assocs["cm:avatar"][0].url}</icon>
|
||||
<#else>
|
||||
<icon>${absurl(url.context)}/images/icons/user_large.gif</icon>
|
||||
</#if>
|
||||
<id>urn:uuid:${row.id}</id>
|
||||
<updated>${xmldate(row.properties.modified)}</updated>
|
||||
<summary>
|
||||
<#if row.properties.jobtitle??>${row.properties.jobtitle},</#if>
|
||||
<#if row.properties.organization??>${row.properties.organization},</#if>
|
||||
<#if row.properties.location??>${row.properties.location},</#if>
|
||||
<#--
|
||||
<#if row.properties.persondescription??>${row.properties.persondescription.content}</#if>
|
||||
-->
|
||||
</summary>
|
||||
<relevance:score>${row.score}</relevance:score>
|
||||
</entry>
|
||||
</#list>
|
||||
</feed>
|
@@ -0,0 +1,12 @@
|
||||
<webscript>
|
||||
<shortname>Alfresco Person Search (OpenSearch Enabled)</shortname>
|
||||
<description>Execute Person Search against Alfresco Repository</description>
|
||||
<url>/api/search/person.html?q={searchTerms}&p={startPage?}&c={count?}&l={language?}</url>
|
||||
<url>/search/person.html?q={searchTerms}&p={startPage?}&c={count?}&l={language?}</url>
|
||||
<url>/api/search/person.atom?q={searchTerms}&p={startPage?}&c={count?}&l={language?}</url>
|
||||
<url>/search/person.atom?q={searchTerms}&p={startPage?}&c={count?}&l={language?}</url>
|
||||
<url>/api/search/person.rss?q={searchTerms}&p={startPage?}&c={count?}&l={language?}</url>
|
||||
<url>/search/person.rss?q={searchTerms}&p={startPage?}&c={count?}&l={language?}</url>
|
||||
<url>/api/search/person.portlet?q={searchTerms}&p={startPage?}&c={count?}&l={language?}</url>
|
||||
<authentication>guest</authentication>
|
||||
</webscript>
|
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head profile="http://a9.com/-/spec/opensearch/1.1/">
|
||||
<title>Alfresco Person Search: ${search.searchTerms}</title>
|
||||
<link rel="stylesheet" href="/alfresco/css/main.css" TYPE="text/css">
|
||||
<link rel="search" type="application/opensearchdescription+xml" href="${url.serviceContext}/api/search/person/description.xml" title="Alfresco Person Search"/>
|
||||
<meta name="totalResults" content="${search.totalResults}"/>
|
||||
<meta name="startIndex" content="${search.startIndex}"/>
|
||||
<meta name="itemsPerPage" content="${search.itemsPerPage}"/>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="${url.context}/images/logo/AlfrescoLogo32.png" alt="Alfresco" /></td>
|
||||
<td><nobr><span class="mainTitle">Alfresco Person Search</span></nobr></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Results <b>${search.startIndex}</b> - <b><#if search.startIndex == 0>0<#else>${search.startIndex + search.totalPageItems - 1}</#if></b> of <b>${search.totalResults}</b> for <b>${search.searchTerms}</b> visible to user <b><#if person??>${person.properties.userName}<#else>unknown</#if>.</b></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table>
|
||||
<#list search.results as row>
|
||||
<tr>
|
||||
<td><img src="${url.context}${row.assocs[\"cm:avatar\"][0].url}"/></td><td>${row.firstName} ${row.lastName}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><#if row.properties.jobtitle??>${row.properties.jobtitle},</#if>
|
||||
<#if row.properties.organization??>${row.properties.organization},</#if>
|
||||
<#if row.properties.location??>${row.properties.location},</#if>
|
||||
<#--
|
||||
<#if row.properties.persondescription??>${row.properties.persondescription.content}</#if>
|
||||
-->
|
||||
</td>
|
||||
</tr>
|
||||
</#list>
|
||||
</table>
|
||||
<br>
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=1&c=${search.itemsPerPage}&l=${search.localeId}")}">first</a></td>
|
||||
<#if search.startPage > 1>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=${search.startPage - 1}&c=${search.itemsPerPage}&l=${search.localeId}")}">previous</a></td>
|
||||
</#if>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=${search.startPage}&c=${search.itemsPerPage}&l=${search.localeId}")}">${search.startPage}</a></td>
|
||||
<#if search.startPage < search.totalPages>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=${search.startPage + 1}&c=${search.itemsPerPage}&l=${search.localeId}")}">next</a></td>
|
||||
</#if>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=${search.totalPages}&c=${search.itemsPerPage}&l=${search.localeId}")}">last</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
@@ -0,0 +1,37 @@
|
||||
<table>
|
||||
<tr>
|
||||
<td>Results <b>${search.startIndex}</b> - <b>${search.startIndex + search.totalPageItems - 1}</b> of <b>${search.totalResults}</b> for <b>${search.searchTerms}</b> visible to user <b><#if person??>${person.properties.userName}<#else>unknown</#if>.</b></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table>
|
||||
<#list search.results as row>
|
||||
<tr>
|
||||
<td><img src="${url.context}${row.assocs[\"cm:avatar\"][0].url}"/></td><td>${row.firstName} ${row.lastName}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><#if row.properties.jobtitle??>${row.properties.jobtitle},</#if>
|
||||
<#if row.properties.organization??>${row.properties.organization},</#if>
|
||||
<#if row.properties.location??>${row.properties.location},</#if>
|
||||
<#--
|
||||
<#if row.properties.persondescription??>${row.properties.persondescription.content}</#if>
|
||||
-->
|
||||
</td>
|
||||
</tr>
|
||||
</#list>
|
||||
</table>
|
||||
<br>
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=1&c=${search.itemsPerPage}&l=${search.localeId}")}">first</a></td>
|
||||
<#if search.startPage > 1>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=${search.startPage - 1}&c=${search.itemsPerPage}&l=${search.localeId}")}">previous</a></td>
|
||||
</#if>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=${search.startPage}&c=${search.itemsPerPage}&l=${search.localeId}")}">${search.startPage}</a></td>
|
||||
<#if search.startPage < search.totalPages>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=${search.startPage + 1}&c=${search.itemsPerPage}&l=${search.localeId}")}">next</a></td>
|
||||
</#if>
|
||||
<td><a href="${scripturl("?q=${search.searchTerms?url}&p=${search.totalPages}&c=${search.itemsPerPage}&l=${search.localeId}")}">last</a></td>
|
||||
</tr>
|
||||
</table>
|
@@ -0,0 +1,15 @@
|
||||
(
|
||||
TYPE:"{http://www.alfresco.org/model/content/1.0}person" AND
|
||||
(
|
||||
(
|
||||
<#list 1..terms?size as i>
|
||||
d\:content:${terms[i - 1]} <#if (i < terms?size)> OR </#if>
|
||||
</#list>
|
||||
)
|
||||
(
|
||||
<#list 1..terms?size as i>
|
||||
d\:text:${terms[i - 1]} <#if (i < terms?size)> OR </#if>
|
||||
</#list>
|
||||
)
|
||||
)
|
||||
)
|
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Alfresco Person Search: ${search.searchTerms}</title>
|
||||
<link>${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.startPage}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}"</link>
|
||||
<description>Alfresco Person Search: ${search.searchTerms}</description>
|
||||
<language>${search.localeId}</language>
|
||||
<lastBuildDate>${xmldate(date)}</lastBuildDate>
|
||||
<pubDate>${xmldate(date)}</pubDate>
|
||||
<generator>Alfresco ${server.edition} v${server.version}</generator>
|
||||
<image>
|
||||
<title>Alfresco Search: ${search.searchTerms}</title>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
<url>${absurl(url.context)}/images/logo/AlfrescoLogo16.ico)}</url>
|
||||
</image>
|
||||
<opensearch:totalResults>${search.totalResults}</opensearch:totalResults>
|
||||
<opensearch:startIndex>${search.startIndex}</opensearch:startIndex>
|
||||
<opensearch:itemsPerPage>${search.itemsPerPage}</opensearch:itemsPerPage>
|
||||
<opensearch:Query role="request" searchTerms="${search.searchTerms}" startPage="${search.startPage}" count="${search.itemsPerPage}" language="${search.localeId}"/>
|
||||
<atom:link rel="self" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.startPage}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
<#if search.startPage > 1>
|
||||
<atom:link rel="first" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=1&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
<atom:link rel="previous" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.startPage - 1}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
</#if>
|
||||
<#if search.startPage < search.totalPages>
|
||||
<atom:link rel="next" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.startPage + 1}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
<atom:link rel="last" href="${absurl(scripturl("?q=${search.searchTerms?url}&p=${search.totalPages}&c=${search.itemsPerPage}&l=${search.localeId}")?xml)}" type="application/atom+xml"/>
|
||||
</#if>
|
||||
<atom:link rel="search" type="application/opensearchdescription+xml" href="${absurl(url.serviceContext)}/api/search/person/description.xml"/>
|
||||
<#list search.results as row>
|
||||
<item>
|
||||
<title>${row.firstName} ${row.lastName}</title>
|
||||
<link>${absurl(url.serviceContext)}</link>
|
||||
<description><#if row.properties.jobtitle??>${row.properties.jobtitle},</#if>
|
||||
<#if row.properties.organization??>${row.properties.organization},</#if>
|
||||
<#if row.properties.location??>${row.properties.location},</#if>
|
||||
<#--
|
||||
<#if row.properties.persondescription??>${row.properties.persondescription.content}</#if>
|
||||
-->
|
||||
</description>
|
||||
<pubDate>${xmldate(row.properties.modified)}</pubDate>
|
||||
<guid isPermaLink="false">${row.id}</guid>
|
||||
</item>
|
||||
</#list>
|
||||
</channel>
|
||||
</rss>
|
@@ -0,0 +1,7 @@
|
||||
<webscript>
|
||||
<shortname>Person Search Description</shortname>
|
||||
<description>OpenSearch description document for Alfresco Repository person search</description>
|
||||
<url>/api/search/person/description.xml</url>
|
||||
<url>/search/person/description.xml</url>
|
||||
<format default="opensearchdescription">argument</format>
|
||||
</webscript>
|
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:alf="http://www.alfresco.org">
|
||||
<ShortName>Alfresco Person Search</ShortName>
|
||||
<LongName>Alfresco ${server.edition} Person Search ${server.version}</LongName>
|
||||
<Description>Search Alfresco People using keywords</Description>
|
||||
<#comment>IE takes first template from list, thus html response is listed first</#comment>
|
||||
<Url type="text/html" template="${absurl(url.serviceContext)}/api/search/person?q={searchTerms}&p={startPage?}&c={count?}&l={language?}&guest={alf:guest?}"/>
|
||||
<Url type="application/atom+xml" template="${absurl(url.serviceContext)}/api/search/person.atom?q={searchTerms}&p={startPage?}&c={count?}&l={language?}&guest={alf:guest?}"/>
|
||||
<Url type="application/rss+xml" template="${absurl(url.serviceContext)}/api/search/person.rss?q={searchTerms}&p={startPage?}&c={count?}&l={language?}&guest={alf:guest?}"/>
|
||||
<Image height="16" width="16" type="image/x-icon">${absurl(url.context)}/images/logo/AlfrescoLogo16.ico</Image>
|
||||
</OpenSearchDescription>
|
@@ -178,6 +178,13 @@
|
||||
<property name="repositoryImageResolver" ref="webscripts.repo.imageresolver" />
|
||||
</bean>
|
||||
|
||||
<!-- Alfresco Web Client Person Search (OpenSearch) -->
|
||||
<bean id="webscript.org.alfresco.repository.search.personsearch.get" class="org.alfresco.repo.web.scripts.bean.KeywordSearch" parent="webscript">
|
||||
<property name="searchService" ref="SearchService" />
|
||||
<property name="serviceRegistry" ref="ServiceRegistry" />
|
||||
<property name="repositoryImageResolver" ref="webscripts.repo.imageresolver" />
|
||||
</bean>
|
||||
|
||||
<!-- Alfresco (OpenSearch) Proxy -->
|
||||
<bean id="webscript.org.alfresco.repository.search.searchproxy.get" class="org.alfresco.repo.web.scripts.bean.SearchProxy" parent="webscript">
|
||||
<property name="configService" ref="webscripts.config" />
|
||||
|
@@ -39,6 +39,21 @@
|
||||
</url>
|
||||
</engine>
|
||||
|
||||
<engine label-id="current_repo_people" label="Alfresco Person Search">
|
||||
<url type="application/opensearchdescription+xml">
|
||||
/api/search/person/description.xml
|
||||
</url>
|
||||
<url type="application/atom+xml">
|
||||
/api/search/person.atom?q={searchTerms}&p={startPage?}&c={count?}&l={language?}&guest={alf:guest?}
|
||||
</url>
|
||||
<url type="application/rss+xml">
|
||||
/api/search/person.rss?q={searchTerms}&p={startPage?}&c={count?}&l={language?}&guest={alf:guest?}
|
||||
</url>
|
||||
<url type="text/html">
|
||||
/api/search/person?q={searchTerms}&p={startPage?}&c={count?}&l={language?}&guest={alf:guest?}
|
||||
</url>
|
||||
</engine>
|
||||
|
||||
</engines>
|
||||
|
||||
<proxy>
|
||||
|
Reference in New Issue
Block a user