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);
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'])); } $files_checkpoint->set('files', $files); } $files_checkpoint->done(); } DB::Execute('DELETE FROM utils_attachment_download WHERE attach_file_id in (SELECT id FROM utils_attachment_file WHERE filestorage_id=0)'); DB::Execute('DELETE FROM utils_attachment_file WHERE filestorage_id=0'); DB::Execute('ALTER TABLE utils_attachment_file ADD FOREIGN KEY (filestorage_id) REFERENCES utils_filestorage_files(id)');
if (empty($old) && ModuleManager::is_installed('Premium/RoundcubeCustomAddons') >= 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']));