Pollen-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- 3196 discussions
r3185 - in branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main: java/org/chorem/pollen/ui java/org/chorem/pollen/ui/actions/json java/org/chorem/pollen/ui/actions/poll resources/config resources/i18n webapp/WEB-INF/jsp webapp/WEB-INF/jsp/poll
by tchemit@users.chorem.org 14 Mar '12
by tchemit@users.chorem.org 14 Mar '12
14 Mar '12
Author: tchemit
Date: 2012-03-14 15:43:26 +0100 (Wed, 14 Mar 2012)
New Revision: 3185
Url: http://chorem.org/repositories/revision/pollen/3185
Log:
- add delete poll action
- add adminId for poll in json actions
- remove some javascript logs
- change session log levels
Added:
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ConfirmDeletePoll.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/confirmDeletePoll.jsp
Modified:
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/AbstractJSONPaginedAction.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/GetCreatedPolls.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/GetInvitedPolls.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DeletePoll.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/createdList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/participatedList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/pollListHelper.jsp
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java 2012-03-14 14:43:26 UTC (rev 3185)
@@ -62,21 +62,24 @@
public void putDynamicData(String token, Object data) {
getDynamicData().put(token, data);
- if (log.isInfoEnabled()) {
- log.info("Dynamic attributes size : " + getDynamicData().size());
+ if (log.isDebugEnabled()) {
+ log.debug("Dynamic attributes size : " + getDynamicData().size());
}
}
public void removeDynamicData(String token) {
getDynamicData().remove(token);
- if (log.isInfoEnabled()) {
- log.info("Dynamic attributes size : " + getDynamicData().size());
+ if (log.isDebugEnabled()) {
+ log.debug("Dynamic attributes size : " + getDynamicData().size());
}
}
public void clearDynamicData() {
if (dynamicData != null) {
dynamicData.clear();
+ if (log.isDebugEnabled()) {
+ log.debug("Dynamic attributes size : " + dynamicData.size());
+ }
}
}
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/AbstractJSONPaginedAction.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/AbstractJSONPaginedAction.java 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/AbstractJSONPaginedAction.java 2012-03-14 14:43:26 UTC (rev 3185)
@@ -27,6 +27,7 @@
import org.apache.struts2.json.JSONException;
import org.apache.struts2.json.JSONUtil;
import org.chorem.pollen.ui.actions.PollenActionSupport;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
import org.nuiton.web.struts2.FilterPagerUtil;
/**
@@ -47,8 +48,8 @@
public abstract Integer getRecords();
- protected FilterPagerUtil.FilterPagerBean pager =
- FilterPagerUtil.newFilterPagerBean();
+ protected TopiaFilterPagerUtil.FilterPagerBean pager =
+ TopiaFilterPagerUtil.newFilterPagerBean();
protected String filters;
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/GetCreatedPolls.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/GetCreatedPolls.java 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/GetCreatedPolls.java 2012-03-14 14:43:26 UTC (rev 3185)
@@ -92,6 +92,7 @@
Poll.PROPERTY_END_DATE
);
map.put("id", poll.getTopiaId());
+ map.put("adminId", poll.getAdminId());
Set<String> functions = getPollFunctions(poll);
map.put("functions", functions);
polls[index++] = map;
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/GetInvitedPolls.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/GetInvitedPolls.java 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/json/GetInvitedPolls.java 2012-03-14 14:43:26 UTC (rev 3185)
@@ -95,6 +95,7 @@
Poll.PROPERTY_END_DATE
);
String userEmail = getPollenSession().getUserAccount().getEmail();
+ map.put("adminId", poll.getAdminId());
map.put("voteId", getVoteId(poll, userEmail));
map.put("id", poll.getTopiaId());
Set<String> functions = getPollFunctions(poll);
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ConfirmDeletePoll.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ConfirmDeletePoll.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ConfirmDeletePoll.java 2012-03-14 14:43:26 UTC (rev 3185)
@@ -0,0 +1,62 @@
+/*
+ * #%L
+ * Pollen :: UI (strust2)
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.ui.actions.poll;
+
+import com.google.common.base.Preconditions;
+import org.chorem.pollen.business.persistence.Poll;
+import org.chorem.pollen.services.impl.PollService;
+
+/**
+ * Confirm to delete a poll.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.2.6
+ */
+public class ConfirmDeletePoll extends AbstractPollUriIdAction {
+
+ private static final long serialVersionUID = 1L;
+
+ protected Poll poll;
+
+ protected String redirectUrl;
+
+ public String getRedirectUrl() {
+ return redirectUrl;
+ }
+
+ public void setRedirectUrl(String redirectUrl) {
+ this.redirectUrl = redirectUrl;
+ }
+
+ public Poll getPoll() {
+ return poll;
+ }
+
+ @Override
+ public String execute() throws Exception {
+ Preconditions.checkNotNull(pollId);
+ poll = newService(PollService.class).getPollByPollId(pollId);
+ return SUCCESS;
+ }
+}
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ConfirmDeletePoll.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DeletePoll.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DeletePoll.java 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DeletePoll.java 2012-03-14 14:43:26 UTC (rev 3185)
@@ -23,7 +23,7 @@
*/
package org.chorem.pollen.ui.actions.poll;
-import org.chorem.pollen.ui.actions.PollenActionSupport;
+import org.chorem.pollen.services.impl.PollService;
/**
* Deletes an existing poll.
@@ -34,4 +34,26 @@
public class DeletePoll extends AbstractPollUriIdAction {
private static final long serialVersionUID = 1L;
+
+ protected String redirectUrl;
+
+ public String getRedirectUrl() {
+ return redirectUrl;
+ }
+
+ public void setRedirectUrl(String redirectUrl) {
+ this.redirectUrl = redirectUrl;
+ }
+
+ @Override
+ public String execute() throws Exception {
+
+ PollService service = newService(PollService.class);
+
+ service.deletePoll(pollId, getPollenSession().getUserAccount(), accountId);
+
+// String fullUrl = getApplicationUrl() + redirectUrl;
+// setRedirectUrl(fullUrl);
+ return SUCCESS;
+ }
}
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml 2012-03-14 14:43:26 UTC (rev 3185)
@@ -130,12 +130,21 @@
<result>/WEB-INF/jsp/home.jsp</result>
</action>
+ <!-- confirm delete poll -->
+ <action name="confirmDeletePoll/*"
+ class="org.chorem.pollen.ui.actions.poll.ConfirmDeletePoll">
+ <param name="uriId">{1}</param>
+ <result>/WEB-INF/jsp/poll/confirmDeletePoll.jsp</result>
+ </action>
+
<!-- delete poll -->
<action name="delete/*"
class="org.chorem.pollen.ui.actions.poll.DeletePoll">
<param name="uriId">{1}</param>
- <result name="input">/WEB-INF/jsp/poll/delete.jsp</result>
- <result>/WEB-INF/jsp/home.jsp</result>
+ <result type="redirect">
+ <param name="location">${redirectUrl}</param>
+ <param name="prependServletContext">false</param>
+ </result>
</action>
<!-- display poll result -->
@@ -149,8 +158,7 @@
<action name="createdList"
class="org.chorem.pollen.ui.actions.poll.CreatedList">
<interceptor-ref name="pollenBasicLogguedStack"/>
- <result name="input">/WEB-INF/jsp/poll/createdList.jsp</result>
- <result>/WEB-INF/jsp/home.jsp</result>
+ <result>/WEB-INF/jsp/poll/createdList.jsp</result>
</action>
<!-- display participated polls -->
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties 2012-03-14 14:43:26 UTC (rev 3185)
@@ -173,9 +173,11 @@
pollen.info.poll.created=Poll created
pollen.info.poll.updated=Poll modified
pollen.information.confirmDeleteChoice=Confirm delete of choice %s
+pollen.information.confirmDeletePoll=Confirm delete of poll\:
pollen.information.confirmDeleteVote=Confirm delete of vote for %s
pollen.information.favoriteList.created=Favorite list %s created.
pollen.information.favoriteList.deleted=Favorite list %s deleted.
+pollen.information.irreversible.operation=Be ware, this operation is irreversible.
pollen.information.need.login=You must be logged to access this page. Please fill the form below.
pollen.information.pollAccount.addedTofavoriteList=Member '%s was added to favorite list.
pollen.information.pollAccount.removedFromFavoriteList=Member %s was removed from favorite list.
@@ -209,11 +211,12 @@
pollen.menu.register=Register
pollen.menu.userFavoriteLists=Voting lists
pollen.title.createPoll=New poll
-pollen.title.delete.pollChoice=Confirm to delete a poll choice
-pollen.title.delete.pollComment=Confirm to delete a poll comment
-pollen.title.delete.pollVote=Confirm to delete a poll vote
-pollen.title.editFavoriteList=Edition de la liste des favoris
-pollen.title.favoriteLists=Vos listes de votants
+pollen.title.delete.poll=Delete a poll
+pollen.title.delete.pollChoice=Delete a poll choice
+pollen.title.delete.pollComment=Delete a poll comment
+pollen.title.delete.pollVote=Delete a poll vote
+pollen.title.editFavoriteList=Edit a favorite list
+pollen.title.favoriteLists=Your favorite lists
pollen.title.myAccount=My account
pollen.title.pollsCreatedList=Polls created
pollen.title.pollsCreatedList.legend=Polls you have proposed
@@ -222,6 +225,6 @@
pollen.title.pollsParticipatedList=Polls participated
pollen.title.pollsParticipatedList.legend=Polls in which you are involved
pollen.title.register=Register
-pollen.title.selectPersonListToAddVotingList=Sélectionner une liste de votant à ajouter
-pollen.title.selectPersonListToCreateVotingList=Sélectionner une liste de votant pour créer un nouveau groupe
+pollen.title.selectPersonListToAddVotingList=Select a voter list to import in voting list
+pollen.title.selectPersonListToCreateVotingList=Select a favorite list to import in a new voting list
pollen.title.usersList=Users administration
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties 2012-03-14 14:43:26 UTC (rev 3185)
@@ -179,10 +179,12 @@
pollen.fieldset.userInformation.toUpdate=Informations de l'utilisateur à mettre à jour
pollen.info.poll.created=Sondage créé
pollen.info.poll.updated=Sondage mise à jour
-pollen.information.confirmDeletePollChoice=Confirmer la suppression du chois %s
+pollen.information.confirmDeletePoll=Confirmer la suppression du sondage \:
+pollen.information.confirmDeletePollChoice=Confirmer la suppression du choix %s
pollen.information.confirmDeletePollVote=Confirmer la suppression du vote de %s
pollen.information.favoriteList.created=La liste %s a été créée.
pollen.information.favoriteList.deleted=La liste %s a été supprimée.
+pollen.information.irreversible.operation=Attention, Cette opération est irréversible.
pollen.information.need.login=Vous devez être identifié pour pouvoir accéder à cette page. Veuillez remplir le formulaire ci-dessous.
pollen.information.pollAccount.addedTofavoriteList=Le membre %s a été ajoutée à la liste des favoris.
pollen.information.pollAccount.removedFromFavoriteList=Le membre %s a été supprimé de la liste des favoris.
@@ -218,9 +220,10 @@
pollen.tab.poll.general=Informations
pollen.tab.poll.options=Options
pollen.title.createPoll=Nouveau sondage
-pollen.title.delete.pollChoice=Confirmer la suppresion d'un choix
-pollen.title.delete.pollComment=Confirmer la suppresion d'un commentaire
-pollen.title.delete.pollVote=Confirmer la suppresion d'un vote
+pollen.title.delete.poll=Suppression d'un sondage
+pollen.title.delete.pollChoice=Suppression d'un choix
+pollen.title.delete.pollComment=Suppression d'un commentaire
+pollen.title.delete.pollVote=Suppression d'un vote
pollen.title.editFavoriteList=Edition de la liste des favoris
pollen.title.favoriteLists=Vos listes de votants
pollen.title.myAccount=Mon compte
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/confirmDeletePoll.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/confirmDeletePoll.jsp (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/confirmDeletePoll.jsp 2012-03-14 14:43:26 UTC (rev 3185)
@@ -0,0 +1,56 @@
+<%--
+ #%L
+ Pollen :: UI (strust2)
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ --%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<script type="text/javascript">
+ function cancel() {
+ $('#confirmDeletePollDialog').dialog('close');
+ return false;
+ }
+</script>
+<s:form method="POST" namespace="/poll">
+ <fieldset class="ui-widget-content ui-corner-all">
+
+ <s:hidden key="redirectUrl" label=''/>
+ <s:hidden key="uriId" label=''/>
+
+ <s:text name="pollen.information.confirmDeletePoll"/>
+ <div align="center" style="padding-top: 1em;">
+ "<strong><s:property value="poll.title"/></strong>"
+ </div>
+ <br/>
+
+ <div style="padding-top: 1em;">
+ <strong><s:text
+ name="pollen.information.irreversible.operation"/></strong>
+ </div>
+ <hr/>
+ <div align="right">
+ <s:submit onclick="return cancel();" theme="simple"
+ key="pollen.action.cancel"/>
+ <s:submit key="pollen.action.delete" theme="simple"
+ action="delete/%{pollId}"/>
+ </div>
+ </fieldset>
+</s:form>
\ No newline at end of file
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/confirmDeletePoll.jsp
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp 2012-03-14 14:43:26 UTC (rev 3185)
@@ -40,7 +40,6 @@
}
function selectPersonListToAddToVotingList(votingListNumber) {
- console.info("Add to votingList "+votingListNumber);
$('.ui-dialog-title').html('<s:text name="pollen.title.selectPersonListToAddVotingList"/>')
var dialog = $("#selectPersonListDialog");
var url = "<s:url action='selectPersonListToAddToVotingList' namespace='/poll'/>";
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/createdList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/createdList.jsp 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/createdList.jsp 2012-03-14 14:43:26 UTC (rev 3185)
@@ -25,6 +25,9 @@
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags" %>
+<script type="text/javascript">
+var redirectUrl = '<s:url namespace="/poll" action="createdList" method="input"/>';
+</script>
<%@include file="/WEB-INF/jsp/pollListHelper.jsp"%>
<title><s:text name="pollen.title.pollsCreatedList"/></title>
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/participatedList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/participatedList.jsp 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/participatedList.jsp 2012-03-14 14:43:26 UTC (rev 3185)
@@ -24,7 +24,10 @@
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags" %>
-
+<script type="text/javascript">
+ var redirectUrl =
+ '<s:url namespace="/poll" action="participatedList" method="input"/>';
+</script>
<%@include file="/WEB-INF/jsp/pollListHelper.jsp"%>
<title><s:text name="pollen.title.pollsParticipatedList"/></title>
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp 2012-03-14 14:43:26 UTC (rev 3185)
@@ -24,7 +24,6 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
-
<script type="text/javascript">
var votingListNumber = parseInt('<s:property value='%{votingListNumber}'/>');
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/pollListHelper.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/pollListHelper.jsp 2012-03-14 14:41:51 UTC (rev 3184)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/pollListHelper.jsp 2012-03-14 14:43:26 UTC (rev 3185)
@@ -23,6 +23,7 @@
--%>
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
<script type="text/javascript"
src="<s:url value='/js/gridHelper.js' />"></script>
@@ -53,16 +54,27 @@
<s:url id='cloneImg' value='/img/copy.png'/>
<s:set id='cloneTitle'><s:text name="pollen.action.pollClone"/></s:set>
-<s:url id="deleteUrl" action="delete/" namespace="/poll" method="input"/>
+<s:url id="deleteUrl" action="confirmDeletePoll/" namespace="/poll"/>
<s:url id='deleteImg' value='/img/delete.png'/>
<s:set id='deleteTitle'><s:text name="pollen.action.pollDelete"/></s:set>
<script type="text/javascript">
+ function confirmDelete(id) {
+ var dialog = $("#confirmDeletePollDialog");
+ var url = "<s:url action='confirmDeletePoll/' namespace='/poll'/>";
+ url += id + '?' + $.param({redirectUrl:redirectUrl});
+ dialog.load(url);
+ dialog.dialog('open');
+ return false;
+ }
+
function pollFunctions(cellvalue, options, rowObject) {
var id = rowObject.pollId;
+ var adminId = rowObject.adminId;
+ console.info("adminId = "+adminId);
var result = "";
if (rowObject['voteId']) {
@@ -76,23 +88,32 @@
result += formatLink("${resultUrl}" + id, "${resultImg}", "Result", "${resultTitle}")
}
if (cellvalue.indexOf('edit') > -1) {
- result += formatLink("${editUrl}" + id, "${editImg}", "Edit", "${editTitle}")
+ result += formatLink("${editUrl}" + adminId, "${editImg}", "Edit", "${editTitle}")
}
if (cellvalue.indexOf('close') > -1) {
- result += formatLink("${closeUrl}" + id, "${closeImg}", "Close", "${closeTitle}")
+ result += formatLink("${closeUrl}" + adminId, "${closeImg}", "Close", "${closeTitle}")
}
if (cellvalue.indexOf('export') > -1) {
result += formatLink("${exportUrl}" + id, "${exportImg}", "Export", "${exportTitle}")
}
if (cellvalue.indexOf('clone') > -1) {
- result += formatLink("${cloneUrl}" + id, "${cloneImg}", "Clone", "${cloneTitle}")
+ result += formatLink("${cloneUrl}" + adminId, "${cloneImg}", "Clone", "${cloneTitle}")
}
if (cellvalue.indexOf('delete') > -1) {
- result += formatLink("${deleteUrl}" + id, "${deleteImg}", "Delete", "${deleteTitle}")
+ var script = 'return confirmDelete("' + adminId + '");'
+ result += formatLinkByScript(script, "${deleteImg}", "Delete", "${deleteTitle}")
}
return result;
}
function formatLink(url, image, imageAlt, imageTitle) {
return "<a href='" + url + "'><image alt='" + imageAlt + "' title='" + imageTitle + "' src='" + image + "'> </a>";
}
+ function formatLinkByScript(script, image, imageAlt, imageTitle) {
+ return "<a href='#' onclick='" + script + "'><image alt='" + imageAlt + "' title='" + imageTitle + "' src='" + image + "'> </a>";
+ }
</script>
+
+<sj:dialog id="confirmDeletePollDialog" resizable="true" autoOpen="false"
+ title="%{getText('pollen.title.delete.poll')}"
+ modal="true" width="500"/>
+
1
0
r3184 - in branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources: . org/chorem/pollen/ui/actions/admin org/chorem/pollen/ui/actions/poll org/chorem/pollen/ui/actions/user
by tchemit@users.chorem.org 14 Mar '12
by tchemit@users.chorem.org 14 Mar '12
14 Mar '12
Author: tchemit
Date: 2012-03-14 15:41:51 +0100 (Wed, 14 Mar 2012)
New Revision: 3184
Url: http://chorem.org/repositories/revision/pollen/3184
Log:
use cached dtd for validators
Modified:
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/admin/ManageUsers-create-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/admin/ManageUsers-edit-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/poll/AddComment-addComment-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Edit-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Login-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteList-addPollAccount-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteList-editPollAccount-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteLists-createFavoriteList-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Register-validation.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/validators.xml
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/admin/ManageUsers-create-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/admin/ManageUsers-create-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/admin/ManageUsers-create-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -21,9 +21,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
#L%
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="createUser.login">
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/admin/ManageUsers-edit-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/admin/ManageUsers-edit-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/admin/ManageUsers-edit-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -21,9 +21,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
#L%
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="editUser.login">
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/poll/AddComment-addComment-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/poll/AddComment-addComment-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/poll/AddComment-addComment-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -24,9 +24,8 @@
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Edit-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Edit-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Edit-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -21,9 +21,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
#L%
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="user.login">
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Login-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Login-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Login-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -21,9 +21,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
#L%
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="login">
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteList-addPollAccount-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteList-addPollAccount-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteList-addPollAccount-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -24,9 +24,8 @@
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteList-editPollAccount-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteList-editPollAccount-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteList-editPollAccount-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -24,9 +24,8 @@
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteLists-createFavoriteList-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteLists-createFavoriteList-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/ManageFavoriteLists-createFavoriteList-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -21,9 +21,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
#L%
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="createFavoriteList.name">
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Register-validation.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Register-validation.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/org/chorem/pollen/ui/actions/user/Register-validation.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -21,9 +21,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
#L%
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="user.login">
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/validators.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/validators.xml 2012-03-14 14:41:15 UTC (rev 3183)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/validators.xml 2012-03-14 14:41:51 UTC (rev 3184)
@@ -23,8 +23,7 @@
#L%
-->
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
+<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<!-- default validators from XWork framework -->
1
0
Author: tchemit
Date: 2012-03-14 15:41:15 +0100 (Wed, 14 Mar 2012)
New Revision: 3183
Url: http://chorem.org/repositories/revision/pollen/3183
Log:
use snpshot of topia
Modified:
branches/pollen-1.2.6-struts2/pom.xml
Modified: branches/pollen-1.2.6-struts2/pom.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pom.xml 2012-03-14 14:40:57 UTC (rev 3182)
+++ branches/pollen-1.2.6-struts2/pom.xml 2012-03-14 14:41:15 UTC (rev 3183)
@@ -435,7 +435,7 @@
<projectId>pollen</projectId>
<!-- customized versions -->
- <topiaVersion>2.6.7</topiaVersion>
+ <topiaVersion>2.6.9-SNAPSHOT</topiaVersion>
<eugenePluginVersion>2.4.2</eugenePluginVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
<tapestryVersion>5.1.0.5</tapestryVersion>
1
0
r3182 - in branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services: exceptions impl
by tchemit@users.chorem.org 14 Mar '12
by tchemit@users.chorem.org 14 Mar '12
14 Mar '12
Author: tchemit
Date: 2012-03-14 15:40:57 +0100 (Wed, 14 Mar 2012)
New Revision: 3182
Url: http://chorem.org/repositories/revision/pollen/3182
Log:
- all queries are in persistence layer
- implements delete poll action
Added:
branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/PollAccountNotFound.java
branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/UnauthorizedPollAccessException.java
Modified:
branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/FavoriteService.java
branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollCommentService.java
branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java
branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/UserService.java
branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/VoteService.java
Added: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/PollAccountNotFound.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/PollAccountNotFound.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/PollAccountNotFound.java 2012-03-14 14:40:57 UTC (rev 3182)
@@ -0,0 +1,34 @@
+/*
+ * #%L
+ * Pollen :: Services
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.services.exceptions;
+
+/**
+ * TODO
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.2.6
+ */
+public class PollAccountNotFound extends Exception {
+ private static final long serialVersionUID = 1L;
+}
Property changes on: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/PollAccountNotFound.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/UnauthorizedPollAccessException.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/UnauthorizedPollAccessException.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/UnauthorizedPollAccessException.java 2012-03-14 14:40:57 UTC (rev 3182)
@@ -0,0 +1,34 @@
+/*
+ * #%L
+ * Pollen :: Services
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.services.exceptions;
+
+/**
+ * TODO
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.2.6
+ */
+public class UnauthorizedPollAccessException extends Exception {
+ private static final long serialVersionUID = 1L;
+}
Property changes on: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/exceptions/UnauthorizedPollAccessException.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/FavoriteService.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/FavoriteService.java 2012-03-14 14:40:02 UTC (rev 3181)
+++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/FavoriteService.java 2012-03-14 14:40:57 UTC (rev 3182)
@@ -43,8 +43,7 @@
import org.chorem.pollen.services.exceptions.ParticipantNotFoundInListException;
import org.chorem.pollen.services.exceptions.UserNotFoundException;
import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.framework.TopiaQuery;
-import org.nuiton.web.struts2.FilterPagerUtil;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
import java.util.List;
@@ -54,23 +53,13 @@
private static final Log log = LogFactory.getLog(FavoriteService.class);
public List<PersonList> getFavoriteLists(UserAccount user,
- FilterPagerUtil.FilterPagerBean pager) {
+ TopiaFilterPagerUtil.FilterPagerBean pager) {
Preconditions.checkNotNull(user);
- PersonListDAO dao = getDAO(PersonList.class);
-
try {
-
- TopiaQuery countQuery = dao.createQuery("e");
- countQuery.addWhere("e." + PersonList.PROPERTY_OWNER, TopiaQuery.Op.EQ, user);
- long records = dao.countByQuery(countQuery);
-
- pager.setRecords((int) records);
-
- TopiaQuery query = FilterPagerUtil.addPagerToQuery(countQuery, pager);
-
- List<PersonList> result = dao.findAllByQuery(query);
+ PersonListDAO dao = getDAO(PersonList.class);
+ List<PersonList> result = dao.getFavoriteLists(user, pager);
return result;
} catch (TopiaException e) {
throw new PollenTechnicalException(e);
@@ -81,13 +70,9 @@
Preconditions.checkNotNull(user);
- PersonListDAO dao = getDAO(PersonList.class);
-
try {
-
- TopiaQuery query = dao.createQuery("e");
- query.addWhere("e." + PersonList.PROPERTY_OWNER, TopiaQuery.Op.EQ, user);
- List<PersonList> result = dao.findAllByQuery(query);
+ PersonListDAO dao = getDAO(PersonList.class);
+ List<PersonList> result = dao.getFavoriteLists(user);
return result;
} catch (TopiaException e) {
throw new PollenTechnicalException(e);
@@ -100,9 +85,8 @@
Preconditions.checkNotNull(user);
Preconditions.checkNotNull(favoriteListId);
- PersonListDAO dao = getDAO(PersonList.class);
-
try {
+ PersonListDAO dao = getDAO(PersonList.class);
PersonList favoriteList = dao.findByTopiaId(favoriteListId);
@@ -124,23 +108,15 @@
}
public List<PollAccount> getFavoriteListUsers(PersonList favoriteList,
- FilterPagerUtil.FilterPagerBean pager) {
+ TopiaFilterPagerUtil.FilterPagerBean pager) {
Preconditions.checkNotNull(favoriteList);
Preconditions.checkNotNull(pager);
- PollAccountDAO dao = getDAO(PollAccount.class);
-
try {
- int records = favoriteList.sizePollAccount();
- pager.setRecords(records);
-
- TopiaQuery query = dao.createQuery("e");
- FilterPagerUtil.addPagerToQuery(query, pager);
- query.addWhere("e." + PollAccount.PROPERTY_PERSON_LIST, TopiaQuery.Op.EQ, favoriteList);
-
- List<PollAccount> result = dao.findAllByQuery(query);
+ PollAccountDAO dao = getDAO(PollAccount.class);
+ List<PollAccount> result = dao.getFavoriteListUsers(favoriteList, pager);
return result;
} catch (TopiaException e) {
@@ -171,13 +147,8 @@
// check list does not already exists
- TopiaQuery query = dao.createQuery("e");
+ boolean exist = dao.isPersonListExist(user, name);
- query.addWhere("e." + PersonList.PROPERTY_OWNER, TopiaQuery.Op.EQ, user);
- query.addWhere("e." + PersonList.PROPERTY_NAME, TopiaQuery.Op.EQ, name);
-
- boolean exist = dao.existByQuery(query);
-
if (exist) {
throw new FavoriteListAlreadyExistException();
@@ -258,10 +229,7 @@
}
// check there is other poll account in this list with same id
- TopiaQuery query = dao.createQuery("e");
- query.addWhere("e." + PollAccount.PROPERTY_PERSON_LIST, TopiaQuery.Op.EQ, personListToUpdate);
- query.addWhere("e." + PollAccount.PROPERTY_VOTING_ID, TopiaQuery.Op.EQ, pollAccount.getVotingId());
- boolean pollAccountExists = dao.existByQuery(query);
+ boolean pollAccountExists = dao.isPollAccountExist(personListToUpdate, pollAccount);
if (pollAccountExists) {
throw new ParticipantAlreadyFoundInListException();
@@ -314,11 +282,7 @@
}
// check there is another poll account in this list with same id
- TopiaQuery query = dao.createQuery("e");
- query.addWhere("e." + PollAccount.PROPERTY_PERSON_LIST, TopiaQuery.Op.EQ, personListToUpdate);
- query.addWhere("e." + PollAccount.PROPERTY_VOTING_ID, TopiaQuery.Op.EQ, pollAccount.getVotingId());
- query.addWhere("e." + PollAccount.TOPIA_ID, TopiaQuery.Op.NEQ, pollAccount.getTopiaId());
- boolean pollAccountExists = dao.existByQuery(query);
+ boolean pollAccountExists = dao.isPollAccountAlreadyExist(personListToUpdate, pollAccount);
if (pollAccountExists) {
throw new ParticipantAlreadyFoundInListException();
@@ -384,208 +348,4 @@
PollAccount pollAccount = newInstance(dao);
return pollAccount;
}
-
-// public void createFavoriteParticipant(FavoriteParticipant participant) throws ParticipantExistWithoutMailException, ParticipantAlreadyFoundInListException {
-// try {
-// FavoriteParticipantDAO dao =
-// PollenDAOHelper.getFavoriteParticipantDAO(getTransaction());
-//
-// checkFavoriteParticipant(dao, participant);
-//
-// // Create newParticipant with naturalId
-// FavoriteParticipant result =
-// dao.create(participant.getName(),
-// participant.getEmail(),
-// participant.getFavoriteList());
-//
-// // Set other field
-// result.setWeight(participant.getWeight());
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// public void deleteFavoriteParticipant(String id) {
-// try {
-// FavoriteParticipantDAO dao =
-// PollenDAOHelper.getFavoriteParticipantDAO(getTransaction());
-//
-// FavoriteParticipant participantLoaded = dao.findByTopiaId(id);
-// dao.delete(participantLoaded);
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// public FavoriteParticipant getFavoriteParticipant(String id) {
-// try {
-// FavoriteParticipantDAO dao =
-// PollenDAOHelper.getFavoriteParticipantDAO(getTransaction());
-//
-// FavoriteParticipant result = dao.findByTopiaId(id);
-// //No more needed
-//// // Load parent list
-//// result.getFavoriteList();
-//
-// return result;
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// public Map<String, FavoriteParticipant> getFavoriteParticipants(EntityFilter filter) {
-// try {
-// FavoriteParticipantDAO dao =
-// PollenDAOHelper.getFavoriteParticipantDAO(getTransaction());
-//
-// PollenQueryHelper.FavoriteParticipantProperty participantProperty =
-// PollenQueryHelper.newFavoriteParticipantProperty();
-//
-// TopiaQuery query = dao.createQueryFindAllByFavoriteList(filter);
-//
-// if (log.isDebugEnabled()) {
-// log.debug("Query : " + query);
-// }
-//
-// query.addLoad(participantProperty.favoriteList());
-//
-// Map<String, FavoriteParticipant> results =
-// dao.findAllMappedByQuery(query);
-//
-// return results;
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// public List<FavoriteList> getFavoriteLists(UserAccount user) {
-// try {
-// FavoriteListDAO dao =
-// PollenDAOHelper.getFavoriteListDAO(getTransaction());
-//
-// List<FavoriteList> result = dao.findAllByUserAccount(user);
-//
-// return result;
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// public void deleteFavoriteList(FavoriteList list) {
-// try {
-// FavoriteListDAO dao =
-// PollenDAOHelper.getFavoriteListDAO(getTransaction());
-//
-// FavoriteList listLoaded = dao.findByTopiaId(list.getId());
-// dao.delete(listLoaded);
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// public void createFavoriteList(FavoriteList list) throws FavoriteListAlreadyExistException {
-// try {
-// FavoriteListDAO dao =
-// PollenDAOHelper.getFavoriteListDAO(getTransaction());
-//
-// // check favoriteList name exist for user
-// UserAccount user = list.getUserAccount();
-//
-// // existing list found
-// if (dao.existByNaturalId(list.getName(), user)) {
-// throw new FavoriteListAlreadyExistException();
-// }
-//
-// dao.create(list.getName(), list.getUserAccount());
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// public int getNbFavoriteParticipants(EntityFilter filter) {
-// try {
-// FavoriteParticipantDAO dao =
-// PollenDAOHelper.getFavoriteParticipantDAO(getTransaction());
-//
-// TopiaQuery query = dao.createQueryFindAllByFavoriteList(filter);
-//
-// int result = dao.countByQuery(query);
-// return result;
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// public FavoriteParticipant getNewFavoriteParticipant(FavoriteList list) {
-// FavoriteParticipant result = new FavoriteParticipantImpl();
-// result.setFavoriteList(list);
-// result.setWeight(1.);
-// return result;
-// }
-//
-// public FavoriteList getNewFavoriteList(UserAccount user) {
-// FavoriteList result = new FavoriteListImpl();
-// result.setUserAccount(user);
-// return result;
-// }
-//
-// public void updateFavoriteParticipant(FavoriteParticipant participant) throws ParticipantExistWithoutMailException, ParticipantAlreadyFoundInListException {
-// try {
-// FavoriteParticipantDAO dao =
-// PollenDAOHelper.getFavoriteParticipantDAO(getTransaction());
-//
-// checkFavoriteParticipant(dao, participant);
-//
-// FavoriteParticipant participantLoaded =
-// dao.findByTopiaId(participant.getId());
-//
-// // Set all fields except favoriteList that can't be changed
-// participantLoaded.setName(participant.getName());
-// participantLoaded.setEmail(participant.getEmail());
-// participantLoaded.setWeight(participant.getWeight());
-//
-// dao.update(participantLoaded);
-// } catch (TopiaException e) {
-// throw new PollenTechnicalException(e);
-// }
-// }
-//
-// /**
-// * Check if the {@code participant} doesn't already exists with same email,
-// * name and favoriteList.
-// *
-// * @param dao used to verify the existing participant
-// * @param participant FavoriteParticipant to check
-// * @throws TopiaException for technical errors from ToPIA
-// * @throws ParticipantAlreadyFoundInListException
-// * if a participant already exist in list
-// * @throws ParticipantExistWithoutMailException
-// * if a participan was found without email
-// */
-// protected void checkFavoriteParticipant(FavoriteParticipantDAO dao,
-// FavoriteParticipant participant)
-// throws TopiaException, ParticipantExistWithoutMailException, ParticipantAlreadyFoundInListException {
-//
-// FavoriteList list = participant.getFavoriteList();
-//
-// TopiaQuery query = dao.createQuery().
-// addEquals(FavoriteParticipant.PROPERTY_FAVORITE_LIST, list).
-// addEquals(FavoriteParticipant.PROPERTY_NAME, participant.getName()).
-// addEquals(FavoriteParticipant.PROPERTY_EMAIL, participant.getEmail());
-//
-// // Check only on entities different from the one in argument
-// if (StringUtils.isNotEmpty(participant.getId())) {
-// query.addWhere(TopiaEntity.TOPIA_ID, TopiaQuery.Op.NEQ, participant.getId());
-// }
-//
-// // existing participant found
-// if (dao.existByQuery(query)) {
-// // The error type (message) depends on email nullity
-// if (participant.getEmail() == null) {
-// throw new ParticipantExistWithoutMailException();
-// } else {
-// throw new ParticipantAlreadyFoundInListException();
-// }
-// }
-// }
}
Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollCommentService.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollCommentService.java 2012-03-14 14:40:02 UTC (rev 3181)
+++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollCommentService.java 2012-03-14 14:40:57 UTC (rev 3182)
@@ -35,8 +35,7 @@
import org.chorem.pollen.services.PollenServiceSupport;
import org.chorem.pollen.services.exceptions.PollCommentNotFound;
import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.framework.TopiaQuery;
-import org.nuiton.web.struts2.FilterPagerUtil;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
import java.util.List;
@@ -170,28 +169,18 @@
return result;
}
- public List<Comment> getComments(FilterPagerUtil.FilterPagerBean pager,
+ public List<Comment> getComments(TopiaFilterPagerUtil.FilterPagerBean pager,
String pollId) {
Preconditions.checkNotNull(pager);
Preconditions.checkNotNull(pollId);
- CommentDAO dao = getDAO(Comment.class);
-
try {
-
- TopiaQuery countQuery = dao.createQuery("e").
- addWhere("e." + Comment.PROPERTY_POLL + ".pollId",
- TopiaQuery.Op.EQ, pollId);
- long records = dao.countByQuery(countQuery);
- pager.setRecords((int) records);
-
- TopiaQuery query = FilterPagerUtil.addPagerToQuery(countQuery,
- pager);
- List<Comment> result = dao.findAllByQuery(query);
+ CommentDAO dao = getDAO(Comment.class);
+ List<Comment> result = dao.getComments(pager, pollId);
return result;
} catch (TopiaException e) {
- throw new PollenTechnicalException(e);
+ throw new PollenTechnicalException("Could not obtain comments", e);
}
}
@@ -199,18 +188,12 @@
Preconditions.checkNotNull(pollId);
- CommentDAO dao = getDAO(Comment.class);
-
try {
-
- TopiaQuery query = dao.createQuery("e").
- addWhere("e." + Comment.PROPERTY_POLL + ".pollId",
- TopiaQuery.Op.EQ, pollId);
- query.addOrderDesc(Comment.PROPERTY_POST_DATE);
- List<Comment> result = dao.findAllByQuery(query);
+ CommentDAO dao = getDAO(Comment.class);
+ List<Comment> result = dao.getAllComments(pollId);
return result;
} catch (TopiaException e) {
- throw new PollenTechnicalException(e);
+ throw new PollenTechnicalException("Could not obtain comments", e);
}
}
Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java 2012-03-14 14:40:02 UTC (rev 3181)
+++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java 2012-03-14 14:40:57 UTC (rev 3182)
@@ -24,7 +24,6 @@
package org.chorem.pollen.services.impl;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -50,12 +49,13 @@
import org.chorem.pollen.common.ChoiceType;
import org.chorem.pollen.common.PollType;
import org.chorem.pollen.services.PollenServiceSupport;
+import org.chorem.pollen.services.exceptions.PollAccountNotFound;
import org.chorem.pollen.services.exceptions.PollChoiceNotFoundException;
import org.chorem.pollen.services.exceptions.PollNotFoundException;
import org.chorem.pollen.services.exceptions.PollVoteNotFoundException;
+import org.chorem.pollen.services.exceptions.UnauthorizedPollAccessException;
import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.framework.TopiaQuery;
-import org.nuiton.web.struts2.FilterPagerUtil;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
@@ -281,52 +281,33 @@
return url.toString();
}
- public List<Poll> getPolls(FilterPagerUtil.FilterPagerBean pager) {
+ public List<Poll> getPolls(TopiaFilterPagerUtil.FilterPagerBean pager) {
Preconditions.checkNotNull(pager);
-
- PollDAO dao = getDAO(Poll.class);
-
try {
-
- long records = dao.count();
- pager.setRecords((int) records);
-
- TopiaQuery query = dao.createQuery("e");
- FilterPagerUtil.addPagerToQuery(query, pager);
-
- List<Poll> result = dao.findAllByQuery(query);
+ PollDAO dao = getDAO(Poll.class);
+ List<Poll> result = dao.getPolls(pager);
return result;
} catch (TopiaException e) {
- throw new PollenTechnicalException(e);
+ throw new PollenTechnicalException("Could not obtain polls", e);
}
}
- public List<Poll> getCreatedPolls(FilterPagerUtil.FilterPagerBean pager,
+ public List<Poll> getCreatedPolls(TopiaFilterPagerUtil.FilterPagerBean pager,
UserAccount user) {
Preconditions.checkNotNull(pager);
Preconditions.checkNotNull(user);
-
- PollDAO dao = getDAO(Poll.class);
-
try {
-
- TopiaQuery countQuery = dao.createQuery("e");
- countQuery.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user);
- long records = dao.countByQuery(countQuery);
- pager.setRecords((int) records);
-
- TopiaQuery query = FilterPagerUtil.addPagerToQuery(countQuery, pager);
-
- List<Poll> result = dao.findAllByQuery(query);
+ PollDAO dao = getDAO(Poll.class);
+ List<Poll> result = dao.getCreatedPolls(pager, user);
return result;
} catch (TopiaException e) {
- throw new PollenTechnicalException(e);
+ throw new PollenTechnicalException("Could not obtain created polls", e);
}
}
- public List<Poll> getInvitedPolls(FilterPagerUtil.FilterPagerBean pager,
+ public List<Poll> getInvitedPolls(TopiaFilterPagerUtil.FilterPagerBean pager,
UserAccount user) {
Preconditions.checkNotNull(pager);
@@ -336,36 +317,15 @@
UserAccount userToUse = userService.getEntityById(UserAccount.class,
user.getTopiaId());
- //FIXME Use a query to do this to avoid in memory pagination
- String email = userToUse.getEmail();
-
- List<Poll> polls = userService.getEntities(Poll.class);
- List<Poll> allPolls = Lists.newLinkedList();
- for (Poll poll : polls) {
- for (VotingList votingList : poll.getVotingList()) {
- for (PersonToList personToList : votingList
- .getPollAccountPersonToList()) {
- if (!personToList.isHasVoted()) {
- PollAccount pollAccount = personToList
- .getPollAccount();
-
- if (pollAccount != null
- && pollAccount.getEmail() != null
- && pollAccount.getEmail().equals(
- email)) {
- allPolls.add(poll);
- }
- }
- }
- }
+ Preconditions.checkNotNull(userToUse);
+ try {
+ PollDAO pollDao = getDAO(Poll.class);
+ List<Poll> result = pollDao.getInvitedPolls(pager, userToUse);
+ return result;
+ } catch (TopiaException e) {
+ throw new PollenTechnicalException("Could not obtain invited polls", e);
}
- int records = allPolls.size();
- pager.setRecords(records);
-
- List<Poll> result = FilterPagerUtil.getPageFromList(allPolls, pager);
- return result;
-
// try {
// PollDAO dao = PollenDAOHelper.getPollDAO(getTransaction());
// TopiaQuery countQuery = dao.createQuery("e");
@@ -375,7 +335,7 @@
//
// PagerUtil.computeRecordIndexesAndPagesNumber(pager);
// TopiaQuery query = dao.createQuery("e");
-// FilterPagerUtil.addPagerToQuery(pager, query);
+// TopiaFilterPagerUtil.addPagerToQuery(pager, query);
// query.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user);
//
// List<Poll> result = dao.findAllByQuery(query);
@@ -385,89 +345,43 @@
// }
}
- public List<Poll> getParticipatedPolls(FilterPagerUtil.FilterPagerBean pager,
+ public List<Poll> getParticipatedPolls(TopiaFilterPagerUtil.FilterPagerBean pager,
UserAccount user) {
Preconditions.checkNotNull(pager);
Preconditions.checkNotNull(user);
- //FIXME Use a query to do this to avoid in memory pagination
-
UserService userService = newService(UserService.class);
UserAccount userToUse =
userService.getEntityById(UserAccount.class, user.getTopiaId());
- PollDAO pollDao = getDAO(Poll.class);
- VoteDAO voteDao = getDAO(Vote.class);
+ Preconditions.checkNotNull(userToUse);
try {
-
- TopiaQuery countQuery = voteDao.createQuery("e").
- addDistinct().
- setSelect("e." + Vote.PROPERTY_POLL).
- addWhere("e." + Vote.PROPERTY_POLL_ACCOUNT + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, userToUse);
-
- long records = pollDao.countByQuery(countQuery);
- pager.setRecords((int) records);
-
- TopiaQuery query = FilterPagerUtil.addPagerToQuery(countQuery, pager);
-
- List<Poll> result = pollDao.findAllByQuery(query);
+ PollDAO pollDao = getDAO(Poll.class);
+ List<Poll> result = pollDao.getParticipatedPolls(pager, userToUse);
return result;
} catch (TopiaException e) {
- throw new PollenTechnicalException(e);
+ throw new PollenTechnicalException("Could not obtain running polls", e);
}
}
public List<Poll> getRunningPolls(boolean withEndDate) {
- List<Poll> results;
try {
-
PollDAO dao = getDAO(Poll.class);
-
- TopiaQuery query;
-
- if (withEndDate) {
-
- query = dao.createQuery("poll").
- addWhere("poll.endDate is not null and poll.endDate > current_timestamp()").
- addWhere("poll.beginDate is null or poll.beginDate < current_timestamp()");
-
-// results = transaction
-// .find("from "
-// + Poll.class.getName()
-// + " as poll where (poll.endDate is not null and poll.endDate > current_timestamp())"
-// + " and (poll.beginDate is null or poll.beginDate < current_timestamp())");
- } else {
- query = dao.createQuery("poll").
- addWhere("poll.endDate is null or poll.endDate > current_timestamp()").
- addWhere("poll.beginDate is null or poll.beginDate < current_timestamp()");
-
-// results = transaction
-// .find("from "
-// + Poll.class.getName()
-// + " as poll where (poll.endDate is null or poll.endDate > current_timestamp())"
-// + " and (poll.beginDate is null or poll.beginDate < current_timestamp())");
- }
-
- results = dao.findAllByQuery(query);
-
- if (log.isDebugEnabled()) {
- log.debug("Entities found: "
- + ((results == null) ? "null" : results.size()));
- }
+ List<Poll> results = dao.getRunningPolls(withEndDate);
return results;
} catch (TopiaException e) {
- throw new PollenTechnicalException("Culd not obtain polls", e);
+ throw new PollenTechnicalException("Could not obtain running polls", e);
}
}
public Poll getPollByPollId(String pollId) {
Preconditions.checkNotNull(pollId);
- PollDAO dao = getDAO(Poll.class);
try {
+ PollDAO dao = getDAO(Poll.class);
Poll result = dao.findByPollId(pollId);
return result;
} catch (TopiaException e) {
@@ -488,8 +402,8 @@
}
public PollAccount getPollAccountByAccountId(String accountId) {
- PollAccountDAO dao = getDAO(PollAccount.class);
try {
+ PollAccountDAO dao = getDAO(PollAccount.class);
PollAccount result = dao.findByAccountId(accountId);
return result;
} catch (TopiaException e) {
@@ -497,6 +411,40 @@
}
}
+ public void deletePoll(String pollId,
+ UserAccount userAccount,
+ String accountId) throws PollNotFoundException, PollAccountNotFound, UnauthorizedPollAccessException {
+
+ Preconditions.checkNotNull(pollId);
+ Preconditions.checkNotNull(accountId);
+
+ Poll poll = getPollByPollId(pollId);
+
+ if (poll == null) {
+ throw new PollNotFoundException();
+ }
+
+ if (userAccount == null || userAccount.isAdministrator()) {
+
+ // must check that accountId matches the poll creator id
+
+ PollAccount account = getPollAccountByAccountId(accountId);
+
+ if (account == null) {
+ throw new PollAccountNotFound();
+ }
+
+ if (!account.getAccountId().equals(poll.getCreator().getAccountId())) {
+ throw new UnauthorizedPollAccessException();
+ }
+ }
+
+ PollDAO dao = getDAO(Poll.class);
+ delete(dao, poll);
+
+ commitTransaction("Could not delete poll" + poll.getTitle());
+ }
+
public void deleteVote(String pollId, String voteId)
throws PollNotFoundException, PollVoteNotFoundException {
Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/UserService.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/UserService.java 2012-03-14 14:40:02 UTC (rev 3181)
+++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/UserService.java 2012-03-14 14:40:57 UTC (rev 3182)
@@ -38,11 +38,10 @@
import org.chorem.pollen.services.exceptions.UserLoginAlreadyUsedException;
import org.chorem.pollen.services.exceptions.UserNotFoundException;
import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
import org.nuiton.topia.persistence.util.TopiaEntityBinder;
import org.nuiton.util.StringUtil;
import org.nuiton.util.beans.Binder;
-import org.nuiton.web.struts2.FilterPagerUtil;
import java.util.List;
@@ -177,15 +176,8 @@
// In case of email change, check if an other user has not already
// the new email
- // FIXME-fdesbois-20100510 : replace by using id directly
- TopiaQuery query = dao.createQuery().
- addWhere(UserAccount.PROPERTY_LOGIN,
- TopiaQuery.Op.NEQ, user.getLogin());
- query.addEquals(UserAccount.PROPERTY_EMAIL,
- StringUtils.lowerCase(user.getEmail()));
-
// existing user found
- if (dao.existByQuery(query)) {
+ if (dao.isUserExist(user)) {
throw new UserEmailAlreadyUsedException();
}
@@ -221,21 +213,13 @@
}
}
- public List<UserAccount> getUsers(FilterPagerUtil.FilterPagerBean pager) {
+ public List<UserAccount> getUsers(TopiaFilterPagerUtil.FilterPagerBean pager) {
Preconditions.checkNotNull(pager);
- UserAccountDAO dao = getDAO(UserAccount.class);
-
try {
-
- long records = dao.count();
- pager.setRecords((int) records);
-
- TopiaQuery query = dao.createQuery("e");
- FilterPagerUtil.addPagerToQuery(query, pager);
-
- List<UserAccount> result = dao.findAllByQuery(query);
+ UserAccountDAO dao = getDAO(UserAccount.class);
+ List<UserAccount> result = dao.getUsers(pager);
return result;
} catch (TopiaException e) {
throw new PollenTechnicalException(e);
Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/VoteService.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/VoteService.java 2012-03-14 14:40:02 UTC (rev 3181)
+++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/VoteService.java 2012-03-14 14:40:57 UTC (rev 3182)
@@ -37,8 +37,8 @@
import org.chorem.pollen.services.exceptions.VoteNotFoundException;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -108,7 +108,6 @@
// feed notification
-
}
public void updateVote(Vote vote) throws VoteNotFoundException {
@@ -126,7 +125,6 @@
}
commitTransaction("Could not update vote");
-
}
public void deleteVote(String voteId) throws VoteNotFoundException {
@@ -137,7 +135,8 @@
throw new VoteNotFoundException();
}
- delete(getDAO(Vote.class), entityToDelete);
+ VoteDAO dao = getDAO(Vote.class);
+ delete(dao, entityToDelete);
if (log.isDebugEnabled()) {
log.debug("Entity deleted: " + voteId);
@@ -147,73 +146,27 @@
}
public List<Vote> getVotesByPoll(Poll poll,
- int startIndex, int endIndex) {
- TopiaContext transaction = getTransaction();
- List<Vote> results = new ArrayList<Vote>();
+ TopiaFilterPagerUtil.FilterPagerBean pager) {
try {
- // No need to load votes for an anonymous poll
- if (poll.isAnonymous()) {
- return results;
- }
+ VoteDAO dao = getDAO(Vote.class);
+ List<Vote> results = dao.getVotesByPoll(poll, pager);
+ return results;
- // FIXME-FD20100309 : change model to suppress link from poll to vote
- // It's not necessary to have votes when retrieving the poll, this
- // method do this job only when it's needed
-
- if (log.isDebugEnabled()) {
- log.debug("Load votes for poll with uid = " + poll.getPollId());
- log.debug("LIMIT : startIndex = " + startIndex + " _ " +
- "endIndex = " + endIndex);
- }
-
- // FIXME : refactor this to use TopiaQuery from ToPIA 2.3
- // Order the results by creation date (the last vote done will be
- // at the end of the list)
- List<Vote> votes = transaction.find(
- "FROM " + Vote.class.getName() +
- " WHERE poll.pollId = :pollUId" +
- " ORDER BY topiaCreateDate",
- startIndex, endIndex,
- new Object[]{"pollUId", poll.getPollId()});
-
- if (log.isDebugEnabled()) {
- log.debug("Nb votes found : " + votes.size());
- }
-
- results = Lists.newArrayList(results);
-
} catch (TopiaException e) {
throw new PollenTechnicalException("Could not obtain votes", e);
}
- return results;
}
public boolean hasAlreadyVoted(String votingId, Poll poll) {
- TopiaContext transaction = getTransaction();
- boolean result = false;
try {
-
- // Test using a count(*) on votes
- List<Long> tmp = transaction.find(
- "SELECT COUNT(*)" +
- " FROM " + Vote.class.getName() +
- " WHERE poll.pollId = :pollUId" +
- " AND pollAccount.votingId = :votingId",
- "pollUId", poll.getPollId(),
- "votingId", votingId);
-
- int count = tmp.get(0).intValue();
-
- // If the count is greater than 0, there is an existing votingId
- // who has already voted for the poll
- result = count > 0;
-
+ VoteDAO dao = getDAO(Vote.class);
+ boolean result = dao.hasAlreadyVoted(votingId, poll);
+ return result;
} catch (Exception e) {
throw new PollenTechnicalException(
"Unable test vote existing for account with votingId = " +
votingId + " and poll with uid = " + poll.getPollId(), e);
}
- return result;
}
public List<Vote> selectVotes(Map<String, Object> properties) {
1
0
14 Mar '12
Author: tchemit
Date: 2012-03-14 15:40:02 +0100 (Wed, 14 Mar 2012)
New Revision: 3181
Url: http://chorem.org/repositories/revision/pollen/3181
Log:
no more usage of nuiton-struts2 here\! (use TopiafilterPagerBean)
Modified:
branches/pollen-1.2.6-struts2/pollen-services/pom.xml
Modified: branches/pollen-1.2.6-struts2/pollen-services/pom.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/pom.xml 2012-03-14 14:39:03 UTC (rev 3180)
+++ branches/pollen-1.2.6-struts2/pollen-services/pom.xml 2012-03-14 14:40:02 UTC (rev 3181)
@@ -66,10 +66,6 @@
<artifactId>rome</artifactId>
</dependency>
<dependency>
- <groupId>org.nuiton.web</groupId>
- <artifactId>nuiton-struts2</artifactId>
- </dependency>
- <dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-utils</artifactId>
</dependency>
1
0
r3180 - in branches/pollen-1.2.6-struts2/pollen-persistence/src/main: java/org/chorem/pollen/business/persistence java/org/chorem/pollen/entities/migration xmi
by tchemit@users.chorem.org 14 Mar '12
by tchemit@users.chorem.org 14 Mar '12
14 Mar '12
Author: tchemit
Date: 2012-03-14 15:39:03 +0100 (Wed, 14 Mar 2012)
New Revision: 3180
Url: http://chorem.org/repositories/revision/pollen/3180
Log:
move all query from services to persistence layer
add foreign key indexes
Added:
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/CommentDAOImpl.java
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PersonListDAOImpl.java
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollDAOImpl.java
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/UserAccountDAOImpl.java
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/VoteDAOImpl.java
Modified:
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollAccountDAOImpl.java
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_2_6.java
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/xmi/pollen.properties
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/xmi/pollen.zargo
Added: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/CommentDAOImpl.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/CommentDAOImpl.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/CommentDAOImpl.java 2012-03-14 14:39:03 UTC (rev 3180)
@@ -0,0 +1,67 @@
+/*
+ * #%L
+ * Pollen :: Persistence
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.business.persistence;
+
+import com.google.common.base.Preconditions;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
+
+import java.util.List;
+
+public class CommentDAOImpl<E extends Comment> extends CommentDAOAbstract<E> {
+
+ public List<E> getComments(TopiaFilterPagerUtil.FilterPagerBean pager,
+ String pollId) throws TopiaException {
+
+ Preconditions.checkNotNull(pager);
+ Preconditions.checkNotNull(pollId);
+
+ TopiaQuery countQuery = createQuery("e").
+ addWhere("e." + Comment.PROPERTY_POLL + ".pollId",
+ TopiaQuery.Op.EQ, pollId);
+ long records = countByQuery(countQuery);
+ pager.setRecords((int) records);
+
+ TopiaQuery query = TopiaFilterPagerUtil.addPagerToQuery(countQuery,
+ pager);
+ List<E> result = findAllByQuery(query);
+ return result;
+
+ }
+
+ public List<E> getAllComments(String pollId) throws TopiaException {
+
+ Preconditions.checkNotNull(pollId);
+
+ TopiaQuery query = createQuery("e").
+ addWhere("e." + Comment.PROPERTY_POLL + ".pollId",
+ TopiaQuery.Op.EQ, pollId);
+ query.addOrderDesc(Comment.PROPERTY_POST_DATE);
+ List<E> result = findAllByQuery(query);
+ return result;
+
+ }
+
+} //CommentDAOImpl<E extends Comment>
Property changes on: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/CommentDAOImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PersonListDAOImpl.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PersonListDAOImpl.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PersonListDAOImpl.java 2012-03-14 14:39:03 UTC (rev 3180)
@@ -0,0 +1,84 @@
+/*
+ * #%L
+ * Pollen :: Persistence
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.business.persistence;
+
+import com.google.common.base.Preconditions;
+import org.apache.commons.lang3.StringUtils;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
+
+import java.util.List;
+
+public class PersonListDAOImpl<E extends PersonList> extends PersonListDAOAbstract<E> {
+
+ public List<E> getFavoriteLists(UserAccount user,
+ TopiaFilterPagerUtil.FilterPagerBean pager) throws TopiaException {
+
+ Preconditions.checkNotNull(user);
+
+ TopiaQuery countQuery = createQuery("e");
+ countQuery.addWhere("e." + PersonList.PROPERTY_OWNER, TopiaQuery.Op.EQ, user);
+ long records = countByQuery(countQuery);
+
+ pager.setRecords((int) records);
+
+ TopiaQuery query = TopiaFilterPagerUtil.addPagerToQuery(countQuery, pager);
+
+ List<E> result = findAllByQuery(query);
+ return result;
+ }
+
+ public List<E> getFavoriteLists(UserAccount user) throws TopiaException {
+
+ Preconditions.checkNotNull(user);
+
+ TopiaQuery query = createQuery("e");
+ query.addWhere("e." + PersonList.PROPERTY_OWNER, TopiaQuery.Op.EQ, user);
+ List<E> result = findAllByQuery(query);
+ return result;
+
+ }
+
+ public boolean isPersonListExist(UserAccount user, String name) throws TopiaException {
+
+ Preconditions.checkNotNull(user);
+ Preconditions.checkNotNull(name);
+
+ // can't accept favorite list without name
+ Preconditions.checkArgument(StringUtils.isNotEmpty(name));
+
+
+ // check list does not already exists
+
+ TopiaQuery query = createQuery("e");
+
+ query.addWhere("e." + PersonList.PROPERTY_OWNER, TopiaQuery.Op.EQ, user);
+ query.addWhere("e." + PersonList.PROPERTY_NAME, TopiaQuery.Op.EQ, name);
+
+ boolean exist = existByQuery(query);
+ return exist;
+ }
+
+} //PersonListDAOImpl<E extends PersonList>
Property changes on: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PersonListDAOImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollAccountDAOImpl.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollAccountDAOImpl.java 2012-03-14 09:42:22 UTC (rev 3179)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollAccountDAOImpl.java 2012-03-14 14:39:03 UTC (rev 3180)
@@ -23,13 +23,17 @@
*/
package org.chorem.pollen.business.persistence;
+import com.google.common.base.Preconditions;
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
+import java.util.List;
+
public class PollAccountDAOImpl<E extends PollAccount> extends PollAccountDAOAbstract<E> {
- public PollAccount getRestrictedPollAccount(String pollId,
- String accountId) throws TopiaException {
+ public E getRestrictedPollAccount(String pollId,
+ String accountId) throws TopiaException {
// List<PersonToList> tmp = transaction.find(
// "FROM " + PersonToList.class.getName() +
@@ -38,11 +42,60 @@
// "accountUId", accountId,
// "pollUId", pollId);
- TopiaQuery query = new TopiaQuery(PersonToList.class,"p").
- setSelect("p."+PersonToList.PROPERTY_POLL_ACCOUNT).
- addWhere("p."+PersonToList.PROPERTY_POLL_ACCOUNT + "." + PollAccount.PROPERTY_ACCOUNT_ID, TopiaQuery.Op.EQ, accountId).
- addWhere("p."+PersonToList.PROPERTY_VOTING_LIST + "." + VotingList.PROPERTY_POLL + "." + Poll.PROPERTY_POLL_ID, TopiaQuery.Op.EQ, pollId);
- PollAccount result = findByQuery(query);
+ TopiaQuery query = new TopiaQuery(PersonToList.class, "p").
+ setSelect("p." + PersonToList.PROPERTY_POLL_ACCOUNT).
+ addWhere("p." + PersonToList.PROPERTY_POLL_ACCOUNT + "." + PollAccount.PROPERTY_ACCOUNT_ID, TopiaQuery.Op.EQ, accountId).
+ addWhere("p." + PersonToList.PROPERTY_VOTING_LIST + "." + VotingList.PROPERTY_POLL + "." + Poll.PROPERTY_POLL_ID, TopiaQuery.Op.EQ, pollId);
+ E result = findByQuery(query);
return result;
}
+
+ public List<E> getFavoriteListUsers(PersonList favoriteList,
+ TopiaFilterPagerUtil.FilterPagerBean pager) throws TopiaException {
+
+ Preconditions.checkNotNull(favoriteList);
+ Preconditions.checkNotNull(pager);
+
+
+ int records = favoriteList.sizePollAccount();
+ pager.setRecords(records);
+
+ TopiaQuery query = createQuery("e");
+ TopiaFilterPagerUtil.addPagerToQuery(query, pager);
+ query.addWhere("e." + PollAccount.PROPERTY_PERSON_LIST, TopiaQuery.Op.EQ, favoriteList);
+
+ List<E> result = findAllByQuery(query);
+ return result;
+ }
+
+ public boolean isPollAccountExist(PersonList personListToUpdate,
+ PollAccount pollAccount) throws TopiaException {
+
+ Preconditions.checkNotNull(personListToUpdate);
+ Preconditions.checkNotNull(pollAccount);
+
+ // check there is other poll account in this list with same id
+ TopiaQuery query = createQuery("e");
+ query.addWhere("e." + PollAccount.PROPERTY_PERSON_LIST, TopiaQuery.Op.EQ, personListToUpdate);
+ query.addWhere("e." + PollAccount.PROPERTY_VOTING_ID, TopiaQuery.Op.EQ, pollAccount.getVotingId());
+ boolean pollAccountExists = existByQuery(query);
+ return pollAccountExists;
+ }
+
+ public boolean isPollAccountAlreadyExist(PersonList personListToUpdate,
+ PollAccount pollAccount) throws TopiaException {
+
+ Preconditions.checkNotNull(personListToUpdate);
+ Preconditions.checkNotNull(pollAccount);
+
+ // check there is another poll account in this list with same id
+ TopiaQuery query = createQuery("e");
+ query.addWhere("e." + PollAccount.PROPERTY_PERSON_LIST, TopiaQuery.Op.EQ, personListToUpdate);
+ query.addWhere("e." + PollAccount.PROPERTY_VOTING_ID, TopiaQuery.Op.EQ, pollAccount.getVotingId());
+ query.addWhere("e." + PollAccount.TOPIA_ID, TopiaQuery.Op.NEQ, pollAccount.getTopiaId());
+ boolean pollAccountExists = existByQuery(query);
+ return pollAccountExists;
+
+ }
+
} //PollAccountDAOImpl<E extends PollAccount>
Added: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollDAOImpl.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollDAOImpl.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollDAOImpl.java 2012-03-14 14:39:03 UTC (rev 3180)
@@ -0,0 +1,188 @@
+/*
+ * #%L
+ * Pollen :: Persistence
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.business.persistence;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.chorem.pollen.entities.PollenDAOHelper;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
+
+import java.util.List;
+
+public class PollDAOImpl<E extends Poll> extends PollDAOAbstract<E> {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(PollDAOImpl.class);
+
+ public List<E> getPolls(TopiaFilterPagerUtil.FilterPagerBean pager) throws TopiaException {
+
+ Preconditions.checkNotNull(pager);
+
+ long records = count();
+ pager.setRecords((int) records);
+
+ TopiaQuery query = createQuery("e");
+ TopiaFilterPagerUtil.addPagerToQuery(query, pager);
+
+ List<E> result = findAllByQuery(query);
+ return result;
+ }
+
+
+ public List<E> getCreatedPolls(TopiaFilterPagerUtil.FilterPagerBean pager,
+ UserAccount user) throws TopiaException {
+
+ Preconditions.checkNotNull(pager);
+ Preconditions.checkNotNull(user);
+
+ TopiaQuery countQuery = createQuery("e");
+ countQuery.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user);
+ long records = countByQuery(countQuery);
+ pager.setRecords((int) records);
+
+ TopiaQuery query = TopiaFilterPagerUtil.addPagerToQuery(countQuery, pager);
+
+ List<E> result = findAllByQuery(query);
+ return result;
+ }
+
+ public List<E> getInvitedPolls(TopiaFilterPagerUtil.FilterPagerBean pager,
+ UserAccount userToUse) throws TopiaException {
+
+ Preconditions.checkNotNull(pager);
+ Preconditions.checkNotNull(userToUse);
+
+ //FIXME Use a query to do this to avoid in memory pagination
+ String email = userToUse.getEmail();
+
+ List<E> polls = findAll();
+ List<E> allPolls = Lists.newLinkedList();
+ for (E poll : polls) {
+ for (VotingList votingList : poll.getVotingList()) {
+ for (PersonToList personToList : votingList
+ .getPollAccountPersonToList()) {
+ if (!personToList.isHasVoted()) {
+ PollAccount pollAccount = personToList
+ .getPollAccount();
+
+ if (pollAccount != null
+ && pollAccount.getEmail() != null
+ && pollAccount.getEmail().equals(
+ email)) {
+ allPolls.add(poll);
+ }
+ }
+ }
+ }
+ }
+
+ int records = allPolls.size();
+ pager.setRecords(records);
+
+ List<E> result = TopiaFilterPagerUtil.getPageFromList(allPolls, pager);
+ return result;
+
+// try {
+// PollDAO dao = PollenDAOHelper.getPollDAO(getTransaction());
+// TopiaQuery countQuery = dao.createQuery("e");
+// countQuery.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user);
+// long records = dao.countByQuery(countQuery);
+// pager.setRecords((int) records);
+//
+// PagerUtil.computeRecordIndexesAndPagesNumber(pager);
+// TopiaQuery query = dao.createQuery("e");
+// TopiaFilterPagerUtil.addPagerToQuery(pager, query);
+// query.addWhere("e." + Poll.PROPERTY_CREATOR + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, user);
+//
+// List<Poll> result = dao.findAllByQuery(query);
+// return result;
+// } catch (TopiaException e) {
+// throw new PollenTechnicalException(e);
+// }
+ }
+
+ public List<E> getParticipatedPolls(TopiaFilterPagerUtil.FilterPagerBean pager,
+ UserAccount userToUse) throws TopiaException {
+
+ Preconditions.checkNotNull(pager);
+ Preconditions.checkNotNull(userToUse);
+
+ VoteDAO voteDao = PollenDAOHelper.getVoteDAO(context);
+
+ TopiaQuery countQuery = voteDao.createQuery("e").
+ addDistinct().
+ setSelect("e." + Vote.PROPERTY_POLL).
+ addWhere("e." + Vote.PROPERTY_POLL_ACCOUNT + "." + PollAccount.PROPERTY_USER_ACCOUNT, TopiaQuery.Op.EQ, userToUse);
+
+ long records = countByQuery(countQuery);
+ pager.setRecords((int) records);
+
+ TopiaQuery query = TopiaFilterPagerUtil.addPagerToQuery(countQuery, pager);
+
+ List<E> result = findAllByQuery(query);
+ return result;
+
+ }
+
+ public List<E> getRunningPolls(boolean withEndDate) throws TopiaException {
+
+ List<E> results;
+ TopiaQuery query;
+
+ if (withEndDate) {
+
+ query = createQuery("poll").
+ addWhere("poll.endDate is not null and poll.endDate > current_timestamp()").
+ addWhere("poll.beginDate is null or poll.beginDate < current_timestamp()");
+
+// results = transaction
+// .find("from "
+// + Poll.class.getName()
+// + " as poll where (poll.endDate is not null and poll.endDate > current_timestamp())"
+// + " and (poll.beginDate is null or poll.beginDate < current_timestamp())");
+ } else {
+ query = createQuery("poll").
+ addWhere("poll.endDate is null or poll.endDate > current_timestamp()").
+ addWhere("poll.beginDate is null or poll.beginDate < current_timestamp()");
+
+// results = transaction
+// .find("from "
+// + Poll.class.getName()
+// + " as poll where (poll.endDate is null or poll.endDate > current_timestamp())"
+// + " and (poll.beginDate is null or poll.beginDate < current_timestamp())");
+ }
+
+ results = findAllByQuery(query);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Entities found: "
+ + ((results == null) ? "null" : results.size()));
+ }
+ return results;
+ }
+} //PollDAOImpl<E extends Poll>
Property changes on: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollDAOImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java 2012-03-14 09:42:22 UTC (rev 3179)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java 2012-03-14 14:39:03 UTC (rev 3180)
@@ -42,4 +42,10 @@
}
return resultVote;
}
+
+ @Override
+ public String getAdminId() {
+ String accountId = getCreator().getAccountId();
+ return getPollId() + ":" + accountId;
+ }
} //PollImpl
Added: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/UserAccountDAOImpl.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/UserAccountDAOImpl.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/UserAccountDAOImpl.java 2012-03-14 14:39:03 UTC (rev 3180)
@@ -0,0 +1,67 @@
+/*
+ * #%L
+ * Pollen :: Persistence
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.business.persistence;
+
+import com.google.common.base.Preconditions;
+import org.apache.commons.lang3.StringUtils;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
+
+import java.util.List;
+
+public class UserAccountDAOImpl<E extends UserAccount> extends UserAccountDAOAbstract<E> {
+
+ public boolean isUserExist(UserAccount user) throws TopiaException {
+
+ Preconditions.checkNotNull(user);
+
+ // In case of email change, check if an other user has not already
+ // the new email
+ // FIXME-fdesbois-20100510 : replace by using id directly
+ TopiaQuery query = createQuery().
+ addWhere(UserAccount.PROPERTY_LOGIN,
+ TopiaQuery.Op.NEQ, user.getLogin());
+ query.addEquals(UserAccount.PROPERTY_EMAIL,
+ StringUtils.lowerCase(user.getEmail()));
+
+ // existing user found
+ boolean result = existByQuery(query);
+ return result;
+ }
+
+ public List<E> getUsers(TopiaFilterPagerUtil.FilterPagerBean pager) throws TopiaException {
+
+ Preconditions.checkNotNull(pager);
+
+ long records = count();
+ pager.setRecords((int) records);
+
+ TopiaQuery query = createQuery("e");
+ TopiaFilterPagerUtil.addPagerToQuery(query, pager);
+
+ List<E> result = findAllByQuery(query);
+ return result;
+ }
+} //UserAccountDAOImpl<E extends UserAccount>
Property changes on: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/UserAccountDAOImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/VoteDAOImpl.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/VoteDAOImpl.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/VoteDAOImpl.java 2012-03-14 14:39:03 UTC (rev 3180)
@@ -0,0 +1,115 @@
+/*
+ * #%L
+ * Pollen :: Persistence
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.business.persistence;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaFilterPagerUtil;
+
+import java.util.List;
+
+public class VoteDAOImpl<E extends Vote> extends VoteDAOAbstract<E> {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(VoteDAOImpl.class);
+
+ public List<E> getVotesByPoll(Poll poll,
+ TopiaFilterPagerUtil.FilterPagerBean pager) throws TopiaException {
+
+ Preconditions.checkNotNull(poll);
+ Preconditions.checkNotNull(pager);
+
+ List<E> results;
+
+ // No need to load votes for an anonymous poll
+ if (poll.isAnonymous()) {
+
+ results = Lists.newArrayList();
+ } else {
+
+ // FIXME-FD20100309 : change model to suppress link from poll to vote
+ // It's not necessary to have votes when retrieving the poll, this
+ // method do this job only when it's needed
+
+// if (log.isDebugEnabled()) {
+// log.debug("Load votes for poll with uid = " + poll.getPollId());
+// log.debug("LIMIT : startIndex = " + startIndex + " _ " +
+// "endIndex = " + endIndex);
+// }
+
+ // FIXME : refactor this to use TopiaQuery from ToPIA 2.3
+ // Order the results by creation date (the last vote done will be
+ // at the end of the list)
+ TopiaQuery query = createQuery("e").
+ addWhere("e.poll", TopiaQuery.Op.EQ, poll).
+ addOrder("topiaCreateDate");
+ TopiaFilterPagerUtil.addPagerToQuery(query, pager);
+ results = findAllByQuery(query);
+
+//
+// List<E> votes = find(
+// "FROM " + Vote.class.getName() +
+// " WHERE poll.pollId = :pollUId" +
+// " ORDER BY topiaCreateDate",
+// startIndex, endIndex,
+// new Object[]{"pollUId", poll.getPollId()});
+
+// if (log.isDebugEnabled()) {
+// log.debug("Nb votes found : " + votes.size());
+// }
+//
+// results = Lists.newArrayList(results);
+ }
+ return results;
+ }
+
+ public boolean hasAlreadyVoted(String votingId, Poll poll) throws TopiaException {
+
+ // Test using a count(*) on votes
+ TopiaQuery query = createQuery("e").
+ addWhere("e.poll", TopiaQuery.Op.EQ, poll).
+ addWhere("e.pollAccount.votingId", TopiaQuery.Op.EQ, votingId).
+ addOrder("topiaCreateDate");
+ boolean result = existByQuery(query);
+ return result;
+// List<Long> tmp = transaction.find(
+// "SELECT COUNT(*)" +
+// " FROM " + Vote.class.getName() +
+// " WHERE poll.pollId = :pollUId" +
+// " AND pollAccount.votingId = :votingId",
+// "pollUId", poll.getPollId(),
+// "votingId", votingId);
+//
+// int count = tmp.get(0).intValue();
+//
+// // If the count is greater than 0, there is an existing votingId
+// // who has already voted for the poll
+// result = count > 0;
+
+ }
+} //VoteDAOImpl<E extends Vote>
Property changes on: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/VoteDAOImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_2_6.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_2_6.java 2012-03-14 09:42:22 UTC (rev 3179)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_2_6.java 2012-03-14 14:39:03 UTC (rev 3180)
@@ -78,12 +78,30 @@
migrateVoteCountingTypes(tx, queries);
// change all Boolean properties to boolean
- migrateToPrimitiveTypes(tx, queries);
+ migrateToPrimitiveTypes(queries);
+
+ // add foreign key indexes
+ addForeignKeyIndexes(queries);
}
- private void migrateToPrimitiveTypes(TopiaContextImplementor tx,
- List<String> queries) throws TopiaException {
+ private void addForeignKeyIndexes(List<String> queries) {
+ queries.add("CREATE INDEX idx_PollAccount_pollsCreated ON poll(creator);");
+ queries.add("CREATE INDEX idx_PollAccount_comment ON comment(pollAccount);");
+ queries.add("CREATE INDEX idx_PollAccount_vote ON vote(pollAccount);");
+ queries.add("CREATE INDEX idx_Poll_vote ON vote(poll);");
+ queries.add("CREATE INDEX idx_Poll_choice ON choice(poll);");
+ queries.add("CREATE INDEX idx_Poll_result ON result(poll);");
+ queries.add("CREATE INDEX idx_Poll_comment ON comment(poll);");
+ queries.add("CREATE INDEX idx_Poll_preventRule ON preventRule(poll);");
+ queries.add("CREATE INDEX idx_Poll_votingList ON votingList(poll);");
+ queries.add("CREATE INDEX idx_UserAccount_favoriteList ON personList(owner);");
+ queries.add("CREATE INDEX idx_UserAccount_pollAccount ON pollAccount(userAccount);");
+ queries.add("CREATE INDEX idx_PersonList_pollAccount ON pollAccount(personList);");
+ }
+
+ private void migrateToPrimitiveTypes(List<String> queries) throws TopiaException {
+
migrateBoolean(queries, "useraccount", "administrator");
migrateBoolean(queries, "choice", "validate");
migrateBoolean(queries, "personToList", "hasVoted");
Modified: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/xmi/pollen.properties
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/xmi/pollen.properties 2012-03-14 09:42:22 UTC (rev 3179)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/xmi/pollen.properties 2012-03-14 14:39:03 UTC (rev 3180)
@@ -27,3 +27,4 @@
model.tagvalue.java.lang.String=text
model.tagvalue.version=1.2.6
model.tagvalue.doNotGenerateBooleanGetMethods=true
+model.tagvalue.indexForeignKeys=true
Modified: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/xmi/pollen.zargo
===================================================================
(Binary files differ)
1
0
r3179 - in branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main: java/org/chorem/pollen/ui/actions java/org/chorem/pollen/ui/actions/poll resources/config resources/i18n webapp/WEB-INF webapp/WEB-INF/jsp webapp/WEB-INF/jsp/poll
by tchemit@users.chorem.org 14 Mar '12
by tchemit@users.chorem.org 14 Mar '12
14 Mar '12
Author: tchemit
Date: 2012-03-14 10:42:22 +0100 (Wed, 14 Mar 2012)
New Revision: 3179
Url: http://chorem.org/repositories/revision/pollen/3179
Log:
ajout des import de liste de favoris dans sondages restreints
Added:
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ImportPersonListToVotingList.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SelectPersonListToVotingList.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personListToVotingList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToCreateNewVotingList.jsp
Modified:
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/PollenActionSupport.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/CreatePoll.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/decorators.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/home.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/PollenActionSupport.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/PollenActionSupport.java 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/PollenActionSupport.java 2012-03-14 09:42:22 UTC (rev 3179)
@@ -29,6 +29,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.StrutsStatics;
import org.chorem.pollen.PollenConfiguration;
+import org.chorem.pollen.business.persistence.UserAccount;
import org.chorem.pollen.services.DefaultPollenServiceContext;
import org.chorem.pollen.services.PollenService;
import org.chorem.pollen.services.PollenServiceContext;
@@ -247,4 +248,9 @@
String result = getDateTimeFormat().format(date);
return result;
}
+
+ public boolean isUserLoggued() {
+ UserAccount userAccount = getPollenSession().getUserAccount();
+ return userAccount != null;
+ }
}
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/CreatePoll.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/CreatePoll.java 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/CreatePoll.java 2012-03-14 09:42:22 UTC (rev 3179)
@@ -309,6 +309,9 @@
@Override
public void prepare() throws Exception {
+ // remove all stuff from session
+ getPollenSession().clearDynamicData();
+
pollTypes = decorateToName(PollType.values());
choiceTypes = decorateToName(ChoiceType.values());
voteCountingTypes = decorateToName(VoteCountingType.values());
@@ -366,12 +369,13 @@
Preconditions.checkNotNull(poll);
+ informationsError = false;
+
// poll must have a title
if (StringUtils.isEmpty(poll.getTitle())) {
addFieldError("poll.title", _("pollen.error.poll.required.title"));
}
- informationsError = false;
// validate choices
Map<Integer, Choice> orderedChoices = getOrderedChoices();
@@ -381,7 +385,6 @@
// poll must have at least one choice
addFieldError("poll.choices",
_("pollen.error.poll.required.one.choice"));
- informationsError = true;
} else {
//TODO tchemit improve this (from different cases text-date-image)
@@ -398,10 +401,10 @@
if (duplicateNameDetected) {
addFieldError("poll.choices",
_("pollen.error.poll.detected.duplicate.choice.name"));
- informationsError = true;
}
}
+
optionsError = false;
// validate security stuff
@@ -425,6 +428,14 @@
emails);
}
}
+
+ informationsError = hasFieldErrors();
+
+ if (!informationsError && optionsError) {
+
+ // trick to force to go back to form
+ addFieldError("", "");
+ }
}
@Override
@@ -563,7 +574,7 @@
// keep errors to display them in correct action
String errorToken = DisplayVotingList.getVotingListErrorTokenId(
- votingListTokenId, 0);
+ votingListTokenId, votingListNumber);
if (log.isInfoEnabled()) {
log.info("Add " + errors.size() + " errors to " + errorToken);
}
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ImportPersonListToVotingList.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ImportPersonListToVotingList.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ImportPersonListToVotingList.java 2012-03-14 09:42:22 UTC (rev 3179)
@@ -0,0 +1,116 @@
+/*
+ * #%L
+ * Pollen :: UI (strust2)
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.ui.actions.poll;
+
+import com.google.common.collect.Maps;
+import org.chorem.pollen.business.persistence.PersonList;
+import org.chorem.pollen.business.persistence.PersonToList;
+import org.chorem.pollen.business.persistence.PersonToListImpl;
+import org.chorem.pollen.business.persistence.PollAccount;
+import org.chorem.pollen.services.impl.FavoriteService;
+import org.chorem.pollen.ui.PollenSession;
+import org.chorem.pollen.ui.actions.PollenActionSupport;
+
+import java.util.Map;
+
+/**
+ * Load in session a personToList to import into a votingList.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.2.6
+ */
+public class ImportPersonListToVotingList extends PollenActionSupport {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String TOKEN = "ImportPersonListToVotingList";
+
+ protected int votingListNumber;
+
+ protected int personToListNumber;
+
+ protected String personListId;
+
+ protected String tokenId;
+
+ /** Count of personToList for this votingList. */
+ protected int nbPersonToLists;
+
+ public int getVotingListNumber() {
+ return votingListNumber;
+ }
+
+ public void setVotingListNumber(int votingListNumber) {
+ this.votingListNumber = votingListNumber;
+ }
+
+ public int getPersonToListNumber() {
+ return personToListNumber;
+ }
+
+ public void setPersonToListNumber(int personToListNumber) {
+ this.personToListNumber = personToListNumber;
+ }
+
+ public String getPersonListId() {
+ return personListId;
+ }
+
+ public void setPersonListId(String personListId) {
+ this.personListId = personListId;
+ }
+
+ public String getTokenId() {
+ return tokenId;
+ }
+
+ public int getNbPersonToLists() {
+ return nbPersonToLists;
+ }
+
+ @Override
+ public String execute() throws Exception {
+
+ tokenId = getServiceContext().createPollenUrlId() + TOKEN;
+ Map<Integer, PersonToList> data = Maps.newTreeMap();
+ FavoriteService service = newService(FavoriteService.class);
+ PollenSession session = getPollenSession();
+ PersonList favoriteList =
+ service.getFavoriteList(session.getUserAccount(), personListId);
+ nbPersonToLists = favoriteList.sizePollAccount();
+ if (nbPersonToLists > 0) {
+ int index = personToListNumber;
+ for (PollAccount pollAccount : favoriteList.getPollAccount()) {
+ PersonToList p = new PersonToListImpl();
+ p.setPollAccount(pollAccount);
+ p.setWeight(1);
+ data.put(index++, p);
+ }
+ }
+ session.putDynamicData(tokenId, data);
+
+
+ return SUCCESS;
+ }
+}
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/ImportPersonListToVotingList.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SelectPersonListToVotingList.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SelectPersonListToVotingList.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SelectPersonListToVotingList.java 2012-03-14 09:42:22 UTC (rev 3179)
@@ -0,0 +1,73 @@
+/*
+ * #%L
+ * Pollen :: UI (strust2)
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.ui.actions.poll;
+
+import com.google.common.collect.Maps;
+import org.chorem.pollen.PollenFunctions;
+import org.chorem.pollen.business.persistence.PersonList;
+import org.chorem.pollen.business.persistence.UserAccount;
+import org.chorem.pollen.services.impl.FavoriteService;
+import org.chorem.pollen.ui.actions.PollenActionSupport;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Select a person list to add into an existing voting list.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.2.6
+ */
+public class SelectPersonListToVotingList extends PollenActionSupport {
+
+ private static final long serialVersionUID = 1L;
+
+ protected int votingListNumber;
+
+ protected Map<String, PersonList> personList;
+
+ public Map<String, PersonList> getPersonList() {
+ return personList;
+ }
+
+ public int getVotingListNumber() {
+ return votingListNumber;
+ }
+
+ public void setVotingListNumber(int votingListNumber) {
+ this.votingListNumber = votingListNumber;
+ }
+
+ @Override
+ public String execute() throws Exception {
+
+ FavoriteService service = newService(FavoriteService.class);
+ UserAccount userAccount = getPollenSession().getUserAccount();
+ List<PersonList> personLists = service.getFavoriteLists(userAccount);
+
+ personList = Maps.uniqueIndex(personLists, PollenFunctions.ENTITY_BY_ID);
+
+ return SUCCESS;
+ }
+}
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SelectPersonListToVotingList.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml 2012-03-14 09:42:22 UTC (rev 3179)
@@ -115,7 +115,8 @@
<result type="stream">
<param name="contentCharSet">UTF-8</param>
<param name="contentType">application/xml</param>
- <param name="contentDisposition">attachment;filename="${filename}"</param>
+ <param name="contentDisposition">attachment;filename="${filename}"
+ </param>
<param name="encode">true</param>
<param name="bufferSize">4096</param>
</result>
@@ -180,7 +181,8 @@
</action>
<!-- get the feed of a given poll -->
- <action name="getFeed" class="org.chorem.pollen.ui.actions.poll.GetPollFeed">
+ <action name="getFeed"
+ class="org.chorem.pollen.ui.actions.poll.GetPollFeed">
<result type="stream">
<param name="contentCharSet">UTF-8</param>
<param name="contentType">application/atom+xml</param>
@@ -219,6 +221,25 @@
<result type="redirectToVote"/>
</action>
+ <!-- Select a favorite list to add to a voting list -->
+ <action name="selectPersonListToAddToVotingList"
+ class="org.chorem.pollen.ui.actions.poll.SelectPersonListToVotingList">
+ <result>/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp</result>
+ </action>
+
+ <!-- Select a favorite list to import into a new voting list -->
+ <action name="selectPersonListToCreateNewVotingList"
+ class="org.chorem.pollen.ui.actions.poll.SelectPersonListToVotingList">
+ <result>/WEB-INF/jsp/poll/selectPersonListToCreateNewVotingList.jsp
+ </result>
+ </action>
+
+ <!-- Load in session a personList to be imported into a voting list -->
+ <action name="displayPersonListToVotingList"
+ class="org.chorem.pollen.ui.actions.poll.ImportPersonListToVotingList">
+ <result type="json"/>
+ </action>
+
</package>
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties 2012-03-14 09:42:22 UTC (rev 3179)
@@ -3,6 +3,7 @@
pollen.action.addPersonToList=Add a voter
pollen.action.addVotingList=Add a group
pollen.action.backToFavoriteLists=Back to favorite lists
+pollen.action.cancel=Cancel
pollen.action.create=Create
pollen.action.createFavoriteList=Create a new list
pollen.action.createPoll=Create the poll
@@ -192,6 +193,8 @@
pollen.label.pollRegisterPage=If you are a logged user, you can find these links on the page
pollen.label.pollVotePage=The link below leads to the page to vote for your poll. Save it and send it to the people that you want to vote \:
pollen.legend.login=Login
+pollen.legend.select.favoriteList.to.add=Sélectionner la liste de favoris à ajouter
+pollen.legend.select.personList.to.create.votingList=Sélectionner la liste des votant à importer dans le nouveau groupe
pollen.menu.admin=Administration
pollen.menu.createPoll=Create a poll
pollen.menu.home=Home
@@ -219,4 +222,6 @@
pollen.title.pollsParticipatedList=Polls participated
pollen.title.pollsParticipatedList.legend=Polls in which you are involved
pollen.title.register=Register
+pollen.title.selectPersonListToAddVotingList=Sélectionner une liste de votant à ajouter
+pollen.title.selectPersonListToCreateVotingList=Sélectionner une liste de votant pour créer un nouveau groupe
pollen.title.usersList=Users administration
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties 2012-03-14 09:42:22 UTC (rev 3179)
@@ -1,8 +1,12 @@
pollen.action.addChoice=Ajouter un choix
pollen.action.addComment=Ajouter un commentaire
+pollen.action.addPersonListFromVotingList=Ajouter des votants à partir d'une liste de votants
+pollen.action.addPersonListToVotingList=Ajouter la liste des votants
pollen.action.addPersonToList=Ajouter un votant
pollen.action.addVotingList=Ajouter un groupe
+pollen.action.addVotingListFromPersonList=Ajouter un groupe à partir d'une liste de votants
pollen.action.backToFavoriteLists=Retour à la liste des favoris
+pollen.action.cancel=Annuler
pollen.action.create=Créer
pollen.action.createFavoriteList=Créer une ouvelle liste
pollen.action.createPoll=Créer le sondage
@@ -18,6 +22,8 @@
pollen.action.editPollAccount=Editer le membre sélectionné
pollen.action.editUser=Editer un utilisateur sélectionné
pollen.action.editVote=Modifier le vote
+pollen.action.importPersonListToExistingVotingList=Ajouter la liste sélectionnée de votants
+pollen.action.importPersonListToNewVotingList=Créer un groupe à partir de la liste sélectionnée
pollen.action.login=M'identifier
pollen.action.modify=Modifier
pollen.action.pollChoiceDelete=Supprimer ce choix
@@ -75,6 +81,7 @@
pollen.common.or=ou
pollen.common.password=Mot de passe
pollen.common.password2=Répétez votre mot de passe
+pollen.common.personList=Liste de votants
pollen.common.personToList=Votant
pollen.common.pollCreator=Créateur
pollen.common.pollOption.anonymous=Sondage anonyme
@@ -193,6 +200,8 @@
pollen.label.pollRegisterPage=Si vous êtes un utilisateur identifié, vous pouvez retrouver ces liens dans la page
pollen.label.pollVotePage=Le lien ci-dessous mène à la page de vote. Enregistrez-le et envoyez-le à ceux que vous voulez voir voter \:
pollen.legend.login=Login
+pollen.legend.select.favoriteList.to.add=Sélectionner la liste de favoris à ajouter
+pollen.legend.select.personList.to.create.votingList=Sélectionner la liste des votant à importer dans le nouveau groupe
pollen.menu.admin=Administration
pollen.menu.createPoll=Créer un sondage
pollen.menu.home=Accueil
@@ -222,5 +231,7 @@
pollen.title.pollsParticipatedList=Sondages participés
pollen.title.pollsParticipatedList.legend=Liste des sondages pour lesquels vous avez voté
pollen.title.register=S'enregistrer
+pollen.title.selectPersonListToAddVotingList=Sélectionner une liste de votants à ajouter
+pollen.title.selectPersonListToCreateVotingList=Sélectionner une liste de votants pour créer un nouveau groupe
pollen.title.usersList=Gestion des utilisateurs
title=Création d'un sondage
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/decorators.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/decorators.xml 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/decorators.xml 2012-03-14 09:42:22 UTC (rev 3179)
@@ -31,6 +31,7 @@
<pattern>/json/*</pattern>
<pattern>/poll/confirmDelete*</pattern>
<pattern>/poll/display*</pattern>
+ <pattern>/poll/selectPersonListTo*</pattern>
<pattern>/io/*</pattern>
</excludes>
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/home.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/home.jsp 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/home.jsp 2012-03-14 09:42:22 UTC (rev 3179)
@@ -32,7 +32,7 @@
</div>
<div class="center">
- <s:a action="createPoll" namespace="/poll">
+ <s:a action="create" namespace="/poll" method="input">
<img src="<s:url value='/img/smallCreation_%{safeLanguage}.png' />" alt="poll creation"/>
</s:a>
<s:a action="createForm" namespace="/poll">
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp 2012-03-14 09:42:22 UTC (rev 3179)
@@ -34,6 +34,31 @@
<script type="text/javascript">
+ function addPersonListToVotingList(personListId) {
+ console.info("person list to add into votingList : " + personListId);
+ return closeDialog();
+ }
+
+ function selectPersonListToAddToVotingList(votingListNumber) {
+ console.info("Add to votingList "+votingListNumber);
+ $('.ui-dialog-title').html('<s:text name="pollen.title.selectPersonListToAddVotingList"/>')
+ var dialog = $("#selectPersonListDialog");
+ var url = "<s:url action='selectPersonListToAddToVotingList' namespace='/poll'/>";
+ url += '?'+ $.param({votingListNumber:votingListNumber});
+ dialog.load(url);
+ dialog.dialog('open');
+ return false;
+ }
+
+ function selectPersonListToCreateNewVotingList() {
+ $('.ui-dialog-title').html('<s:text name="pollen.title.selectPersonListToCreateVotingList"/>')
+ var dialog = $("#selectPersonListDialog");
+ var url = "<s:url action='selectPersonListToCreateNewVotingList' namespace='/poll'/>";
+ dialog.load(url);
+ dialog.dialog('open');
+ return false;
+ }
+
jQuery(document).ready(function () {
$('[name="poll.choiceAddAllowed"]').change(function (event) {
var val = $(this).prop('checked');
@@ -285,9 +310,14 @@
<div id="votingLists">
<%--Where to load voting lists --%>
</div>
- <div class="groupPoll">
- <s:submit key="pollen.action.addVotingList" align="center"
+ <div class="groupPoll" align="center">
+ <s:submit key="pollen.action.addVotingList" theme="simple"
onclick="return addNewVotingList();"/>
+ <s:if test="userLoggued">
+ <s:submit key="pollen.action.addVotingListFromPersonList"
+ theme="simple"
+ onclick="return selectPersonListToCreateNewVotingList();"/>
+ </s:if>
</div>
</div>
</fieldset>
@@ -307,18 +337,18 @@
element.append(
'<image src="${errorImg}">'
);
- element.attr('title',
- '<s:text name="pollen.error.pollTabErrorFound"/>');
+ element.attr('title', '<s:text name="pollen.error.pollTabErrorFound"/>');
}
if (<s:property value="%{informationsError}"/>) {
- var tab = $('#tabGeneral a');
- addErrorImage(tab);
+ addErrorImage($('#tabGeneral a'));
}
if (<s:property value="%{optionsError}"/>) {
- tab = $('#tabOptions a');
- addErrorImage(tab);
+ addErrorImage($('#tabOptions a'));
}
});
-</script>
\ No newline at end of file
+</script>
+
+<sj:dialog id="selectPersonListDialog" resizable="true" autoOpen="false"
+ modal="true" width="500"/>
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personListToVotingList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personListToVotingList.jsp (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personListToVotingList.jsp 2012-03-14 09:42:22 UTC (rev 3179)
@@ -0,0 +1,40 @@
+<%--
+ #%L
+ Pollen :: UI (strust2)
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ --%>
+<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<s:set name="prefix">votingList_<s:property value="votingListNumber"/></s:set>
+
+<script type="text/javascript">
+ jQuery(document).ready(function () {
+ // personToList loading
+ <s:iterator begin="1" end="nbPersonToLists" status="status">
+ addPersonToList(<s:property value="votingListNumber"/>, <s:property value='personToListNumber + %{#status.index}'/>, <s:property value="nbPersonToLists - 1"/>, '<s:property value="tokenId" />');
+ </s:iterator>
+ });
+</script>
+
+<s:div id='personToList_%{votingListNumber}'>
+ <%--Where to load personToList--%>
+</s:div>
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personListToVotingList.jsp
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp 2012-03-14 09:42:22 UTC (rev 3179)
@@ -42,7 +42,7 @@
-
<s:label for="%{#prefix}.email" key="pollen.common.email" theme="simple"/>
<s:textfield cols="30" id="%{#prefix}.email" key="%{#prefix}.email"
- label='' theme="simple"
+ label='' theme="simple" size="30"
value="%{personToList.pollAccount.email}"/>
-
<s:label for="%{#prefix}.weight" key="pollen.common.weight" theme="simple"/>
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp 2012-03-14 09:42:22 UTC (rev 3179)
@@ -0,0 +1,81 @@
+<%--
+ #%L
+ Pollen :: UI (strust2)
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ --%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+
+<script type="text/javascript">
+
+ var votingListNumber = parseInt('<s:property value='%{votingListNumber}'/>');
+
+ function cancel() {
+ $('#selectPersonListDialog').dialog('close');
+ return false;
+ }
+
+ function addPersonListToVotingList(personListId) {
+
+ // get first personToList number available
+ var containerId = "personToList_" + votingListNumber;
+ // get first personToList available position
+ var firstNumber = getFirstEmptyPersonToList(containerId);
+ if (firstNumber == -1) {
+ // no personToList available
+ // let's take a new one (max +1)
+ firstNumber = 1 + getLastPersonToList(containerId);
+ } else {
+ // remove all empty personToList
+ var numbers = getAllPersonToListNumbers(containerId);
+ for (n in numbers) {
+ if (n >= firstNumber) {
+ deletePersonToList(containerId + "_" + n);
+ }
+ }
+ }
+ loadPersonListToVotingList(votingListNumber, firstNumber, personListId);
+ return cancel();
+ }
+
+ jQuery(document).ready(function () {
+ $('#personList').change(function (event) {
+ var val = $(this).val();
+ $('#add').attr('disabled', val == '');
+ });
+ });
+
+</script>
+<fieldset class="ui-widget-content ui-corner-all">
+ <s:select id="personList" listValue="value.name" list="personList"
+ key='pollen.common.personList' headerKey="" headerValue=""/>
+ <hr/>
+ <div align="right">
+ <s:submit onclick="return cancel();" theme="simple"
+ key="pollen.action.cancel"/>
+ <s:submit
+ onclick="return addPersonListToVotingList($('#personList').val());"
+ theme="simple" disabled='true' id='add'
+ key="pollen.action.importPersonListToExistingVotingList"/>
+ </div>
+</fieldset>
+
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToAddToVotingList.jsp
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToCreateNewVotingList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToCreateNewVotingList.jsp (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToCreateNewVotingList.jsp 2012-03-14 09:42:22 UTC (rev 3179)
@@ -0,0 +1,69 @@
+<%--
+ #%L
+ Pollen :: UI (strust2)
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ --%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<script type="text/javascript">
+
+ function cancel() {
+ $('#selectPersonListDialog').dialog('close');
+ return false;
+ }
+
+ function importPersonListToNewVotingList(personListId) {
+ // add a new votingList
+ addNewVotingList();
+ // get his number
+ var votingListNumber = getLastVotingList("votingLists");
+
+ var containerId = "personToList_" + votingListNumber;
+ // remove all personToList of this votingList
+ var numbers = getAllPersonToListNumbers(containerId);
+ for (n in numbers) {
+ deletePersonToList(containerId + "_" + n);
+ }
+ // add personList to this votingList at position 0
+ loadPersonListToVotingList(votingListNumber, 0, personListId);
+ return cancel();
+ }
+ jQuery(document).ready(function () {
+ $('#personList').change(function (event) {
+ var val = $(this).val();
+ $('#import').attr('disabled', val == '');
+ });
+ });
+
+</script>
+<fieldset class="ui-widget-content ui-corner-all">
+ <s:select id="personList" listValue="value.name" list="personList"
+ key='pollen.common.personList' headerKey="" headerValue=""/>
+ <hr/>
+ <div align="right">
+ <s:submit onclick="return cancel();" theme="simple"
+ key="pollen.action.cancel"/>
+ <s:submit id='import' disabled="true" theme="simple"
+ onclick="return importPersonListToNewVotingList($('#personList').val());"
+ key="pollen.action.importPersonListToNewVotingList"/>
+ </div>
+</fieldset>
\ No newline at end of file
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/selectPersonListToCreateNewVotingList.jsp
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp 2012-03-14 09:42:22 UTC (rev 3179)
@@ -28,9 +28,6 @@
<s:set id='deleteTitle'>
<s:text name="pollen.action.pollVotingListDelete"/>
</s:set>
-<s:set id='editTitle'>
- <s:text name="pollen.action.pollVotingListEdit"/>
-</s:set>
<script type="text/javascript">
jQuery(document).ready(function () {
@@ -53,15 +50,11 @@
-
<s:label for="%{#prefix}.weight" key="pollen.common.weight"
theme="simple"/>
- <s:textfield id="%{#prefix}.weight" key="%{#prefix}.weight" value="%{votingList.weight}"
+ <s:textfield id="%{#prefix}.weight" key="%{#prefix}.weight"
+ value="%{votingList.weight}"
size="1" label='' theme="simple"/>
</div>
<div id='<s:property value="%{#prefix}"/>_actions' class="fright">
- <s:a href='#' onclick="return editVotingList('%{prefix}')">
- <image alt='<s:property value="editTitle"/>'
- title='<s:property value="editTitle"/>'
- src="<s:url value='/img/edit.png'/>"></image>
- </s:a>
<s:a href='#'
onclick="return deleteVotingList('votingLists_%{votingListNumber}')">
<image alt='<s:property value="deleteTitle"/>'
@@ -78,10 +71,20 @@
<%--Where to load personToList--%>
</s:div>
<hr/>
- <div class="cleanBoth"></div>
- <s:submit id='%{#prefix}_addPersonToList' name='%{#prefix}_addPersonToList'
- key="pollen.action.addPersonToList" align="center"
- onclick='return addNewPersonToList("%{votingListNumber}");'/>
+ <div class="cleanBoth" align="center">
+ <s:submit id='%{#prefix}_addPersonToList'
+ name='%{#prefix}_addPersonToList'
+ key="pollen.action.addPersonToList" theme="simple"
+ onclick='return addNewPersonToList("%{votingListNumber}");'/>
+ <s:if test="userLoggued">
+ <s:submit id='%{#prefix}_addPersonToList' theme="simple"
+ name='%{#prefix}_addPersonToList'
+ key="pollen.action.addPersonListFromVotingList"
+ onclick='return selectPersonListToAddToVotingList("%{votingListNumber}");'/>
+ </s:if>
+
+ </div>
+
</fieldset>
<br/>
</s:div>
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp 2012-03-13 14:06:19 UTC (rev 3178)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp 2012-03-14 09:42:22 UTC (rev 3179)
@@ -27,166 +27,230 @@
<script type="text/javascript">
- var votingListText = '<s:text name="pollen.common.votingList"/>';
- var personToListText = '<s:text name="pollen.common.personToList"/>';
+var votingListText = '<s:text name="pollen.common.votingList"/>';
+var personToListText = '<s:text name="pollen.common.personToList"/>';
- function getFirstVotingList(containerId) {
- var result = 65535;
- getAllVotingLists(containerId).each(function () {
- var current = $(this).data('votingListNumber');
- if (current < result) {
- result = current;
- }
- });
- return result;
+function getFirstVotingList(containerId) {
+ var result = 65535;
+ getAllVotingLists(containerId).each(function () {
+ var current = $(this).data('votingListNumber');
+ if (current < result) {
+ result = current;
+ }
+ });
+ return result;
+}
+
+function getLastVotingList(containerId) {
+ var result = 0;
+ getAllVotingLists(containerId).each(function () {
+ var current = $(this).data('votingListNumber');
+ if (current > result) {
+ result = current;
+ }
+ });
+ return result;
+}
+
+function getAllVotingLists(containerId) {
+ return $("div[id^='" + containerId + "_']");
+}
+
+function updateUpdownVotingListActions(containerId) {
+ getAllVotingLists(containerId).each(function (index) {
+ var currentVotingListNumber = $(this).data('votingListNumber');
+ var labelWidget = $('#' + containerId + "_" + currentVotingListNumber + "_label");
+ labelWidget.html(votingListText + ' ' + (index + 1));
+ });
+}
+
+function loadVotingList(containerId, votingListNumber, nbVotingLists, tokenId) {
+ if (votingListNumber == -1) {
+ // to add a new votingList, get the new available votingListNumber
+ votingListNumber = 1 + getLastVotingList(containerId);
}
-
- function getLastVotingList(containerId) {
- var result = 0;
- getAllVotingLists(containerId).each(function () {
- var current = $(this).data('votingListNumber');
- if (current > result) {
- result = current;
+ $.ajax(
+ {
+ url:'<s:url namespace="/poll" action="displayVotingList"/>',
+ data:{ tokenId:tokenId, votingListNumber:votingListNumber },
+ async:false,
+ dataType:"html",
+ success:function (data, textStatus) {
+ var container = $("#" + containerId);
+ container.append(data);
+ // store votingListNumber
+ var votingList = $("#" + containerId + "_" + votingListNumber);
+ votingList.data('votingListNumber', votingListNumber);
+ votingList.data('votingListContainerId', containerId);
+ if (votingListNumber == nbVotingLists || !tokenId) {
+ updateUpdownVotingListActions(containerId);
+ }
}
});
- return result;
- }
+}
- function getAllVotingLists(containerId) {
- return $("div[id^='" + containerId + "_']");
- }
+function addVotingList(votingListNumber, nbVotingLists, tokenId) {
+ loadVotingList('votingLists', votingListNumber, nbVotingLists, tokenId);
+}
- function updateUpdownVotingListActions(containerId) {
- getAllVotingLists(containerId).each(function (index) {
- var currentVotingListNumber = $(this).data('votingListNumber');
- var labelWidget = $('#' + containerId + "_" + currentVotingListNumber + "_label");
- labelWidget.html(votingListText + ' ' + (index + 1));
- });
- }
+function addNewVotingList() {
+ addVotingList(-1, -1);
+ return false;
+}
- function loadVotingList(containerId, votingListNumber, nbVotingLists, tokenId) {
- if (votingListNumber == -1) {
- // to add a new votingList, get the new available votingListNumber
- votingListNumber = 1 + getLastVotingList(containerId);
+function deleteVotingList(votingListId) {
+ var votingList = $('#' + votingListId);
+ var containerId = votingList.data('votingListContainerId');
+ votingList.remove();
+ updateUpdownVotingListActions(containerId);
+ return false;
+}
+
+function getFirstPersonToList(containerId) {
+ var result = 65535;
+ getAllPersonToLists(containerId).each(function () {
+ var current = $(this).data('personToListNumber');
+ if (current < result) {
+ result = current;
}
- $.ajax(
- {
- url:'<s:url namespace="/poll" action="displayVotingList"/>',
- data:{ tokenId:tokenId, votingListNumber:votingListNumber },
- async:false,
- dataType:"html",
- success:function (data, textStatus) {
- var container = $("#" + containerId);
- container.append(data);
- // store votingListNumber
- var votingList = $("#" + containerId + "_" + votingListNumber);
- votingList.data('votingListNumber', votingListNumber);
- votingList.data('votingListContainerId', containerId);
- if (votingListNumber == nbVotingLists || !tokenId) {
- updateUpdownVotingListActions(containerId);
- }
- }
- });
- }
+ });
+ return result;
+}
- function addVotingList(votingListNumber, nbVotingLists, tokenId) {
- loadVotingList('votingLists', votingListNumber, nbVotingLists, tokenId);
- }
+function getLastPersonToList(containerId) {
+ var result = 0;
+ getAllPersonToLists(containerId).each(function () {
+ var current = $(this).data('personToListNumber');
+ if (current > result) {
+ result = current;
+ }
+ });
+ return result;
+}
- function addNewVotingList() {
- addVotingList(-1, -1);
- return false;
- }
+function getAllPersonToLists(containerId) {
+ return $("div[id^='" + containerId + "_']");
+}
- function deleteVotingList(votingListId) {
- var votingList = $('#' + votingListId);
- var containerId = votingList.data('votingListContainerId');
- votingList.remove();
- updateUpdownVotingListActions(containerId);
- return false;
+function getAllPersonToListNumbers(containerId) {
+ var result = [];
+ getAllPersonToLists(containerId).each(function () {
+ var current = $(this).data('personToListNumber');
+ result.push(current);
+ });
+ return result;
+}
+
+function getFirstEmptyPersonToList(containerId) {
+ var result = -1;
+ var numbers = getAllPersonToListNumbers(containerId);
+ for (var n in numbers) {
+ var nameInput = $('[name="' + containerId + '_' + n + '.votingId"]');
+ var emailInput = $('[name="' + containerId + '_' + n + '.email"]');
+
+ var name = nameInput.val();
+ var email = emailInput.val();
+ if (name == '' && email == '') {
+ result = n;
+ break;
+ }
}
+ return result;
+}
- function getFirstPersonToList(containerId) {
- var result = 65535;
- getAllPersonToLists(containerId).each(function () {
- var current = $(this).data('personToListNumber');
- if (current < result) {
- result = current;
- }
- });
- return result;
+function updateUpdownPersonToListActions(containerId) {
+ getAllPersonToLists(containerId).each(function (index) {
+ var currentPersonToListNumber = $(this).data('personToListNumber');
+ var labelWidget = $('#' + containerId + "_" + currentPersonToListNumber + "_label");
+ labelWidget.html(personToListText + ' ' + (index + 1));
+ });
+}
+
+function loadPersonToList(containerId, votingListNumber, personToListNumber, nbPersonToLists, tokenId) {
+ if (personToListNumber == -1) {
+ // to add a new personToList, get the new available personToListNumber
+ personToListNumber = 1 + getLastPersonToList(containerId);
}
-
- function getLastPersonToList(containerId) {
- var result = 0;
- getAllPersonToLists(containerId).each(function () {
- var current = $(this).data('personToListNumber');
- if (current > result) {
- result = current;
+ $.ajax(
+ {
+ url:'<s:url namespace="/poll" action="displayPersonToList"/>',
+ data:{
+ tokenId:tokenId,
+ votingListNumber:votingListNumber,
+ personToListNumber:personToListNumber
+ },
+ async:false,
+ dataType:"html",
+ success:function (data, textStatus) {
+ var container = $("#" + containerId);
+ container.append(data);
+ // store personToListNumber
+ var personToList = $("#" + containerId + "_" + personToListNumber);
+ personToList.data('votingListNumber', votingListNumber);
+ personToList.data('personToListNumber', personToListNumber);
+ personToList.data('personToListContainerId', containerId);
+ if (personToListNumber == nbPersonToLists || !tokenId) {
+ updateUpdownPersonToListActions(containerId);
+ }
}
});
- return result;
- }
+}
- function getAllPersonToLists(containerId) {
- return $("div[id^='" + containerId + "_']");
- }
+function addPersonToList(votingListNumber, personToListNumber, nbPersonToLists, tokenId) {
+ loadPersonToList(
+ 'personToList_' + votingListNumber,
+ votingListNumber, personToListNumber, nbPersonToLists, tokenId
+ );
+}
- function updateUpdownPersonToListActions(containerId) {
- getAllPersonToLists(containerId).each(function (index) {
- var currentPersonToListNumber = $(this).data('personToListNumber');
- var labelWidget = $('#' + containerId + "_" + currentPersonToListNumber + "_label");
- labelWidget.html(personToListText + ' ' + (index + 1));
- });
- }
+function addNewPersonToList(votingListNumber) {
+ addPersonToList(votingListNumber, -1, -1);
+ return false;
+}
- function loadPerson(containerId, votingListNumber, personToListNumber, nbPersonToLists, tokenId) {
- if (personToListNumber == -1) {
- // to add a new personToList, get the new available personToListNumber
- personToListNumber = 1 + getLastPersonToList(containerId);
- }
- $.ajax(
- {
- url:'<s:url namespace="/poll" action="displayPersonToList"/>',
- data:{
- tokenId:tokenId,
- votingListNumber:votingListNumber,
- personToListNumber:personToListNumber
- },
- async:false,
- dataType:"html",
- success:function (data, textStatus) {
- var container = $("#" + containerId);
- container.append(data);
- // store personToListNumber
- var personToList = $("#" + containerId + "_" + personToListNumber);
- personToList.data('votingListNumber', votingListNumber);
- personToList.data('personToListNumber', personToListNumber);
- personToList.data('personToListContainerId', containerId);
- if (personToListNumber == nbPersonToLists || !tokenId) {
- updateUpdownPersonToListActions(containerId);
- }
- }
- });
- }
+function deletePersonToList(personToListId) {
+ var personToList = $('#' + personToListId);
+ var containerId = personToList.data('personToListContainerId');
+ personToList.remove();
+ updateUpdownPersonToListActions(containerId);
+ return false;
+}
- function addPersonToList(votingListNumber, personToListNumber, nbPersonToLists, tokenId) {
- loadPerson(
- 'personToList_' + votingListNumber,
- votingListNumber, personToListNumber, nbPersonToLists, tokenId
- );
- }
- function addNewPersonToList(votingListNumber) {
- addPersonToList(votingListNumber, -1, -1);
- return false;
- }
+function loadPersonListToVotingList(votingListNumber, personToListNumber, personListId) {
- function deletePersonToList(personToListId) {
- var personToList = $('#' + personToListId);
- var containerId = personToList.data('personToListContainerId');
- personToList.remove();
- updateUpdownPersonToListActions(containerId);
- return false;
- }
+ $.ajax(
+ {
+ url:'<s:url namespace="/poll" action="displayPersonListToVotingList"/>',
+ data:{
+ votingListNumber:votingListNumber,
+ personToListNumber:personToListNumber,
+ personListId:personListId },
+ async:false,
+ dataType:"json",
+ success:function (data, textStatus) {
+ var token = data.tokenId;
+ var nbPersonToLists = parseInt(data.nbPersonToLists);
+ var personToListNumber = parseInt(data.personToListNumber);
+ var maxPersonToListNumber = parseInt(personToListNumber) + nbPersonToLists - 1;
+ console.info(">> token = " + token);
+ console.info(">> personListId = " + personListId);
+ console.info(">> incoming votingListNumber = " + votingListNumber);
+ console.info(">> nb personToList to import = " + nbPersonToLists);
+ console.info(">> first personToListNumber = " + personToListNumber);
+ console.info(">> last PersonToListNumber = " + maxPersonToListNumber);
+
+ var index = personToListNumber;
+ while (index <= maxPersonToListNumber) {
+ console.info("Will load personToList = " + index + " / " + maxPersonToListNumber);
+ addPersonToList(votingListNumber,
+ index,
+ maxPersonToListNumber,
+ token
+ );
+ index += 1;
+ }
+ }
+ });
+}
</script>
\ No newline at end of file
1
0
13 Mar '12
Author: tchemit
Date: 2012-03-13 15:06:19 +0100 (Tue, 13 Mar 2012)
New Revision: 3178
Url: http://chorem.org/repositories/revision/pollen/3178
Log:
page de creation de sondage presque finie :)
Added:
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayPersonToList.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp
Modified:
branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenTopiaTransactionFilter.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/CreatePoll.java
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/dateChoice.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/imageChoice.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/result.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/resume.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/textChoice.jsp
branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/vote.jsp
Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java 2012-03-13 14:06:19 UTC (rev 3178)
@@ -251,9 +251,7 @@
// email notification
EmailService emailService = newService(EmailService.class);
- emailService.onPollCreated(poll,
- pollVoteUrl,
- pollEditUrl);
+ emailService.onPollCreated(poll, pollVoteUrl, pollEditUrl);
// feed notification
PollFeedService pollFeedService = newService(PollFeedService.class);
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenSession.java 2012-03-13 14:06:19 UTC (rev 3178)
@@ -55,23 +55,35 @@
this.userAccount = userAccount;
}
- public Map<String, Object> getDynamicData() {
- if (dynamicData == null) {
- dynamicData = Maps.newHashMap();
- }
- return dynamicData;
+ public <T> T getDynamicData(String token) {
+ Object result = getDynamicData().get(token);
+ return (T) result;
}
public void putDynamicData(String token, Object data) {
getDynamicData().put(token, data);
+ if (log.isInfoEnabled()) {
+ log.info("Dynamic attributes size : " + getDynamicData().size());
+ }
}
- public <T> T getDynamicData(String token) {
- Object result = getDynamicData().get(token);
- return (T) result;
- }
-
public void removeDynamicData(String token) {
getDynamicData().remove(token);
+ if (log.isInfoEnabled()) {
+ log.info("Dynamic attributes size : " + getDynamicData().size());
+ }
}
+
+ public void clearDynamicData() {
+ if (dynamicData != null) {
+ dynamicData.clear();
+ }
+ }
+
+ protected Map<String, Object> getDynamicData() {
+ if (dynamicData == null) {
+ dynamicData = Maps.newHashMap();
+ }
+ return dynamicData;
+ }
}
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenTopiaTransactionFilter.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenTopiaTransactionFilter.java 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/PollenTopiaTransactionFilter.java 2012-03-13 14:06:19 UTC (rev 3178)
@@ -31,6 +31,8 @@
import org.nuiton.topia.TopiaRuntimeException;
import org.nuiton.web.filter.TopiaTransactionFilter;
+import javax.servlet.ServletRequest;
+
/**
* EchoBase implementation of the {@link TopiaTransactionFilter}.
*
@@ -44,7 +46,7 @@
LogFactory.getLog(PollenTopiaTransactionFilter.class);
@Override
- protected TopiaContext beginTransaction() throws TopiaRuntimeException {
+ protected TopiaContext beginTransaction(ServletRequest request) throws TopiaRuntimeException {
PollenApplicationContext applicationContext =
PollenActionSupport.getPollenApplicationContext();
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/CreatePoll.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/CreatePoll.java 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/CreatePoll.java 2012-03-13 14:06:19 UTC (rev 3178)
@@ -24,6 +24,7 @@
package org.chorem.pollen.ui.actions.poll;
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -37,9 +38,15 @@
import org.chorem.pollen.bean.PollImageChoice;
import org.chorem.pollen.business.persistence.Choice;
import org.chorem.pollen.business.persistence.ChoiceImpl;
+import org.chorem.pollen.business.persistence.PersonToList;
+import org.chorem.pollen.business.persistence.PersonToListImpl;
import org.chorem.pollen.business.persistence.Poll;
+import org.chorem.pollen.business.persistence.PollAccount;
+import org.chorem.pollen.business.persistence.PollAccountImpl;
import org.chorem.pollen.business.persistence.PreventRule;
import org.chorem.pollen.business.persistence.UserAccount;
+import org.chorem.pollen.business.persistence.VotingList;
+import org.chorem.pollen.business.persistence.VotingListImpl;
import org.chorem.pollen.common.ChoiceType;
import org.chorem.pollen.common.I18nAble;
import org.chorem.pollen.common.PollType;
@@ -47,6 +54,7 @@
import org.chorem.pollen.services.impl.PollService;
import org.chorem.pollen.services.impl.PreventRuleService;
import org.chorem.pollen.ui.actions.PollenActionSupport;
+import org.nuiton.util.StringUtil;
import java.io.File;
import java.util.Collections;
@@ -71,14 +79,17 @@
private static final Log log = LogFactory.getLog(CreatePoll.class);
public static final Pattern TEXT_CHOICE_NAME_PATTERN =
- Pattern.compile("textChoice_(\\d+).name");
+ Pattern.compile("textChoice_(\\d+)\\.name");
public static final Pattern DATE_CHOICE_NAME_PATTERN =
- Pattern.compile("dateChoice_(\\d+).name");
+ Pattern.compile("dateChoice_(\\d+)\\.name");
public static final Pattern IMAGE_CHOICE_NAME_PATTERN =
- Pattern.compile("imageChoice_(\\d+).name");
+ Pattern.compile("imageChoice_(\\d+)\\.name");
+ public static final Pattern VOTING_LIST_NAME_PATTERN =
+ Pattern.compile("votingList_(\\d+)\\.name");
+
protected Poll poll;
protected Map<String, String> pollTypes;
@@ -101,12 +112,16 @@
private String imageChoiceTokenId;
+ private String votingListTokenId;
+
private int nbTextChoices;
private int nbDateChoices;
private int nbImageChoices;
+ private int nbVotingLists;
+
/** Uploaded images (for choice type poll). */
private List<File> imageChoice;
@@ -122,6 +137,10 @@
*/
private Map<String, String[]> parameters;
+ private boolean informationsError;
+
+ private boolean optionsError;
+
protected transient PollService pollService;
@Override
@@ -162,6 +181,14 @@
return imageChoiceTokenId;
}
+ public int getNbVotingLists() {
+ return nbVotingLists;
+ }
+
+ public String getVotingListTokenId() {
+ return votingListTokenId;
+ }
+
public Map<String, String> getPollTypes() {
return pollTypes;
}
@@ -239,6 +266,46 @@
addtoList(getImageChoiceFileName(), index, imageChoiceFileName);
}
+ public boolean isInformationsError() {
+ return informationsError;
+ }
+
+ public boolean isOptionsError() {
+ return optionsError;
+ }
+
+ public boolean isFreePoll() {
+ PollType pollType = poll.getPollType();
+ return pollType == PollType.FREE;
+ }
+
+ public boolean isGroupPoll() {
+ PollType pollType = poll.getPollType();
+ return pollType == PollType.GROUP;
+ }
+
+ public String getPollVoteUrl() {
+ return getPollService().getPollVoteUrl(poll);
+ }
+
+ public String getPollEditUrl() {
+ return getPollService().getPollEditUrl(poll);
+ }
+
+ public int getSelectedTab() {
+ int result;
+ if (isInformationsError()) {
+ result = 0;
+ } else {
+ if (isOptionsError()) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ }
+ return result;
+ }
+
@Override
public void prepare() throws Exception {
@@ -248,6 +315,7 @@
//TODO tchemit-2012-03-05 use a default value from configuration
nbTextChoices = nbDateChoices = nbImageChoices = 5;
+ nbVotingLists = 1;
String tokenSuffix = getServiceContext().createPollenUrlId();
@@ -284,6 +352,13 @@
break;
}
getPollenSession().putDynamicData(tokenId, choices);
+
+ // load votingLists
+
+ votingListTokenId = DisplayVotingList.VOTING_LIST_TOKEN + "_" +
+ tokenSuffix;
+ Map<Integer, VotingList> votingLists = buildVotingLists(1);
+ getPollenSession().putDynamicData(votingListTokenId, votingLists);
}
@Override
@@ -293,9 +368,11 @@
// poll must have a title
if (StringUtils.isEmpty(poll.getTitle())) {
- addFieldError("poll.title", _("poll.error.poll.required.title"));
+ addFieldError("poll.title", _("pollen.error.poll.required.title"));
}
+ informationsError = false;
+
// validate choices
Map<Integer, Choice> orderedChoices = getOrderedChoices();
@@ -303,7 +380,8 @@
// poll must have at least one choice
addFieldError("poll.choices",
- _("poll.error.poll.required.one.choice"));
+ _("pollen.error.poll.required.one.choice"));
+ informationsError = true;
} else {
//TODO tchemit improve this (from different cases text-date-image)
@@ -319,12 +397,34 @@
}
if (duplicateNameDetected) {
addFieldError("poll.choices",
- _("poll.error.poll.detected.duplicate.choice.name"));
+ _("pollen.error.poll.detected.duplicate.choice.name"));
+ informationsError = true;
}
}
+ optionsError = false;
+
// validate security stuff
+ if (isFreePoll()) {
+
+ // nothing to validate
+
+ } else {
+ Map<Integer, VotingList> votingLists = getOrderedVotingLists();
+
+ Set<String> groups = Sets.newHashSet();
+ Set<String> voters = Sets.newHashSet();
+ Set<String> emails = Sets.newHashSet();
+
+ for (Map.Entry<Integer, VotingList> entry : votingLists.entrySet()) {
+ optionsError |= validateVotingList(entry.getKey(),
+ entry.getValue(),
+ groups,
+ voters,
+ emails);
+ }
+ }
}
@Override
@@ -337,6 +437,15 @@
poll.addChoice(choice);
}
+ if (!isFreePoll()) {
+
+ Map<Integer, VotingList> votingLists = getOrderedVotingLists();
+ for (Integer index : votingLists.keySet()) {
+ VotingList votingList = votingLists.get(index);
+ poll.addVotingList(votingList);
+ }
+ }
+
PollService service = getPollService();
PreventRuleService preventRuleService =
@@ -363,20 +472,183 @@
poll = service.createPoll(poll);
// remove all stuff from session
- getPollenSession().removeDynamicData(textChoiceTokenId);
- getPollenSession().removeDynamicData(dateChoiceTokenId);
- getPollenSession().removeDynamicData(imageChoiceTokenId);
+ getPollenSession().clearDynamicData();
- addActionMessage(_("poll.info.poll.created"));
+ addActionMessage(_("pollen.info.poll.created"));
return SUCCESS;
}
- public String getPollVoteUrl() {
- return getPollService().getPollVoteUrl(poll);
+ protected boolean validateVotingList(int votingListNumber,
+ VotingList votingList,
+ Set<String> groups,
+ Set<String> voters,
+ Set<String> emails) {
+
+ boolean result = false;
+ Map<String, String> errors = Maps.newHashMap();
+
+ String votingListErrorPrefix = "poll.votingList_" + votingListNumber;
+
+ if (isGroupPoll()) {
+
+ // group poll
+
+ // check there is at least one group
+ // check no doublon on group names
+ // check there is at least one voter on each group
+ // check no doublon on voter names
+ // check no doublon on voter emails
+
+ { // validate votingList name
+ String votingListName = votingList.getName();
+
+ if (StringUtils.isEmpty(votingListName)) {
+
+ errors.put(votingListErrorPrefix + ".name",
+ _("pollen.error.poll.required.votingList.name"));
+ } else {
+
+ // check no votingList name doublon
+ boolean add = groups.add(votingListName);
+ if (!add) {
+
+ // name doublon
+ errors.put(
+ votingListErrorPrefix + ".name",
+ _("pollen.error.poll.votingList.name.doublon"));
+ }
+
+ }
+ }
+
+ { // validate votingList weight
+
+ if (votingList.getWeight() == 0) {
+
+ // no weight filled (can be a bad conversion)
+ errors.put(
+ votingListErrorPrefix + ".weight",
+ _("pollen.error.poll.votingList.weight.not.valid"));
+ }
+ }
+ }
+
+ // check there is at least one voter
+
+ String persontoListToken = DisplayPersonToList.getPersonToListTokenId(
+ votingListTokenId, votingListNumber);
+
+ Map<Integer, PersonToList> personToLists =
+ getPollenSession().getDynamicData(persontoListToken);
+
+ if (MapUtils.isEmpty(personToLists)) {
+
+ // no personToList found for unique votingList 0
+ errors.put(votingListErrorPrefix,
+ _("pollen.error.poll.required.one.personToList"));
+ } else {
+
+ // check no doublon on voter names
+ // check no doublon on voter emails
+
+ for (Map.Entry<Integer, PersonToList> entry :
+ personToLists.entrySet()) {
+
+ result |= validatePersonList(entry.getKey(), entry.getValue(),
+ voters, emails);
+ }
+ }
+
+ if (MapUtils.isNotEmpty(errors)) {
+
+ // keep errors to display them in correct action
+ String errorToken = DisplayVotingList.getVotingListErrorTokenId(
+ votingListTokenId, 0);
+ if (log.isInfoEnabled()) {
+ log.info("Add " + errors.size() + " errors to " + errorToken);
+ }
+ getPollenSession().putDynamicData(errorToken, errors);
+ result = true;
+ }
+ return result;
}
- public String getPollEditUrl() {
- return getPollService().getPollEditUrl(poll);
+ protected boolean validatePersonList(int personToListNumber,
+ PersonToList personToList,
+ Set<String> voters,
+ Set<String> emails) {
+
+ boolean result = false;
+ Map<String, String> errors = Maps.newHashMap();
+ String fieldNamePrefix =
+ "personToList_0_" + personToListNumber;
+ PollAccount pollAccount = personToList.getPollAccount();
+
+ { // validate votingId
+
+ String votingId = pollAccount.getVotingId();
+ // check voter is not doublon
+ boolean add = voters.add(votingId);
+ if (!add) {
+
+ // voter doublon
+ errors.put(
+ fieldNamePrefix + ".votingId",
+ _("pollen.error.poll.personToList.votingId.doublon"));
+ }
+ }
+ { // validate email
+ String email = pollAccount.getEmail();
+
+ if (StringUtils.isEmpty(email)) {
+ errors.put(
+ fieldNamePrefix + ".email",
+ _("pollen.error.poll.personToList.email.required"));
+ } else {
+
+
+ boolean validEmail = StringUtil.isEmail(email);
+ if (!validEmail) {
+
+ // not a valid email
+ errors.put(
+ fieldNamePrefix + ".email",
+ _("pollen.error.poll.personToList.email.not.valid"));
+ } else {
+
+ // check email not doublon
+ boolean add = emails.add(email);
+ if (!add) {
+
+ // email doublon
+ errors.put(
+ fieldNamePrefix + ".email",
+ _("pollen.error.poll.personToList.email.doublon"));
+ }
+ }
+ }
+ }
+ { // validate weight
+ if (personToList.getWeight() == 0) {
+
+ // no weight filled (can be a bad conversion)
+ errors.put(
+ fieldNamePrefix + ".weight",
+ _("pollen.error.poll.personToList.weight.not.valid"));
+ }
+ }
+
+ if (MapUtils.isNotEmpty(errors)) {
+ String errorToken =
+ DisplayPersonToList.getPersonToListErrorTokenId(
+ votingListTokenId, 0, personToListNumber);
+ if (log.isInfoEnabled()) {
+ log.info("Add " + errors.size() + " errors to " + errorToken);
+ }
+ getPollenSession().putDynamicData(errorToken, errors);
+ result = true;
+ }
+ return result;
}
@Override
@@ -392,27 +664,28 @@
}
protected Map<Integer, Choice> getOrderedChoices() {
-
- Map<Integer, Choice> orderedChoices = null;
+ Map<Integer, Choice> result = null;
switch (poll.getChoiceType()) {
-
case TEXT:
- orderedChoices = getPollenSession().getDynamicData(
- textChoiceTokenId);
-
+ result = getPollenSession().getDynamicData(textChoiceTokenId);
break;
case DATE:
- orderedChoices = getPollenSession().getDynamicData(
- dateChoiceTokenId);
+ result = getPollenSession().getDynamicData(dateChoiceTokenId);
break;
case IMAGE:
- orderedChoices = getPollenSession().getDynamicData(
- imageChoiceTokenId);
+ result = getPollenSession().getDynamicData(imageChoiceTokenId);
break;
}
- return orderedChoices;
+ return result;
}
+ protected Map<Integer, VotingList> getOrderedVotingLists() {
+
+ Map<Integer, VotingList> result = getPollenSession().getDynamicData(
+ votingListTokenId);
+ return result;
+ }
+
protected Map<Integer, Choice> buildTextChoices(int nbDefault) {
Map<Integer, Choice> result = Maps.newTreeMap();
@@ -441,7 +714,7 @@
}
}
}
- result = reindexChoices(result, maxNumber);
+ result = reindexMap(result, maxNumber);
int size = result.size();
nbTextChoices = Math.max(nbDefault, size);
@@ -478,7 +751,7 @@
}
}
}
- result = reindexChoices(result, maxNumber);
+ result = reindexMap(result, maxNumber);
int size = result.size();
nbDateChoices = Math.max(nbDefault, size);
@@ -495,8 +768,11 @@
for (String fileName : getImageChoiceFileName()) {
if (fileName != null) {
- parameters.put("imageChoice_" + index + ".name", new String[]{fileName});
- parameters.put("imageChoice_" + index + ".location", new String[]{getImageChoice().get(index).getAbsolutePath()});
+ parameters.put("imageChoice_" + index + ".name",
+ new String[]{fileName});
+ parameters.put(
+ "imageChoice_" + index + ".location",
+ new String[]{getImageChoice().get(index).getAbsolutePath()});
}
index++;
}
@@ -527,7 +803,7 @@
}
}
}
- result = reindexChoices(result, maxNumber);
+ result = reindexMap(result, maxNumber);
int size = result.size();
nbImageChoices = Math.max(nbDefault, size);
log.info("nbImageChoices (from request) = " + size);
@@ -535,18 +811,186 @@
return result;
}
- private void logChoice(Map<Integer, Choice> result) {
- for (Map.Entry<Integer, Choice> e : result.entrySet()) {
- Integer choiceId = e.getKey();
- Choice choice = e.getValue();
- if (log.isInfoEnabled()) {
- log.info("Choice [" + choiceId + "] = " +
- choice.getName() + " -- " +
- choice.getDescription());
+ protected Map<Integer, VotingList> buildVotingLists(int nbDefault) {
+ Map<Integer, VotingList> result = Maps.newTreeMap();
+
+ int maxNumber = 0;
+
+ // get all votingList_ parameters
+ Set<String> votingListParameterNames = Sets.filter(
+ parameters.keySet(),
+ new StringStartWithPredicate("votingList_"));
+
+ for (String paramName : votingListParameterNames) {
+
+ Matcher matcher = VOTING_LIST_NAME_PATTERN.matcher(paramName);
+
+ if (matcher.matches()) {
+
+ // found a voting list name
+
+ int votingListNumber = buildVotingList(paramName,
+ matcher,
+ result
+ );
+ maxNumber = Math.max(maxNumber, votingListNumber);
}
}
+
+ result = reindexMap(result, maxNumber);
+
+ int size = result.size();
+ nbVotingLists = Math.max(nbDefault, size);
+ log.info("nbVotingList (from request) = " + size);
+
+ // add personToList maps to session (but just now, since votingList
+ // could have been reindex)
+ for (Map.Entry<Integer, VotingList> entry : result.entrySet()) {
+ Integer votingListNumber = entry.getKey();
+ VotingList votingList = entry.getValue();
+
+ if (!votingList.isPollAccountPersonToListEmpty()) {
+ List<PersonToList> personToList =
+ votingList.getPollAccountPersonToList();
+
+ Map<Integer, PersonToList> personToListMap = Maps.newTreeMap();
+ int index = 0;
+ for (PersonToList toList : personToList) {
+ personToListMap.put(index++, toList);
+ }
+
+ String token = DisplayPersonToList.getPersonToListTokenId(
+ votingListTokenId, votingListNumber);
+ if (log.isInfoEnabled()) {
+ log.info("Add " + token + " with " +
+ personToListMap.size() + " personToList");
+ }
+ getPollenSession().putDynamicData(token, personToListMap);
+ }
+ }
+
+ return result;
}
+ private double getDoubleValue(String parameterName) {
+ String parameterValue = getNonEmptyParameterValue(parameterName);
+ double result = 0;
+ if (StringUtils.isNotEmpty(parameterValue)) {
+
+ try {
+ result = Double.valueOf(parameterValue);
+ } catch (NumberFormatException e) {
+ //bad conversion, will be treated later
+ if (log.isDebugEnabled()) {
+ log.debug("Bad double conversion from param [" +
+ parameterName + "] : " + parameterValue);
+ }
+ }
+ }
+ return result;
+ }
+
+ private int buildVotingList(String votingListParameterName,
+ Matcher votingListMatcher,
+ Map<Integer, VotingList> result) {
+
+ String paramValue = getNonEmptyParameterValue(votingListParameterName);
+ int votingListNumber = Integer.valueOf(votingListMatcher.group(1));
+
+ VotingList votingList = new VotingListImpl();
+
+ votingList.setName(paramValue);
+
+ String prefix = "votingList_" + votingListNumber;
+
+ double weight = getDoubleValue(prefix + ".weight");
+ votingList.setWeight(weight);
+
+ String topiaId = getNonEmptyParameterValue(prefix + ".topiaId");
+ votingList.setTopiaId(topiaId);
+
+ result.put(votingListNumber, votingList);
+
+ String personToListPrefix = "personToList_" + votingListNumber + "_";
+
+ // get all personToList parameters
+ Set<String> votingListParameterNames = Sets.filter(
+ parameters.keySet(), new StringStartWithPredicate(personToListPrefix));
+
+ Pattern personToListNamePattern = Pattern.compile(
+ personToListPrefix + "(\\d+)\\.votingId");
+
+ Map<Integer, PersonToList> personToLists = Maps.newTreeMap();
+
+ int maxPersonToListNumber = 0;
+
+ // let's build personToList list
+ for (String personToListNameParameter : votingListParameterNames) {
+
+ Matcher matcher = personToListNamePattern.matcher(
+ personToListNameParameter);
+
+ if (matcher.matches()) {
+
+ int personToListNumber = buildPersonToList(
+ personToListPrefix,
+ personToListNameParameter,
+ matcher,
+ votingListNumber,
+ personToLists);
+
+ maxPersonToListNumber = Math.max(maxPersonToListNumber, personToListNumber);
+ }
+ }
+
+ personToLists = reindexMap(personToLists, maxPersonToListNumber);
+
+ for (PersonToList personToList : personToLists.values()) {
+ votingList.addPollAccountPersonToList(personToList);
+ }
+
+ return votingListNumber;
+ }
+
+ private int buildPersonToList(String personToListPrefix,
+ String paramName,
+ Matcher personToListMatcher,
+ int votingListNumber,
+ Map<Integer, PersonToList> result) {
+
+ String paramValue = getNonEmptyParameterValue(paramName);
+
+ int personToListNumber = 0;
+
+ if (paramValue != null) {
+
+ // found a PersonToList none empty name, keep it
+
+ personToListNumber = Integer.valueOf(personToListMatcher.group(1));
+
+ PersonToList personToList = new PersonToListImpl();
+
+ PollAccount account = new PollAccountImpl();
+ personToList.setPollAccount(account);
+
+ account.setVotingId(paramValue);
+
+ String prefix = personToListPrefix + personToListNumber;
+
+ double weight = getDoubleValue(prefix + ".weight");
+ personToList.setWeight(weight);
+
+ String topiaId = getNonEmptyParameterValue(prefix + ".topiaId");
+ personToList.setTopiaId(topiaId);
+
+ String email = getNonEmptyParameterValue(prefix + ".email");
+ account.setEmail(email);
+
+ result.put(personToListNumber, personToList);
+ }
+ return personToListNumber;
+ }
+
private Choice createImageChoice(PollImageChoice choice,
String prefix,
String name) {
@@ -581,11 +1025,22 @@
return choice;
}
+ private void logChoice(Map<Integer, Choice> result) {
+ for (Map.Entry<Integer, Choice> e : result.entrySet()) {
+ Integer choiceId = e.getKey();
+ Choice choice = e.getValue();
+ if (log.isInfoEnabled()) {
+ log.info("Choice [" + choiceId + "] = " +
+ choice.getName() + " -- " +
+ choice.getDescription());
+ }
+ }
+ }
- private Map<Integer, Choice> reindexChoices(Map<Integer, Choice> result,
- int maxNumber) {
- Map<Integer, Choice> result2;
+ private <T> Map<Integer, T> reindexMap(Map<Integer, T> result, int maxNumber) {
+ Map<Integer, T> result2;
+
if (maxNumber != result.size() - 1) {
// means there is a hole inside the result (a empty choice was
@@ -599,7 +1054,7 @@
result2 = Maps.newTreeMap();
int i = 0;
for (Integer number : numbers) {
- Choice choice = result.get(number);
+ T choice = result.get(number);
result2.put(i++, choice);
}
} else {
@@ -636,4 +1091,17 @@
}
return result;
}
+
+ private static class StringStartWithPredicate implements Predicate<String> {
+ private final String prefix;
+
+ public StringStartWithPredicate(String prefix) {
+ this.prefix = prefix;
+ }
+
+ @Override
+ public boolean apply(String input) {
+ return input.startsWith(prefix);
+ }
+ }
}
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayPersonToList.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayPersonToList.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayPersonToList.java 2012-03-13 14:06:19 UTC (rev 3178)
@@ -0,0 +1,158 @@
+/*
+ * #%L
+ * Pollen :: UI (strust2)
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.ui.actions.poll;
+
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.chorem.pollen.business.persistence.PersonToList;
+import org.chorem.pollen.business.persistence.PersonToListImpl;
+import org.chorem.pollen.business.persistence.PollAccountImpl;
+import org.chorem.pollen.ui.actions.PollenActionSupport;
+
+import java.util.Map;
+
+/**
+ * To display a personToList (use at a poll creation).
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.2.6
+ */
+public class DisplayPersonToList extends PollenActionSupport {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String TOKEN = "personToList";
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(DisplayPersonToList.class);
+
+ public static String getPersonToListTokenId(String votingListTokenId,
+ int votingListNumber) {
+ return votingListTokenId + "_" + votingListNumber + TOKEN;
+ }
+
+ public static String getPersonToListErrorTokenId(String votingListTokenId,
+ int votingListNumber,
+ int personToListNumber) {
+ return getPersonToListErrorTokenId(getPersonToListTokenId(votingListTokenId, votingListNumber), personToListNumber);
+ }
+
+ public static String getPersonToListErrorTokenId(String personToListTokenId,
+ int personToListNumber) {
+ return personToListTokenId + "_error_" + personToListNumber;
+ }
+
+ /** Where to find dynamic data (says choices in this case). */
+ protected String tokenId;
+
+ /** Number of the vontingList container. */
+ protected int votingListNumber;
+
+ /** Number of person to display. */
+ protected int personToListNumber;
+
+ protected PersonToList personToList;
+
+ public String getTokenId() {
+ return tokenId;
+ }
+
+ public void setTokenId(String tokenId) {
+ this.tokenId = tokenId;
+ }
+
+ public int getVotingListNumber() {
+ return votingListNumber;
+ }
+
+ public void setVotingListNumber(int votingListNumber) {
+ this.votingListNumber = votingListNumber;
+ }
+
+ public int getPersonToListNumber() {
+ return personToListNumber;
+ }
+
+ public void setPersonToListNumber(int personToListNumber) {
+ this.personToListNumber = personToListNumber;
+ }
+
+ public PersonToList getPersonToList() {
+ return personToList;
+ }
+
+ @Override
+ public String execute() throws Exception {
+ if (StringUtils.isNotEmpty(tokenId)) {
+
+ Map<Integer, PersonToList> personToLists =
+ getPollenSession().getDynamicData(tokenId);
+
+ if (personToLists != null) {
+
+ // get choices from datas
+ personToList = personToLists.get(personToListNumber);
+
+ if (personToList != null) {
+
+ // remove this choice from session
+ personToLists.remove(personToListNumber);
+ }
+ }
+
+ if (MapUtils.isEmpty(personToLists)) {
+
+ // remove it from session
+ getPollenSession().removeDynamicData(tokenId);
+ }
+ }
+
+ if (personToList == null) {
+ personToList = new PersonToListImpl();
+ personToList.setWeight(1);
+ PollAccountImpl pollAccount = new PollAccountImpl();
+ personToList.setPollAccount(pollAccount);
+ }
+
+ // consume personToList errors
+ String token = getPersonToListErrorTokenId(tokenId, personToListNumber);
+ Map<String, String> errors = getPollenSession().getDynamicData(token);
+ if (MapUtils.isNotEmpty(errors)) {
+ // transmit them as field errors
+ for (Map.Entry<String, String> e : errors.entrySet()) {
+ String fieldName = e.getKey();
+ String errorMessage = e.getValue();
+ if (log.isInfoEnabled()) {
+ log.info("Transmit error on " + fieldName + " [" + errorMessage + "]");
+ }
+ addFieldError(fieldName, errorMessage);
+ }
+ }
+ getPollenSession().removeDynamicData(token);
+ return SUCCESS;
+ }
+
+}
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayPersonToList.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java 2012-03-13 14:06:19 UTC (rev 3178)
@@ -0,0 +1,150 @@
+/*
+ * #%L
+ * Pollen :: UI (strust2)
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+package org.chorem.pollen.ui.actions.poll;
+
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.chorem.pollen.business.persistence.VotingList;
+import org.chorem.pollen.business.persistence.VotingListImpl;
+import org.chorem.pollen.ui.actions.PollenActionSupport;
+
+import java.util.Map;
+
+/**
+ * To display a voting list of a poll (use at a poll creation).
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 1.2.6
+ */
+public class DisplayVotingList extends PollenActionSupport {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String VOTING_LIST_TOKEN = "votingList";
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(DisplayVotingList.class);
+
+ public static String getVotingListErrorTokenId(String votingListTokenId,
+ int votingListNumber) {
+ return votingListTokenId + "_" + votingListNumber + "_errors";
+ }
+
+ /** Where to find dynamic data (says choices in this case). */
+ protected String tokenId;
+
+ /** Number of person to display. */
+ protected int votingListNumber;
+
+ /** Count of personToList for this votingList. */
+ protected int nbPersonToLists;
+
+ /** The voting list ot display. */
+ protected VotingList votingList;
+
+ public String getPersonToListTokenId() {
+ return DisplayPersonToList.getPersonToListTokenId(tokenId, votingListNumber);
+ }
+
+ public int getNbPersonToLists() {
+ return nbPersonToLists;
+ }
+
+ public String getTokenId() {
+ return tokenId;
+ }
+
+ public void setTokenId(String tokenId) {
+ this.tokenId = tokenId;
+ }
+
+ public int getVotingListNumber() {
+ return votingListNumber;
+ }
+
+ public void setVotingListNumber(int votingListNumber) {
+ this.votingListNumber = votingListNumber;
+ }
+
+ public VotingList getVotingList() {
+ return votingList;
+ }
+
+ @Override
+ public String execute() throws Exception {
+ if (StringUtils.isNotEmpty(tokenId)) {
+
+ Map<Integer, VotingList> votingLists =
+ getPollenSession().getDynamicData(tokenId);
+
+ if (votingLists != null) {
+
+ // get choices from datas
+ votingList = votingLists.get(votingListNumber);
+
+ if (votingList != null) {
+
+ // remove this choice from session
+ votingLists.remove(votingListNumber);
+ }
+ }
+
+ if (MapUtils.isEmpty(votingLists)) {
+
+ // remove it from session
+ getPollenSession().removeDynamicData(tokenId);
+ }
+ }
+
+ if (votingList == null) {
+ votingList = new VotingListImpl();
+ votingList.setWeight(1);
+
+ //TODO tchemit use a default value from configuration
+ nbPersonToLists = 5;
+ } else {
+ nbPersonToLists = votingList.sizePollAccountPersonToList();
+ }
+ nbPersonToLists = Math.max(5, nbPersonToLists);
+
+ // consume votingList errors
+ String token = getVotingListErrorTokenId(tokenId, votingListNumber);
+ Map<String, String> errors = getPollenSession().getDynamicData(token);
+ if (MapUtils.isNotEmpty(errors)) {
+ // transmit them as field errors
+ for (Map.Entry<String, String> e : errors.entrySet()) {
+ String fieldName = e.getKey();
+ String errorMessage = e.getValue();
+ if (log.isInfoEnabled()) {
+ log.info("Transmit error on " + fieldName+" ["+errorMessage+"]");
+ }
+ addFieldError(fieldName, errorMessage);
+ }
+ }
+ getPollenSession().removeDynamicData(token);
+ return SUCCESS;
+ }
+}
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/config/struts-poll.xml 2012-03-13 14:06:19 UTC (rev 3178)
@@ -65,6 +65,18 @@
<result>/WEB-INF/jsp/poll/imageChoice.jsp</result>
</action>
+ <!-- display a votingList -->
+ <action name="displayVotingList"
+ class="org.chorem.pollen.ui.actions.poll.DisplayVotingList">
+ <result>/WEB-INF/jsp/poll/votingList.jsp</result>
+ </action>
+
+ <!-- display a personToList -->
+ <action name="displayPersonToList"
+ class="org.chorem.pollen.ui.actions.poll.DisplayPersonToList">
+ <result>/WEB-INF/jsp/poll/personToList.jsp</result>
+ </action>
+
<!-- edit poll -->
<action name="modification/*"
class="org.chorem.pollen.ui.actions.poll.EditPoll">
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_en_GB.properties 2012-03-13 14:06:19 UTC (rev 3178)
@@ -1,19 +1,7 @@
-poll.common.aboutPoll=About the poll
-poll.common.comments=Comments about this poll
-poll.common.myPolls=My polls
-poll.common.select.choiceType=Select the type of choice
-poll.common.select.userFavoriteList=List
-poll.common.vote.results=Results
-poll.common.vote.results-help=Display results
-poll.common.vote.return=Back to poll
-poll.common.vote.return-help=Back to poll
-poll.error.poll.detected.duplicate.choice.name=Choices must be unique.
-poll.error.poll.required.one.choice=You must provide at least one choice.
-poll.error.poll.required.title=You must provide a title for the poll
-poll.info.poll.created=Poll created
-poll.info.poll.updated=Poll modified
pollen.action.addChoice=Add choice
pollen.action.addComment=Add a comment
+pollen.action.addPersonToList=Add a voter
+pollen.action.addVotingList=Add a group
pollen.action.backToFavoriteLists=Back to favorite lists
pollen.action.create=Create
pollen.action.createFavoriteList=Create a new list
@@ -41,10 +29,14 @@
pollen.action.pollDelete=Delete the poll
pollen.action.pollEdit=Edit poll
pollen.action.pollExport=Export poll
+pollen.action.pollPersonToListDelete=Delete this voter
pollen.action.pollResult=Display poll results
pollen.action.pollVote=Vote
+pollen.action.pollVotingListDelete=Supprimer le groupe de votants
+pollen.action.pollVotingListEdit=Editer ce groupe de votants
pollen.action.register=Register
pollen.action.validate=Submit
+pollen.common.aboutPoll=About the poll
pollen.common.addingChoices=Adding choices
pollen.common.administrator=Admin
pollen.common.beginChoiceDate=Begin choice date
@@ -57,6 +49,7 @@
pollen.common.choice=Choice
pollen.common.commentName=Name
pollen.common.commentText=Comment
+pollen.common.comments=Comments about this poll
pollen.common.csvImport=CSV import
pollen.common.description=Description
pollen.common.displayType-group=Results by groups
@@ -72,6 +65,7 @@
pollen.common.ldapImport=LDAP import
pollen.common.license=Licence
pollen.common.login=Login
+pollen.common.myPolls=My polls
pollen.common.name=Name
pollen.common.nbAccounts=Number of members
pollen.common.newPassword=New password
@@ -80,6 +74,7 @@
pollen.common.or=or
pollen.common.password=Password
pollen.common.password2=Renter your password
+pollen.common.personToList=Voter
pollen.common.pollCreator=Creator
pollen.common.pollOption.anonymous=Anonymous
pollen.common.pollOption.anonymousVoteAllowed=Anonymous vote allowed
@@ -95,10 +90,16 @@
pollen.common.pollType=Who can vote ?
pollen.common.postDate=Comment date
pollen.common.results=Results\:
+pollen.common.select.choiceType=Select the type of choice
+pollen.common.select.userFavoriteList=List
pollen.common.title=Title
pollen.common.userSupport=User support
pollen.common.victories=Winners\:
pollen.common.victory=Winner\:
+pollen.common.vote.results=Results
+pollen.common.vote.results-help=Display results
+pollen.common.vote.return=Back to poll
+pollen.common.vote.return-help=Back to poll
pollen.common.voteAction=Vote
pollen.common.voteCounting-label=Vote Counting\:
pollen.common.voteCountingType=Response type
@@ -107,7 +108,10 @@
pollen.common.voteCountingTypeHelp.number=Voting by number\: The answer is free, leave blank or enter a integer.
pollen.common.voteCountingTypeHelp.percentage=Percentage vote\: allocate choices to get a 100%% total.
pollen.common.voteNbVotes=%d existing votes
+pollen.common.votePerson=Voter
pollen.common.voterName=Votant
+pollen.common.votingList=Group
+pollen.common.weight=Weight
pollen.error.accountNotFound=
pollen.error.comment.name.empty=Comment name mandatory
pollen.error.comment.text.empty=Comment text mandatory
@@ -123,12 +127,25 @@
pollen.error.password.required=Your must provide a password
pollen.error.password2.required=You must repeat your password for confirmation
pollen.error.passwords.not.equals=Les deux mots de passe saisis non identiques
+pollen.error.poll.detected.duplicate.choice.name=Choices must be unique.
pollen.error.poll.notfound=No such poll exists. Please make sure that you are using the correct link and copy it completely into your browser's address field.
+pollen.error.poll.personToList.email.doublon=
+pollen.error.poll.personToList.email.not.valid=
+pollen.error.poll.personToList.email.required=
+pollen.error.poll.personToList.votingId.doublon=
+pollen.error.poll.personToList.weight.not.valid=
+pollen.error.poll.required.one.choice=You must provide at least one choice.
+pollen.error.poll.required.one.personToList=
+pollen.error.poll.required.title=You must provide a title for the poll
+pollen.error.poll.required.votingList.name=
+pollen.error.poll.votingList.name.doublon=
+pollen.error.poll.votingList.weight.not.valid=
pollen.error.pollAccount.email.required=Em@il mandatory
pollen.error.pollAccount.not.found=Poll account not found
pollen.error.pollAccount.votingId.required=Name mandatory
pollen.error.pollNotClosed=The poll is not closed. Results may change.
pollen.error.pollNotFound=The poll you want to count does not exist.
+pollen.error.pollTabErrorFound=Some errors were found on this tab, please fix them to finalize the poll creation.
pollen.error.user.alreadyVoted=Someone has already used the name %s to vote.
pollen.error.user.bad.login.or.password=Login or password invalid.
pollen.error.user.email.already.used=This email is already used
@@ -152,6 +169,8 @@
pollen.fieldset.userInformation.toCreate=User informations to create
pollen.fieldset.userInformation.toDelete=User informations to delete
pollen.fieldset.userInformation.toUpdate=User informations to update
+pollen.info.poll.created=Poll created
+pollen.info.poll.updated=Poll modified
pollen.information.confirmDeleteChoice=Confirm delete of choice %s
pollen.information.confirmDeleteVote=Confirm delete of vote for %s
pollen.information.favoriteList.created=Favorite list %s created.
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/resources/i18n/pollen-ui-struts2_fr_FR.properties 2012-03-13 14:06:19 UTC (rev 3178)
@@ -1,19 +1,7 @@
-poll.common.aboutPoll=A propos du sondage
-poll.common.comments=Commentaire à propos du sondage
-poll.common.myPolls=Mes sondages
-poll.common.select.choiceType=Sélectionner le type de choix
-poll.common.select.userFavoriteList=Liste
-poll.common.vote.results=Résultats
-poll.common.vote.results-help=Voir les résultats
-poll.common.vote.return=Retour au sondage
-poll.common.vote.return-help=Retour au sondage
-poll.error.poll.detected.duplicate.choice.name=Les choix doivent être uniques.
-poll.error.poll.required.one.choice=Vous devez saisir au moins un choix.
-poll.error.poll.required.title=Vous devez fournir un titre pour le sondage
-poll.info.poll.created=Sondage créé
-poll.info.poll.updated=Sondage mise à jour
pollen.action.addChoice=Ajouter un choix
pollen.action.addComment=Ajouter un commentaire
+pollen.action.addPersonToList=Ajouter un votant
+pollen.action.addVotingList=Ajouter un groupe
pollen.action.backToFavoriteLists=Retour à la liste des favoris
pollen.action.create=Créer
pollen.action.createFavoriteList=Créer une ouvelle liste
@@ -41,10 +29,14 @@
pollen.action.pollDelete=Supprimer le sondage
pollen.action.pollEdit=Editer le sondage
pollen.action.pollExport=Exporter le sondage
+pollen.action.pollPersonToListDelete=Supprimer ce votant
pollen.action.pollResult=Afficher les résultats du sondage
pollen.action.pollVote=Voter
+pollen.action.pollVotingListDelete=Supprimer le groupe de votants
+pollen.action.pollVotingListEdit=Editer ce groupe de votants
pollen.action.register=S'enregistrer
pollen.action.validate=Valider
+pollen.common.aboutPoll=A propos du sondage
pollen.common.addingChoices=Ajout des choix
pollen.common.administrator=Admin
pollen.common.beginChoiceDate=Date de début des choix
@@ -57,6 +49,7 @@
pollen.common.choice=Choix
pollen.common.commentName=Nom
pollen.common.commentText=Commentaire
+pollen.common.comments=Commentaire à propos du sondage
pollen.common.csvImport=Import CSV
pollen.common.description=Description
pollen.common.displayType-group=Résultats par groupes
@@ -72,6 +65,7 @@
pollen.common.ldapImport=Import LDAP
pollen.common.license=Licence
pollen.common.login=Identifiant
+pollen.common.myPolls=Mes sondages
pollen.common.name=Nom
pollen.common.nbAccounts=Nombre de membres
pollen.common.nbVotes=%d votes ont été enregistrés
@@ -81,6 +75,7 @@
pollen.common.or=ou
pollen.common.password=Mot de passe
pollen.common.password2=Répétez votre mot de passe
+pollen.common.personToList=Votant
pollen.common.pollCreator=Créateur
pollen.common.pollOption.anonymous=Sondage anonyme
pollen.common.pollOption.anonymousVoteAllowed=Autoriser le vote anonyme
@@ -96,10 +91,16 @@
pollen.common.pollType=Qui peut voter ?
pollen.common.postDate=Date du commentaire
pollen.common.results=Résultats \:
+pollen.common.select.choiceType=Sélectionner le type de choix
+pollen.common.select.userFavoriteList=Liste
pollen.common.title=Titre
pollen.common.userSupport=Support utilisateur
pollen.common.victories=Gagnants \:
pollen.common.victory=Gagnant \:
+pollen.common.vote.results=Résultats
+pollen.common.vote.results-help=Voir les résultats
+pollen.common.vote.return=Retour au sondage
+pollen.common.vote.return-help=Retour au sondage
pollen.common.voteAction=Vote
pollen.common.voteCountingType=Type de Réponse
pollen.common.voteCountingTypeHelp.condorcet=Vote Condorcet \: classer les choix par ordre de préférence de 1 à N (1\=préféré). Seul l'ordre des choix compte, peu importe les valeurs. Deux choix peuvent avoir la même valeur.
@@ -107,7 +108,10 @@
pollen.common.voteCountingTypeHelp.number=Vote par nombre \: La réponse est libre, laissez vide ou entrez un nombre entier
pollen.common.voteCountingTypeHelp.percentage=Vote par pourcentage \: répartir les choix de manière à obtenir 100%% au total.
pollen.common.voteNbVotes=%d votes existants
+pollen.common.votePerson=Votant
pollen.common.voterName=Votant
+pollen.common.votingList=Groupe
+pollen.common.weight=Poids
pollen.common.x=Dépouillement
pollen.error.accountNotFound=
pollen.error.comment.name.empty=Nom du commentaire obligatoire
@@ -124,12 +128,25 @@
pollen.error.password.required=Mot de passe obligatoire
pollen.error.password2.required=Mot de passe répété obligatoire
pollen.error.passwords.not.equals=Les deux mots de passe saisis non identiques
+pollen.error.poll.detected.duplicate.choice.name=Les choix doivent être uniques.
pollen.error.poll.notfound=Il n'y a pas de sondage à cette adresse. Veuillez verifier que vous utilisez le lien correcte et copiez-le complètement dans le champ d'adresse de votre navigateur.
+pollen.error.poll.personToList.email.doublon=Les emails doivent être uniques.
+pollen.error.poll.personToList.email.not.valid=Email non valide
+pollen.error.poll.personToList.email.required=Email obligatoire
+pollen.error.poll.personToList.votingId.doublon=Les noms des votants doivent être uniques.
+pollen.error.poll.personToList.weight.not.valid=Poids du votant non valide (doit être une nombre supérieur à 0).
+pollen.error.poll.required.one.choice=Vous devez saisir au moins un choix.
+pollen.error.poll.required.one.personToList=Aucun votant renseigné
+pollen.error.poll.required.title=Vous devez fournir un titre pour le sondage
+pollen.error.poll.required.votingList.name=nom du groupe non renseigné
+pollen.error.poll.votingList.name.doublon=Les noms de groupes doivent être uniques.
+pollen.error.poll.votingList.weight.not.valid=Poids du groupe votant non valide (doit être une nombre supérieur à 0).
pollen.error.pollAccount.email.required=Em@il obliqatoire
pollen.error.pollAccount.not.found=Membre non trouvé
pollen.error.pollAccount.votingId.required=Nom obliqatoire
pollen.error.pollNotClosed=Ce sondage n'est pas clos. Les résultats peuvent encore changer.
pollen.error.pollNotFound=Le sondage que vous voulez dépouiller n'existe pas.
+pollen.error.pollTabErrorFound=Des erreurs ont été detectées dans cet onglet, veuillez les corriger pour valider la création du sondage.
pollen.error.user.alreadyVoted=Une personne a déjà voté sous le nom %s.
pollen.error.user.bad.login.or.password=Mauvais identifiant ou mot de passe.
pollen.error.user.email.already.used=Le courriel saisi est déjà utilisé par un autre utilisateur
@@ -153,6 +170,8 @@
pollen.fieldset.userInformation.toCreate=Informations de l'utilisateur à créer
pollen.fieldset.userInformation.toDelete=Informations de l'utilisateur à supprimer
pollen.fieldset.userInformation.toUpdate=Informations de l'utilisateur à mettre à jour
+pollen.info.poll.created=Sondage créé
+pollen.info.poll.updated=Sondage mise à jour
pollen.information.confirmDeletePollChoice=Confirmer la suppression du chois %s
pollen.information.confirmDeletePollVote=Confirmer la suppression du vote de %s
pollen.information.favoriteList.created=La liste %s a été créée.
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/create.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -28,7 +28,10 @@
href="<s:url value='/css/pollCreation.css'/>"/>
<%@include file="/WEB-INF/jsp/choiceHelper.jsp" %>
+<%@include file="/WEB-INF/jsp/votingListHelper.jsp" %>
+<s:url id='errorImg' value='/img/exclamation.png'/>
+
<script type="text/javascript">
jQuery(document).ready(function () {
@@ -77,10 +80,55 @@
$('[name="poll.choiceType"][value="' + type + '"]').attr('checked', 'checked');
}
+ function changePollType(type, loading) {
+
+ if (!loading) {
+
+ // remove extra votingLists
+ var containerId = "votingLists";
+ var lastVotingList = getLastVotingList(containerId);
+ while (lastVotingList > -1) {
+ deleteVotingList(containerId + "_" + lastVotingList);
+ lastVotingList -= 1;
+ }
+ }
+
+ if (type == 'FREE') {
+
+ // hide everything
+ $('.restrictedPoll').addClass("hidden");
+ $('.groupPoll').addClass("hidden");
+
+ } else if (type == 'RESTRICTED') {
+
+ if (!loading) {
+ addNewVotingList(containerId);
+ }
+
+ // show restricted sutff
+ $('.restrictedPoll').removeClass("hidden");
+ // remove all group stuff
+ $('.groupPoll').addClass("hidden");
+
+ } else if (type == 'GROUP') {
+
+ if (!loading) {
+ addNewVotingList(containerId);
+ }
+
+ $('.restrictedPoll').removeClass("hidden");
+ $('.groupPoll').removeClass("hidden");
+ }
+ }
+
$('[name="poll.choiceType"]').change(function (event) {
changeChoiceType($(this).val());
});
- $('[name="poll.pollType"][value="<s:property value="%{poll.pollType.name()}"/>"]').attr('checked', 'checked');
+
+ $('[name="poll.pollType"]').change(function (event) {
+ changePollType($(this).val(), false);
+ });
+
$('[name="poll.voteCountingType"][value="<s:property value="%{poll.voteCountingType.name()}"/>"]').attr('checked', 'checked');
changeChoiceType('<s:property value="%{poll.choiceType.name()}"/>');
@@ -102,6 +150,13 @@
<s:iterator begin="1" end="nbImageChoices" status="status">
addImageChoice(<s:property value='%{#status.index}'/>, <s:property value="nbImageChoices - 1"/>, '<s:property value="imageChoiceTokenId" />');
</s:iterator>
+
+ // votingLists loading
+ <s:iterator begin="1" end="nbVotingLists" status="status">
+ addVotingList(<s:property value='%{#status.index}'/>, <s:property value="nbVotingLists - 1"/>, '<s:property value="votingListTokenId" />');
+ </s:iterator>
+
+ changePollType('<s:property value="%{poll.pollType.name()}"/>', true);
});
</script>
<title><s:text name="pollen.title.createPoll"/></title>
@@ -111,7 +166,7 @@
<s:form method="POST" id="registerForm" namespace="/poll"
enctype="multipart/form-data">
- <sj:tabbedpanel id="formTabs">
+ <sj:tabbedpanel id="formTabs" selectedTab="%{selectedTab}">
<sj:tab id="tabGeneral" target="tgeneral" key="pollen.tab.poll.general"/>
<sj:tab id="tabOptions" target="toptions" key="pollen.tab.poll.options"/>
@@ -134,24 +189,28 @@
<legend><s:text name="pollen.common.voteCountingType"/></legend>
<s:radio key='poll.voteCountingType' list="voteCountingTypes"
label='' theme="simple"/>
-
</fieldset>
<br/>
<fieldset>
<legend><s:text name="pollen.fieldset.poll.choices"/></legend>
- <s:radio key='poll.choiceType' list="choiceTypes"
- label='' theme="simple"/>
+ <s:radio key='poll.choiceType' list="choiceTypes" label=''
+ theme="simple"/>
<hr/>
<s:fielderror fieldName="poll.choices"/>
- <div id="choicesTEXT" class="choices"></div>
- <div id="choicesDATE" class="choices"></div>
- <div id="choicesIMAGE" class="choices"></div>
+ <div id="choicesTEXT" class="choices">
+ <%--Where to load text choices --%>
+ </div>
+ <div id="choicesDATE" class="choices">
+ <%--Where to load date choices --%>
+ </div>
+ <div id="choicesIMAGE" class="choices">
+ <%--Where to load image choices --%>
+ </div>
<hr/>
<s:submit key="pollen.action.addChoice" align="center"
onclick="return addNewChoice();"/>
-
</fieldset>
</div>
@@ -204,30 +263,62 @@
<s:textfield key="reminderHourCountdown"
label="%{getText('pollen.common.pollOption.reminderHourCountdown')}"/>
</div>
-
</fieldset>
<br/>
-
<fieldset>
<legend><s:text name="pollen.fieldset.poll.general"/></legend>
- <sj:datepicker key="poll.beginDate"
- label="%{getText('pollen.common.beginDate')}"
- displayFormat="dd/mm/yy"/>
- <sj:datepicker key="poll.endDate"
- label="%{getText('pollen.common.endDate')}"
- displayFormat="dd/mm/yy"/>
+ <sj:datepicker key="poll.beginDate" displayFormat="dd/mm/yy"
+ label="%{getText('pollen.common.beginDate')}"/>
+ <sj:datepicker key="poll.endDate" displayFormat="dd/mm/yy"
+ label="%{getText('pollen.common.endDate')}"/>
+ </fieldset>
+
+ <br/>
+ <fieldset>
+ <legend><s:text name="pollen.common.pollType"/></legend>
<s:radio key='poll.pollType' list="pollTypes"
label='%{getText("pollen.common.pollType")}'/>
-
+ <hr/>
+ <div class="restrictedPoll">
+ <div id="votingLists">
+ <%--Where to load voting lists --%>
+ </div>
+ <div class="groupPoll">
+ <s:submit key="pollen.action.addVotingList" align="center"
+ onclick="return addNewVotingList();"/>
+ </div>
+ </div>
</fieldset>
-
</div>
</sj:tabbedpanel>
-
<br/>
<s:submit action="create" key="pollen.action.createPoll" align="center"/>
-</s:form>
\ No newline at end of file
+</s:form>
+
+<script type="text/javascript">
+
+ jQuery(document).ready(function () {
+
+ function addErrorImage(element) {
+ element.append(
+ '<image src="${errorImg}">'
+ );
+ element.attr('title',
+ '<s:text name="pollen.error.pollTabErrorFound"/>');
+ }
+
+ if (<s:property value="%{informationsError}"/>) {
+ var tab = $('#tabGeneral a');
+ addErrorImage(tab);
+ }
+ if (<s:property value="%{optionsError}"/>) {
+ tab = $('#tabOptions a');
+ addErrorImage(tab);
+ }
+
+ });
+</script>
\ No newline at end of file
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/dateChoice.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/dateChoice.jsp 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/dateChoice.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -46,7 +46,7 @@
key="%{#prefix}.description" label='' theme="simple"
value="%{choice.description}"/>
</div>
- <span>
+ <div class="fright">
<s:a href='#' onclick="return deleteChoice('choicesDATE_%{choiceNumber}')">
<image alt='<s:property value="deleteTitle"/>'
title='<s:property value="deleteTitle"/>'
@@ -65,6 +65,6 @@
title='<s:property value="upTitle"/>'
src="<s:url value='/img/1uparrow.png'/>"></image>
</s:a--%>
- </span>
+ </div>
<div class="cleanBoth"></div>
</div>
\ No newline at end of file
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/imageChoice.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/imageChoice.jsp 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/imageChoice.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -55,11 +55,10 @@
theme="simple"/>
</div>
<div class="fleft">
- <s:textarea cols="30" id="%{#prefix}.description"
- key="%{#prefix}.description"
- label='' theme="simple" value="%{choice.description}"/>
+ <s:textarea cols="30" id="%{#prefix}.description" label='' theme="simple"
+ key="%{#prefix}.description" value="%{choice.description}"/>
</div>
- <span>
+ <div class="fright">
<s:a href='#' onclick="return deleteChoice('choicesIMAGE_%{choiceNumber}')">
<image alt='<s:property value="deleteTitle"/>'
title='<s:property value="deleteTitle"/>'
@@ -78,7 +77,7 @@
title='<s:property value="upTitle"/>'
src="<s:url value='/img/1uparrow.png'/>"></image>
</s:a--%>
- </span>
+ </div>
<div class="cleanBoth"></div>
</div>
\ No newline at end of file
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -0,0 +1,61 @@
+<%--
+ #%L
+ Pollen :: UI (strust2)
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ --%>
+<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<s:set name="prefix">personToList_<s:property
+ value="votingListNumber"/>_<s:property value="personToListNumber"/>
+</s:set>
+<s:set id='deleteTitle'>
+ <s:text name="pollen.action.pollPersonToListDelete"/>
+</s:set>
+<s:div id='%{#prefix}'>
+ <s:fielderror/>
+ <s:hidden key='%{#prefix}.topiaId' value='%{personToList.topiaId}' label=''/>
+ <div class="fleft choiceName">
+ <s:label for="%{#prefix}.votingId" id="%{#prefix}_label" theme="simple"
+ value=''/>
+ <s:textfield cssClass="nameField" id='%{#prefix}.votingId'
+ key="%{#prefix}.votingId" label='' theme="simple"
+ value="%{personToList.pollAccount.votingId}"/>
+ -
+ <s:label for="%{#prefix}.email" key="pollen.common.email" theme="simple"/>
+ <s:textfield cols="30" id="%{#prefix}.email" key="%{#prefix}.email"
+ label='' theme="simple"
+ value="%{personToList.pollAccount.email}"/>
+ -
+ <s:label for="%{#prefix}.weight" key="pollen.common.weight" theme="simple"/>
+ <s:textfield id="%{#prefix}.weight" key="%{#prefix}.weight" size="1"
+ label='' theme="simple" value="%{personToList.weight}"/>
+ </div>
+ <div class="fright">
+ <s:a href='#' onclick="return deletePersonToList('%{#prefix}')">
+ <image alt='<s:property value="deleteTitle"/>'
+ title='<s:property value="deleteTitle"/>'
+ src="<s:url value='/img/delete.png'/>"></image>
+ </s:a>
+ </div>
+
+ <div class="cleanBoth"></div>
+</s:div>
\ No newline at end of file
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/personToList.jsp
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/result.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/result.jsp 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/result.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -69,12 +69,12 @@
<div id="resultTop">
<s:property value="poll.description"/>
<fieldset>
- <legend><s:text name="poll.common.aboutPoll"/></legend>
+ <legend><s:text name="pollen.common.aboutPoll"/></legend>
<div style="float: right">
<s:a namespace="/poll" action="votefor/%{uriId}">
<img src="<s:url value='/img/vote.png'/>"
- title="<s:text name="poll.common.vote.return-help"/>"
- alt="<s:text name="poll.common.vote.return"/>"/>
+ title="<s:text name="pollen.common.vote.return-help"/>"
+ alt="<s:text name="pollen.common.vote.return"/>"/>
</s:a>
</div>
<s:label value="%{poll.creator.votingId}"
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/resume.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/resume.jsp 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/resume.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -53,6 +53,6 @@
<div style="margin-top: 30px;">
<s:text name="pollen.label.pollRegisterPage"/>
<s:a namespace="/user" action="myPolls">
- <s:text name="poll.common.myPolls"/>
+ <s:text name="pollen.common.myPolls"/>
</s:a>.
</div>
\ No newline at end of file
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/textChoice.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/textChoice.jsp 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/textChoice.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -38,13 +38,12 @@
-
<s:label for="%{#prefix}.description" key="pollen.common.description"
theme="simple"/>
+ <%--/div>
+ <div class="fleft"--%>
+ <s:textarea cols="30" id="%{#prefix}.description" label='' theme="simple"
+ key="%{#prefix}.description" value="%{choice.description}"/>
</div>
- <div class="fleft">
- <s:textarea cols="30" id="%{#prefix}.description"
- key="%{#prefix}.description"
- label='' theme="simple" value="%{choice.description}"/>
- </div>
- <span>
+ <div class="fright">
<s:a href='#' onclick="return deleteChoice('choicesTEXT_%{choiceNumber}')">
<image alt='<s:property value="deleteTitle"/>'
title='<s:property value="deleteTitle"/>'
@@ -63,6 +62,6 @@
title='<s:property value="upTitle"/>'
src="<s:url value='/img/1uparrow.png'/>"></image>
</s:a--%>
- </span>
+ </div>
<div class="cleanBoth"></div>
</div>
\ No newline at end of file
Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/vote.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/vote.jsp 2012-03-13 14:01:33 UTC (rev 3177)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/vote.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -101,14 +101,14 @@
<s:property value="poll.description"/>
</div>
<fieldset>
- <legend><s:text name="poll.common.aboutPoll"/></legend>
+ <legend><s:text name="pollen.common.aboutPoll"/></legend>
<div style="float: right">
<s:if test="poll.publicResults">
<s:a namespace="/poll" action="results/%{uriId}">
<img src="<s:url value='/img/count.png'/>"
- title="<s:text name="poll.common.vote.results-help"/>"
- alt="<s:text name="poll.common.vote.results"/>"/>
+ title="<s:text name="pollen.common.vote.results-help"/>"
+ alt="<s:text name="pollen.common.vote.results"/>"/>
</s:a>
</s:if>
<%--<t:FeedContextLink t:id="feedContext"/>--%>
@@ -382,7 +382,7 @@
<tr>
<td>
<s:a namespace="/poll" action="results/%{poll.pollId}">
- <s:text name="poll.common.vote.results"/>
+ <s:text name="pollen.common.vote.results"/>
</s:a>
</td>
@@ -416,7 +416,7 @@
</div>
<!-- Ajout de commentaires -->
-<h3><s:text name="poll.common.comments"/></h3>
+<h3><s:text name="pollen.common.comments"/></h3>
<div id="commentZone">
<div id="commentsDiv">
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -0,0 +1,87 @@
+<%--
+ #%L
+ Pollen :: UI (strust2)
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ --%>
+<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<s:set name="prefix">votingList_<s:property value="votingListNumber"/></s:set>
+<s:set id='deleteTitle'>
+ <s:text name="pollen.action.pollVotingListDelete"/>
+</s:set>
+<s:set id='editTitle'>
+ <s:text name="pollen.action.pollVotingListEdit"/>
+</s:set>
+
+<script type="text/javascript">
+ jQuery(document).ready(function () {
+ // personToList loading
+ <s:iterator begin="1" end="nbPersonToLists" status="status">
+ addPersonToList(<s:property value="votingListNumber"/>, <s:property value='%{#status.index}'/>, <s:property value="nbPersonToLists - 1"/>, '<s:property value="personToListTokenId" />');
+ </s:iterator>
+ });
+</script>
+<s:div id='votingLists_%{votingListNumber}'>
+ <fieldset class="ui-widget-content ui-corner-all">
+
+ <s:fielderror/>
+ <div class="groupPoll">
+ <div class="fleft choiceName">
+ <s:label for="%{#prefix}.name" theme="simple"
+ id="votingLists_%{votingListNumber}_label"/>
+ <s:textfield id='%{#prefix}.name' key="%{#prefix}.name" label=''
+ theme="simple" value="%{votingList.name}"/>
+ -
+ <s:label for="%{#prefix}.weight" key="pollen.common.weight"
+ theme="simple"/>
+ <s:textfield id="%{#prefix}.weight" key="%{#prefix}.weight" value="%{votingList.weight}"
+ size="1" label='' theme="simple"/>
+ </div>
+ <div id='<s:property value="%{#prefix}"/>_actions' class="fright">
+ <s:a href='#' onclick="return editVotingList('%{prefix}')">
+ <image alt='<s:property value="editTitle"/>'
+ title='<s:property value="editTitle"/>'
+ src="<s:url value='/img/edit.png'/>"></image>
+ </s:a>
+ <s:a href='#'
+ onclick="return deleteVotingList('votingLists_%{votingListNumber}')">
+ <image alt='<s:property value="deleteTitle"/>'
+ title='<s:property value="deleteTitle"/>'
+ src="<s:url value='/img/delete.png'/>"></image>
+ </s:a>
+ </div>
+ <hr/>
+ </div>
+ <div class="cleanBoth"></div>
+ <s:hidden key='%{#prefix}.topiaId' value='%{votingList.topiaId}' label=''/>
+
+ <s:div id='personToList_%{votingListNumber}'>
+ <%--Where to load personToList--%>
+ </s:div>
+ <hr/>
+ <div class="cleanBoth"></div>
+ <s:submit id='%{#prefix}_addPersonToList' name='%{#prefix}_addPersonToList'
+ key="pollen.action.addPersonToList" align="center"
+ onclick='return addNewPersonToList("%{votingListNumber}");'/>
+ </fieldset>
+ <br/>
+</s:div>
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/poll/votingList.jsp
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp (rev 0)
+++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp 2012-03-13 14:06:19 UTC (rev 3178)
@@ -0,0 +1,192 @@
+<%--
+ #%L
+ Pollen :: UI (strust2)
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ --%>
+<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
+
+<script type="text/javascript">
+
+ var votingListText = '<s:text name="pollen.common.votingList"/>';
+ var personToListText = '<s:text name="pollen.common.personToList"/>';
+
+ function getFirstVotingList(containerId) {
+ var result = 65535;
+ getAllVotingLists(containerId).each(function () {
+ var current = $(this).data('votingListNumber');
+ if (current < result) {
+ result = current;
+ }
+ });
+ return result;
+ }
+
+ function getLastVotingList(containerId) {
+ var result = 0;
+ getAllVotingLists(containerId).each(function () {
+ var current = $(this).data('votingListNumber');
+ if (current > result) {
+ result = current;
+ }
+ });
+ return result;
+ }
+
+ function getAllVotingLists(containerId) {
+ return $("div[id^='" + containerId + "_']");
+ }
+
+ function updateUpdownVotingListActions(containerId) {
+ getAllVotingLists(containerId).each(function (index) {
+ var currentVotingListNumber = $(this).data('votingListNumber');
+ var labelWidget = $('#' + containerId + "_" + currentVotingListNumber + "_label");
+ labelWidget.html(votingListText + ' ' + (index + 1));
+ });
+ }
+
+ function loadVotingList(containerId, votingListNumber, nbVotingLists, tokenId) {
+ if (votingListNumber == -1) {
+ // to add a new votingList, get the new available votingListNumber
+ votingListNumber = 1 + getLastVotingList(containerId);
+ }
+ $.ajax(
+ {
+ url:'<s:url namespace="/poll" action="displayVotingList"/>',
+ data:{ tokenId:tokenId, votingListNumber:votingListNumber },
+ async:false,
+ dataType:"html",
+ success:function (data, textStatus) {
+ var container = $("#" + containerId);
+ container.append(data);
+ // store votingListNumber
+ var votingList = $("#" + containerId + "_" + votingListNumber);
+ votingList.data('votingListNumber', votingListNumber);
+ votingList.data('votingListContainerId', containerId);
+ if (votingListNumber == nbVotingLists || !tokenId) {
+ updateUpdownVotingListActions(containerId);
+ }
+ }
+ });
+ }
+
+ function addVotingList(votingListNumber, nbVotingLists, tokenId) {
+ loadVotingList('votingLists', votingListNumber, nbVotingLists, tokenId);
+ }
+
+ function addNewVotingList() {
+ addVotingList(-1, -1);
+ return false;
+ }
+
+ function deleteVotingList(votingListId) {
+ var votingList = $('#' + votingListId);
+ var containerId = votingList.data('votingListContainerId');
+ votingList.remove();
+ updateUpdownVotingListActions(containerId);
+ return false;
+ }
+
+ function getFirstPersonToList(containerId) {
+ var result = 65535;
+ getAllPersonToLists(containerId).each(function () {
+ var current = $(this).data('personToListNumber');
+ if (current < result) {
+ result = current;
+ }
+ });
+ return result;
+ }
+
+ function getLastPersonToList(containerId) {
+ var result = 0;
+ getAllPersonToLists(containerId).each(function () {
+ var current = $(this).data('personToListNumber');
+ if (current > result) {
+ result = current;
+ }
+ });
+ return result;
+ }
+
+ function getAllPersonToLists(containerId) {
+ return $("div[id^='" + containerId + "_']");
+ }
+
+ function updateUpdownPersonToListActions(containerId) {
+ getAllPersonToLists(containerId).each(function (index) {
+ var currentPersonToListNumber = $(this).data('personToListNumber');
+ var labelWidget = $('#' + containerId + "_" + currentPersonToListNumber + "_label");
+ labelWidget.html(personToListText + ' ' + (index + 1));
+ });
+ }
+
+ function loadPerson(containerId, votingListNumber, personToListNumber, nbPersonToLists, tokenId) {
+ if (personToListNumber == -1) {
+ // to add a new personToList, get the new available personToListNumber
+ personToListNumber = 1 + getLastPersonToList(containerId);
+ }
+ $.ajax(
+ {
+ url:'<s:url namespace="/poll" action="displayPersonToList"/>',
+ data:{
+ tokenId:tokenId,
+ votingListNumber:votingListNumber,
+ personToListNumber:personToListNumber
+ },
+ async:false,
+ dataType:"html",
+ success:function (data, textStatus) {
+ var container = $("#" + containerId);
+ container.append(data);
+ // store personToListNumber
+ var personToList = $("#" + containerId + "_" + personToListNumber);
+ personToList.data('votingListNumber', votingListNumber);
+ personToList.data('personToListNumber', personToListNumber);
+ personToList.data('personToListContainerId', containerId);
+ if (personToListNumber == nbPersonToLists || !tokenId) {
+ updateUpdownPersonToListActions(containerId);
+ }
+ }
+ });
+ }
+
+ function addPersonToList(votingListNumber, personToListNumber, nbPersonToLists, tokenId) {
+ loadPerson(
+ 'personToList_' + votingListNumber,
+ votingListNumber, personToListNumber, nbPersonToLists, tokenId
+ );
+ }
+
+ function addNewPersonToList(votingListNumber) {
+ addPersonToList(votingListNumber, -1, -1);
+ return false;
+ }
+
+ function deletePersonToList(personToListId) {
+ var personToList = $('#' + personToListId);
+ var containerId = personToList.data('personToListContainerId');
+ personToList.remove();
+ updateUpdownPersonToListActions(containerId);
+ return false;
+ }
+</script>
\ No newline at end of file
Property changes on: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/webapp/WEB-INF/jsp/votingListHelper.jsp
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
1
0
r3177 - branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence
by tchemit@users.chorem.org 13 Mar '12
by tchemit@users.chorem.org 13 Mar '12
13 Mar '12
Author: tchemit
Date: 2012-03-13 15:01:33 +0100 (Tue, 13 Mar 2012)
New Revision: 3177
Url: http://chorem.org/repositories/revision/pollen/3177
Log:
add svn properties and header
Modified:
branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java
Modified: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java
===================================================================
--- branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java 2012-03-13 14:01:09 UTC (rev 3176)
+++ branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java 2012-03-13 14:01:33 UTC (rev 3177)
@@ -1,3 +1,26 @@
+/*
+ * #%L
+ * Pollen :: Persistence
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2009 - 2012 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
package org.chorem.pollen.business.persistence;
import com.google.common.base.Preconditions;
Property changes on: branches/pollen-1.2.6-struts2/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/PollImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
1
0
Author: tchemit
Date: 2012-03-13 15:01:09 +0100 (Tue, 13 Mar 2012)
New Revision: 3176
Url: http://chorem.org/repositories/revision/pollen/3176
Log:
use last stable version of nuiton-web
Modified:
branches/pollen-1.2.6-struts2/pom.xml
Modified: branches/pollen-1.2.6-struts2/pom.xml
===================================================================
--- branches/pollen-1.2.6-struts2/pom.xml 2012-03-13 13:59:45 UTC (rev 3175)
+++ branches/pollen-1.2.6-struts2/pom.xml 2012-03-13 14:01:09 UTC (rev 3176)
@@ -439,7 +439,7 @@
<eugenePluginVersion>2.4.2</eugenePluginVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
<tapestryVersion>5.1.0.5</tapestryVersion>
- <nuitonWebVersion>1.9.2</nuitonWebVersion>
+ <nuitonWebVersion>1.10</nuitonWebVersion>
<nuitonUtilsVersion>2.4.4</nuitonUtilsVersion>
<h2Version>1.3.164</h2Version>
<postgresqlVersion>9.1-901-1.jdbc4</postgresqlVersion>
1
0