converting versioning to use workflow
This commit is contained in:
parent
c6b0d9b8d5
commit
cba26ecc0c
20 changed files with 427 additions and 587 deletions
|
|
@ -74,31 +74,6 @@ sub addRevision {
|
|||
return $newVersion;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 addVersionTag ( [ name ] )
|
||||
|
||||
A class method. Creates a version tag and assigns the tag to the current user's version tag. Returns the id of the tag created.
|
||||
|
||||
=head3 name
|
||||
|
||||
The name of the version tag. If not specified, one will be generated using the current user's name along with the date.
|
||||
|
||||
=cut
|
||||
|
||||
sub addVersionTag {
|
||||
my $self = shift;
|
||||
my $name = shift || "Autotag created ".$self->session->datetime->epochToHuman()." by ".$self->session->user->username;
|
||||
my $tagId = $self->session->db->setRow("assetVersionTag","tagId",{
|
||||
tagId=>"new",
|
||||
name=>$name,
|
||||
creationDate=>$self->session->datetime->time(),
|
||||
createdBy=>$self->session->user->userId
|
||||
});
|
||||
$self->session->scratch->set("versionTag",$tagId);
|
||||
return $tagId;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -131,29 +106,6 @@ sub commit {
|
|||
$self->indexContent;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 commitVersionTag ( tagId )
|
||||
|
||||
Commits all assets edited under a version tag, and then sets the version tag to committed.
|
||||
|
||||
=head3 tagId
|
||||
|
||||
The unique id of the tag to be committed.
|
||||
|
||||
=cut
|
||||
|
||||
sub commitVersionTag {
|
||||
my $self = shift;
|
||||
my $tagId = shift;
|
||||
my $sth = $self->session->db->read("select asset.assetId,asset.className,assetData.revisionDate from assetData left join asset on asset.assetId=assetData.assetId where assetData.tagId=".$self->session->db->quote($tagId));
|
||||
while (my ($id,$class,$version) = $sth->array) {
|
||||
WebGUI::Asset->new($self->session,$id,$class,$version)->commit;
|
||||
}
|
||||
$sth->finish;
|
||||
$self->session->db->write("update assetVersionTag set isCommitted=1, commitDate=".$self->session->datetime->time().", committedBy=".$self->session->db->quote($self->session->user->userId)." where tagId=".$self->session->db->quote($tagId));
|
||||
$self->session->db->write("delete from userSessionScratch where name='versionTag' and value=".$self->session->db->quote($tagId));
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
@ -215,69 +167,6 @@ sub purgeRevision {
|
|||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 rollbackSiteToTime ( time )
|
||||
|
||||
A class method. Rollback the entire site to a specific point in time. Returns 1 if successful.
|
||||
|
||||
=head3 time
|
||||
|
||||
The epoch time to rollback to. Anything after this time will be permanently deleted.
|
||||
|
||||
=cut
|
||||
|
||||
sub rollbackToTime {
|
||||
my $self = shift;
|
||||
my $toTime = shift;
|
||||
unless ($toTime) {
|
||||
return 0;
|
||||
$self->session->errorHandler->warn("You must specify a time when you call rollbackSiteToTime().");
|
||||
}
|
||||
my $sth = $self->session->db->read("select asset.className, asset.assetId, assetData.revisionDate from assetData left join asset on asset.assetId=assetData.assetId where assetData.revisionDate > ".$toTime." order by assetData.revisionDate desc");
|
||||
while (my ($class, $id, $revisionDate) = $sth->array) {
|
||||
my $revision = WebGUI::Asset->new($self->session,$id, $class, $revisionDate);
|
||||
$revision->purgeRevision;
|
||||
}
|
||||
$sth->finish;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 rollbackVersionTag ( tagId )
|
||||
|
||||
A class method. Eliminates all revisions of all assets created under a specific version tag. Also removes the version tag.
|
||||
|
||||
=head3 tagId
|
||||
|
||||
The unique identifier of the version tag to be purged.
|
||||
|
||||
=cut
|
||||
|
||||
sub rollbackVersionTag {
|
||||
my $self = shift;
|
||||
my $tagId = shift;
|
||||
unless ($tagId) {
|
||||
return 0;
|
||||
$self->session->errorHandler->warn("You must specify a tag ID when you call rollbackVersionTag().");
|
||||
}
|
||||
if ($tagId eq "pbversion0000000000001" || $tagId eq "pbversion0000000000002") {
|
||||
return 0;
|
||||
$self->session->errorHandler->warn("You cannot rollback a tag that is required for the system to operate.");
|
||||
}
|
||||
my $sth = $self->session->db->read("select asset.className, asset.assetId, assetData.revisionDate from assetData left join asset on asset.assetId=assetData.assetId where assetData.tagId = ".$self->session->db->quote($tagId)." order by assetData.revisionDate desc");
|
||||
while (my ($class, $id, $revisionDate) = $sth->array) {
|
||||
my $revision = WebGUI::Asset->new($self->session,$id, $class, $revisionDate);
|
||||
$revision->purgeRevision;
|
||||
}
|
||||
$sth->finish;
|
||||
$self->session->db->write("delete from assetVersionTag where tagId=".$self->session->db->quote($tagId));
|
||||
$self->session->db->write("delete from userSessionScratch where name='versionTag' and value=".$self->session->db->quote($tagId));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 setVersionLock ( )
|
||||
|
|
@ -335,108 +224,6 @@ sub updateHistory {
|
|||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_addVersionTag ()
|
||||
|
||||
Displays the add version tag form.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_addVersionTag {
|
||||
my $self = shift;
|
||||
my $ac = WebGUI::AdminConsole->new($self->session,"versions");
|
||||
return $self->session->privilege->insufficient() unless ($self->session->user->isInGroup(12));
|
||||
my $i18n = WebGUI::International->new($self->session,"Asset");
|
||||
$ac->addSubmenuItem($self->getUrl('func=manageVersions'), $i18n->get("manage versions"));
|
||||
my $f = WebGUI::HTMLForm->new($self->session,-action=>$self->getUrl);
|
||||
my $tag = $self->session->db->getRow("assetVersionTag","tagId",$self->session->form->process("tagId"));
|
||||
$f->hidden(
|
||||
-name=>"func",
|
||||
-value=>"addVersionTagSave"
|
||||
);
|
||||
$f->text(
|
||||
-name=>"name",
|
||||
-label=>$i18n->get("version tag name"),
|
||||
-hoverHelp=>$i18n->get("version tag name description"),
|
||||
-value=>$tag->{name},
|
||||
);
|
||||
$f->submit;
|
||||
return $ac->render($f->print,$i18n->get("add version tag"));
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_addVersionTagSave ()
|
||||
|
||||
Adds a version tag and sets the user's default version tag to that.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_addVersionTagSave {
|
||||
my $self = shift;
|
||||
return $self->session->privilege->insufficient() unless ($self->session->user->isInGroup(12));
|
||||
$self->addVersionTag($self->session->form->process("name"));
|
||||
return $self->www_manageVersions();
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
sub www_commitRevision {
|
||||
my $self = shift;
|
||||
return $self->session->privilege->adminOnly() unless $self->canEdit;
|
||||
$self->commit;
|
||||
return $self->getContainer->www_manageAssets if ($self->session->form->process("proceed") eq "manageAssets");
|
||||
return $self->getContainer->www_view;
|
||||
}
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
sub www_commitVersionTag {
|
||||
my $self = shift;
|
||||
return $self->session->privilege->adminOnly() unless $self->session->user->isInGroup(3);
|
||||
my $tagId = $self->session->form->process("tagId");
|
||||
if ($tagId) {
|
||||
$self->commitVersionTag($tagId);
|
||||
}
|
||||
return $self->www_manageVersions;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_manageVersionTags ()
|
||||
|
||||
Shows a list of the currently available asset version tags.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_manageCommittedVersions {
|
||||
my $self = shift;
|
||||
my $ac = WebGUI::AdminConsole->new($self->session,"versions");
|
||||
return $self->session->privilege->insufficient() unless ($self->session->user->isInGroup(3));
|
||||
my $i18n = WebGUI::International->new($self->session,"Asset");
|
||||
my $rollback = $i18n->get('rollback');
|
||||
my $rollbackPrompt = $i18n->get('rollback version tag confirm');
|
||||
$ac->addSubmenuItem($self->getUrl('func=addVersionTag'), $i18n->get("add a version tag"));
|
||||
$ac->addSubmenuItem($self->getUrl('func=manageVersions'), $i18n->get("manage versions"));
|
||||
my $output = '<table width=100% class="content">
|
||||
<tr><th>Tag Name</th><th>Committed On</th><th>Committed By</th><th></th></tr> ';
|
||||
my $sth = $self->session->db->read("select tagId,name,commitDate,committedBy from assetVersionTag where isCommitted=1");
|
||||
while (my ($id,$name,$date,$by) = $sth->array) {
|
||||
my $u = WebGUI::User->new($self->session,$by);
|
||||
$output .= '<tr>
|
||||
<td><a href="'.$self->getUrl("func=manageRevisionsInTag;tagId=".$id).'">'.$name.'</a></td>
|
||||
<td>'.$self->session->datetime->epochToHuman($date).'</td>
|
||||
<td>'.$u->username.'</td>
|
||||
<td><a href="'.$self->getUrl("proceed=manageCommittedVersions;func=rollbackVersionTag;tagId=".$id).'" onclick="return confirm(\''.$rollbackPrompt.'\');">'.$rollback.'</a></td></tr>';
|
||||
}
|
||||
$sth->finish;
|
||||
$output .= '</table>';
|
||||
return $ac->render($output,$i18n->get("committed versions"));
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_manageRevisions ()
|
||||
|
|
@ -459,86 +246,12 @@ sub www_manageRevisions {
|
|||
$output .= '<tr><td>'.$self->session->icon->delete("func=purgeRevision;revisionDate=".$date,$self->get("url"),$i18n->get("purge revision prompt")).'</td>
|
||||
<td><a href="'.$self->getUrl("func=viewRevision;revisionDate=".$date).'">'.$self->session->datetime->epochToHuman($date).'</a></td>
|
||||
<td>'.$by.'</td>
|
||||
<td><a href="'.$self->getUrl("func=manageRevisionsInTag;tagId=".$tagId).'">'.$tag.'</a></td>
|
||||
<td><a href="'.$self->getUrl("op=manageRevisionsInTag;tagId=".$tagId).'">'.$tag.'</a></td>
|
||||
</tr>';
|
||||
}
|
||||
$sth->finish;
|
||||
$output .= '</table>';
|
||||
return $ac->render($output,$i18n->get("committed versions").": ".$self->getTitle);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_manageVersionTags ()
|
||||
|
||||
Shows a list of the currently available asset version tags.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_manageVersions {
|
||||
my $self = shift;
|
||||
my $ac = WebGUI::AdminConsole->new($self->session,"versions");
|
||||
return $self->session->privilege->insufficient() unless ($self->session->user->isInGroup(3));
|
||||
my $i18n = WebGUI::International->new($self->session,"Asset");
|
||||
$ac->setHelp("versions manage");
|
||||
$ac->addSubmenuItem($self->getUrl('func=addVersionTag'), $i18n->get("add a version tag"));
|
||||
$ac->addSubmenuItem($self->getUrl('func=manageCommittedVersions'), $i18n->get("manage committed versions"));
|
||||
my ($tag) = $self->session->db->quickArray("select name from assetVersionTag where tagId=".$self->session->db->quote($self->session->scratch->get("versionTag")));
|
||||
$tag ||= "None";
|
||||
my $rollback = $i18n->get("rollback");
|
||||
my $commit = $i18n->get("commit");
|
||||
my $setTag = $i18n->get("set tag");
|
||||
my $rollbackPrompt = $i18n->get("rollback version tag confirm");
|
||||
my $commitPrompt = $i18n->get("commit version tag confirm");
|
||||
my $output = '<p>You are currently working under a tag called: <b>'.$tag.'</b>.</p><table width=100% class="content">
|
||||
<tr><th></th><th>Tag Name</th><th>Created On</th><th>Created By</th><th></th></tr> ';
|
||||
my $sth = $self->session->db->read("select tagId,name,creationDate,createdBy from assetVersionTag where isCommitted=0");
|
||||
while (my ($id,$name,$date,$by) = $sth->array) {
|
||||
my $u = WebGUI::User->new($self->session,$by);
|
||||
$output .= '<tr>
|
||||
<td>'.$self->session->icon->delete("func=rollbackVersionTag;tagId=".$id,$self->get("url"),$rollbackPrompt).'</td>
|
||||
<td><a href="'.$self->getUrl("func=manageRevisionsInTag;tagId=".$id).'">'.$name.'</a></td>
|
||||
<td>'.$self->session->datetime->epochToHuman($date).'</td>
|
||||
<td>'.$u->username.'</td>
|
||||
<td>
|
||||
<a href="'.$self->getUrl("func=setVersionTag;tagId=".$id).'">'.$setTag.'</a> |
|
||||
<a href="'.$self->getUrl("func=commitVersionTag;tagId=".$id).'" onclick="return confirm(\''.$commitPrompt.'\');">'.$commit.'</a></td></tr>';
|
||||
}
|
||||
$sth->finish;
|
||||
$output .= '</table>';
|
||||
return $ac->render($output);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
sub www_manageRevisionsInTag {
|
||||
my $self = shift;
|
||||
my $ac = WebGUI::AdminConsole->new($self->session,"versions");
|
||||
return $self->session->privilege->insufficient() unless ($self->session->user->isInGroup(3));
|
||||
my $i18n = WebGUI::International->new($self->session,"Asset");
|
||||
$ac->addSubmenuItem($self->getUrl('func=addVersionTag'), $i18n->get("add a version tag"));
|
||||
$ac->addSubmenuItem($self->getUrl('func=manageCommittedVersions'), $i18n->get("manage committed versions"));
|
||||
$ac->addSubmenuItem($self->getUrl('func=manageVersions'), $i18n->get("manage versions"));
|
||||
my $output = '<table width=100% class="content">
|
||||
<tr><th></th><th>Title</th><th>Type</th><th>Revision Date</th><th>Revised By</th></tr> ';
|
||||
my $p = WebGUI::Paginator->new($self->session,$self->getUrl("func=manageRevisionsInTag;tagId=".$self->session->form->process("tagId")));
|
||||
$p->setDataByQuery("select assetData.revisionDate, users.username, asset.assetId, asset.className from assetData
|
||||
left join asset on assetData.assetId=asset.assetId left join users on assetData.revisedBy=users.userId
|
||||
where assetData.tagId=".$self->session->db->quote($self->session->form->process("tagId")));
|
||||
foreach my $row (@{$p->getPageData}) {
|
||||
my ($date,$by,$id, $class) = ($row->{revisionDate}, $row->{username}, $row->{assetId}, $row->{className});
|
||||
my $asset = WebGUI::Asset->new($self->session,$id,$class,$date);
|
||||
$output .= '<tr><td>'.$self->session->icon->delete("func=purgeRevision;proceed=manageRevisionsInTag;tagId=".$self->session->form->process("tagId").";revisionDate=".$date,$asset->get("url"),$i18n->get("purge revision prompt")).'</td>
|
||||
<td>'.$asset->getTitle.'</td>
|
||||
<td><img src="'.$asset->getIcon(1).'" alt="'.$asset->getName.'" />'.$asset->getName.'</td>
|
||||
<td><a href="'.$asset->getUrl("func=viewRevision;revisionDate=".$date).'">'.$self->session->datetime->epochToHuman($date).'</a></td>
|
||||
<td>'.$by.'</td></tr>';
|
||||
}
|
||||
$output .= '</table>'.$p->getBarSimple;
|
||||
my $tag = $self->session->db->getRow("assetVersionTag","tagId",$self->session->form->process("tagId"));
|
||||
return $ac->render($output,$i18n->get("revisions in tag").": ".$tag->{name});
|
||||
return $ac->render($output,$i18n->get("committed versions", "VersionTag").": ".$self->getTitle);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -551,53 +264,13 @@ sub www_purgeRevision {
|
|||
return undef unless $revisionDate;
|
||||
WebGUI::Asset->new($self->session,$self->getId,$self->get("className"),$revisionDate)->purgeRevision;
|
||||
if ($self->session->form->process("proceed") eq "manageRevisionsInTag") {
|
||||
return $self->www_manageRevisionsInTag;
|
||||
$self->session->http->setRedirect($self->getUrl("op=manageRevisionsInTag"));
|
||||
return "";
|
||||
}
|
||||
return $self->www_manageRevisions;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------A
|
||||
|
||||
sub www_rollbackVersionTag {
|
||||
my $self = shift;
|
||||
return $self->session->privilege->adminOnly() unless $self->session->user->isInGroup(3);
|
||||
return $self->session->privilege->vitalComponent() if ($self->session->form->process("tagId") eq "pbversion0000000000001" || $self->session->form->process("tagId") eq "pbversion0000000000002");
|
||||
my $tagId = $self->session->form->process("tagId");
|
||||
if ($tagId) {
|
||||
$self->rollbackVersionTag($tagId);
|
||||
}
|
||||
if ($self->session->form->process("proceed") eq "manageCommittedVersions") {
|
||||
return $self->www_manageCommittedVersions;
|
||||
}
|
||||
return $self->www_manageVersions;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------A
|
||||
|
||||
sub www_rollbackSiteToTime {
|
||||
my $self = shift;
|
||||
return $self->session->privilege->adminOnly() unless $self->session->user->isInGroup(3);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_setVersionTag ()
|
||||
|
||||
Sets the current user's working version tag.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_setVersionTag () {
|
||||
my $self = shift;
|
||||
return $self->session->privilege->insufficient() unless $self->session->user->isInGroup(12);
|
||||
$self->session->scratch->set("versionTag",$self->session->form->process("tagId"));
|
||||
return $self->www_manageVersions();
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
sub www_viewRevision {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue