Ghi chú phát triển 4.5.03 - nukeviet/module-laws GitHub Wiki
Đổi bảng lĩnh vực, phân quyền quản lý theo lĩnh vực
ALTER TABLE `nv4_vi_laws_area`
ADD `sort` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Thứ tự tổng thể' AFTER `weight`,
ADD `lev` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Cấp bậc' AFTER `sort`,
ADD `numsubcat` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Số lĩnh vực con' AFTER `lev`,
ADD `subcatid` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Danh sách ID lĩnh vực con, phân cách bởi dấu phảy' AFTER `numsubcat`,
ADD INDEX `sort` (`sort`);
ALTER TABLE `nv4_vi_laws_admins` ADD `areaid` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0' AFTER `subjectid`;
ALTER TABLE `nv4_vi_laws_row` ADD `area_ids` VARCHAR(191) NOT NULL DEFAULT '' AFTER `code`, ADD INDEX `area_ids` (`area_ids`);
ALTER TABLE `nv4_vi_laws_row` ADD INDEX `cid` (`cid`);
ALTER TABLE `nv4_vi_laws_row` ADD INDEX `sid` (`sid`);
ALTER TABLE `nv4_vi_laws_row` ADD INDEX `eid` (`eid`);
ALTER TABLE `nv4_vi_laws_row` ADD INDEX `sgid` (`sgid`);
# Lưu ý cái này phải chạy từ trên xuống
UPDATE nv4_vi_laws_admins SET admin=3 WHERE admin=2;
UPDATE nv4_vi_laws_admins SET admin=2 WHERE admin=1;
Sau khi chạy hết các câu lệnh SQL bên trên thì chạy tool cập nhật như sau:
<?php
/**
* NukeViet Content Management System
* @version 4.x
* @author VINADES.,JSC <[email protected]>
* @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
*/
define('NV_SYSTEM', true);
define('NV_ROOTDIR', pathinfo(str_replace(DIRECTORY_SEPARATOR, '/', __FILE__), PATHINFO_DIRNAME));
require NV_ROOTDIR . '/includes/mainfile.php';
echo '<pre><code>';
echo "Bắt đầu cập nhật\n";
// Lấy hết các ngôn ngữ site đang chạy
$langs = $db->query('SELECT lang FROM ' . $db_config['prefix'] . '_setup_language WHERE setup = 1')->fetchAll();
$array_sitelang = [];
foreach ($langs as $lang) {
$array_sitelang[$lang['lang']] = $lang['lang'];
}
$prefix_table = '';
foreach ($array_sitelang as $lang) {
echo "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='laws'");
while (list ($mod, $mod_data) = $mquery->fetch(3)) {
echo "Module " . $mod . ":\n";
echo "Chỉnh lại cấu trúc dữ liệu: ";
try {
$prefix_table = $db_config['prefix'] . "_" . $lang . "_" . $mod_data;
nv_fix_cat_order();
echo "=> OK\n";
} catch (PDOException $e) {
echo "> ERROR: " . nv_htmlspecialchars($e->getMessage()) . "\n";
}
echo "Xử lý area_ids của các văn bản: OK\n";
$offset = 0;
while (1) {
$sql = "SELECT id FROM " . $db_config['prefix'] . "_" . $lang . "_" . $mod_data . "_row
ORDER BY id ASC LIMIT 1000 OFFSET " . $offset;
$result = $db->query($sql);
$num = 0;
while ($row = $result->fetch()) {
$num++;
$sql = "SELECT area_id FROM " . $db_config['prefix'] . "_" . $lang . "_" . $mod_data . "_row_area
WHERE row_id=" . $row['id'];
$area_id = $db->query($sql)->fetchAll(PDO::FETCH_COLUMN);
$area_id = empty($area_id) ? '' : implode(',', $area_id);
$sql = "UPDATE " . $db_config['prefix'] . "_" . $lang . "_" . $mod_data . "_row SET
area_ids=" . $db->quote($area_id) . " WHERE id=" . $row['id'];
$db->query($sql);
}
$result->closeCursor();
$offset += 1000;
if ($num <= 0) {
break;
}
}
}
}
$nv_Cache->delAll(true);
echo "Xong\n";
die('</code></pre>');
/**
* @param number $parentid
* @param number $order
* @param number $lev
* @return number
*/
function nv_fix_cat_order($parentid = 0, $order = 0, $lev = 0)
{
global $db, $prefix_table;
$sql = "SELECT id, parentid FROM " . $prefix_table . "_area WHERE parentid=" . $parentid . " ORDER BY weight ASC";
$result = $db->query($sql);
$array_cat_order = [];
while ($row = $result->fetch()) {
$array_cat_order[] = $row['id'];
}
$result->closeCursor();
$weight = 0;
if ($parentid > 0) {
++$lev;
} else {
$lev = 0;
}
foreach ($array_cat_order as $id_i) {
++$order;
++$weight;
$sql = "UPDATE " . $prefix_table . "_area SET weight=" . $weight . ", sort=" . $order . ", lev=" . $lev . " WHERE id=" . intval($id_i);
$db->query($sql);
$order = nv_fix_cat_order($id_i, $order, $lev);
}
$numsubcat = $weight;
if ($parentid > 0) {
$sql = "UPDATE " . $prefix_table . "_area SET numsubcat=" . $numsubcat;
if ($numsubcat == 0) {
$sql .= ", subcatid=''";
} else {
$sql .= ", subcatid='" . implode(',', $array_cat_order) . "'";
}
$sql .= " WHERE id=" . intval($parentid);
$db->query($sql);
}
return $order;
}