1
22
23 package com.liferay.portlet;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.ejb.PortletManagerUtil;
28 import com.liferay.portal.language.LanguageUtil;
29 import com.liferay.portal.model.Layout;
30 import com.liferay.portal.model.Portlet;
31 import com.liferay.portal.model.User;
32 import com.liferay.portal.util.Constants;
33 import com.liferay.portal.util.PortalUtil;
34 import com.liferay.portal.util.WebKeys;
35 import com.liferay.util.GetterUtil;
36 import com.liferay.util.Http;
37 import com.liferay.util.ParamUtil;
38 import com.liferay.util.StringPool;
39 import com.liferay.util.StringUtil;
40 import com.liferay.util.servlet.SessionMessages;
41
42 import java.io.IOException;
43
44 import javax.portlet.ActionRequest;
45 import javax.portlet.ActionResponse;
46 import javax.portlet.GenericPortlet;
47 import javax.portlet.PortletException;
48 import javax.portlet.PortletMode;
49 import javax.portlet.PortletPreferences;
50 import javax.portlet.PortletSession;
51 import javax.portlet.RenderRequest;
52 import javax.portlet.RenderResponse;
53 import javax.portlet.WindowState;
54
55
62 public class IFramePortlet extends GenericPortlet {
63
64 public static final String DEFAULT_CELLPADDING = "4";
65 public static final String DEFAULT_CELLSPACING = "0";
66 public static final String DEFAULT_ALIGN = "left";
67 public static final String DEFAULT_BORDER = "0";
68 public static final String DEFAULT_BORDERCOLOR = "#000000";
69 public static final String DEFAULT_FRAMEBORDER = "0";
70 public static final String DEFAULT_HEIGHT_MAXIMIZED = "600";
71 public static final String DEFAULT_HEIGHT_NORMAL = "300";
72 public static final String DEFAULT_HSPACE = "0";
73 public static final String DEFAULT_SCROLLING = "auto";
74 public static final String DEFAULT_SRC = "http://www.liferay.com";
75 public static final String DEFAULT_VSPACE = "0";
76 public static final String DEFAULT_WIDTH = "100%";
77
78 public void doEdit(RenderRequest req, RenderResponse res)
79 throws IOException, PortletException {
80
81 try {
82 PortletPreferences prefs = req.getPreferences();
83
84 User user = PortalUtil.getUser(req);
85
86 boolean auth = GetterUtil.getBoolean(
87 prefs.getValue("auth", StringPool.BLANK), false);
88 String authType = prefs.getValue("auth-type", StringPool.BLANK);
89 String formMethod = prefs.getValue("form-method", StringPool.BLANK);
90 String userName = prefs.getValue("user-name", StringPool.BLANK);
91 String password = prefs.getValue("password", StringPool.BLANK);
92 String hiddenVariables = prefs.getValue(
93 "hidden-variables", StringPool.BLANK);
94
95 String cellpadding = prefs.getValue(
96 "cellpadding", DEFAULT_CELLPADDING);
97 String cellspacing = prefs.getValue(
98 "cellspacing", DEFAULT_CELLSPACING);
99 String align = prefs.getValue("align", DEFAULT_ALIGN);
100 String border = prefs.getValue("border", DEFAULT_BORDER);
101 String bordercolor = prefs.getValue(
102 "bordercolor", DEFAULT_BORDERCOLOR);
103 String frameborder = prefs.getValue(
104 "frameborder", DEFAULT_FRAMEBORDER);
105 String heightMaximized = prefs.getValue(
106 "height-maximized", DEFAULT_HEIGHT_MAXIMIZED);
107 String heightNormal = prefs.getValue(
108 "height-normal", DEFAULT_HEIGHT_NORMAL);
109 String hspace = prefs.getValue("hspace", DEFAULT_HSPACE);
110 String scrolling = prefs.getValue("scrolling", DEFAULT_SCROLLING);
111 String src = prefs.getValue("src", DEFAULT_SRC);
112 String vspace = prefs.getValue("vspace", DEFAULT_VSPACE);
113 String width = prefs.getValue("width", DEFAULT_WIDTH);
114
115 String htmlAttributes =
116 "cellpadding=" + cellpadding + "\n" +
117 "cellspacing=" + cellspacing + "\n" +
118 "align=" + align + "\n" +
119 "border=" + border + "\n" +
120 "bordercolor=" + bordercolor + "\n" +
121 "frameborder=" + frameborder + "\n" +
122 "height-maximized=" + heightMaximized + "\n" +
123 "height-normal=" + heightNormal + "\n" +
124 "hspace=" + hspace + "\n" +
125 "scrolling=" + scrolling + "\n" +
126 "vspace=" + vspace + "\n" +
127 "width=" + width + "\n";
128
129 StringBuffer sb = new StringBuffer();
130
131 sb.append("<table border=\"0\" cellpadding=\"4\" ");
132 sb.append("cellspacing=\"0\" width=\"100%\">");
133
134 sb.append("<form action=\"" + res.createActionURL() + "\" ");
135 sb.append("method=\"post\" name=\"" + res.getNamespace() + "fm");
136 sb.append("\" onSubmit=\"submitForm(this); return false;\">");
137 sb.append("<input name=\"" + res.getNamespace() + Constants.CMD);
138 sb.append("\" type=\"hidden\" value=\"" + Constants.UPDATE + "\">");
139
140 sb.append("<tr>");
141 sb.append("<td align=\"center\">");
142 sb.append("<table border=\"0\" cellpadding=\"0\" ");
143 sb.append("cellspacing=\"0\">");
144
145 if (SessionMessages.contains(
146 req, getPortletConfig().getPortletName() + ".doEdit")) {
147
148 sb.append("<tr>");
149 sb.append("<td>");
150 sb.append("<font class=\"gamma\" size=\"1\"><span ");
151 sb.append("class=\"gamma-pos-alert\">");
152 sb.append(
153 LanguageUtil.get(
154 user,
155 "you-have-successfully-updated-your-preferences"));
156 sb.append("</span></font>");
157 sb.append("</td>");
158 sb.append("</tr>");
159 sb.append("<tr>");
160 sb.append("<td>");
161 sb.append("<br>");
162 sb.append("</td>");
163 sb.append("</tr>");
164 }
165
166 sb.append("<tr>");
167 sb.append("<td>");
168 sb.append("<table border=\"0\" cellpadding=\"0\" ");
169 sb.append("cellspacing=\"0\">");
170
171 sb.append("<tr>");
172 sb.append("<td>");
173 sb.append("<font class=\"gamma\" size=\"2\">");
174 sb.append(LanguageUtil.get(user, "source-url"));
175 sb.append("</font>");
176 sb.append("</td>");
177 sb.append("<td width=\"10\">");
178 sb.append(" ");
179 sb.append("</td>");
180 sb.append("<td>");
181 sb.append("<input class=\"form-text\" ");
182 sb.append("name=\"" + res.getNamespace() + "src\" size=\"40\" ");
183 sb.append("type=\"text\" value=\"");
184 sb.append(src + "\">");
185 sb.append("</td>");
186 sb.append("</tr>");
187
188 sb.append("<tr>");
189 sb.append("<td colspan=\"3\">");
190 sb.append("<br>");
191 sb.append("</td>");
192 sb.append("</tr>");
193
194 sb.append("<tr>");
195 sb.append("<td>");
196 sb.append("<font class=\"gamma\" size=\"2\">");
197 sb.append(LanguageUtil.get(user, "authenticate"));
198 sb.append("</font>");
199 sb.append("</td>");
200 sb.append("<td width=\"10\">");
201 sb.append(" ");
202 sb.append("</td>");
203 sb.append("<td>");
204 sb.append("<select name=\"" + res.getNamespace() + "auth\">");
205 sb.append("<option ");
206 sb.append(auth ? "selected" : "");
207 sb.append(" value=\"1\">");
208 sb.append(LanguageUtil.get(user, "true"));
209 sb.append("</option>");
210 sb.append("<option ");
211 sb.append(!auth ? "selected" : "");
212 sb.append(" value=\"0\">");
213 sb.append(LanguageUtil.get(user, "false"));
214 sb.append("</option>");
215 sb.append("</select>");
216 sb.append("</td>");
217 sb.append("</tr>");
218
219 sb.append("<tr>");
220 sb.append("<td colspan=\"3\">");
221 sb.append("<br>");
222 sb.append("</td>");
223 sb.append("</tr>");
224
225 sb.append("<tr>");
226 sb.append("<td>");
227 sb.append("<font class=\"gamma\" size=\"2\">");
228 sb.append(LanguageUtil.get(user, "authentication-type"));
229 sb.append("</font>");
230 sb.append("</td>");
231 sb.append("<td width=\"10\">");
232 sb.append(" ");
233 sb.append("</td>");
234 sb.append("<td>");
235 sb.append("<select name=\"" + res.getNamespace() + "auth_type\">");
236 sb.append("<option ");
237 sb.append(authType.equals("basic") ? "selected" : "");
238 sb.append(" value=\"basic\">");
239 sb.append(LanguageUtil.get(user, "basic"));
240 sb.append("</option>");
241 sb.append("<option ");
242 sb.append(authType.equals("form") ? "selected" : "");
243 sb.append(" value=\"form\">");
244 sb.append(LanguageUtil.get(user, "form"));
245 sb.append("</option>");
246 sb.append("</select>");
247 sb.append("</td>");
248 sb.append("</tr>");
249
250 sb.append("<tr>");
251 sb.append("<td colspan=\"3\">");
252 sb.append("<br>");
253 sb.append("</td>");
254 sb.append("</tr>");
255
256 sb.append("<tr>");
257 sb.append("<td>");
258 sb.append("<font class=\"gamma\" size=\"2\">");
259 sb.append(LanguageUtil.get(user, "form-method"));
260 sb.append("</font>");
261 sb.append("</td>");
262 sb.append("<td width=\"10\">");
263 sb.append(" ");
264 sb.append("</td>");
265 sb.append("<td>");
266 sb.append("<select name=\"" + res.getNamespace());
267 sb.append("form_method\">");
268 sb.append("<option ");
269 sb.append(formMethod.equals("get") ? "selected" : "");
270 sb.append(" value=\"get\">");
271 sb.append("Get");
272 sb.append("</option>");
273 sb.append("<option ");
274 sb.append(formMethod.equals("post") ? "selected" : "");
275 sb.append(" value=\"post\">");
276 sb.append("Post");
277 sb.append("</option>");
278 sb.append("</select>");
279 sb.append("</td>");
280 sb.append("</tr>");
281
282 sb.append("<tr>");
283 sb.append("<td colspan=\"3\">");
284 sb.append("<br>");
285 sb.append("</td>");
286 sb.append("</tr>");
287
288 sb.append("<tr>");
289 sb.append("<td>");
290 sb.append("<font class=\"gamma\" size=\"2\">");
291 sb.append(LanguageUtil.get(user, "user-name"));
292 sb.append("</font>");
293 sb.append("</td>");
294 sb.append("<td width=\"10\">");
295 sb.append(" ");
296 sb.append("</td>");
297 sb.append("<td>");
298 sb.append("<input class=\"form-text\" ");
299 sb.append("name=\"" + res.getNamespace() + "user_name\" ");
300 sb.append("size=\"23\" type=\"text\" value=\"");
301 sb.append(userName + "\">");
302 sb.append("</td>");
303 sb.append("</tr>");
304
305 sb.append("<tr>");
306 sb.append("<td colspan=\"3\">");
307 sb.append("<br>");
308 sb.append("</td>");
309 sb.append("</tr>");
310
311 sb.append("<tr>");
312 sb.append("<td>");
313 sb.append("<font class=\"gamma\" size=\"2\">");
314 sb.append(LanguageUtil.get(user, "password"));
315 sb.append("</font>");
316 sb.append("</td>");
317 sb.append("<td width=\"10\">");
318 sb.append(" ");
319 sb.append("</td>");
320 sb.append("<td>");
321 sb.append("<input class=\"form-text\" ");
322 sb.append("name=\"" + res.getNamespace() + "password\" ");
323 sb.append("size=\"23\" type=\"password\" value=\"");
324 sb.append(password + "\">");
325 sb.append("</td>");
326 sb.append("</tr>");
327
328 sb.append("<tr>");
329 sb.append("<td colspan=\"3\">");
330 sb.append("<br>");
331 sb.append("</td>");
332 sb.append("</tr>");
333
334 sb.append("<tr>");
335 sb.append("<td>");
336 sb.append("<font class=\"gamma\" size=\"2\">");
337 sb.append(LanguageUtil.get(user, "hidden-variables"));
338 sb.append("</font>");
339 sb.append("</td>");
340 sb.append("<td width=\"10\">");
341 sb.append(" ");
342 sb.append("</td>");
343 sb.append("<td>");
344 sb.append("<input class=\"form-text\" ");
345 sb.append("name=\"" + res.getNamespace() + "hidden_variables\" ");
346 sb.append("size=\"40\" type=\"text\" value=\"");
347 sb.append(hiddenVariables + "\">");
348 sb.append("</td>");
349 sb.append("</tr>");
350
351 sb.append("<tr>");
352 sb.append("<td colspan=\"3\">");
353 sb.append("<br>");
354 sb.append("</td>");
355 sb.append("</tr>");
356
357 sb.append("<tr>");
358 sb.append("<td>");
359 sb.append("<font class=\"gamma\" size=\"2\">");
360 sb.append(LanguageUtil.get(user, "html-attributes"));
361 sb.append("</font>");
362 sb.append("</td>");
363 sb.append("<td width=\"10\">");
364 sb.append(" ");
365 sb.append("</td>");
366 sb.append("<td>");
367 sb.append("<textarea class=\"form-text\" cols=\"40\" ");
368 sb.append("name=\"" + res.getNamespace() + "html_attributes\" ");
369 sb.append("rows=\"10\">");
370 sb.append(htmlAttributes);
371 sb.append("</textarea>");
372 sb.append("</td>");
373 sb.append("</tr>");
374
375 sb.append("</table>");
376 sb.append("</td>");
377 sb.append("</tr>");
378 sb.append("<tr>");
379 sb.append("<td>");
380 sb.append("<br>");
381 sb.append("</td>");
382 sb.append("</tr>");
383 sb.append("<tr>");
384 sb.append("<td align=\"center\">");
385 sb.append("<input type=\"submit\" value=\"");
386 sb.append(LanguageUtil.get(user, "save-settings"));
387 sb.append("\">");
388 sb.append("</td>");
389 sb.append("</tr>");
390 sb.append("</table>");
391
392 sb.append("<br>");
393
394 sb.append("<table border=\"0\" cellpadding=\"0\" ");
395 sb.append("cellspacing=\"0\">");
396 sb.append("<tr>");
397 sb.append("<td>");
398 sb.append("<font class=\"gamma\" size=\"1\">");
399 sb.append("<span class=\"gamma-neg-alert\">");
400 sb.append(
401 LanguageUtil.get(
402 user,
403 "leave-the-user-name-and-password-fields-blank-to-use-" +
404 "your-current-login-information"));
405 sb.append("</span>");
406 sb.append("</font>");
407 sb.append("</td>");
408 sb.append("</tr>");
409 sb.append("</table>");
410
411 sb.append("</td>");
412 sb.append("</tr>");
413
414 sb.append("</form>");
415
416 sb.append("</table>");
417
418 sb.append("<script language=\"JavaScript\">");
419 sb.append("document." + res.getNamespace() + "fm.");
420 sb.append(res.getNamespace() + "src.focus();");
421 sb.append("</script>");
422
423 res.setContentType(Constants.TEXT_HTML);
424
425 res.getWriter().print(sb.toString());
426 }
427 catch (Exception e) {
428 throw new PortletException(e);
429 }
430 }
431
432 public void doView(RenderRequest req, RenderResponse res)
433 throws IOException, PortletException {
434
435 try {
436 PortletPreferences prefs = req.getPreferences();
437
438 String cellpadding = prefs.getValue(
439 "cellpadding", DEFAULT_CELLPADDING);
440 String cellspacing = prefs.getValue(
441 "cellspacing", DEFAULT_CELLSPACING);
442 String align = prefs.getValue("align", DEFAULT_ALIGN);
443 String border = prefs.getValue("border", DEFAULT_BORDER);
444 String bordercolor = prefs.getValue(
445 "bordercolor", DEFAULT_BORDERCOLOR);
446 String frameborder = prefs.getValue(
447 "frameborder", DEFAULT_FRAMEBORDER);
448 String heightMaximized = prefs.getValue(
449 "height-maximized", DEFAULT_HEIGHT_MAXIMIZED);
450 String heightNormal = prefs.getValue(
451 "height-normal", DEFAULT_HEIGHT_NORMAL);
452 String hspace = prefs.getValue("hspace", DEFAULT_HSPACE);
453 String scrolling = prefs.getValue("scrolling", DEFAULT_SCROLLING);
454 String src = prefs.getValue("src", DEFAULT_SRC);
455 String vspace = prefs.getValue("vspace", DEFAULT_VSPACE);
456 String width = prefs.getValue("width", DEFAULT_WIDTH);
457
458 String height = heightNormal;
459 if (req.getWindowState().equals(WindowState.MAXIMIZED)) {
460 height = heightMaximized;
461 }
462
463 src = transformSrc(req, res);
464
465 StringBuffer sb = new StringBuffer();
466
467 sb.append("<table ");
468 sb.append("cellpadding=\"").append(cellpadding).append("\" ");
469 sb.append("cellspacing=\"").append(cellspacing).append("\" ");
470 sb.append("width=\"100%\">");
471 sb.append("<tr><td>");
472
473 sb.append("<iframe ");
474 sb.append("align=\"").append(align).append("\" ");
475 sb.append("border=\"").append(border).append("\" ");
476 sb.append("bordercolor=\"").append(bordercolor).append("\" ");
477 sb.append("frameborder=\"").append(frameborder).append("\" ");
478 sb.append("height=\"").append(height).append("\" ");
479 sb.append("hspace=\"").append(hspace).append("\" ");
480 sb.append("name=\"").append(
481 res.getNamespace()).append("_iframe\" ");
482 sb.append("scrolling=\"").append(scrolling).append("\" ");
483 sb.append("src=\"").append(src).append("\" ");
484 sb.append("vspace=\"").append(vspace).append("\" ");
485 sb.append("width=\"").append(width).append("\" ");
486 sb.append("></iframe>");
487
488 sb.append("</td></tr>");
489 sb.append("</table>");
490
491 res.setContentType(Constants.TEXT_HTML);
492
493 res.getWriter().print(sb.toString());
494 }
495 catch (Exception e) {
496 throw new PortletException(e);
497 }
498 }
499
500 public void processAction(ActionRequest req, ActionResponse res)
501 throws IOException, PortletException {
502
503 if (req.getPortletMode().equals(PortletMode.EDIT)) {
504 String cmd = ParamUtil.getString(req, Constants.CMD);
505
506 if (cmd.equals(Constants.UPDATE)) {
507 PortletPreferences prefs = req.getPreferences();
508
509 String src = ParamUtil.get(req, "src", DEFAULT_SRC);
510 if (!src.startsWith("/") &&
511 !StringUtil.startsWith(src, "http://") &&
512 !StringUtil.startsWith(src, "https://")) {
513
514 src = Http.getProtocol(req) + "://" + src;
515 }
516
517 boolean auth = ParamUtil.getBoolean(req, "auth");
518 String authType = ParamUtil.getString(req, "auth_type");
519 String formMethod = ParamUtil.getString(req, "form_method");
520 String userName = ParamUtil.getString(req, "user_name");
521 String password = ParamUtil.getString(req, "password");
522 String hiddenVariables = ParamUtil.getString(
523 req, "hidden_variables");
524 String[] htmlAttributes = StringUtil.split(ParamUtil.getString(
525 req, "html_attributes"), "\n");
526
527 prefs.setValue("src", src);
528
529 prefs.setValue("auth", Boolean.toString(auth));
530 prefs.setValue("auth-type", authType);
531 prefs.setValue("form-method", formMethod);
532 prefs.setValue("user-name", userName);
533 prefs.setValue("password", password);
534 prefs.setValue("hidden-variables", hiddenVariables);
535
536 for (int i = 0; i < htmlAttributes.length; i++) {
537 int pos = htmlAttributes[i].indexOf("=");
538
539 if (pos != -1) {
540 String key = htmlAttributes[i].substring(0, pos);
541 String value = htmlAttributes[i].substring(
542 pos + 1, htmlAttributes[i].length());
543
544 prefs.setValue(key, value);
545 }
546 }
547
548 prefs.store();
549
550 SessionMessages.add(
551 req, getPortletConfig().getPortletName() + ".doEdit");
552 }
553 }
554 }
555
556 protected String getSrc(RenderRequest req, RenderResponse res) {
557 PortletPreferences prefs = req.getPreferences();
558
559 return prefs.getValue("src", DEFAULT_SRC);
560 }
561
562 protected String getUserName(RenderRequest req, RenderResponse res) {
563 PortletPreferences prefs = req.getPreferences();
564
565 return prefs.getValue("user-name", req.getRemoteUser());
566 }
567
568 protected String getPassword(RenderRequest req, RenderResponse res)
569 throws PortalException, SystemException {
570
571 PortletPreferences prefs = req.getPreferences();
572
573 String defaultPassword = null;
574 if (req.getRemoteUser() != null) {
575 defaultPassword = PortalUtil.getUser(req).getPassword();
576 }
577
578 return prefs.getValue("password", defaultPassword);
579 }
580
581 protected String transformSrc(RenderRequest req, RenderResponse res)
582 throws PortalException, SystemException {
583
584 PortletPreferences prefs = req.getPreferences();
585
586 String src = getSrc(req, res);
587
588 boolean auth = GetterUtil.getBoolean(
589 prefs.getValue("auth", StringPool.BLANK), false);
590 String authType = prefs.getValue("auth-type", StringPool.BLANK);
591 String userName = getUserName(req, res);
592 String password = getPassword(req, res);
593
594 if (auth) {
595 if (authType.equals("basic")) {
596 int pos = src.indexOf("://");
597
598 String protocol = src.substring(0, pos + 3);
599 String url = src.substring(pos + 3, src.length());
600
601 src =
602 protocol + userName + ":" + password +
603 "@" + url;
604 }
605 else {
606 String ctxPath =
607 (String)req.getPortletSession().getAttribute(
608 WebKeys.CTX_PATH, PortletSession.APPLICATION_SCOPE);
609
610 String companyId = PortalUtil.getCompanyId(req);
611
612 Layout layout = (Layout)req.getAttribute(WebKeys.LAYOUT);
613
614 Portlet portlet = PortletManagerUtil.getPortletById(
615 companyId, getPortletConfig().getPortletName());
616
617 src =
618 ctxPath + "/" + portlet.getStrutsPath() +
619 "/proxy?p_l_id=" + layout.getLayoutId();
620 }
621 }
622
623 return src;
624 }
625
626 }