Hướng dẫn lấy lại tên tác giả bài viết khi cập nhật lên NukeViet 4.5.00

Khi cập nhật NukeViet 4.4 lên 4.5 trong quản trị module tin tức và module ảo của nó sẽ bị mất dữ liệu tại cột "Tác giả" nếu bài đăng đó không điền thông tin "Tác giả bài viết". Ở phiên bản 4.4 cột này sẽ hiển thị tên người đăng bài. Tool này giúp cập nhật người đăng bài thành tác giả bài viết.

Tạo file vinades/update_author.php với nội dung như sau

<?php

/**
 * NukeViet Content Management System
 * @version 4.x
 * @author VINADES.,JSC <contact@vinades.vn>
 * @copyright (C) 2009-2021 VINADES.,JSC. All rights reserved
 * @license GNU/GPL version 2 or any later version
 * @see https://github.com/nukeviet The NukeViet CMS GitHub project
 */

$_SERVER['HTTP_HOST'] = 'tmp.nukeviet4.my';
$_SERVER['HTTPS'] = 'off';

// Sửa cái này nếu chạy ngôn ngữ khác tiếng Việt
$_GET['language'] = 'vi';

// Chỗ này khỏi sửa
$_SERVER['SERVER_NAME'] = 'localhost';
$_SERVER['SERVER_PROTOCOL'] = 'http';
$_SERVER['REQUEST_URI'] = '';
$_SERVER['SERVER_PORT'] = '80';
$_SERVER['PHP_SELF'] = '';
$_SERVER['HTTP_CLIENT_IP'] = '127.0.0.1';

define('NV_SYSTEM', true);
// Nếu file này đặt vào thư mục gốc ngang hàng index.php thì bỏ cái đoạn /..
define('NV_ROOTDIR', str_replace(DIRECTORY_SEPARATOR, '/', realpath(pathinfo(__file__, PATHINFO_DIRNAME) . '/..')));

require NV_ROOTDIR . '/includes/mainfile.php';
require NV_ROOTDIR . '/includes/core/user_functions.php';
$sql = 'SELECT lang FROM ' . $db_config['prefix'] . '_setup_language WHERE setup=1 ORDER BY weight ASC';
$array_sitelangs = $db->query($sql)->fetchAll(PDO::FETCH_COLUMN);

foreach ($array_sitelangs as $lang) {
    echo "Cập nhật ngôn ngữ " . $lang . "\n";

    // Lấy tất cả các module và module ảo của nó
    $mquery = $db->query('SELECT title, module_data FROM ' . $db_config['prefix'] . '_' . $lang . "_modules WHERE module_file = 'news'");
    while (list ($mod, $mod_data) = $mquery->fetch(3)) {
        echo "Cập nhật module " . $mod . "\n";

        // Quét từng bài viết xử lý
        $sql = "SELECT id, admin_id FROM " . $db_config['prefix'] . '_' . $lang . '_' . $mod_data . "_rows";
        $result = $db->query($sql);

        while ($row = $result->fetch()) {
            if (!empty($row['admin_id'])) {
                $sql = 'SELECT userid, username, first_name, last_name FROM ' . NV_USERS_GLOBALTABLE . ' WHERE userid=' . $row['admin_id'];
                $admin = $db->query($sql)->fetch();

                if (!empty($admin)) {
                    $admin['full_name'] = nv_show_name_user($admin['first_name'], $admin['last_name'], $admin['username']);
                    $admin['alias'] = strtolower(change_alias($admin['full_name']));

                    // Kiểm tra xem author có chưa
                    $sql = "SELECT id FROM " . $db_config['prefix'] . '_' . $lang . '_' . $mod_data . "_author
                    WHERE uid=" . $admin['userid'];
                    $admin['id'] = $db->query($sql)->fetchColumn();

                    // Thêm mới
                    if (empty($admin['id'])) {
                        try {
                            $sql = "INSERT INTO " . $db_config['prefix'] . '_' . $lang . '_' . $mod_data . "_author (
                                uid, alias, pseudonym, description, add_time, edit_time, active, numnews
                            ) VALUES (
                                " . $admin['userid'] . ", " . $db->quote($admin['alias']) . ", " . $db->quote($admin['full_name']) . ",
                                '', " . NV_CURRENTTIME . ", 0, 1, 0
                            )";
                            $db->query($sql);
                            $admin['id'] = $db->lastInsertId();
                        } catch (Exception $e) {
                            echo print_r($e, true);
                            die("\nLỗi thêm admin\n");
                        }

                        if (empty($admin['id'])) {
                            die("Lỗi thêm tác giả\n");
                        }

                        echo "Thêm mới tác giả " . $admin['full_name'] . "\n";
                    }

                    // Thêm vào tác giả
                    $sql = "INSERT IGNORE INTO " . $db_config['prefix'] . '_' . $lang . '_' . $mod_data . "_authorlist (
                        id, aid, alias, pseudonym
                    ) VALUES (
                        " . $row['id'] . ", " . $admin['id'] . ",
                        " . $db->quote($admin['alias']) . ", " . $db->quote($admin['full_name']) . "
                    )";
                    if ($db->exec($sql)) {
                        echo "Gán bài viết #" . $row['id'] . " cho tác giả " . $admin['full_name'] . "\n";

                        // Cập nhật số bài viết
                        $sql = "UPDATE " . $db_config['prefix'] . '_' . $lang . '_' . $mod_data . "_author
                        SET numnews=numnews+1 WHERE id=" . $admin['id'];
                        $db->exec($sql);
                    }
                }
            }
        }
    }
}

echo "\nKết thúc\n";

Sau đó từ SSH tại thư mục vinades chạy php update_author.php

Lưu ý: Chỉnh sửa các giá trị sau

  • $_SERVER['HTTP_HOST'] = 'tmp.nukeviet4.my'; chỉnh tmp.nukeviet4.my thành domain của bạn
  • $_SERVER['HTTPS'] = 'off'; chỉnh off thành on nếu site bạn chạy https
  • $_GET['language'] = 'vi'; chỉnh vi thành en nếu site bạn chạy tiếng Anh
Bình luận (0)