diff --git a/docs/upgrades/templates-7.3.0/default-wiki-front-page.tmpl b/docs/upgrades/templates-7.3.0/default-wiki-front-page.tmpl index 052ff6ffc..3041897a5 100644 --- a/docs/upgrades/templates-7.3.0/default-wiki-front-page.tmpl +++ b/docs/upgrades/templates-7.3.0/default-wiki-front-page.tmpl @@ -15,13 +15,13 @@
'.$i18n->get("page received").'
'); } -#------------------------------------------------------------------- -sub www_unprotect { - my $self = shift; - return $self->session->privilege->insufficient unless $self->canProtect; - return $self->www_view if !$self->isProtected; - $self->session->db->write("DELETE FROM WikiPage_protected WHERE assetId = ?", [$self->getId]); - $self->{_isProtected} = 0; - $self->updateWikiHistory('unprotected'); - return $self->www_view; -} - #------------------------------------------------------------------- sub www_view { my $self = shift; @@ -436,13 +394,5 @@ sub www_view { } -#------------------------------------------------------------------- -sub www_wikiPurgeRevision { - my $self = shift; - return $self->session->privilege->insufficient unless $self->canDelete; - $self->purgeRevision; - $self->session->asset($self->getParent); - return $self->getParent->www_view; -} 1; diff --git a/lib/WebGUI/Asset/Wobject/WikiMaster.pm b/lib/WebGUI/Asset/Wobject/WikiMaster.pm index c99fb45c5..d70068861 100644 --- a/lib/WebGUI/Asset/Wobject/WikiMaster.pm +++ b/lib/WebGUI/Asset/Wobject/WikiMaster.pm @@ -33,21 +33,6 @@ sub _appendFuncTemplateVars { } } -#------------------------------------------------------------------- -sub _appendPageHistoryVars { - my $self = shift; - my $var = shift; - my $limit = shift; - my $page = shift; - my $time = $self->session->datetime->time; - my $entries = $self->_templateSubvarsRefOfEdits($self->_editsRefOfPageHistory($page, $limit), $time); - my $days = $self->_daysRefOfTemplateSubvars($entries); - - $var->{'pageHistoryEntries'} = $entries; - $var->{'pageHistoryDays'} = $days; - return $self; -} - #------------------------------------------------------------------- sub _appendRecentChangesVars { my $self = shift; @@ -114,14 +99,6 @@ sub _daysRefOfTemplateSubvars { return [map { {'dayDate' => $$_[0]{date}, 'dayEntries' => $_} } @days]; } -#------------------------------------------------------------------- -sub _editsRefOfPageHistory { - my $self = shift; - my $page = shift; - my $limit = shift; - $self->_editsRefOfQuery("a.assetId = ?", [$page->getId], undef, $limit); -} - #------------------------------------------------------------------- sub _editsRefOfQuery { my $self = shift; @@ -183,13 +160,11 @@ sub _templateSubvarOfEdit { $subvar->{isProtect} = ($subvar->{action} eq 'protected'); $subvar->{isUnprotect} = ($subvar->{action} eq 'unprotected'); $subvar->{isCreateOrEdit} = $subvar->{isEdit}; - - $subvar->{viewLatest} = $subvar->{url}; - $subvar->{editLatest} = $subvar->{url}.'?func=edit'; - if ($subvar->{isEdit}) { - $subvar->{viewRevision} = $subvar->{url}.'?func=view;revision='.$subvar->{dateStamp}; - $subvar->{editRevision} = $subvar->{url}.'?func=edit;revision='.$subvar->{dateStamp}; + my $icon = $self->session->icon; + $subvar->{toolbar} = $icon->delete("func=purgeRevision;revisionDate=".$subvar->{dateStamp}, $subvar->{url}, "Delete this revision?") + .$icon->edit('func=edit;revision='.$subvar->{dateStamp}, $subvar->{url}) + .$icon->view('func=view;revision='.$subvar->{dateStamp}, $subvar->{url}); } if ($subvar->{isEdit} and ($self->session->db->quickArray("SELECT MIN(revisionDate) FROM assetData WHERE assetId = ?", [$subvar->{assetId}]))[0] == $subvar->{dateStamp}) { @@ -233,6 +208,43 @@ sub _templateSubvarsRefOfPages { return [map { $self->_templateSubvarOfPage($_) } @$pages]; } +#------------------------------------------------------------------- +sub appendMostPopular { + my $self = shift; + my $var = shift; + my $limit = shift || $self->get("mostPopularCount"); + my $rs = $self->session->db->read("select asset.assetId, assetData.revisionDate from assetData left join asset on assetData.assetId=asset.assetId + left join WikiPage on WikiPage.assetId=assetData.assetId and WikiPage.revisionDate=assetData.revisionDate + where lineage like ? and lineage<>? order by views limit ?", [$self->get("lineage").'%', $self->get("lineage"), $limit]); + while (my ($id, $version) = $rs->array) { + my $asset = WebGUI::Asset->new($self->session, $id, "WebGUI::Asset::WikiPage", $version); + push(@{$var->{mostPopular}}, { + title=>$asset->getTitle, + url=>$asset->getUrl, + }); + } +} + +#------------------------------------------------------------------- +sub appendRecentChanges { + my $self = shift; + my $var = shift; + my $limit = shift || $self->get("recentChangesCount"); + my $rs = $self->session->db->read("select asset.assetId, revisionDate from assetData left join asset on assetData.assetId=asset.assetId where + lineage like ? and lineage<>? order by revisionDate limit ?", [$self->get("lineage").'%', $self->get("lineage"), $self->get("recentChangesCount")]); + while (my ($id, $version) = $rs->array) { + my $asset = WebGUI::Asset->new($self->session, $id, "WebGUI::Asset::WikiPage", $version); + my $user = WebGUI::User->new($self->session, $asset->get("actionTakenBy")); + push(@{$var->{recentChanges}}, { + title=>$asset->getTitle, + url=>$asset->getUrl, + actionTaken=>$asset->get("lastAction"), + username=>$user->username, + date=>$self->session->datetime->epochToHuman($asset->get("revisionDate")) + }); + } +} + #------------------------------------------------------------------- sub autolinkHtml { my $self = shift; @@ -345,6 +357,13 @@ sub definition { hoverHelp => $i18n->get('pageHistoryTemplateId hoverHelp'), label => $i18n->get('pageHistoryTemplateId label') }, + mostPopularTemplateId => { fieldType => 'template', + namespace => 'WikiMaster_mostPopular', + defaultValue => 'WikiMPTmpl000000000001', + tab => 'display', + hoverHelp => $i18n->get('mostPopularTemplateId hoverHelp'), + label => $i18n->get('mostPopularTemplateId label') }, + recentChangesTemplateId => { fieldType => 'template', namespace => 'WikiMaster_recentChanges', defaultValue => 'WikiRCTmpl000000000001', @@ -377,6 +396,18 @@ sub definition { tab => 'display', hoverHelp => $i18n->get('recentChangesCountFront hoverHelp'), label => $i18n->get('recentChangesCountFront label') }, + + mostPopularCount => { fieldType => 'integer', + defaultValue => 50, + tab => 'display', + hoverHelp => $i18n->get('mostPopularCount hoverHelp'), + label => $i18n->get('mostPopularCount label') }, + + mostPopularCountFront => { fieldType => 'integer', + defaultValue => 10, + tab => 'display', + hoverHelp => $i18n->get('mostPopularCountFront hoverHelp'), + label => $i18n->get('mostPopularCountFront label') }, approvalWorkflow =>{ fieldType=>"workflow", defaultValue=>"pbworkflow000000000003", @@ -414,14 +445,6 @@ sub definition { return $class->SUPER::definition($session, $definition); } -#------------------------------------------------------------------- -sub getContentLastModified { - my $self = shift; - my ($lastModified) = $self->session->db->quickArray("SELECT MAX(d.revisionDate) FROM assetData AS d INNER JOIN asset AS a ON a.assetId = d.assetId WHERE a.lineage LIKE CONCAT(?, '%')", [$self->get('lineage')]); - return $lastModified; -} - - #------------------------------------------------------------------- sub prepareView { my $self = shift; @@ -481,21 +504,47 @@ sub view { }; my $template = $self->{_frontPageTemplate}; $self->_appendSearchBoxVars($var); - $self->_appendRecentChangesVars($var, [0, $self->get('recentChangesCountFront')]); + $self->appendRecentChanges($var, $self->get('recentChangesCountFront')); + $self->appendMostPopular($var, $self->get('mostPopularCountFront')); $self->_appendFuncTemplateVars($var, qw/recentChanges/); return $self->processTemplate($var, undef, $template); } +#------------------------------------------------------------------- +sub www_mostPopular { + my $self = shift; + my $i18n = WebGUI::International->new($self->session, "Asset_WikiMaster"); + my $var = { + resultsLabel=>$i18n->get("resultsLabel"), + title => WebGUI::International->new($self->session, 'Asset_WikiMaster')->get('recentChanges title'), + wikiHomeLabel=>$i18n->get("wikiHomeLabel"), + searchLabel=>$i18n->get("searchLabel"), + searchUrl=>$self->getUrl("func=search"), + recentChangesUrl=>$self->getUrl("func=recentChanges"), + recentChangesLabel=>$i18n->get("recentChangesLabel"), + wikiHomeUrl=>$self->getUrl, + }; + $self->appendMostPopular($var); + return $self->processStyle($self->processTemplate($var, $self->get('recentChangesTemplateId'))); +} + #------------------------------------------------------------------- sub www_recentChanges { my $self = shift; - 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->processTemplate($var, undef, $template)); + my $i18n = WebGUI::International->new($self->session, "Asset_WikiMaster"); + my $var = { + resultsLabel=>$i18n->get("resultsLabel"), + title => WebGUI::International->new($self->session, 'Asset_WikiMaster')->get('recentChanges title'), + wikiHomeLabel=>$i18n->get("wikiHomeLabel"), + searchLabel=>$i18n->get("searchLabel"), + searchUrl=>$self->getUrl("func=search"), + mostPopularUrl=>$self->getUrl("func=mostPopular"), + mostPopularLabel=>$i18n->get("mostPopularLabel"), + wikiHomeUrl=>$self->getUrl, + }; + $self->appendRecentChanges($var); + return $self->processStyle($self->processTemplate($var, $self->get('recentChangesTemplateId'))); } #------------------------------------------------------------------- @@ -511,8 +560,10 @@ sub www_search { searchLabel=>$i18n->get("searchLabel"), recentChangesUrl=>$self->getUrl("func=recentChanges"), recentChangesLabel=>$i18n->get("recentChangesLabel"), + mostPopularUrl=>$self->getUrl("func=mostPopular"), + mostPopularLabel=>$i18n->get("mostPopularLabel"), wikiHomeUrl=>$self->getUrl, - getEditFormUrl=>$self->getUrl("func=add;class=WebGUI::Asset::WikiPage"), + getEditFormUrl=>$self->getUrl("func=add;class=WebGUI::Asset::WikiPage;ajax=1"), }; my $queryString = $self->session->form->process('query', 'text'); $self->_appendSearchBoxVars($var, $queryString); diff --git a/lib/WebGUI/AssetVersioning.pm b/lib/WebGUI/AssetVersioning.pm index 30d718e8c..f3416e22f 100644 --- a/lib/WebGUI/AssetVersioning.pm +++ b/lib/WebGUI/AssetVersioning.pm @@ -135,6 +135,33 @@ sub getRevisionCount { #------------------------------------------------------------------- +=head2 getRevisions ( [ status ] ) + +Returns an array reference of the revision objects of this asset. + +=head3 status + +Optionally specify to get the revisions based upon the status of the revisions. Options are "approved", "archived", or "pending". Defaults to any status. + +=cut + +sub getRevisions { + my $self = shift; + my $status = shift; + my $statusClause = ""; + if ($status) { + $statusClause = " and status=".$self->session->db->quote($status); + } + my @revisions = (); + my $rs = $self->session->db->read("select revisionDate from assetData where assetId=".$self->session->db->quote($self->getId).$statusClause); + while (my ($version) = $rs->array) { + push(@revisions, WebGUI::Asset->new($self->session, $self->getId, $self->get("className"), $version)); + } + return \@revisions; +} + +#------------------------------------------------------------------- + =head2 getTagCount ( ) Returns the number of tags that have been attached to this asset. Think of it sort of like an absolute revision count, rather than counting the number of actual edits, we're counting the number of tags opened against this asset to be edited. diff --git a/lib/WebGUI/i18n/English/Asset_WikiMaster.pm b/lib/WebGUI/i18n/English/Asset_WikiMaster.pm index 0d96eeb52..6022df5d8 100644 --- a/lib/WebGUI/i18n/English/Asset_WikiMaster.pm +++ b/lib/WebGUI/i18n/English/Asset_WikiMaster.pm @@ -73,10 +73,11 @@ our $I18N = 'frontPageTemplateId label' => { lastUpdated => 1161031607, message => q|Front Page Template| }, - 'recentChangesTemplateId hoverHelp' => - { lastUpdated => 1160157064, message => q|Which template to use for the recent changes display.| }, - 'recentChangesTemplateId label' => - { lastUpdated => 1160157064, message => q|Recent Changes Template| }, + 'recentChangesTemplateId hoverHelp' => { lastUpdated => 1160157064, message => q|Which template to use for the recent changes display.| }, + 'recentChangesTemplateId label' => { lastUpdated => 1160157064, message => q|Recent Changes Template| }, + + 'mostPopularTemplateId hoverHelp' => { lastUpdated => 1160157064, message => q|Which template should be used to display the most popular listing?| }, + 'mostPopularTemplateId label' => { lastUpdated => 1160157064, message => q|Most Popular Template| }, 'pageHistoryTemplateId hoverHelp' => { lastUpdated => 1160505291, message => q|Which template to use for the page history display.| }, @@ -88,14 +89,15 @@ our $I18N = 'searchTemplateId label' => { lastUpdated => 1161031607, message => q|Search Template| }, - 'recentChangesCount hoverHelp' => - { lastUpdated => 1161031607, message => q|Maximum number of changes to display on the recent changes page.| }, - 'recentChangesCount label' => - { lastUpdated => 1161031607, message => q|Recent Changes Count| }, - 'recentChangesCountFront hoverHelp' => - { lastUpdated => 1161031607, message => q|Maximum number of changes to display on the front page.| }, - 'recentChangesCountFront label' => - { lastUpdated => 1161031607, message => q|Front Page Recent Changes Count| }, + 'recentChangesCount hoverHelp' => { lastUpdated => 1161031607, message => q|Maximum number of changes to display on the recent changes page.| }, + 'recentChangesCount label' => { lastUpdated => 1161031607, message => q|Recent Changes Count| }, + 'recentChangesCountFront hoverHelp' => { lastUpdated => 1161031607, message => q|Maximum number of changes to display on the front page.| }, + 'recentChangesCountFront label' => { lastUpdated => 1161031607, message => q|Front Page Recent Changes Count| }, + + 'mostPopularCount hoverHelp' => { lastUpdated => 1161031607, message => q|Maximum number of popular page links to display on the most popular page.| }, + 'mostPopularCount label' => { lastUpdated => 1161031607, message => q|Most Popular Count| }, + 'mostPopularCountFront hoverHelp' => { lastUpdated => 1161031607, message => q|Maximum number of popular page links to display on the front page.| }, + 'mostPopularCountFront label' => { lastUpdated => 1161031607, message => q|Front Page Most Popular Count| }, 'func addPage link text' => { lastUpdated => 1160157064, message => q|Add a new page| }, diff --git a/lib/WebGUI/i18n/English/Asset_WikiPage.pm b/lib/WebGUI/i18n/English/Asset_WikiPage.pm index 7f5af5751..6e92fd6ed 100644 --- a/lib/WebGUI/i18n/English/Asset_WikiPage.pm +++ b/lib/WebGUI/i18n/English/Asset_WikiPage.pm @@ -2,24 +2,17 @@ package WebGUI::i18n::English::Asset_WikiPage; our $I18N = { + 'protectQuestionLabel' => { lastUpdated => 1160157064, message => 'Protect this page from editing?' }, 'titleLabel' => { lastUpdated => 1160157064, message => 'Title' }, 'contentLabel' => { lastUpdated => 1160157064, message => 'Content' }, 'attachmentLabel' => { lastUpdated => 1160157064, message => 'Attachment(s)' }, 'editing' => { lastUpdated => 1160157064, message => 'Editing' }, 'assetName' => { lastUpdated => 1160157064, message => 'Wiki Page' }, - 'page received' => { lastUpdated => 1160157064, message => q|Your page has been received and is being processed so it can be added to the site. It will be available for further editing after being processed. Please be patient.| }, 'editLabel' => { lastUpdated => 1160157064, message => q|Edit| }, 'viewLabel' => { lastUpdated => 1160157064, message => q|View| }, 'historyLabel' => { lastUpdated => 1160425002, message => q|History| }, - 'protectLabel' => { lastUpdated => 1160425002, message => q|Protect| }, - 'unprotectLabel' => { lastUpdated => 1160425002, message => q|Unprotect| }, 'deleteLabel' => { lastUpdated => 1161121377, message => q|Delete| }, - 'func wikiPurgeRevision link text' => { lastUpdated => 1161121377, message => q|Delete this revision of this page| }, - 'func delete link confirm' => { lastUpdated => 1161121377, message => q|Are you sure you want to delete this page? Deletions cannot be stored within version tags and take place immediately.| }, - 'func wikiPurgeRevision link confirm' => { lastUpdated => 1161121377, message => q|Are you sure you want to delete this revision of this page? The revision will be permanently erased.| }, - - 'pageHistory title' => { lastUpdated => 1161113157, message => q|History of "%s"| }, }; 1;