adding zend project folders into old campcaster.

This commit is contained in:
naomiaro 2010-12-07 14:19:27 -05:00
parent 56abfaf28e
commit 7ef0c18b26
4045 changed files with 1054952 additions and 0 deletions

View file

@ -0,0 +1,235 @@
<?php
/**
* This file is part of the Propel package.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @license MIT License
*/
require_once 'ConcreteInheritanceParentBehavior.php';
/**
* Gives a model class the ability to remain in database even when the user deletes object
* Uses an additional column storing the deletion date
* And an additional condition for every read query to only consider rows with no deletion date
*
* @author François Zaninotto
* @version $Revision: 1774 $
* @package propel.generator.behavior.concrete_inheritance
*/
class ConcreteInheritanceBehavior extends Behavior
{
// default parameters value
protected $parameters = array(
'extends' => '',
'descendant_column' => 'descendant_class',
'copy_data_to_parent' => 'true'
);
public function modifyTable()
{
$table = $this->getTable();
$parentTable = $this->getParentTable();
if ($this->isCopyData()) {
// tell the parent table that it has a descendant
if (!$parentTable->hasBehavior('concrete_inheritance_parent')) {
$parentBehavior = new ConcreteInheritanceParentBehavior();
$parentBehavior->setName('concrete_inheritance_parent');
$parentBehavior->addParameter(array('name' => 'descendant_column', 'value' => $this->getParameter('descendant_column')));
$parentTable->addBehavior($parentBehavior);
// The parent table's behavior modifyTable() must be executed before this one
$parentBehavior->getTableModifier()->modifyTable();
$parentBehavior->setTableModified(true);
}
}
// Add the columns of the parent table
foreach ($parentTable->getColumns() as $column) {
if ($column->getName() == $this->getParameter('descendant_column')) {
continue;
}
if ($table->containsColumn($column->getName())) {
continue;
}
$copiedColumn = clone $column;
if ($column->isAutoIncrement() && $this->isCopyData()) {
$copiedColumn->setAutoIncrement(false);
}
$table->addColumn($copiedColumn);
if ($column->isPrimaryKey() && $this->isCopyData()) {
$fk = new ForeignKey();
$fk->setForeignTableName($column->getTable()->getName());
$fk->setOnDelete('CASCADE');
$fk->setOnUpdate(null);
$fk->addReference($copiedColumn, $column);
$fk->isParentChild = true;
$table->addForeignKey($fk);
}
}
// add the foreign keys of the parent table
foreach ($parentTable->getForeignKeys() as $fk) {
$copiedFk = clone $fk;
$copiedFk->setName('');
$copiedFk->setRefPhpName('');
$this->getTable()->addForeignKey($copiedFk);
}
// add the validators of the parent table
foreach ($parentTable->getValidators() as $validator) {
$copiedValidator = clone $validator;
$this->getTable()->addValidator($copiedValidator);
}
// add the indices of the parent table
foreach ($parentTable->getIndices() as $index) {
$copiedIndex = clone $index;
$copiedIndex->setName('');
$this->getTable()->addIndex($copiedIndex);
}
// add the unique indices of the parent table
foreach ($parentTable->getUnices() as $unique) {
$copiedUnique = clone $unique;
$copiedUnique->setName('');
$this->getTable()->addUnique($copiedUnique);
}
// give name to newly added foreign keys and indices
// (this is already done for other elements of the current table)
$table->doNaming();
// add the Behaviors of the parent table
foreach ($parentTable->getBehaviors() as $behavior) {
if ($behavior->getName() == 'concrete_inheritance_parent' || $behavior->getName() == 'concrete_inheritance') {
continue;
}
$copiedBehavior = clone $behavior;
$this->getTable()->addBehavior($copiedBehavior);
}
}
protected function getParentTable()
{
return $this->getTable()->getDatabase()->getTable($this->getParameter('extends'));
}
protected function isCopyData()
{
return $this->getParameter('copy_data_to_parent') == 'true';
}
public function parentClass($builder)
{
switch (get_class($builder)) {
case 'PHP5ObjectBuilder':
return $builder->getNewStubObjectBuilder($this->getParentTable())->getClassname();
break;
case 'QueryBuilder':
return $builder->getNewStubQueryBuilder($this->getParentTable())->getClassname();
break;
default:
return null;
break;
}
}
public function preSave($script)
{
if ($this->isCopyData()) {
return "\$parent = \$this->getSyncParent(\$con);
\$parent->save(\$con);
\$this->setPrimaryKey(\$parent->getPrimaryKey());
";
}
}
public function postDelete($script)
{
if ($this->isCopyData()) {
return "\$this->getParentOrCreate(\$con)->delete(\$con);
";
}
}
public function objectMethods($builder)
{
if (!$this->isCopyData()) {
return;
}
$this->builder = $builder;
$script .= '';
$this->addObjectGetParentOrCreate($script);
$this->addObjectGetSyncParent($script);
return $script;
}
protected function addObjectGetParentOrCreate(&$script)
{
$parentTable = $this->getParentTable();
$parentClass = $this->builder->getNewStubObjectBuilder($parentTable)->getClassname();
$script .= "
/**
* Get or Create the parent " . $parentClass . " object of the current object
*
* @return " . $parentClass . " The parent object
*/
public function getParentOrCreate(\$con = null)
{
if (\$this->isNew()) {
\$parent = new " . $parentClass . "();
\$parent->set" . $this->getParentTable()->getColumn($this->getParameter('descendant_column'))->getPhpName() . "('" . $this->builder->getStubObjectBuilder()->getClassname() . "');
return \$parent;
} else {
return " . $this->builder->getNewStubQueryBuilder($parentTable)->getClassname() . "::create()->findPk(\$this->getPrimaryKey(), \$con);
}
}
";
}
protected function addObjectGetSyncParent(&$script)
{
$parentTable = $this->getParentTable();
$pkeys = $parentTable->getPrimaryKey();
$cptype = $pkeys[0]->getPhpType();
$script .= "
/**
* Create or Update the parent " . $parentTable->getPhpName() . " object
* And return its primary key
*
* @return " . $cptype . " The primary key of the parent object
*/
public function getSyncParent(\$con = null)
{
\$parent = \$this->getParentOrCreate(\$con);";
foreach ($parentTable->getColumns() as $column) {
if ($column->isPrimaryKey() || $column->getName() == $this->getParameter('descendant_column')) {
continue;
}
$phpName = $column->getPhpName();
$script .= "
\$parent->set{$phpName}(\$this->get{$phpName}());";
}
foreach ($parentTable->getForeignKeys() as $fk) {
if (isset($fk->isParentChild) && $fk->isParentChild) {
continue;
}
$refPhpName = $this->builder->getFKPhpNameAffix($fk, $plural = false);
$script .= "
if (\$this->get" . $refPhpName . "() && \$this->get" . $refPhpName . "()->isNew()) {
\$parent->set" . $refPhpName . "(\$this->get" . $refPhpName . "());
}";
}
$script .= "
return \$parent;
}
";
}
}

View file

@ -0,0 +1,89 @@
<?php
/**
* This file is part of the Propel package.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @license MIT License
*/
/**
* Gives a model class the ability to remain in database even when the user deletes object
* Uses an additional column storing the deletion date
* And an additional condition for every read query to only consider rows with no deletion date
*
* @author François Zaninotto
* @version $Revision: 1612 $
* @package propel.generator.behavior.concrete_inheritance
*/
class ConcreteInheritanceParentBehavior extends Behavior
{
// default parameters value
protected $parameters = array(
'descendant_column' => 'descendant_class'
);
public function modifyTable()
{
$table = $this->getTable();
if (!$table->containsColumn($this->getParameter('descendant_column'))) {
$table->addColumn(array(
'name' => $this->getParameter('descendant_column'),
'type' => 'VARCHAR',
'size' => 100
));
}
}
protected function getColumnGetter()
{
return 'get' . $this->getColumnForParameter('descendant_column')->getPhpName();
}
public function objectMethods($builder)
{
$this->builder = $builder;
$script .= '';
$this->addHasChildObject($script);
$this->addGetChildObject($script);
return $script;
}
protected function addHasChildObject(&$script)
{
$script .= "
/**
* Whether or not this object is the parent of a child object
*
* @return bool
*/
public function hasChildObject()
{
return \$this->" . $this->getColumnGetter() . "() !== null;
}
";
}
protected function addGetChildObject(&$script)
{
$script .= "
/**
* Get the child object of this object
*
* @return mixed
*/
public function getChildObject()
{
if (!\$this->hasChildObject()) {
return null;
}
\$childObjectClass = \$this->" . $this->getColumnGetter() . "();
\$childObject = PropelQuery::from(\$childObjectClass)->findPk(\$this->getPrimaryKey());
return \$childObject->hasChildObject() ? \$childObject->getChildObject() : \$childObject;
}
";
}
}