function __construct($create_tables = false)
 {
     $this->create_tables = $create_tables;
     // use another table prefix?
     if (file_exists(WB_PATH . '/modules/' . basename(dirname(__FILE__)) . '/config.json')) {
         $config = json_decode(file_get_contents(WB_PATH . '/modules/' . basename(dirname(__FILE__)) . '/config.json'), true);
         if (isset($config['table_prefix'])) {
             self::$table_prefix = $config['table_prefix'];
         }
     }
     parent::__construct();
     $this->setTablePrefix(self::$table_prefix);
     $this->setTableName('mod_kit_cronjob_error');
     $this->addFieldDefinition(self::field_id, "INT NOT NULL AUTO_INCREMENT", true);
     $this->addFieldDefinition(self::field_error, "TEXT NOT NULL DEFAULT ''");
     $this->addFieldDefinition(self::field_timestamp, "TIMESTAMP");
     // check field definitions
     $this->checkFieldDefinitions();
     // create tables
     if ($this->create_tables) {
         if (!$this->sqlTableExists()) {
             if (!$this->sqlCreateTable()) {
                 $this->setError(sprintf('[%s - %s] %s', __METHOD__, __LINE__, $this->getError()));
                 return false;
             }
         }
     }
     return true;
 }
        // Blindwerte eintragen
        $datas = array(array(dbCronjobData::field_item => dbCronjobData::item_last_call, dbCronjobData::field_value => ''), array(dbCronjobData::field_item => dbCronjobData::item_last_job, dbCronjobData::field_value => ''), array(dbCronjobData::field_item => dbCronjobData::item_last_nl_id, dbCronjobData::field_value => ''));
        foreach ($datas as $data) {
            if (!$dbCronjobData->sqlInsertRecord($data)) {
                $error .= sprintf('<p>[Installation] %s</p>', $dbCronjobData->getError());
            }
        }
    }
}
$dbCronjobNewsletterLog = new dbCronjobNewsletterLog();
if (!$dbCronjobNewsletterLog->sqlTableExists()) {
    if (!$dbCronjobNewsletterLog->sqlCreateTable()) {
        $error .= sprintf('<p>[Upgrade] %s</p>', $dbCronjobNewsletterLog->getError());
    }
}
$dbCronjobErrorLog = new dbCronjobErrorLog();
if (!$dbCronjobErrorLog->sqlTableExists()) {
    if (!$dbCronjobErrorLog->sqlCreateTable()) {
        $error .= sprintf('<p>[Upgrade] %s</p>', $dbCronjobErrorLog->getError());
    }
}
/**
 * BUGFIX correct a problem of KIT < 0.34 with duplicate active entries for the same e-mail address within dbKITregister
 */
$SQL = sprintf("SELECT %s, %s, COUNT(*) AS cnt FROM %s WHERE %s='%s' GROUP BY %s HAVING cnt>1", dbKITregister::field_contact_id, dbKITregister::field_id, $dbKITregister->getTableName(), dbKITregister::field_status, dbKITregister::status_active, dbKITregister::field_email);
$registers = array();
if (!$dbKITregister->sqlExec($SQL, $registers)) {
    $error .= sprintf('<p>[BUGFIX] %s</p>', $dbKITregister->getError());
} else {
    foreach ($registers as $register) {
        $SQL = sprintf("SELECT %s FROM %s WHERE %s='%s' AND %s='%s'", dbKITcontact::field_id, $dbKITcontact->getTableName(), dbKITcontact::field_id, $register[dbKITregister::field_contact_id], dbKITcontact::field_status, dbKITcontact::status_deleted);
$dbCronjobData = new dbCronjobData(true);
if ($dbCronjobData->isError()) {
    $error .= sprintf('<p>[Installation] %s</p>', $dbCronjobData->getError());
}
// Blindwerte eintragen
$datas = array(array(dbCronjobData::field_item => dbCronjobData::item_last_call, dbCronjobData::field_value => ''), array(dbCronjobData::field_item => dbCronjobData::item_last_job, dbCronjobData::field_value => ''), array(dbCronjobData::field_item => dbCronjobData::item_last_nl_id, dbCronjobData::field_value => ''));
foreach ($datas as $data) {
    if (!$dbCronjobData->sqlInsertRecord($data)) {
        $error .= sprintf('<p>[Installation] %s</p>', $dbCronjobData->getError());
    }
}
$dbCronjobNewsletterLog = new dbCronjobNewsletterLog(true);
if ($dbCronjobNewsletterLog->isError()) {
    $error .= sprintf('<p>[Installation] %s</p>', $dbCronjobNewsletterLog->getError());
}
$dbCronjobErrorLog = new dbCronjobErrorLog(true);
if ($dbCronjobErrorLog->isError()) {
    $error .= sprintf('<p>[Installation] %s</p>', $dbCronjobErrorLog->getError());
}
$dbLanguages = new dbKITlanguages(true);
if ($dbLanguages->isError()) {
    $error .= sprintf('<p>[Installation] %s</p>', $dbLanguages->getError());
}
// create the kit_link table
$SQL = "CREATE TABLE IF NOT EXISTS `" . TABLE_PREFIX . "mod_kit_links` ( " . "`id` INT(11) NOT NULL AUTO_INCREMENT, " . "`url` TEXT NOT NULL, " . "`guid` VARCHAR(128) NOT NULL DEFAULT '', " . "`type` ENUM('DOWNLOAD','UPLOAD','UNDEFINED') NOT NULL DEFAULT 'UNDEFINED', " . "`option` ENUM('THROW-AWAY','PERMANENT') NOT NULL DEFAULT 'THROW-AWAY', " . "`status` ENUM('ACTIVE','LOCKED','DELETED') NOT NULL DEFAULT 'ACTIVE', " . "`file_url` TEXT NOT NULL, " . "`count` INT(11) NOT NULL DEFAULT '0', " . "`last_call` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', " . "`kit_id` INT(11) NOT NULL DEFAULT '-1', " . "`timestamp` TIMESTAMP, " . "PRIMARY KEY (`id`), " . "KEY (`guid`,`kit_id`)" . ") ENGINE=MyIsam AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci";
$database->query($SQL);
if ($database->is_error()) {
    $error .= sprintf('[INSTALLATION kit_links] %s', $database->get_error());
}
// Prompt Errors
if (!empty($error)) {
        $error .= sprintf('<p>[Delete Table] %s</p>', $dbKITnewsletterProcess->getError());
    }
}
$dbCronjobData = new dbCronjobData();
if ($dbCronjobData->sqlTableExists()) {
    if (!$dbCronjobData->sqlDeleteTable()) {
        $error .= sprintf('<p>[Delete Table] %s</p>', $dbCronjobData->getError());
    }
}
$dbCronjobNewsletterLog = new dbCronjobNewsletterLog();
if ($dbCronjobNewsletterLog->sqlTableExists()) {
    if (!$dbCronjobNewsletterLog->sqlDeleteTable()) {
        $error .= sprintf('<p>[Delete Table] %s</p>', $dbCronjobNewsletterLog->getError());
    }
}
$dbCronjobErrorLog = new dbCronjobErrorLog();
if ($dbCronjobErrorLog->sqlTableExists()) {
    if (!$dbCronjobErrorLog->sqlDeleteTable()) {
        $error .= sprintf('<p>[Delete Table] %s</p>', $dbCronjobErrorLog->getError());
    }
}
$dbKITlanguages = new dbKITlanguages();
if ($dbKITlanguages->sqlTableExists()) {
    if (!$dbKITlanguages->sqlDeleteTable()) {
        $error .= sprintf('<p>[Delete Table] %s</p>', $dbKITlanguages->getError());
    }
}
// Prompt Errors
if (!empty($error)) {
    $admin->print_error($error);
}