Java tutorial
/* * Copyright (c) 2002-2014, Mairie de Paris * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright notice * and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice * and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * License 1.0 */ package fr.paris.lutece.plugins.form.web; import com.keypoint.PngEncoder; import fr.paris.lutece.plugins.form.business.DefaultMessage; import fr.paris.lutece.plugins.form.business.DefaultMessageHome; import fr.paris.lutece.plugins.form.business.Entry; import fr.paris.lutece.plugins.form.business.EntryFilter; import fr.paris.lutece.plugins.form.business.EntryHome; import fr.paris.lutece.plugins.form.business.EntryType; import fr.paris.lutece.plugins.form.business.EntryTypeHome; import fr.paris.lutece.plugins.form.business.ExportFormat; import fr.paris.lutece.plugins.form.business.ExportFormatHome; import fr.paris.lutece.plugins.form.business.Field; import fr.paris.lutece.plugins.form.business.FieldHome; import fr.paris.lutece.plugins.form.business.Form; import fr.paris.lutece.plugins.form.business.FormAction; import fr.paris.lutece.plugins.form.business.FormActionHome; import fr.paris.lutece.plugins.form.business.FormError; import fr.paris.lutece.plugins.form.business.FormFilter; import fr.paris.lutece.plugins.form.business.FormHome; import fr.paris.lutece.plugins.form.business.FormSubmit; import fr.paris.lutece.plugins.form.business.FormSubmitHome; import fr.paris.lutece.plugins.form.business.GraphType; import fr.paris.lutece.plugins.form.business.GraphTypeHome; import fr.paris.lutece.plugins.form.business.IEntry; import fr.paris.lutece.plugins.form.business.Recap; import fr.paris.lutece.plugins.form.business.RecapHome; import fr.paris.lutece.plugins.form.business.Response; import fr.paris.lutece.plugins.form.business.ResponseFilter; import fr.paris.lutece.plugins.form.business.ResponseHome; import fr.paris.lutece.plugins.form.business.StatisticFormSubmit; import fr.paris.lutece.plugins.form.business.outputprocessor.IOutputProcessor; import fr.paris.lutece.plugins.form.business.portlet.FormPortletHome; import fr.paris.lutece.plugins.form.service.EntryRemovalListenerService; import fr.paris.lutece.plugins.form.service.FormRemovalListenerService; import fr.paris.lutece.plugins.form.service.FormResourceIdService; import fr.paris.lutece.plugins.form.service.OutputProcessorService; import fr.paris.lutece.plugins.form.utils.FormUtils; import fr.paris.lutece.portal.business.rbac.RBAC; import fr.paris.lutece.portal.business.user.AdminUser; import fr.paris.lutece.portal.service.admin.AdminUserService; import fr.paris.lutece.portal.service.captcha.CaptchaSecurityService; import fr.paris.lutece.portal.service.html.XmlTransformerService; import fr.paris.lutece.portal.service.i18n.I18nService; import fr.paris.lutece.portal.service.mailinglist.AdminMailingListService; import fr.paris.lutece.portal.service.message.AdminMessage; import fr.paris.lutece.portal.service.message.AdminMessageService; import fr.paris.lutece.portal.service.plugin.Plugin; import fr.paris.lutece.portal.service.plugin.PluginService; import fr.paris.lutece.portal.service.rbac.RBACService; import fr.paris.lutece.portal.service.template.AppTemplateService; import fr.paris.lutece.portal.service.util.AppHTTPSService; import fr.paris.lutece.portal.service.util.AppLogService; import fr.paris.lutece.portal.service.util.AppPathService; import fr.paris.lutece.portal.service.util.AppPropertiesService; import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService; import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean; import fr.paris.lutece.util.ReferenceList; import fr.paris.lutece.util.UniqueIDGenerator; import fr.paris.lutece.util.date.DateUtil; import fr.paris.lutece.util.html.HtmlTemplate; import fr.paris.lutece.util.html.Paginator; import fr.paris.lutece.util.string.StringUtil; import fr.paris.lutece.util.url.UrlItem; import fr.paris.lutece.util.xml.XmlUtil; import org.jfree.chart.ChartRenderingInfo; import org.jfree.chart.JFreeChart; import org.jfree.chart.entity.StandardEntityCollection; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * This class provides the user interface to manage form features ( manage, * create, modify, remove) */ public class FormJspBean extends PluginAdminPageJspBean { public static final String RIGHT_MANAGE_FORM = "FORM_MANAGEMENT"; //templates private static final String TEMPLATE_MANAGE_FORM = "admin/plugins/form/manage_form.html"; private static final String TEMPLATE_MANAGE_OUTPUT_PROCESSOR = "admin/plugins/form/manage_output_processor.html"; private static final String TEMPLATE_CREATE_FORM = "admin/plugins/form/create_form.html"; private static final String TEMPLATE_CREATE_FIELD = "admin/plugins/form/create_field.html"; private static final String TEMPLATE_MODIFY_FORM = "admin/plugins/form/modify_form.html"; private static final String TEMPLATE_HTML_TEST_FORM = "admin/plugins/form/test_form.html"; private static final String TEMPLATE_MODIFY_RECAP = "admin/plugins/form/modify_recap.html"; private static final String TEMPLATE_MOVE_ENTRY = "admin/plugins/form/move_entry.html"; private static final String TEMPLATE_MODIFY_FIELD_WITH_CONDITIONAL_QUESTION = "admin/plugins/form/modify_field_with_conditional_question.html"; private static final String TEMPLATE_MODIFY_FIELD = "admin/plugins/form/modify_field.html"; private static final String TEMPLATE_RESULT = "admin/plugins/form/result.html"; private static final String TEMPLATE_MODIFY_MESSAGE = "admin/plugins/form/modify_message.html"; //message private static final String MESSAGE_CONFIRM_REMOVE_FORM = "form.message.confirmRemoveForm"; private static final String MESSAGE_CONFIRM_REMOVE_FORM_WITH_FORM_SUBMIT = "form.message.confirmRemoveFormWithFormSubmit"; private static final String MESSAGE_CANT_REMOVE_FORM_ASSOCIATE_PORTLET = "form.message.cantRemoveFormAssociatePortlet"; private static final String MESSAGE_CANT_REMOVE_FORM = "form.message.cantRemoveForm"; private static final String MESSAGE_CANT_REMOVE_ENTRY = "form.message.cantRemoveEntry"; private static final String MESSAGE_CONFIRM_DISABLE_FORM = "form.message.confirmDisableForm"; private static final String MESSAGE_CONFIRM_DISABLE_FORM_WITH_PORTLET = "form.message.confirmDisableFormWithPortlet"; private static final String MESSAGE_CONFIRM_REMOVE_ENTRY = "form.message.confirmRemoveEntry"; private static final String MESSAGE_CONFIRM_REMOVE_FIELD = "form.message.confirmRemoveField"; private static final String MESSAGE_CONFIRM_REMOVE_GROUP_WITH_ANY_ENTRY = "form.message.confirmRemoveGroupWithAnyEntry"; private static final String MESSAGE_CONFIRM_REMOVE_GROUP_WITH_ENTRY = "form.message.confirmRemoveGroupWhithEntry"; private static final String MESSAGE_MANDATORY_FIELD = "form.message.mandatory.field"; private static final String MESSAGE_FIELD_VALUE_FIELD = "directory.message.field_value_field"; private static final String MESSAGE_MANDATORY_QUESTION = "form.message.mandatory.question"; private static final String MESSAGE_CAPTCHA_ERROR = "form.message.captchaError"; private static final String MESSAGE_REQUIREMENT_ERROR = "form.message.requirementError"; private static final String MESSAGE_NO_RESPONSE = "form.message.noResponse"; private static final String MESSAGE_FORM_ERROR = "form.message.formError"; private static final String MESSAGE_ILLOGICAL_DATE_BEGIN_DISPONIBILITY = "form.message.illogicalDateBeginDisponibility"; private static final String MESSAGE_ILLOGICAL_DATE_END_DISPONIBILITY = "form.message.illogicalDateEndDisponibility"; private static final String MESSAGE_DATE_END_DISPONIBILITY_BEFORE_CURRENT_DATE = "form.message.dateEndDisponibilityBeforeCurrentDate"; private static final String MESSAGE_DATE_END_DISPONIBILITY_BEFORE_DATE_BEGIN = "form.message.dateEndDisponibilityBeforeDateBegin"; private static final String MESSAGE_CANT_ENABLE_FORM_DATE_END_DISPONIBILITY_BEFORE_CURRENT_DATE = "form.message.cantEnableFormDateEndDisponibilityBeforeCurrentDate"; private static final String MESSAGE_SELECT_GROUP = "form.message.selectGroup"; private static final String MESSAGE_ERROR_DURING_DOWNLOAD_FILE = "form.message.errorDuringDownloadFile"; private static final String MESSAGE_YOU_ARE_NOT_ALLOWED_TO_DOWLOAD_THIS_FILE = "form.message.youAreNotAllowedToDownloadFile"; private static final String FIELD_TITLE = "form.createForm.labelTitle"; private static final String FIELD_DESCRIPTION = "form.createForm.labelDescription"; private static final String FIELD_LIBELE_VALIDATE_BUTTON = "form.createForm.labelLibelleValidateButton"; private static final String FIELD_TITLE_FIELD = "form.createField.labelTitle"; private static final String FIELD_VALUE_FIELD = "directory.create_field.label_value"; private static final String FIELD_BACK_URL = "form.modifyRecap.labelBackUrl"; private static final String FIELD_RECAP_MESSAGE = "form.modifyRecap.labelRecapMessage"; private static final String FIELD_UNAVAILABILITY_MESSAGE = "form.createForm.labelUnavailabilityMessage"; private static final String FIELD_REQUIREMENT = "form.createForm.labelRequirement"; //properties private static final String PROPERTY_ITEM_PER_PAGE = "form.itemsPerPage"; private static final String PROPERTY_ALL = "form.manageForm.select.all"; private static final String PROPERTY_YES = "form.manageForm.select.yes"; private static final String PROPERTY_NO = "form.manageForm.select.no"; private static final String PROPERTY_NOTHING = "form.createForm.select.nothing"; private static final String PROPERTY_MODIFY_FORM_TITLE = "form.modifyForm.title"; private static final String PROPERTY_COPY_FORM_TITLE = "form.copyForm.title"; private static final String PROPERTY_COPY_ENTRY_TITLE = "form.copyEntry.title"; private static final String PROPERTY_CREATE_FORM_TITLE = "form.createForm.title"; private static final String PROPERTY_CREATE_COMMENT_TITLE = "form.createEntry.titleComment"; private static final String PROPERTY_CREATE_QUESTION_TITLE = "form.createEntry.titleQuestion"; private static final String PROPERTY_MODIFY_COMMENT_TITLE = "form.modifyEntry.titleComment"; private static final String PROPERTY_MODIFY_QUESTION_TITLE = "form.modifyEntry.titleQuestion"; private static final String PROPERTY_MODIFY_GROUP_TITLE = "form.modifyEntry.titleGroup"; private static final String PROPERTY_CREATE_FIELD_TITLE = "form.createField.title"; private static final String PROPERTY_MODIFY_FIELD_TITLE = "form.modifyField.title"; private static final String PROPERTY_MODIFY_RECAP_TITLE = "form.modifyRecap.title"; private static final String PROPERTY_RESULT_PAGE_TITLE = "form.result.pageTitle"; private static final String PROPERTY_LABEL_AXIS_X = "form.result.graph.labelAxisX"; private static final String PROPERTY_LABEL_AXIS_Y = "form.result.graph.labelAxisY"; private static final String PROPERTY_NUMBER_RESPONSE_AXIS_X = "graph.numberResponseAxisX"; private static final String XSL_UNIQUE_PREFIX_ID = UniqueIDGenerator.getNewId() + "form-"; private static final String PROPERTY_MODIFY_MESSAGE_TITLE = "form.modifyMessage.title"; //Markers private static final String MARK_WEBAPP_URL = "webapp_url"; private static final String MARK_LOCALE = "locale"; private static final String MARK_PAGINATOR = "paginator"; private static final String MARK_USER_WORKGROUP_REF_LIST = "user_workgroup_list"; private static final String MARK_USER_WORKGROUP_SELECTED = "user_workgroup_selected"; private static final String MARK_ACTIVE_REF_LIST = "active_list"; private static final String MARK_ACTIVE_SELECTED = "active_selected"; private static final String MARK_MAILING_REF_LIST = "mailing_list"; private static final String MARK_ENTRY_TYPE_REF_LIST = "entry_type_list"; private static final String MARK_REGULAR_EXPRESSION_LIST_REF_LIST = "regular_expression_list"; private static final String MARK_ENTRY = "entry"; private static final String MARK_FIELD = "field"; private static final String MARK_RECAP = "recap"; private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page"; private static final String MARK_FORM_LIST = "form_list"; private static final String MARK_FORM = "form"; private static final String MARK_PERMISSION_CREATE_FORM = "permission_create_form"; private static final String MARK_ENTRY_TYPE_GROUP = "entry_type_group"; private static final String MARK_ENTRY_LIST = "entry_list"; private static final String MARK_STR_FORM = "str_form"; private static final String MARK_LIST = "list"; private static final String MARK_GRAPH_TYPE_REF_LIST = "graph_type_list"; private static final String MARK_NUMBER_QUESTION = "number_question"; private static final String MARK_NUMBER_ITEMS = "number_items"; private static final String MARK_DEFAULT_MESSAGE = "default_message"; private static final String MARK_IS_ACTIVE_CAPTCHA = "is_active_captcha"; private static final String MARK_EXPORT_FORMAT_REF_LIST = "export_format_list"; private static final String MARK_FIRST_RESPONSE_DATE_FILTER = "fist_response_date_filter"; private static final String MARK_LAST_RESPONSE_DATE_FILTER = "last_response_date_filter"; private static final String MARK_FIRST_RESPONSE_DATE = "fist_response_date"; private static final String MARK_LAST_RESPONSE_DATE = "last_response_date"; private static final String MARK_NUMBER_RESPONSE = "number_response"; private static final String MARK_TIMES_UNIT = "times_unit"; private static final String MARK_PROCESSOR_KEY = "processor_key"; private static final String MARK_PROCESSOR_CONFIGURATION = "processor_configuration"; private static final String MARK_PROCESSOR_LIST = "processor_list"; private static final String MARK_IS_SELECTED = "is_selected"; private static final String MARK_OPTION_NO_DISPLAY_TITLE = "option_no_display_title"; //Jsp Definition private static final String JSP_DO_DISABLE_FORM = "jsp/admin/plugins/form/DoDisableForm.jsp"; private static final String JSP_DO_DISABLE_AUTO_FORM = "jsp/admin/plugins/form/DoDisableAutoForm.jsp"; private static final String JSP_DO_REMOVE_FORM = "jsp/admin/plugins/form/DoRemoveForm.jsp"; private static final String JSP_DO_REMOVE_FIELD = "jsp/admin/plugins/form/DoRemoveField.jsp"; private static final String JSP_DO_REMOVE_ENTRY = "jsp/admin/plugins/form/DoRemoveEntry.jsp"; private static final String JSP_MANAGE_FORM = "jsp/admin/plugins/form/ManageForm.jsp"; private static final String JSP_MODIFY_FORM = "jsp/admin/plugins/form/ModifyForm.jsp"; private static final String JSP_MODIFY_ENTRY = "jsp/admin/plugins/form/ModifyEntry.jsp"; private static final String JSP_MODIFY_FIELD = "jsp/admin/plugins/form/ModifyFieldWithConditionalQuestion.jsp"; private static final String JSP_TEST_FORM = "jsp/admin/plugins/form/TestForm.jsp"; private static final String JSP_DO_TEST_FORM = "jsp/admin/plugins/form/DoTestForm.jsp"; private static final String JSP_MANAGE_OUTPUT_PROCESS_FORM = "jsp/admin/plugins/form/ManageOutputProcessor.jsp"; //parameters form private static final String PARAMETER_ID_FORM = "id_form"; private static final String PARAMETER_REQUIREMENT = "requirement"; private static final String PARAMETER_TITLE = "title"; private static final String PARAMETER_DESCRIPTION = "description"; private static final String PARAMETER_WELCOME_MESSAGE = "welcome_message"; private static final String PARAMETER_UNAVAILABILITY_MESSAGE = "unavailability_message"; private static final String PARAMETER_ACTIVE_CAPTCHA = "active_captcha"; private static final String PARAMETER_ACTIVE_STORE_ADRESSE = "active_store_adresse"; private static final String PARAMETER_ACTIVE_REQUIREMENT = "active_requirement"; private static final String PARAMETER_LIMIT_NUMBER_RESPONSE = "limit_number_response"; private static final String PARAMETER_LIBELLE_VALIDATE_BUTTON = "libelle_validate_button"; private static final String PARAMETER_LIBELLE_RESET_BUTTON = "libelle_reset_button"; private static final String PARAMETER_BACK_URL = "back_url"; private static final String PARAMETER_PUBLICATION_MODE = "publication_mode"; private static final String PARAMETER_DATE_BEGIN_DISPONIBILITY = "date_begin_disponibility"; private static final String PARAMETER_DATE_END_DISPONIBILITY = "date_end_disponibility"; private static final String PARAMETER_ACTIVE = "active"; private static final String PARAMETER_WORKGROUP = "workgroup"; private static final String PARAMETER_ID_MAILINIG_LIST = "id_mailing_list"; private static final String PARAMETER_PAGE_INDEX = "page_index"; private static final String PARAMETER_ID_ENTRY = "id_entry"; private static final String PARAMETER_ID_FIELD = "id_field"; private static final String PARAMETER_ID_EXPRESSION = "id_expression"; private static final String PARAMETER_ID_RECAP = "id_recap"; private static final String PARAMETER_RECAP_MESSAGE = "recap_message"; private static final String PARAMETER_RECAP_DATA = "recap_data"; private static final String PARAMETER_GRAPH = "graph"; private static final String PARAMETER_GRAPH_THREE_DIMENSION = "graph_three_dimension"; private static final String PARAMETER_GRAPH_LABEL_VALUE = "graph_label_value"; private static final String PARAMETER_ID_GRAPH_TYPE = "id_graph_type"; private static final String PARAMETER_ID_RESPONSE = "id_response"; private static final String PARAMETER_CANCEL = "cancel"; private static final String PARAMETER_APPLY = "apply"; private static final String PARAMETER_VALUE = "value"; private static final String PARAMETER_DEFAULT_VALUE = "default_value"; private static final String PARAMETER_NO_DISPLAY_TITLE = "no_display_title"; private static final String PARAMETER_SESSION = "session"; private static final String PARAMETER_ID_EXPORT_FORMAT = "id_export_format"; private static final String PARAMETER_FIRST_RESPONSE_DATE_FILTER = "fist_response_date_filter"; private static final String PARAMETER_LAST_RESPONSE_DATE_FILTER = "last_response_date_filter"; private static final String PARAMETER_TIMES_UNIT = "times_unit"; private static final String PARAMETER_PROCESSOR_KEY = "processor_key"; private static final String PARAMETER_IS_SELECTED = "is_selected"; public static final String PARAMETER_ACTION_REDIRECT = "redirect"; private static final String PARAMETER_INFORMATION_COMPLEMENTARY_1 = "information_complementary_1"; private static final String PARAMETER_INFORMATION_COMPLEMENTARY_2 = "information_complementary_2"; private static final String PARAMETER_INFORMATION_COMPLEMENTARY_3 = "information_complementary_3"; private static final String PARAMETER_INFORMATION_COMPLEMENTARY_4 = "information_complementary_4"; private static final String PARAMETER_INFORMATION_COMPLEMENTARY_5 = "information_complementary_5"; private static final String PARAMETER_SUPPORT_HTTPS = "support_https"; private static final String PARAMETER_OPTION_NO_DISPLAY_TITLE = "option_no_display_title"; // other constants private static final String EMPTY_STRING = ""; private static final String JCAPTCHA_PLUGIN = "jcaptcha"; public static final String PUBLICATION_MODE_AUTO = "1"; //session fields private int _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt(PROPERTY_ITEM_PER_PAGE, 50); private String _strCurrentPageIndexForm; private int _nItemsPerPageForm; private String _strCurrentPageIndexEntry; private int _nItemsPerPageEntry; private String _strCurrentPageIndexConditionalEntry; private int _nItemsPerPageConditionalEntry; private String _strCurrentPageIndex; private int _nItemsPerPage; private int _nIdActive = -1; private String _strWorkGroup = AdminWorkgroupService.ALL_GROUPS; private int _nIdForm = -1; private int _nIdEntry = -1; private List<FormSubmit> _listFormSubmitTest; /*-------------------------------MANAGEMENT FORM-----------------------------*/ /** * Return management Form ( list of form ) *@param request The Http request * @return Html form */ public String getManageForm(HttpServletRequest request) { AdminUser adminUser = getUser(); Plugin plugin = getPlugin(); Locale locale = getLocale(); ReferenceList refListWorkGroups; ReferenceList refListActive; List<FormAction> listActionsForFormEnable; List<FormAction> listActionsForFormDisable; List<FormAction> listActions; String strWorkGroup = request.getParameter(PARAMETER_WORKGROUP); String strActive = request.getParameter(PARAMETER_ACTIVE); _strCurrentPageIndexForm = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndexForm); _nItemsPerPageForm = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPageForm, _nDefaultItemsPerPage); if ((strActive != null) && !strActive.equals(EMPTY_STRING)) { try { _nIdActive = Integer.parseInt(strActive); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if (strWorkGroup != null) { _strWorkGroup = strWorkGroup; } //build Filter FormFilter filter = new FormFilter(); filter.setIdState(_nIdActive); filter.setWorkGroup(_strWorkGroup); List listForm = FormHome.getFormList(filter, getPlugin()); listForm = (List) AdminWorkgroupService.getAuthorizedCollection(listForm, adminUser); refListWorkGroups = AdminWorkgroupService.getUserWorkgroups(adminUser, locale); refListActive = initRefListActive(plugin, locale); Map<String, Object> model = new HashMap<String, Object>(); Paginator paginator = new Paginator(listForm, _nItemsPerPageForm, getJspManageForm(request), PARAMETER_PAGE_INDEX, _strCurrentPageIndexForm); listActionsForFormEnable = FormActionHome.selectActionsByFormState(Form.STATE_ENABLE, plugin, locale); listActionsForFormDisable = FormActionHome.selectActionsByFormState(Form.STATE_DISABLE, plugin, locale); for (Form form : (List<Form>) paginator.getPageItems()) { if (form.isActive()) { listActions = listActionsForFormEnable; } else { listActions = listActionsForFormDisable; } listActions = (List<FormAction>) RBACService.getAuthorizedActionsCollection(listActions, form, getUser()); form.setActions(listActions); } model.put(MARK_PAGINATOR, paginator); model.put(MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPageForm); model.put(MARK_USER_WORKGROUP_REF_LIST, refListWorkGroups); model.put(MARK_USER_WORKGROUP_SELECTED, _strWorkGroup); model.put(MARK_ACTIVE_REF_LIST, refListActive); model.put(MARK_ACTIVE_SELECTED, _nIdActive); model.put(MARK_FORM_LIST, paginator.getPageItems()); model.put(MARK_LOCALE, request.getLocale()); if (RBACService.isAuthorized(Form.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID, FormResourceIdService.PERMISSION_CREATE, adminUser)) { model.put(MARK_PERMISSION_CREATE_FORM, true); } else { model.put(MARK_PERMISSION_CREATE_FORM, false); } setPageTitleProperty(EMPTY_STRING); HtmlTemplate templateList = AppTemplateService.getTemplate(TEMPLATE_MANAGE_FORM, locale, model); //ReferenceList refMailingList; //refMailingList=AdminMailingListService.getMailingLists(adminUser); return getAdminPage(templateList.getHtml()); } /** * Get the request data and if there is no error insert the data in the form specified in parameter. * return null if there is no error or else return the error page url * @param request the request * @param form form * @return null if there is no error or else return the error page url */ private String getFormData(HttpServletRequest request, Form form) { String strTitle = request.getParameter(PARAMETER_TITLE); String strDescription = request.getParameter(PARAMETER_DESCRIPTION); String strWorkgroup = request.getParameter(PARAMETER_WORKGROUP); String strMailingListId = request.getParameter(PARAMETER_ID_MAILINIG_LIST); String strActiveCaptcha = request.getParameter(PARAMETER_ACTIVE_CAPTCHA); String strActiveStoreAdresse = request.getParameter(PARAMETER_ACTIVE_STORE_ADRESSE); String strActiveRequirement = request.getParameter(PARAMETER_ACTIVE_REQUIREMENT); String strLimitNumberResponse = request.getParameter(PARAMETER_LIMIT_NUMBER_RESPONSE); String strPublicationMode = request.getParameter(PARAMETER_PUBLICATION_MODE); String strDateBeginDisponibility = request.getParameter(PARAMETER_DATE_BEGIN_DISPONIBILITY); String strDateEndDisponibility = request.getParameter(PARAMETER_DATE_END_DISPONIBILITY); String strInformationComplementary1 = request.getParameter(PARAMETER_INFORMATION_COMPLEMENTARY_1); String strInformationComplementary2 = request.getParameter(PARAMETER_INFORMATION_COMPLEMENTARY_2); String strInformationComplementary3 = request.getParameter(PARAMETER_INFORMATION_COMPLEMENTARY_3); String strInformationComplementary4 = request.getParameter(PARAMETER_INFORMATION_COMPLEMENTARY_4); String strInformationComplementary5 = request.getParameter(PARAMETER_INFORMATION_COMPLEMENTARY_5); String strSupportsHTTPS = request.getParameter(PARAMETER_SUPPORT_HTTPS); String strFieldError = EMPTY_STRING; if ((strTitle == null) || strTitle.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_TITLE; } else if ((strDescription == null) || strDescription.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_DESCRIPTION; } if (!strFieldError.equals(EMPTY_STRING)) { Object[] tabRequiredFields = { I18nService.getLocalizedString(strFieldError, getLocale()) }; return AdminMessageService.getMessageUrl(request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP); } form.setTitle(strTitle); form.setDescription(strDescription); form.setWorkgroup(strWorkgroup); if ((strInformationComplementary1 != null)) { form.setInfoComplementary1(strInformationComplementary1); } if ((strInformationComplementary2 != null)) { form.setInfoComplementary2(strInformationComplementary2); } if ((strInformationComplementary3 != null)) { form.setInfoComplementary3(strInformationComplementary3); } if ((strInformationComplementary4 != null)) { form.setInfoComplementary4(strInformationComplementary4); } if ((strInformationComplementary5 != null)) { form.setInfoComplementary5(strInformationComplementary5); } if ((strSupportsHTTPS != null)) { form.setSupportHTTPS(Boolean.parseBoolean(strSupportsHTTPS)); } else { form.setSupportHTTPS(Boolean.FALSE); } if (strActiveCaptcha != null) { form.setActiveCaptcha(true); } else { form.setActiveCaptcha(false); } if (strActiveStoreAdresse != null) { form.setActiveStoreAdresse(true); } else { form.setActiveStoreAdresse(false); } if (strLimitNumberResponse != null) { form.setLimitNumberResponse(true); } else { form.setLimitNumberResponse(false); } if (strActiveRequirement != null) { form.setActiveRequirement(true); } else { form.setActiveRequirement(false); } try { int nMailingListId = Integer.parseInt(strMailingListId); // if ( nMailingListId != -1 ) // { form.setIdMailingList(nMailingListId); // } } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } if ((strPublicationMode != null) && strPublicationMode.equals(PUBLICATION_MODE_AUTO)) { //Set date begin disponibility java.util.Date tDateBeginDisponibility = null; if ((strDateBeginDisponibility != null) && !strDateBeginDisponibility.equals(EMPTY_STRING)) { tDateBeginDisponibility = DateUtil.formatDate(strDateBeginDisponibility, getLocale()); if (tDateBeginDisponibility == null) { return AdminMessageService.getMessageUrl(request, MESSAGE_ILLOGICAL_DATE_BEGIN_DISPONIBILITY, AdminMessage.TYPE_STOP); } // no need to check the date begin of validity } //Set date end disponibility form.setDateBeginDisponibility(tDateBeginDisponibility); java.util.Date tDateEndDisponibility = null; if ((strDateEndDisponibility != null) && !strDateEndDisponibility.equals(EMPTY_STRING)) { tDateEndDisponibility = DateUtil.formatDate(strDateEndDisponibility, getLocale()); if (tDateEndDisponibility == null) { return AdminMessageService.getMessageUrl(request, MESSAGE_ILLOGICAL_DATE_END_DISPONIBILITY, AdminMessage.TYPE_STOP); } else { if (tDateEndDisponibility.before(FormUtils.getCurrentDate())) { return AdminMessageService.getMessageUrl(request, MESSAGE_DATE_END_DISPONIBILITY_BEFORE_CURRENT_DATE, AdminMessage.TYPE_STOP); } } } if ((tDateBeginDisponibility != null) && (tDateEndDisponibility != null) && tDateBeginDisponibility.after(tDateEndDisponibility)) { return AdminMessageService.getMessageUrl(request, MESSAGE_DATE_END_DISPONIBILITY_BEFORE_DATE_BEGIN, AdminMessage.TYPE_STOP); } form.setDateEndDisponibility(tDateEndDisponibility); form.setActive(false); form.setAutoPublicationActive(true); } else { form.setDateBeginDisponibility(null); form.setDateEndDisponibility(null); form.setAutoPublicationActive(false); } return null; // No error } /** * Gets the form creation page * @param request The HTTP request * @return The form creation page */ public String getCreateForm(HttpServletRequest request) { AdminUser adminUser = getUser(); Locale locale = getLocale(); ReferenceList refListWorkGroups; ReferenceList refMailingList; refListWorkGroups = AdminWorkgroupService.getUserWorkgroups(adminUser, locale); refMailingList = new ReferenceList(); String strNothing = I18nService.getLocalizedString(PROPERTY_NOTHING, locale); refMailingList.addItem(-1, strNothing); refMailingList.addAll(AdminMailingListService.getMailingLists(adminUser)); DefaultMessage defaultMessage = DefaultMessageHome.find(getPlugin()); if (!RBACService.isAuthorized(Form.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID, FormResourceIdService.PERMISSION_CREATE, adminUser)) { return getManageForm(request); } HashMap<String, Object> model = new HashMap<String, Object>(); model.put(MARK_USER_WORKGROUP_REF_LIST, refListWorkGroups); model.put(MARK_MAILING_REF_LIST, refMailingList); model.put(MARK_DEFAULT_MESSAGE, defaultMessage); model.put(MARK_WEBAPP_URL, AppPathService.getBaseUrl(request)); model.put(MARK_LOCALE, AdminUserService.getLocale(request).getLanguage()); model.put(MARK_IS_ACTIVE_CAPTCHA, PluginService.isPluginEnable(JCAPTCHA_PLUGIN)); setPageTitleProperty(PROPERTY_CREATE_FORM_TITLE); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_CREATE_FORM, locale, model); return getAdminPage(template.getHtml()); } /** * Perform the form creation * @param request The HTTP request * @return The URL to go after performing the action */ public String doCreateForm(HttpServletRequest request) { if ((request.getParameter(PARAMETER_CANCEL) == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID, FormResourceIdService.PERMISSION_CREATE, getUser())) { Plugin plugin = getPlugin(); Form form = new Form(); String strError = getFormData(request, form); if (strError != null) { return strError; } Recap recap = new Recap(); recap.setIdRecap(RecapHome.create(recap, plugin)); form.setRecap(recap); form.setDateCreation(FormUtils.getCurrentTimestamp()); // Use default messages DefaultMessage defaultMessage = DefaultMessageHome.find(plugin); form.setWelcomeMessage(defaultMessage.getWelcomeMessage()); form.setUnavailabilityMessage(defaultMessage.getUnavailabilityMessage()); form.setRequirement(defaultMessage.getRequirement()); form.setLibelleValidateButton(defaultMessage.getLibelleValidateButton()); form.setLibelleResetButton(defaultMessage.getLibelleResetButton()); FormHome.create(form, plugin); } return getJspManageForm(request); } /** * Gets the form modification page * @param request The HTTP request * @return The form modification page */ public String getModifyForm(HttpServletRequest request) { Plugin plugin = getPlugin(); List<IEntry> listEntry = new ArrayList<IEntry>(); List<IEntry> listEntryFirstLevel; int nNumberQuestion; EntryFilter filter; String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nIdForm = -1; Form form; if ((strIdForm != null) && !strIdForm.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); _nIdForm = nIdForm; } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } } form = FormHome.findByPrimaryKey(nIdForm, plugin); if ((form == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getManageForm(request); } filter = new EntryFilter(); filter.setIdForm(nIdForm); filter.setEntryParentNull(EntryFilter.FILTER_TRUE); filter.setFieldDependNull(EntryFilter.FILTER_TRUE); listEntryFirstLevel = EntryHome.getEntryList(filter, plugin); filter.setEntryParentNull(EntryFilter.ALL_INT); filter.setIdIsComment(EntryFilter.FILTER_FALSE); filter.setIdIsGroup(EntryFilter.FILTER_FALSE); nNumberQuestion = EntryHome.getNumberEntryByFilter(filter, plugin); if (listEntryFirstLevel.size() != 0) { listEntryFirstLevel.get(0).setFirstInTheList(true); listEntryFirstLevel.get(listEntryFirstLevel.size() - 1).setLastInTheList(true); } for (IEntry entry : listEntryFirstLevel) { listEntry.add(entry); if (entry.getEntryType().getGroup()) { filter = new EntryFilter(); filter.setIdEntryParent(entry.getIdEntry()); entry.setChildren(EntryHome.getEntryList(filter, plugin)); if (entry.getChildren().size() != 0) { entry.getChildren().get(0).setFirstInTheList(true); entry.getChildren().get(entry.getChildren().size() - 1).setLastInTheList(true); } for (IEntry entryChild : entry.getChildren()) { listEntry.add(entryChild); } } } _strCurrentPageIndexEntry = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndexEntry); _nItemsPerPageEntry = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPageEntry, _nDefaultItemsPerPage); Paginator paginator = new Paginator(listEntry, _nItemsPerPageEntry, AppPathService.getBaseUrl(request) + JSP_MODIFY_FORM + "?id_form=" + nIdForm, PARAMETER_PAGE_INDEX, _strCurrentPageIndexEntry); AdminUser adminUser = getUser(); Locale locale = getLocale(); ReferenceList refListWorkGroups; ReferenceList refMailingList; ReferenceList refEntryType; refListWorkGroups = AdminWorkgroupService.getUserWorkgroups(adminUser, locale); refMailingList = new ReferenceList(); String strNothing = I18nService.getLocalizedString(PROPERTY_NOTHING, locale); refMailingList.addItem(-1, strNothing); refMailingList.addAll(AdminMailingListService.getMailingLists(adminUser)); EntryType entryTypeGroup = new EntryType(); refEntryType = initRefListEntryType(plugin, locale, entryTypeGroup); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_PAGINATOR, paginator); model.put(MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPageEntry); model.put(MARK_USER_WORKGROUP_REF_LIST, refListWorkGroups); model.put(MARK_MAILING_REF_LIST, refMailingList); model.put(MARK_ENTRY_TYPE_REF_LIST, refEntryType); model.put(MARK_ENTRY_TYPE_GROUP, entryTypeGroup); model.put(MARK_FORM, form); model.put(MARK_ENTRY_LIST, paginator.getPageItems()); model.put(MARK_NUMBER_QUESTION, nNumberQuestion); model.put(MARK_WEBAPP_URL, AppPathService.getBaseUrl(request)); model.put(MARK_LOCALE, AdminUserService.getLocale(request).getLanguage()); model.put(MARK_IS_ACTIVE_CAPTCHA, PluginService.isPluginEnable(JCAPTCHA_PLUGIN)); setPageTitleProperty(PROPERTY_MODIFY_FORM_TITLE); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MODIFY_FORM, locale, model); return getAdminPage(template.getHtml()); } /** * Perform the form modification * @param request The HTTP request * @return The URL to go after performing the action */ public String doModifyForm(HttpServletRequest request) { if (request.getParameter(PARAMETER_CANCEL) == null) { Plugin plugin = getPlugin(); String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nIdForm = -1; Form form; if ((strIdForm != null) && !strIdForm.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if (nIdForm != -1) { form = FormHome.findByPrimaryKey(nIdForm, plugin); if ((form == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getJspManageForm(request); } String strError = getFormData(request, form); if (strError != null) { return strError; } form.setIdForm(nIdForm); FormHome.update(form, getPlugin()); if (request.getParameter(PARAMETER_APPLY) != null) { return getJspModifyForm(request, nIdForm); } } } return getJspManageForm(request); } /** * Gets the confirmation page of delete form * @param request The HTTP request * @return the confirmation page of delete form */ public String getConfirmRemoveForm(HttpServletRequest request) { Plugin plugin = getPlugin(); String strIdForm = request.getParameter(PARAMETER_ID_FORM); String strMessage; int nIdForm = -1; if ((strIdForm == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_DELETE, getUser())) { return getHomeUrl(request); } try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } ResponseFilter responseFilter = new ResponseFilter(); responseFilter.setIdForm(nIdForm); int nNumberFormSubmit = FormSubmitHome.getCountFormSubmit(responseFilter, plugin); if (nNumberFormSubmit == 0) { strMessage = MESSAGE_CONFIRM_REMOVE_FORM; } else { strMessage = MESSAGE_CONFIRM_REMOVE_FORM_WITH_FORM_SUBMIT; } UrlItem url = new UrlItem(JSP_DO_REMOVE_FORM); url.addParameter(PARAMETER_ID_FORM, strIdForm); return AdminMessageService.getMessageUrl(request, strMessage, url.getUrl(), AdminMessage.TYPE_CONFIRMATION); } /** * Perform the form supression * @param request The HTTP request * @return The URL to go after performing the action */ public String doRemoveForm(HttpServletRequest request) { String strIdForm = request.getParameter(PARAMETER_ID_FORM); Plugin plugin = getPlugin(); int nIdForm = -1; if (request.getParameter(PARAMETER_ID_FORM) == null) { return getHomeUrl(request); } try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); } if ((nIdForm != -1) && RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_DELETE, getUser())) { if (FormPortletHome.getCountPortletByIdForm(nIdForm) != 0) { return AdminMessageService.getMessageUrl(request, MESSAGE_CANT_REMOVE_FORM_ASSOCIATE_PORTLET, AdminMessage.TYPE_CONFIRMATION); } ArrayList<String> listErrors = new ArrayList<String>(); if (!FormRemovalListenerService.getService().checkForRemoval(strIdForm, listErrors, getLocale())) { String strCause = AdminMessageService.getFormattedList(listErrors, getLocale()); Object[] args = { strCause }; return AdminMessageService.getMessageUrl(request, MESSAGE_CANT_REMOVE_FORM, args, AdminMessage.TYPE_STOP); } FormHome.remove(nIdForm, plugin); OutputProcessorService.getInstance().removeProcessorAssociationsByIdForm(nIdForm); } return getJspManageForm(request); } /** * copy the form whose key is specified in the Http request * @param request The HTTP request * @return The URL to go after performing the action */ public String doCopyForm(HttpServletRequest request) { Plugin plugin = getPlugin(); Form form; String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nIdForm = -1; if (request.getParameter(PARAMETER_ID_FORM) == null) { return getHomeUrl(request); } try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); } if ((nIdForm != -1) && RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_COPY, getUser())) { form = FormHome.findByPrimaryKey(nIdForm, plugin); Object[] tabFormTileCopy = { form.getTitle() }; String strTitleCopyForm = I18nService.getLocalizedString(PROPERTY_COPY_FORM_TITLE, tabFormTileCopy, getLocale()); if (strTitleCopyForm != null) { form.setTitle(strTitleCopyForm); } FormHome.copy(form, plugin); } return getJspManageForm(request); } /** * Gets the form recap modification page * @param request The HTTP request * @return the form recap modification page */ public String getModifyRecap(HttpServletRequest request) { Plugin plugin = getPlugin(); String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nIdForm = -1; Form form; Recap recap; ReferenceList refListGraphType; if ((strIdForm != null) && RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { try { nIdForm = Integer.parseInt(strIdForm); _nIdForm = nIdForm; } catch (NumberFormatException ne) { AppLogService.error(ne); } } if (nIdForm == -1) { return getManageForm(request); } form = FormHome.findByPrimaryKey(nIdForm, plugin); recap = RecapHome.findByPrimaryKey(form.getRecap().getIdRecap(), plugin); recap.setForm(form); Locale locale = getLocale(); refListGraphType = initRefListGraphType(plugin, locale); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_RECAP, recap); model.put(MARK_GRAPH_TYPE_REF_LIST, refListGraphType); model.put(MARK_WEBAPP_URL, AppPathService.getBaseUrl(request)); model.put(MARK_LOCALE, AdminUserService.getLocale(request).getLanguage()); setPageTitleProperty(PROPERTY_MODIFY_RECAP_TITLE); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MODIFY_RECAP, locale, model); return getAdminPage(template.getHtml()); } /** * Get the request data and if there is no error insert the data in the recap specified in parameter. * return null if there is no error or else return the error page url * @param request the request * @param recap the recap * @return null if there is no error or else return the error page url */ private String getRecapData(HttpServletRequest request, Recap recap) { int nIdGraphType = -1; int nGraphThreeDimension = 0; String strBackUrl = request.getParameter(PARAMETER_BACK_URL); String strRecapMessage = request.getParameter(PARAMETER_RECAP_MESSAGE); String strRecapData = request.getParameter(PARAMETER_RECAP_DATA); String strGraph = request.getParameter(PARAMETER_GRAPH); String strIdGraphType = request.getParameter(PARAMETER_ID_GRAPH_TYPE); String strGraphThreeDimension = request.getParameter(PARAMETER_GRAPH_THREE_DIMENSION); //String strGraphLegende = request.getParameter( PARAMETER_GRAPH_LEGENDE ); //String strGraphValueLegende = request.getParameter( PARAMETER_GRAPH_VALUE_LEGENDE ); String strGraphLabel = request.getParameter(PARAMETER_GRAPH_LABEL_VALUE); GraphType graphType = null; String strFieldError = EMPTY_STRING; if ((strBackUrl == null) || strBackUrl.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_BACK_URL; } else if ((strRecapMessage == null) || strRecapMessage.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_RECAP_MESSAGE; } if (!strFieldError.equals(EMPTY_STRING)) { Object[] tabRequiredFields = { I18nService.getLocalizedString(strFieldError, getLocale()) }; return AdminMessageService.getMessageUrl(request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP); } recap.setBackUrl(strBackUrl); recap.setRecapMessage(strRecapMessage); if (strRecapData != null) { recap.setRecapData(true); } else { recap.setRecapData(false); } if (strGraph != null) { recap.setGraph(true); if ((strIdGraphType != null) && !strIdGraphType.trim().equals(EMPTY_STRING)) { try { nIdGraphType = Integer.parseInt(strIdGraphType); graphType = new GraphType(); graphType.setIdGraphType(nIdGraphType); recap.setGraphType(graphType); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if (strGraphThreeDimension != null) { try { nGraphThreeDimension = Integer.parseInt(strGraphThreeDimension); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if (nGraphThreeDimension == 0) { recap.setGraphThreeDimension(false); } else { recap.setGraphThreeDimension(true); } /*if ( strGraphLegende != null ) { recap.setGraphLegende( true ); recap.setGraphValueLegende( strGraphValueLegende ); } else { recap.setGraphLegende( false ); recap.setGraphValueLegende( null ); } */ if (strGraphLabel != null) { recap.setGraphLabelValue(true); } else { recap.setGraphLabelValue(false); } } else { recap.setGraph(false); recap.setGraphType(null); recap.setGraphLabelValue(false); recap.setGraphThreeDimension(false); recap.setGraphLegende(false); recap.setGraphValueLegende(null); } return null; // No error } /** * Perform the recap form modification * @param request The HTTP request * @return The URL to go after performing the action */ public String doModifyRecap(HttpServletRequest request) { if (request.getParameter(PARAMETER_CANCEL) == null) { String strIdRecap = request.getParameter(PARAMETER_ID_RECAP); int nIdRecap = -1; Recap recap = null; if (strIdRecap != null) { try { nIdRecap = Integer.parseInt(strIdRecap); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if (nIdRecap != -1) { recap = new Recap(); recap.setIdRecap(nIdRecap); String strError = getRecapData(request, recap); if (strError != null) { return strError; } RecapHome.update(recap, getPlugin()); } } return getJspManageForm(request); } /** * Gets the entry creation page * @param request The HTTP request * @return The entry creation page */ public String getCreateEntry(HttpServletRequest request) { Form form; Plugin plugin = getPlugin(); IEntry entry; String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; entry = FormUtils.createEntryByType(request, plugin); if ((entry == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getManageForm(request); } if ((strIdField != null) && !strIdField.equals(EMPTY_STRING)) { try { nIdField = Integer.parseInt(strIdField); Field field = new Field(); field.setIdField(nIdField); entry.setFieldDepend(field); } catch (NumberFormatException ne) { AppLogService.error(ne); return getJspManageForm(request); } } form = FormHome.findByPrimaryKey(_nIdForm, plugin); entry.setForm(form); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_ENTRY, entry); model.put(MARK_WEBAPP_URL, AppPathService.getBaseUrl(request)); model.put(MARK_LOCALE, AdminUserService.getLocale(request).getLanguage()); if (entry.getEntryType().getComment()) { setPageTitleProperty(PROPERTY_CREATE_COMMENT_TITLE); } else { setPageTitleProperty(PROPERTY_CREATE_QUESTION_TITLE); } HtmlTemplate template = AppTemplateService.getTemplate(entry.getTemplateCreate(), getLocale(), model); return getAdminPage(template.getHtml()); } /** * Perform the entry creation * @param request The HTTP request * @return The URL to go after performing the action */ public String doCreateEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); IEntry entry; Field fieldDepend = null; Form form; String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; if ((strIdField != null) && !strIdField.equals(EMPTY_STRING)) { try { nIdField = Integer.parseInt(strIdField); fieldDepend = new Field(); fieldDepend.setIdField(nIdField); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if ((request.getParameter(PARAMETER_CANCEL) == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { entry = FormUtils.createEntryByType(request, plugin); if (entry == null) { return getJspManageForm(request); } String strError = entry.getRequestData(request, getLocale()); if (strError != null) { return strError; } entry.setFieldDepend(fieldDepend); form = new Form(); form.setIdForm(_nIdForm); entry.setForm(form); entry.setIdEntry(EntryHome.create(entry, plugin)); if (entry.getFields() != null) { for (Field field : entry.getFields()) { field.setParentEntry(entry); FieldHome.create(field, plugin); } } if (request.getParameter(PARAMETER_APPLY) != null) { return getJspModifyEntry(request, entry.getIdEntry()); } } if (fieldDepend != null) { return getJspModifyField(request, fieldDepend.getIdField()); } else { return getJspModifyForm(request, _nIdForm); } } /** * Gets the entry modification page * @param request The HTTP request * @return The entry modification page */ public String getModifyEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); IEntry entry; ReferenceList refListRegularExpression; String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getManageForm(request); } _nIdEntry = nIdEntry; entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); List<Field> listField = new ArrayList<Field>(); for (Field field : entry.getFields()) { field = FieldHome.findByPrimaryKey(field.getIdField(), plugin); listField.add(field); } entry.setFields(listField); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_ENTRY, entry); _strCurrentPageIndex = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex); _nItemsPerPage = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, _nDefaultItemsPerPage); Paginator paginator = entry.getPaginator(_nItemsPerPage, AppPathService.getBaseUrl(request) + JSP_MODIFY_ENTRY + "?id_entry=" + nIdEntry, PARAMETER_PAGE_INDEX, _strCurrentPageIndex); if (paginator != null) { model.put(MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPage); model.put(MARK_NUMBER_ITEMS, paginator.getItemsCount()); model.put(MARK_LIST, paginator.getPageItems()); model.put(MARK_PAGINATOR, paginator); } refListRegularExpression = entry.getReferenceListRegularExpression(entry, plugin); if (refListRegularExpression != null) { model.put(MARK_REGULAR_EXPRESSION_LIST_REF_LIST, refListRegularExpression); } model.put(MARK_WEBAPP_URL, AppPathService.getBaseUrl(request)); model.put(MARK_LOCALE, AdminUserService.getLocale(request).getLanguage()); if (entry.getEntryType().getComment()) { setPageTitleProperty(PROPERTY_MODIFY_COMMENT_TITLE); } else if (entry.getEntryType().getGroup()) { setPageTitleProperty(PROPERTY_MODIFY_GROUP_TITLE); } else { setPageTitleProperty(PROPERTY_MODIFY_QUESTION_TITLE); } HtmlTemplate template = AppTemplateService.getTemplate(entry.getTemplateModify(), getLocale(), model); return getAdminPage(template.getHtml()); } /** * Perform the entry modification * @param request The HTTP request * @return The URL to go after performing the action */ public String doModifyEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); IEntry entry; String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getManageForm(request); } entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); if (request.getParameter(PARAMETER_CANCEL) == null) { String strError = entry.getRequestData(request, getLocale()); if (strError != null) { return strError; } EntryHome.update(entry, plugin); if (entry.getFields() != null) { for (Field field : entry.getFields()) { FieldHome.update(field, plugin); } } } if (request.getParameter(PARAMETER_APPLY) == null) { if (entry.getFieldDepend() != null) { return getJspModifyField(request, entry.getFieldDepend().getIdField()); } else { return getJspModifyForm(request, _nIdForm); } } else { return getJspModifyEntry(request, nIdEntry); } } /** * Gets the confirmation page of delete entry * @param request The HTTP request * @return the confirmation page of delete entry */ public String getConfirmRemoveEntry(HttpServletRequest request) { IEntry entry; Plugin plugin = getPlugin(); String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); String strMessage; int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); return getJspManageForm(request); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getJspManageForm(request); } entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); if (entry.getEntryType().getGroup()) { if (entry.getChildren().size() != 0) { strMessage = MESSAGE_CONFIRM_REMOVE_GROUP_WITH_ENTRY; } else { strMessage = MESSAGE_CONFIRM_REMOVE_GROUP_WITH_ANY_ENTRY; } } else { strMessage = MESSAGE_CONFIRM_REMOVE_ENTRY; } UrlItem url = new UrlItem(JSP_DO_REMOVE_ENTRY); url.addParameter(PARAMETER_ID_ENTRY, strIdEntry + "#list"); return AdminMessageService.getMessageUrl(request, strMessage, url.getUrl(), AdminMessage.TYPE_CONFIRMATION); } /** * Perform the entry supression * @param request The HTTP request * @return The URL to go after performing the action */ public String doRemoveEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); IEntry entry; int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); return getJspManageForm(request); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getJspManageForm(request); } entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); ArrayList<String> listErrors = new ArrayList<String>(); if (!EntryRemovalListenerService.getService().checkForRemoval(strIdEntry, listErrors, getLocale())) { String strCause = AdminMessageService.getFormattedList(listErrors, getLocale()); Object[] args = { strCause }; return AdminMessageService.getMessageUrl(request, MESSAGE_CANT_REMOVE_ENTRY, args, AdminMessage.TYPE_STOP); } EntryHome.remove(nIdEntry, plugin); if (entry.getFieldDepend() != null) { return getJspModifyField(request, entry.getFieldDepend().getIdField()); } else { return getJspModifyForm(request, _nIdForm); } } /** * copy the entry whose key is specified in the Http request * @param request The HTTP request * @return The URL to go after performing the action */ public String doCopyEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); IEntry entry; int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); return getJspManageForm(request); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getJspManageForm(request); } entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); Object[] tabEntryTileCopy = { entry.getTitle() }; String strTitleCopyEntry = I18nService.getLocalizedString(PROPERTY_COPY_ENTRY_TITLE, tabEntryTileCopy, getLocale()); if (strTitleCopyEntry != null) { entry.setTitle(strTitleCopyEntry); } EntryHome.copy(entry, plugin); if (entry.getFieldDepend() != null) { return getJspModifyField(request, entry.getFieldDepend().getIdField()); } else { return getJspModifyForm(request, _nIdForm); } } /** * Gets the list of questions group * @param request The HTTP request * @return the list of questions group */ public String getMoveEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); IEntry entry; List<IEntry> listGroup; EntryFilter filter; String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getManageForm(request); } _nIdEntry = nIdEntry; entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); //recup group filter = new EntryFilter(); filter.setIdForm(entry.getForm().getIdForm()); filter.setIdIsGroup(EntryFilter.FILTER_TRUE); listGroup = EntryHome.getEntryList(filter, plugin); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_ENTRY, entry); model.put(MARK_ENTRY_LIST, listGroup); setPageTitleProperty(EMPTY_STRING); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MOVE_ENTRY, getLocale(), model); return getAdminPage(template.getHtml()); } /** * Move the entry in the questions group specified in parameter * @param request The HTTP request * @return The URL to go after performing the action */ public String doMoveEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); IEntry entryToMove; IEntry entryGroup; String strIdEntryGroup = request.getParameter(PARAMETER_ID_ENTRY); int nIdEntryGroup = -1; if ((strIdEntryGroup != null) && !strIdEntryGroup.equals(EMPTY_STRING)) { try { nIdEntryGroup = Integer.parseInt(strIdEntryGroup); } catch (NumberFormatException ne) { AppLogService.error(ne); return getJspManageForm(request); } } if (nIdEntryGroup == -1) { return AdminMessageService.getMessageUrl(request, MESSAGE_SELECT_GROUP, AdminMessage.TYPE_STOP); } if (!RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getJspManageForm(request); } int nPosition = 1; entryToMove = EntryHome.findByPrimaryKey(_nIdEntry, plugin); entryGroup = EntryHome.findByPrimaryKey(nIdEntryGroup, plugin); if ((entryGroup.getChildren() != null) && (entryGroup.getChildren().size() != 0)) { nPosition = entryGroup.getChildren().get(entryGroup.getChildren().size() - 1).getPosition() + 1; entryToMove.setPosition(nPosition); } entryToMove.setParent(entryGroup); EntryHome.update(entryToMove, plugin); return getJspModifyForm(request, _nIdForm); } /** * Move up the entry * @param request The HTTP request * @return The URL to go after performing the action */ public String doMoveUpEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); IEntry entry; String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); return getJspManageForm(request); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getJspManageForm(request); } entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); List<IEntry> listEntry; EntryFilter filter = new EntryFilter(); filter.setIdForm(entry.getForm().getIdForm()); if (entry.getParent() != null) { filter.setIdEntryParent(entry.getParent().getIdEntry()); } else { filter.setEntryParentNull(EntryFilter.FILTER_TRUE); } if (entry.getFieldDepend() != null) { filter.setIdFieldDepend(entry.getFieldDepend().getIdField()); } else { filter.setFieldDependNull(EntryFilter.FILTER_TRUE); } listEntry = EntryHome.getEntryList(filter, plugin); int nIndexEntry = FormUtils.getIndexEntryInTheEntryList(nIdEntry, listEntry); if (nIndexEntry != 0) { int nNewPosition; IEntry entryToInversePosition; entryToInversePosition = listEntry.get(nIndexEntry - 1); entryToInversePosition = EntryHome.findByPrimaryKey(entryToInversePosition.getIdEntry(), plugin); nNewPosition = entryToInversePosition.getPosition(); entryToInversePosition.setPosition(entry.getPosition()); entry.setPosition(nNewPosition); EntryHome.update(entry, plugin); EntryHome.update(entryToInversePosition, plugin); } if (entry.getFieldDepend() != null) { return getJspModifyField(request, entry.getFieldDepend().getIdField()); } else { return getJspModifyForm(request, _nIdForm); } } /** * Move down the entry * @param request The HTTP request * @return The URL to go after performing the action */ public String doMoveDownEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); IEntry entry; String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); return getJspManageForm(request); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getJspManageForm(request); } entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); List<IEntry> listEntry; EntryFilter filter = new EntryFilter(); filter.setIdForm(entry.getForm().getIdForm()); if (entry.getParent() != null) { filter.setIdEntryParent(entry.getParent().getIdEntry()); } else { filter.setEntryParentNull(EntryFilter.FILTER_TRUE); } if (entry.getFieldDepend() != null) { filter.setIdFieldDepend(entry.getFieldDepend().getIdField()); } else { filter.setFieldDependNull(EntryFilter.FILTER_TRUE); } listEntry = EntryHome.getEntryList(filter, plugin); int nIndexEntry = FormUtils.getIndexEntryInTheEntryList(nIdEntry, listEntry); if (nIndexEntry != (listEntry.size() - 1)) { int nNewPosition; IEntry entryToInversePosition; entryToInversePosition = listEntry.get(nIndexEntry + 1); entryToInversePosition = EntryHome.findByPrimaryKey(entryToInversePosition.getIdEntry(), plugin); nNewPosition = entryToInversePosition.getPosition(); entryToInversePosition.setPosition(entry.getPosition()); entry.setPosition(nNewPosition); EntryHome.update(entry, plugin); EntryHome.update(entryToInversePosition, plugin); } if (entry.getFieldDepend() != null) { return getJspModifyField(request, entry.getFieldDepend().getIdField()); } else { return getJspModifyForm(request, _nIdForm); } } /** * Move out the entry * @param request The HTTP request * @return The URL to go after performing the action */ public String doMoveOutEntry(HttpServletRequest request) { Plugin plugin = getPlugin(); IEntry entry; String strIdEntry = request.getParameter(PARAMETER_ID_ENTRY); int nIdEntry = -1; if ((strIdEntry != null) && !strIdEntry.equals(EMPTY_STRING)) { try { nIdEntry = Integer.parseInt(strIdEntry); } catch (NumberFormatException ne) { AppLogService.error(ne); return getJspManageForm(request); } } if ((nIdEntry == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getJspManageForm(request); } entry = EntryHome.findByPrimaryKey(nIdEntry, plugin); entry.setParent(null); List<IEntry> listEntry; EntryFilter filter = new EntryFilter(); filter.setEntryParentNull(EntryFilter.FILTER_TRUE); filter.setIdForm(entry.getForm().getIdForm()); listEntry = EntryHome.getEntryList(filter, plugin); entry.setPosition(listEntry.get(listEntry.size() - 1).getPosition() + 1); EntryHome.update(entry, plugin); return getJspModifyForm(request, _nIdForm); } /** * Gets the confirmation page of disable form * @param request The HTTP request * @return the confirmation page of disable form */ public String getConfirmDisableForm(HttpServletRequest request) { return getConfirmDisable(request, false); } /** * Gets the confirmation page of disable auto published form * @param request The HTTP request * @return the confirmation page of disable form */ public String getConfirmDisableAutoForm(HttpServletRequest request) { return getConfirmDisable(request, true); } /** * Gets the confirmation page of disable form * @param request The HTTP request * @param bAutoPublished If the form is auto published * @return the confirmation page of disable form */ private String getConfirmDisable(HttpServletRequest request, boolean bAutoPublished) { String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nCountPortlet = 0; int nIdForm = -1; String strMessage; if ((strIdForm == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_CHANGE_STATE, getUser())) { return getHomeUrl(request); } try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } nCountPortlet = FormPortletHome.getCountPortletByIdForm(nIdForm); if (nCountPortlet == 0) { strMessage = MESSAGE_CONFIRM_DISABLE_FORM; } else { strMessage = MESSAGE_CONFIRM_DISABLE_FORM_WITH_PORTLET; } String strJspUrl = JSP_DO_DISABLE_FORM; if (bAutoPublished) { strJspUrl = JSP_DO_DISABLE_AUTO_FORM; } UrlItem url = new UrlItem(strJspUrl); url.addParameter(PARAMETER_ID_FORM, strIdForm); return AdminMessageService.getMessageUrl(request, strMessage, url.getUrl(), AdminMessage.TYPE_CONFIRMATION); } /** * Perform disable form * @param request The HTTP request * @return The URL to go after performing the action */ public String doDisableForm(HttpServletRequest request) { return doDisable(request, false); } /** * Perform disable auto published form * @param request The HTTP request * @return The URL to go after performing the action */ public String doDisableAutoForm(HttpServletRequest request) { return doDisable(request, true); } /** * Perform disable form * @param request The HTTP request * @param bAutoPublished If the form is auto published * @return The URL to go after performing the action */ private String doDisable(HttpServletRequest request, boolean bAutoPublished) { Form form; Plugin plugin = getPlugin(); String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nIdForm = -1; if ((strIdForm == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_CHANGE_STATE, getUser())) { return getHomeUrl(request); } try { nIdForm = Integer.parseInt(strIdForm); form = FormHome.findByPrimaryKey(nIdForm, plugin); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } if (nIdForm != -1) { form.setActive(false); if (bAutoPublished) { form.setAutoPublicationActive(false); } FormHome.update(form, getPlugin()); } return getJspManageForm(request); } /** * Perform enable form * @param request The HTTP request * @return The URL to go after performing the action */ public String doEnableForm(HttpServletRequest request) { return doEnable(request, false); } /** * Perform enable auto published form * @param request The HTTP request * @return The URL to go after performing the action */ public String doEnableAutoForm(HttpServletRequest request) { return doEnable(request, true); } /** * Perform enable form * @param request The HTTP request * @param bAutoPublished If the form is auto published * @return The URL to go after performing the action */ private String doEnable(HttpServletRequest request, boolean bAutoPublished) { Form form; Plugin plugin = getPlugin(); String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nIdForm = -1; if ((strIdForm == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_CHANGE_STATE, getUser())) { return getHomeUrl(request); } try { nIdForm = Integer.parseInt(strIdForm); form = FormHome.findByPrimaryKey(nIdForm, plugin); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } if (nIdForm != -1) { // No need to check date begin validity if ((form.getDateEndDisponibility() != null) && form.getDateEndDisponibility().before(FormUtils.getCurrentDate())) { return AdminMessageService.getMessageUrl(request, MESSAGE_CANT_ENABLE_FORM_DATE_END_DISPONIBILITY_BEFORE_CURRENT_DATE, AdminMessage.TYPE_STOP); } form.setActive(true); if (bAutoPublished) { form.setAutoPublicationActive(true); } FormHome.update(form, getPlugin()); } return getJspManageForm(request); } /** * return url of the jsp manage form * @param request The HTTP request * @return url of the jsp manage form */ private String getJspManageForm(HttpServletRequest request) { return AppPathService.getBaseUrl(request) + JSP_MANAGE_FORM; } /** * return url of the jsp modify form * @param request The HTTP request * @param nIdForm the key of form to modify * @return return url of the jsp modify form */ private String getJspModifyForm(HttpServletRequest request, int nIdForm) { return AppPathService.getBaseUrl(request) + JSP_MODIFY_FORM + "?id_form=" + nIdForm; } /** * return url of the jsp test form * @param request The HTTP request * @param nIdForm the key of form to modify * @return return url of the jsp modify form */ private String getJspTestForm(HttpServletRequest request, int nIdForm) { return AppPathService.getBaseUrl(request) + JSP_TEST_FORM + "?id_form=" + nIdForm + "&session=session"; } /** * return url of the jsp modify entry * @param request The HTTP request * @param nIdEntry the key of the entry to modify * @return return url of the jsp modify entry */ private String getJspModifyEntry(HttpServletRequest request, int nIdEntry) { return AppPathService.getBaseUrl(request) + JSP_MODIFY_ENTRY + "?id_entry=" + nIdEntry; } /** * return url of the jsp modify field * @param request The HTTP request * @param nIdField the key of the field to modify * @return return url of the jsp modify field */ private String getJspModifyField(HttpServletRequest request, int nIdField) { return AppPathService.getBaseUrl(request) + JSP_MODIFY_FIELD + "?id_field=" + nIdField; } /** * return url of the jsp modify form * @param request The HTTP request * @param nIdForm the key of form to modify * @return return url of the jsp modify form */ public static String getJspManageOutputProcessForm(HttpServletRequest request, int nIdForm, String parameterName, String parameterValue) { return AppPathService.getBaseUrl(request) + JSP_MANAGE_OUTPUT_PROCESS_FORM + "?id_form=" + nIdForm + "&" + parameterName + "=" + parameterValue; } /** * Init reference list whidth the different state of form * @param plugin the plugin * @param locale the locale * @return reference list of form state */ private ReferenceList initRefListActive(Plugin plugin, Locale locale) { ReferenceList refListState = new ReferenceList(); String strAll = I18nService.getLocalizedString(PROPERTY_ALL, locale); String strYes = I18nService.getLocalizedString(PROPERTY_YES, locale); String strNo = I18nService.getLocalizedString(PROPERTY_NO, locale); refListState.addItem(-1, strAll); refListState.addItem(1, strYes); refListState.addItem(0, strNo); return refListState; } /** * Init reference list whidth the different entry type * @param plugin the plugin * @param locale the locale * @param entryTypeGroup the entry type who represent a group * @return reference list of entry type */ private ReferenceList initRefListEntryType(Plugin plugin, Locale locale, EntryType entryTypeGroup) { ReferenceList refListEntryType = new ReferenceList(); List<EntryType> listEntryType = EntryTypeHome.getList(plugin); for (EntryType entryType : listEntryType) { if (!entryType.getGroup()) { refListEntryType.addItem(entryType.getIdType(), entryType.getTitle()); } else { entryTypeGroup.setIdType(entryType.getIdType()); } } return refListEntryType; } /** * Init reference list whidth the different graph type * @param plugin the plugin * @param locale the locale * @return reference list of graph type */ private ReferenceList initRefListGraphType(Plugin plugin, Locale locale) { ReferenceList refListGraphType = new ReferenceList(); List<GraphType> listGraphType = GraphTypeHome.getList(plugin); for (GraphType graphType : listGraphType) { refListGraphType.addItem(graphType.getIdGraphType(), graphType.getTitle()); } return refListGraphType; } /** * Get the request data and if there is no error insert the data in the field specified in parameter. * return null if there is no error or else return the error page url * @param request the request * @param field field * @return null if there is no error or else return the error page url */ private String getFieldData(HttpServletRequest request, Field field) { String strTitle = request.getParameter(PARAMETER_TITLE); String strValue = request.getParameter(PARAMETER_VALUE); String strDefaultValue = request.getParameter(PARAMETER_DEFAULT_VALUE); String strNoDisplayTitle = request.getParameter(PARAMETER_NO_DISPLAY_TITLE); String strFieldError = EMPTY_STRING; if ((strTitle == null) || strTitle.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_TITLE_FIELD; } else if (strValue == null || EMPTY_STRING.equals(strValue)) { strFieldError = FIELD_VALUE_FIELD; } else if (!StringUtil.checkCodeKey(strValue)) { return AdminMessageService.getMessageUrl(request, MESSAGE_FIELD_VALUE_FIELD, AdminMessage.TYPE_STOP); } if (!strFieldError.equals(EMPTY_STRING)) { Object[] tabRequiredFields = { I18nService.getLocalizedString(strFieldError, getLocale()) }; return AdminMessageService.getMessageUrl(request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP); } field.setTitle(strTitle); field.setValue(strValue); if (strDefaultValue == null) { field.setDefaultValue(false); } else { field.setDefaultValue(true); } if (strNoDisplayTitle == null) { field.setNoDisplayTitle(false); } else { field.setNoDisplayTitle(true); } return null; // No error } /** * Gets the field creation page * @param request The HTTP request * @return the field creation page */ public String getCreateField(HttpServletRequest request) { Field field = new Field(); IEntry entry = EntryHome.findByPrimaryKey(_nIdEntry, getPlugin()); if ((entry == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getManageForm(request); } field.setParentEntry(entry); Map<String, Object> model = new HashMap<String, Object>(); Locale locale = getLocale(); if (request.getParameter(PARAMETER_OPTION_NO_DISPLAY_TITLE) != null) { model.put(MARK_OPTION_NO_DISPLAY_TITLE, true); } else { model.put(MARK_OPTION_NO_DISPLAY_TITLE, false); } model.put(MARK_FIELD, field); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_CREATE_FIELD, locale, model); setPageTitleProperty(PROPERTY_CREATE_FIELD_TITLE); return getAdminPage(template.getHtml()); } /** * Gets the field modification page * @param request The HTTP request * @param bWithConditionalQuestion true if the field is associate to conditionals questions * @return the field modification page */ public String getModifyField(HttpServletRequest request, boolean bWithConditionalQuestion) { Field field = null; IEntry entry = null; Plugin plugin = getPlugin(); String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; if (request.getParameter(PARAMETER_ID_FIELD) == null) { return getHomeUrl(request); } try { nIdField = Integer.parseInt(strIdField); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } if (nIdField != -1) { field = FieldHome.findByPrimaryKey(nIdField, getPlugin()); } if ((field == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getManageForm(request); } entry = EntryHome.findByPrimaryKey(field.getParentEntry().getIdEntry(), plugin); field.setParentEntry(entry); HashMap<String, Object> model = new HashMap<String, Object>(); Locale locale = getLocale(); model.put(MARK_FIELD, field); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MODIFY_FIELD, locale, model); if (bWithConditionalQuestion) { ReferenceList refEntryType; refEntryType = initRefListEntryType(plugin, locale, new EntryType()); _strCurrentPageIndexConditionalEntry = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndexConditionalEntry); _nItemsPerPageConditionalEntry = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPageConditionalEntry, _nDefaultItemsPerPage); Paginator paginator = new Paginator(field.getConditionalQuestions(), _nItemsPerPageConditionalEntry, AppPathService.getBaseUrl(request) + JSP_MODIFY_FIELD + "?id_field=" + nIdField, PARAMETER_PAGE_INDEX, _strCurrentPageIndexConditionalEntry); model.put(MARK_ENTRY_TYPE_REF_LIST, refEntryType); model.put(MARK_PAGINATOR, paginator); model.put(MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPageEntry); model.put(MARK_ENTRY_LIST, paginator.getPageItems()); model.put(MARK_NUMBER_ITEMS, paginator.getItemsCount()); template = AppTemplateService.getTemplate(TEMPLATE_MODIFY_FIELD_WITH_CONDITIONAL_QUESTION, locale, model); } setPageTitleProperty(PROPERTY_MODIFY_FIELD_TITLE); return getAdminPage(template.getHtml()); } /** * Perform creation field * @param request The HTTP request * @return The URL to go after performing the action */ public String doCreateField(HttpServletRequest request) { if ((request.getParameter(PARAMETER_CANCEL) == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { IEntry entry = new Entry(); entry.setIdEntry(_nIdEntry); Field field = new Field(); field.setParentEntry(entry); String strError = getFieldData(request, field); if (strError != null) { return strError; } FieldHome.create(field, getPlugin()); } return getJspModifyEntry(request, _nIdEntry); } /** * Perform modification field * @param request The HTTP request * @return The URL to go after performing the action */ public String doModifyField(HttpServletRequest request) { Plugin plugin = getPlugin(); Field field = null; String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; if (strIdField != null) { try { nIdField = Integer.parseInt(strIdField); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if ((nIdField != -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { field = FieldHome.findByPrimaryKey(nIdField, plugin); if (request.getParameter(PARAMETER_CANCEL) == null) { String strError = getFieldData(request, field); if (strError != null) { return strError; } FieldHome.update(field, getPlugin()); } } else { return getJspManageForm(request); } if (request.getParameter(PARAMETER_APPLY) == null) { return getJspModifyEntry(request, field.getParentEntry().getIdEntry()); } else { return getJspModifyField(request, nIdField); } } /** * Gets the confirmation page of delete field * @param request The HTTP request * @return the confirmation page of delete field */ public String getConfirmRemoveField(HttpServletRequest request) { if ((request.getParameter(PARAMETER_ID_FIELD) == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getHomeUrl(request); } String strIdField = request.getParameter(PARAMETER_ID_FIELD); UrlItem url = new UrlItem(JSP_DO_REMOVE_FIELD); url.addParameter(PARAMETER_ID_FIELD, strIdField + "#list"); return AdminMessageService.getMessageUrl(request, MESSAGE_CONFIRM_REMOVE_FIELD, url.getUrl(), AdminMessage.TYPE_CONFIRMATION); } /** * Perform suppression field * @param request The HTTP request * @return The URL to go after performing the action */ public String doRemoveField(HttpServletRequest request) { String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; if ((strIdField == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getHomeUrl(request); } try { nIdField = Integer.parseInt(strIdField); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } if (nIdField != -1) { FieldHome.remove(nIdField, getPlugin()); return getJspModifyEntry(request, _nIdEntry); } return getJspManageForm(request); } /** * Move up the field * @param request The HTTP request * @return The URL to go after performing the action */ public String doMoveUpField(HttpServletRequest request) { Plugin plugin = getPlugin(); List<Field> listField; Field field; String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; if ((request.getParameter(PARAMETER_ID_FIELD) == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getHomeUrl(request); } try { nIdField = Integer.parseInt(strIdField); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } field = FieldHome.findByPrimaryKey(nIdField, plugin); listField = FieldHome.getFieldListByIdEntry(field.getParentEntry().getIdEntry(), plugin); int nIndexField = FormUtils.getIndexFieldInTheFieldList(nIdField, listField); if (nIndexField != 0) { int nNewPosition; Field fieldToInversePosition; fieldToInversePosition = listField.get(nIndexField - 1); nNewPosition = fieldToInversePosition.getPosition(); fieldToInversePosition.setPosition(field.getPosition()); field.setPosition(nNewPosition); FieldHome.update(field, plugin); FieldHome.update(fieldToInversePosition, plugin); } return getJspModifyEntry(request, _nIdEntry); } /** * Move down the field * @param request The HTTP request * @return The URL to go after performing the action */ public String doMoveDownField(HttpServletRequest request) { Plugin plugin = getPlugin(); List<Field> listField; Field field; String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; if ((request.getParameter(PARAMETER_ID_FIELD) == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getHomeUrl(request); } try { nIdField = Integer.parseInt(strIdField); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } field = FieldHome.findByPrimaryKey(nIdField, plugin); listField = FieldHome.getFieldListByIdEntry(field.getParentEntry().getIdEntry(), plugin); int nIndexField = FormUtils.getIndexFieldInTheFieldList(nIdField, listField); if (nIndexField != (listField.size() - 1)) { int nNewPosition; Field fieldToInversePosition; fieldToInversePosition = listField.get(nIndexField + 1); nNewPosition = fieldToInversePosition.getPosition(); fieldToInversePosition.setPosition(field.getPosition()); field.setPosition(nNewPosition); FieldHome.update(field, plugin); FieldHome.update(fieldToInversePosition, plugin); } return getJspModifyEntry(request, _nIdEntry); } /** * Delete association between field and regular expression * @param request the Http Request * @return The URL to go after performing the action */ public String doRemoveRegularExpression(HttpServletRequest request) { String strIdExpression = request.getParameter(PARAMETER_ID_EXPRESSION); String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; int nIdExpression = -1; if ((strIdExpression != null) && (strIdField != null) && (RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser()))) { try { nIdField = Integer.parseInt(strIdField); nIdExpression = Integer.parseInt(strIdExpression); } catch (NumberFormatException ne) { AppLogService.error(ne); } if ((nIdField != -1) && (nIdExpression != -1)) { FieldHome.removeVerifyBy(nIdField, nIdExpression, getPlugin()); } } return getJspModifyEntry(request, _nIdEntry); } /** * insert association between field and regular expression * @param request the Http Request * @return The URL to go after performing the action */ public String doInsertRegularExpression(HttpServletRequest request) { String strIdExpression = request.getParameter(PARAMETER_ID_EXPRESSION); String strIdField = request.getParameter(PARAMETER_ID_FIELD); int nIdField = -1; int nIdExpression = -1; if ((strIdExpression != null) && (strIdField != null) && (RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + _nIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser()))) { try { nIdField = Integer.parseInt(strIdField); nIdExpression = Integer.parseInt(strIdExpression); } catch (NumberFormatException ne) { AppLogService.error(ne); } if ((nIdField != -1) && (nIdExpression != -1)) { FieldHome.createVerifyBy(nIdField, nIdExpression, getPlugin()); } } return getJspModifyEntry(request, _nIdEntry); } /** * Gets the form test page * @param request the http request * @return the form test page */ public String getTestForm(HttpServletRequest request) { if (request.getParameter(PARAMETER_SESSION) == null) { _listFormSubmitTest = new ArrayList<FormSubmit>(); } Plugin plugin = getPlugin(); HtmlTemplate template; String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nIdForm = -1; Form form; if ((strIdForm != null) && !strIdForm.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } } if ((nIdForm == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_TEST, getUser())) { return getManageForm(request); } form = FormHome.findByPrimaryKey(nIdForm, plugin); Locale locale = getLocale(); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_FORM, form); String strUrlAction = JSP_DO_TEST_FORM; if (form.isSupportHTTPS() && AppHTTPSService.isHTTPSSupportEnabled()) { strUrlAction = AppHTTPSService.getHTTPSUrl(request) + strUrlAction; } model.put(MARK_STR_FORM, FormUtils.getHtmlForm(form, strUrlAction, plugin, locale)); model.put(MARK_EXPORT_FORMAT_REF_LIST, ExportFormatHome.getListExport(plugin)); setPageTitleProperty(EMPTY_STRING); template = AppTemplateService.getTemplate(TEMPLATE_HTML_TEST_FORM, locale, model); return getAdminPage(template.getHtml()); } /** * if there is no error perform in session the response of the form * else return the error * @param request the http request * @return The URL to go after performing the action */ public String doTestForm(HttpServletRequest request) { Plugin plugin = getPlugin(); List<IEntry> listEntryFirstLevel; EntryFilter filter; String strIdForm = request.getParameter(PARAMETER_ID_FORM); String strRequirement = request.getParameter(PARAMETER_REQUIREMENT); String strErrorMessage = null; FormError formError = null; int nIdForm = -1; Form form; if ((strIdForm != null) && !strIdForm.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); } } if ((nIdForm == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_TEST, getUser())) { return getManageForm(request); } form = FormHome.findByPrimaryKey(nIdForm, plugin); if (form.isActiveRequirement() && (strRequirement == null)) { return AdminMessageService.getMessageUrl(request, MESSAGE_REQUIREMENT_ERROR, AdminMessage.TYPE_STOP); } if (form.isActiveCaptcha() && PluginService.isPluginEnable(JCAPTCHA_PLUGIN)) { CaptchaSecurityService captchaSecurityService = new CaptchaSecurityService(); if (!captchaSecurityService.validate(request)) { return AdminMessageService.getMessageUrl(request, MESSAGE_CAPTCHA_ERROR, AdminMessage.TYPE_STOP); } } filter = new EntryFilter(); filter.setIdForm(nIdForm); filter.setEntryParentNull(EntryFilter.FILTER_TRUE); filter.setFieldDependNull(EntryFilter.FILTER_TRUE); filter.setIdIsComment(EntryFilter.FILTER_FALSE); listEntryFirstLevel = EntryHome.getEntryList(filter, plugin); Locale locale = getLocale(); //create form response FormSubmit formSubmit = new FormSubmit(); formSubmit.setForm(form); formSubmit.setDateResponse(FormUtils.getCurrentTimestamp()); if (form.isActiveStoreAdresse()) { formSubmit.setIp(request.getRemoteAddr()); } List<Response> listResponse = new ArrayList<Response>(); formSubmit.setListResponse(listResponse); for (IEntry entry : listEntryFirstLevel) { formError = FormUtils.getResponseEntry(request, entry.getIdEntry(), plugin, formSubmit, false, locale); if (formError != null) { if (formError.isMandatoryError()) { Object[] tabRequiredFields = { formError.getTitleQuestion() }; strErrorMessage = AdminMessageService.getMessageUrl(request, MESSAGE_MANDATORY_QUESTION, tabRequiredFields, AdminMessage.TYPE_STOP); } else { Object[] tabRequiredFields = { formError.getTitleQuestion(), formError.getErrorMessage() }; strErrorMessage = AdminMessageService.getMessageUrl(request, MESSAGE_FORM_ERROR, tabRequiredFields, AdminMessage.TYPE_STOP); } return strErrorMessage; } } _listFormSubmitTest.add(formSubmit); return getJspTestForm(request, nIdForm); } /** * write in the http response the export file of all response submit who are * save during the test. * if there is no response return a error * @param request the http request * @param response The http response * @return The URL to go after performing the action */ public String doExportResponseTestForm(HttpServletRequest request, HttpServletResponse response) { if (request.getParameter(PARAMETER_CANCEL) == null) { Plugin plugin = getPlugin(); Locale locale = getLocale(); String strIdForm = request.getParameter(PARAMETER_ID_FORM); String strIdExportFormat = request.getParameter(PARAMETER_ID_EXPORT_FORMAT); int nIdForm = -1; int nIdExportFormat = -1; Form form; ExportFormat exportFormat; if ((strIdForm != null) && (strIdExportFormat != null) && !strIdForm.equals(EMPTY_STRING) && !strIdExportFormat.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); nIdExportFormat = Integer.parseInt(strIdExportFormat); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } } if ((nIdForm == -1) || (nIdExportFormat == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_TEST, getUser())) { return getManageForm(request); } exportFormat = ExportFormatHome.findByPrimaryKey(nIdExportFormat, plugin); form = FormHome.findByPrimaryKey(nIdForm, plugin); if ((_listFormSubmitTest != null) && (_listFormSubmitTest.size() != 0)) { XmlTransformerService xmlTransformerService = new XmlTransformerService(); String strXmlSource = XmlUtil.getXmlHeader() + FormUtils.getXmlResponses(request, form, _listFormSubmitTest, locale, plugin); String strXslUniqueId = XSL_UNIQUE_PREFIX_ID + nIdExportFormat; String strFileOutPut = xmlTransformerService.transformBySourceWithXslCache(strXmlSource, exportFormat.getXsl(), strXslUniqueId, null, null); byte[] byteFileOutPut = strFileOutPut.getBytes(); try { String strFormatExtension = exportFormat.getExtension().trim(); String strFileName = form.getTitle() + "." + strFormatExtension; FormUtils.addHeaderResponse(request, response, strFileName, strFormatExtension); response.setContentLength((int) byteFileOutPut.length); OutputStream os = response.getOutputStream(); os.write(byteFileOutPut); os.close(); } catch (IOException e) { AppLogService.error(e); } } else { return AdminMessageService.getMessageUrl(request, MESSAGE_NO_RESPONSE, AdminMessage.TYPE_STOP); } } return getJspManageForm(request); } /** * Gets the form result page * @param request the http request * @return the form test page */ public String getResult(HttpServletRequest request) { Plugin plugin = getPlugin(); Locale locale = getLocale(); HtmlTemplate template; ResponseFilter filter = new ResponseFilter(); int nNumberResponse = 0; Date dFistResponseDate = null; Date dLastResponseDate = null; int nIdForm = -1; Form form; String strIdForm = request.getParameter(PARAMETER_ID_FORM); String strFistResponseDateFilter = request.getParameter(PARAMETER_FIRST_RESPONSE_DATE_FILTER); String strLastResponseDateFilter = request.getParameter(PARAMETER_LAST_RESPONSE_DATE_FILTER); String strTimesUnit = request.getParameter(PARAMETER_TIMES_UNIT); Timestamp tFistResponseDateFilter = null; Timestamp tLastResponseDateFilter = null; if (strFistResponseDateFilter != null) { tFistResponseDateFilter = FormUtils .getDateFirstMinute(DateUtil.formatDate(strFistResponseDateFilter, locale), locale); } if (strLastResponseDateFilter != null) { tLastResponseDateFilter = FormUtils .getDateLastMinute(DateUtil.formatDate(strLastResponseDateFilter, locale), locale); } if ((strIdForm != null) && !strIdForm.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } } if ((nIdForm == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_VIEW_RESULT, getUser())) { return getManageForm(request); } form = FormHome.findByPrimaryKey(nIdForm, plugin); filter.setIdForm(nIdForm); filter.setDateFirst(tFistResponseDateFilter); filter.setDateLast(tLastResponseDateFilter); List<FormSubmit> listFormSubmit = FormSubmitHome.getFormSubmitList(filter, plugin); nNumberResponse = listFormSubmit.size(); if (nNumberResponse != 0) { dFistResponseDate = new Date(listFormSubmit.get(0).getDateResponse().getTime()); dLastResponseDate = new Date(listFormSubmit.get(nNumberResponse - 1).getDateResponse().getTime()); } if (strTimesUnit != null) { if (strTimesUnit.equals(FormUtils.CONSTANT_GROUP_BY_DAY)) { filter.setGroupbyDay(true); } else if (strTimesUnit.equals(FormUtils.CONSTANT_GROUP_BY_WEEK)) { filter.setGroupbyWeek(true); } else if (strTimesUnit.equals(FormUtils.CONSTANT_GROUP_BY_MONTH)) { filter.setGroupbyMonth(true); } } else { filter.setGroupbyDay(true); strTimesUnit = FormUtils.CONSTANT_GROUP_BY_DAY; } Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_LOCALE, AdminUserService.getLocale(request).getLanguage()); model.put(MARK_FORM, form); model.put(MARK_NUMBER_RESPONSE, nNumberResponse); model.put(MARK_FIRST_RESPONSE_DATE_FILTER, (tFistResponseDateFilter == null) ? null : new Date(tFistResponseDateFilter.getTime())); model.put(MARK_FIRST_RESPONSE_DATE, dFistResponseDate); model.put(MARK_LAST_RESPONSE_DATE_FILTER, (tLastResponseDateFilter == null) ? null : new Date(tLastResponseDateFilter.getTime())); model.put(MARK_LAST_RESPONSE_DATE, dLastResponseDate); model.put(MARK_TIMES_UNIT, strTimesUnit); model.put(MARK_EXPORT_FORMAT_REF_LIST, ExportFormatHome.getListExport(plugin)); setPageTitleProperty(PROPERTY_RESULT_PAGE_TITLE); template = AppTemplateService.getTemplate(TEMPLATE_RESULT, locale, model); return getAdminPage(template.getHtml()); } /** * write in the http response the export file of all response submit who verify the date filter * if there is no response return a error * @param request the http request * @param response The http response * @return The URL to go after performing the action */ public String doExportResult(HttpServletRequest request, HttpServletResponse response) { if (request.getParameter(PARAMETER_CANCEL) == null) { Plugin plugin = getPlugin(); Locale locale = getLocale(); String strIdForm = request.getParameter(PARAMETER_ID_FORM); String strIdExportFormat = request.getParameter(PARAMETER_ID_EXPORT_FORMAT); String strFistResponseDateFilter = request.getParameter(PARAMETER_FIRST_RESPONSE_DATE_FILTER); String strLastResponseDateFilter = request.getParameter(PARAMETER_LAST_RESPONSE_DATE_FILTER); Timestamp tFistResponseDateFilter = null; Timestamp tLastResponseDateFilter = null; if (strFistResponseDateFilter != null) { tFistResponseDateFilter = FormUtils .getDateFirstMinute(DateUtil.formatDate(strFistResponseDateFilter, locale), locale); } if (strLastResponseDateFilter != null) { tLastResponseDateFilter = FormUtils .getDateLastMinute(DateUtil.formatDate(strLastResponseDateFilter, locale), locale); } int nIdForm = -1; int nIdExportFormat = -1; ResponseFilter filter = new ResponseFilter(); Form form; ExportFormat exportFormat; if ((strIdForm != null) && (strIdExportFormat != null) && !strIdForm.equals(EMPTY_STRING) && !strIdExportFormat.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); nIdExportFormat = Integer.parseInt(strIdExportFormat); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } } if ((nIdForm == -1) || (nIdExportFormat == -1) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_VIEW_RESULT, getUser())) { return getManageForm(request); } exportFormat = ExportFormatHome.findByPrimaryKey(nIdExportFormat, plugin); form = FormHome.findByPrimaryKey(nIdForm, plugin); filter.setIdForm(nIdForm); filter.setDateFirst(tFistResponseDateFilter); filter.setDateLast(tLastResponseDateFilter); List<FormSubmit> listFormSubmit = FormSubmitHome.getFormSubmitList(filter, plugin); for (FormSubmit formSubmit : listFormSubmit) { filter = new ResponseFilter(); filter.setIdForm(formSubmit.getIdFormSubmit()); formSubmit.setListResponse(ResponseHome.getResponseList(filter, plugin)); } if ((listFormSubmit != null) && (listFormSubmit.size() != 0)) { XmlTransformerService xmlTransformerService = new XmlTransformerService(); String strXmlSource = XmlUtil.getXmlHeader() + FormUtils.getXmlResponses(request, form, listFormSubmit, locale, plugin); String strXslUniqueId = XSL_UNIQUE_PREFIX_ID + nIdExportFormat; String strFileOutPut = xmlTransformerService.transformBySourceWithXslCache(strXmlSource, exportFormat.getXsl(), strXslUniqueId, null, null); byte[] byteFileOutPut = strFileOutPut.getBytes(); try { String strFormatExtension = exportFormat.getExtension().trim(); String strFileName = form.getTitle() + "." + strFormatExtension; FormUtils.addHeaderResponse(request, response, strFileName, strFormatExtension); response.setContentLength((int) byteFileOutPut.length); OutputStream os = response.getOutputStream(); os.write(byteFileOutPut); os.close(); } catch (IOException e) { AppLogService.error(e); } } else { return AdminMessageService.getMessageUrl(request, MESSAGE_NO_RESPONSE, AdminMessage.TYPE_STOP); } } return getJspManageForm(request); } /** * write in the http response the statistic graph of all response submit who verify the date filter *@param request the http request * @param response The http response * */ public void doGenerateGraph(HttpServletRequest request, HttpServletResponse response) { Plugin plugin = getPlugin(); Locale locale = getLocale(); ResponseFilter filter = new ResponseFilter(); int nIdForm = -1; String strIdForm = request.getParameter(PARAMETER_ID_FORM); String strFistResponseDateFilter = request.getParameter(PARAMETER_FIRST_RESPONSE_DATE_FILTER); String strLastResponseDateFilter = request.getParameter(PARAMETER_LAST_RESPONSE_DATE_FILTER); String strTimesUnit = request.getParameter(PARAMETER_TIMES_UNIT); Timestamp tFistResponseDateFilter = null; Timestamp tLastResponseDateFilter = null; if (strFistResponseDateFilter != null) { tFistResponseDateFilter = FormUtils .getDateFirstMinute(DateUtil.formatDate(strFistResponseDateFilter, locale), locale); } if (strLastResponseDateFilter != null) { tLastResponseDateFilter = FormUtils .getDateLastMinute(DateUtil.formatDate(strLastResponseDateFilter, locale), locale); } if ((strIdForm != null) && !strIdForm.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); } } filter.setIdForm(nIdForm); filter.setDateFirst(tFistResponseDateFilter); filter.setDateLast(tLastResponseDateFilter); if (strTimesUnit != null) { if (strTimesUnit.equals(FormUtils.CONSTANT_GROUP_BY_DAY)) { filter.setGroupbyDay(true); } else if (strTimesUnit.equals(FormUtils.CONSTANT_GROUP_BY_WEEK)) { filter.setGroupbyWeek(true); } else if (strTimesUnit.equals(FormUtils.CONSTANT_GROUP_BY_MONTH)) { filter.setGroupbyMonth(true); } } else { filter.setGroupbyDay(true); strTimesUnit = FormUtils.CONSTANT_GROUP_BY_DAY; } List<StatisticFormSubmit> listStatisticResult = FormSubmitHome.getStatisticFormSubmit(filter, plugin); String strNumberOfResponseAxisX = AppPropertiesService.getProperty(PROPERTY_NUMBER_RESPONSE_AXIS_X); int nNumberOfResponseAxisX = 10; try { nNumberOfResponseAxisX = Integer.parseInt(strNumberOfResponseAxisX); } catch (NumberFormatException ne) { AppLogService.error(ne); } List<StatisticFormSubmit> listStatisticGraph = new ArrayList<StatisticFormSubmit>(); StatisticFormSubmit statisticFormSubmit; if (listStatisticResult.size() != 0) { for (int cpt = 0; cpt < nNumberOfResponseAxisX; cpt++) { statisticFormSubmit = new StatisticFormSubmit(); statisticFormSubmit.setNumberResponse(0); statisticFormSubmit.setStatisticDate(FormUtils .addStatisticInterval(listStatisticResult.get(0).getStatisticDate(), strTimesUnit, cpt)); listStatisticGraph.add(statisticFormSubmit); } } for (StatisticFormSubmit statisticFormSubmitGraph : listStatisticGraph) { for (StatisticFormSubmit statisticFormSubmitResult : listStatisticResult) { if (FormUtils.sameDate(statisticFormSubmitGraph.getStatisticDate(), statisticFormSubmitResult.getStatisticDate(), strTimesUnit)) { statisticFormSubmitGraph.setNumberResponse(statisticFormSubmitResult.getNumberResponse()); } } } String strLabelAxisX = I18nService.getLocalizedString(PROPERTY_LABEL_AXIS_X, locale); String strLabelAxisY = I18nService.getLocalizedString(PROPERTY_LABEL_AXIS_Y, locale); JFreeChart chart = FormUtils.createXYGraph(listStatisticGraph, strLabelAxisX, strLabelAxisY, strTimesUnit); try { ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); BufferedImage chartImage = chart.createBufferedImage(600, 200, info); response.setContentType("image/PNG"); PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9); response.getOutputStream().write(encoder.pngEncode()); response.getOutputStream().close(); } catch (Exception e) { AppLogService.error(e); } } /** * write in the http response the value of the response whose identifier is specified in the request * if there is no response return a error * @param request the http request * @param response The http response * @return The URL to go after performing the action */ public String doDownloadFile(HttpServletRequest request, HttpServletResponse response) { AdminUser adminUser = getUser(); Response responseFile = null; String strIdResponse = request.getParameter(PARAMETER_ID_RESPONSE); Form form; int nIdResponse = -1; if (strIdResponse != null) { try { nIdResponse = Integer.parseInt(strIdResponse); } catch (NumberFormatException ne) { AppLogService.error(ne); } } Plugin plugin = getPlugin(); responseFile = ResponseHome.findByPrimaryKey(nIdResponse, plugin); if (responseFile != null) { //is authoried to view result FormSubmit formSubmit = FormSubmitHome.findByPrimaryKey(responseFile.getFormSubmit().getIdFormSubmit(), plugin); List<Form> listForm = new ArrayList<Form>(); if (formSubmit != null) { form = FormHome.findByPrimaryKey(formSubmit.getForm().getIdForm(), plugin); listForm.add(form); } listForm = (List) AdminWorkgroupService.getAuthorizedCollection(listForm, adminUser); if ((listForm.size() == 0) || ((listForm.size() != 0) && !RBACService.isAuthorized(Form.RESOURCE_TYPE, EMPTY_STRING + ((Form) listForm.get(0)).getIdForm(), FormResourceIdService.PERMISSION_VIEW_RESULT, getUser()))) { return AdminMessageService.getMessageUrl(request, MESSAGE_YOU_ARE_NOT_ALLOWED_TO_DOWLOAD_THIS_FILE, AdminMessage.TYPE_STOP); } if (responseFile.getFileName() != null) { try { byte[] byteFileOutPut = responseFile.getValueResponse(); FormUtils.addHeaderResponse(request, response, responseFile.getFileName(), responseFile.getFileExtension()); response.setContentLength((int) byteFileOutPut.length); OutputStream os = response.getOutputStream(); os.write(byteFileOutPut); os.close(); } catch (IOException e) { AppLogService.error(e); } } else { return AdminMessageService.getMessageUrl(request, MESSAGE_ERROR_DURING_DOWNLOAD_FILE, AdminMessage.TYPE_STOP); } } return getJspManageForm(request); } /** * Gets the form modification page * @param request The HTTP request * @return The form modification page */ public String getManageOutputProcessor(HttpServletRequest request) { String strIdForm = request.getParameter(PARAMETER_ID_FORM); int nIdForm = -1; Form form; if ((strIdForm != null) && !strIdForm.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageForm(request); } } form = FormHome.findByPrimaryKey(nIdForm, getPlugin()); if ((form == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_MANAGE_OUTPUT_PROCESSOR, getUser())) { return getManageForm(request); } HashMap<String, Object> model = new HashMap<String, Object>(); List<HashMap<String, Object>> listProcess = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> hasMaProcess; Collection<IOutputProcessor> lisOutputProcessor = OutputProcessorService.getInstance().getAllProcessors(); for (IOutputProcessor processor : lisOutputProcessor) { hasMaProcess = new HashMap<String, Object>(); hasMaProcess.put(MARK_PROCESSOR_KEY, processor.getKey()); hasMaProcess.put(MARK_PROCESSOR_CONFIGURATION, processor.getOutputConfigForm(request, form, getLocale(), getPlugin())); hasMaProcess.put(MARK_IS_SELECTED, OutputProcessorService.getInstance().isUsed(nIdForm, processor.getKey())); listProcess.add(hasMaProcess); } model.put(MARK_PROCESSOR_LIST, listProcess); model.put(MARK_FORM, form); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MANAGE_OUTPUT_PROCESSOR, getLocale(), model); return getAdminPage(template.getHtml()); } /** * Perform the form modification * @param request The HTTP request * @return The URL to go after performing the action */ public String doManageOutputProcessor(HttpServletRequest request) { if (request.getParameter(PARAMETER_CANCEL) == null) { Plugin plugin = getPlugin(); String strIdForm = request.getParameter(PARAMETER_ID_FORM); String strIsSelected = request.getParameter(PARAMETER_IS_SELECTED); String strProcessorKey = request.getParameter(PARAMETER_PROCESSOR_KEY); int nIdForm = -1; Form form; if ((strIdForm != null) && !strIdForm.equals(EMPTY_STRING)) { try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException ne) { AppLogService.error(ne); } } form = FormHome.findByPrimaryKey(nIdForm, plugin); if ((form == null) || !RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_MANAGE_OUTPUT_PROCESSOR, getUser())) { return getJspManageForm(request); } if (strProcessorKey != null) { IOutputProcessor processor = OutputProcessorService.getInstance() .getProcessorByKey(strProcessorKey); if (processor != null) { if ((strIsSelected != null) || (request.getParameter(PARAMETER_ACTION_REDIRECT) != null)) { String strError = processor.doOutputConfigForm(request, getLocale(), getPlugin()); if ((strError != null) && (request.getParameter(PARAMETER_ACTION_REDIRECT) != null)) { return strError; } else if (strError != null) { return AdminMessageService.getMessageUrl(request, strError, AdminMessage.TYPE_STOP); } if (!OutputProcessorService.getInstance().isUsed(nIdForm, processor.getKey())) { OutputProcessorService.getInstance().addProcessorAssociation(nIdForm, processor.getKey()); } } else { if (OutputProcessorService.getInstance().isUsed(nIdForm, processor.getKey())) { OutputProcessorService.getInstance().removeProcessorAssociation(nIdForm, processor.getKey()); } } } } } return getJspManageForm(request); } /** * Gets the form messages modification page * @param request The HTTP request * @return the form messages modification page */ public String getModifyMessage(HttpServletRequest request) { String strIdForm = request.getParameter(PARAMETER_ID_FORM); if (!RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { return getManageForm(request); } Form form = null; if ((strIdForm != null) && !strIdForm.trim().equals(EMPTY_STRING)) { int nIdForm = -1; try { nIdForm = Integer.parseInt(strIdForm); _nIdForm = nIdForm; } catch (NumberFormatException nfe) { AppLogService.error(nfe); } if (nIdForm != -1) { form = FormHome.findByPrimaryKey(nIdForm, getPlugin()); } } if (form == null) { return getManageForm(request); } Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_WEBAPP_URL, AppPathService.getBaseUrl(request)); model.put(MARK_LOCALE, AdminUserService.getLocale(request).getLanguage()); model.put(MARK_FORM, form); setPageTitleProperty(PROPERTY_MODIFY_MESSAGE_TITLE); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MODIFY_MESSAGE, getLocale(), model); return getAdminPage(template.getHtml()); } /** * Perform the messages form modification * @param request The HTTP request * @return The URL to go after performing the action */ public String doModifyMessage(HttpServletRequest request) { String strIdForm = request.getParameter(PARAMETER_ID_FORM); if ((request.getParameter(PARAMETER_CANCEL) == null) && RBACService.isAuthorized(Form.RESOURCE_TYPE, strIdForm, FormResourceIdService.PERMISSION_MODIFY, getUser())) { Form form = null; if ((strIdForm != null) && !strIdForm.trim().equals(EMPTY_STRING)) { int nIdForm = -1; try { nIdForm = Integer.parseInt(strIdForm); } catch (NumberFormatException nfe) { AppLogService.error(nfe); } if (nIdForm != -1) { form = FormHome.findByPrimaryKey(nIdForm, getPlugin()); } } if (form != null) { String strWelcomeMessage = request.getParameter(PARAMETER_WELCOME_MESSAGE); String strUnavailabilityMessage = request.getParameter(PARAMETER_UNAVAILABILITY_MESSAGE); String strRequirement = request.getParameter(PARAMETER_REQUIREMENT); String strLibelleValidateButton = request.getParameter(PARAMETER_LIBELLE_VALIDATE_BUTTON); String strLibelleResetButton = request.getParameter(PARAMETER_LIBELLE_RESET_BUTTON); String strFieldError = EMPTY_STRING; if ((strUnavailabilityMessage == null) || strUnavailabilityMessage.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_UNAVAILABILITY_MESSAGE; } else if ((strRequirement == null) || strRequirement.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_REQUIREMENT; } else if ((strLibelleValidateButton == null) || strLibelleValidateButton.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_LIBELE_VALIDATE_BUTTON; } if (!strFieldError.equals(EMPTY_STRING)) { Object[] tabRequiredFields = { I18nService.getLocalizedString(strFieldError, getLocale()) }; return AdminMessageService.getMessageUrl(request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP); } form.setWelcomeMessage(strWelcomeMessage); form.setUnavailabilityMessage(strUnavailabilityMessage); form.setRequirement(strRequirement); form.setLibelleValidateButton(strLibelleValidateButton); form.setLibelleResetButton(strLibelleResetButton); FormHome.update(form, getPlugin()); } } return getJspManageForm(request); } }