Skip to content

Commit

Permalink
fix bugs, add documentation for loop tag
Browse files Browse the repository at this point in the history
  • Loading branch information
OlegDokuka committed Jul 22, 2015
1 parent bd5e0a8 commit 7014e7d
Show file tree
Hide file tree
Showing 107 changed files with 6,765 additions and 153 deletions.
57 changes: 57 additions & 0 deletions docs/tag-engine/loop.rst
Original file line number Diff line number Diff line change
@@ -1,2 +1,59 @@
Loop Tag
========

In this article:
- `Introduction`_
- `Use in template`_

Introduction
------------
Probably everyone faced with a situation where same content should displayed several time. Of course this problem can solve with
well-known standard JSP tag ``forEach``, but it is not enough if count cycle of content changed very often. That is why ImCMS provide own cycle tag that called ``Loop``.
``Loop`` tag works like the ``forEach`` tag, but the main feature of it is visual editor that provide agile configuration of content`s count, etc.


Use in template
---------------

For configure ``Loop` tag in template just look at the code above.
.. code-block:: jsp
<imcms:loop no="1" pre="<div>" post="</div>">
...HTML or JPS tags here...
</imcms:loop>
Available list of tag attributes:
"""""""""""""""""""""""""""""""""
+--------------------+--------------+--------------------------------------------------+
| Attribute | Type | Description |
+====================+==============+==================================================+
| no | Integer | Identifier for current loop |
+--------------------+--------------+--------------------------------------------------+
| pre | String | Text or html tag that would be added before |
| | | loop tag |
+--------------------+--------------+--------------------------------------------------+
| post | String | Text or html tag that would be added after loop |
| | | tag |
+--------------------+--------------+--------------------------------------------------+
Example:
""""""""
.. code-block:: jsp
<%@taglib prefix="imcms" uri="imcms" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Template</title>
<meta charset="utf-8"/>
</head>
<body>
<imcms:loop no="1" pre="<div>" post="</div>">
Hello world with loop content
</imcms:loop>
</body>
</html>
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -819,6 +819,11 @@
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.3</version>
</dependency>

</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,30 @@ protected void asFileDocument(FileDocumentDomainObject document, FileDocumentEnt
}

protected void asTextDocument(TextDocumentDomainObject document, TextDocumentEntity entity) {
TextDocumentPermissionSetDomainObject permissionSetDomainObject1 = new TextDocumentPermissionSetDomainObject(DocumentPermissionSetTypeDomainObject.RESTRICTED_1);
TextDocumentPermissionSetDomainObject permissionSetDomainObject2 = new TextDocumentPermissionSetDomainObject(DocumentPermissionSetTypeDomainObject.RESTRICTED_2);
DocumentPermissionSets documentPermissionSets = new DocumentPermissionSets();

permissionSetDomainObject1.setEditImages(entity.permissions.get(0).canEditImage);
permissionSetDomainObject1.setEditMenus(entity.permissions.get(0).canEditMenu);
permissionSetDomainObject1.setEditTexts(entity.permissions.get(0).canEditText);
permissionSetDomainObject1.setEditLoops(entity.permissions.get(0).canEditLoop);
permissionSetDomainObject1.setEditDocumentInformation(entity.permissions.get(0).canEditDocumentInformation);
permissionSetDomainObject1.setEditPermissions(entity.permissions.get(0).canEditDocumentInformation);

permissionSetDomainObject2.setEditImages(entity.permissions.get(1).canEditImage);
permissionSetDomainObject2.setEditMenus(entity.permissions.get(1).canEditMenu);
permissionSetDomainObject2.setEditTexts(entity.permissions.get(1).canEditText);
permissionSetDomainObject2.setEditLoops(entity.permissions.get(1).canEditLoop);
permissionSetDomainObject2.setEditDocumentInformation(entity.permissions.get(1).canEditDocumentInformation);
permissionSetDomainObject2.setEditPermissions(entity.permissions.get(1).canEditDocumentInformation);

documentPermissionSets.setRestricted1(permissionSetDomainObject1);
documentPermissionSets.setRestricted2(permissionSetDomainObject2);

document.setPermissionSets(documentPermissionSets);
document.setPermissionSetsForNewDocument(documentPermissionSets);

document.setTemplateName(entity.template);
}

Expand Down Expand Up @@ -300,6 +324,31 @@ protected void asUrlEntity(UrlDocumentEntity entity, UrlDocumentDomainObject doc
}

protected void asTextEntity(TextDocumentEntity entity, TextDocumentDomainObject document) {
DocumentPermissionSets documentPermissionSets = document.getPermissionSets();

TextDocumentPermissionSetDomainObject permissionSetDomainObject1 = ((TextDocumentPermissionSetDomainObject) documentPermissionSets.getRestricted1());
TextDocumentPermissionSetDomainObject permissionSetDomainObject2 = ((TextDocumentPermissionSetDomainObject) documentPermissionSets.getRestricted2());

TextDocumentPermission textDocumentPermission1 = new TextDocumentPermission();
TextDocumentPermission textDocumentPermission2 = new TextDocumentPermission();

textDocumentPermission1.canEditImage = permissionSetDomainObject1.getEditImages();
textDocumentPermission1.canEditLoop = permissionSetDomainObject1.getEditLoops();
textDocumentPermission1.canEditMenu = permissionSetDomainObject1.getEditMenus();
textDocumentPermission1.canEditText = permissionSetDomainObject1.getEditTexts();
textDocumentPermission1.canEditDocumentInformation = permissionSetDomainObject1.getEditDocumentInformation();

textDocumentPermission2.canEditImage = permissionSetDomainObject2.getEditImages();
textDocumentPermission2.canEditLoop = permissionSetDomainObject2.getEditLoops();
textDocumentPermission2.canEditMenu = permissionSetDomainObject2.getEditMenus();
textDocumentPermission2.canEditText = permissionSetDomainObject2.getEditTexts();
textDocumentPermission2.canEditDocumentInformation = permissionSetDomainObject2.getEditDocumentInformation();

entity.permissions = new ArrayList<>();

entity.permissions.add(textDocumentPermission1);
entity.permissions.add(textDocumentPermission2);

entity.template = document.getTemplateName();
}

Expand Down Expand Up @@ -334,6 +383,15 @@ private static class LanguageEntity {

private static class TextDocumentEntity extends DocumentEntity {
public String template;
public List<TextDocumentPermission> permissions;
}

private static class TextDocumentPermission {
public boolean canEditLoop;
public boolean canEditText;
public boolean canEditImage;
public boolean canEditMenu;
public boolean canEditDocumentInformation;
}

private static class UrlDocumentEntity extends DocumentEntity {
Expand Down
28 changes: 22 additions & 6 deletions src/main/java/com/imcode/imcms/servlet/apis/ImageController.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.imcode.imcms.mapping.DocumentSaveException;
import com.imcode.imcms.mapping.container.LoopEntryRef;
import com.imcode.imcms.mapping.container.TextDocImageContainer;
import com.imcode.imcms.mapping.container.TextDocImagesContainer;
import imcode.server.Imcms;
import imcode.server.document.ConcurrentDocumentModificationException;
import imcode.server.document.NoPermissionToEditDocumentException;
Expand All @@ -23,6 +24,7 @@
import javax.servlet.http.HttpServletRequest;
import java.beans.PropertyEditorSupport;
import java.io.IOException;
import java.util.stream.Collectors;

/**
* Created by Shadowgun on 26.03.2015.
Expand Down Expand Up @@ -180,11 +182,13 @@ public boolean updateImage(
@PathVariable("id") Integer id, @PathVariable("docId") Integer docId,
@RequestParam(value = "loopId", required = false) Integer loopId,
@RequestParam(value = "entryId", required = false) Integer loopRefId,
@RequestParam(value = "sharedMode", required = false, defaultValue = "false") boolean sharedMode,
@RequestParam("imageDomainObject") ImageDomainObject imageDomainObject) throws DocumentSaveException {
TextDocumentDomainObject textDocument = Imcms.getServices().getDocumentMapper().getDocument(docId);
LoopEntryRef entryRef = loopId != null && loopRefId != null ?
LoopEntryRef.of(loopId, loopRefId) : null;


if (!StringUtils.isBlank(imageDomainObject.getGeneratedFilename())) {
imageDomainObject.getGeneratedFile().delete();
}
Expand All @@ -193,12 +197,24 @@ public boolean updateImage(
ImcmsImageUtils.generateImage(imageDomainObject, false);

try {
Imcms.getServices()
.getDocumentMapper()
.saveTextDocImage(
TextDocImageContainer.of(textDocument.getRef(), entryRef, id, imageDomainObject),
Imcms.getUser()
);
if (sharedMode) {
Imcms.getServices()
.getDocumentMapper()
.saveTextDocImages(
TextDocImagesContainer.of(textDocument.getVersionRef(), entryRef, id, Imcms.getServices().getDocumentLanguages()
.getAll()
.stream()
.collect(Collectors.toMap((val) -> val, (val) -> imageDomainObject))),
Imcms.getUser()
);
} else {
Imcms.getServices()
.getDocumentMapper()
.saveTextDocImage(
TextDocImageContainer.of(textDocument.getRef(), entryRef, id, imageDomainObject),
Imcms.getUser()
);
}
} catch (NoPermissionToEditDocumentException e) {
throw new ShouldHaveCheckedPermissionsEarlierException(e);
} catch (NoPermissionToAddDocumentToMenuException e) {
Expand Down
11 changes: 8 additions & 3 deletions src/main/java/com/imcode/imcms/servlet/tags/ImageTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.imcode.imcms.mapping.container.LoopEntryRef;
import com.imcode.imcms.servlet.tags.Editor.ImageEditor;
import imcode.server.Imcms;
import imcode.server.document.TextDocumentPermissionSetDomainObject;
import imcode.server.document.textdocument.TextDocumentDomainObject;
import imcode.server.parser.TagParser;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -23,9 +24,13 @@ protected String getContent(TagParser tagParser) {
TextDocumentDomainObject doc = (TextDocumentDomainObject) (!StringUtils.isNotBlank(attributes.getProperty("document")) ?
parserParameters.getDocumentRequest().getDocument() :
Imcms.getServices().getDocumentMapper().getDocument(attributes.getProperty("document")));
((ImageEditor) editor).setDocumentId(doc.getId())
.setLoopEntryRef(loopEntryRef)
.setNo(Integer.parseInt(attributes.getProperty("no")));
if (((TextDocumentPermissionSetDomainObject) parserParameters.getDocumentRequest().getUser().getPermissionSetFor(doc)).getEditImages()) {
((ImageEditor) editor).setDocumentId(doc.getId())
.setLoopEntryRef(loopEntryRef)
.setNo(Integer.parseInt(attributes.getProperty("no")));
} else {
editor = null;
}
return tagParser.tagImage(attributes, loopEntryRef);
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/imcode/imcms/servlet/tags/LoopTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public void doTag() throws JspException, IOException {
TextDocumentDomainObject document = (TextDocumentDomainObject) parserParameters.getDocumentRequest().getDocument();
Loop loop = document.getLoop(no);
UserDomainObject user = Utility.getLoggedOnUser(request);
boolean editMode = parserParameters.isAnyMode();
boolean editMode = parserParameters.isContentLoopMode();
StringWriter writer = new StringWriter();

if (loop == null) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/imcode/imcms/servlet/tags/MenuTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public int doEndTag() throws JspException {
/*bodyContentString = MenuParser.addMenuAdmin(no,
parserParameters.isMenuMode(),
bodyContentString, menu, request, response, label);*/
if (parserParameters.isAnyMode())
if (parserParameters.isMenuMode())
bodyContentString = createEditor().setNo(no).setDocumentId(docId).wrap(bodyContentString);
bodyContentString = TagParser.addPreAndPost(attributes, bodyContentString);
pageContext.getOut().write(bodyContentString);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,7 @@ public int doStartTag() throws JspException {
//else
content = TagParser.addPreAndPost(attributes, content);
pageContext.getOut().print(content);
} catch (IOException e) {
throw new JspException(e);
} catch (RuntimeException e) {
} catch (IOException | RuntimeException e) {
throw new JspException(e);
}
return SKIP_BODY;
Expand Down
29 changes: 23 additions & 6 deletions src/main/java/com/imcode/imcms/servlet/tags/TextTag.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@
import com.imcode.imcms.servlet.tags.Editor.BaseEditor;
import com.imcode.imcms.servlet.tags.Editor.TextEditor;
import imcode.server.Imcms;
import imcode.server.document.TextDocumentPermissionSetDomainObject;
import imcode.server.document.textdocument.TextDocumentDomainObject;
import imcode.server.parser.TagParser;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;

import javax.servlet.jsp.tagext.TagAdapter;

public class TextTag extends SimpleImcmsTag {

protected String getContent(TagParser tagParser) {
String result;
TagAdapter loopTagAdapter = (TagAdapter) findAncestorWithClass(this, TagAdapter.class);
LoopTag loopTag = loopTagAdapter != null && loopTagAdapter.getAdaptee() instanceof LoopTag
? (LoopTag) loopTagAdapter.getAdaptee()
Expand All @@ -22,12 +25,23 @@ protected String getContent(TagParser tagParser) {
TextDocumentDomainObject doc = (TextDocumentDomainObject) (!StringUtils.isNotBlank(attributes.getProperty("document")) ?
parserParameters.getDocumentRequest().getDocument() :
Imcms.getServices().getDocumentMapper().getDocument(attributes.getProperty("document")));
((TextEditor) editor)
.setDocumentId(doc.getId())
.setLocale(parserParameters.getDocumentRequest().getDocument().getLanguage().getCode())
.setLoopEntryRef(loopEntryRef)
.setNo(Integer.parseInt(attributes.getProperty("no")));
return tagParser.tagText(attributes, loopEntryRef);
if (((TextDocumentPermissionSetDomainObject) parserParameters.getDocumentRequest().getUser().getPermissionSetFor(doc)).getEditTexts()) {
((TextEditor) editor)
.setDocumentId(doc.getId())
.setLocale(parserParameters.getDocumentRequest().getDocument().getLanguage().getCode())
.setLoopEntryRef(loopEntryRef)
.setNo(Integer.parseInt(attributes.getProperty("no")));
} else {
editor = null;
}

result = tagParser.tagText(attributes, loopEntryRef);

result = StringUtils.isEmpty(Jsoup.parse(result).text()) ? attributes.getProperty("placeholder") : result;

result = StringUtils.isEmpty(result) ? "" : result;

return result;
}

@Override
Expand All @@ -51,4 +65,7 @@ public void setDocument(String documentName) {
attributes.setProperty("document", documentName);
}

public void setPlaceholder(String placeholder) {
attributes.setProperty("placeholder", placeholder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class TextDocumentPermissionSetDomainObject extends DocumentPermissionSet
public static final DocumentPermission EDIT_TEMPLATE = new DocumentPermission("editTemplates");
public static final DocumentPermission EDIT_INCLUDES = new DocumentPermission("editIncludes");
public static final DocumentPermission EDIT_IMAGES = new DocumentPermission("editImages");
public static final DocumentPermission EDIT_LOOPS = new DocumentPermission("editLoops");
public final static int EDIT_TEXT_DOCUMENT_TEXTS_PERMISSION_ID = DocumentPermissionSetDomainObject.EDIT_DOCUMENT_PERMISSION_ID;
public final static int EDIT_TEXT_DOCUMENT_IMAGES_PERMISSION_ID = ImcmsConstants.PERM_EDIT_TEXT_DOCUMENT_IMAGES;
public final static int EDIT_TEXT_DOCUMENT_MENUS_PERMISSION_ID = ImcmsConstants.PERM_EDIT_TEXT_DOCUMENT_MENUS;
Expand All @@ -37,6 +38,14 @@ public void setEditTexts(boolean editTexts) {
setPermission(EDIT_TEXTS, editTexts);
}

public boolean getEditLoops() {
return hasPermission(EDIT_LOOPS);
}

public void setEditLoops(boolean editLoops) {
setPermission(EDIT_LOOPS, editLoops);
}

public boolean getEditMenus() {
return hasPermission(EDIT_MENUS);
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/imcode/server/parser/ParserParameters.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public boolean isMenuMode() {
* There is no separate permissions for content loop editing.
*/
public boolean isContentLoopMode() {
return isMode(ImcmsConstants.PERM_EDIT_TEXT_DOCUMENT_CONTENT_LOOPS, TextDocumentPermissionSetDomainObject.EDIT_TEXTS);
return isMode(ImcmsConstants.PERM_EDIT_TEXT_DOCUMENT_CONTENT_LOOPS, TextDocumentPermissionSetDomainObject.EDIT_LOOPS);
}

public boolean isImageMode() {
Expand All @@ -105,7 +105,7 @@ public boolean isTemplateMode() {

public boolean isMode(int flag,
DocumentPermission permission) {
return (flags & flag) != 0 && getPermissionSet().hasPermission(permission);
return (flags /*& flag*/) != 0 && getPermissionSet().hasPermission(permission);
}

public boolean isAnyMode() {
Expand Down

0 comments on commit 7014e7d

Please sign in to comment.