exit();
}
- $this->generateTemplateVersion($argVersion);
+ $this->generateTemplateVersion($db_version);
$this->setupCms($argCms, $db_version);
}
function generateListAll($tables) {
- $allDAO = "<?php\n\$dao = array ();";
- $dao = array();
-
- foreach ($tables as $table) {
- $base = $table['base'] . $table['objectName'];
- if (!array_key_exists($table['objectName'], $dao)) {
- $dao[$table['objectName']] = str_replace('/', '_', $base);
- $allDAO .= "\n\$dao['" . $table['objectName'] . "'] = '" . str_replace('/', '_', $base) . "';";
- }
- else {
- $allDAO .= "\n//NAMESPACE ERROR: " . $table['objectName'] . " already used . " . str_replace('/', '_', $base) . " ignored.";
- }
- }
-
- // TODO deal with the BAO's too ?
- file_put_contents($this->CoreDAOCodePath . "listAll.php", $allDAO);
+ $this->smarty->clear_all_assign();
+ $this->smarty->assign('tables', $tables);
+ file_put_contents($this->CoreDAOCodePath . "AllCoreTables.php", $this->smarty->fetch('listAll.tpl'));
}
function generateCiviTestTruncate($tables) {
function generateCreateSql($database, $tables, $fileName = 'civicrm.mysql') {
echo "Generating sql file\n";
- $this->smarty->clear_all_assign();
+ $this->reset_smarty_assignments();
$this->smarty->assign_by_ref('database', $database);
$this->smarty->assign_by_ref('tables', $tables);
$dropOrder = array_reverse(array_keys($tables));
function generateNavigation() {
echo "Generating navigation file\n";
- $this->smarty->clear_all_assign();
+ $this->reset_smarty_assignments();
file_put_contents($this->sqlCodePath . "civicrm_navigation.mysql", $this->smarty->fetch('civicrm_navigation.tpl'));
}
function generateLocalDataSql($db_version, $locales) {
- $this->smarty->clear_all_assign();
+ $this->reset_smarty_assignments();
global $tsLocale;
$oldTsLocale = $tsLocale;
}
function generateSample() {
- $this->smarty->clear_all_assign();
+ $this->reset_smarty_assignments();
$sample = $this->smarty->fetch('civicrm_sample.tpl');
$sample .= $this->smarty->fetch('civicrm_acl.tpl');
file_put_contents($this->sqlCodePath . 'civicrm_sample.mysql', $sample);
}
function generateDAOs($tables) {
- $this->smarty->clear_all_assign();
foreach (array_keys($tables) as $name) {
$this->smarty->clear_all_cache();
echo "Generating $name as " . $tables[$name]['fileName'] . "\n";
- $this->smarty->clear_all_assign();
+ $this->reset_smarty_assignments();
$this->smarty->assign_by_ref('table', $tables[$name]);
$php = $this->smarty->fetch('dao.tpl');
}
}
- $this->smarty->clear_all_cache();
- $this->smarty->clear_all_assign();
+ $this->reset_smarty_assignments();
$this->smarty->assign_by_ref('columns', $columns);
$this->smarty->assign_by_ref('indices', $indices);
$this->beautifier->save();
}
- function generateTemplateVersion($argVersion) {
- // add the Subversion revision to templates
- // use svnversion if the version was not specified explicitely on the commandline
- if (isset($argVersion) and $argVersion != '') {
- $svnversion = $argVersion;
- }
- else {
- $svnversion = `svnversion .`;
- }
- file_put_contents($this->tplCodePath . "/CRM/common/version.tpl", $svnversion);
+ function generateTemplateVersion($dbVersion) {
+ file_put_contents($this->tplCodePath . "/CRM/common/version.tpl", $dbVersion);
}
function findLocales() {
function getTable($tableXML, &$database, &$tables) {
$name = trim((string ) $tableXML->name);
$klass = trim((string ) $tableXML->class);
- $base = $this->value('base', $tableXML) . '/DAO/';
- $pre = str_replace('/', '_', $base);
+ $base = $this->value('base', $tableXML);
+ $sourceFile = "xml/schema/{$base}/{$klass}.xml";
+ $daoPath = "{$base}/DAO/";
+ $pre = str_replace('/', '_', $daoPath);
$this->classNames[$name] = $pre . $klass;
$localizable = FALSE;
$table = array(
'name' => $name,
- 'base' => $base,
+ 'base' => $daoPath,
+ 'sourceFile' => $sourceFile,
'fileName' => $klass . '.php',
'objectName' => $klass,
'labelName' => substr($name, 8),
$table['foreignKey'] = &$foreign;
}
+ if ($this->value('dynamicForeignKey', $tableXML)) {
+ $dynamicForeign = array();
+ foreach ($tableXML->dynamicForeignKey as $foreignXML) {
+ if ($this->value('drop', $foreignXML, 0) > 0 and $this->value('drop', $foreignXML, 0) <= $this->buildVersion) {
+ continue;
+ }
+ if ($this->value('add', $foreignXML, 0) <= $this->buildVersion) {
+ $this->getDynamicForeignKey($foreignXML, $dynamicForeign, $name);
+ }
+ }
+ $table['dynamicForeignKey'] = $dynamicForeign;
+ }
+
$tables[$name] = &$table;
return;
}
$field['dataPattern'] = $this->value('dataPattern', $fieldXML);
$field['uniqueName'] = $this->value('uniqueName', $fieldXML);
$field['pseudoconstant'] = $this->value('pseudoconstant', $fieldXML);
- if(!empty($fieldXML->pseudoconstant)){
+ if(!empty($field['pseudoconstant'])){
//ok this is a bit long-winded but it gets there & is consistent with above approach
$field['pseudoconstant'] = array();
- $validOptions = array('name', 'optionGroupName', 'table', 'keyColumn', 'labelColumn','class');
- foreach ($validOptions as $pseudoOption){
+ $validOptions = array(
+ // Fields can specify EITHER optionGroupName OR table, not both
+ // (since declaring optionGroupName means we are using the civicrm_option_value table)
+ 'optionGroupName',
+ 'table',
+ // If table is specified, keyColumn and labelColumn are also required
+ 'keyColumn',
+ 'labelColumn',
+ // Non-translated machine name for programmatic lookup. Defaults to 'name' if that column exists
+ 'nameColumn',
+ // Where clause snippet (will be joined to the rest of the query with AND operator)
+ 'condition',
+ );
+ foreach ($validOptions as $pseudoOption) {
if(!empty($fieldXML->pseudoconstant->$pseudoOption)){
$field['pseudoconstant'][$pseudoOption] = $this->value($pseudoOption, $fieldXML->pseudoconstant);
}
}
+ // For now, fields that have option lists that are not in the db can simply
+ // declare an empty pseudoconstant tag and we'll add this placeholder.
+ // That field's BAO::buildOptions fn will need to be responsible for generating the option list
+ if (empty($field['pseudoconstant'])) {
+ $field['pseudoconstant'] = 'not in database';
+ }
}
$fields[$name] = &$field;
}
$foreignKeys[$name] = &$foreignKey;
}
+ function getDynamicForeignKey(&$foreignXML, &$dynamicForeignKeys) {
+ $foreignKey = array(
+ 'idColumn' => trim($foreignXML->idColumn),
+ 'typeColumn' => trim($foreignXML->typeColumn),
+ 'key' => trim($this->value('key', $foreignXML)),
+ );
+ $dynamicForeignKeys[] = $foreignKey;
+ }
+
protected function value($key, &$object, $default = NULL) {
if (isset($object->$key)) {
return (string ) $object->$key;
}
return 'CRM_Utils_Type::HUGE';
}
+
+ /**
+ * Clear the smarty cache and assign default values
+ */
+ function reset_smarty_assignments() {
+ $this->smarty->clear_all_assign();
+ $this->smarty->clear_all_cache();
+ $this->smarty->assign('generated', "DO NOT EDIT. Generated by " . basename(__FILE__));
+ }
}