* [misc] support for saving draft even doc is released.

This commit is contained in:
sunhao
2025-02-21 11:22:06 +08:00
committed by 刘刚
parent 1d35094ff1
commit 6b2a7142d2
3 changed files with 23 additions and 41 deletions
+1 -1
View File
@@ -640,7 +640,7 @@ class doc extends control
->removeIF($this->post->product === false, 'product')
->removeIF($this->post->execution === false, 'execution')
->get();
$result = $this->doc->update($docID, $docData);
$result = $this->doc->update($docID, $docData, $doc);
if(dao::isError())
{
if(!empty(dao::$errors['lib']) || !empty(dao::$errors['keywords'])) return $this->send(array('result' => 'fail', 'message' => dao::getError(), 'callback' => "zui.Modal.open({id: 'modalBasicInfo'});"));
+20 -33
View File
@@ -1768,17 +1768,15 @@ class docModel extends model
* 编辑一个文档。
* Update a doc.
*
* @param int $docID
* @param object $doc
* @param int $docID
* @param object $doc
* @param object $oldDoc
* @access public
* @return array|string|bool
*/
public function update(int $docID, object $doc): array|string|bool
public function update(int $docID, object $doc, ?object $oldDoc = null): array|string|bool
{
$oldDoc = $this->dao->select('*')->from(TABLE_DOC)->where('id')->eq($docID)->fetch();
list($doc, $oldDocContent) = $this->processDocForUpdate($oldDoc, $doc);
if(dao::isError()) return false;
/* 检查必填项。 Check required fields. */
$requiredFields = $doc->status == 'draft' ? 'title' : $this->config->doc->edit->requiredFields;
if(strpos(",$requiredFields,", ',content,') !== false)
{
@@ -1786,12 +1784,17 @@ class docModel extends model
if(isset($doc->content) && empty($doc->content)) return dao::$errors['content'] = sprintf($this->lang->error->notempty, $this->lang->doc->content);
}
$files = $this->loadModel('file')->saveUpload('doc', $docID);
$files = $this->loadModel('file')->saveUpload('doc', $docID);
if(dao::isError()) return false;
$oldDoc = $oldDoc ? $oldDoc : $this->getByID($docID);
$changes = common::createChanges($oldDoc, $doc);
$oldRawContent = isset($oldDocContent->rawContent) ? $oldDocContent->rawContent : '';
$oldRawContent = isset($oldDoc->rawContent) ? $oldDoc->rawContent : '';
$newRawContent = isset($doc->rawContent) ? $doc->rawContent : '';
$onlyRawChanged = $oldRawContent != $newRawContent;
$changed = $files || $onlyRawChanged ? true : false;
$isDraft = $doc->status == 'draft';
$version = $isDraft ? 0 : ($oldDoc->version + 1);
foreach($changes as $change)
{
if($change['field'] == 'content' || $change['field'] == 'title' || $change['field'] == 'rawContent') $changed = true;
@@ -1802,31 +1805,15 @@ class docModel extends model
}
}
if($onlyRawChanged) $changes[] = array('field' => 'content', 'old' => $oldDoc->content, 'new' => $doc->content);
if($changed)
{
$docContent = new stdclass();
$docContent->doc = $oldDoc->id;
$docContent->title = $doc->title;
$docContent->content = isset($doc->content) ? $doc->content : '';
$docContent->files = $oldDocContent->files;
$docContent->type = isset($doc->contentType) ? $doc->contentType : $oldDocContent->type;
if($files) $docContent->files .= ',' . join(',', array_keys($files));
$docContent->rawContent = $newRawContent;
$docContent->files = trim($docContent->files, ',');
if(isset($doc->digest)) $docContent->digest = $doc->digest;
if($oldDoc->status == 'draft') $this->dao->update(TABLE_DOCCONTENT)->data($docContent)->where('id')->eq($oldDocContent->id)->exec();
if($oldDoc->status != 'draft')
{
$doc->version = $oldDoc->version + 1;
$docContent->version = $doc->version;
$this->dao->replace(TABLE_DOCCONTENT)->data($docContent)->exec();
}
}
if($changed) $this->saveDocContent($docID, $doc, $version, array_keys($files));
if(dao::isError()) return false;
unset($doc->contentType);
unset($doc->rawContent);
$doc->draft = isset($doc->content) ? $doc->content : '';
$doc->version = max($version, $oldDoc->version);
$doc->draft = $isDraft ? $doc->content : '';
$doc->status = $isDraft ? $oldDoc->status : 'normal';
$doc->content = $doc->title;
$this->dao->update(TABLE_DOC)->data($doc, 'content')
->autoCheck()
->batchCheck($requiredFields, 'notempty')
@@ -1834,8 +1821,8 @@ class docModel extends model
->exec();
if(dao::isError()) return false;
$this->file->updateObjectID($this->post->uid, $docID, 'doc');
return array('changes' => $changes, 'files' => $files);
if($files) $this->file->updateObjectID($this->post->uid, $docID, 'doc');
return array('changes' => $changes, 'files' => array_keys($files));
}
/**
+2 -7
View File
@@ -641,8 +641,8 @@ class docZen extends doc
if(!empty($changes))
{
$newType = $_POST['status'];
if($doc->status == 'draft' && $newType == 'normal') $action = 'releasedDoc';
if($doc->status == $newType) $action = 'Edited';
if($doc->status == 'draft' && $newType == 'normal') $action = 'releasedDoc';
if($changes || $doc->status == $newType || $newType == 'normal') $action = 'Edited';
}
$fileAction = '';
@@ -673,11 +673,6 @@ class docZen extends doc
if(isInModal()) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => true));
if(!empty($doc->rawContent)) $doc->content = $doc->rawContent;
if($doc->contentType === 'doc' && is_string($doc->content)) $doc->content = htmlspecialchars_decode($doc->content);
if(is_string($doc->title)) $doc->title = htmlspecialchars_decode($doc->title);
if(!empty($doc->keywords) && is_string($doc->keywords)) $doc->keywords = htmlspecialchars_decode($doc->keywords);
unset($doc->rawContent);
$doc->isCollector = strpos($doc->collector, ',' . $this->app->user->account . ',') !== false;
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => $link, 'doc' => $doc));
}