moving wiki down the path of ajax enlightenment

This commit is contained in:
JT Smith 2006-11-28 21:29:58 +00:00
parent 650ddb805d
commit efa444c1d3
11 changed files with 336 additions and 286 deletions

View file

@ -12,7 +12,13 @@
- Implemented codespace caching in WebGUI::International. This replaces the
in-memory cache by symbol table lookups into the code itself and saves
duplicating the i18n entries.
- RFE: DataForm file upload patch. Thanks to mistoo for submitting the
- Added accordion javascript object, which will eventually replace the
current adminbar accordion. This one is less of a cludge and uses the YUI
API.
- WebGUI now has a Wiki!
- Upgraded to YUI 0.12.0
- Upgraded to YUI-Ext 0.33 RC2
- Karma RFE: DataForm file upload patch. Thanks to mistoo for submitting the
original patch. Although I couldn't use the code in wG 7, it inspired the RFE.
Also added the feature requested in the thread to allow the files to be
emailed as attachments.

View file

@ -1,18 +0,0 @@
#WikiMasterTmpl00000001
#create
#namespace:WikiMaster
#url:default-wiki-master
#title:Default Wiki Master
#menuTitle:Default Wiki Master
<tmpl_if session.var.adminOn><p><tmpl_var controls></p></tmpl_if>
<tmpl_if displayTitle><h2><tmpl_var title></h2></tmpl_if>
<tmpl_var content>
<h3>Other actions</h3>
<ul>
<tmpl_if canEdit><li><a href="<tmpl_var addPage.url>"><tmpl_var addPage.text></a></li></tmpl_if>
<li><a href="<tmpl_var listPages.url>"><tmpl_var listPages.text></a></li>
<li><a href="<tmpl_var recentChanges.url>"><tmpl_var recentChanges.text></a></li>
<li><a href="<tmpl_var search.url>"><tmpl_var search.text></a></li>
<li><a href="<tmpl_var view.url>"><tmpl_var view.text></a></li>
</ul>

View file

@ -4,9 +4,12 @@
#url:default-wiki-page-edit
#title:Default Wiki Page Edit
#menuTitle:Default Wiki Page Edit
<tmpl_var form.header>
<p>Title: <tmpl_var form.title><br />
Content:<br /><tmpl_var form.content></p>
<table>
<tbody>
<tr><td><label for="title">Title</label></td><td><tmpl_var form.title></td></tr>
<tr><td><label for="content">Content</label></td><td><tmpl_var form.content></td></tr>
</tbody>
</table>
<tmpl_var form.submit>
<tmpl_var form.footer>

View file

@ -1,13 +0,0 @@
#WikiPLTmpl000000000001
#create
#namespace:WikiMaster_pageList
#url:default-wiki-page-list
#title:Default Page List
#menuTitle:Default Page List
<h2><tmpl_var pl.title></h2>
<ul>
<tmpl_loop pl.entries>
<li><a href="<tmpl_var viewLatest>"><tmpl_var title></a></li>
</tmpl_loop>
</ul>

View file

@ -4,26 +4,117 @@
#url:default-wiki-page
#title:Default Wiki Page
#menuTitle:Default Wiki Page
<tmpl_if session.var.adminOn><p><tmpl_var controls></p></tmpl_if>
<tmpl_if displayTitle><h2><tmpl_var title></h2></tmpl_if>
<div id="wikipage" class="yui-navset">
<ul class="yui-nav">
<li class="selected"><a href="#wikipagecontent"><em><tmpl_var view.label></em></a></li>
</ul>
<div class="yui-content">
<div id="wikipagecontent">
<tmpl_var content>
</div>
</div>
</div>
<script type="text/javascript">
initWikiTabs = function() {
var tabView = new YAHOO.widget.TabView('wikipage');
tabView.addTab(new YAHOO.widget.Tab({
label: '<tmpl_var edit.label>',
dataSrc: '<tmpl_var edit.url>',
cacheData: true
}));
var tabView = new YAHOO.widget.TabView('wikipage');
tabView.addTab(new YAHOO.widget.Tab({
label: '<tmpl_var history.label>',
dataSrc: '<tmpl_var history.url>',
cacheData: true
}));
};
initWikiTabs();
</script>
<div style="padding: 8px;"><a href="<tmpl_var search.url>"><tmpl_var search.label></a> | <a href="<tmpl_var recentChanges.url>"><tmpl_var recentChanges.label></a> | <a href="<tmpl_var wikihome.url"><tmpl_var wikihome.label></a></div>
~~~
<link rel="stylesheet" type="text/css" href="^Extras(yui/build/tabview/assets/tabs.css);">
<script type="text/javascript" src="^Extras(yui/build/yahoo/yahoo.js);"></script>
<script type="text/javascript" src="^Extras(yui/build/event/event.js);"></script>
<script type="text/javascript" src="^Extras(yui/build/dom/dom.js);"></script>
<script type="text/javascript" src="^Extras(yui/build/connection/connection.js);"></script>
<script type="text/javascript" src="^Extras(yui/build/tabview/tabview.js);"></script>
<style type="text/css">
#wikipage.yui-navset .yui-nav li a {
border:1px solid #000; /* label and content borders */
}
#wikipage.yui-navset .yui-content {
border-top: 1px solid #000;
border-bottom: 1px solid #000;
}
#wikipage.yui-navset .yui-nav a:hover {
background-color:#f6f7ee; /* active tab, tab hover, and content bgcolor */
}
#wikipage.yui-navset .yui-nav .selected a {
background-color:black; /* active tab, tab hover, and content bgcolor */
color: white;
}
#wikipage.yui-navset-top .yui-nav .selected a {
border-bottom:0; /* no bottom border for active tab */
padding-bottom:1px; /* to match height of other tabs */
}
#wikipage.yui-navset-top .yui-content {
margin-top:-1px; /* for active tab overlap */
}
#wikipage.yui-navset-bottom .yui-nav .selected a {
border-top:0; /* no bottom border for active tab */
padding-top:1px; /* to match height of other tabs */
}
#wikipage.yui-navset-bottom .yui-content {
margin-bottom:-1px; /* for active tab overlap */
}
#wikipage.yui-navset-left .yui-nav li.selected a {
border-right:0; /* no bottom border for active tab */
padding-right:1px; /* to match height of other tabs */
}
#wikipage.yui-navset-left .yui-content {
margin-left:-1px; /* for active tab overlap */
}
#wikipage.yui-navset-right .yui-nav li.selected a {
border-left:0; /* no bottom border for active tab */
padding-left:1px; /* to match height of other tabs */
}
#wikipage.yui-navset-right .yui-content {
margin-right:-1px; /* for active tab overlap */
*margin-right:0; /* except IE */
}
#wikipage .yui-content {
padding-top:1em;
padding-bottom:1em;
}
#wikipage .loading {
background-image:url(^Extras(yui/build/tabview/img/loading.gif););
background-position:center center;
background-repeat:no-repeat;
}
#wikipage .loading * {
display:none;
}
</style>
<tmpl_var content>
<tmpl_unless nonexistentPage><h3>This page</h3><ul>
<tmpl_unless inView><li><a href="<tmpl_var view.url>"><tmpl_var view.text></a></li></tmpl_unless>
<tmpl_unless inEdit>
<tmpl_if canEdit><li><a href="<tmpl_var edit.url>"><tmpl_var edit.text></a></li>
<tmpl_else><tmpl_if couldEdit><li>(Protected page)</li></tmpl_if></tmpl_if>
</tmpl_unless>
<tmpl_unless inHistory>
<li><a href="<tmpl_var pageHistory.url>"><tmpl_var pageHistory.text></a></li>
</tmpl_unless>
<tmpl_if canProtect>
<tmpl_if isProtected>
<li><a href="<tmpl_var unprotect.url>"><tmpl_var unprotect.text></a></li>
<tmpl_else>
<li><a href="<tmpl_var protect.url>"><tmpl_var protect.text></a></li>
</tmpl_if>
</tmpl_if>
<tmpl_if canDelete>
<li><a href="<tmpl_var delete.url>" onclick="<tmpl_var delete.confirm>"><tmpl_var delete.text></a></li>
<li><a href="<tmpl_var wikiPurgeRevision.url>" onclick="<tmpl_var wikiPurgeRevision.confirm>"><tmpl_var wikiPurgeRevision.text></a></li>
</tmpl_if>
</ul></tmpl_unless>

View file

@ -54,8 +54,6 @@ sub addWikiAssets {
`groupToAdminister` varchar(22) character set utf8 collate utf8_bin NOT NULL,
`richEditor` varchar(22) character set utf8 collate utf8_bin NOT NULL
default 'PBrichedit000000000002',
`masterTemplateId` varchar(22) character set utf8 collate utf8_bin NOT NULL
default 'WikiMasterTmpl00000001',
`frontPageTemplateId` varchar(22) character set utf8 collate utf8_bin NOT NULL
default 'WikiFrontTmpl000000001',
`pageTemplateId` varchar(22) character set utf8 collate utf8_bin NOT NULL
@ -66,12 +64,13 @@ sub addWikiAssets {
default 'WikiRCTmpl000000000001',
`pageHistoryTemplateId` varchar(22) character set utf8 collate utf8_bin NOT NULL
default 'WikiPHTmpl000000000001',
`pageListTemplateId` varchar(22) character set utf8 collate utf8_bin NOT NULL
default 'WikiPLTmpl000000000001',
`searchTemplateId` varchar(22) character set utf8 collate utf8_bin NOT NULL
default 'WikiSearchTmpl00000001',
`recentChangesCount` int(11) NOT NULL default 50,
`recentChangesCountFront` int(11) NOT NULL default 10,
`thumbnailSize` int(11) NOT NULL default 0,
`maxImageSize` int(11) NOT NULL default 0,
`approvalWorkflow` varchar(22) binary not null default 'pbworkflow000000000003',
PRIMARY KEY (`assetId`, `revisionDate`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
EOT
@ -113,8 +112,7 @@ EOT
EOT
);
my $config = $session->config;
$config->addToArray('assetContainers', 'WebGUI::Asset::Wobject::WikiMaster');
$session->config->addToArray('assets', 'WebGUI::Asset::Wobject::WikiMaster');
}
# ---- DO NOT EDIT BELOW THIS LINE ----

View file

@ -228,7 +228,8 @@
"WebGUI::Asset::Wobject::InOutBoard",
"WebGUI::Asset::File::ZipArchive",
"WebGUI::Asset::Wobject::WSClient",
"WebGUI::Asset::Wobject::SQLForm"
"WebGUI::Asset::Wobject::SQLForm",
"WebGUI::Asset::Wobject::WikiMaster"
],
# Specify the list assets that are used for utility purposes only

View file

@ -749,7 +749,20 @@ sub processPropertiesFromFormPost {
$self->getThread->subscribe if ($self->session->form->process("subscribe"));
delete $self->{_storageLocation};
$self->postProcess;
$self->requestCommit;
# allows us to let the cs post use it's own workflow approval process
my $currentTag = WebGUI::VersionTag->getWorking($self->session);
if ($currentTag->getAssetCount < 2) {
$currentTag->set({workflowId=>$self->getThread->getParent->get("approvalWorkflow")});
$currentTag->requestCommit;
} else {
my $newTag = WebGUI::VersionTag->create($self->session, {
name=>$self->getTitle." / ".$self->session->user->username,
workflowId=>$self->getThread->getParent->get("approvalWorkflow")
});
$self->session->db->write("update assetData set tagId=? where assetId=? and tagId=?",[$newTag->getId, $self->getId, $currentTag->getId]);
$self->purgeCache;
$newTag->requestCommit;
}
}
@ -869,25 +882,6 @@ sub rethreadUnder {
delete $self->{_thread};
}
#-------------------------------------------------------------------
# allows us to let the cs post use it's own workflow approval process
sub requestCommit {
my $self = shift;
my $currentTag = WebGUI::VersionTag->getWorking($self->session);
if ($currentTag->getAssetCount < 2) {
$currentTag->set({workflowId=>$self->getThread->getParent->get("approvalWorkflow")});
$currentTag->requestCommit;
} else {
my $newTag = WebGUI::VersionTag->create($self->session, {
name=>$self->getTitle." / ".$self->session->user->username,
workflowId=>$self->getThread->getParent->get("approvalWorkflow")
});
$self->session->db->write("update assetData set tagId=? where assetId=? and tagId=?",[$newTag->getId, $self->getId, $currentTag->getId]);
$self->purgeCache;
$newTag->requestCommit;
}
}
#-------------------------------------------------------------------
=head2 setParent ( newParent )

View file

@ -14,6 +14,7 @@ use base 'WebGUI::Asset';
use strict;
use Tie::IxHash;
use WebGUI::International;
use WebGUI::Storage::Image;
use WebGUI::Utility;
#-------------------------------------------------------------------
@ -40,6 +41,48 @@ sub _appendFuncTemplateVars {
}
}
#-------------------------------------------------------------------
=head2 addChild ( )
You can't add children to a wiki page.
=cut
sub addChild {
return undef;
}
#-------------------------------------------------------------------
=head2 addRevision ( )
Override the default method in order to deal with attachments.
=cut
sub addRevision {
my $self = shift;
my $newSelf = $self->SUPER::addRevision(@_);
if ($self->get("storageId")) {
my $newStorage = WebGUI::Storage->get($self->session,$self->get("storageId"))->copy;
$newSelf->update({storageId=>$newStorage->getId});
}
my $now = time();
$newSelf->update({
isHidden => 1,
dateUpdated=>$now,
});
return $newSelf;
}
#-------------------------------------------------------------------
sub canAdd {
my $class = shift;
my $session = shift;
$class->SUPER::canAdd($session, undef, '7');
}
#-------------------------------------------------------------------
sub canDelete {
my $self = shift;
@ -110,6 +153,20 @@ sub duplicate {
}
#-------------------------------------------------------------------
sub getStorageLocation {
my $self = shift;
unless (exists $self->{_storageLocation}) {
if ($self->get("storageId") eq "") {
$self->{_storageLocation} = WebGUI::Storage::Image->create($self->session);
$self->update({storageId=>$self->{_storageLocation}->getId});
} else {
$self->{_storageLocation} = WebGUI::Storage::Image->get($self->session,$self->get("storageId"));
}
}
return $self->{_storageLocation};
}
#-------------------------------------------------------------------
sub getWiki {
my $self = shift;
@ -127,19 +184,11 @@ sub indexContent {
}
#-------------------------------------------------------------------
sub purge {
sub isProtected {
my $self = shift;
$self->getWiki->updateTitleIndex([$self], from => 'purge');
$self->session->db->write("DELETE FROM WikiPage_protected WHERE assetId = ?", [$self->getId]);
$self->session->db->write("DELETE FROM WikiPage_extraHistory WHERE assetId = ?", [$self->getId]);
return $self->SUPER::purge;
}
#-------------------------------------------------------------------
sub purgeRevision {
my $self = shift;
$self->getWiki->updateTitleIndex([$self], from => 'purgeRevision');
return $self->SUPER::purgeRevision;
return $self->{_isProtected} if exists $self->{_isProtected};
($self->{_isProtected}) = $self->session->db->quickArray("SELECT COUNT(assetId) FROM WikiPage_protected WHERE assetId = ?", [$self->getId]);
return $self->{_isProtected};
}
#-------------------------------------------------------------------
@ -152,6 +201,13 @@ sub preparePageTemplate {
return $self->{_pageTemplate};
}
#-------------------------------------------------------------------
sub prepareView {
my $self = shift;
$self->SUPER::prepareView;
$self->preparePageTemplate;
}
#-------------------------------------------------------------------
sub processPageTemplate {
my $self = shift;
@ -174,40 +230,60 @@ sub processPageTemplate {
return $self->processTemplate($var, undef, $template);
}
#-------------------------------------------------------------------
sub prepareView {
my $self = shift;
$self->SUPER::prepareView;
$self->preparePageTemplate;
}
#-------------------------------------------------------------------
sub view {
my $self = shift;
my $var = {};
my $title = $self->get('title');
my $content = $self->getWiki->autolinkHtml($self->get('content'));
return $self->getWiki->processMasterTemplate($title, $self->processPageTemplate($content, 'view'));
}
#-------------------------------------------------------------------
sub isProtected {
my $self = shift;
return $self->{_isProtected} if exists $self->{_isProtected};
($self->{_isProtected}) = $self->session->db->quickArray("SELECT COUNT(assetId) FROM WikiPage_protected WHERE assetId = ?", [$self->getId]);
return $self->{_isProtected};
}
#-------------------------------------------------------------------
sub processPropertiesFromFormPost {
my $self = shift;
my $ret = $self->SUPER::processPropertiesFromFormPost(@_);
$self->SUPER::processPropertiesFromFormPost(@_);
$self->update({ groupIdView => $self->getWiki->get('groupIdView'),
groupIdEdit => $self->getWiki->get('groupIdEdit') });
$self->getWiki->updateTitleIndex([$self], from => 'edit');
return $ret;
delete $self->{_storageLocation};
my $size = 0;
my $storage = $self->getStorageLocation;
foreach my $file (@{$storage->getFiles}) {
if ($storage->isImage($file)) {
##Use generateThumbnail to shrink size to site's max image size
##We should look into using the new resize method instead.
$storage->generateThumbnail($file, $self->getWiki->get("maxImageSize") || $self->session->setting->get("maxImageSize"));
$storage->deleteFile($file);
$storage->renameFile('thumb-'.$file,$file);
$storage->generateThumbnail($file, $self->getWiki->get("thumbnailSize"));
}
$size += $storage->getFileSize($file);
}
$self->setSize($size);
# allows us to let the cs post use it's own workflow approval process
my $currentTag = WebGUI::VersionTag->getWorking($self->session);
if ($currentTag->getAssetCount < 2) {
$currentTag->set({workflowId=>$self->getWiki->get("approvalWorkflow")});
$currentTag->requestCommit;
} else {
my $newTag = WebGUI::VersionTag->create($self->session, {
name=>$self->getTitle." / ".$self->session->user->username,
workflowId=>$self->getWiki->get("approvalWorkflow")
});
$self->session->db->write("update assetData set tagId=? where assetId=? and tagId=?",[$newTag->getId, $self->getId, $currentTag->getId]);
$self->purgeCache;
$newTag->requestCommit;
}
}
#-------------------------------------------------------------------
sub purge {
my $self = shift;
$self->getWiki->updateTitleIndex([$self], from => 'purge');
$self->session->db->write("DELETE FROM WikiPage_protected WHERE assetId = ?", [$self->getId]);
$self->session->db->write("DELETE FROM WikiPage_extraHistory WHERE assetId = ?", [$self->getId]);
return $self->SUPER::purge;
}
#-------------------------------------------------------------------
sub purgeRevision {
my $self = shift;
$self->getWiki->updateTitleIndex([$self], from => 'purgeRevision');
return $self->SUPER::purgeRevision;
}
#-------------------------------------------------------------------
sub updateWikiHistory {
my $self = shift;
@ -216,6 +292,13 @@ sub updateWikiHistory {
$self->session->db->write("INSERT INTO WikiPage_extraHistory (assetId, userId, dateStamp, actionTaken, url, title) VALUES (?, ?, ?, ?, ?, ?)", [$self->getId, $userId, $self->session->datetime->time, $action, $self->getUrl, $self->get('title')]);
}
#-------------------------------------------------------------------
sub view {
my $self = shift;
my $var = {};
my $content = $self->getWiki->autolinkHtml($self->get('content'));
return $self->processPageTemplate($content, 'view');
}
#-------------------------------------------------------------------
sub www_delete {
@ -235,22 +318,9 @@ sub www_edit {
my $var = {};
my $newPage = 0;
$template->prepare;
if ($self->session->form->process('func') eq 'add') {
# New page.
$newPage = 1;
$var->{'form.header'} = join '',
(WebGUI::Form::formHeader($self->session,
{ action => $self->getWiki->getUrl('func=addPageSave') }),
WebGUI::Form::hidden($self->session, { name => 'class', value => ref $self }));
} else {
# Editing a page.
$newPage = 0;
$var->{'form.header'} = join '',
(WebGUI::Form::formHeader($self->session,
{ action => $self->getUrl('func=editSave') }));
}
$var->{'form.header'} = WebGUI::Form::formHeader($self->session, { action => $self->getWiki->getUrl })
.WebGUI::Form::hidden($self->session, { name => 'func', value => 'editSave' })
.WebGUI::Form::hidden($self->session, { name => 'class', value => ref $self });
$var->{'form.title'} = WebGUI::Form::text
($self->session, { name => 'title', maxlength => 255,
size => 40, value => $self->get('title') });
@ -262,55 +332,23 @@ sub www_edit {
$var->{'form.footer'} = WebGUI::Form::formFooter($self->session);
$self->_appendFuncTemplateVars($var);
my $title = "Editing ".(defined($self->get('title'))? $self->get('title') : 'new page');
$var->{title} = "Editing ".(defined($self->get('title'))? $self->get('title') : 'new page');
return $self->getWiki->processStyle($self->getWiki->processMasterTemplate($title, $self->processPageTemplate($self->processTemplate($var, undef, $template), 'edit')));
}
#-------------------------------------------------------------------
sub www_editSave {
my $self = shift;
return $self->session->privilege->insufficient unless $self->canEdit;
# TODO: refactor: duplication with A::W::Matrix::www_editListingSave
my $oldTag = WebGUI::VersionTag->getWorking($self->session, 1);
my $newTag = WebGUI::VersionTag->create
($self->session, { name => (sprintf "%s edit of %s - %s",
$self->getWiki->get('title'), $self->get('title'),
$self->session->user->username),
workflowId => 'pbworkflow000000000003' });
$newTag->setWorking;
my $newSelf = $self->addRevision;
my $error = $newSelf->processPropertiesFromFormPost;
if (ref $error eq 'ARRAY') {
$self->session->stow->set('editFormErrors', $error);
$newTag->rollback;
$oldTag->setWorking if defined $oldTag;
return $self->www_edit;
}
$newSelf->updateHistory('edited');
$newTag->requestCommit;
$newTag->clearWorking;
$oldTag->setWorking if defined $oldTag;
return $newSelf->www_view;
return $self->getWiki->processStyle( $self->processPageTemplate($self->processTemplate($var, undef, $template), 'edit'));
}
#-------------------------------------------------------------------
sub www_pageHistory {
my $self = shift;
my $title = sprintf(WebGUI::International->new($self->session, 'Asset_WikiPage')->get('pageHistory title'),
$self->get('title'));
my $template = WebGUI::Asset::Template->new($self->session, $self->getWiki->get('pageHistoryTemplateId'));
$template->prepare;
# Buggo: hardcoded count
my $var = {};
$var->{title} = sprintf(WebGUI::International->new($self->session, 'Asset_WikiPage')->get('pageHistory title'), $self->get('title'));
$self->getWiki->_appendPageHistoryVars($var, [0, 50], $self);
return $self->getWiki->processStyle($self->getWiki->processMasterTemplate($title, $self->processPageTemplate($self->processTemplate($var, undef, $template), 'pageHistory')));
return $self->getWiki->processStyle($self->processPageTemplate($self->processTemplate($var, undef, $template), 'pageHistory'));
}
#-------------------------------------------------------------------

View file

@ -342,13 +342,6 @@ sub definition {
hoverHelp => $i18n->get('richEditor hoverHelp'),
label => $i18n->get('richEditor label') },
masterTemplateId => { fieldType => 'template',
namespace => 'WikiMaster',
defaultValue => 'WikiMasterTmpl00000001',
tab => 'display',
hoverHelp => $i18n->get('masterTemplateId hoverHelp'),
label => $i18n->get('masterTemplateId label') },
frontPageTemplateId => { fieldType => 'template',
namespace => 'WikiMaster_front',
defaultValue => 'WikiFrontTmpl000000001',
@ -377,13 +370,6 @@ sub definition {
hoverHelp => $i18n->get('recentChangesTemplateId hoverHelp'),
label => $i18n->get('recentChangesTemplateId label') },
pageListTemplateId => { fieldType => 'template',
namespace => 'WikiMaster_pageList',
defaultValue => 'WikiPLTmpl000000000001',
tab => 'display',
hoverHelp => $i18n->get('pageListTemplateId hoverHelp'),
label => $i18n->get('pageListTemplateId label') },
searchTemplateId => { fieldType => 'template',
namespace => 'WikiMaster_search',
defaultValue => 'WikiSearchTmpl00000001',
@ -402,7 +388,29 @@ sub definition {
tab => 'display',
hoverHelp => $i18n->get('recentChangesCountFront hoverHelp'),
label => $i18n->get('recentChangesCountFront label') },
);
approvalWorkflow =>{
fieldType=>"workflow",
defaultValue=>"pbworkflow000000000003",
type=>'WebGUI::VersionTag',
tab=>'security',
label=>$i18n->get('approval workflow'),
hoverHelp=>$i18n->get('approval workflow description'),
},
thumbnailSize => {
fieldType => "integer",
defaultValue => 0,
tab => "display",
label => $i18n->get("thumbnail size"),
hoverHelp => $i18n->get("thumbnail size help")
},
maxImageSize => {
fieldType => "integer",
defaultValue => 0,
tab => "display",
label => $i18n->get("max image size"),
hoverHelp => $i18n->get("max image size help")
},
);
push @$definition,
{
@ -424,38 +432,11 @@ sub getContentLastModified {
return $lastModified;
}
#-------------------------------------------------------------------
sub prepareMasterTemplate {
my $self = shift;
return $self->{_masterTemplate} if $self->{_masterTemplate};
$self->{_masterTemplate} =
WebGUI::Asset::Template->new($self->session, $self->get('masterTemplateId'));
$self->{_masterTemplate}->prepare;
return $self->{_masterTemplate};
}
#-------------------------------------------------------------------
sub processMasterTemplate {
my $self = shift;
my $title = shift;
my $content = shift;
my $var = {};
my $template = $self->prepareMasterTemplate;
$var->{title} = $title;
$var->{content} = $content;
$var->{displayTitle} = $self->get('displayTitle');
$var->{canEdit} = $self->canEditPages;
$self->_appendFuncTemplateVars($var, qw/addPage listPages recentChanges view search/);
return $self->processTemplate($var, undef, $template);
}
#-------------------------------------------------------------------
sub prepareView {
my $self = shift;
$self->SUPER::prepareView;
$self->prepareMasterTemplate;
$self->{_frontPageTemplate} =
WebGUI::Asset::Template->new($self->session, $self->get('frontPageTemplateId'));
$self->{_frontPageTemplate}->prepare;
@ -464,19 +445,16 @@ sub prepareView {
#-------------------------------------------------------------------
sub processPropertiesFromFormPost {
my $self = shift;
my $groupsChanged =
(($self->session->form->process('groupIdView') ne $self->get('groupIdView'))
or ($self->session->form->process('groupIdEdit') ne $self->get('groupIdEdit')));
my $ret = $self->SUPER::processPropertiesFromFormPost(@_);
if ($groupsChanged) {
foreach my $child (@{$self->getLineage(['children'], {returnObjects => 1})}) {
$child->update({ groupIdView => $self->get('groupIdView'),
groupIdEdit => $self->get('groupIdEdit') });
}
}
return $ret;
}
@ -494,7 +472,6 @@ sub updateTitleIndex {
my %opts = @_;
return unless @pages;
$self->session->db->write("DELETE FROM WikiMaster_titleIndex WHERE assetId = ? AND pageId IN (".join(', ', ('?') x @pages).")", [$self->getId, map{$_->getId} @pages]);
foreach my $page (@pages) {
my ($pageId, $title) = ($page->getId, $page->get('title'));
$self->session->db->write("INSERT INTO WikiMaster_titleIndex (assetId, pageId, title) VALUES (?, ?, ?)", [$self->getId, $pageId, $title]);
@ -506,76 +483,23 @@ sub view {
my $self = shift;
my $var = {};
my $template = $self->{_frontPageTemplate};
$var->{'description'} = $self->autolinkHtml($self->get('description'));
$self->_appendSearchBoxVars($var);
$self->_appendRecentChangesVars($var, [0, $self->get('recentChangesCountFront')]);
$self->_appendFuncTemplateVars($var, qw/recentChanges/);
return $self->processMasterTemplate($self->get('title'), $self->processTemplate($var, undef, $template));
return $self->processTemplate($var, undef, $template);
}
#-------------------------------------------------------------------
sub www_addPageSave {
my $self = shift;
my $pageClass = $self->session->form->process('class');
return $self->session->privilege->insufficient unless
$self->canEditPages and UNIVERSAL::isa($pageClass, 'WebGUI::Asset::WikiPage');
# Refactor: duplication with A::W::Matrix::www_editListingSave
my $oldTag = WebGUI::VersionTag->getWorking($self->session, 1);
my $newTag = WebGUI::VersionTag->create
($self->session, { name => (sprintf "%s create of %s - %s",
$self->get('title'), $self->session->form->process('title'),
$self->session->user->username),
workflowId => 'pbworkflow000000000003' });
$newTag->setWorking;
# Hrm. Duplication with Asset::www_editSave. How to fix that?
my $page = $self->addChild({ className => $pageClass });
$page->{_parent} = $self;
my $error = $page->processPropertiesFromFormPost;
if (ref $error eq 'ARRAY') {
$self->session->stow->set('editFormErrors', $error);
$page->purge;
return $self->www_add;
}
$page->updateHistory('edited');
$newTag->requestCommit;
$newTag->clearWorking;
$oldTag->setWorking if defined $oldTag;
return $page->www_view;
}
#-------------------------------------------------------------------
sub www_listPages {
my $self = shift;
my $i18n = WebGUI::International->new($self->session, 'Asset_WikiMaster');
my $title = $i18n->get('listPages title');
my $template = WebGUI::Asset::Template->new($self->session, $self->get('pageListTemplateId'));
$template->prepare;
my @pages = sort { lc($a->get('title')) <=> lc($b->get('title')) }
@{$self->getLineage(['children'], {returnObjects => 1})};
my $var = {};
$var->{'pl.entries'} = $self->_templateSubvarsRefOfPages(\@pages);
return $self->processStyle($self->processMasterTemplate($title, $self->processTemplate($var, undef, $template)));
}
#-------------------------------------------------------------------
sub www_recentChanges {
my $self = shift;
my $title = WebGUI::International->new($self->session, 'Asset_WikiMaster')->get('recentChanges title');
my $template = WebGUI::Asset::Template->new($self->session, $self->get('recentChangesTemplateId'));
$template->prepare;
my $var = {};
$var->{title} = WebGUI::International->new($self->session, 'Asset_WikiMaster')->get('recentChanges title');
$self->_appendRecentChangesVars($var, [0, $self->get('recentChangesCount')]);
return $self->processStyle($self->processMasterTemplate($title, $self->processTemplate($var, undef, $template)));
return $self->processStyle($self->processTemplate($var, undef, $template));
}
#-------------------------------------------------------------------
@ -584,7 +508,6 @@ sub www_search {
my $var = {};
my $queryString = $self->session->form->process('query', 'text');
$self->_appendSearchBoxVars($var, $queryString);
if (length $queryString) {
my $search = WebGUI::Search->new($self->session);
$search->search({ keywords => $queryString,
@ -593,12 +516,10 @@ sub www_search {
my $rs = $search->getResultSet;
$self->_appendSearchResultVars($var, $rs);
}
my $title = WebGUI::International->new($self->session, 'Asset_WikiMaster')->get('search title');
$var->{title} = WebGUI::International->new($self->session, 'Asset_WikiMaster')->get('search title');
my $template = WebGUI::Asset::Template->new($self->session, $self->get('searchTemplateId'));
$template->prepare;
return $self->processStyle($self->processMasterTemplate($title, $self->processTemplate($var, undef, $template)));
return $self->processStyle($self->processTemplate($var, undef, $template));
}
1;

View file

@ -5,6 +5,40 @@ our $I18N =
'assetName' =>
{ lastUpdated => 1160157064, message => 'Wiki' },
'approval workflow description' => {
message => q|Choose a workflow to be executed on each page as it gets submitted.|,
lastUpdated => 0,
},
'approval workflow' => {
message => q|Approval Workflow|,
lastUpdated => 0,
},
'max image size' => {
message => q|Maximum Image Size|,
lastUpdated => 0,
context => q|field label for image on display tab|
},
'max image size help' => {
message => q|Set the size of the image attachments for this Wiki. If you set it to 0 then the default size set in the master settings will be used. Also, changing this setting does not retroactively change the size of images already in the Wiki. You'll have to re-save each page to get the size to change.|,
lastUpdated => 0,
context => q|help for display setting label|
},
'thumbnail size' => {
message => q|Thumbnail Size|,
lastUpdated => 0,
context => q|field label for thumbnails on display tab|
},
'thumbnail size help' => {
message => q|Set the size of the thumbnails for this Wiki. If you set it to 0 then the default size set in the master settings will be used. Also, changing this setting does not retroactively change the size of thumbnails already in the Wiki. You'll have to re-save each page to get the size to change.|,
lastUpdated => 0,
context => q|help for display setting label|
},
'groupToEditPages hoverHelp' =>
{ lastUpdated => 1160157064, message => q|Choose a group of users who will be able to edit pages in this wiki instance. They will not, by default, be able to delete pages or revisions, or edit protected pages.| },
'groupToEditPages label' =>
@ -40,11 +74,6 @@ our $I18N =
'pageHistoryTemplateId label' =>
{ lastUpdated => 1160505291, message => q|Page History Template| },
'pageListTemplateId hoverHelp' =>
{ lastUpdated => 1160417517, message => q|Which template to use for displaying lists of pages.| },
'pageListTemplateId label' =>
{ lastUpdated => 1160417517, message => q|Page List Template| },
'searchTemplateId hoverHelp' =>
{ lastUpdated => 1161031607, message => q|Which template to use for search results.| },
'searchTemplateId label' =>