08-03-2017, 07:15 AM
I have created a cbUpdate that installs a field. This all works fine, but I see a problem when trying to test reversing the update. The update is in 'pending' status. Not sure why, but I can't try the 'undoChange' now either. Not a serious problem, since the field installs correctly, but still, I'd like to know what I'm doing wrong here.
Here's the code:
Here's the code:
PHP Code:
class installSoFieldInPo extends cbupdaterWorker {
function applyChange() {
if ($this->hasError()) $this->sendError();
if ($this->isApplied()) {
$this->sendMsg('Changeset '.get_class($this).' already applied!');
} else {
global $adb;
// CODE
include_once 'include/utils/utils.php';
include_once('vtlib/Vtiger/Module.php');
$module = Vtiger_Module::getInstance('PurchaseOrder');
$block = Vtiger_Block::getInstance('LBL_PO_INFORMATION', $module);
// Setup the field
$field = new Vtiger_Field();
$field->name = 'po_related_soid';
$field->label = 'Related SalesOrder';
$field->table = 'vtiger_purchaseorder';
$field->column = 'po_related_soid';
$field->columntype = 'INT(11)';
$field->uitype = 10;
$field->typeofdata = 'V~O';
$block->addField($field);
$field->setRelatedModules(array('SalesOrder'));
}
$this->finishExecution();
}
function undoChange() {
if ($this->hasError()) $this->sendError();
if ($this->isApplied()) {
global $adb;
// CODE
include_once('vtlib/Vtiger/Module.php');
$module = Vtiger_Module::getInstance('PurchaseOrder');
$field = new Vtiger_Field();
$field->getInstance('po_related_soid', $module);
$field->delete();
$adb->pquery("ALTER TABLE vtiger_purchaseorder DROP COLUMN ?", array('po_related_soid'));
} else {
$this->sendMsg('Changeset '.get_class($this).' not applied, it cannot be undone!');
}
$this->finishExecution();
}
function isApplied() {
$done = parent::isApplied();
if (!$done) {
global $adb;
// CODE: set $done
$r = $adb->query("SHOW COLUMNS FROM `vtiger_purchaseorder` LIKE `po_related_soid`");
if ($adb->getAffectedRowCount($r) > 0) {
$done = true;
}
}
return $done;
}
}