\"true\" ." ;
+
+ if ( $(publication).is(':checked') ) {
+ add = n3String;
+ }
+ else {
+ retract = n3String;
+ }
+
+ $.ajax({
+ url: managePublications.processingUrl,
+ type: 'POST',
+ data: {
+ additions: add,
+ retractions: retract
+ },
+ dataType: 'json',
+ context: publication, // context for callback
+ complete: function(request, status) {
+
+ if (status === 'success') {
+ window.status = "The publication will has been successfully excluded from the profile page.";
+
+ } else {
+ alert('Error processing request: the publication cannot be excluded from the profile page.');
+ $(publication).removeAttr('checked');
+ }
+ }
+ });
+ },
+
+};
+
+$(document).ready(function() {
+ managePublications.onLoad();
+});
diff --git a/productMods/templates/freemarker/edit/forms/managePublicationsForIndividual.ftl b/productMods/templates/freemarker/edit/forms/managePublicationsForIndividual.ftl
new file mode 100644
index 00000000..0268de81
--- /dev/null
+++ b/productMods/templates/freemarker/edit/forms/managePublicationsForIndividual.ftl
@@ -0,0 +1,56 @@
+<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
+
+<#-- Custom form for managing web pages for individuals -->
+<#if subjectName?contains(",") >
+<#assign lastName = subjectName?substring(0,subjectName?index_of(",")) />
+<#assign firstName = subjectName?substring(subjectName?index_of(",") + 1) />
+Manage Publications for ${firstName} ${lastName}
+<#else>
+Manage Publications for ${subjectName}
+#if>
+
+Check those publications you want to exclude from the profile page.
+
+
+
+ <#list allSubclasses as sub>
+ ${sub}s
+
+ <#assign pubs = publications[sub]>
+
+
+ #list>
+
+
+
+ Return to profile page
+
+
+
+
+${stylesheets.add('',
+ '')}
+
+${scripts.add('',
+ '',
+ '',
+ '')}
+
diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java
new file mode 100644
index 00000000..73213510
--- /dev/null
+++ b/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java
@@ -0,0 +1,121 @@
+/* $This file is distributed under the terms of the license in /doc/license.txt$ */
+package edu.cornell.mannlib.vitro.webapp.controller.freemarker.generators;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.hp.hpl.jena.query.QuerySolution;
+import com.hp.hpl.jena.query.ResultSet;
+import com.hp.hpl.jena.rdf.model.RDFNode;
+
+import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
+import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
+import edu.cornell.mannlib.vitro.webapp.beans.Individual;
+import edu.cornell.mannlib.vitro.webapp.beans.VClass;
+import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
+import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet;
+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.dao.jena.QueryUtils;
+import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
+import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
+
+
+public class ManagePublicationsForIndividualController extends FreemarkerHttpServlet {
+
+ private static final Log log = LogFactory.getLog(ManagePublicationsForIndividualController.class.getName());
+ private VClassDao vcDao = null;
+ private static final String TEMPLATE_NAME = "managePublicationsForIndividual.ftl";
+ private List allSubclasses;
+
+ @Override
+ protected Actions requiredActions(VitroRequest vreq) {
+ return SimplePermission.DO_FRONT_END_EDITING.ACTIONS;
+ }
+
+ @Override
+ protected ResponseValues processRequest(VitroRequest vreq) {
+
+ Map body = new HashMap();
+
+ String subjectUri = vreq.getParameter("subjectUri");
+
+ body.put("subjectUri", subjectUri);
+
+ if (vreq.getAssertionsWebappDaoFactory() != null) {
+ vcDao = vreq.getAssertionsWebappDaoFactory().getVClassDao();
+ } else {
+ vcDao = vreq.getFullWebappDaoFactory().getVClassDao();
+ }
+
+ HashMap>> publications = getPublications(subjectUri, vreq);
+ log.debug("publications = " + publications);
+ body.put("publications", publications);
+ body.put("allSubclasses", allSubclasses);
+
+ Individual subject = vreq.getWebappDaoFactory().getIndividualDao().getIndividualByURI(subjectUri);
+ if( subject != null && subject.getName() != null ){
+ body.put("subjectName", subject.getName());
+ }else{
+ body.put("subjectName", null);
+ }
+
+ return new TemplateResponseValues(TEMPLATE_NAME, body);
+ }
+
+
+ private static String PUBLICATION_QUERY = ""
+ + "PREFIX core: \n"
+ + "PREFIX rdfs: \n"
+ + "PREFIX vitro: \n"
+ + "PREFIX afn: \n"
+ + "SELECT DISTINCT ?subclass ?authorship ?title ?pub ?hideThis WHERE { \n"
+ + " ?subject core:authorInAuthorship ?authorship . \n"
+ + " OPTIONAL { ?authorship core:linkedInformationResource ?pub . "
+ + " ?pub rdfs:label ?title } \n"
+ + " OPTIONAL { ?pub vitro:mostSpecificType ?subclass . \n"
+ + " ?subclass rdfs:subClassOf core:InformationResource } \n"
+ + " OPTIONAL { ?authorship core:hideFromDisplay ?hideThis } \n "
+ + "} ORDER BY ?subclass ?title";
+
+
+ HashMap>> getPublications(String subjectUri, VitroRequest vreq) {
+
+ String queryStr = QueryUtils.subUriForQueryVar(PUBLICATION_QUERY, "subject", subjectUri);
+ log.debug("queryStr = " + queryStr);
+ HashMap>> subclassToPublications = new HashMap>>();
+ try {
+ ResultSet results = QueryUtils.getQueryResults(queryStr, vreq);
+ while (results.hasNext()) {
+ QuerySolution soln = results.nextSolution();
+ String subclassUri = soln.get("subclass").toString();
+ VClass vClass = (VClass) vcDao.getVClassByURI(subclassUri);
+ String subclass = ((vClass.getName() == null) ? subclassUri : vClass.getName());
+ if(!subclassToPublications.containsKey(subclass)) {
+ subclassToPublications.put(subclass, new ArrayList