1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 package fr.paris.lutece.plugins.quicklinks.web;
36
37 import fr.paris.lutece.plugins.quicklinks.business.insertservice.InternalLinkInsertService;
38 import fr.paris.lutece.plugins.quicklinks.business.insertservice.InternalLinkInsertServiceHome;
39 import fr.paris.lutece.portal.business.page.Page;
40 import fr.paris.lutece.portal.business.page.PageHome;
41 import fr.paris.lutece.portal.business.user.AdminUser;
42 import fr.paris.lutece.portal.service.admin.AdminUserService;
43 import fr.paris.lutece.portal.service.message.AdminMessage;
44 import fr.paris.lutece.portal.service.message.AdminMessageService;
45 import fr.paris.lutece.portal.service.page.IPageService;
46 import fr.paris.lutece.portal.service.page.PageResourceIdService;
47 import fr.paris.lutece.portal.service.plugin.Plugin;
48 import fr.paris.lutece.portal.service.plugin.PluginService;
49 import fr.paris.lutece.portal.service.spring.SpringContextService;
50 import fr.paris.lutece.portal.service.template.AppTemplateService;
51 import fr.paris.lutece.portal.service.util.AppPathService;
52 import fr.paris.lutece.portal.service.util.AppPropertiesService;
53 import fr.paris.lutece.portal.web.constants.Messages;
54 import fr.paris.lutece.portal.web.insert.InsertServiceJspBean;
55 import fr.paris.lutece.portal.web.insert.InsertServiceSelectionBean;
56 import fr.paris.lutece.util.html.HtmlTemplate;
57 import fr.paris.lutece.util.url.UrlItem;
58
59 import java.util.ArrayList;
60 import java.util.Collection;
61 import java.util.HashMap;
62
63 import javax.servlet.http.HttpServletRequest;
64
65 import static org.apache.commons.text.StringEscapeUtils.escapeEcmaScript;
66
67
68
69
70 public class InternalLinkInsertServiceJspBean extends InsertServiceJspBean implements InsertServiceSelectionBean
71 {
72
73 private static final long serialVersionUID = -5176913689822438398L;
74
75 private static final String REGEX_PAGE_ID = "^[\\d]+$";
76
77
78 private static final String PARAMETER_PLUGIN_NAME = "plugin_name";
79 private static final String PARAMETER_PAGE_NAME = "page_name";
80 private static final String PARAMETER_PAGE_ID = "page";
81 private static final String PARAMETER_PAGE_ID_URL = "page_id";
82 private static final String PARAMETER_ALT = "alt";
83 private static final String PARAMETER_TARGET = "target";
84 private static final String PARAMETER_NAME = "name";
85 private static final String PARAMETER_INPUT = "input";
86
87
88 private static final String PROPERTY_SEARCH_MESSAGE = "message.warning.resulsearch.empty";
89
90
91 private static final String MARK_PLUGIN_NAME = "plugin_name";
92 private static final String MARK_SEARCH_MESSAGE = "search_message";
93 private static final String MARK_PAGES_LIST = "pages_list";
94 private static final String MARK_LIST_PAGE = "list_page";
95 private static final String MARK_URL = "url";
96 private static final String MARK_TARGET = "target";
97 private static final String MARK_ALT = "alt";
98 private static final String MARK_NAME = "name";
99 private static final String MARK_INPUT = "input";
100
101
102 private static final String TEMPLATE_SELECTOR_PAGE = "admin/plugins/quicklinks/internallinkinsertservice_selector.html";
103 private static final String TEMPLATE_LINK = "admin/plugins/quicklinks/internallinkinsertservice_link.html";
104 private AdminUser _user;
105 private transient Plugin _plugin;
106 private String _input;
107 private transient IPageService _pageService = (IPageService) SpringContextService.getBean( "pageService" );
108
109
110
111
112
113
114
115
116
117
118 public String getInsertServiceSelectorUI( HttpServletRequest request )
119 {
120 init( request );
121
122 AdminUser user = AdminUserService.getAdminUser( request );
123 String strSearch = request.getParameter( PARAMETER_PAGE_NAME );
124 String strResultSearch = ( strSearch == null ) ? "" : strSearch;
125 String strPageName = replaceString( strResultSearch, "'", "''" );
126
127 HashMap model = getDefaultModel( );
128
129 Collection<InternalLinkInsertService> listPages = InternalLinkInsertServiceHome.getPageListbyName( strPageName );
130 Collection<InternalLinkInsertService> listPagesAuthorized = new ArrayList<>( );
131
132 for ( InternalLinkInsertService internalLinkInsertService : listPages )
133 {
134 if ( _pageService.isAuthorizedAdminPage( internalLinkInsertService.getIdPage( ), PageResourceIdService.PERMISSION_VIEW, user ) )
135 {
136 listPagesAuthorized.add( internalLinkInsertService );
137 }
138 }
139
140 model.put( MARK_PAGES_LIST, listPagesAuthorized );
141
142 StringBuilder strListPage = new StringBuilder( );
143
144 if ( listPages.isEmpty( ) )
145 {
146 model.put( MARK_SEARCH_MESSAGE, AppPropertiesService.getProperty( PROPERTY_SEARCH_MESSAGE ) );
147 }
148
149 String strBaseUrl = AppPathService.getBaseUrl( request );
150
151
152 model.put( MARK_URL, strBaseUrl );
153 model.put( MARK_LIST_PAGE, strListPage.toString( ) );
154
155 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_SELECTOR_PAGE, _user.getLocale( ), model );
156
157 return template.getHtml( );
158 }
159
160
161
162
163
164
165
166
167
168
169
170
171 private String replaceString( String str, String oldStr, String newStr )
172 {
173
174 String cleanString = str;
175
176 int index = 0;
177
178 while ( true )
179 {
180 index = cleanString.lastIndexOf( oldStr );
181
182 if ( ( index == 2 ) || ( index == -1 ) )
183 {
184 break;
185 }
186
187 cleanString = cleanString.substring( 0, index ) + newStr + cleanString.substring( index + oldStr.length( ) );
188 }
189
190 return cleanString;
191 }
192
193
194
195
196
197
198
199
200 public String doInsertUrl( HttpServletRequest request )
201 {
202 init( request );
203
204 String strPageId = request.getParameter( PARAMETER_PAGE_ID );
205 String strTarget = request.getParameter( PARAMETER_TARGET );
206 String strAlt = request.getParameter( PARAMETER_ALT );
207 String strName = request.getParameter( PARAMETER_NAME );
208 HashMap<String, Object> model = new HashMap<>( );
209
210 Page page = null;
211
212 if ( ( strPageId == null ) || !strPageId.matches( REGEX_PAGE_ID ) )
213 {
214 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
215 }
216
217 page = PageHome.findByPrimaryKey( Integer.parseInt( strPageId ) );
218
219 UrlItem url = new UrlItem( AppPathService.getPortalUrl( ) );
220 url.addParameter( PARAMETER_PAGE_ID_URL, page.getId( ) );
221 model.put( MARK_URL, url.getUrl( ) );
222 model.put( MARK_TARGET, strTarget );
223 model.put( MARK_ALT, strAlt );
224 model.put( MARK_NAME, ( strName.length( ) == 0 ) ? page.getName( ) : strName );
225
226 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_LINK, null, model );
227
228 return insertUrl( request, _input, escapeEcmaScript( template.getHtml( ) ) );
229 }
230
231 private void init( HttpServletRequest request )
232 {
233 String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
234 _user = AdminUserService.getAdminUser( request );
235 _plugin = PluginService.getPlugin( strPluginName );
236 _input = request.getParameter( PARAMETER_INPUT );
237 }
238
239 private HashMap getDefaultModel( )
240 {
241 HashMap model = new HashMap( );
242 model.put( MARK_PLUGIN_NAME, _plugin.getName( ) );
243 model.put( MARK_INPUT, _input );
244
245 return model;
246 }
247 }