Skip to content

Commit 3fcfb65

Browse files
committed
Feature #10542
Add support of the feature in Kmelia with non-treeview tree-structured documentation. Ensure the feature works also for Toolbox.
1 parent 021a9b5 commit 3fcfb65

File tree

13 files changed

+275
-234
lines changed

13 files changed

+275
-234
lines changed

kmelia/kmelia-configuration/src/main/config/properties/org/silverpeas/kmelia/multilang/kmeliaBundle.properties

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,8 @@ ContainsTooLargeText=ne doit pas exc\u00e9der
245245
PubGererChemins=Emplacements
246246
DateDesc=Dates de modification d\u00e9croissantes
247247
Model=Contenu
248-
PublicationAddToTopic3=existe d\u00e9j\u00e0 dans le dossier courant \!
249-
PublicationAddToTopic2=a \u00e9t\u00e9 ajout\u00e9 au dossier courant \!
248+
PublicationAddToTopic3=existe d\u00e9j\u00e0 dans le dossier courant !
249+
PublicationAddToTopic2=a \u00e9t\u00e9 ajout\u00e9 au dossier courant !
250250
PublicationAddToTopic1=La publication
251251
ConfirmDeletePath=Etes-vous s\u00fbr de vouloir supprimer l'emplacement ?
252252
Home=Accueil
@@ -262,7 +262,7 @@ Error=erreur
262262
TopicPath=Emplacement
263263
Page=Page
264264
PubDeclass=Publication d\u00e9class\u00e9e
265-
kmelia.CopyPublicationLink=Pour copier le lien vers cette publication \: Clique droit puis 'Copier le raccourci'
265+
kmelia.CopyPublicationLink=Pour copier le lien vers cette publication : Clique droit puis 'Copier le raccourci'
266266
PubDeMemeSujet=M\u00eame sujet
267267
kmelia.LastModification=Derni\u00e8re modification
268268
kmelia.FolderAddLink=Cr\u00e9er un dossier li\u00e9 \u00e0 un r\u00e9pertoire r\u00e9seau
@@ -460,3 +460,4 @@ kmelia.publications.batch.update.fail = {0} publications n'ont pas pu \u00eatre
460460
kmelia.publications.batch.update = Vous \u00eates sur le point de modifier le contenu de <b>{0} publications</b>... Seuls les champs renseign\u00e9s seront appliqu\u00e9s \u00e0 ces publications.
461461
kmelia.ExportPDFApplication=Fusionner tous les PDF de l'application
462462
kmelia.sort.manual.reset.confirm=Etes-vous s\u00fbr(e) de vouloir supprimer d\u00e9finitivement l'ordre manuel et revenir \u00e0 l'ordre par d\u00e9faut ?
463+
kmelia.folder.trash.confirm=<p>Etes-vous s\u00fbr de vouloir placer le dossier dans la corbeille ?</p><p>(Tous droits sp\u00e9cifiques du dossier seront retir\u00e9s.)</p>

kmelia/kmelia-configuration/src/main/config/properties/org/silverpeas/kmelia/multilang/kmeliaBundle_de.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,3 +512,4 @@ kmelia.publications.batch.update = Sie sind dabei, den Inhalt von <b> {0} Publik
512512
kmelia.ExportPDFApplication=Merge all PDF of the application
513513
kmelia.LocalPathMandatory=Ein lokaler Standort ist ein Muss!
514514
kmelia.sort.manual.reset.confirm=Sind Sie sicher, dass Sie das manuelle Ranking dauerhaft entfernen und zum Standardranking zur\u00fcckkehren m\u00f6chten?
515+
kmelia.folder.trash.confirm=<p>Do you really want to put the folder in the trash?</p><p>(All the specific rights of the folder will be removed.)</p>

kmelia/kmelia-configuration/src/main/config/properties/org/silverpeas/kmelia/multilang/kmeliaBundle_en.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,3 +512,4 @@ kmelia.RightsSpecificDisable=Click here to unset specific access rights...
512512
ConfirmDeleteCoordinate=Are you sure to delete the classification
513513
kmelia.FolderAddLink=Create a topic linked to a network folder
514514
kmelia.sort.manual.reset.confirm=Are you sure to permanently remove the manual ordering and revert to the default ordering?
515+
kmelia.folder.trash.confirm=<p>M\u00f6chten Sie den Ordner wirklich in den Papierkorb legen?</p><p>(Dabei werden s\u00e4mtliche spezifischen Rechte des Ordners entfernt.)</p>

kmelia/kmelia-configuration/src/main/config/properties/org/silverpeas/kmelia/multilang/kmeliaBundle_fr.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,3 +460,4 @@ kmelia.publications.batch.update.none=Aucune publication n'a \u00e9t\u00e9 modif
460460
kmelia.publications.batch.update.success = {0} publications modifi\u00e9es avec succ\u00e8s
461461
kmelia.publications.batch.update.fail = {0} publications n'ont pas pu \u00eatre modifi\u00e9es
462462
kmelia.publications.batch.update = Vous \u00eates sur le point de modifier le contenu de <b>{0} publications</b>... Seuls les champs renseign\u00e9s seront appliqu\u00e9s \u00e0 ces publications.
463+
kmelia.folder.trash.confirm=<p>Etes-vous s\u00fbr de vouloir placer le dossier dans la corbeille ?</p><p>(Tous droits sp\u00e9cifiques du dossier seront retir\u00e9s.)</p>

kmelia/kmelia-war/src/main/java/org/silverpeas/components/kmelia/servlets/JSONServlet.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,27 +92,27 @@ private String getOperations(String id, KmeliaSessionController kmeliaSC) {
9292
} else {
9393
// getting profile
9494
String profile = kmeliaSC.getUserTopicProfile(id);
95+
NodeDetail folder = kmeliaSC.getNodeHeader(id);
9596

9697
// getting operations of topic according to profile and current
9798
boolean isAdmin = SilverpeasRole.ADMIN.isInRole(profile);
9899
boolean isPublisher = SilverpeasRole.PUBLISHER.isInRole(profile);
99100
boolean isWriter = SilverpeasRole.WRITER.isInRole(profile);
100101
boolean isUser = SilverpeasRole.USER.isInRole(profile);
101102
boolean isRoot = NodePK.ROOT_NODE_ID.equals(id);
102-
boolean isBasket = NodePK.BIN_NODE_ID.equals(id);
103+
boolean isInBasket = folder.getFullPath().contains("/" + NodePK.BIN_NODE_ID + "/");
103104
Role role = new Role().setAdmin(isAdmin).setPublisher(isPublisher).setWriter(isWriter)
104105
.setUser(isUser);
105106

106-
if (isBasket) {
107-
addBasketOperations(operations, role);
107+
if (isInBasket) {
108+
addBasketOperations(operations, role, folder);
108109
} else if (StringUtil.isDefined(profile)) {
109-
NodeDetail node = kmeliaSC.getNodeHeader(id);
110110
UserDetail user = kmeliaSC.getUserDetail();
111111
// general operations
112-
addGeneralOperations(kmeliaSC, operations, role, profile, isRoot, node);
112+
addGeneralOperations(kmeliaSC, operations, role, profile, isRoot, folder);
113113

114114
// topic operations
115-
addTopicOperations(kmeliaSC, operations, role, isRoot, node, user);
115+
addTopicOperations(kmeliaSC, operations, role, isRoot, folder, user);
116116

117117
// publication operations
118118
addPublicationOperations(kmeliaSC, operations, role, isRoot, user);
@@ -216,13 +216,20 @@ private void addGeneralOperations(final KmeliaSessionController kmeliaSC,
216216
operations.put("responsibles", !user.isAnonymous());
217217
}
218218

219-
private void addBasketOperations(final JSONCodec.JSONObject operations, final Role role) {
219+
private void addBasketOperations(final JSONCodec.JSONObject operations, final Role role,
220+
NodeDetail node) {
220221
boolean binOperationsAllowed = role.isAdmin() || role.isPublisher() || role.isWriter();
222+
boolean isAdmin = role.isAdmin();
221223
operations.put("emptyTrash", binOperationsAllowed);
222224
operations.put(OP_EXPORT_PUBLICATIONS, binOperationsAllowed);
223225
operations.put("copyPublications", binOperationsAllowed);
224226
operations.put("cutPublications", binOperationsAllowed);
225227
operations.put(OP_DELETE_PUBLICATIONS, binOperationsAllowed);
228+
if (!node.isBin()) {
229+
operations.put("deleteTopic", isAdmin);
230+
operations.put("copyTopic", isAdmin);
231+
operations.put("cutTopic", isAdmin);
232+
}
226233
}
227234

228235
private static class Role {

kmelia/kmelia-war/src/main/java/org/silverpeas/components/kmelia/servlets/KmeliaRequestRouter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ public String getDestination(String function, KmeliaSessionController kmelia,
234234
destination = rootDestination + "basket.jsp";
235235
} else if (function.equals("ViewPublicationsToValidate")) {
236236
destination = rootDestination + "publicationsToValidate.jsp";
237+
} else if (function.equals("ViewPublicationsNonVisibles")) {
238+
destination = rootDestination + "publicationsNonVisibles.jsp";
237239
} else if ("GoBackToResults".equals(function)) {
238240
SearchContext searchContext = kmelia.getSearchContext();
239241
request.setAttribute("SearchContext", searchContext);

kmelia/kmelia-war/src/main/webapp/kmelia/jsp/basket.jsp

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,21 @@
2424
2525
--%>
2626
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
27+
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
28+
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
2729
<%@ taglib uri="http://www.silverpeas.com/tld/viewGenerator" prefix="view"%>
2830

2931
<%@ include file="checkKmelia.jsp" %>
30-
<%
31-
String translation = (String) request.getAttribute("Language");
32-
%>
32+
33+
<fmt:setLocale value="${sessionScope[sessionController].language}" />
34+
<view:setBundle bundle="${requestScope.resources.multilangBundle}" />
35+
<fmt:message var="emptyBasket" key="EmptyBasket"/>
36+
<fmt:message var="basketLabel" key="kmelia.basket"/>
37+
<c:set var="translation" value="${requestScope.Language}"/>
38+
<c:set var="componentId" value="${request.browseContext[3]}"/>
3339

3440
<!DOCTYPE>
35-
<html lang="<%= translation %>">
41+
<html lang="${translation}">
3642
<head>
3743
<title></title>
3844
<view:looknfeel/>
@@ -84,33 +90,30 @@ $(document).ready(function() {
8490
<body id="kmelia" onUnload="closeWindows()" class="yui-skin-sam">
8591
<div id="<%=componentId %>">
8692
<%
87-
Window window = gef.getWindow();
88-
BrowseBar browseBar = window.getBrowseBar();
89-
browseBar.setI18N("GoToCurrentTopic", translation);
90-
browseBar.setExtraInformation(resources.getString("kmelia.basket"));
93+
Window window = gef.getWindow();
94+
BrowseBar browseBar = window.getBrowseBar();
95+
browseBar.setI18N("GoToCurrentTopic", (String) request.getAttribute("Language"));
96+
browseBar.setExtraInformation(resources.getString("kmelia.basket"));
9197
92-
//Display operations
93-
OperationPane operationPane = window.getOperationPane();
94-
operationPane.addOperation("useless", resources.getString("EmptyBasket"), "javascript:onClick=emptyTrash()");
95-
96-
//Instanciation du cadre avec le view generator
97-
Frame frame = gef.getFrame();
98+
//Display operations
99+
OperationPane operationPane = window.getOperationPane();
100+
operationPane.addOperation("useless", resources.getString("EmptyBasket"), "javascript:onClick=emptyTrash()");
98101
99102
out.println(window.printBefore());
100-
out.println(frame.printBefore());
101103
%>
102-
104+
<view:frame>
103105
<div id="pubList">
104-
<%
105-
Board board = gef.getBoard();
106-
out.println("<br/>");
107-
out.println(board.printBefore());
108-
out.println("<br/><center>"+resources.getString("kmelia.inProgressPublications")+"<br/><br/><img src=\""+resources.getIcon("kmelia.progress")+"\"/></center><br/>");
109-
out.println(board.printAfter());
110-
%>
106+
<br/>
107+
<view:board>
108+
<div class="center"><fmt:message key="kmelia.inProgressPublications"/></div>
109+
<br/><br/>
110+
<img alt=progression" src="${requestScope.resources.getIcon('kmelia.progress')}"/>
111+
</view:board>
112+
<br/>
111113
</div>
114+
115+
</view:frame>
112116
<%
113-
out.println(frame.printAfter());
114117
out.println(window.printAfter());
115118
%>
116119

kmelia/kmelia-war/src/main/webapp/kmelia/jsp/javaScript/navigation.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@ let importFileWindow = window;
2727
let importFilesWindow = window;
2828
let exportComponentWindow = window;
2929

30+
const nodePath = [];
31+
32+
function __addNodeParent(nodeId) {
33+
nodePath.push(nodeId);
34+
}
35+
36+
function isParentNode(parentId, nodeId) {
37+
const idx = nodePath.indexOf(parentId);
38+
return idx > -1 && nodePath.indexOf(nodeId) > idx;
39+
}
40+
3041
function addFavorite(name, description, url)
3142
{
3243
postNewLink(name, url, description);
@@ -197,6 +208,7 @@ function displayPath(id) {
197208
$(data).each(function(i, topic) {
198209
if (topic.id !== '0') {
199210
addBreadCrumbElement("javascript:topicGoTo(" + topic.id + ")", topic.text);
211+
__addNodeParent(topic.id);
200212
}
201213
});
202214
});
@@ -708,7 +720,10 @@ function writeInConsole(text) {
708720
}
709721

710722
function deleteFolder(nodeId, nodeLabel) {
711-
const label = getString('ConfirmDeleteTopic') + " '" + nodeLabel + "' ?";
723+
const isInBin = _isInBin(nodeId);
724+
const deletionLabel = getString('ConfirmDeleteTopic') + " '" + nodeLabel + "' ?";
725+
const removalLabel = getString('kmelia.folder.trash.confirm');
726+
const label = isInBin ? deletionLabel : removalLabel;
712727
jQuery.popup.confirm(label, function() {
713728
const componentId = getComponentId();
714729
const url = getWebContext() + '/KmeliaAJAXServlet';
@@ -717,7 +732,7 @@ function deleteFolder(nodeId, nodeLabel) {
717732
if (data !== null && data.length > 0 && !isNaN(data)) {
718733
// fires event
719734
try {
720-
nodeDeleted(nodeId);
735+
nodeDeleted(nodeId, isInBin);
721736
} catch (e) {
722737
writeInConsole(e);
723738
}
@@ -895,7 +910,7 @@ function emptyTrash() {
895910
function(data) {
896911
spProgressMessage.hide();
897912
if (data === "ok") {
898-
displayTopicContent("1");
913+
displayTopicContent(binNodeId);
899914
} else {
900915
notyError(data);
901916
}
@@ -905,7 +920,7 @@ function emptyTrash() {
905920
}
906921

907922
function checkDnD(id, operations) {
908-
if (operations.addPubli == true) {
923+
if (operations.addPubli) {
909924
activateDragAndDrop();
910925
} else {
911926
muteDragAndDrop();

0 commit comments

Comments
 (0)