How can I have my transport package create a database table on install? I’ve reviewed the Rev Docs, Bob’s Guides, various other MODx contributor’s blogs and have come up short every test install I’ve done.
Here’s what I’ve in my resolver:
if ($object->xpdo) {
switch ($options[xPDOTransport::PACKAGE_ACTION]) {
case xPDOTransport::ACTION_INSTALL:
case xPDOTransport::ACTION_UPGRADE:
$modx =& $object->xpdo;
$modelPath = $modx->getOption('package.core_path',null,$modx->getOption('core_path').'components/package/').'model/';
if (!file_exists($modelPath)) break;
if (!$modx->addPackage('package', $modelPath)) {
$modx->log(modX::LOG_LEVEL_ERROR, "[package] was unable to load this package!");
return false;
}
$modx->log(modX::LOG_LEVEL_INFO, ' ');
$modx->log(modX::LOG_LEVEL_INFO, '[package] Creating the database table...');
$manager = $modx->getManager();
if(!$manager->createObjectContainer('Table')) {
$modx->log(modX::LOG_LEVEL_INFO, ' ');
$modx->log(modX::LOG_LEVEL_ERROR, '[package] Failed to create the database table...');
$modx->log(modX::LOG_LEVEL_INFO, ' ');
$modx->log(modX::LOG_LEVEL_ERROR, 'Please manually create a database table for package! ');
$modx->log(modX::LOG_LEVEL_ERROR, 'The name should be something like: "modx_Table"');
$modx->log(modX::LOG_LEVEL_ERROR, 'Where "modx_" is the prefix of your modx database install!');
} else {
$modx->log(modX::LOG_LEVEL_INFO, ' ');
$modx->log(modX::LOG_LEVEL_INFO, '[package] Successfully created the database table...');
};
break;
case xPDOTransport::ACTION_UNINSTALL:
$modx =& $object->xpdo;
$modelPath = $modx->getOption('package.core_path',null,$modx->getOption('core_path').'components/package/').'model/';
if (!file_exists($modelPath)) break;
if (!$modx->addPackage('package', $modelPath)) {
$modx->log(modX::LOG_LEVEL_ERROR, "[package] was unable to load this package!");
return false;
}
$manager = $modx->getManager();
if(!$manager->removeObjectContainer('Table')) {
$modx->log(modX::LOG_LEVEL_INFO, ' ');
$modx->log(modX::LOG_LEVEL_ERROR, '[package] Failed to delete the database table...');
$modx->log(modX::LOG_LEVEL_INFO, ' ');
$modx->log(modX::LOG_LEVEL_ERROR, 'Please manually delete the database table for package! ');
$modx->log(modX::LOG_LEVEL_ERROR, 'The name should be something like: "modx_Table"');
$modx->log(modX::LOG_LEVEL_ERROR, 'Where "modx_" is the prefix of your modx database install!');
} else {
$modx->log(modX::LOG_LEVEL_INFO, ' ');
$modx->log(modX::LOG_LEVEL_INFO, '[package] Successfully deleted the database table...');
};
break;
}
}
return true;
My package talks to the database just fine while being used and the table has been manually created. Just won’t create it during install. I’m using MyComponent to create the package if that helps…