* [story #70333] improve UI for converting old doc to new format.

This commit is contained in:
sunhao
2025-01-09 14:15:51 +08:00
committed by 刘刚
parent 704e26523e
commit 44ee12a59a
5 changed files with 40 additions and 11 deletions
+27 -8
View File
@@ -803,39 +803,58 @@ class docModel extends model
$docs = $this->dao->select('t1.*,t2.title,t2.content,t2.type as contentType,t2.rawContent,t1.version')->from(TABLE_DOC)->alias('t1')
->leftJoin(TABLE_DOCCONTENT)->alias('t2')->on('t1.id=t2.doc && t1.version=t2.version')
->where('t2.type')->eq('doc')
->where('t2.type')->in(array('doc', 'html'))
->andWhere('t1.status')->ne('draft')
->andWhere('t2.rawContent')->in(null)
->andWhere('t1.deleted')->eq('0')
->fetchAll('id', false);
$newDocs = array();
$oldDocs = array();
foreach($docs as $doc)
{
if($doc->contentType == 'doc' && empty($doc->rawContent) && !empty($doc->content)) $newDocs[] = $doc->id;
if($doc->contentType == 'html' && !empty($doc->content)) $oldDocs[] = $doc->id;
}
return array('doc' => $newDocs);
return array('doc' => $newDocs, 'html' => $oldDocs);
}
/**
* 迁移文档,设置新编辑器文档的 html。
* Migrate doc, set doc html generated by new editor.
* 迁移文档,设置新编辑器文档的 html,以及迁移老文档为新文档。
* Migrate doc, set doc html generated by new editor, and migrate old doc to new doc.
*
* @param int $docID
* @param int $version
* @param string $html
* @param string $content
*/
public function migrateDoc(int $docID, int $version, ?string $html): bool
public function migrateDoc(int $docID, int $version, ?string $content): bool
{
$docContent = $this->dao->select('*')->from(TABLE_DOCCONTENT)->where('doc')->eq($docID)->andWhere('version')->eq($version)->fetch();
if(empty($docContent)) return false;
if($docContent->type == 'doc')
if($docContent->type == 'html')
{
$newDocContent = clone $docContent;
$newDocContent->version = $docContent->version + 1;
$newDocContent->type = 'doc';
$newDocContent->rawContent = empty($content) ? json_encode(array('$migrate' => 'html', '$data' => $docContent->content)) : $content;
unset($newDocContent->id);
$this->dao->insert(TABLE_DOCCONTENT)->data($newDocContent)->exec();
$this->dao->update(TABLE_DOC)->set('version')->eq($newDocContent->version)->where('id')->eq($docID)->exec();
$this->loadModel('action')->create('doc', $docID, 'convertDoc', sprintf($this->lang->doc->docConvertComment, "#$docContent->version"));
}
elseif($docContent->type == 'doc')
{
if(empty($content))
{
$link = helper::createLink('doc', 'view', "docID=$docContent->doc");
$content = sprintf($this->lang->doc->previewNotAvailable, "<a href='$link' target='_blank'>#$docContent->doc $docContent->title</a>");
}
$rawContent = empty($docContent->rawContent) ? $docContent->content : $docContent->rawContent;
$this->dao->update(TABLE_DOCCONTENT)
->set('rawContent')->eq($rawContent)
->set('content')->eq($html)
->set('content')->eq($content)
->where('id')->eq($docContent->id)
->exec();
}