Merge branch 'maint-rel-1.6' of https://github.com/vivo-project/Vitro into maint-rel-1.6
Conflicts: webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FileGraphSetup.java
This commit is contained in:
commit
754c8004ae
64 changed files with 1174 additions and 925 deletions
126
doc/install.html
126
doc/install.html
|
@ -67,7 +67,7 @@
|
|||
<h4>Vitro inside Tomcat</h4>
|
||||
<p>
|
||||
When you run the build script to compile and deploy Vitro
|
||||
(see <a href="#deploy">installation step VI</a>, below),
|
||||
(see <a href="#deploy">installation step V</a>, below),
|
||||
the files will be deployed to a
|
||||
directory inside Tomcat. This is the actual executing code for Vitro,
|
||||
but you won’t need to look at it or change it. If you need to change
|
||||
|
@ -86,7 +86,7 @@
|
|||
build.properties file (see <a href="#build_properties">installation step IV</a>,
|
||||
below). You must create this directory before starting Vitro,
|
||||
you must create the <code>runtime.properties</code> file in this directory
|
||||
(see <a href="#runtime_properties">Step V</a>, below), and you
|
||||
(see <a href="#runtime_properties">Step VI</a>, below), and you
|
||||
must ensure that Tomcat has permission to read and write to this
|
||||
directory when it runs.
|
||||
</p>
|
||||
|
@ -186,10 +186,10 @@
|
|||
<a href="#build_properties">Specify build properties</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#runtime_properties">Specify runtime properties</a>
|
||||
<a href="#deploy">Compile and deploy</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#deploy">Compile and deploy</a>
|
||||
<a href="#runtime_properties">Specify runtime properties</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#tomcat_settings">Configure Tomcat</a>
|
||||
|
@ -226,20 +226,19 @@
|
|||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Java (SE) 1.6 or higher, <a href="http://java.sun.com">http://java.sun.com</a>
|
||||
(Not OpenJDK)
|
||||
Java (SE) 1.7.x <a href="http://java.sun.com">http://java.sun.com</a>
|
||||
<ul>
|
||||
<li>VIVO has not been tested with OpenJDK</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
Apache Tomcat 6.x or higher, <a href="http://tomcat.apache.org">http://tomcat.apache.org</a>
|
||||
Apache Tomcat 6.x or 7.x <a href="http://tomcat.apache.org">http://tomcat.apache.org</a>
|
||||
</li>
|
||||
<li>
|
||||
Apache Ant 1.8 or higher, <a href="http://ant.apache.org">http://ant.apache.org</a>
|
||||
</li>
|
||||
<li>
|
||||
MySQL 5.1 or higher*, <a href="http://www.mysql.com">http://www.mysql.com</a>
|
||||
</li>
|
||||
<li>
|
||||
Apache Subversion 1.6.x or higher*, <a href="http://subversion.apache.org/">http://subversion.apache.org/</a>
|
||||
MySQL 5.1 or higher, <a href="http://www.mysql.com">http://www.mysql.com</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
|
@ -320,8 +319,8 @@
|
|||
<p>
|
||||
These properties are used in compilation and deployment.
|
||||
They will be incorporated into Vitro when it is compiled in
|
||||
<a href="#deploy">Step VI</a>. If you want to change these properties at
|
||||
a later date, you will need to stop Tomcat, repeat <a href="#deploy">Step VI</a>,
|
||||
<a href="#deploy">Step V</a>. If you want to change these properties at
|
||||
a later date, you will need to stop Tomcat, repeat <a href="#deploy">Step V</a>,
|
||||
and restart Tomcat.
|
||||
</p>
|
||||
<p>
|
||||
|
@ -394,22 +393,64 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="runtime_properties">V. Specify runtime properties </h3>
|
||||
<h3 id="deploy">V. Compile and deploy</h3>
|
||||
<p>
|
||||
In <a href="#build_properties">Step IV</a>, you defined the location of the Vitro home directory,
|
||||
In <a href="#build_properties">Step IV</a>, you defined the location of the VIVO home directory,
|
||||
by specifying <code>vitro.home</code> in the <code>build.properties</code> file.
|
||||
Create that directory now.
|
||||
</p>
|
||||
<p>
|
||||
In the <code>webapp/config</code> subdirectory of the Vitro distribution, you will find a file called
|
||||
<code>example.runtime.properties</code>. Copy this to the Vitro home directory you have created,
|
||||
renaming the copy to <code>runtime.properties</code>.
|
||||
Edit the file to suit your installation, as described in the following table.
|
||||
At the command line, change to the <code>webapp</code> directory inside the Vitro distribution
|
||||
directory. Then type:
|
||||
</p>
|
||||
<pre> ant all<br> </pre>
|
||||
<p>
|
||||
to build Vitro and deploy to Tomcat's webapps directory.
|
||||
</p>
|
||||
<p>
|
||||
The build script may run for as much as five minutes,
|
||||
and creates more than 100 lines of output.
|
||||
The process comprises several steps:
|
||||
<ul>
|
||||
<li>collecting the source files from the distribution directory,</li>
|
||||
<li>compiling the Java source code,</li>
|
||||
<li>compiling and running unit tests,</li>
|
||||
<li>preparing the Solr search engine,</li>
|
||||
<li>deploying Vitro and Solr to Tomcat.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>
|
||||
The output of the build may include a variety of warning messages.
|
||||
The Java compiler may warn of code that is outdated.
|
||||
Unit tests may produce warning messages,
|
||||
and some tests may be ignored if they do not produce consistent results.
|
||||
</p>
|
||||
<table align="center"><tr><td>
|
||||
BUILD SUCCESSFUL<br>Total time: 1 minute 49 seconds
|
||||
</td></tr></table>
|
||||
<p>
|
||||
If the output ends with a success message, the build was successful.
|
||||
Proceed to the next step.
|
||||
</p>
|
||||
<table align="center"><tr><td>
|
||||
BUILD FAILED<br>Total time: 35 seconds
|
||||
</td></tr></table>
|
||||
<p>
|
||||
If the output ends with a failure message, the build has failed.
|
||||
Find the cause of the failure, fix the problem, and run the script again.
|
||||
</p>
|
||||
|
||||
<h3 id="runtime_properties">VI. Specify runtime properties </h3>
|
||||
<p>
|
||||
The build process in <a href="deploy">Step V</a> created a file called <code>example.runtime.properties</code>
|
||||
in your Vitro home directory (<code>vitro.home</code> in the <code>build.properties</code> file).
|
||||
Rename this file to <code>runtime.properties</code>, and
|
||||
edit the file to suit your installation, as described in the following table.
|
||||
</p>
|
||||
<p>
|
||||
These properties are loaded when Vitro starts up. If you want to change these
|
||||
properties at a later date, you will need to restart Tomcat for them to take
|
||||
effect. You will not need to repeat <a href="#deploy">Step VI</a>.
|
||||
effect. You will not need to repeat <a href="#deploy">Step V</a>.
|
||||
</p>
|
||||
<p>
|
||||
<em>Windows:</em>
|
||||
|
@ -800,47 +841,6 @@
|
|||
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="deploy">VI. Compile and deploy</h3>
|
||||
<p>
|
||||
At the command line, change to the <code>webapp</code> directory inside the Vitro distribution
|
||||
directory. Then type:
|
||||
</p>
|
||||
<pre> ant all<br> </pre>
|
||||
<p>
|
||||
to build Vitro and deploy to Tomcat's webapps directory.
|
||||
</p>
|
||||
<p>
|
||||
The build script may run for as much as five minutes,
|
||||
and creates more than 100 lines of output.
|
||||
The process comprises several steps:
|
||||
<ul>
|
||||
<li>collecting the source files from the distribution directory,</li>
|
||||
<li>compiling the Java source code,</li>
|
||||
<li>compiling and running unit tests,</li>
|
||||
<li>preparing the Solr search engine,</li>
|
||||
<li>deploying Vitro and Solr to Tomcat.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>
|
||||
The output of the build may include a variety of warning messages.
|
||||
The Java compiler may warn of code that is outdated.
|
||||
Unit tests may produce warning messages,
|
||||
and some tests may be ignored if they do not produce consistent results.
|
||||
</p>
|
||||
<table align="center"><tr><td>
|
||||
BUILD SUCCESSFUL<br>Total time: 1 minute 49 seconds
|
||||
</td></tr></table>
|
||||
<p>
|
||||
If the output ends with a success message, the build was successful.
|
||||
Proceed to the next step.
|
||||
</p>
|
||||
<table align="center"><tr><td>
|
||||
BUILD FAILED<br>Total time: 35 seconds
|
||||
</td></tr></table>
|
||||
<p>
|
||||
If the output ends with a failure message, the build has failed.
|
||||
Find the cause of the failure, fix the problem, and run the script again.
|
||||
</p>
|
||||
|
||||
<h3 id="tomcat_settings">VII. Configure Tomcat</h3>
|
||||
<h4>Set JVM parameters</h4>
|
||||
|
@ -921,8 +921,8 @@
|
|||
problem is detected, the normal Vitro pages will redirect
|
||||
to a startup status page describing the problem. You
|
||||
can stop tomcat, attempt to fix the problem and
|
||||
proceeded from <a href="#deploy">Step VI</a>. The
|
||||
startup status page may offer a continue link which
|
||||
proceed from <a href="#deploy">Step V</a>. If the problem is not serious, the
|
||||
startup status page may offer a <code>continue</code> link which
|
||||
will allow you to use VIVO in spite of the problems.
|
||||
</p>
|
||||
<p>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Here is an excellent description of how to create a Firefox profile for use when running Selenium tests.
|
||||
|
||||
Here is an excellent description of how to create a Firefox profile for use when running Selenium tests.
|
||||
|
||||
http://girliemangalo.wordpress.com/2009/02/05/creating-firefox-profile-for-your-selenium-rc-tests/
|
|
@ -102,6 +102,24 @@
|
|||
<target name="deployProperties" depends="buildProperties">
|
||||
<fail unless="vitro.home" message="${build.properties.file} must contain a value for vitro.home" />
|
||||
<fail unless="tomcat.home" message="${build.properties.file} must contain a value for tomcat.home" />
|
||||
<fail>
|
||||
<condition>
|
||||
<not>
|
||||
<available file="${tomcat.home}" />
|
||||
</not>
|
||||
</condition>
|
||||
Tomcat home directory '${tomcat.home}' does not exist.
|
||||
Check the value of 'tomcat.home' in your build.properties file.
|
||||
</fail>
|
||||
<fail>
|
||||
<condition>
|
||||
<not>
|
||||
<available file="${tomcat.home}/webapps" />
|
||||
</not>
|
||||
</condition>
|
||||
'${tomcat.home}' does not refer to a valid Tomcat instance: it has no 'webapps' sub-directory.
|
||||
Check the value of 'tomcat.home' in your build.properties file."
|
||||
</fail>
|
||||
|
||||
<property name="solr.home.dir" location="${vitro.home}/solr" />
|
||||
|
||||
|
|
|
@ -126,10 +126,6 @@ submit_add_new_account = Añadir nueva cuenta
|
|||
|
||||
account_created = Su {0} cuenta ha sido creada.
|
||||
account_created_subject = Su {0} cuenta ha sido creada.
|
||||
account_created_email_html = @@file files/accountCreatedEmail.html
|
||||
account_created_email_text = @@file files/accountCreatedEmail.txt
|
||||
account_created_external_email_html = @@file files/accountCreatedExternalOnlyEmail.html
|
||||
account_created_external_email_text = @@file files/accountCreatedExternalOnlyEmail.txt
|
||||
|
||||
confirm_delete_account_singular = ¿Está seguro de que desea eliminar esta cuenta?
|
||||
confirm_delete_account_plural = ¿Está seguro de que desea eliminar estas cuentas?
|
||||
|
@ -148,21 +144,11 @@ select_associated_profile = Seleccione el perfil asociado
|
|||
create_associated_profile = Cree el perfil asociado
|
||||
|
||||
email_changed_subject = Su {0} cuenta de correo electrónico ha cambiado.
|
||||
email_changed_html = @@file files/accountEmailChanged.html
|
||||
email_changed_text = @@file files/accountEmailChanged.txt
|
||||
|
||||
create_your_password = Crea tu Contraseña
|
||||
password_created_subject = Su {0} contraseña ha sido creado con éxito.
|
||||
password_created_email_html = @@file files/passwordCreatedEmail.html
|
||||
password_created_email_text = @@file files/passwordCreatedEmail.txt
|
||||
|
||||
password_reset_pending_subject = {0} restablecer solicitud de contraseña
|
||||
password_reset_pending_email_html = @@file files/passwordResetPending.html
|
||||
password_reset_pending_email_text = @@file files/passwordResetPending.txt
|
||||
|
||||
password_reset_complete_subject = Su {0} ha cambiado la contraseña.
|
||||
password_reset_complete_email_html = @@file files/passwordResetComplete.html
|
||||
password_reset_complete_email_text = @@file files/passwordResetComplete.txt
|
||||
|
||||
reset_your_password = Renovar su contraseña
|
||||
first_time_login = Log Por primera vez en
|
||||
|
@ -181,8 +167,6 @@ password_saved_please_login = Su contraseña ha sido guardada. Por favor, ingres
|
|||
|
||||
please_provide_contact_information = Por favor proporcione su información de contacto para terminar de crear la cuenta.
|
||||
first_time_login_note = Nota: Un correo electrónico será enviado a la dirección indicada anteriormente notificar que una cuenta ha sido creada.
|
||||
first_time_external_email_html = @@file files/accountFirstTimeExternal.html
|
||||
first_time_external_email_text = @@file files/accountFirstTimeExternal.txt
|
||||
|
||||
myAccount_heading = Mi cuenta
|
||||
myAccount_confirm_changes = Los cambios se han guardado.
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#-- Confirmation that an account has been created. -->
|
||||
|
||||
<#assign subject = "Su cuenta ${siteName} ha sido creado." />
|
||||
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Enhorabuena!</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Hemos creado la nueva cuenta en ${siteName}, asociada con ${userAccount.emailAddress}.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Si no has solicitado esta nueva cuenta puede ignorar este mensaje.
|
||||
Esta solicitud caducará si no se hubiere pronunciado sobre durante 30 días.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Haga clic en el enlace de abajo para crear la contraseña de su cuenta usando nuestro servidor seguro.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="${passwordLink}" title="password">${passwordLink}</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Si el enlace no funciona, puedes copiar y pegar el enlace directamente en la barra de direcciones de su navegador.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
¡Gracias!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Enhorabuena!
|
||||
|
||||
Hemos creado la nueva cuenta en ${siteName},
|
||||
asociada con ${userAccount.emailAddress}.
|
||||
|
||||
Si no has solicitado esta nueva cuenta puede ignorar este mensaje.
|
||||
Esta solicitud caducará si no se hubiere pronunciado sobre durante 30 días.
|
||||
|
||||
Pega el siguiente enlace en la barra de direcciones de su navegador para
|
||||
crear su contraseña para su nueva cuenta usando nuestro servidor seguro.
|
||||
|
||||
${passwordLink}
|
||||
|
||||
¡Gracias!
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,43 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#-- Confirmation that an account has been created. -->
|
||||
|
||||
<#assign subject = "Su cuenta ${siteName} ha sido creada." />
|
||||
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>¡Enhorabuena!</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Hemos creado la nueva cuenta VIVO asociado con ${userAccount.emailAddress}.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
¡Gracias!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
¡Enhorabuena!
|
||||
|
||||
Hemos creado la nueva cuenta VIVO asociado con
|
||||
${userAccount.emailAddress}.
|
||||
|
||||
¡Gracias!
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,38 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#-- Confirmation that the user has changed his email account. -->
|
||||
|
||||
<#assign subject = "Su cuenta de correo electrónico ${siteName} ha cambiado." />
|
||||
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Hola, ${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Ha cambiado recientemente la dirección de correo electrónico asociada a
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Gracias.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
Hola, ${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Ha cambiado recientemente la dirección de correo electrónico asociada a
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Gracias.
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,43 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#-- Confirmation that an account has been created for an externally-authenticated user. -->
|
||||
|
||||
<#assign subject = "Su cuenta ${siteName} ha sido creada." />
|
||||
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>¡Enhorabuena!</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Hemos creado la nueva cuenta VIVO asociado con ${userAccount.emailAddress}.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
¡Gracias!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
¡Enhorabuena!
|
||||
|
||||
Hemos creado la nueva cuenta VIVO asociado con
|
||||
${userAccount.emailAddress}.
|
||||
|
||||
¡Gracias!
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,43 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#-- Confirmation that an password has been created. -->
|
||||
|
||||
<#assign subject = "El ${siteName} contraseña ha sido creado con éxito." />
|
||||
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Contraseña creado con éxito.</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Su nueva contraseña asociada con ${userAccount.emailAddress} se ha creado.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Gracias.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Contraseña creado con éxito.
|
||||
|
||||
Su nueva contraseña asociada con ${userAccount.emailAddress}
|
||||
se ha creado.
|
||||
|
||||
Gracias.
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,44 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#-- Confirmation that a password has been reset. -->
|
||||
|
||||
<#assign subject = "El ${siteName} contraseña cambiada." />
|
||||
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Contraseña cambiada con éxito.</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Su nueva contraseña asociada con ${userAccount.emailAddress} ha sido cambiado.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Gracias.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Contraseña cambiada con éxito.
|
||||
|
||||
Su nueva contraseña asociada con ${userAccount.emailAddress}
|
||||
ha sido cambiado.
|
||||
|
||||
Gracias.
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,62 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#-- Confirmation email for user account password reset -->
|
||||
|
||||
<#assign subject = "${siteName} restablecer solicitud de contraseña" />
|
||||
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Estimado ${userAccount.firstName} ${userAccount.lastName}:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Hemos recibido una solicitud para restablecer la contraseña de su cuenta ${siteName}
|
||||
(${userAccount.emailAddress}).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Por favor, siga las siguientes instrucciones para proceder con su restablecimiento de contraseña.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Si no has solicitado esta nueva cuenta puede ignorar este mensaje.
|
||||
Esta solicitud caducará si no se hubiere pronunciado en un plazo de 30 días.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Haga clic en el enlace de abajo o pegarlo en la barra de direcciones de su navegador para
|
||||
restablecer su contraseña usando nuestro servidor seguro.
|
||||
</p>
|
||||
|
||||
<p>${passwordLink}</p>
|
||||
|
||||
<p>¡Gracias!</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
Estimado ${userAccount.firstName} ${userAccount.lastName}:
|
||||
|
||||
Hemos recibido una solicitud para restablecer la contraseña de su cuenta ${siteName}
|
||||
(${userAccount.emailAddress}).
|
||||
|
||||
Por favor, siga las siguientes instrucciones para proceder con su restablecimiento de contraseña.
|
||||
|
||||
Si no has solicitado esta nueva cuenta puede ignorar este mensaje.
|
||||
Esta solicitud caducará si no se hubiere pronunciado en un plazo de 30 días.
|
||||
|
||||
Pega el siguiente enlace en la barra de direcciones de su navegador para
|
||||
restablecer su contraseña usando nuestro servidor seguro.
|
||||
|
||||
${passwordLink}
|
||||
|
||||
¡Gracias!
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
|
@ -11,7 +11,6 @@ import com.hp.hpl.jena.ontology.OntModel;
|
|||
import com.hp.hpl.jena.ontology.OntModelSpec;
|
||||
import com.hp.hpl.jena.rdf.model.Model;
|
||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
||||
import com.hp.hpl.jena.rdf.model.Property;
|
||||
import com.hp.hpl.jena.rdf.model.RDFNode;
|
||||
import com.hp.hpl.jena.rdf.model.Resource;
|
||||
import com.hp.hpl.jena.rdf.model.Statement;
|
||||
|
@ -20,7 +19,6 @@ import com.hp.hpl.jena.rdf.model.StmtIterator;
|
|||
import edu.cornell.mannlib.vitro.webapp.auth.identifier.ActiveIdentifierBundleFactories;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.identifier.RequestIdentifiers;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.PolicyIface;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction;
|
||||
|
@ -136,7 +134,8 @@ public class PolicyHelper {
|
|||
.asResource().getURI());
|
||||
} else {
|
||||
action = new AddDataPropertyStatement(modelToBeModified,
|
||||
subject.getURI(), predicate.getURI());
|
||||
subject.getURI(), predicate.getURI(), objectNode
|
||||
.asLiteral().getString());
|
||||
}
|
||||
return isAuthorizedForActions(req, action);
|
||||
}
|
||||
|
@ -169,7 +168,8 @@ public class PolicyHelper {
|
|||
.asResource().getURI());
|
||||
} else {
|
||||
action = new DropDataPropertyStatement(modelToBeModified,
|
||||
subject.getURI(), predicate.getURI());
|
||||
subject.getURI(), predicate.getURI(), objectNode
|
||||
.asLiteral().getString());
|
||||
}
|
||||
return isAuthorizedForActions(req, action);
|
||||
}
|
||||
|
|
|
@ -16,15 +16,17 @@ public abstract class AbstractDataPropertyStatementAction extends
|
|||
private final String subjectUri;
|
||||
private final String predicateUri;
|
||||
private final Property predicate;
|
||||
private final String dataValue;
|
||||
|
||||
public AbstractDataPropertyStatementAction(OntModel ontModel,
|
||||
String subjectUri, String predicateUri) {
|
||||
String subjectUri, String predicateUri, String dataValue) {
|
||||
super(ontModel);
|
||||
this.subjectUri = subjectUri;
|
||||
this.predicateUri = predicateUri;
|
||||
Property dataProperty = new Property();
|
||||
dataProperty.setURI(predicateUri);
|
||||
this.predicate = dataProperty;
|
||||
this.dataValue = dataValue;
|
||||
}
|
||||
|
||||
public AbstractDataPropertyStatementAction(OntModel ontModel,
|
||||
|
@ -36,12 +38,14 @@ public abstract class AbstractDataPropertyStatementAction extends
|
|||
Property dataProperty = new Property();
|
||||
dataProperty.setURI(predicateUri);
|
||||
this.predicate = dataProperty;
|
||||
this.dataValue = dps.getData();
|
||||
}
|
||||
|
||||
public String getSubjectUri() {
|
||||
return subjectUri;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Property getPredicate() {
|
||||
return predicate;
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@ public class AddDataPropertyStatement extends
|
|||
AbstractDataPropertyStatementAction {
|
||||
|
||||
public AddDataPropertyStatement(OntModel ontModel, String subjectUri,
|
||||
String predicateUri) {
|
||||
super(ontModel, subjectUri, predicateUri);
|
||||
String predicateUri, String dataValue) {
|
||||
super(ontModel, subjectUri, predicateUri, dataValue);
|
||||
}
|
||||
|
||||
public AddDataPropertyStatement(OntModel ontModel, DataPropertyStatement dps) {
|
||||
|
|
|
@ -14,8 +14,8 @@ public class DropDataPropertyStatement extends
|
|||
AbstractDataPropertyStatementAction {
|
||||
|
||||
public DropDataPropertyStatement(OntModel ontModel, String subjectUri,
|
||||
String predicateUri) {
|
||||
super(ontModel, subjectUri, predicateUri);
|
||||
String predicateUri, String dataValue) {
|
||||
super(ontModel, subjectUri, predicateUri, dataValue);
|
||||
}
|
||||
|
||||
public DropDataPropertyStatement(OntModel ontModel,
|
||||
|
|
|
@ -12,8 +12,8 @@ import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
|||
public class EditDataPropertyStatement extends
|
||||
AbstractDataPropertyStatementAction {
|
||||
public EditDataPropertyStatement(OntModel ontModel, String subjectUri,
|
||||
String predicateUri) {
|
||||
super(ontModel, subjectUri, predicateUri);
|
||||
String predicateUri, String dataValue) {
|
||||
super(ontModel, subjectUri, predicateUri, dataValue);
|
||||
}
|
||||
|
||||
public EditDataPropertyStatement(OntModel ontModel,
|
||||
|
|
|
@ -13,10 +13,7 @@ import javax.servlet.ServletContext;
|
|||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.solr.client.solrj.SolrQuery;
|
||||
import org.apache.solr.client.solrj.SolrServer;
|
||||
import org.apache.solr.client.solrj.SolrServerException;
|
||||
import org.apache.solr.client.solrj.response.QueryResponse;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||
|
@ -25,9 +22,8 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
|||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ExceptionResponseValues;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.individuallist.IndividualListResults;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames;
|
||||
import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.solr.SolrQueryUtils;
|
||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual;
|
||||
|
||||
|
@ -94,16 +90,15 @@ public class IndividualListController extends FreemarkerHttpServlet {
|
|||
|
||||
String alpha = getAlphaParameter(vreq);
|
||||
int page = getPageParameter(vreq);
|
||||
Map<String,Object> map = getResultsForVClass(
|
||||
IndividualListResults vcResults = getResultsForVClass(
|
||||
vclass.getURI(),
|
||||
page,
|
||||
alpha,
|
||||
vreq.getWebappDaoFactory().getIndividualDao(),
|
||||
getServletContext());
|
||||
body.putAll(map);
|
||||
body.putAll(vcResults.asFreemarkerMap());
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Individual> inds = (List<Individual>)map.get("entities");
|
||||
List<Individual> inds = vcResults.getEntities();
|
||||
List<ListedIndividual> indsTm = new ArrayList<ListedIndividual>();
|
||||
if (inds != null) {
|
||||
for ( Individual ind : inds ) {
|
||||
|
@ -154,13 +149,12 @@ public class IndividualListController extends FreemarkerHttpServlet {
|
|||
return SolrQueryUtils.getPageParameter(request);
|
||||
}
|
||||
|
||||
public static Map<String,Object> getResultsForVClass(String vclassURI, int page, String alpha, IndividualDao indDao, ServletContext context)
|
||||
public static IndividualListResults getResultsForVClass(String vclassURI, int page, String alpha, IndividualDao indDao, ServletContext context)
|
||||
throws SearchException{
|
||||
Map<String,Object> rvMap = new HashMap<String,Object>();
|
||||
try{
|
||||
List<String> classUris = Collections.singletonList(vclassURI);
|
||||
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteVClassQuery(classUris, alpha, page, INDIVIDUALS_PER_PAGE, context, indDao);
|
||||
rvMap = getResultsForVClassQuery(results, page, INDIVIDUALS_PER_PAGE, alpha);
|
||||
return getResultsForVClassQuery(results, page, INDIVIDUALS_PER_PAGE, alpha);
|
||||
} catch (SolrServerException e) {
|
||||
String msg = "An error occurred retrieving results for vclass query";
|
||||
log.error(msg, e);
|
||||
|
@ -168,31 +162,29 @@ public class IndividualListController extends FreemarkerHttpServlet {
|
|||
throw new SearchException(msg);
|
||||
} catch(Throwable th) {
|
||||
log.error("An error occurred retrieving results for vclass query", th);
|
||||
return IndividualListResults.EMPTY;
|
||||
}
|
||||
return rvMap;
|
||||
}
|
||||
|
||||
public static Map<String,Object> getResultsForVClassIntersections(List<String> vclassURIs, int page, int pageSize, String alpha, IndividualDao indDao, ServletContext context) {
|
||||
Map<String,Object> rvMap = new HashMap<String,Object>();
|
||||
public static IndividualListResults getResultsForVClassIntersections(List<String> vclassURIs, int page, int pageSize, String alpha, IndividualDao indDao, ServletContext context) {
|
||||
try{
|
||||
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteVClassQuery(vclassURIs, alpha, page, pageSize, context, indDao);
|
||||
rvMap = getResultsForVClassQuery(results, page, pageSize, alpha);
|
||||
return getResultsForVClassQuery(results, page, pageSize, alpha);
|
||||
} catch(Throwable th) {
|
||||
log.error("Error retrieving individuals corresponding to intersection multiple classes." + vclassURIs.toString(), th);
|
||||
return IndividualListResults.EMPTY;
|
||||
}
|
||||
return rvMap;
|
||||
}
|
||||
|
||||
public static Map<String,Object> getRandomResultsForVClass(String vclassURI, int page, int pageSize, IndividualDao indDao, ServletContext context) {
|
||||
Map<String,Object> rvMap = new HashMap<String,Object>();
|
||||
public static IndividualListResults getRandomResultsForVClass(String vclassURI, int page, int pageSize, IndividualDao indDao, ServletContext context) {
|
||||
try{
|
||||
List<String> classUris = Collections.singletonList(vclassURI);
|
||||
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteRandomVClassQuery(classUris, page, pageSize, context, indDao);
|
||||
rvMap = getResultsForVClassQuery(results, page, pageSize, "");
|
||||
return getResultsForVClassQuery(results, page, pageSize, "");
|
||||
} catch(Throwable th) {
|
||||
log.error("An error occurred retrieving random results for vclass query", th);
|
||||
return IndividualListResults.EMPTY;
|
||||
}
|
||||
return rvMap;
|
||||
}
|
||||
|
||||
//TODO: Get rid of this method and utilize SolrQueryUtils - currently appears to be referenced
|
||||
|
@ -201,24 +193,13 @@ public class IndividualListController extends FreemarkerHttpServlet {
|
|||
return SolrQueryUtils.getIndividualCount(vclassUris, indDao, context);
|
||||
}
|
||||
|
||||
private static Map<String,Object> getResultsForVClassQuery(IndividualListQueryResults results, int page, int pageSize, String alpha) {
|
||||
Map<String,Object> rvMap = new HashMap<String,Object>();
|
||||
|
||||
private static IndividualListResults getResultsForVClassQuery(IndividualListQueryResults results, int page, int pageSize, String alpha) {
|
||||
long hitCount = results.getHitCount();
|
||||
if ( hitCount > pageSize ){
|
||||
rvMap.put("showPages", Boolean.TRUE);
|
||||
List<PageRecord> pageRecords = makePagesList(hitCount, pageSize, page);
|
||||
rvMap.put("pages", pageRecords);
|
||||
return new IndividualListResults(hitCount, results.getIndividuals(), alpha, true, makePagesList(hitCount, pageSize, page));
|
||||
}else{
|
||||
rvMap.put("showPages", Boolean.FALSE);
|
||||
rvMap.put("pages", Collections.emptyList());
|
||||
return new IndividualListResults(hitCount, results.getIndividuals(), alpha, false, Collections.<PageRecord>emptyList());
|
||||
}
|
||||
|
||||
rvMap.put("alpha",alpha);
|
||||
rvMap.put("totalCount", hitCount);
|
||||
rvMap.put("entities", results.getIndividuals());
|
||||
|
||||
return rvMap;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -4,11 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.controller.individual;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.SelfEditingConfiguration;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
|
@ -22,18 +17,13 @@ import edu.cornell.mannlib.vitro.webapp.filestorage.model.FileInfo;
|
|||
*/
|
||||
public class IndividualRequestAnalysisContextImpl implements
|
||||
IndividualRequestAnalysisContext {
|
||||
private static final Log log = LogFactory
|
||||
.getLog(IndividualRequestAnalysisContextImpl.class);
|
||||
|
||||
|
||||
private final VitroRequest vreq;
|
||||
private final ServletContext ctx;
|
||||
|
||||
private final VitroRequest vreq;
|
||||
private final WebappDaoFactory wadf;
|
||||
private final IndividualDao iDao;
|
||||
|
||||
public IndividualRequestAnalysisContextImpl(VitroRequest vreq) {
|
||||
this.vreq = vreq;
|
||||
this.ctx = vreq.getSession().getServletContext();
|
||||
this.vreq = vreq;
|
||||
this.wadf = vreq.getWebappDaoFactory();
|
||||
this.iDao = wadf.getIndividualDao();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.webapp.controller.individuallist;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||
|
||||
/**
|
||||
* Wrap an Individual in a JSON object for display by the script.
|
||||
*
|
||||
* This will be overridden in VIVO so we can have more info in the display.
|
||||
*/
|
||||
public class IndividualJsonWrapper {
|
||||
static JSONObject packageIndividualAsJson(VitroRequest vreq, Individual ind)
|
||||
throws JSONException {
|
||||
// need an unfiltered dao to get firstnames and lastnames
|
||||
WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
|
||||
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("URI", ind.getURI());
|
||||
jo.put("label", ind.getRdfsLabel());
|
||||
jo.put("name", ind.getName());
|
||||
jo.put("thumbUrl", ind.getThumbUrl());
|
||||
jo.put("imageUrl", ind.getImageUrl());
|
||||
jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
|
||||
jo.put("mostSpecificTypes", getMostSpecificTypes(ind, fullWdf));
|
||||
return jo;
|
||||
}
|
||||
|
||||
public static Collection<String> getMostSpecificTypes(
|
||||
Individual individual, WebappDaoFactory wdf) {
|
||||
ObjectPropertyStatementDao opsDao = wdf.getObjectPropertyStatementDao();
|
||||
Map<String, String> mostSpecificTypes = opsDao
|
||||
.getMostSpecificTypesInClassgroupsForIndividual(individual
|
||||
.getURI());
|
||||
return mostSpecificTypes.values();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.webapp.controller.individuallist;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
|
||||
|
||||
/**
|
||||
* These are the paged results of a query for Individuals.
|
||||
*
|
||||
* The criteria for the search are the index of the desired page, the number of
|
||||
* results displayed on each page, and an optional initial letter to search
|
||||
* against.
|
||||
*
|
||||
* By the time this is built, the results have already been partially processed.
|
||||
* A list of PageRecord object is included, with values that the GUI can use to
|
||||
* create Alphabetical links. Maybe this processing should have been done later.
|
||||
* Maybe it should have been left to the GUI.
|
||||
*/
|
||||
public class IndividualListResults {
|
||||
private static final Log log = LogFactory
|
||||
.getLog(IndividualListResults.class);
|
||||
|
||||
public static final IndividualListResults EMPTY = new IndividualListResults();
|
||||
|
||||
private final long totalCount;
|
||||
private final List<Individual> entities;
|
||||
private final String alpha;
|
||||
private final boolean showPages;
|
||||
private final List<PageRecord> pages;
|
||||
|
||||
public IndividualListResults(long totalCount, List<Individual> entities,
|
||||
String alpha, boolean showPages, List<PageRecord> pages) {
|
||||
this.totalCount = totalCount;
|
||||
this.entities = entities;
|
||||
this.alpha = alpha;
|
||||
this.showPages = showPages;
|
||||
this.pages = pages;
|
||||
}
|
||||
|
||||
private IndividualListResults() {
|
||||
this(0L, Collections.<Individual> emptyList(), "", false, Collections
|
||||
.<PageRecord> emptyList());
|
||||
}
|
||||
|
||||
public long getTotalCount() {
|
||||
return totalCount;
|
||||
}
|
||||
|
||||
public String getAlpha() {
|
||||
return alpha;
|
||||
}
|
||||
|
||||
public List<Individual> getEntities() {
|
||||
return entities;
|
||||
}
|
||||
|
||||
public List<PageRecord> getPages() {
|
||||
return pages;
|
||||
}
|
||||
|
||||
public boolean isShowPages() {
|
||||
return showPages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Some controllers put this data directly into the Freemarker body map.
|
||||
* Others wrap it in JSON.
|
||||
*/
|
||||
public Map<String, Object> asFreemarkerMap() {
|
||||
Map<String, Object> m = new HashMap<>();
|
||||
m.put("showPages", showPages);
|
||||
m.put("pages", pages);
|
||||
m.put("alpha", alpha);
|
||||
m.put("totalCount", totalCount);
|
||||
m.put("entities", entities);
|
||||
return m;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,148 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.webapp.controller.individuallist;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
|
||||
|
||||
/**
|
||||
* Utility methods for procesing the paged results of a query for a list of Individuals.
|
||||
*
|
||||
* Right now, there is only a method to wrap the results in Json.
|
||||
*/
|
||||
public class IndividualListResultsUtils {
|
||||
private static final Log log = LogFactory
|
||||
.getLog(IndividualListResultsUtils.class);
|
||||
|
||||
/**
|
||||
* Process results related to VClass or vclasses. Handles both single and
|
||||
* multiple vclasses being sent.
|
||||
*/
|
||||
public static JSONObject wrapIndividualListResultsInJson(IndividualListResults results, VitroRequest vreq,
|
||||
boolean multipleVclasses) {
|
||||
JSONObject rObj = new JSONObject();
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
dumpParametersFromRequest(vreq);
|
||||
}
|
||||
|
||||
try {
|
||||
List<VClass> vclasses = buildListOfRequestedVClasses(vreq);
|
||||
|
||||
VClass vclass = null;
|
||||
// if single vclass expected, then include vclass.
|
||||
// This relates to what the expected behavior is, not size of list
|
||||
if (!multipleVclasses) {
|
||||
vclass = vclasses.get(0);
|
||||
// currently used for ClassGroupPage
|
||||
} else {
|
||||
// For now, utilize very last VClass (assume that that is the one to be employed)
|
||||
// TODO: Find more general way of dealing with this: put multiple ones in?
|
||||
vclass = vclasses.get(vclasses.size() - 1);
|
||||
// rObj.put("vclasses", new JSONObject().put("URIs",vitroClassIdStr).put("name",vclass.getName()));
|
||||
}
|
||||
|
||||
rObj.put("vclass", packageVClassAsJson(vclass));
|
||||
rObj.put("totalCount", results.getTotalCount());
|
||||
rObj.put("alpha", results.getAlpha());
|
||||
rObj.put("individuals", packageIndividualsAsJson(vreq, results.getEntities()));
|
||||
rObj.put("pages", packagePageRecordsAsJson(results.getPages()));
|
||||
rObj.put("letters", packageLettersAsJson());
|
||||
} catch (Exception ex) {
|
||||
log.error("Error occurred in processing JSON object", ex);
|
||||
}
|
||||
return rObj;
|
||||
}
|
||||
|
||||
private static List<VClass> buildListOfRequestedVClasses(VitroRequest vreq)
|
||||
throws Exception {
|
||||
String[] vitroClassIdStr = vreq.getParameterValues("vclassId");
|
||||
if (ArrayUtils.isEmpty(vitroClassIdStr)) {
|
||||
log.error("parameter vclassId URI parameter expected ");
|
||||
throw new Exception("parameter vclassId URI parameter expected ");
|
||||
}
|
||||
|
||||
List<VClass> list = new ArrayList<>();
|
||||
for (String vclassId : vitroClassIdStr) {
|
||||
VClass vclass = vreq.getWebappDaoFactory().getVClassDao()
|
||||
.getVClassByURI(vclassId);
|
||||
if (vclass == null) {
|
||||
log.error("Couldn't retrieve vclass ");
|
||||
throw new Exception("Class " + vclassId + " not found");
|
||||
}
|
||||
list.add(vclass);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private static JSONObject packageVClassAsJson(VClass vclass)
|
||||
throws JSONException {
|
||||
JSONObject jvclass = new JSONObject();
|
||||
jvclass.put("URI", vclass.getURI());
|
||||
jvclass.put("name", vclass.getName());
|
||||
return jvclass;
|
||||
}
|
||||
|
||||
private static JSONArray packageLettersAsJson() throws JSONException,
|
||||
UnsupportedEncodingException {
|
||||
List<String> letters = Controllers.getLetters();
|
||||
JSONArray jletters = new JSONArray();
|
||||
for (String s : letters) {
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("text", s);
|
||||
jo.put("param", "alpha=" + URLEncoder.encode(s, "UTF-8"));
|
||||
jletters.put(jo);
|
||||
}
|
||||
return jletters;
|
||||
}
|
||||
|
||||
private static JSONArray packagePageRecordsAsJson(List<PageRecord> pages)
|
||||
throws JSONException {
|
||||
JSONArray wpages = new JSONArray();
|
||||
for (PageRecord pr : pages) {
|
||||
JSONObject p = new JSONObject();
|
||||
p.put("text", pr.text);
|
||||
p.put("param", pr.param);
|
||||
p.put("index", pr.index);
|
||||
wpages.put(p);
|
||||
}
|
||||
return wpages;
|
||||
}
|
||||
|
||||
private static JSONArray packageIndividualsAsJson(VitroRequest vreq,
|
||||
List<Individual> inds) throws JSONException {
|
||||
log.debug("Number of individuals returned from request: " + inds.size());
|
||||
|
||||
JSONArray jInds = new JSONArray();
|
||||
for (Individual ind : inds) {
|
||||
jInds.put(IndividualJsonWrapper.packageIndividualAsJson(vreq, ind));
|
||||
}
|
||||
return jInds;
|
||||
}
|
||||
|
||||
private static void dumpParametersFromRequest(VitroRequest vreq) {
|
||||
Map<String, String[]> pMap = vreq.getParameterMap();
|
||||
for (String name : pMap.keySet()) {
|
||||
for (String value : pMap.get(name)) {
|
||||
log.debug("value for " + name + ": '" + value + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -3,11 +3,8 @@
|
|||
package edu.cornell.mannlib.vitro.webapp.controller.json;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -18,18 +15,15 @@ import javax.servlet.http.HttpServletResponse;
|
|||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.individuallist.IndividualListResultsUtils;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.individuallist.IndividualListResults;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.log.LogUtils;
|
||||
|
@ -94,29 +88,28 @@ public class JsonServlet extends VitroHttpServlet {
|
|||
List<String> vclassURIs = Collections.singletonList(vclassURI);
|
||||
VitroRequest vreq = new VitroRequest(req);
|
||||
|
||||
Map<String, Object> map = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
|
||||
IndividualListResults vcResults = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
|
||||
//last parameter indicates single vclass instead of multiple vclasses
|
||||
return processVclassResultsJSON(map, vreq, false);
|
||||
return IndividualListResultsUtils.wrapIndividualListResultsInJson(vcResults, vreq, false);
|
||||
}
|
||||
|
||||
public static JSONObject getSolrIndividualsByVClasses(List<String> vclassURIs, HttpServletRequest req, ServletContext context) throws Exception {
|
||||
VitroRequest vreq = new VitroRequest(req);
|
||||
log.debug("Retrieve solr results for vclasses" + vclassURIs.toString());
|
||||
Map<String, Object> map = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
|
||||
log.debug("Results returned from Solr for " + vclassURIs.toString() + " are of size " + map.size());
|
||||
IndividualListResults vcResults = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
|
||||
log.debug("Results returned from Solr for " + vclassURIs.toString() + " are of size " + vcResults.getTotalCount());
|
||||
|
||||
return processVclassResultsJSON(map, vreq, true);
|
||||
return IndividualListResultsUtils.wrapIndividualListResultsInJson(vcResults, vreq, true);
|
||||
}
|
||||
|
||||
//Including version for Solr query for Vclass Intersections
|
||||
private static Map<String,Object> getSolrVClassIntersectionResults(List<String> vclassURIs, VitroRequest vreq, ServletContext context){
|
||||
private static IndividualListResults getSolrVClassIntersectionResults(List<String> vclassURIs, VitroRequest vreq, ServletContext context){
|
||||
log.debug("Retrieving Solr intersection results for " + vclassURIs.toString());
|
||||
String alpha = IndividualListController.getAlphaParameter(vreq);
|
||||
int page = IndividualListController.getPageParameter(vreq);
|
||||
log.debug("Alpha and page parameters are " + alpha + " and " + page);
|
||||
Map<String,Object> map = null;
|
||||
try {
|
||||
map = IndividualListController.getResultsForVClassIntersections(
|
||||
return IndividualListController.getResultsForVClassIntersections(
|
||||
vclassURIs,
|
||||
page, INDIVIDUALS_PER_PAGE,
|
||||
alpha,
|
||||
|
@ -124,23 +117,10 @@ public class JsonServlet extends VitroHttpServlet {
|
|||
context);
|
||||
} catch(Exception ex) {
|
||||
log.error("Error in retrieval of search results for VClass " + vclassURIs.toString(), ex);
|
||||
return IndividualListResults.EMPTY;
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
// Map given to process method includes the actual individuals returned from the search
|
||||
// public static JSONObject processVClassResults(Map<String, Object> map, VitroRequest vreq, ServletContext context, boolean multipleVclasses) throws Exception{
|
||||
// JSONObject rObj = processVclassResultsJSON(map, vreq, multipleVclasses);
|
||||
// return rObj;
|
||||
// }
|
||||
|
||||
public static Collection<String> getMostSpecificTypes(Individual individual, WebappDaoFactory wdf) {
|
||||
ObjectPropertyStatementDao opsDao = wdf.getObjectPropertyStatementDao();
|
||||
Map<String, String> mostSpecificTypes = opsDao.getMostSpecificTypesInClassgroupsForIndividual(individual.getURI());
|
||||
return mostSpecificTypes.values();
|
||||
}
|
||||
|
||||
public static String getDataPropertyValue(Individual ind, DataProperty dp, WebappDaoFactory wdf){
|
||||
String value = ind.getDataValue(dp.getURI());
|
||||
if( value == null || value.isEmpty() )
|
||||
|
@ -152,21 +132,20 @@ public class JsonServlet extends VitroHttpServlet {
|
|||
public static JSONObject getRandomSolrIndividualsByVClass(String vclassURI, HttpServletRequest req, ServletContext context) throws Exception {
|
||||
VitroRequest vreq = new VitroRequest(req);
|
||||
|
||||
Map<String, Object> map = getRandomSolrVClassResults(vclassURI, vreq, context);
|
||||
IndividualListResults vcResults = getRandomSolrVClassResults(vclassURI, vreq, context);
|
||||
//last parameter indicates single vclass instead of multiple vclasses
|
||||
return processVclassResultsJSON(map, vreq, false);
|
||||
return IndividualListResultsUtils.wrapIndividualListResultsInJson(vcResults, vreq, false);
|
||||
}
|
||||
|
||||
//Including version for Random Solr query for Vclass Intersections
|
||||
private static Map<String,Object> getRandomSolrVClassResults(String vclassURI, VitroRequest vreq, ServletContext context){
|
||||
private static IndividualListResults getRandomSolrVClassResults(String vclassURI, VitroRequest vreq, ServletContext context){
|
||||
log.debug("Retrieving random Solr intersection results for " + vclassURI);
|
||||
|
||||
int page = IndividualListController.getPageParameter(vreq);
|
||||
int pageSize = Integer.parseInt(vreq.getParameter("pageSize"));
|
||||
log.debug("page and pageSize parameters = " + page + " and " + pageSize);
|
||||
Map<String,Object> map = null;
|
||||
try {
|
||||
map = IndividualListController.getRandomResultsForVClass(
|
||||
return IndividualListController.getRandomResultsForVClass(
|
||||
vclassURI,
|
||||
page,
|
||||
pageSize,
|
||||
|
@ -174,126 +153,8 @@ public class JsonServlet extends VitroHttpServlet {
|
|||
context);
|
||||
} catch(Exception ex) {
|
||||
log.error("Error in retrieval of search results for VClass " + vclassURI, ex);
|
||||
return IndividualListResults.EMPTY;
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process results related to VClass or vclasses. Handles both single and multiple vclasses being sent.
|
||||
*/
|
||||
public static JSONObject processVclassResultsJSON(Map<String, Object> map, VitroRequest vreq, boolean multipleVclasses) {
|
||||
JSONObject rObj = new JSONObject();
|
||||
VClass vclass=null;
|
||||
|
||||
try {
|
||||
|
||||
// Properties from ontologies used by VIVO - should not be in vitro
|
||||
DataProperty fNameDp = (new DataProperty());
|
||||
fNameDp.setURI("http://xmlns.com/foaf/0.1/firstName");
|
||||
DataProperty lNameDp = (new DataProperty());
|
||||
lNameDp.setURI("http://xmlns.com/foaf/0.1/lastName");
|
||||
DataProperty preferredTitleDp = (new DataProperty());
|
||||
preferredTitleDp.setURI("http://vivoweb.org/ontology/core#preferredTitle");
|
||||
|
||||
if( log.isDebugEnabled() ){
|
||||
@SuppressWarnings("unchecked")
|
||||
Enumeration<String> e = vreq.getParameterNames();
|
||||
while(e.hasMoreElements()){
|
||||
String name = e.nextElement();
|
||||
log.debug("parameter: " + name);
|
||||
for( String value : vreq.getParameterValues(name) ){
|
||||
log.debug("value for " + name + ": '" + value + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//need an unfiltered dao to get firstnames and lastnames
|
||||
WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
|
||||
|
||||
String[] vitroClassIdStr = vreq.getParameterValues("vclassId");
|
||||
if ( vitroClassIdStr != null && vitroClassIdStr.length > 0){
|
||||
for(String vclassId: vitroClassIdStr) {
|
||||
vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassId);
|
||||
if (vclass == null) {
|
||||
log.error("Couldn't retrieve vclass ");
|
||||
throw new Exception ("Class " + vclassId + " not found");
|
||||
}
|
||||
}
|
||||
}else{
|
||||
log.error("parameter vclassId URI parameter expected ");
|
||||
throw new Exception("parameter vclassId URI parameter expected ");
|
||||
}
|
||||
List<String> vclassIds = Arrays.asList(vitroClassIdStr);
|
||||
//if single vclass expected, then include vclass. This relates to what the expected behavior is, not size of list
|
||||
if(!multipleVclasses) {
|
||||
//currently used for ClassGroupPage
|
||||
rObj.put("vclass",
|
||||
new JSONObject().put("URI",vclass.getURI())
|
||||
.put("name",vclass.getName()));
|
||||
} else {
|
||||
//For now, utilize very last VClass (assume that that is the one to be employed)
|
||||
//TODO: Find more general way of dealing with this
|
||||
//put multiple ones in?
|
||||
if(vclassIds.size() > 0) {
|
||||
int numberVClasses = vclassIds.size();
|
||||
vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassIds.get(numberVClasses - 1));
|
||||
rObj.put("vclass", new JSONObject().put("URI",vclass.getURI())
|
||||
.put("name",vclass.getName()));
|
||||
}
|
||||
// rObj.put("vclasses", new JSONObject().put("URIs",vitroClassIdStr)
|
||||
// .put("name",vclass.getName()));
|
||||
}
|
||||
if (vclass != null) {
|
||||
|
||||
rObj.put("totalCount", map.get("totalCount"));
|
||||
rObj.put("alpha", map.get("alpha"));
|
||||
|
||||
List<Individual> inds = (List<Individual>)map.get("entities");
|
||||
log.debug("Number of individuals returned from request: " + inds.size());
|
||||
JSONArray jInds = new JSONArray();
|
||||
for(Individual ind : inds ){
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("URI", ind.getURI());
|
||||
jo.put("label",ind.getRdfsLabel());
|
||||
jo.put("name",ind.getName());
|
||||
jo.put("thumbUrl", ind.getThumbUrl());
|
||||
jo.put("imageUrl", ind.getImageUrl());
|
||||
jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
|
||||
|
||||
jo.put("mostSpecificTypes", JsonServlet.getMostSpecificTypes(ind,fullWdf));
|
||||
jo.put("preferredTitle", JsonServlet.getDataPropertyValue(ind, preferredTitleDp, fullWdf));
|
||||
|
||||
jInds.put(jo);
|
||||
}
|
||||
rObj.put("individuals", jInds);
|
||||
|
||||
JSONArray wpages = new JSONArray();
|
||||
//Made sure that PageRecord here is SolrIndividualListController not IndividualListController
|
||||
List<PageRecord> pages = (List<PageRecord>)map.get("pages");
|
||||
for( PageRecord pr: pages ){
|
||||
JSONObject p = new JSONObject();
|
||||
p.put("text", pr.text);
|
||||
p.put("param", pr.param);
|
||||
p.put("index", pr.index);
|
||||
wpages.put( p );
|
||||
}
|
||||
rObj.put("pages",wpages);
|
||||
|
||||
JSONArray jletters = new JSONArray();
|
||||
List<String> letters = Controllers.getLetters();
|
||||
for( String s : letters){
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("text", s);
|
||||
jo.put("param", "alpha=" + URLEncoder.encode(s, "UTF-8"));
|
||||
jletters.put( jo );
|
||||
}
|
||||
rObj.put("letters", jletters);
|
||||
}
|
||||
} catch(Exception ex) {
|
||||
log.error("Error occurred in processing JSON object", ex);
|
||||
}
|
||||
return rObj;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator
|
|||
|
||||
initBasics(conf, vreq);
|
||||
initPropertyParameters(vreq, session, conf);
|
||||
initObjectPropForm(conf, vreq);
|
||||
initObjectPropForm(conf, vreq);
|
||||
|
||||
conf.setTemplate(this.getTemplate());
|
||||
|
||||
|
@ -126,6 +126,7 @@ public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator
|
|||
public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
|
||||
HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
|
||||
formSpecificData.put("editMode", getEditMode(vreq).name().toLowerCase());
|
||||
formSpecificData.put("domainUri", getDomainUri(vreq));
|
||||
editConfiguration.setFormSpecificData(formSpecificData);
|
||||
}
|
||||
|
||||
|
@ -140,4 +141,10 @@ public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator
|
|||
}
|
||||
return editMode;
|
||||
}
|
||||
|
||||
private String getDomainUri(VitroRequest vreq) {
|
||||
String domainUri = vreq.getParameter("domainUri");
|
||||
|
||||
return domainUri;
|
||||
}
|
||||
}
|
|
@ -1,6 +1,10 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
|
||||
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_PREDICATE;
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_URI;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
@ -24,14 +28,12 @@ import com.hp.hpl.jena.vocabulary.RDFS;
|
|||
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddDataPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
|
||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
|
||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
|
||||
|
@ -271,11 +273,10 @@ public class ManageLabelsForIndividualGenerator extends BaseEditConfigurationGen
|
|||
Individual individual = EditConfigurationUtils.getIndividual(vreq, config.getSubjectUri());
|
||||
AddDataPropertyStatement adps = new AddDataPropertyStatement(
|
||||
vreq.getJenaOntModel(), individual.getURI(),
|
||||
RequestActionConstants.SOME_URI);
|
||||
SOME_URI, SOME_LITERAL);
|
||||
AddObjectPropertyStatement aops = new AddObjectPropertyStatement(
|
||||
vreq.getJenaOntModel(), individual.getURI(),
|
||||
RequestActionConstants.SOME_PREDICATE,
|
||||
RequestActionConstants.SOME_URI);
|
||||
SOME_PREDICATE, SOME_URI);
|
||||
return PolicyHelper.isAuthorizedForActions(vreq, new Actions(adps).or(aops));
|
||||
}
|
||||
|
||||
|
|
|
@ -55,6 +55,15 @@ public class PostEditCleanupController extends FreemarkerHttpServlet{
|
|||
return new RedirectResponseValues( UrlBuilder.getHomeUrl() );
|
||||
}
|
||||
|
||||
//In some cases, a generator/form may have a regular URL to return to but the same generator
|
||||
//may be used from different pages, so a parameter allowing the form to return to a specific page
|
||||
//would be useful
|
||||
|
||||
String returnURLParameter = vreq.getParameter("returnURL");
|
||||
if(returnURLParameter != null) {
|
||||
return new DirectRedirectResponseValues( returnURLParameter );
|
||||
}
|
||||
|
||||
// If there is a urlToReturnTo that takes precedence
|
||||
if( editConfig.getUrlToReturnTo() != null && ! editConfig.getUrlToReturnTo().trim().isEmpty()){
|
||||
//this does not get value substitution or the predicate anchor
|
||||
|
|
|
@ -439,9 +439,13 @@ public class FakeApplicationOntologyService {
|
|||
* "display model". The query finds a preferred title for the individual.
|
||||
*/
|
||||
private static class FakeVivoPeopleDataGetter extends SparqlQueryDataGetter {
|
||||
private static final String QUERY_STRING = "SELECT ?uri ?pt WHERE {\n"
|
||||
+ " ?uri <http://vivoweb.org/ontology/core#preferredTitle> ?pt\n"
|
||||
+ "} LIMIT 1";
|
||||
private static String QUERY_STRING = ""
|
||||
+ "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
||||
+ "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
||||
+ "SELECT ?uri ?pt \n" + "WHERE { \n"
|
||||
+ " ?uri obo:ARG_2000028 ?vIndividual . \n"
|
||||
+ " ?vIndividual vcard:hasTitle ?vTitle . \n"
|
||||
+ " ?vTitle vcard:title ?pt . \n" + "} LIMIT 1";
|
||||
|
||||
private static final String FAKE_VIVO_PEOPLE_DATA_GETTER_URI = "http://FakeVivoPeopleDataGetter";
|
||||
|
||||
|
|
|
@ -188,6 +188,7 @@ public class FileGraphSetup implements ServletContextListener {
|
|||
baseModel.add(model);
|
||||
}
|
||||
log.info("Attached file graph as " + type + " submodel " + p.getFileName());
|
||||
|
||||
}
|
||||
|
||||
modelChanged = modelChanged | updateGraphInDB(dataset, model, type, p);
|
||||
|
|
|
@ -87,14 +87,23 @@ public class RDFFilesLoader {
|
|||
OntModel model) {
|
||||
OntModel everytimeModel = ModelFactory
|
||||
.createOntologyModel(OntModelSpec.OWL_MEM);
|
||||
Set<Path> paths = getPaths(locateHomeDirectory(ctx), RDF, modelPath,
|
||||
EVERY_TIME);
|
||||
String home = locateHomeDirectory(ctx);
|
||||
Set<Path> paths = getPaths(home, RDF, modelPath, EVERY_TIME);
|
||||
for (Path p : paths) {
|
||||
log.info("Loading " + relativePath(p, home));
|
||||
readOntologyFileIntoModel(p, everytimeModel);
|
||||
}
|
||||
model.addSubModel(everytimeModel);
|
||||
}
|
||||
|
||||
private static Path relativePath(Path p, String home) {
|
||||
try {
|
||||
return Paths.get(home).relativize(p);
|
||||
} catch (Exception e) {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a model from all the RDF files in the specified directory.
|
||||
*/
|
||||
|
@ -148,7 +157,7 @@ public class RDFFilesLoader {
|
|||
|
||||
private static void readOntologyFileIntoModel(Path p, Model model) {
|
||||
String format = getRdfFormat(p);
|
||||
log.info("Loading "+ p);
|
||||
log.debug("Loading "+ p);
|
||||
try (InputStream stream = new FileInputStream(p.toFile())) {
|
||||
model.read(stream, null, format);
|
||||
log.debug("...successful");
|
||||
|
|
|
@ -3,10 +3,7 @@ package edu.cornell.mannlib.vitro.webapp.utils.dataGetter;
|
|||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -17,7 +14,6 @@ import javax.servlet.http.HttpServletRequest;
|
|||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import com.hp.hpl.jena.query.Query;
|
||||
|
@ -35,20 +31,13 @@ import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
|||
import com.hp.hpl.jena.shared.Lock;
|
||||
import com.hp.hpl.jena.vocabulary.OWL;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
|
||||
|
||||
|
||||
|
@ -324,123 +313,6 @@ public class DataGetterUtils {
|
|||
return classGroupUri;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process results related to VClass or vclasses. Handles both single and multiple vclasses being sent.
|
||||
*/
|
||||
public static JSONObject processVclassResultsJSON(Map<String, Object> map, VitroRequest vreq, boolean multipleVclasses) {
|
||||
JSONObject rObj = new JSONObject();
|
||||
VClass vclass=null;
|
||||
|
||||
try {
|
||||
|
||||
// Properties from ontologies used by VIVO - should not be in vitro
|
||||
DataProperty fNameDp = (new DataProperty());
|
||||
fNameDp.setURI("http://xmlns.com/foaf/0.1/firstName");
|
||||
DataProperty lNameDp = (new DataProperty());
|
||||
lNameDp.setURI("http://xmlns.com/foaf/0.1/lastName");
|
||||
DataProperty preferredTitleDp = (new DataProperty());
|
||||
preferredTitleDp.setURI("http://vivoweb.org/ontology/core#preferredTitle");
|
||||
|
||||
if( log.isDebugEnabled() ){
|
||||
@SuppressWarnings("unchecked")
|
||||
Enumeration<String> e = vreq.getParameterNames();
|
||||
while(e.hasMoreElements()){
|
||||
String name = e.nextElement();
|
||||
log.debug("parameter: " + name);
|
||||
for( String value : vreq.getParameterValues(name) ){
|
||||
log.debug("value for " + name + ": '" + value + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//need an unfiltered dao to get firstnames and lastnames
|
||||
WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
|
||||
|
||||
String[] vitroClassIdStr = vreq.getParameterValues("vclassId");
|
||||
if ( vitroClassIdStr != null && vitroClassIdStr.length > 0){
|
||||
for(String vclassId: vitroClassIdStr) {
|
||||
vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassId);
|
||||
if (vclass == null) {
|
||||
log.error("Couldn't retrieve vclass ");
|
||||
throw new Exception ("Class " + vclassId + " not found");
|
||||
}
|
||||
}
|
||||
}else{
|
||||
log.error("parameter vclassId URI parameter expected ");
|
||||
throw new Exception("parameter vclassId URI parameter expected ");
|
||||
}
|
||||
List<String> vclassIds = Arrays.asList(vitroClassIdStr);
|
||||
//if single vclass expected, then include vclass. This relates to what the expected behavior is, not size of list
|
||||
if(!multipleVclasses) {
|
||||
//currently used for ClassGroupPage
|
||||
rObj.put("vclass",
|
||||
new JSONObject().put("URI",vclass.getURI())
|
||||
.put("name",vclass.getName()));
|
||||
} else {
|
||||
//For now, utilize very last VClass (assume that that is the one to be employed)
|
||||
//TODO: Find more general way of dealing with this
|
||||
//put multiple ones in?
|
||||
if(vclassIds.size() > 0) {
|
||||
int numberVClasses = vclassIds.size();
|
||||
vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassIds.get(numberVClasses - 1));
|
||||
rObj.put("vclass", new JSONObject().put("URI",vclass.getURI())
|
||||
.put("name",vclass.getName()));
|
||||
}
|
||||
// rObj.put("vclasses", new JSONObject().put("URIs",vitroClassIdStr)
|
||||
// .put("name",vclass.getName()));
|
||||
}
|
||||
if (vclass != null) {
|
||||
|
||||
rObj.put("totalCount", map.get("totalCount"));
|
||||
rObj.put("alpha", map.get("alpha"));
|
||||
|
||||
List<Individual> inds = (List<Individual>)map.get("entities");
|
||||
log.debug("Number of individuals returned from request: " + inds.size());
|
||||
JSONArray jInds = new JSONArray();
|
||||
for(Individual ind : inds ){
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("URI", ind.getURI());
|
||||
jo.put("label",ind.getRdfsLabel());
|
||||
jo.put("name",ind.getName());
|
||||
jo.put("thumbUrl", ind.getThumbUrl());
|
||||
jo.put("imageUrl", ind.getImageUrl());
|
||||
jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
|
||||
|
||||
jo.put("mostSpecificTypes", JsonServlet.getMostSpecificTypes(ind,fullWdf));
|
||||
jo.put("preferredTitle", JsonServlet.getDataPropertyValue(ind, preferredTitleDp, fullWdf));
|
||||
|
||||
jInds.put(jo);
|
||||
}
|
||||
rObj.put("individuals", jInds);
|
||||
|
||||
JSONArray wpages = new JSONArray();
|
||||
//Made sure that PageRecord here is SolrIndividualListController not IndividualListController
|
||||
List<PageRecord> pages = (List<PageRecord>)map.get("pages");
|
||||
for( PageRecord pr: pages ){
|
||||
JSONObject p = new JSONObject();
|
||||
p.put("text", pr.text);
|
||||
p.put("param", pr.param);
|
||||
p.put("index", pr.index);
|
||||
wpages.put( p );
|
||||
}
|
||||
rObj.put("pages",wpages);
|
||||
|
||||
JSONArray jletters = new JSONArray();
|
||||
List<String> letters = Controllers.getLetters();
|
||||
for( String s : letters){
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("text", s);
|
||||
jo.put("param", "alpha=" + URLEncoder.encode(s, "UTF-8"));
|
||||
jletters.put( jo );
|
||||
}
|
||||
rObj.put("letters", jletters);
|
||||
}
|
||||
} catch(Exception ex) {
|
||||
log.error("Error occurred in processing JSON object", ex);
|
||||
}
|
||||
return rObj;
|
||||
}
|
||||
|
||||
private static final String forClassGroupURI = "<" + DisplayVocabulary.FOR_CLASSGROUP + ">";
|
||||
|
||||
private static final String classGroupForDataGetterQuery =
|
||||
|
|
|
@ -353,14 +353,15 @@ public class IndividualsForClassesDataGetter extends DataGetterBase implements D
|
|||
public String getDataServiceUrl() {
|
||||
return UrlBuilder.getUrl("/dataservice?getRenderedSolrIndividualsByVClass=1&vclassId=");
|
||||
}
|
||||
|
||||
/**
|
||||
* For processig of JSONObject
|
||||
*/
|
||||
public JSONObject convertToJSON(Map<String, Object> map, VitroRequest vreq) {
|
||||
JSONObject rObj = DataGetterUtils.processVclassResultsJSON(map, vreq, true);
|
||||
public JSONObject convertToJSON(Map<String, Object> dataMap, VitroRequest vreq) {
|
||||
JSONObject rObj = null;
|
||||
return rObj;
|
||||
}
|
||||
|
||||
|
||||
protected static void setAllClassCountsToZero(VClassGroup vcg){
|
||||
for(VClass vc : vcg){
|
||||
vc.setEntityCount(0);
|
||||
|
|
|
@ -3,9 +3,7 @@ package edu.cornell.mannlib.vitro.webapp.utils.dataGetter;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -23,7 +21,6 @@ import com.hp.hpl.jena.query.QuerySolutionMap;
|
|||
import com.hp.hpl.jena.query.ResultSet;
|
||||
import com.hp.hpl.jena.rdf.model.Literal;
|
||||
import com.hp.hpl.jena.rdf.model.Model;
|
||||
import com.hp.hpl.jena.rdf.model.RDFNode;
|
||||
import com.hp.hpl.jena.rdf.model.Resource;
|
||||
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
||||
import com.hp.hpl.jena.shared.Lock;
|
||||
|
@ -33,8 +30,9 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
|||
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.SearchException;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.individuallist.IndividualListResults;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.solr.SolrQueryUtils;
|
||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual;
|
||||
|
@ -174,16 +172,15 @@ public class SolrIndividualsDataGetter extends DataGetterBase implements DataGet
|
|||
try {
|
||||
String alpha = SolrQueryUtils.getAlphaParameter(vreq);
|
||||
int page = SolrQueryUtils.getPageParameter(vreq);
|
||||
Map<String,Object> map = IndividualListController.getResultsForVClass(
|
||||
IndividualListResults vcResults = IndividualListController.getResultsForVClass(
|
||||
vclass.getURI(),
|
||||
page,
|
||||
alpha,
|
||||
vreq.getWebappDaoFactory().getIndividualDao(),
|
||||
vreq.getSession().getServletContext());
|
||||
body.putAll(map);
|
||||
body.putAll(vcResults.asFreemarkerMap());
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Individual> inds = (List<Individual>)map.get("entities");
|
||||
List<Individual> inds = vcResults.getEntities();
|
||||
List<ListedIndividual> indsTm = new ArrayList<ListedIndividual>();
|
||||
if (inds != null) {
|
||||
for ( Individual ind : inds ) {
|
||||
|
|
|
@ -4,8 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.utils.solr;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -20,9 +18,7 @@ import org.apache.solr.client.solrj.SolrServerException;
|
|||
import org.apache.solr.client.solrj.response.QueryResponse;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListQueryResults;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.SearchException;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames;
|
||||
import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup;
|
||||
|
|
|
@ -666,7 +666,13 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel {
|
|||
//this url is for canceling
|
||||
public String getCancelUrl() {
|
||||
String editKey = editConfig.getEditKey();
|
||||
return EditConfigurationUtils.getCancelUrlBase(vreq) + "?editKey=" + editKey + "&cancel=true";
|
||||
String cancelURL = EditConfigurationUtils.getCancelUrlBase(vreq) + "?editKey=" + editKey + "&cancel=true";
|
||||
//Check for special return url parameter
|
||||
String returnURLParameter = vreq.getParameter("returnURL");
|
||||
if(returnURLParameter != null && !returnURLParameter.isEmpty() ) {
|
||||
cancelURL += "&returnURL=" + returnURLParameter;
|
||||
}
|
||||
return cancelURL;
|
||||
}
|
||||
|
||||
//Get confirm deletion url
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
||||
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_PREDICATE;
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_URI;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -16,7 +20,6 @@ import edu.cornell.mannlib.vedit.beans.LoginStatusBean;
|
|||
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddDataPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
||||
|
@ -116,11 +119,10 @@ public abstract class BaseIndividualTemplateModel extends BaseTemplateModel {
|
|||
public boolean isEditable() {
|
||||
AddDataPropertyStatement adps = new AddDataPropertyStatement(
|
||||
vreq.getJenaOntModel(), individual.getURI(),
|
||||
RequestActionConstants.SOME_URI);
|
||||
SOME_URI, SOME_LITERAL);
|
||||
AddObjectPropertyStatement aops = new AddObjectPropertyStatement(
|
||||
vreq.getJenaOntModel(), individual.getURI(),
|
||||
RequestActionConstants.SOME_PREDICATE,
|
||||
RequestActionConstants.SOME_URI);
|
||||
SOME_PREDICATE, SOME_URI);
|
||||
return PolicyHelper.isAuthorizedForActions(vreq, new Actions(adps).or(aops));
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
||||
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
@ -118,7 +120,7 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel {
|
|||
|
||||
// Determine whether a new statement can be added
|
||||
RequestedAction action = new AddDataPropertyStatement(
|
||||
vreq.getJenaOntModel(), subjectUri, propertyUri);
|
||||
vreq.getJenaOntModel(), subjectUri, propertyUri, SOME_LITERAL);
|
||||
if ( ! PolicyHelper.isAuthorizedForActions(vreq, action) ) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.auth.policy;
|
|||
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization.AUTHORIZED;
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization.INCONCLUSIVE;
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static junit.framework.Assert.assertNull;
|
||||
|
@ -31,6 +32,7 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.RebuildTextIn
|
|||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.RemoveUser;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.ServerStatus;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.UpdateTextIndex;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ontology.CreateOwlClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ontology.DefineDataProperty;
|
||||
|
@ -125,19 +127,19 @@ public class SelfEditingPolicyTest extends AbstractTestClass {
|
|||
|
||||
// now with dataprop statements
|
||||
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
||||
"http://mannlib.cornell.edu/bad#prp234");
|
||||
"http://mannlib.cornell.edu/bad#prp234", SOME_LITERAL);
|
||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||
|
||||
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
||||
"http://mannlib.cornell.edu/bad#prp999");
|
||||
"http://mannlib.cornell.edu/bad#prp999", SOME_LITERAL);
|
||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||
|
||||
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
||||
SAFE_PREDICATE.getURI());
|
||||
SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
||||
|
||||
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
||||
UNSAFE_PREDICATE.getURI());
|
||||
UNSAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||
}
|
||||
|
||||
|
@ -219,16 +221,16 @@ public class SelfEditingPolicyTest extends AbstractTestClass {
|
|||
//
|
||||
@Test
|
||||
public void testVisitIdentifierBundleEditDataPropStmt() {
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI,SAFE_PREDICATE.getURI());
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI,SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
||||
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI, UNSAFE_PREDICATE.getURI());
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI, UNSAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, UNSAFE_RESOURCE, SAFE_PREDICATE.getURI());
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, UNSAFE_RESOURCE, SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SAFE_RESOURCE, SAFE_PREDICATE.getURI());
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SAFE_RESOURCE, SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||
}
|
||||
|
||||
|
@ -288,7 +290,7 @@ public class SelfEditingPolicyTest extends AbstractTestClass {
|
|||
public void twoSEIsFindDataPropertySubject() {
|
||||
setUpTwoSEIs();
|
||||
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI, SAFE_PREDICATE.getURI());
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI, SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
||||
}
|
||||
|
||||
|
@ -296,7 +298,7 @@ public class SelfEditingPolicyTest extends AbstractTestClass {
|
|||
public void twoSEIsDontFindInDataProperty() {
|
||||
setUpTwoSEIs();
|
||||
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SAFE_RESOURCE, SAFE_PREDICATE.getURI());
|
||||
whatToAuth = new EditDataPropertyStatement(ontModel, SAFE_RESOURCE, SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
package edu.cornell.mannlib.vitro.webapp.auth.policy;
|
||||
|
||||
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
@ -306,7 +308,7 @@ public class SelfEditingPolicy_2_Test extends AbstractTestClass {
|
|||
private void assertEditDataPropStmt(String individualURI,
|
||||
String datapropURI, String data, Authorization expectedAuthorization) {
|
||||
EditDataPropertyStatement whatToAuth = new EditDataPropertyStatement(
|
||||
ontModel, individualURI, datapropURI);
|
||||
ontModel, individualURI, datapropURI, SOME_LITERAL);
|
||||
PolicyDecision dec = policy.isAuthorized(ids, whatToAuth);
|
||||
log.debug(dec);
|
||||
Assert.assertNotNull(dec);
|
||||
|
|
|
@ -134,10 +134,6 @@ submit_add_new_account = Add new account
|
|||
|
||||
account_created = Your {0} account has been created.
|
||||
account_created_subject = Your {0} account has been created.
|
||||
account_created_email_html = @@file files/accountCreatedEmail.html
|
||||
account_created_email_text = @@file files/accountCreatedEmail.txt
|
||||
account_created_external_email_html = @@file files/accountCreatedExternalOnlyEmail.html
|
||||
account_created_external_email_text = @@file files/accountCreatedExternalOnlyEmail.txt
|
||||
|
||||
confirm_delete_account_singular = Are you sure you want to delete this account?
|
||||
confirm_delete_account_plural = Are you sure you want to delete these accounts?
|
||||
|
@ -156,21 +152,11 @@ select_associated_profile = Select the associated profile
|
|||
create_associated_profile = Create the associated profile
|
||||
|
||||
email_changed_subject = Your {0} email account has been changed.
|
||||
email_changed_html = @@file files/accountEmailChanged.html
|
||||
email_changed_text = @@file files/accountEmailChanged.txt
|
||||
|
||||
create_your_password = Create your Password
|
||||
password_created_subject = Your {0} password has successfully been created.
|
||||
password_created_email_html = @@file files/passwordCreatedEmail.html
|
||||
password_created_email_text = @@file files/passwordCreatedEmail.txt
|
||||
|
||||
password_reset_pending_subject = {0} reset password request
|
||||
password_reset_pending_email_html = @@file files/passwordResetPending.html
|
||||
password_reset_pending_email_text = @@file files/passwordResetPending.txt
|
||||
|
||||
password_reset_complete_subject = Your {0} password changed.
|
||||
password_reset_complete_email_html = @@file files/passwordResetComplete.html
|
||||
password_reset_complete_email_text = @@file files/passwordResetComplete.txt
|
||||
|
||||
reset_your_password = Reset your Password
|
||||
first_time_login = First time log in
|
||||
|
@ -193,8 +179,6 @@ password_saved_please_login = Your password has been saved. Please log in.
|
|||
please_provide_contact_information = Please provide your contact information to finish creating your account.
|
||||
first_time_login_note = Note: An email will be sent to the address entered above notifying \
|
||||
that an account has been created.
|
||||
first_time_external_email_html = @@file files/accountFirstTimeExternal.html
|
||||
first_time_external_email_text = @@file files/accountFirstTimeExternal.txt
|
||||
|
||||
myAccount_heading = My account
|
||||
myAccount_confirm_changes = Your changes have been saved.
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>{1}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
{2} {3}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Congratulations!</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We have created your new account on {0}, associated with {4}.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon for 30 days.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Click the link below to create your password for your new account using our secure server.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="{5}" title="password">{5}</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If the link above doesn't work, you can copy and paste the link directly into your browser's address bar.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thanks!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,17 +0,0 @@
|
|||
{2} {3}
|
||||
|
||||
Congratulations!
|
||||
|
||||
We have created your new account on {0},
|
||||
associated with {4}.
|
||||
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon for 30 days.
|
||||
|
||||
Paste the link below into your browser's address bar to create your password
|
||||
for your new account using our secure server.
|
||||
|
||||
{5}
|
||||
|
||||
Thanks!
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>${1}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${2} ${3}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Congratulations!</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We have created your new VIVO account associated with ${4}.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thanks!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,9 +0,0 @@
|
|||
${2} ${3}
|
||||
|
||||
Congratulations!
|
||||
|
||||
We have created your new VIVO account associated with
|
||||
${4}.
|
||||
|
||||
Thanks!
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>{1}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Hi, {2} ${3}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You recently changed the email address associated with
|
||||
${2} ${3}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thank you.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,6 +0,0 @@
|
|||
Hi, {2} {3}
|
||||
|
||||
You recently changed the email address associated with
|
||||
{2} {3}
|
||||
|
||||
Thank you.
|
|
@ -1,22 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>{1}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
{2} {3}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Congratulations!</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We have created your new {0} account associated with {4}.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thanks!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,8 +0,0 @@
|
|||
{2} {3}
|
||||
|
||||
Congratulations!
|
||||
|
||||
We have created your new {0} account associated with
|
||||
{4}
|
||||
|
||||
Thanks!
|
|
@ -1,22 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>{1}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
{2} {3}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Password successfully created.</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Your new password associated with {4} has been created.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thank you.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,8 +0,0 @@
|
|||
{2} {3}
|
||||
|
||||
Password successfully created.
|
||||
|
||||
Your new password associated with {4}
|
||||
has been created.
|
||||
|
||||
Thank you.
|
|
@ -1,34 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>{1}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Dear {2} {3}:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We have received a request to reset the password for your {0} account ({4}).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Please follow the instructions below to proceed with your password reset.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon within 30 days.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Click on the link below or paste it into your browser's address bar to reset your password
|
||||
using our secure server.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="{5}" title="password">{5}</a>
|
||||
</p>
|
||||
|
||||
<p>Thank you!</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,16 +0,0 @@
|
|||
Dear {2} {3}:
|
||||
|
||||
We have received a request to reset the password for your {0} account
|
||||
({4}).
|
||||
|
||||
Please follow the instructions below to proceed with your password reset.
|
||||
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon within 30 days.
|
||||
|
||||
Paste the link below into your browser's address bar to reset your password
|
||||
using our secure server.
|
||||
|
||||
{5}
|
||||
|
||||
Thank you!
|
|
@ -1,22 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>{1}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
{2} {3}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Password successfully changed.</strong>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Your new password associated with {4} has been changed.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thank you.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,8 +0,0 @@
|
|||
{2} {3}
|
||||
|
||||
Password successfully changed.
|
||||
|
||||
Your new password associated with {4}
|
||||
has been changed.
|
||||
|
||||
Thank you.
|
|
@ -1,34 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>{1}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Dear {2} {3}:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We have received a request to reset the password for your {0} account ({4}).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Please follow the instructions below to proceed with your password reset.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon within 30 days.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Click on the link below or paste it into your browser's address bar to reset your password
|
||||
using our secure server.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="{5}" title="password">{5}</a>
|
||||
</p>
|
||||
|
||||
<p>Thank you!</p>
|
||||
</body>
|
||||
</html>
|
|
@ -1,16 +0,0 @@
|
|||
Dear {2} {3}:
|
||||
|
||||
We have received a request to reset the password for your {0} account
|
||||
({4}).
|
||||
|
||||
Please follow the instructions below to proceed with your password reset.
|
||||
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon within 30 days.
|
||||
|
||||
Paste the link below into your browser's address bar to reset your password
|
||||
using our secure server.
|
||||
|
||||
{5}
|
||||
|
||||
Thank you!
|
|
@ -2,22 +2,67 @@
|
|||
|
||||
<#-- Confirmation that an account has been created. -->
|
||||
|
||||
<#assign strings = i18n() />
|
||||
<#assign subject = "Your ${siteName} account has been created." />
|
||||
|
||||
<#assign subject = strings.account_created(siteName) />
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<#assign html = strings.account_created_email_html(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress,
|
||||
passwordLink) />
|
||||
<p>
|
||||
<strong>Congratulations!</strong>
|
||||
</p>
|
||||
|
||||
<#assign text = strings.account_created_email_text(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress,
|
||||
passwordLink) />
|
||||
<p>
|
||||
We have created your new account on ${siteName}, associated with ${userAccount.emailAddress}.
|
||||
</p>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
<p>
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon for 30 days.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Click the link below to create your password for your new account using our secure server.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="${passwordLink}" title="password">${passwordLink}</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If the link above doesn't work, you can copy and paste the link directly into your browser's address bar.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thanks!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Congratulations!
|
||||
|
||||
We have created your new account on ${siteName},
|
||||
associated with ${userAccount.emailAddress}.
|
||||
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon for 30 days.
|
||||
|
||||
Paste the link below into your browser's address bar to create your password
|
||||
for your new account using our secure server.
|
||||
|
||||
${passwordLink}
|
||||
|
||||
Thanks!
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
|
|
|
@ -2,18 +2,42 @@
|
|||
|
||||
<#-- Confirmation that an account has been created. -->
|
||||
|
||||
<#assign subject = strings.account_created(siteName) />
|
||||
<#assign subject = "Your ${siteName} account has been created." />
|
||||
|
||||
<#assign html = strings.account_created_external_email_html(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<#assign text = string.account_created_external_email_text(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<p>
|
||||
<strong>Congratulations!</strong>
|
||||
</p>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
<p>
|
||||
We have created your new VIVO account associated with ${userAccount.emailAddress}.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thanks!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Congratulations!
|
||||
|
||||
We have created your new VIVO account associated with
|
||||
${userAccount.emailAddress}.
|
||||
|
||||
Thanks!
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
|
|
|
@ -2,20 +2,37 @@
|
|||
|
||||
<#-- Confirmation that the user has changed his email account. -->
|
||||
|
||||
<#assign strings = i18n() />
|
||||
<#assign subject = "Your ${siteName} email account has been changed." />
|
||||
|
||||
<#assign subject = strings.email_changed_subject(siteName) />
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Hi, ${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<#assign html = strings.email_changed_html(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<p>
|
||||
You recently changed the email address associated with
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<#assign text = strings.email_changed_text(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<p>
|
||||
Thank you.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
Hi, ${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
You recently changed the email address associated with
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Thank you.
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
|
|
|
@ -2,20 +2,42 @@
|
|||
|
||||
<#-- Confirmation that an account has been created for an externally-authenticated user. -->
|
||||
|
||||
<#assign strings = i18n() />
|
||||
<#assign subject = "Your ${siteName} account has been created." />
|
||||
|
||||
<#assign subject = strings.account_created(siteName) />
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<#assign html = strings.first_time_external_email_html(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<p>
|
||||
<strong>Congratulations!</strong>
|
||||
</p>
|
||||
|
||||
<#assign text = strings.first_time_external_email_text(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<p>
|
||||
We have created your new VIVO account associated with ${userAccount.emailAddress}.
|
||||
</p>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
<p>
|
||||
Thanks!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Congratulations!
|
||||
|
||||
We have created your new VIVO account associated with
|
||||
${userAccount.emailAddress}.
|
||||
|
||||
Thanks!
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
|
|
|
@ -2,20 +2,42 @@
|
|||
|
||||
<#-- Confirmation that an password has been created. -->
|
||||
|
||||
<#assign strings = i18n() />
|
||||
<#assign subject = "Your ${siteName} password has successfully been created." />
|
||||
|
||||
<#assign subject = strings.password_created_subject(siteName) />
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<#assign html = strings.password_created_email_html(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<p>
|
||||
<strong>Password successfully created.</strong>
|
||||
</p>
|
||||
|
||||
<#assign text = strings.password_created_email_text(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<p>
|
||||
Your new password associated with ${userAccount.emailAddress} has been created.
|
||||
</p>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
<p>
|
||||
Thank you.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Password successfully created.
|
||||
|
||||
Your new password associated with ${userAccount.emailAddress}
|
||||
has been created.
|
||||
|
||||
Thank you.
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
|
|
|
@ -2,20 +2,43 @@
|
|||
|
||||
<#-- Confirmation that a password has been reset. -->
|
||||
|
||||
<#assign strings = i18n() />
|
||||
<#assign subject = "Your ${siteName} password changed." />
|
||||
|
||||
<#assign subject = strings.password_reset_complete_subject(siteName) />
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
|
||||
<#assign html = strings.password_reset_complete_email_html(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<body>
|
||||
<p>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
</p>
|
||||
|
||||
<#assign text = strings.password_reset_complete_email_text(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress) />
|
||||
<p>
|
||||
<strong>Password successfully changed.</strong>
|
||||
</p>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
<p>
|
||||
Your new password associated with ${userAccount.emailAddress} has been changed.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thank you.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign text>
|
||||
${userAccount.firstName} ${userAccount.lastName}
|
||||
|
||||
Password successfully changed.
|
||||
|
||||
Your new password associated with ${userAccount.emailAddress}
|
||||
has been changed.
|
||||
|
||||
Thank you.
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
|
|
|
@ -2,22 +2,60 @@
|
|||
|
||||
<#-- Confirmation email for user account password reset -->
|
||||
|
||||
<#assign strings = i18n() />
|
||||
<#assign subject = "${siteName} reset password request" />
|
||||
|
||||
<#assign subject = strings.password_reset_pending_subject(siteName) />
|
||||
<#assign html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${subject}</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Dear ${userAccount.firstName} ${userAccount.lastName}:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We have received a request to reset the password for your ${siteName} account (${userAccount.emailAddress}).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Please follow the instructions below to proceed with your password reset.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon within 30 days.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Click on the link below or paste it into your browser's address bar to reset your password
|
||||
using our secure server.
|
||||
</p>
|
||||
|
||||
<p>${passwordLink}</p>
|
||||
|
||||
<p>Thank you!</p>
|
||||
</body>
|
||||
</html>
|
||||
</#assign>
|
||||
|
||||
<#assign html = strings.password_reset_pending_email_html(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress,
|
||||
passwordLink) />
|
||||
<#assign text>
|
||||
Dear ${userAccount.firstName} ${userAccount.lastName}:
|
||||
|
||||
We have received a request to reset the password for your ${siteName} account
|
||||
(${userAccount.emailAddress}).
|
||||
|
||||
<#assign text = strings.password_reset_pending_email_text(siteName,
|
||||
subject,
|
||||
userAccount.firstName,
|
||||
userAccount.lastName,
|
||||
userAccount.emailAddress,
|
||||
passwordLink) />
|
||||
Please follow the instructions below to proceed with your password reset.
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
If you did not request this new account you can safely ignore this email.
|
||||
This request will expire if not acted upon within 30 days.
|
||||
|
||||
Paste the link below into your browser's address bar to reset your password
|
||||
using our secure server.
|
||||
|
||||
${passwordLink}
|
||||
|
||||
Thank you!
|
||||
</#assign>
|
||||
|
||||
<@email subject=subject html=html text=text />
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
<#include "individual-setup.ftl">
|
||||
|
||||
<#assign hasElement = propertyGroups.pullProperty("${namespaces.display}hasElement")!>
|
||||
|
||||
<#assign addNewMenuItemUrl = "${urls.base}/menuManagementController?cmd=add" >
|
||||
<#assign returnURL = "/vivo/individual?uri=http%3A%2F%2Fvitro.mannlib.cornell.edu%2Fontologies%2Fdisplay%2F1.1%23DefaultMenu&switchToDisplayModel=true" />
|
||||
|
||||
<#if hasElement?has_content>
|
||||
<script type="text/javascript">
|
||||
|
@ -24,22 +23,21 @@
|
|||
|
||||
<#-- Link to add a new menu item -->
|
||||
<#if editable>
|
||||
<#if addNewMenuItemUrl?has_content>
|
||||
<form id="pageListForm" action="${urls.base}/editRequestDispatch" method="get">
|
||||
<input type="hidden" name="typeOfNew" value="http://vitro.mannlib.cornell.edu/ontologies/display/1.1#Page">
|
||||
<input type="hidden" name="switchToDisplayModel" value="1">
|
||||
<input type="hidden" name="editForm" value="edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManagePageGenerator" role="input">
|
||||
<input type="hidden" name="addMenuItem" value="true" />
|
||||
<input id="submit" value="Add new menu page" role="button" type="submit" >
|
||||
<#if verbosePropertySwitch.url?contains("pageManagement")>
|
||||
<span class="or"> ${i18n().or} </span>
|
||||
<a style="margin-left:7px" href="${urls.base}/pageList" title="Return to Profile Page">Return to Page Management</a>
|
||||
</#if>
|
||||
|
||||
</form>
|
||||
<br />
|
||||
<p class="note">${i18n().refresh_page_after_reordering}</p>
|
||||
</#if>
|
||||
<form id="pageListForm" action="${urls.base}/editRequestDispatch" method="get">
|
||||
<input type="hidden" name="typeOfNew" value="http://vitro.mannlib.cornell.edu/ontologies/display/1.1#Page">
|
||||
<input type="hidden" name="switchToDisplayModel" value="1">
|
||||
<input type="hidden" name="editForm" value="edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManagePageGenerator" role="input">
|
||||
<input type="hidden" name="addMenuItem" value="true" />
|
||||
<input id="submit" value="Add new menu page" role="button" type="submit" >
|
||||
<input type="hidden" name="returnURL" value="${returnURL?url}" />
|
||||
<#if verbosePropertySwitch.url?contains("pageManagement")>
|
||||
<span class="or"> ${i18n().or} </span>
|
||||
<a style="margin-left:7px" href="${urls.base}/pageList" title="Return to Profile Page">Return to Page Management</a>
|
||||
</#if>
|
||||
|
||||
</form>
|
||||
<br />
|
||||
<p class="note">${i18n().refresh_page_after_reordering}</p>
|
||||
</#if>
|
||||
|
||||
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual.css" />',
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
<#import "lib-properties.ftl" as p>
|
||||
<#assign subjectUri = individual.controlPanelUrl()?split("=") >
|
||||
<#assign nameForOtherGroup = nameForOtherGroup!"other">
|
||||
|
||||
<#if (propertyGroups.all)??>
|
||||
<#assign groups = propertyGroups.all>
|
||||
|
@ -13,6 +12,7 @@
|
|||
<nav id="property-group-menu" role="navigation">
|
||||
<ul role="list">
|
||||
<#list groups as group>
|
||||
<#if (group.properties?size > 0) >
|
||||
<#assign groupname = group.getName(nameForOtherGroup)>
|
||||
<#if groupname?has_content>
|
||||
<#--create property group html id is the function that will replace all spaces with underscore to make a valid id-->
|
||||
|
@ -21,13 +21,15 @@
|
|||
function to capitalize all except function words. -->
|
||||
<li role="listitem"><a href="#${groupnameHtmlId}" title="${i18n().group_name}">${groupname?capitalize}</a></li>
|
||||
</#if>
|
||||
</#if>
|
||||
</#list>
|
||||
</ul>
|
||||
</nav>
|
||||
</#if>
|
||||
</#if>
|
||||
</#if>
|
||||
</#if>
|
||||
</#if>
|
||||
<#list propertyGroups.all as group>
|
||||
<#if (group.properties?size > 0)>
|
||||
<#assign groupName = group.getName(nameForOtherGroup)>
|
||||
<#assign verbose = (verbosePropertySwitch.currentValue)!false>
|
||||
|
||||
|
@ -50,4 +52,5 @@
|
|||
<#-- List the properties in the group -->
|
||||
<#include "individual-properties.ftl">
|
||||
</section> <!-- end property-group -->
|
||||
</#if>
|
||||
</#list>
|
||||
|
|
|
@ -11,14 +11,14 @@
|
|||
<li class="groupTabSpacer"> </li>
|
||||
<#list propertyGroups.all as groupTabs>
|
||||
<#if ( groupTabs.properties?size > 0 ) >
|
||||
<#assign groupName = groupTabs.getName(nameForOtherGroup)>
|
||||
<#if groupName?has_content>
|
||||
<#--the function replaces spaces in the name with underscores, also called for the property group menu-->
|
||||
<#assign groupNameHtmlId = p.createPropertyGroupHtmlId(groupName) >
|
||||
<#else>
|
||||
<#assign groupName = "${i18n().properties_capitalized}">
|
||||
<#assign groupNameHtmlId = "${i18n().properties}" >
|
||||
</#if>
|
||||
<#assign groupName = groupTabs.getName(nameForOtherGroup)>
|
||||
<#if groupName?has_content>
|
||||
<#--the function replaces spaces in the name with underscores, also called for the property group menu-->
|
||||
<#assign groupNameHtmlId = p.createPropertyGroupHtmlId(groupName) >
|
||||
<#else>
|
||||
<#assign groupName = "${i18n().properties_capitalized}">
|
||||
<#assign groupNameHtmlId = "${i18n().properties}" >
|
||||
</#if>
|
||||
<#if tabCount = 1 >
|
||||
<li class="selectedGroupTab clickable" groupName="${groupNameHtmlId}">${groupName?capitalize}</li>
|
||||
<li class="groupTabSpacer"> </li>
|
||||
|
@ -35,30 +35,32 @@
|
|||
</#if>
|
||||
</ul>
|
||||
<#list propertyGroups.all as group>
|
||||
<#assign groupName = group.getName(nameForOtherGroup)>
|
||||
<#assign groupNameHtmlId = p.createPropertyGroupHtmlId(groupName) >
|
||||
<#assign verbose = (verbosePropertySwitch.currentValue)!false>
|
||||
<section id="${groupNameHtmlId}" class="property-group" role="region" style="<#if (sectionCount > 1) >display:none<#else>display:block</#if>">
|
||||
<nav id="scroller" class="scroll-up hidden" role="navigation">
|
||||
<a href="#branding" title="${i18n().scroll_to_menus}" >
|
||||
<img src="${urls.images}/individual/scroll-up.gif" alt="${i18n().scroll_to_menus}" />
|
||||
</a>
|
||||
</nav>
|
||||
<#if (group.properties?size > 0)>
|
||||
<#assign groupName = group.getName(nameForOtherGroup)>
|
||||
<#assign groupNameHtmlId = p.createPropertyGroupHtmlId(groupName) >
|
||||
<#assign verbose = (verbosePropertySwitch.currentValue)!false>
|
||||
<section id="${groupNameHtmlId}" class="property-group" role="region" style="<#if (sectionCount > 1) >display:none<#else>display:block</#if>">
|
||||
<nav id="scroller" class="scroll-up hidden" role="navigation">
|
||||
<a href="#branding" title="${i18n().scroll_to_menus}" >
|
||||
<img src="${urls.images}/individual/scroll-up.gif" alt="${i18n().scroll_to_menus}" />
|
||||
</a>
|
||||
</nav>
|
||||
|
||||
<#-- Display the group heading -->
|
||||
<#if groupName?has_content>
|
||||
<#--the function replaces spaces in the name with underscores, also called for the property group menu-->
|
||||
<#assign groupNameHtmlId = p.createPropertyGroupHtmlId(groupName) >
|
||||
<h2 id="${groupNameHtmlId}" pgroup="tabs" class="hidden">${groupName?capitalize}</h2>
|
||||
<#else>
|
||||
<h2 id="properties" pgroup="tabs" class="hidden">${i18n().properties_capitalized}</h2>
|
||||
</#if>
|
||||
<#-- Display the group heading -->
|
||||
<#if groupName?has_content>
|
||||
<#--the function replaces spaces in the name with underscores, also called for the property group menu-->
|
||||
<#assign groupNameHtmlId = p.createPropertyGroupHtmlId(groupName) >
|
||||
<h2 id="${groupNameHtmlId}" pgroup="tabs" class="hidden">${groupName?capitalize}</h2>
|
||||
<#else>
|
||||
<h2 id="properties" pgroup="tabs" class="hidden">${i18n().properties_capitalized}</h2>
|
||||
</#if>
|
||||
<div id="${groupNameHtmlId}Group" >
|
||||
<#-- List the properties in the group -->
|
||||
<#include "individual-properties.ftl">
|
||||
</div>
|
||||
</section> <!-- end property-group -->
|
||||
<#assign sectionCount = 2 >
|
||||
</section> <!-- end property-group -->
|
||||
<#assign sectionCount = 2 >
|
||||
</#if>
|
||||
</#list>
|
||||
<script>
|
||||
var individualLocalName = "${individual.localName}";
|
||||
|
|
Loading…
Add table
Reference in a new issue