Skip to content

Commit

Permalink
[Versionable] Added template for isVersioningNecessary()
Browse files Browse the repository at this point in the history
  • Loading branch information
willdurand committed Jul 24, 2012
1 parent 7de61da commit ba385f6
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 45 deletions.
Expand Up @@ -211,57 +211,23 @@ public function enforceVersioning()


protected function addIsVersioningNecessary(&$script) protected function addIsVersioningNecessary(&$script)
{ {
$peerClass = $this->builder->getStubPeerBuilder()->getClassname(); $peerClassName = $this->builder->getStubPeerBuilder()->getClassname();
$script .= "
/**
* Checks whether the current state must be recorded as a version
*
* @param PropelPDO \$con An optional PropelPDO connection to use.
*
* @return boolean
*/
public function isVersioningNecessary(\$con = null)
{
if (\$this->alreadyInSave) {
return false;
}
if (\$this->enforceVersion) {
return true;
}


if ({$peerClass}::isVersioningEnabled() && (\$this->isNew() || \$this->isModified() || \$this->isDeleted())) { $fkGetters = array();
return true;
}";
foreach ($this->behavior->getVersionableFks() as $fk) { foreach ($this->behavior->getVersionableFks() as $fk) {
$fkGetter = $this->builder->getFKPhpNameAffix($fk, $plural = false); $fkGetters[] = $this->builder->getFKPhpNameAffix($fk, $plural = false);
$script .= "
if (null !== (\$object = \$this->get{$fkGetter}(\$con)) && \$object->isVersioningNecessary(\$con)) {
return true;
}";
} }
foreach ($this->behavior->getVersionableReferrers() as $fk) {
$fkGetter = $this->builder->getRefFKPhpNameAffix($fk, $plural = true);
$script .= "
// to avoid infinite loops, emulate in save
\$this->alreadyInSave = true;
foreach (\$this->get{$fkGetter}(null, \$con) as \$relatedObject) {
if (\$relatedObject->isVersioningNecessary(\$con)) {
\$this->alreadyInSave = false;


return true; $refFkGetters = array();
} foreach ($this->behavior->getVersionableReferrers() as $fk) {
} $refFkGetters[] = $this->builder->getRefFKPhpNameAffix($fk, $plural = true);
\$this->alreadyInSave = false;
";
} }


$script .= " $script .= $this->behavior->renderTemplate('objectIsVersioningNecessary', array(
'peerClassName' => $peerClassName,
return false; 'fkGetters' => $fkGetters,
} 'refFkGetters' => $refFkGetters,
"; ));
} }


protected function addAddVersion(&$script) protected function addAddVersion(&$script)
Expand Down
@@ -0,0 +1,41 @@

/**
* Checks whether the current state must be recorded as a version
*
* @return boolean
*/
public function isVersioningNecessary($con = null)
{
if ($this->alreadyInSave) {
return false;
}

if ($this->enforceVersion) {
return true;
}

if (<?php echo $peerClassName ?>::isVersioningEnabled() && ($this->isNew() || $this->isModified() || $this->isDeleted())) {
return true;
}

<?php foreach ($fkGetters as $fkGetter) : ?>
if (null !== ($object = $this->get<?php echo $fkGetter ?>($con)) && $object->isVersioningNecessary($con)) {
return true;
}

<?php endforeach; ?>
<?php foreach ($refFkGetters as $fkGetter) : ?>
// to avoid infinite loops, emulate in save
$this->alreadyInSave = true;
foreach ($this->get<?php echo $fkGetter ?>(null, $con) as $relatedObject) {
if ($relatedObject->isVersioningNecessary($con)) {
$this->alreadyInSave = false;

return true;
}
}
$this->alreadyInSave = false;

<?php endforeach; ?>
return false;
}

0 comments on commit ba385f6

Please sign in to comment.