Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
OLAT CI-CD Testing Project
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Requirements
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Monitor
Service Desk
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Lars Oliver Dam
OLAT CI-CD Testing Project
Commits
7f325f8f
Commit
7f325f8f
authored
13 years ago
by
srosse
Browse files
Options
Downloads
Patches
Plain Diff
OO-105: add more back support to the wiki
parent
fdbaafc2
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/main/java/org/olat/core/id/context/StateMapped.java
+4
-0
4 additions, 0 deletions
src/main/java/org/olat/core/id/context/StateMapped.java
src/main/java/org/olat/modules/wiki/WikiMainController.java
+156
-86
156 additions, 86 deletions
src/main/java/org/olat/modules/wiki/WikiMainController.java
with
160 additions
and
86 deletions
src/main/java/org/olat/core/id/context/StateMapped.java
+
4
−
0
View file @
7f325f8f
...
...
@@ -37,6 +37,10 @@ public class StateMapped implements StateEntry{
public
StateMapped
()
{
//make XStream happy
}
public
StateMapped
(
String
key
,
String
value
)
{
delegate
.
put
(
key
,
value
);
}
public
Map
<
String
,
String
>
getDelegate
()
{
return
delegate
;
...
...
This diff is collapsed.
Click to expand it.
src/main/java/org/olat/modules/wiki/WikiMainController.java
+
156
−
86
View file @
7f325f8f
...
...
@@ -28,6 +28,7 @@ package org.olat.modules.wiki;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
...
...
@@ -88,6 +89,7 @@ import org.olat.core.util.vfs.VFSLeaf;
import
org.olat.core.util.vfs.VFSMediaResource
;
import
org.olat.modules.fo.Forum
;
import
org.olat.modules.fo.ForumCallback
;
import
org.olat.modules.fo.ForumController
;
import
org.olat.modules.fo.ForumManager
;
import
org.olat.modules.fo.ForumUIFactory
;
import
org.olat.modules.wiki.gui.components.wikiToHtml.ErrorEvent
;
...
...
@@ -103,6 +105,7 @@ import org.olat.portfolio.EPUIFactory;
import
org.olat.util.logging.activity.LoggingResourceable
;
/**
* Description:<br>
* This controller creates the whole GUI for a wiki with a tabbed pane contaning an article
...
...
@@ -123,6 +126,7 @@ public class WikiMainController extends BasicController implements CloneableCont
private
VFSContainer
wikiContainer
;
private
OLATResourceable
ores
;
private
VelocityContainer
articleContent
,
navigationContent
,
discussionContent
,
editContent
,
content
,
versioningContent
,
mediaMgntContent
,
imageDisplay
,
fileListVC
;
private
ForumController
forumController
;
private
WikiEditArticleForm
wikiEditForm
;
private
WikiMarkupComponent
wikiMenuComp
,
wikiArticleComp
,
wikiVersionDisplayComp
;
private
ContextualSubscriptionController
cSubscriptionCtrl
;
...
...
@@ -328,15 +332,54 @@ public class WikiMainController extends BasicController implements CloneableCont
public
void
activate
(
UserRequest
ureq
,
List
<
ContextEntry
>
entries
,
StateEntry
state
)
{
if
(
entries
==
null
||
entries
.
isEmpty
())
return
;
String
path
=
BusinessControlFactory
.
getInstance
().
getPath
(
entries
.
get
(
0
));
Wiki
wiki
=
getWiki
();
String
activatePageId
=
WikiManager
.
generatePageId
(
FilterUtil
.
normalizeWikiLink
(
path
));
if
(
wiki
.
pageExists
(
activatePageId
))
{
WikiPage
page
=
wiki
.
getPage
(
activatePageId
,
true
);
if
(
page
!=
null
)
{
this
.
pageId
=
page
.
getPageId
();
ContextEntry
ce
=
entries
.
get
(
0
);
String
typ
=
ce
.
getOLATResourceable
().
getResourceableTypeName
();
if
(
"az"
.
equals
(
typ
))
{
openAtoZPage
(
ureq
,
getWiki
());
}
else
if
(
"lastChanges"
.
equals
(
typ
))
{
openLastChangesPage
(
ureq
,
getWiki
());
}
else
if
(
"index"
.
equals
(
typ
))
{
WikiPage
page
=
openIndexPage
(
ureq
,
getWiki
());
pageId
=
page
.
getPageId
();
}
else
if
(
"Forum"
.
equals
(
typ
))
{
Wiki
wiki
=
getWiki
();
Long
forumKey
=
ce
.
getOLATResourceable
().
getResourceableId
();
for
(
WikiPage
page:
wiki
.
getAllPagesWithContent
())
{
if
(
forumKey
.
longValue
()
==
page
.
getForumKey
())
{
if
(
page
!=
null
)
{
this
.
pageId
=
page
.
getPageId
();
}
updatePageContext
(
ureq
,
page
);
OLATResourceable
ores
=
OresHelper
.
createOLATResourceableInstance
(
"tab"
,
1
l
);
ContextEntry
tabCe
=
BusinessControlFactory
.
getInstance
().
createContextEntry
(
ores
);
tabs
.
activate
(
ureq
,
Collections
.
singletonList
(
tabCe
),
null
);
if
(
forumController
!=
null
&&
entries
.
size
()
>
1
)
{
List
<
ContextEntry
>
subEntries
=
entries
.
subList
(
1
,
entries
.
size
());
forumController
.
activate
(
ureq
,
subEntries
,
null
);
}
break
;
}
}
}
else
{
String
path
=
BusinessControlFactory
.
getInstance
().
getPath
(
ce
);
Wiki
wiki
=
getWiki
();
String
activatePageId
=
WikiManager
.
generatePageId
(
FilterUtil
.
normalizeWikiLink
(
path
));
if
(
wiki
.
pageExists
(
activatePageId
))
{
WikiPage
page
=
wiki
.
getPage
(
activatePageId
,
true
);
if
(
page
!=
null
)
{
this
.
pageId
=
page
.
getPageId
();
}
updatePageContext
(
ureq
,
page
);
if
(
entries
.
size
()
>
1
)
{
List
<
ContextEntry
>
subEntries
=
entries
.
subList
(
1
,
entries
.
size
());
String
subTyp
=
subEntries
.
get
(
0
).
getOLATResourceable
().
getResourceableTypeName
();
if
(
"tab"
.
equals
(
subTyp
))
{
tabs
.
activate
(
ureq
,
subEntries
,
ce
.
getTransientState
());
}
}
}
updatePageContext
(
ureq
,
page
);
}
}
...
...
@@ -362,68 +405,11 @@ public class WikiMainController extends BasicController implements CloneableCont
/*************************************************************************
* tabbed pane events
************************************************************************/
// first release a potential lock on this page. only when the edit tab is acitve
// a lock will be created. in all other cases it is save to release an existing lock
doReleaseEditLock
();
TabbedPaneChangedEvent
tabEvent
=
(
TabbedPaneChangedEvent
)
event
;
Component
comp
=
tabEvent
.
getNewComponent
();
String
compName
=
comp
.
getComponentName
();
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
))
{
updatePageContext
(
ureq
,
page
);
}
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
)
&&
compName
.
equals
(
"vc_article"
))
{
/***********************************************************************
* tabbed pane change to article
**********************************************************************/
// if(page.getContent().equals("")) wikiArticleComp.setVisible(false);
// FIXME:guido: ... && comp == articleContent)) etc.
}
else
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
)
&&
compName
.
equals
(
"vc_edit"
))
{
/***********************************************************************
* tabbed pane change to edit tab
**********************************************************************/
wikiEditForm
.
resetUpdateComment
();
editContent
.
contextPut
(
"mayDeleteArticle"
,
Boolean
.
valueOf
(
ident
.
getKey
().
equals
(
Long
.
valueOf
(
page
.
getInitalAuthor
()
))
||
securityCallback
.
mayEditWikiMenu
()
));
editContent
.
contextPut
(
"linkList"
,
wiki
.
getListOfAllPageNames
());
editContent
.
contextPut
(
"fileList"
,
wiki
.
getMediaFileList
());
// try to edit acquire lock for this page
tryToSetEditLock
(
page
,
ureq
,
ores
);
}
else
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
)
&&
compName
.
equals
(
"vc_versions"
))
{
/***********************************************************************
* tabbed pane change to versioning tab
**********************************************************************/
versioningTableModel
=
new
HistoryTableDateModel
(
wiki
.
getHistory
(
page
),
getTranslator
());
removeAsListenerAndDispose
(
versioningTableCtr
);
versioningTableCtr
=
new
TableController
(
tableConfig
,
ureq
,
getWindowControl
(),
getTranslator
());
listenTo
(
versioningTableCtr
);
versioningTableModel
.
addColumnDescriptors
(
versioningTableCtr
);
versioningTableCtr
.
setTableDataModel
(
versioningTableModel
);
versioningTableCtr
.
modelChanged
();
versioningTableCtr
.
setSortColumn
(
1
,
false
);
versioningContent
.
put
(
"versions"
,
versioningTableCtr
.
getInitialComponent
());
versioningContent
.
contextPut
(
"diffs"
,
diffs
);
}
else
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
)
&&
compName
.
equals
(
"vc_discuss"
))
{
/***********************************************************************
* tabbed pane change to discussion tab
**********************************************************************/
Forum
forum
=
null
;
if
(
page
.
getForumKey
()
==
0
)
{
forum
=
ForumManager
.
getInstance
().
addAForum
();
page
.
setForumKey
(
forum
.
getKey
().
longValue
());
WikiManager
.
getInstance
().
updateWikiPageProperties
(
ores
,
page
);
}
forum
=
ForumManager
.
getInstance
().
loadForum
(
Long
.
valueOf
(
page
.
getForumKey
()));
// TODO enhance forum callback with subscription stuff
boolean
isModerator
=
securityCallback
.
mayModerateForum
();
ForumCallback
forumCallback
=
new
WikiForumCallback
(
ureq
.
getUserSession
().
getRoles
().
isGuestOnly
(),
isModerator
);
// calculate the new businesscontext for the coursenode being called.
//FIXME:pb:mannheim discussion should not be "this.ores" -> may be the "forum" should go in here.
//
ContextEntry
ce
=
BusinessControlFactory
.
getInstance
().
createContextEntry
(
forum
);
WindowControl
bwControl
=
BusinessControlFactory
.
getInstance
().
createBusinessWindowControl
(
ce
,
getWindowControl
());
discussionContent
.
put
(
"articleforum"
,
ForumUIFactory
.
getStandardForumController
(
ureq
,
bwControl
,
forum
,
forumCallback
).
getInitialComponent
());
}
selectTab
(
ureq
,
command
,
compName
,
page
,
wiki
);
}
else
if
(
source
==
wikiArticleComp
||
source
==
wikiMenuComp
)
{
/*************************************************************************
* wiki component events
...
...
@@ -469,27 +455,11 @@ public class WikiMainController extends BasicController implements CloneableCont
tabs
.
setSelectedPane
(
2
);
}
}
else
if
(
source
==
toMainPageLink
){
// home link
page
=
wiki
.
getPage
(
WikiPage
.
WIKI_INDEX_PAGE
,
true
);
page
.
incrementViewCount
();
breadCrumpCtr
.
addLink
(
page
.
getPageName
(),
page
.
getPageName
());
updatePageContext
(
ureq
,
page
);
tabs
.
setSelectedPane
(
0
);
page
=
openIndexPage
(
ureq
,
wiki
);
}
else
if
(
source
==
a2zLink
){
WikiPage
a2zPage
=
wiki
.
getPage
(
WikiPage
.
WIKI_A2Z_PAGE
);
articleContent
.
contextPut
(
"page"
,
a2zPage
);
a2zPage
.
setContent
(
translate
(
"nav.a-z.desc"
)+
wiki
.
getAllPageNamesSorted
());
wikiArticleComp
.
setWikiContent
(
a2zPage
.
getContent
());
clearPortfolioLink
();
setTabsEnabled
(
false
);
tabs
.
setSelectedPane
(
0
);
openAtoZPage
(
ureq
,
wiki
);
}
else
if
(
source
==
changesLink
){
WikiPage
recentChanges
=
wiki
.
getPage
(
WikiPage
.
WIKI_RECENT_CHANGES_PAGE
);
recentChanges
.
setContent
(
translate
(
"nav.changes.desc"
)+
wiki
.
getRecentChanges
(
ureq
.
getLocale
()));
clearPortfolioLink
();
articleContent
.
contextPut
(
"page"
,
recentChanges
);
wikiArticleComp
.
setWikiContent
(
recentChanges
.
getContent
());
setTabsEnabled
(
false
);
tabs
.
setSelectedPane
(
0
);
openLastChangesPage
(
ureq
,
wiki
);
}
else
if
(
source
==
editMenuButton
){
page
=
wiki
.
getPage
(
WikiPage
.
WIKI_MENU_PAGE
);
editContent
.
contextPut
(
"linkList"
,
wiki
.
getListOfAllPageNames
());
...
...
@@ -536,6 +506,106 @@ public class WikiMainController extends BasicController implements CloneableCont
//set recent page id to the page currently used
if
(
page
!=
null
)
this
.
pageId
=
page
.
getPageId
();
}
private
void
selectTab
(
UserRequest
ureq
,
String
command
,
String
compName
,
WikiPage
page
,
Wiki
wiki
)
{
// first release a potential lock on this page. only when the edit tab is acitve
// a lock will be created. in all other cases it is save to release an existing lock
doReleaseEditLock
();
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
))
{
updatePageContext
(
ureq
,
page
);
}
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
)
&&
compName
.
equals
(
"vc_article"
))
{
/***********************************************************************
* tabbed pane change to article
**********************************************************************/
// if(page.getContent().equals("")) wikiArticleComp.setVisible(false);
// FIXME:guido: ... && comp == articleContent)) etc.
}
else
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
)
&&
compName
.
equals
(
"vc_edit"
))
{
/***********************************************************************
* tabbed pane change to edit tab
**********************************************************************/
wikiEditForm
.
resetUpdateComment
();
editContent
.
contextPut
(
"mayDeleteArticle"
,
Boolean
.
valueOf
(
ident
.
getKey
().
equals
(
Long
.
valueOf
(
page
.
getInitalAuthor
()
))
||
securityCallback
.
mayEditWikiMenu
()
));
editContent
.
contextPut
(
"linkList"
,
wiki
.
getListOfAllPageNames
());
editContent
.
contextPut
(
"fileList"
,
wiki
.
getMediaFileList
());
// try to edit acquire lock for this page
tryToSetEditLock
(
page
,
ureq
,
ores
);
}
else
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
)
&&
compName
.
equals
(
"vc_versions"
))
{
/***********************************************************************
* tabbed pane change to versioning tab
**********************************************************************/
versioningTableModel
=
new
HistoryTableDateModel
(
wiki
.
getHistory
(
page
),
getTranslator
());
removeAsListenerAndDispose
(
versioningTableCtr
);
versioningTableCtr
=
new
TableController
(
tableConfig
,
ureq
,
getWindowControl
(),
getTranslator
());
listenTo
(
versioningTableCtr
);
versioningTableModel
.
addColumnDescriptors
(
versioningTableCtr
);
versioningTableCtr
.
setTableDataModel
(
versioningTableModel
);
versioningTableCtr
.
modelChanged
();
versioningTableCtr
.
setSortColumn
(
1
,
false
);
versioningContent
.
put
(
"versions"
,
versioningTableCtr
.
getInitialComponent
());
versioningContent
.
contextPut
(
"diffs"
,
diffs
);
}
else
if
(
command
.
equals
(
TabbedPaneChangedEvent
.
TAB_CHANGED
)
&&
compName
.
equals
(
"vc_discuss"
))
{
/***********************************************************************
* tabbed pane change to discussion tab
**********************************************************************/
Forum
forum
=
null
;
if
(
page
.
getForumKey
()
==
0
)
{
forum
=
ForumManager
.
getInstance
().
addAForum
();
page
.
setForumKey
(
forum
.
getKey
().
longValue
());
WikiManager
.
getInstance
().
updateWikiPageProperties
(
ores
,
page
);
}
forum
=
ForumManager
.
getInstance
().
loadForum
(
Long
.
valueOf
(
page
.
getForumKey
()));
// TODO enhance forum callback with subscription stuff
boolean
isModerator
=
securityCallback
.
mayModerateForum
();
ForumCallback
forumCallback
=
new
WikiForumCallback
(
ureq
.
getUserSession
().
getRoles
().
isGuestOnly
(),
isModerator
);
ContextEntry
ce
=
BusinessControlFactory
.
getInstance
().
createContextEntry
(
forum
);
WindowControl
bwControl
=
BusinessControlFactory
.
getInstance
().
createBusinessWindowControl
(
ce
,
getWindowControl
());
removeAsListenerAndDispose
(
forumController
);
forumController
=
ForumUIFactory
.
getStandardForumController
(
ureq
,
bwControl
,
forum
,
forumCallback
);
listenTo
(
forumController
);
discussionContent
.
put
(
"articleforum"
,
forumController
.
getInitialComponent
());
}
OLATResourceable
pageRes
=
OresHelper
.
createOLATResourceableTypeWithoutCheck
(
"path="
+
page
.
getPageName
());
WindowControl
wc
=
addToHistory
(
ureq
,
pageRes
,
null
);
OLATResourceable
tabOres
=
tabs
.
getTabResource
();
addToHistory
(
ureq
,
tabOres
,
null
,
wc
,
true
);
}
private
WikiPage
openIndexPage
(
UserRequest
ureq
,
Wiki
wiki
)
{
WikiPage
page
=
wiki
.
getPage
(
WikiPage
.
WIKI_INDEX_PAGE
,
true
);
page
.
incrementViewCount
();
breadCrumpCtr
.
addLink
(
page
.
getPageName
(),
page
.
getPageName
());
updatePageContext
(
ureq
,
page
);
tabs
.
setSelectedPane
(
0
);
addToHistory
(
ureq
,
OresHelper
.
createOLATResourceableTypeWithoutCheck
(
"index"
),
null
);
return
page
;
}
private
void
openLastChangesPage
(
UserRequest
ureq
,
Wiki
wiki
)
{
WikiPage
recentChanges
=
wiki
.
getPage
(
WikiPage
.
WIKI_RECENT_CHANGES_PAGE
);
recentChanges
.
setContent
(
translate
(
"nav.changes.desc"
)+
wiki
.
getRecentChanges
(
ureq
.
getLocale
()));
clearPortfolioLink
();
articleContent
.
contextPut
(
"page"
,
recentChanges
);
wikiArticleComp
.
setWikiContent
(
recentChanges
.
getContent
());
setTabsEnabled
(
false
);
tabs
.
setSelectedPane
(
0
);
addToHistory
(
ureq
,
OresHelper
.
createOLATResourceableTypeWithoutCheck
(
"lastChanges"
),
null
);
}
private
void
openAtoZPage
(
UserRequest
ureq
,
Wiki
wiki
)
{
WikiPage
a2zPage
=
wiki
.
getPage
(
WikiPage
.
WIKI_A2Z_PAGE
);
articleContent
.
contextPut
(
"page"
,
a2zPage
);
a2zPage
.
setContent
(
translate
(
"nav.a-z.desc"
)+
wiki
.
getAllPageNamesSorted
());
wikiArticleComp
.
setWikiContent
(
a2zPage
.
getContent
());
clearPortfolioLink
();
setTabsEnabled
(
false
);
tabs
.
setSelectedPane
(
0
);
addToHistory
(
ureq
,
OresHelper
.
createOLATResourceableTypeWithoutCheck
(
"az"
),
null
);
}
private
void
deliverMediaFile
(
UserRequest
ureq
,
String
command
)
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment