Commit 7b5bb21833b121502f8856737421e3522b376c0d

Authored by bshuttle
1 parent acf24f4f

Fix for KTS-89: multi-way comparison support between documents.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@4683 c91229c3-7414-0410-bfa2-8a42b809f60b
templates/kt3/document/metadata_history.smarty
@@ -10,7 +10,8 @@ @@ -10,7 +10,8 @@
10 <th class="username">{i18n}User{/i18n}</th> 10 <th class="username">{i18n}User{/i18n}</th>
11 <th class="date">{i18n}Metadata Version{/i18n}</th> 11 <th class="date">{i18n}Metadata Version{/i18n}</th>
12 <th class="date">{i18n}Content Version{/i18n}</th> 12 <th class="date">{i18n}Content Version{/i18n}</th>
13 - <th class="compare">{i18n}Compare{/i18n}</th> 13 + <th class="compare">{i18n}Compare with Current{/i18n}</th>
  14 + <th class="compare">{i18n}Compare with Other Version{/i18n}</th>
14 15
15 </tr> 16 </tr>
16 </thead> 17 </thead>
@@ -26,9 +27,10 @@ @@ -26,9 +27,10 @@
26 {if ($document->getMetadataVersion() == $oVersion->getMetadataVersion())} 27 {if ($document->getMetadataVersion() == $oVersion->getMetadataVersion())}
27 <strong>{i18n}current version{/i18n}</strong> 28 <strong>{i18n}current version{/i18n}</strong>
28 {else} 29 {else}
29 - <a href="{$smarty.server.PHP_SELF}?action=viewComparison&fDocumentId={$document->getId()}&fComparisonVersion={$oVersion->getCurrentMetadataVersionId()}">{i18n}compare with current{/i18n}</a></td> 30 + <a href="{$smarty.server.PHP_SELF}?action=viewComparison&fDocumentId={$document->getId()}&fBaseVersion={$oVersion->getMetadataVersionId()}&fComparisonVersion={$oVersion->getCurrentMetadataVersionId()}">{i18n}compare with current{/i18n}</a></td>
30 {/if} 31 {/if}
31 - </td> 32 + </td>
  33 + <td><a href="{$smarty.server.PHP_SELF}?action=startComparison&fDocumentId={$document->getId()}&fComparisonVersion={$oVersion->getCurrentMetadataVersionId()}">{i18n}compare with other version{/i18n}</a></td>
32 </tr> 34 </tr>
33 {/foreach} 35 {/foreach}
34 </tbody> 36 </tbody>
templates/ktcore/document/comparison_version_select.smarty 0 → 100644
  1 +<h2>{i18n}Select Document Version to compare against{/i18n}</h2>
  2 +
  3 +<p class="descriptiveText">{i18n}This page lists versions of document metadata and allows you to compare a metadata version with the current metadata content.{/i18n}</p>
  4 +
  5 + <table class="document_history" summary="{i18n}Document History for KnowledgeTree New UI Presentation{/i18n}" cellspacing="0">
  6 +
  7 + <thead>
  8 + <tr>
  9 + <th class="username">{i18n}User{/i18n}</th>
  10 + <th class="date">{i18n}Metadata Version{/i18n}</th>
  11 + <th class="compare">{i18n}Compare{/i18n}</th>
  12 + </tr>
  13 + </thead>
  14 + <tbody>
  15 + {foreach item=oVersion from=$versions}
  16 + <tr class="{cycle options=even,odd}">
  17 + <td class="username">{$context->getUserForId($oVersion->getVersionCreatorId())}</td>
  18 + <td class="date">{$oVersion->getMetadataVersion()}</td>
  19 + <td class="compare">
  20 + {if ($document->getCurrentMetadataVersionId() == $oVersion->getCurrentMetadataVersionId())}
  21 + <strong>{i18n}comparing against this version{/i18n}</strong>
  22 + {else}
  23 + <a href="{$smarty.server.PHP_SELF}?action=viewComparison&fDocumentId={$document->getId()}&fBaseVersion={$document->getCurrentMetadataVersionId()}&fComparisonVersion={$oVersion->getCurrentMetadataVersionId()}">{i18n}compare{/i18n}</a>
  24 + {/if}
  25 + </td>
  26 + </tr>
  27 + {/foreach}
  28 + </tbody>
  29 +
  30 + </table>
view.php
@@ -255,7 +255,8 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { @@ -255,7 +255,8 @@ class ViewDocumentDispatcher extends KTStandardDispatcher {
255 // this gets in: 255 // this gets in:
256 // fDocumentId (document to compare against) 256 // fDocumentId (document to compare against)
257 // fComparisonVersion (the metadata_version of the appropriate document) 257 // fComparisonVersion (the metadata_version of the appropriate document)
258 - function do_viewComparison() { 258 + function do_viewComparison() {
  259 +
259 $document_data = array(); 260 $document_data = array();
260 $document_id = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); 261 $document_id = KTUtil::arrayGet($_REQUEST, 'fDocumentId');
261 if ($document_id === null) { 262 if ($document_id === null) {
@@ -264,10 +265,13 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { @@ -264,10 +265,13 @@ class ViewDocumentDispatcher extends KTStandardDispatcher {
264 } 265 }
265 $document_data["document_id"] = $document_id; 266 $document_data["document_id"] = $document_id;
266 267
  268 +
  269 + $base_version = KTUtil::arrayGet($_REQUEST, 'fBaseVersion');
  270 +
267 // try get the document. 271 // try get the document.
268 - $oDocument =& Document::get($document_id); 272 + $oDocument =& Document::get($document_id, $base_version);
269 if (PEAR::isError($oDocument)) { 273 if (PEAR::isError($oDocument)) {
270 - $this->oPage->addError('The document you attempted to retrieve is invalid. Please <a href="' . KTBrowseUtil::getBrowseBaseUrl() . '">browse</a> for one.'); 274 + $this->oPage->addError('The base document you attempted to retrieve is invalid. Please <a href="' . KTBrowseUtil::getBrowseBaseUrl() . '">browse</a> for one.');
271 return $this->do_error(); 275 return $this->do_error();
272 } 276 }
273 if (!Permission::userHasDocumentReadPermission($oDocument)) { 277 if (!Permission::userHasDocumentReadPermission($oDocument)) {
@@ -360,7 +364,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { @@ -360,7 +364,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher {
360 } 364 }
361 365
362 // FIXME handle ad-hoc fieldsets. 366 // FIXME handle ad-hoc fieldsets.
363 - 367 + $this->addPortlets();
364 $oTemplating = new KTTemplating; 368 $oTemplating = new KTTemplating;
365 $oTemplate = $oTemplating->loadTemplate("kt3/compare_document"); 369 $oTemplate = $oTemplating->loadTemplate("kt3/compare_document");
366 $aTemplateData = array( 370 $aTemplateData = array(
@@ -382,6 +386,55 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { @@ -382,6 +386,55 @@ class ViewDocumentDispatcher extends KTStandardDispatcher {
382 // FIXME show something useful / generic. 386 // FIXME show something useful / generic.
383 } 387 }
384 388
  389 + function do_startComparison() {
  390 + $document_data = array();
  391 + $document_id = KTUtil::arrayGet($_REQUEST, 'fDocumentId');
  392 + if ($document_id === null) {
  393 + $this->oPage->addError('No document was requested. Please <a href="' . KTBrowseUtil::getBrowseBaseUrl() . '">browse</a> for one.');
  394 + return $this->do_error();
  395 + }
  396 + $document_data["document_id"] = $document_id;
  397 +
  398 + $comparison_version = KTUtil::arrayGet($_REQUEST, 'fComparisonVersion');
  399 + if ($comparison_version=== null) {
  400 + $this->oPage->addError('No comparison version was requested. Please <a href="?action=history&fDocumentId='.$document_id.'">select a version</a>.');
  401 + return $this->do_error();
  402 + }
  403 +
  404 + // try get the document.
  405 + $oDocument =& Document::get($document_id, $comparison_version);
  406 + if (PEAR::isError($oDocument)) {
  407 + $this->oPage->addError('The document you attempted to retrieve is invalid. Please <a href="' . KTBrowseUtil::getBrowseBaseUrl() . '">browse</a> for one.');
  408 + return $this->do_error();
  409 + }
  410 + if (!Permission::userHasDocumentReadPermission($oDocument)) {
  411 + // FIXME inconsistent.
  412 + $this->oPage->addError(_('You are not allowed to view this document'));
  413 + return $this->do_error();
  414 + }
  415 + $this->oDocument =& $oDocument;
  416 + $aOptions = array("final" => false);
  417 + $this->aBreadcrumbs = array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForDocument($oDocument, $aOptions));
  418 + $this->oPage->setBreadcrumbDetails(_("Select Document Version to compare against"));
  419 +
  420 + $aMetadataVersions = KTDocumentMetadataVersion::getByDocument($oDocument);
  421 + $aVersions = array();
  422 + foreach ($aMetadataVersions as $oVersion) {
  423 + $aVersions[] = Document::get($oDocument->getId(), $oVersion->getId());
  424 + }
  425 +
  426 + $oTemplating = new KTTemplating;
  427 + $oTemplate = $oTemplating->loadTemplate("ktcore/document/comparison_version_select");
  428 + $aTemplateData = array(
  429 + "context" => $this,
  430 + "document_id" => $document_id,
  431 + "document" => $oDocument,
  432 + "versions" => $aVersions,
  433 + 'downloadaction' => $oAction,
  434 + );
  435 + return $oTemplate->render($aTemplateData);
  436 + }
  437 +
385 function getUserForId($iUserId) { 438 function getUserForId($iUserId) {
386 $u = User::get($iUserId); 439 $u = User::get($iUserId);
387 return $u->getName(); 440 return $u->getName();