2023-05-16 10:50:42 +08:00

91 lines
3.1 KiB
PHP

<?php
/**
* Move reivew result to node.
*
* @access public
* @return void
*/
public function moveResult2Node()
{
$this->app->loadLang('approval');
$reviews = $this->dao->select('id,status,result,reviewedBy')->from(TABLE_REVIEW)->where('deleted')->eq('0')->fetchAll('id');
$results = $this->dao->select('*')->from(TABLE_REVIEWRESULT)
->where('type')->eq('review')
->fetchGroup('review', 'id');
$nodes = $this->dao->select('nodes')->from(TABLE_APPROVALFLOWSPEC)->orderBy('id_asc')->fetch('nodes');
foreach($reviews as $reviewID => $review)
{
$reviewers = explode(',', $review->reviewedBy);
if(isset($results[$reviewID]))
{
foreach($results[$reviewID] as $result)
{
if(in_array($result->reviewer, $reviewers))
{
$key = array_search($result->reviewer, $reviewers);
unset($reviewers[$key]);
}
}
}
else
{
$results[$reviewID] = array();
}
foreach($reviewers as $reviewer)
{
if(!$reviewer) continue;
$result = new stdclass();
$result->review = $reviewID;
$result->type = 'review';
$result->result = '';
$result->reviewer = $reviewer;
$result->createdDate = $review->createdDate;
$results[$reviewID][] = $result;
}
}
if(empty($reviews)) return;
foreach($reviews as $id => $review)
{
$approval = new stdclass();
$approval->flow = 1;
$approval->objectType = 'review';
$approval->objectID = $id;
$approval->version = 1;
$approval->nodes = $nodes;
$approval->status = $review->status == 'pass' ? 'done' : 'doing';
$this->dao->insert(TABLE_APPROVAL)->data($approval)->autoCheck()->exec();
$approvalID = $this->dao->lastInsertID();
$approvalObject = new stdclass();
$approvalObject->approval = $approvalID;
$approvalObject->objectType = 'review';
$approvalObject->objectID = $id;
$this->dao->insert(TABLE_APPROVALOBJECT)->data($approvalObject)->autoCheck()->exec();
if(isset($results[$id]))
{
$reviewResults = $results[$id];
foreach($reviewResults as $resultID => $result)
{
$node = new stdclass();
$node->approval = $approvalID;
$node->title = $this->lang->approval->common;
$node->account = $result->reviewer;
$node->result = $result->result ? ($result->result == 'pass' ? 'pass' : 'fail') : '';
$node->node = '3ewcj92p55e';
$node->multipleType = 'and';
$node->status = $result->result ? 'done' : 'doing';
$node->reviewedDate = $result->createdDate;
$this->dao->insert(TABLE_APPROVALNODE)->data($node)->autoCheck()->exec();
}
}
}
}