/** * @return bool */ public function populate() { \Civi\Test::schema()->truncateAll(); \Civi\Test::schema()->setStrict(FALSE); $sqlDir = dirname(dirname(__DIR__)) . "/sql"; $query2 = file_get_contents("{$sqlDir}/civicrm_data.mysql"); $query3 = file_get_contents("{$sqlDir}/test_data.mysql"); $query4 = file_get_contents("{$sqlDir}/test_data_second_domain.mysql"); if (\Civi\Test::execute($query2) === FALSE) { throw new RuntimeException("Cannot load civicrm_data.mysql. Aborting."); } if (\Civi\Test::execute($query3) === FALSE) { throw new RuntimeException("Cannot load test_data.mysql. Aborting."); } if (\Civi\Test::execute($query4) === FALSE) { throw new RuntimeException("Cannot load test_data.mysql. Aborting."); } unset($query, $query2, $query3); \Civi\Test::schema()->setStrict(TRUE); // Rebuild triggers civicrm_api('system', 'flush', array('version' => 3, 'triggers' => 1)); \CRM_Core_BAO_ConfigSetting::setEnabledComponents(array('CiviEvent', 'CiviContribute', 'CiviMember', 'CiviMail', 'CiviReport', 'CiviPledge')); return TRUE; }
/** * @param bool $perClass * @param null $object * @return bool * TRUE if the populate logic runs; FALSE if it is skipped */ protected static function _populateDB($perClass = FALSE, &$object = NULL) { if ($perClass || $object == NULL) { $dbreset = TRUE; } else { $dbreset = $object->requireDBReset(); } if (self::$populateOnce || !$dbreset) { return FALSE; } self::$populateOnce = NULL; $dbName = self::getDBName(); $pdo = self::$utils->pdo; // only consider real tables and not views $tables = $pdo->query("SELECT table_name FROM INFORMATION_SCHEMA.TABLES\n WHERE TABLE_SCHEMA = '{$dbName}' AND TABLE_TYPE = 'BASE TABLE'"); $truncates = array(); $drops = array(); foreach ($tables as $table) { // skip log tables if (substr($table['table_name'], 0, 4) == 'log_') { continue; } // don't change list of installed extensions if ($table['table_name'] == 'civicrm_extension') { continue; } if (substr($table['table_name'], 0, 14) == 'civicrm_value_') { $drops[] = 'DROP TABLE ' . $table['table_name'] . ';'; } else { $truncates[] = 'TRUNCATE ' . $table['table_name'] . ';'; } } $queries = array("USE {$dbName};", "SET foreign_key_checks = 0", "SET SQL_MODE='STRICT_ALL_TABLES';", "SET global innodb_flush_log_at_trx_commit = 2;"); $queries = array_merge($queries, $truncates); $queries = array_merge($queries, $drops); foreach ($queries as $query) { if (self::$utils->do_query($query) === FALSE) { // failed to create test database echo "failed to create test db."; exit; } } // initialize test database $sql_file2 = dirname(dirname(dirname(dirname(__FILE__)))) . "/sql/civicrm_data.mysql"; $sql_file3 = dirname(dirname(dirname(dirname(__FILE__)))) . "/sql/test_data.mysql"; $sql_file4 = dirname(dirname(dirname(dirname(__FILE__)))) . "/sql/test_data_second_domain.mysql"; $query2 = file_get_contents($sql_file2); $query3 = file_get_contents($sql_file3); $query4 = file_get_contents($sql_file4); if (self::$utils->do_query($query2) === FALSE) { echo "Cannot load civicrm_data.mysql. Aborting."; exit; } if (self::$utils->do_query($query3) === FALSE) { echo "Cannot load test_data.mysql. Aborting."; exit; } if (self::$utils->do_query($query4) === FALSE) { echo "Cannot load test_data.mysql. Aborting."; exit; } // done with all the loading, get transactions back if (self::$utils->do_query("set global innodb_flush_log_at_trx_commit = 1;") === FALSE) { echo "Cannot set global? Huh?"; exit; } if (self::$utils->do_query("SET foreign_key_checks = 1") === FALSE) { echo "Cannot get foreign keys back? Huh?"; exit; } unset($query, $query2, $query3); // Rebuild triggers civicrm_api('system', 'flush', array('version' => 3, 'triggers' => 1)); CRM_Core_BAO_ConfigSetting::setEnabledComponents(array('CiviEvent', 'CiviContribute', 'CiviMember', 'CiviMail', 'CiviReport', 'CiviPledge')); return TRUE; }