Author: jkoster
Date: 2009-06-05 15:10:55 +0200 (Fri, 05 Jun 2009)
New Revision: 35773
Removed:
CMSContainer/trunk/CMSContainer_Modules/directreaction/migration/migration_1.1_to_1.2.txt
Modified:
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/taglib/GetReactionTag.java
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/util/ReactionUtil.java
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactioninfo.jsp
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactionsearch.jsp
Log:
CMSC-1423 - DirectReactions Module does not correctly retrieve the remote
cloud, if running in live/staging mode
Deleted:
CMSContainer/trunk/CMSContainer_Modules/directreaction/migration/migration_1.1_to_1.2.txt
===================================================================
---
CMSContainer/trunk/CMSContainer_Modules/directreaction/migration/migration_1.1_to_1.2.txt
2009-06-05 13:10:39 UTC (rev 35772)
+++
CMSContainer/trunk/CMSContainer_Modules/directreaction/migration/migration_1.1_to_1.2.txt
2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,67 +0,0 @@
-Migration document:
-
-Part: directreaction module
-From versie: 1.1
-To versie: 1.2
-
-
-Execute the following steps below in the given order:
-
-
-Name: Store your reaction yourself
-Goal: Alter your views so the reactions will be stored
-Type: manual action
-Steps:
-* Edit your views
-* Now use the <cmsc-dr:add> tag to store the reaction
-*
-*
-Exceptions/errors/other problems and what to do:
-* reactions are not stored anymore by the AbstractContentPortlet, the view has
to do this itself
-*
-*
-
-
-
-
-Name: Create new column (modules) for links
-Goal: A link can now be part of a reaction
-Type: sql-script
---- Start script ---
-alter table mm_reaction add column link text;
-alter table live_reaction add column link text;
---- End script ---
-Exceptions/errors/other problems and what to do:
-*
-*
-*
-
-
-
-
-Name:
-Goal:
-Type: sql-script
---- Start script ---
-(paste script here)
---- End script ---
-Exceptions/errors/other problems and what to do:
-*
-*
-*
-
-
-Name:
-Goal:
-Type: manual action
-Steps:
-*
-*
-*
-*
-Exceptions/errors/other problems and what to do:
-*
-*
-*
-
-
Modified:
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/taglib/GetReactionTag.java
===================================================================
---
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/taglib/GetReactionTag.java
2009-06-05 13:10:39 UTC (rev 35772)
+++
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/taglib/GetReactionTag.java
2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,68 +1,59 @@
-package com.finalist.cmsc.directreaction.taglib;
-
-import javax.servlet.jsp.tagext.SimpleTagSupport;
-
-import net.sf.mmapps.modules.cloudprovider.CloudProvider;
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-
-import org.mmbase.bridge.*;
-
-import com.finalist.cmsc.directreaction.util.Reaction;
-import com.finalist.cmsc.services.publish.Publish;
-
-/**
- * The GetReactionTag will retrieve a single reaction node from the live
- * database and then populate and return a Reaction object.
- *
- * @author jderuijter
- */
-public class GetReactionTag extends SimpleTagSupport {
-
- private int number;
- private String var;
-
-
- @Override
- public void doTag() {
- Cloud remoteCloud = getLiveCloud();
- Node node = remoteCloud.getNode(number);
-
- Reaction reaction = new Reaction(node.getIntValue("number"),
node.getStringValue("title"), node
- .getStringValue("body"), node.getStringValue("name"),
node.getStringValue("email"), node
- .getDateValue("creationdate"), this.getRelatedContentTitle());
-
- getJspContext().setAttribute(var, reaction);
- }
-
-
- public Cloud getLiveCloud() {
- CloudProvider cloudProvider = CloudProviderFactory.getCloudProvider();
- Cloud cloud = cloudProvider.getCloud();
- Cloud remoteCloud = Publish.getRemoteCloud(cloud);
- return remoteCloud;
- }
-
-
- public String getRelatedContentTitle() {
- String contentTitle = null;
- NodeList nodeList = getLiveCloud().getList("" + number,
"reaction,contentelement", "contentelement.title", null,
- null, null, null, true);
-
- for (NodeIterator ni = nodeList.nodeIterator(); ni.hasNext();) {
- Node node = ni.nextNode();
- contentTitle = node.getStringValue("contentelement.title");
- }
- return contentTitle;
- }
-
-
- public void setNumber(int number) {
- this.number = number;
- }
-
-
- public void setVar(String var) {
- this.var = var;
- }
-
-}
+package com.finalist.cmsc.directreaction.taglib;
+
+import javax.servlet.jsp.tagext.SimpleTagSupport;
+
+import org.mmbase.bridge.*;
+
+import com.finalist.cmsc.directreaction.util.Reaction;
+import com.finalist.cmsc.directreaction.util.ReactionUtil;
+
+/**
+ * The GetReactionTag will retrieve a single reaction node from the live/remote
+ * database/cloud and then populate and return a Reaction object.
+ *
+ * @author jderuijter
+ */
+public class GetReactionTag extends SimpleTagSupport {
+
+ private int number;
+ private String var;
+
+
+ @Override
+ public void doTag() {
+ Cloud remoteCloud = ReactionUtil.getRemoteCloud();
+ Node node = remoteCloud.getNode(number);
+
+ Reaction reaction = new Reaction(node.getIntValue("number"),
node.getStringValue("title"), node
+ .getStringValue("body"), node.getStringValue("name"),
node.getStringValue("email"), node
+ .getDateValue("creationdate"), this.getRelatedContentTitle());
+
+ getJspContext().setAttribute(var, reaction);
+ }
+
+
+ public String getRelatedContentTitle() {
+ String contentTitle = null;
+ NodeList nodeList = ReactionUtil.getRemoteCloud().getList("" + number,
"reaction,contentelement", "contentelement.title", null,
+ null, null, null, true);
+
+ //Only using one node, because the getList was using 1 number.
+ if (!nodeList.isEmpty()) {
+ Node node = nodeList.getNode(0);
+ contentTitle = node.getStringValue("contentelement.title");
+ }
+
+ return contentTitle;
+ }
+
+
+ public void setNumber(int number) {
+ this.number = number;
+ }
+
+
+ public void setVar(String var) {
+ this.var = var;
+ }
+
+}
Modified:
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/util/ReactionUtil.java
===================================================================
---
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/util/ReactionUtil.java
2009-06-05 13:10:39 UTC (rev 35772)
+++
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/directreaction/util/ReactionUtil.java
2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,75 +1,101 @@
-package com.finalist.cmsc.directreaction.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-
-import org.mmbase.bridge.Cloud;
-import org.mmbase.bridge.Node;
-import org.mmbase.bridge.NodeIterator;
-import org.mmbase.bridge.NodeList;
-import org.mmbase.bridge.NodeManager;
-import org.mmbase.bridge.Relation;
-
-public class ReactionUtil {
-
- private static final String REACTION = "reaction";
-
-
- /**
- * Warning, this method is untested
- *
- * @param number
- * @return
- */
- public static List<Reaction> getReactions(int number) {
- ArrayList<Reaction> result = new ArrayList<Reaction>();
-
- Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
- NodeList nodeList = cloud.getList("" + number, "contentelement,reaction",
-
"reaction.number,reaction.title,reaction.body,reaction.name,reaction.email",
"", "reaction.number", null,
- null, true);
- for (NodeIterator ni = nodeList.nodeIterator(); ni.hasNext();) {
- Node node = ni.nextNode();
- result.add(new Reaction(node.getIntValue("reaction.number"),
node.getStringValue("reaction.title"), node
- .getStringValue("reaction.body"),
node.getStringValue("reaction.name"), node
- .getStringValue("reaction.email"), null, null));
- }
-
- return result;
- }
-
-
- public static void addReaction(int number, String title, String body,
String name, String email, String link) {
- Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
- NodeManager nodeManager = cloud.getNodeManager("reaction");
-
- Node message = nodeManager.createNode();
- message.setStringValue("title", title);
- message.setStringValue("body", body);
- message.setStringValue("name", name);
- if (email != null) {
- message.setStringValue("email", email);
- }
- if (link != null) {
- message.setStringValue("link", link);
- }
- message.commit();
-
- Node element = cloud.getNode(number);
- Relation posrel = element.createRelation(message,
cloud.getRelationManager("posrel"));
- posrel.commit();
- }
-
-
- public static boolean isReaction(String node) {
- Node reacion =
CloudProviderFactory.getCloudProvider().getCloud().getNode(node);
- return isReaction(reacion);
- }
-
-
- public static boolean isReaction(Node node) {
- return REACTION.equals(node.getNodeManager().getName());
- }
-}
+package com.finalist.cmsc.directreaction.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
+
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeIterator;
+import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.Relation;
+
+import com.finalist.cmsc.services.publish.Publish;
+import com.finalist.cmsc.util.ServerUtil;
+
+public class ReactionUtil {
+
+ private ReactionUtil() {
+ //Utility only
+ }
+
+ private static final String REACTION = "reaction";
+
+
+ /**
+ * Warning, this method is untested
+ *
+ * @param number
+ * @return
+ */
+ public static List<Reaction> getReactions(int number) {
+ ArrayList<Reaction> result = new ArrayList<Reaction>();
+
+ Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+ NodeList nodeList = cloud.getList("" + number, "contentelement,reaction",
+
"reaction.number,reaction.title,reaction.body,reaction.name,reaction.email",
"", "reaction.number", null,
+ null, true);
+ for (NodeIterator ni = nodeList.nodeIterator(); ni.hasNext();) {
+ Node node = ni.nextNode();
+ result.add(new Reaction(node.getIntValue("reaction.number"),
node.getStringValue("reaction.title"), node
+ .getStringValue("reaction.body"),
node.getStringValue("reaction.name"), node
+ .getStringValue("reaction.email"), null, null));
+ }
+
+ return result;
+ }
+
+
+ public static void addReaction(int number, String title, String body,
String name, String email, String link) {
+ Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
+ NodeManager nodeManager = cloud.getNodeManager("reaction");
+
+ Node message = nodeManager.createNode();
+ message.setStringValue("title", title);
+ message.setStringValue("body", body);
+ message.setStringValue("name", name);
+ if (email != null) {
+ message.setStringValue("email", email);
+ }
+ if (link != null) {
+ message.setStringValue("link", link);
+ }
+ message.commit();
+
+ Node element = cloud.getNode(number);
+ Relation posrel = element.createRelation(message,
cloud.getRelationManager("posrel"));
+ posrel.commit();
+ }
+
+ public static Cloud getRemoteCloud() {
+ return getRemoteCloud(null);
+ }
+
+ public static Cloud getRemoteCloud(Cloud cloud) {
+ /* It should use the staging cloud if it runs in single-war mode.
+ * At live, the local cloud can be used.
+ */
+ if (cloud == null) {
+ cloud = CloudProviderFactory.getCloudProvider().getCloud();
+ }
+
+ if (ServerUtil.isSingle() || ServerUtil.isLive()) {
+ return cloud;
+ }
+
+ return Publish.getRemoteCloud(cloud);
+ }
+
+
+ public static boolean isReaction(String node) {
+ Node reacion =
CloudProviderFactory.getCloudProvider().getCloud().getNode(node);
+ return isReaction(reacion);
+ }
+
+
+ public static boolean isReaction(Node node) {
+ return REACTION.equals(node.getNodeManager().getName());
+ }
+}
Modified:
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
===================================================================
---
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
2009-06-05 13:10:39 UTC (rev 35772)
+++
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,46 +1,46 @@
-package com.finalist.cmsc.resources.forms;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.*;
-import org.mmbase.bridge.Cloud;
-import org.mmbase.util.logging.Logger;
-import org.mmbase.util.logging.Logging;
-
-import com.finalist.cmsc.services.publish.Publish;
-import com.finalist.cmsc.struts.MMBaseAction;
-
-public class DeleteReactionAction extends DeleteSecondaryContentAction {
-
- private static final Logger log =
Logging.getLoggerInstance(DeleteReactionAction.class.getName());
-
-
- @Override
- public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
- HttpServletResponse response, Cloud cloud) throws Exception {
-
- DeleteSecondaryContentForm deleteForm = (DeleteSecondaryContentForm)
form;
-
- String number = deleteForm.getObjectnumber();
- if
(MMBaseAction.ADMINISTRATOR.equals(cloud.getUser().getRank().toString())) {
- log.debug("deleting secondary content: " + number);
- Cloud remoteCloud = Publish.getRemoteCloud(cloud);
- remoteCloud.getNode(number).delete(true);
- }
- else {
- log.warn("did not delete secondary content because user was not
administrator: " + number + " ("
- + cloud.getUser() + ":" + cloud.getUser().getRank() + ")");
- }
-
- String returnurl = deleteForm.getReturnurl();
- return new ActionForward(returnurl);
-
- }
-
- @Override
- public String getRequiredRankStr() {
- return ADMINISTRATOR;
- }
-
-}
+package com.finalist.cmsc.resources.forms;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.*;
+import org.mmbase.bridge.Cloud;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+import com.finalist.cmsc.directreaction.util.ReactionUtil;
+import com.finalist.cmsc.struts.MMBaseAction;
+
+public class DeleteReactionAction extends DeleteSecondaryContentAction {
+
+ private static final Logger log =
Logging.getLoggerInstance(DeleteReactionAction.class.getName());
+
+
+ @Override
+ public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
+ HttpServletResponse response, Cloud cloud) throws Exception {
+
+ DeleteSecondaryContentForm deleteForm = (DeleteSecondaryContentForm)
form;
+
+ String number = deleteForm.getObjectnumber();
+ if
(MMBaseAction.ADMINISTRATOR.equals(cloud.getUser().getRank().toString())) {
+ log.debug("deleting secondary content: " + number);
+ Cloud remoteCloud = ReactionUtil.getRemoteCloud(cloud);
+ remoteCloud.getNode(number).delete(true);
+ }
+ else {
+ log.warn("did not delete secondary content because user was not
administrator: " + number + " ("
+ + cloud.getUser() + ":" + cloud.getUser().getRank() + ")");
+ }
+
+ String returnurl = deleteForm.getReturnurl();
+ return new ActionForward(returnurl);
+
+ }
+
+ @Override
+ public String getRequiredRankStr() {
+ return ADMINISTRATOR;
+ }
+
+}
Modified:
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
===================================================================
---
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
2009-06-05 13:10:39 UTC (rev 35772)
+++
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,110 +1,103 @@
-package com.finalist.cmsc.resources.forms;
-
-import java.util.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-
-import org.apache.struts.action.*;
-import org.mmbase.bridge.*;
-import org.mmbase.storage.search.RelationStep;
-import org.mmbase.storage.search.Step;
-import org.mmbase.util.logging.Logger;
-import org.mmbase.util.logging.Logging;
-
-import com.finalist.cmsc.services.publish.Publish;
-import com.finalist.cmsc.util.ServerUtil;
-
-public class ReactionAction extends SearchAction {
-
- private static final Logger log =
Logging.getLoggerInstance(ReactionAction.class.getName());
-
- public static final String NAME_FIELD = "name";
- public static final String EMAIL_FIELD = "email";
- public static final String TITLE_FIELD = "title";
- public static final String BODY_FIELD = "body";
-
-
- @Override
- public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
- HttpServletResponse response, Cloud cloud) throws Exception {
- // TODO retrieve articles/newsitems in one query along with the reactions
- // (I don't know how to do it)
- // search for the reactions
- super.execute(mapping, form, request, response, cloud);
- Map<Integer, String> titles = new HashMap<Integer, String>();
- // get the reactions from the request
- NodeList results = (NodeList) request.getAttribute("results");
- // for every reaction search for the contentelement it belongs to
- for (Iterator<Node> iter = results.iterator(); iter.hasNext();) {
- Node node = iter.next();
- String title = getArticleTitles(cloud, node);
- // store the title in a map
- titles.put(node.getNumber(), title);
- }
- log.debug("Found titles: " + titles);
- // put the titles as a map into the request
- request.setAttribute("titles", titles);
-
- return mapping.getInputForward();
- }
-
-
- @Override
- public Cloud getCloud() {
- /* The DirectReactions should use the staging cloud if we are
- * running in single-war-file mode.
- */
- return getCloudForAnonymousUpdate(ServerUtil.isLive());
- }
-
- public Cloud getCloudForAnonymousUpdate(boolean isRemote) {
- Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
- if (isRemote) {
- return Publish.getRemoteCloud(cloud);
- }
- return cloud;
- }
-
- @Override
- public String getRequiredRankStr() {
- return null;
- }
-
-
- @Override
- protected void addConstraints(SearchForm searchForm, NodeManager
nodeManager,
- QueryStringComposer queryStringComposer, NodeQuery query) {
- ReactionForm form = (ReactionForm) searchForm;
- addField(nodeManager, queryStringComposer, query, NAME_FIELD,
form.getName());
- addField(nodeManager, queryStringComposer, query, EMAIL_FIELD,
form.getEmail());
- addField(nodeManager, queryStringComposer, query, TITLE_FIELD,
form.getTitle());
- addField(nodeManager, queryStringComposer, query, BODY_FIELD,
form.getBody());
- }
-
-
- private String getArticleTitles(Cloud cloud, Node parentNode) {
- // this query is hacked from the relatednodestag, which doesn't work with
- // a remotecloud
- NodeQuery query = cloud.createNodeQuery();
- Step step1 = query.addStep(parentNode.getNodeManager());
- query.setAlias(step1, parentNode.getNodeManager().getName() + "0");
- query.addNode(step1, parentNode);
-
- NodeManager otherManager = cloud.getNodeManager("contentelement");
-
- RelationStep step2 = query.addRelationStep(otherManager);
- Step step3 = step2.getNext();
- query.setNodeStep(step3);
- query.setNodeStep((Step) query.getSteps().get(2));
- NodeList nodeList = query.getNodeManager().getList(query);
- if (nodeList.size() > 0) {
- Node node = (Node) nodeList.get(0);
- return node.getStringValue("title");
- }
- return "";
- }
-
-}
+package com.finalist.cmsc.resources.forms;
+
+import java.util.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
+
+import org.apache.struts.action.*;
+import org.mmbase.bridge.*;
+import org.mmbase.storage.search.RelationStep;
+import org.mmbase.storage.search.Step;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+import com.finalist.cmsc.directreaction.util.ReactionUtil;
+import com.finalist.cmsc.services.publish.Publish;
+import com.finalist.cmsc.util.ServerUtil;
+
+public class ReactionAction extends SearchAction {
+
+ private static final Logger log =
Logging.getLoggerInstance(ReactionAction.class.getName());
+
+ public static final String NAME_FIELD = "name";
+ public static final String EMAIL_FIELD = "email";
+ public static final String TITLE_FIELD = "title";
+ public static final String BODY_FIELD = "body";
+
+
+ @Override
+ public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
+ HttpServletResponse response, Cloud cloud) throws Exception {
+ // TODO retrieve articles/newsitems in one query along with the reactions
+ // (I don't know how to do it)
+ // search for the reactions
+ super.execute(mapping, form, request, response, cloud);
+ Map<Integer, String> titles = new HashMap<Integer, String>();
+ // get the reactions from the request
+ List<Node> results = (NodeList) request.getAttribute("results");
+ // for every reaction search for the contentelement it belongs to
+ for (Node node : results) {
+ String title = getArticleTitles(cloud, node);
+ // store the title in a map
+ titles.put(node.getNumber(), title);
+ }
+ log.debug("Found titles: " + titles);
+ // put the titles as a map into the request
+ request.setAttribute("titles", titles);
+
+ return mapping.getInputForward();
+ }
+
+
+ @Override
+ public Cloud getCloud() {
+ /* It should use the staging cloud if it runs in single-war mode.
+ * At live, the local cloud can be used.
+ */
+
+ return ReactionUtil.getRemoteCloud();
+ }
+
+ @Override
+ public String getRequiredRankStr() {
+ return null;
+ }
+
+
+ @Override
+ protected void addConstraints(SearchForm searchForm, NodeManager
nodeManager,
+ QueryStringComposer queryStringComposer, NodeQuery query) {
+ ReactionForm form = (ReactionForm) searchForm;
+ addField(nodeManager, queryStringComposer, query, NAME_FIELD,
form.getName());
+ addField(nodeManager, queryStringComposer, query, EMAIL_FIELD,
form.getEmail());
+ addField(nodeManager, queryStringComposer, query, TITLE_FIELD,
form.getTitle());
+ addField(nodeManager, queryStringComposer, query, BODY_FIELD,
form.getBody());
+ }
+
+
+ private String getArticleTitles(Cloud cloud, Node parentNode) {
+ // this query is hacked from the relatednodestag, which doesn't work with
+ // a remotecloud
+ NodeQuery query = cloud.createNodeQuery();
+ Step step1 = query.addStep(parentNode.getNodeManager());
+ query.setAlias(step1, parentNode.getNodeManager().getName() + "0");
+ query.addNode(step1, parentNode);
+
+ NodeManager otherManager = cloud.getNodeManager("contentelement");
+
+ RelationStep step2 = query.addRelationStep(otherManager);
+ Step step3 = step2.getNext();
+ query.setNodeStep(step3);
+ query.setNodeStep((Step) query.getSteps().get(2));
+ NodeList nodeList = query.getNodeManager().getList(query);
+ if (nodeList.size() > 0) {
+ Node node = (Node) nodeList.get(0);
+ return node.getStringValue("title");
+ }
+ return "";
+ }
+
+}
Modified:
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactioninfo.jsp
===================================================================
---
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactioninfo.jsp
2009-06-05 13:10:39 UTC (rev 35772)
+++
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactioninfo.jsp
2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,74 +1,74 @@
-<%...@page language="java" contentType="text/html;charset=UTF-8"%>
-<%...@taglib uri="http://finalist.com/cmsc-directreaction" prefix="cmsc-dr"%>
-
-<%...@include file="globals.jsp" %>
-<fmt:setBundle basename="cmsc-reactions" scope="request" />
-<mm:content type="text/html" encoding="UTF-8" expires="0">
-<html:html xhtml="true">
-<cmscedit:head title="reactioninfo.title" />
-
-<cmsc-dr:getreaction number="${param.objectnumber}" var="reactionObject"/>
-<body>
- <div class="side_block_green" style="width: 100%">
- <div class="header">
- <div class="title">
- <fmt:message key="reactioninfo.title" />: ${reactionObject.title}
- </div>
- <div class="header_end"></div>
- </div>
- <div class="body" >
-
- <table class="listcontent">
- <tr>
- <td><fmt:message key="reactioninfo.number" />:</td>
- <td>${reactionObject.number}</td>
- </tr>
- <tr>
- <td><fmt:message key="secondaryinfo.creationdate" />:</td>
- <td><fmt:formatDate value="${reactionObject.creationdate}"
pattern="dd MMMMM yyyy hh:mm:ss"/></td>
- </tr>
- <tr>
- <td><fmt:message key="secondaryinfo.creator" />:</td>
- <td>${reactionObject.name}</td>
- </tr>
- <tr>
- <td><fmt:message key="reactioninfo.titlefield" />:</td>
- <td>${reactionObject.title}</td>
- </tr>
- <tr>
- <td><fmt:message key="reactioninfo.bodyfield" />:</td>
- <td>${reactionObject.body}</td>
- </tr>
- <tr>
- <td><fmt:message key="reactioninfo.emailfield" />:</td>
- <td>${reactionObject.email}</td>
- </tr>
- </table>
- <table class="listcontent">
- <tr>
- <td>
- <hr/>
- <fmt:message key="reactioninfo.related" />
- <table>
- <tr>
- <td>
- <b>${reactionObject.contentTitle}</b>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <br />
- <ul class="shortcuts">
- <li class="close">
- <a href="#" onClick="window.close()"><fmt:message
key="reactioninfo.close" /></a>
- </li>
- </ul>
- </div>
- <div class="side_block_end"></div>
- </div>
-</body>
-
-</html:html>
+<%...@page language="java" contentType="text/html;charset=UTF-8"
+%><%...@taglib uri="http://finalist.com/cmsc-directreaction" prefix="cmsc-dr"
+%><%...@include file="globals.jsp"
+%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<mm:content type="text/html" encoding="UTF-8" expires="0">
+<fmt:setBundle basename="cmsc-reactions" scope="request" />
+<html:html xhtml="true">
+<cmscedit:head title="reactioninfo.title" />
+
+<cmsc-dr:getreaction number="${param.objectnumber}" var="reactionObject"/>
+<body>
+ <div class="side_block_green" style="width: 100%">
+ <div class="header">
+ <div class="title">
+ <fmt:message key="reactioninfo.title" />: ${reactionObject.title}
+ </div>
+ <div class="header_end"></div>
+ </div>
+ <div class="body" >
+
+ <table class="listcontent">
+ <tr>
+ <td><fmt:message key="reactioninfo.number" />:</td>
+ <td>${reactionObject.number}</td>
+ </tr>
+ <tr>
+ <td><fmt:message key="secondaryinfo.creationdate" />:</td>
+ <td><fmt:formatDate value="${reactionObject.creationdate}"
pattern="dd MMMMM yyyy hh:mm:ss"/></td>
+ </tr>
+ <tr>
+ <td><fmt:message key="secondaryinfo.creator" />:</td>
+ <td>${reactionObject.name}</td>
+ </tr>
+ <tr>
+ <td><fmt:message key="reactioninfo.titlefield" />:</td>
+ <td>${reactionObject.title}</td>
+ </tr>
+ <tr>
+ <td><fmt:message key="reactioninfo.bodyfield" />:</td>
+ <td>${reactionObject.body}</td>
+ </tr>
+ <tr>
+ <td><fmt:message key="reactioninfo.emailfield" />:</td>
+ <td><a
href="mailto:${reactionObject.email}">${reactionObject.email}</a></td>
+ </tr>
+ </table>
+ <table class="listcontent">
+ <tr>
+ <td>
+ <hr/>
+ <fmt:message key="reactioninfo.related" />
+ <table>
+ <tr>
+ <td>
+ <b>${reactionObject.contentTitle}</b>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <ul class="shortcuts">
+ <li class="close">
+ <a href="#" onClick="window.close()"><fmt:message
key="reactioninfo.close" /></a>
+ </li>
+ </ul>
+ </div>
+ <div class="side_block_end"></div>
+ </div>
+</body>
+
+</html:html>
</mm:content>
\ No newline at end of file
Modified:
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactionsearch.jsp
===================================================================
---
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactionsearch.jsp
2009-06-05 13:10:39 UTC (rev 35772)
+++
CMSContainer/trunk/CMSContainer_Modules/directreaction/src/webapp/editors/resources/reactionsearch.jsp
2009-06-05 13:10:55 UTC (rev 35773)
@@ -1,116 +1,118 @@
-<%...@page language="java" contentType="text/html;charset=utf-8"
-%><%...@include file="globals.jsp"
-%><%@ taglib prefix="edit" tagdir="/WEB-INF/tags/edit"
-%><fmt:setBundle basename="cmsc-reactions" scope="request" /><%...@page
import="java.util.Iterator,
- com.finalist.cmsc.mmbase.PropertiesUtil"
-%><mm:content type="text/html" encoding="UTF-8" expires="0">
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html:html xhtml="true">
-<cmscedit:head title="reactions.title">
- <script src="../repository/search.js" type="text/javascript"></script>
- <script src="../repository/content.js" type="text/javascript"></script>
- <script type="text/javascript">
- function selectElement(element, title, src) {
- if(window.top.opener != undefined) {
-
window.top.opener.selectElement(element, title, src);
- window.top.close();
- }
- }
-
- function showInfo(objectnumber) {
- openPopupWindow('reactioninfo', '500', '500',
'reactioninfo.jsp?objectnumber='+objectnumber);
- }
- </script>
-</cmscedit:head>
- <body>
- <mm:cloud jspvar="cloud" loginpage="../../editors/login.jsp">
-
-<mm:import externid="action">search</mm:import><%-- either: search of select
--%>
-
- <div class="tabs">
- <div class="tab_active">
- <div class="body">
- <div>
- <a href="#"><fmt:message key="reactions.title" /></a>
- </div>
- </div>
- </div>
- </div>
-
- <div class="editor" style="height:500px">
- <div class="body">
-
- <mm:import id="searchinit"><c:url
value='/editors/resources/ReactionInitAction.do'/></mm:import>
+<%...@page language="java" contentType="text/html;charset=utf-8"
+%><%...@include file="globals.jsp"
+%><%@ taglib prefix="edit" tagdir="/WEB-INF/tags/edit"
+%><fmt:setBundle basename="cmsc-reactions" scope="request"
+/><%...@page import="java.util.Iterator,
com.finalist.cmsc.mmbase.PropertiesUtil"
+%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<mm:content type="text/html" encoding="UTF-8" expires="0">
+<html:html xhtml="true">
+<cmscedit:head title="reactions.title">
+ <script src="../repository/search.js" type="text/javascript"></script>
+ <script src="../repository/content.js" type="text/javascript"></script>
+ <script type="text/javascript">
+ function selectElement(element, title, src) {
+ if(window.top.opener != undefined) {
+ window.top.opener.selectElement(element, title,
src);
+ window.top.close();
+ }
+ }
+
+ function showInfo(objectnumber) {
+ openPopupWindow('reactioninfo', '500', '500',
'reactioninfo.jsp?objectnumber='+objectnumber);
+ }
+ </script>
+</cmscedit:head>
+ <body>
+ <mm:cloud jspvar="cloud" loginpage="../../editors/login.jsp">
+
+<mm:import externid="action">search</mm:import><%-- either: search of select
--%>
+
+ <div class="tabs">
+ <div class="tab_active">
+ <div class="body">
+ <div>
+ <a href="#"><fmt:message key="reactions.title" /></a>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="editor" style="height:500px">
+ <div class="body">
+
+ <mm:import id="searchinit"><c:url
value='/editors/resources/ReactionInitAction.do'/></mm:import>
<c:set
var="pagerDOToffset"><%=request.getParameter("pager.offset")%></c:set>
- <html:form action="/editors/resources/ReactionAction" method="post">
- <html:hidden property="action" value="${action}"/>
- <html:hidden property="offset"/>
+ <html:form action="/editors/resources/ReactionAction" method="post">
+ <html:hidden property="action" value="${action}"/>
+ <html:hidden property="offset"/>
<html:hidden property="pager.offset" value="${pagerDOToffset}"/>
- <html:hidden property="order"/>
- <html:hidden property="direction"/>
-
-<mm:import id="contenttypes" jspvar="contenttypes">reaction</mm:import>
-<%...@include file="reactionform.jsp" %>
-
- </html:form>
- </div>
-
-<div class="ruler_green"><div><fmt:message key="reactions.results"
/></div></div>
-
-<div class="body">
-<mm:import externid="results" jspvar="nodeList" vartype="List" />
-<mm:import externid="resultCount" jspvar="resultCount"
vartype="Integer">0</mm:import>
-<mm:import externid="offset" jspvar="offset" vartype="Integer">0</mm:import>
-<c:if test="${resultCount > 0}">
+ <html:hidden property="order"/>
+ <html:hidden property="direction"/>
+
+<mm:import id="contenttypes" jspvar="contenttypes">reaction</mm:import>
+<%...@include file="reactionform.jsp" %>
+
+ </html:form>
+ </div>
+
+<div class="ruler_green"><div><fmt:message key="reactions.results"
/></div></div>
+
+<div class="body">
+<mm:import externid="results" jspvar="nodeList" vartype="List" />
+<mm:import externid="resultCount" jspvar="resultCount"
vartype="Integer">0</mm:import>
+<mm:import externid="offset" jspvar="offset" vartype="Integer">0</mm:import>
+<c:if test="${resultCount > 0}">
<edit:pages search="true" totalElements="${resultCount}" offset="${offset}"/>
-
- <table>
- <tr class="listheader">
- <th> </th>
- <th><a href="#" class="headerlink"
onClick="orderBy('name');"><fmt:message key="reactionsearch.namecolumn"
/></a></th>
- <th><a href="#" class="headerlink"
onClick="orderBy('title');"><fmt:message key="reactionsearch.titlecolumn"
/></a></th>
- <th><fmt:message key="reactionsearch.articlecolumn" /></th>
- </tr>
- <tbody class="hover">
- <c:set var="useSwapStyle">true</c:set>
- <mm:listnodes referid="results">
- <mm:import
id="url">javascript:selectElement('<mm:field name="number"/>', '<mm:field
name="title" escape="js-single-quotes"/>');</mm:import>
- <tr <c:if test="${useSwapStyle}">class="swap"</c:if>
href="<mm:write referid="url"/>">
- <td style="white-space:nowrap;">
-
- <a href="#" onClick="showInfo(<mm:field name="number"
/>);" >
- <img src="../gfx/icons/info.png" alt="<fmt:message
key="reactionsearch.icon.info" />" title="<fmt:message
key="reactionsearch.icon.info" />" />
- </a>
-
- <c:if test="${action != 'select'}">
- <mm:hasrank
minvalue="siteadmin">
- <a href="<mm:url page="DeleteReactionAction.do">
- <mm:param name="objectnumber"><mm:field
name="number" /></mm:param>
- <mm:param name="returnurl"
value='<%="/editors/resources/ReactionAction.do" +
request.getAttribute("geturl")%>' />
- </mm:url>">
- <img src="../gfx/icons/delete.png"
title="<fmt:message key="reactionsearch.icon.delete" />"/></a>
- </mm:hasrank>
- </c:if>
-
- </td>
-
- <td onMouseDown="objClick(this);"><mm:field
name="name"/></td>
- <td onMouseDown="objClick(this);"><mm:field
name="title"/></td>
- <mm:field name="number" write="false" jspvar="myId"/>
- <td onMouseDown="objClick(this);">${titles[myId]}</td>
- </tr>
- <c:set var="useSwapStyle">${!useSwapStyle}</c:set>
- </mm:listnodes>
- </tbody>
- </table>
-</c:if>
-<c:if test="${resultCount == 0 && param.title != null}">
- <fmt:message key="reactionsearch.noresult" />
-</c:if>
-<c:if test="${resultCount > 0}">
+
+ <table>
+ <tr class="listheader">
+ <th> </th>
+ <th><a href="#" class="headerlink"
onClick="orderBy('name');"><fmt:message key="reactionsearch.namecolumn"
/></a></th>
+ <th><a href="#" class="headerlink"
onClick="orderBy('title');"><fmt:message key="reactionsearch.titlecolumn"
/></a></th>
+ <th><fmt:message key="reactionsearch.articlecolumn" /></th>
+ </tr>
+ <tbody class="hover">
+ <c:set var="useSwapStyle">true</c:set>
+ <mm:listnodes referid="results">
+ <mm:import
id="url">javascript:selectElement('<mm:field name="number"/>', '<mm:field
name="title" escape="js-single-quotes"/>');</mm:import>
+ <tr <c:if test="${useSwapStyle}">class="swap"</c:if>
href="<mm:write referid="url"/>">
+ <td style="white-space:nowrap;">
+
+ <a href="#" onClick="showInfo(<mm:field name="number"
/>);" >
+ <img src="../gfx/icons/info.png" alt="<fmt:message
key="reactionsearch.icon.info" />" title="<fmt:message
key="reactionsearch.icon.info" />" />
+ </a>
+
+ <c:if test="${action != 'select'}">
+ <mm:hasrank
minvalue="siteadmin">
+ <a href="<mm:url page="DeleteReactionAction.do">
+ <mm:param name="objectnumber"><mm:field
name="number" /></mm:param>
+ <mm:param name="returnurl"
value='<%="/editors/resources/ReactionAction.do" +
request.getAttribute("geturl")%>' />
+ </mm:url>">
+ <img src="../gfx/icons/delete.png"
title="<fmt:message key="reactionsearch.icon.delete" />"/></a>
+ </mm:hasrank>
+ </c:if>
+
+ </td>
+
+ <td onMouseDown="objClick(this);"><mm:field
name="name"/></td>
+ <td onMouseDown="objClick(this);"><mm:field
name="title"/></td>
+ <mm:field name="number" write="false" jspvar="myId"/>
+ <td onMouseDown="objClick(this);">${titles[myId]}</td>
+ </tr>
+ <c:set var="useSwapStyle">${!useSwapStyle}</c:set>
+ </mm:listnodes>
+ </tbody>
+ </table>
+</c:if>
+<c:if test="${resultCount == 0 && param.title != null}">
+ <fmt:message key="reactionsearch.noresult" />
+</c:if>
+<c:if test="${resultCount > 0}">
<edit:pages search="true" totalElements="${resultCount}"
offset="${offset}"/>
-</c:if>
-</mm:cloud>
- </body>
-</html:html>
+</c:if>
+</mm:cloud>
+</div>
+</div>
+ </body>
+</html:html>
</mm:content>
\ No newline at end of file
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs