Files
blog-source/var/Utils/Upgrade.php
2026-03-04 00:23:03 +08:00

99 lines
2.9 KiB
PHP
Executable File

<?php
namespace Utils;
use Typecho\Db;
use Widget\Options;
/**
* 升级程序
*
* @category typecho
* @package Upgrade
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org)
* @license GNU General Public License 2.0
*/
class Upgrade
{
/**
* @param Db $db
* @param Options $options
*/
public static function v1_3_0(Db $db, Options $options)
{
$routingTable = $options->routingTable;
$routingTable['comment_page'] = [
'url' => '[permalink:string]/comment-page-[commentPage:digital]',
'widget' => '\Widget\CommentPage',
'action' => 'action'
];
$routingTable['feed'] = [
'url' => '/feed[feed:string:0]',
'widget' => '\Widget\Feed',
'action' => 'render'
];
unset($routingTable[0]);
$db->query($db->update('table.options')
->rows(['value' => json_encode($routingTable)])
->where('name = ?', 'routingTable'));
// fix options->commentsRequireURL
$db->query($db->update('table.options')
->rows(['name' => 'commentsRequireUrl'])
->where('name = ?', 'commentsRequireURL'));
// fix draft
$db->query($db->update('table.contents')
->rows(['type' => 'revision'])
->where('parent <> 0 AND (type = ? OR type = ?)', 'post_draft', 'page_draft'));
// fix attachment serialize
$lastId = 0;
do {
$rows = $db->fetchAll(
$db->select('cid', 'text')->from('table.contents')
->where('cid > ?', $lastId)
->where('type = ?', 'attachment')
->order('cid', Db::SORT_ASC)
->limit(100)
);
foreach ($rows as $row) {
if (strpos($row['text'], 'a:') !== 0) {
continue;
}
$value = @unserialize($row['text']);
if ($value !== false) {
$db->query($db->update('table.contents')
->rows(['text' => json_encode($value)])
->where('cid = ?', $row['cid']));
}
$lastId = $row['cid'];
}
} while (count($rows) === 100);
$rows = $db->fetchAll($db->select()->from('table.options'));
foreach ($rows as $row) {
if (
in_array($row['name'], ['plugins', 'actionTable', 'panelTable'])
|| strpos($row['name'], 'plugin:') === 0
|| strpos($row['name'], 'theme:') === 0
) {
$value = @unserialize($row['value']);
if ($value !== false) {
$db->query($db->update('table.options')
->rows(['value' => json_encode($value)])
->where('name = ?', $row['name']));
}
}
}
}
}