Exemple #1
0
<?php

defined("_VALID_ACCESS") || die('Direct access forbidden');
$recordsets = Utils_RecordBrowserCommon::list_installed_recordsets();
$checkpoint = Patch::checkpoint('recordset');
$processed = $checkpoint->get('processed', array());
foreach ($recordsets as $tab => $caption) {
    if (isset($processed[$tab])) {
        continue;
    }
    $processed[$tab] = true;
    Patch::require_time(5);
    $tab = $tab . "_field";
    PatchUtil::db_add_column($tab, 'export', 'I1 DEFAULT 1');
    $checkpoint->set('processed', $processed);
}
Exemple #2
0
if (!isset($columns['ID'])) {
    $tab_ids_checkpoint = Patch::checkpoint('tab_ids');
    if (!$tab_ids_checkpoint->is_done()) {
        Patch::require_time(20);
        if (DB::is_postgresql()) {
            DB::Execute('ALTER TABLE recordbrowser_table_properties DROP CONSTRAINT recordbrowser_table_properties_pkey');
            DB::Execute('ALTER TABLE recordbrowser_table_properties ADD COLUMN id SERIAL PRIMARY KEY');
        } else {
            DB::Execute('ALTER TABLE recordbrowser_table_properties DROP PRIMARY KEY');
            DB::Execute('ALTER TABLE recordbrowser_table_properties ADD id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY');
        }
        DB::CreateIndex('recordbrowser_table_properties_tab', 'recordbrowser_table_properties', 'tab', array('UNIQUE' => 1));
        $tab_ids_checkpoint->done();
    }
}
$field_ids_checkpoint = Patch::checkpoint('field_ids');
if (!$field_ids_checkpoint->is_done()) {
    Patch::require_time(20);
    $recordsets = Utils_RecordBrowserCommon::list_installed_recordsets();
    foreach ($recordsets as $tab => $caption) {
        $tab_f = $tab . "_field";
        $columns = DB::MetaColumnNames($tab_f);
        if (!isset($columns['ID'])) {
            if (DB::is_postgresql()) {
                @DB::Execute('ALTER TABLE ' . $tab_f . ' DROP CONSTRAINT ' . $tab_f . '_pkey');
                DB::Execute('ALTER TABLE ' . $tab_f . ' ADD COLUMN id SERIAL PRIMARY KEY');
            } else {
                @DB::Execute('ALTER TABLE ' . $tab_f . ' DROP PRIMARY KEY');
                DB::Execute('ALTER TABLE ' . $tab_f . ' ADD id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY');
            }
            DB::CreateIndex($tab_f . '_field', $tab_f, 'field', array('UNIQUE' => 1));
<?php

defined("_VALID_ACCESS") || die('Direct access forbidden');
$checkpoint = Patch::checkpoint('mark_to_index');
if (!$checkpoint->is_done()) {
    $done = $checkpoint->get('recordsets', array());
    $recordsets = Utils_RecordBrowserCommon::list_installed_recordsets();
    foreach ($recordsets as $tab => $caption) {
        Patch::require_time(5);
        if (!isset($done[$tab])) {
            DB::Execute('UPDATE ' . $tab . '_data_1 SET indexed=0');
            $done[$tab] = true;
            $checkpoint->set('recordsets', $done);
        }
    }
    $checkpoint->done();
}
<?php

defined("_VALID_ACCESS") || die('Direct access forbidden');
ModuleManager::install('Utils/FileStorage');
@PatchUtil::db_add_column('utils_attachment_file', 'filestorage_id', 'I8 NOTNULL');
Patch::set_message('Processing files');
$files_checkpoint = Patch::checkpoint('files');
if (!$files_checkpoint->is_done()) {
    if ($files_checkpoint->has('files')) {
        $files = $files_checkpoint->get('files');
    } else {
        $files = 0;
    }
    if ($files_checkpoint->has('files_qty')) {
        $files_qty = $files_checkpoint->get('files_qty');
    } else {
        $files_qty = DB::GetOne('SELECT count(*) FROM utils_attachment_file');
        $files_checkpoint->set('files_qty', $files_qty);
    }
    while ($ret = DB::SelectLimit('SELECT f.id,f.attach_id as aid,f.original FROM utils_attachment_file f ORDER BY f.id', 1, $files++)) {
        $row = $ret->FetchRow();
        if (!$row) {
            break;
        }
        if (file_exists(DATA_DIR . '/Utils_Attachment/' . $row['aid'] . '/' . $row['id'])) {
            Patch::set_message('Processing file: ' . $files . '/' . $files_qty);
            $files_checkpoint->require_time(2);
            $fsid = Utils_FileStorageCommon::write_file($row['original'], DATA_DIR . '/Utils_Attachment/' . $row['aid'] . '/' . $row['id'], 'attachment_file/' . $row['id']);
            unlink(DATA_DIR . '/Utils_Attachment/' . $row['aid'] . '/' . $row['id']);
            DB::Execute('UPDATE utils_attachment_file SET filestorage_id=%d WHERE id=%d', array($fsid, $row['id']));
        }
        JOIN information_schema.constraint_column_usage AS ccu
          ON ccu.constraint_name = tc.constraint_name
        WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name='recordbrowser_words_map' AND kcu.column_name='word_id';");
        if($a) {
            DB::Execute('alter table recordbrowser_words_map drop CONSTRAINT "'.$a.'"');
        }
    }
    DB::CreateIndex('recordbrowser_words_map__idx','recordbrowser_words_map','word_id,tab,record_id,field_name',array('DROP'=>1));
    DB::CreateIndex('recordbrowser_words_map__idx2','recordbrowser_words_map','tab,record_id',array('DROP'=>1));
    
    DB::Execute('TRUNCATE TABLE recordbrowser_words_index');
    
    $remove_idx_checkpoint->done();
}

$finalize_checkpoint = Patch::checkpoint('finalize');
if(!$finalize_checkpoint->is_done()) {
    Patch::require_time(20);

    PatchUtil::db_drop_column('recordbrowser_words_map', 'tab');
    PatchUtil::db_drop_column('recordbrowser_words_map', 'field_name');

    if(DB::is_postgresql()) {
        DB::Execute('ALTER TABLE recordbrowser_words_map ADD CONSTRAINT word_id_fk FOREIGN KEY (word_id) REFERENCES recordbrowser_words_index');
    } else {
        DB::Execute('ALTER TABLE recordbrowser_words_map ADD FOREIGN KEY (word_id) REFERENCES recordbrowser_words_index(id)');
    }
    DB::CreateIndex('recordbrowser_words_map__idx','recordbrowser_words_map','word_id,tab_id');
    $finalize_checkpoint->done();
}
<?php

defined("_VALID_ACCESS") || die('Direct access forbidden');
// Remove words map records on recordset removal
$checkpoint = Patch::checkpoint('truncate');
if (!$checkpoint->is_done()) {
    Patch::require_time(5);
    DB::Execute('TRUNCATE TABLE recordbrowser_words_map');
    $checkpoint->done();
}
$alter_checkpoint = Patch::checkpoint('steps');
if (DB::is_postgresql()) {
    if ($alter_checkpoint->get('word_id', false) == false) {
        Patch::require_time(5);
        $a = DB::GetOne("SELECT\n            tc.constraint_name, tc.table_name, kcu.column_name,\n            ccu.table_name AS foreign_table_name,\n            ccu.column_name AS foreign_column_name\n        FROM\n            information_schema.table_constraints AS tc\n        JOIN information_schema.key_column_usage AS kcu\n          ON tc.constraint_name = kcu.constraint_name\n        JOIN information_schema.constraint_column_usage AS ccu\n          ON ccu.constraint_name = tc.constraint_name\n        WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name='recordbrowser_words_map' AND kcu.column_name='word_id';");
        if ($a) {
            DB::StartTrans();
            DB::Execute('ALTER TABLE recordbrowser_words_map DROP CONSTRAINT "' . $a . '"');
            DB::Execute('ALTER TABLE recordbrowser_words_map ADD CONSTRAINT "' . $a . '" FOREIGN KEY (word_id) REFERENCES recordbrowser_words_index(id) ON DELETE CASCADE ON UPDATE CASCADE');
            DB::CompleteTrans();
        }
        $alter_checkpoint->set('word_id', true);
    }
    if ($alter_checkpoint->get('tab_id', false) == false) {
        Patch::require_time(5);
        $b = DB::GetOne("SELECT\n            tc.constraint_name, tc.table_name, kcu.column_name,\n            ccu.table_name AS foreign_table_name,\n            ccu.column_name AS foreign_column_name\n        FROM\n            information_schema.table_constraints AS tc\n        JOIN information_schema.key_column_usage AS kcu\n          ON tc.constraint_name = kcu.constraint_name\n        JOIN information_schema.constraint_column_usage AS ccu\n          ON ccu.constraint_name = tc.constraint_name\n        WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name='recordbrowser_words_map' AND kcu.column_name='tab_id';");
        if ($b) {
            DB::StartTrans();
            DB::Execute('ALTER TABLE recordbrowser_words_map DROP CONSTRAINT "' . $b . '"');
            DB::Execute('ALTER TABLE recordbrowser_words_map ADD CONSTRAINT "' . $b . '" FOREIGN KEY (tab_id) REFERENCES recordbrowser_table_properties(id) ON DELETE CASCADE ON UPDATE CASCADE');
            DB::CompleteTrans();
        }
    }
    $checkpoint->done();
}
$indexes = Patch::checkpoint('indexes');
if (!$indexes->is_done()) {
    $idxs = DB::MetaIndexes('recordbrowser_words_map');
    $indexes->set('data', $idxs);
    $indexes->done();
}
$idxs = $indexes->get('data', array());
$checkpoint = Patch::checkpoint('word_index');
if (!$checkpoint->is_done() && !isset($idxs['rb_words_map__word_idx'])) {
    DB::CreateIndex('rb_words_map__word_idx', 'recordbrowser_words_map', 'word_id');
    $checkpoint->done();
}
$checkpoint = Patch::checkpoint('tab_index');
if (!$checkpoint->is_done() && !isset($idxs['rb_words_map__tab_idx'])) {
    DB::CreateIndex('rb_words_map__tab_idx', 'recordbrowser_words_map', 'tab_id');
    $checkpoint->done();
}
$checkpoint = Patch::checkpoint('record_tab_index');
if (!$checkpoint->is_done() && !isset($idxs['rb_words_map__record_tab_idx'])) {
    DB::CreateIndex('rb_words_map__record_tab_idx', 'recordbrowser_words_map', 'record_id,tab_id');
    $checkpoint->done();
}
$checkpoint = Patch::checkpoint('drop_index');
if (!$checkpoint->is_done() && isset($idxs['recordbrowser_words_map__idx'])) {
    DB::DropIndex('recordbrowser_words_map__idx', 'recordbrowser_words_map');
    $checkpoint->done();
}
<?php

defined("_VALID_ACCESS") || die('Direct access forbidden');
$checkpoint = Patch::checkpoint('indexes');
if (!$checkpoint->is_done()) {
    $done = $checkpoint->get('recordsets', array());
    $recordsets = Utils_RecordBrowserCommon::list_installed_recordsets();
    foreach ($recordsets as $tab => $caption) {
        Patch::require_time(1);
        if (!isset($done[$tab])) {
            @DB::CreateIndex($tab . '_act', $tab . '_data_1', 'active');
            @DB::CreateIndex($tab . '_idxed', $tab . '_data_1', 'indexed,active');
            $done[$tab] = true;
            $checkpoint->set('recordsets', $done);
        }
    }
    $checkpoint->done();
}
<?php

defined("_VALID_ACCESS") || die('Direct access forbidden');
$checkpoint = Patch::checkpoint('tables');
if (!$checkpoint->is_done()) {
    DB::CreateTable('recordbrowser_words_index', 'id I AUTO KEY,word C(3)', array('constraints' => ', UNIQUE(word)'));
    DB::CreateTable('recordbrowser_words_map', 'word_id I, tab C(64), record_id I, field_name C(32), position I', array('constraints' => ', FOREIGN KEY (word_id) REFERENCES recordbrowser_words_index(id)'));
    DB::CreateIndex('recordbrowser_words_map__idx', 'recordbrowser_words_map', 'word_id,tab,record_id,field_name');
    DB::CreateIndex('recordbrowser_words_map__idx2', 'recordbrowser_words_map', 'tab,record_id');
    $checkpoint->done();
}
$checkpoint2 = Patch::checkpoint('tabs');
if ($checkpoint2->has('tabs')) {
    $tabs = $checkpoint2->get('tabs');
} else {
    $tabs = DB::GetCol('SELECT tab FROM recordbrowser_table_properties');
}
foreach ($tabs as $i => $tab) {
    $checkpoint2->require_time(1);
    @PatchUtil::db_add_column($tab . '_data_1', 'indexed', 'I1 NOT NULL DEFAULT 0');
    @DB::CreateIndex($tab . '_idxed', $tab . '_data_1', 'indexed,active');
    unset($tabs[$i]);
    $checkpoint2->set('tabs', $tabs);
}
        Patch::set_message('Processing file: ' . $files . '/' . $files_qty);
        $files_checkpoint->require_time(2);
        $row['aid'] = $map[$row['attach_id']];
        @mkdir(DATA_DIR . '/Utils_Attachment/' . $row['aid']);
        @rename(DATA_DIR . '/Utils_Attachment/' . $row['local'] . '/' . $row['id'], DATA_DIR . '/Utils_Attachment/' . $row['aid'] . '/' . $row['id']);
        DB::Execute('UPDATE utils_attachment_file SET attach_id=%d WHERE id=%d', array($row['aid'], $row['id']));
        $files_checkpoint->set('files', $files);
    }
    $files_checkpoint->done();
}
Patch::set_message('Updating database');
$new_fk_checkpoint = Patch::checkpoint('create_new_fk');
if (!$new_fk_checkpoint->is_done()) {
    Patch::require_time(5);
    if (DB::is_mysql()) {
        DB::Execute('ALTER TABLE utils_attachment_file ADD FOREIGN KEY (attach_id) REFERENCES utils_attachment_data_1(id)');
    } else {
        DB::Execute('ALTER TABLE utils_attachment_file ADD CONSTRAINT attach_id_fk FOREIGN KEY (attach_id) REFERENCES utils_attachment_data_1');
    }
    $new_fk_checkpoint->done();
}
Patch::set_message('Finishing');
$cleanup_checkpoint = Patch::checkpoint('cleanup');
if (!$cleanup_checkpoint->is_done()) {
    Patch::require_time(3);
    DB::DropTable('utils_attachment_note');
    DB::DropTable('utils_attachment_link');
    Utils_RecordBrowserCommon::enable_watchdog('utils_attachment', array('Utils_AttachmentCommon', 'watchdog_label'));
    $cleanup_checkpoint->done();
}
Utils_WatchdogCommon::dont_notify(false);
Exemple #11
0
        $old = Utils_RecordBrowserCommon::get_records('premium_roundcube_custom_addon');
        ModuleManager::uninstall('Premium/RoundcubeCustomAddons');
    }
    foreach ($old as $i => $r) {
        if ($r['recordset'] == 'company' || $r['recordset'] == 'contact') {
            continue;
        }
        $old_checkpoint->require_time(2);
        Utils_RecordBrowserCommon::new_record('rc_related', array('recordset' => $r['recordset']));
        unset($old[$i]);
        $old_checkpoint->set('old', $old);
    }
    $old_checkpoint->done();
}
Patch::set_message('Processing related');
$related_checkpoint = Patch::checkpoint('related');
if (!$related_checkpoint->is_done()) {
    while (1) {
        $related = $related_checkpoint->get('related', array());
        if (empty($related)) {
            $related = Utils_RecordBrowserCommon::get_records('rc_mails_assoc', array(), array(), array(), 10);
            if (empty($related)) {
                break;
            }
        }
        foreach ($related as $i => $r) {
            $related_checkpoint->require_time(5);
            $mail = Utils_RecordBrowserCommon::get_record('rc_mails', $r['mail']);
            $mail['related'][] = $r['recordset'] . '/' . $r['record_id'];
            Utils_RecordBrowserCommon::update_record('rc_mails', $r['mail'], array('related' => $mail['related']));
            Utils_RecordBrowserCommon::delete_record('rc_mails_assoc', $r['id']);