From d30e533e9265b1798a5109d774cd0c1ec73c7aa0 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 21 Jun 2021 10:56:04 +0800 Subject: [PATCH] * finish task #38761. --- module/bug/model.php | 10 ++++++-- module/doc/control.php | 10 ++++---- module/doc/model.php | 48 +++++++++++++++++++++++++++++++++------ module/story/model.php | 10 ++++++-- module/task/model.php | 10 ++++++-- module/testcase/model.php | 10 ++++++-- 6 files changed, 77 insertions(+), 21 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index 4a1bfeae97..6cac48e0fc 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -187,7 +187,10 @@ class bugModel extends model foreach($extendFields as $extendField) { - $bug->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $bug->{$extendField->field} = $this->post->{$extendField->field}[$i]; + if(is_array($bug->{$extendField->field})) $bug->{$extendField->field} = join(',', $bug->{$extendField->field}); + + $bug->{$extendField->field} = htmlspecialchars($bug->{$extendField->field}); $message = $this->checkFlowRule($extendField, $bug->{$extendField->field}); if($message) die(js::alert($message)); } @@ -724,7 +727,10 @@ class bugModel extends model foreach($extendFields as $extendField) { - $bug->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$bugID]); + $bug->{$extendField->field} = $this->post->{$extendField->field}[$bugID]; + if(is_array($bug->{$extendField->field})) $bug->{$extendField->field} = join(',', $bug->{$extendField->field}); + + $bug->{$extendField->field} = htmlspecialchars($bug->{$extendField->field}); $message = $this->checkFlowRule($extendField, $bug->{$extendField->field}); if($message) die(js::alert($message)); } diff --git a/module/doc/control.php b/module/doc/control.php index 6a757633ae..001181f13e 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -487,9 +487,8 @@ class doc extends control if($doc->contentType == 'markdown') { - $hyperdown = $this->app->loadClass('hyperdown'); - $doc->content = $hyperdown->makeHtml($doc->content); - $doc->digest = $hyperdown->makeHtml($doc->digest); + $doc->content = $this->doc->processMarkdown($doc->content); + $doc->digest = $this->doc->processMarkdown($$doc->digest); } /* Check priv when lib is product or project. */ @@ -917,9 +916,8 @@ class doc extends control if($doc->contentType == 'markdown') { - $hyperdown = $this->app->loadClass('hyperdown'); - $doc->content = $hyperdown->makeHtml($doc->content); - $doc->digest = $hyperdown->makeHtml($doc->digest); + $doc->content = $this->doc->processMarkdown($doc->content); + $doc->digest = $this->doc->processMarkdown($doc->digest); } } diff --git a/module/doc/model.php b/module/doc/model.php index cdf01db255..3f0f4c5689 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -430,6 +430,7 @@ class docModel extends model ->get(); /* Fix bug #2929. strip_tags($this->post->contentMarkdown, $this->config->allowedTags)*/ + $doc = $this->loadModel('file')->processImgURL($doc, $this->config->doc->editor->create['id'], $this->post->uid); $doc->contentMarkdown = $this->post->contentMarkdown; if($doc->acl == 'private') $doc->users = $this->app->user->account; @@ -441,7 +442,6 @@ class docModel extends model } $lib = $this->getLibByID($doc->lib); - $doc = $this->loadModel('file')->processImgURL($doc, $this->config->doc->editor->create['id'], $this->post->uid); $doc->product = $lib->product; $doc->project = $lib->project; $doc->execution = $lib->execution; @@ -456,13 +456,20 @@ class docModel extends model $docContent->content = $doc->contentType == 'html' ? $doc->content : $doc->contentMarkdown; $docContent->type = $doc->contentType; $docContent->version = 1; - if($doc->contentType == 'markdown') $docContent->content = str_replace('>', '>', $docContent->content); unset($doc->contentMarkdown); unset($doc->contentType); unset($doc->url); + $requiredFields = $this->config->doc->create->requiredFields; + $checkContent = strpos(",$requiredFields,", ',content,') !== false; + if($checkContent) + { + $requiredFields = trim(str_replace(',content,', ',', ",$requiredFields,"), ','); + if(empty($docContent->content)) return dao::$errors['content'] = sprintf($this->lang->error->notempty, $this->lang->doc->content); + } + $this->dao->insert(TABLE_DOC)->data($doc, 'content')->autoCheck() - ->batchCheck($this->config->doc->create->requiredFields, 'notempty') + ->batchCheck($requiredFields, 'notempty') ->exec(); if(!dao::isError()) { @@ -508,6 +515,7 @@ class docModel extends model ->join('mailto', ',') ->remove('comment,files,labels,uid,contactListMenu') ->get(); + $doc = $this->loadModel('file')->processImgURL($doc, $this->config->doc->editor->edit['id'], $this->post->uid); if($doc->contentType == 'markdown') $doc->content = $this->post->content; if($doc->acl == 'private') $doc->users = $oldDoc->addedBy; @@ -518,12 +526,9 @@ class docModel extends model $oldDoc->digest = $oldDocContent->digest; $oldDoc->content = $oldDocContent->content; $oldDoc->contentType = $oldDocContent->type; - - if($oldDocContent->type == 'markdown') $doc->content = str_replace('>', '>', $doc->content); } $lib = $this->getLibByID($doc->lib); - $doc = $this->loadModel('file')->processImgURL($doc, $this->config->doc->editor->edit['id'], $this->post->uid); $doc->product = $lib->product; $doc->execution = $lib->execution; if(isset($doc->type) and $doc->type == 'url') $doc->content = $doc->url; @@ -538,6 +543,14 @@ class docModel extends model if($change['field'] == 'content' or $change['field'] == 'title') $changed = true; } + $requiredFields = $this->config->doc->edit->requiredFields; + $checkContent = strpos(",$requiredFields,", ',content,') !== false; + if($checkContent) + { + $requiredFields = trim(str_replace(',content,', ',', ",$requiredFields,"), ','); + if(isset($doc->content) and empty($doc->content)) return dao::$errors['content'] = sprintf($this->lang->error->notempty, $this->lang->doc->content); + } + if($changed) { $doc->version = $oldDoc->version + 1; @@ -557,7 +570,7 @@ class docModel extends model $this->dao->update(TABLE_DOC)->data($doc, 'content') ->autoCheck() - ->batchCheck($this->config->doc->edit->requiredFields, 'notempty') + ->batchCheck($requiredFields, 'notempty') ->where('id')->eq((int)$docID) ->exec(); if(!dao::isError()) @@ -1904,4 +1917,25 @@ class docModel extends model if(!isset($treeMenu[$module->parent])) $treeMenu[$module->parent] = ''; $treeMenu[$module->parent] .= 'id] ? ' class="closed"' : '') . '>' . $li . ''; } + + /** + * Process markdown. + * + * @param string $markdown + * @access public + * @return string + */ + public function processMarkdown($markdown) + { + if(empty($markdown)) return false; + + $markdown = str_replace('&', '&', $markdown); + + $hyperdown = $this->app->loadClass('hyperdown'); + $content = $hyperdown->makeHtml($markdown); + + $content = htmlspecialchars_decode($content); + $content = fixer::stripDataTags($content); + return $content; + } } diff --git a/module/story/model.php b/module/story/model.php index ee3e938a28..5db7895ca3 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -390,7 +390,10 @@ class storyModel extends model foreach($extendFields as $extendField) { - $story->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $story->{$extendField->field} = $this->post->{$extendField->field}[$i]; + if(is_array($story->{$extendField->field})) $story->{$extendField->field} = join(',', $story->{$extendField->field}); + + $story->{$extendField->field} = htmlspecialchars($story->{$extendField->field}); $message = $this->checkFlowRule($extendField, $story->{$extendField->field}); if($message) die(js::alert($message)); } @@ -1034,7 +1037,10 @@ class storyModel extends model foreach($extendFields as $extendField) { - $story->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$storyID]); + $story->{$extendField->field} = $this->post->{$extendField->field}[$storyID]; + if(is_array($story->{$extendField->field})) $story->{$extendField->field} = join(',', $story->{$extendField->field}); + + $story->{$extendField->field} = htmlspecialchars($story->{$extendField->field}); $message = $this->checkFlowRule($extendField, $story->{$extendField->field}); if($message) die(js::alert($message)); } diff --git a/module/task/model.php b/module/task/model.php index 58cc708f77..381ec5cfc6 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -317,7 +317,10 @@ class taskModel extends model foreach($extendFields as $extendField) { - $data[$i]->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $data[$i]->{$extendField->field} = $this->post->{$extendField->field}[$i]; + if(is_array($data[$i]->{$extendField->field})) $data[$i]->{$extendField->field} = join(',', $data[$i]->{$extendField->field}); + + $data[$i]->{$extendField->field} = htmlspecialchars($data[$i]->{$extendField->field}); $message = $this->checkFlowRule($extendField, $data[$i]->{$extendField->field}); if($message) { @@ -1089,7 +1092,10 @@ class taskModel extends model foreach($extendFields as $extendField) { - $task->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$taskID]); + $task->{$extendField->field} = $this->post->{$extendField->field}[$taskID]; + if(is_array($task->{$extendField->field})) $task->{$extendField->field} = join(',', $task->{$extendField->field}); + + $task->{$extendField->field} = htmlspecialchars($task->{$extendField->field}); $message = $this->checkFlowRule($extendField, $task->{$extendField->field}); if($message) die(js::alert($message)); } diff --git a/module/testcase/model.php b/module/testcase/model.php index f60252da2a..c1cdcb0543 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -170,7 +170,10 @@ class testcaseModel extends model foreach($extendFields as $extendField) { - $data[$i]->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $data[$i]->{$extendField->field} = $this->post->{$extendField->field}[$i]; + if(is_array($data[$i]->{$extendField->field})) $data[$i]->{$extendField->field} = join(',', $data[$i]->{$extendField->field}); + + $data[$i]->{$extendField->field} = htmlspecialchars($data[$i]->{$extendField->field}); $message = $this->checkFlowRule($extendField, $data[$i]->{$extendField->field}); if($message) die(js::alert($message)); } @@ -854,7 +857,10 @@ class testcaseModel extends model foreach($extendFields as $extendField) { - $case->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$caseID]); + $case->{$extendField->field} = $this->post->{$extendField->field}[$caseID]; + if(is_array($case->{$extendField->field})) $case->{$extendField->field} = join(',', $case->{$extendField->field}); + + $case->{$extendField->field} = htmlspecialchars($case->{$extendField->field}); $message = $this->checkFlowRule($extendField, $case->{$extendField->field}); if($message) die(js::alert($message)); }